Compare commits
1 Commits
main
...
fix/storyb
Author | SHA1 | Date | |
---|---|---|---|
86732339ea |
@ -1,11 +1,12 @@
|
|||||||
import CreateRandomInvoiceButtonVM from "@/app/[lang]/dashboard/vm/create-random-invoice-button-vm";
|
import CreateRandomInvoiceButtonVM from "@/app/[lang]/dashboard/vm/create-random-invoice-button-vm";
|
||||||
import di from "@/bootstrap/di/init-di";
|
import di from "@/bootstrap/di/init-di";
|
||||||
import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice-usecase";
|
import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice-impl.usecase";
|
||||||
|
import { createInvoiceUsecaseKey } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
|
||||||
|
|
||||||
export default function dashboardAppModule() {
|
export default function dashboardAppModule() {
|
||||||
const dashboardDi = di.createChildContainer();
|
const dashboardDi = di.createChildContainer();
|
||||||
|
|
||||||
dashboardDi.register(createInvoiceUsecase.name, {
|
dashboardDi.register(createInvoiceUsecaseKey, {
|
||||||
useValue: createInvoiceUsecase,
|
useValue: createInvoiceUsecase,
|
||||||
});
|
});
|
||||||
dashboardDi.register(
|
dashboardDi.register(
|
||||||
|
@ -4,17 +4,20 @@ import useThrottle from "@/bootstrap/helpers/hooks/use-throttle";
|
|||||||
import BaseVM from "@/bootstrap/helpers/vm/base-vm";
|
import BaseVM from "@/bootstrap/helpers/vm/base-vm";
|
||||||
import langKey from "@/bootstrap/i18n/dictionaries/lang-key";
|
import langKey from "@/bootstrap/i18n/dictionaries/lang-key";
|
||||||
import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice-param";
|
import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice-param";
|
||||||
import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice-usecase";
|
import {
|
||||||
|
CreateInvoiceUsecase,
|
||||||
|
createInvoiceUsecaseKey,
|
||||||
|
} from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
|
||||||
import { faker } from "@faker-js/faker";
|
import { faker } from "@faker-js/faker";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
export default class CreateRandomInvoiceButtonVM extends BaseVM<ButtonVm> {
|
export default class CreateRandomInvoiceButtonVM extends BaseVM<ButtonVm> {
|
||||||
private createInvoice: typeof createInvoiceUsecase;
|
private createInvoice: CreateInvoiceUsecase;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.createInvoice = this.di.resolve(createInvoiceUsecase.name);
|
this.createInvoice = this.di.resolve(createInvoiceUsecaseKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
useVM(): ButtonVm {
|
useVM(): ButtonVm {
|
||||||
|
@ -4,7 +4,7 @@ import { DiContext, useDI } from "@/bootstrap/di/di-context";
|
|||||||
import mockedModuleDi from "@/bootstrap/di/mocked-module-di";
|
import mockedModuleDi from "@/bootstrap/di/mocked-module-di";
|
||||||
import Story from "@/bootstrap/helpers/view/storybook-base-template-type";
|
import Story from "@/bootstrap/helpers/view/storybook-base-template-type";
|
||||||
import getArgVM from "@/bootstrap/helpers/view/storybook-with-arg-vm";
|
import getArgVM from "@/bootstrap/helpers/view/storybook-with-arg-vm";
|
||||||
import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice-usecase";
|
import { createInvoiceUsecaseKey } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
|
||||||
import type { Meta } from "@storybook/react";
|
import type { Meta } from "@storybook/react";
|
||||||
import { useRef } from "react";
|
import { useRef } from "react";
|
||||||
|
|
||||||
@ -36,30 +36,32 @@ export const Primary: Story = {
|
|||||||
export const WithVM: Story = {
|
export const WithVM: Story = {
|
||||||
decorators: [
|
decorators: [
|
||||||
(Story) => {
|
(Story) => {
|
||||||
const di = mockedModuleDi([
|
const di = useRef(
|
||||||
{
|
mockedModuleDi([
|
||||||
token: CreateRandomInvoiceButtonVM,
|
{
|
||||||
provider: CreateRandomInvoiceButtonVM,
|
token: CreateRandomInvoiceButtonVM,
|
||||||
},
|
provider: CreateRandomInvoiceButtonVM,
|
||||||
{
|
},
|
||||||
token: createInvoiceUsecase.name,
|
{
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-console
|
token: createInvoiceUsecaseKey,
|
||||||
provider: (args: any) => console.log("clicked", args),
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-console
|
||||||
},
|
provider: (args: any) => console.log("clicked", args),
|
||||||
]);
|
},
|
||||||
return <Story di={di} />;
|
]),
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<DiContext.Provider value={di.current}>
|
||||||
|
<Story di={di.current} />
|
||||||
|
</DiContext.Provider>
|
||||||
|
);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
render: (_, globalProps) => {
|
render: () => {
|
||||||
function Child() {
|
function Child() {
|
||||||
const di = useDI();
|
const di = useDI();
|
||||||
const vm = useRef(di.resolve(CreateRandomInvoiceButtonVM));
|
const vm = useRef(di.resolve(CreateRandomInvoiceButtonVM));
|
||||||
return <Button vm={vm.current} memoizedByVM={false} />;
|
return <Button vm={vm.current} memoizedByVM={false} />;
|
||||||
}
|
}
|
||||||
return (
|
return <Child />;
|
||||||
<DiContext.Provider value={globalProps.di}>
|
|
||||||
<Child />
|
|
||||||
</DiContext.Provider>
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
"use server";
|
|
||||||
|
|
||||||
import { ApiEither } from "@/feature/common/data/api-task";
|
import { ApiEither } from "@/feature/common/data/api-task";
|
||||||
import ParamsFailure from "@/feature/common/failures/params-failure";
|
import ParamsFailure from "@/feature/common/failures/params-failure";
|
||||||
import serverDi from "@/feature/common/server-di";
|
import serverDi from "@/feature/common/server-di";
|
||||||
@ -10,13 +8,14 @@ import {
|
|||||||
InvoiceParam,
|
InvoiceParam,
|
||||||
invoiceSchema,
|
invoiceSchema,
|
||||||
} from "@/feature/core/invoice/domain/param/invoice-param";
|
} from "@/feature/core/invoice/domain/param/invoice-param";
|
||||||
|
import { CreateInvoiceUsecase } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
|
||||||
import { invoiceModuleKey } from "@/feature/core/invoice/invoice-module-key";
|
import { invoiceModuleKey } from "@/feature/core/invoice/invoice-module-key";
|
||||||
import { pipe } from "fp-ts/lib/function";
|
import { pipe } from "fp-ts/lib/function";
|
||||||
import { chain, fromNullable, left, map, right } from "fp-ts/lib/TaskEither";
|
import { chain, fromNullable, left, map, right } from "fp-ts/lib/TaskEither";
|
||||||
|
|
||||||
export default async function createInvoiceUsecase(
|
const createInvoiceUsecase: CreateInvoiceUsecase = async (
|
||||||
params: InvoiceParam,
|
params: InvoiceParam,
|
||||||
): Promise<ApiEither<string>> {
|
): Promise<ApiEither<string>> => {
|
||||||
const repo = serverDi(invoiceModuleKey).resolve<InvoiceRepo>(invoiceRepoKey);
|
const repo = serverDi(invoiceModuleKey).resolve<InvoiceRepo>(invoiceRepoKey);
|
||||||
|
|
||||||
return pipe(
|
return pipe(
|
||||||
@ -29,4 +28,6 @@ export default async function createInvoiceUsecase(
|
|||||||
}),
|
}),
|
||||||
chain((params) => repo.createInvoice(params)),
|
chain((params) => repo.createInvoice(params)),
|
||||||
)();
|
)();
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default createInvoiceUsecase;
|
@ -0,0 +1,8 @@
|
|||||||
|
import { ApiEither } from "@/feature/common/data/api-task";
|
||||||
|
import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice-param";
|
||||||
|
|
||||||
|
export type CreateInvoiceUsecase = (
|
||||||
|
param: InvoiceParam,
|
||||||
|
) => Promise<ApiEither<string>>;
|
||||||
|
|
||||||
|
export const createInvoiceUsecaseKey = "createInvoiceUsecaseKey";
|
Loading…
x
Reference in New Issue
Block a user