304 lines
13 KiB
TypeScript
304 lines
13 KiB
TypeScript
"use client";
|
|
|
|
import type { BrandFilingBrand } from "@/app/intake/brand-filing/brandFilingConfig";
|
|
import type { BomLibraryKey } from "@/app/intake/bom-library/BomLibraryDomain";
|
|
import { IntakeEmptyDetail } from "@/app/intake/IntakeMainLayout";
|
|
import type { IntakePrimaryDomainContentProps } from "@/app/intake/IntakePrimaryDomainContent";
|
|
import type { IntakeRightWorkbenchPanelProps } from "@/app/intake/IntakeRightWorkbenchPanel";
|
|
import type { IntakeWorkspaceContentPanelProps } from "@/app/intake/IntakeWorkspaceContentPanel";
|
|
import type { IntakeClientProps } from "@/app/intake/intakeClientTypes";
|
|
import type {
|
|
IntegratedPendingSeriesRow,
|
|
IntakeEntryTab,
|
|
IntakeSection,
|
|
IntakeWorkspaceTab,
|
|
ProductDevelopmentKind,
|
|
WorkbenchSku,
|
|
WorkspaceProductDetailState,
|
|
WorkspaceProductMode,
|
|
} from "@/app/intake/intakeWorkspaceTypes";
|
|
import type { NonIntegratedProductKindFilter } from "@/app/intake/product-development/nonIntegratedListState";
|
|
import type { ProductPatentLedgerTarget } from "@/app/intake/product-patent/ProductPatentDomain";
|
|
import type { RawMaterialLibraryKey } from "@/app/intake/raw-material-library/RawMaterialLibraryDomain";
|
|
import type { NonIntegratedProductRecord } from "@/app/intake/non-integrated/nonIntegratedStorage";
|
|
import type {
|
|
MaterialCategoryDTO,
|
|
MaterialDTO,
|
|
SubstrateDictionaryBundleDTO,
|
|
SubstrateDTO,
|
|
} from "@/server/services";
|
|
|
|
type IntakeViewUser = IntakeClientProps["user"];
|
|
|
|
export function buildIntakeWorkspacePanelProps(params: {
|
|
workspaceTabs: IntakeWorkspaceTab[];
|
|
activeWorkspaceTabId: string | null;
|
|
activeWorkspaceTab: IntakeWorkspaceTab | null;
|
|
user: IntakeViewUser;
|
|
canManageSpuRuleLibrary: boolean;
|
|
canEditBomLibrary: boolean;
|
|
canViewProductPatentLedger: boolean;
|
|
canEditProductPatentLedger: boolean;
|
|
canViewProductPatentDashboard: boolean;
|
|
activeProductWorkspaceNeedsFullLoad: boolean;
|
|
activeProductWorkspaceLoadError: string;
|
|
seriesNameOptions: string[];
|
|
existingSeriesNames: string[];
|
|
existingSeriesComponentDetailNames: string[];
|
|
seriesDraftSkuOptions: WorkbenchSku[];
|
|
materialLibrarySubstrates: SubstrateDTO[];
|
|
materialLibraryFinishes: MaterialDTO[];
|
|
materialLibraryCategories: MaterialCategoryDTO[];
|
|
materialLibraryDictionaries: SubstrateDictionaryBundleDTO;
|
|
selectedRawMaterialName: string;
|
|
nonIntegratedProducts: NonIntegratedProductRecord[];
|
|
onRetryProductWorkspaceLoad: (tabId: string) => void;
|
|
onProductSaved: (product: NonIntegratedProductRecord) => void;
|
|
onProductWorkspaceDetailStateChange: (
|
|
detailState: WorkspaceProductDetailState,
|
|
) => void;
|
|
onOpenProductPatentLedger: (target: ProductPatentLedgerTarget) => void;
|
|
onOpenProductWorkspace: (
|
|
product: NonIntegratedProductRecord,
|
|
mode: WorkspaceProductMode,
|
|
) => void;
|
|
onOpenRawMaterialProcessConfig: (materialName: string) => void;
|
|
onActivatePendingEntryListWorkspace: (
|
|
productDevelopmentKind?: ProductDevelopmentKind,
|
|
entryTabOverride?: IntakeEntryTab,
|
|
) => void;
|
|
onCloseNewProductWorkspace: (tabId: string) => void;
|
|
onMaterialLibraryFinishesChange: (finishes: MaterialDTO[]) => void;
|
|
onActivate: (tabId: string) => void;
|
|
onClose: (tabId: string) => void;
|
|
}): Omit<IntakeWorkspaceContentPanelProps, "mainContent"> {
|
|
return {
|
|
tabs: params.workspaceTabs,
|
|
activeTabId: params.activeWorkspaceTabId,
|
|
activeWorkspaceTab: params.activeWorkspaceTab,
|
|
currentUser: params.user,
|
|
canManageSpuRuleLibrary: params.canManageSpuRuleLibrary,
|
|
canEditBomLibrary: params.canEditBomLibrary,
|
|
canViewProductPatentLedger: params.canViewProductPatentLedger,
|
|
canEditProductPatentLedger: params.canEditProductPatentLedger,
|
|
canViewProductPatentDashboard: params.canViewProductPatentDashboard,
|
|
activeProductWorkspaceNeedsFullLoad:
|
|
params.activeProductWorkspaceNeedsFullLoad,
|
|
activeProductWorkspaceLoadError: params.activeProductWorkspaceLoadError,
|
|
seriesNameOptions: params.seriesNameOptions,
|
|
existingSeriesNames: params.existingSeriesNames,
|
|
existingSeriesComponentDetailNames:
|
|
params.existingSeriesComponentDetailNames,
|
|
seriesDraftSkuOptions: params.seriesDraftSkuOptions,
|
|
materialLibrarySubstrates: params.materialLibrarySubstrates,
|
|
materialLibraryFinishes: params.materialLibraryFinishes,
|
|
materialLibraryCategories: params.materialLibraryCategories,
|
|
materialLibraryDictionaries: params.materialLibraryDictionaries,
|
|
selectedRawMaterialName: params.selectedRawMaterialName,
|
|
nonIntegratedProducts: params.nonIntegratedProducts,
|
|
onRetryProductWorkspaceLoad: params.onRetryProductWorkspaceLoad,
|
|
onProductSaved: params.onProductSaved,
|
|
onProductWorkspaceDetailStateChange:
|
|
params.onProductWorkspaceDetailStateChange,
|
|
onOpenProductPatentLedger: params.onOpenProductPatentLedger,
|
|
onOpenProductWorkspace: params.onOpenProductWorkspace,
|
|
onOpenRawMaterialProcessConfig: params.onOpenRawMaterialProcessConfig,
|
|
onActivatePendingEntryListWorkspace:
|
|
params.onActivatePendingEntryListWorkspace,
|
|
onCloseNewProductWorkspace: params.onCloseNewProductWorkspace,
|
|
onMaterialLibraryFinishesChange: params.onMaterialLibraryFinishesChange,
|
|
onActivate: params.onActivate,
|
|
onClose: params.onClose,
|
|
};
|
|
}
|
|
|
|
export function buildIntakePrimaryDomainProps(params: {
|
|
activeSection: IntakeSection;
|
|
pendingEntryTab: IntakeEntryTab;
|
|
skuList: IntegratedPendingSeriesRow[];
|
|
nonIntegratedProducts: NonIntegratedProductRecord[];
|
|
productDevelopmentProgressProducts: NonIntegratedProductRecord[];
|
|
initialNonIntegratedPageInfo: IntakeClientProps["initialNonIntegratedPageInfo"];
|
|
canDeleteNonIntegratedProducts: boolean;
|
|
canCreateNonIntegratedProducts: boolean;
|
|
canUseDesignControlledProductData: boolean;
|
|
canViewProductDevelopmentList: boolean;
|
|
canViewSeriesDevelopmentList: boolean;
|
|
canViewStockDevelopmentList: boolean;
|
|
canViewProductProgressDashboard: boolean;
|
|
user: IntakeViewUser;
|
|
canOpenProductForEdit: (product: NonIntegratedProductRecord) => boolean;
|
|
onProductsChange: (
|
|
productDevelopmentKind: ProductDevelopmentKind,
|
|
nextProducts: NonIntegratedProductRecord[],
|
|
productKindFilter?: NonIntegratedProductKindFilter,
|
|
) => void;
|
|
onOpenProductWorkspace: (
|
|
product: NonIntegratedProductRecord,
|
|
mode: WorkspaceProductMode,
|
|
) => void;
|
|
onOpenNewProductWorkspace: (
|
|
productDevelopmentKind: ProductDevelopmentKind,
|
|
) => void;
|
|
canViewBomLibrary: boolean;
|
|
canEditBomLibrary: boolean;
|
|
activeBomLibrary: BomLibraryKey;
|
|
materialLibrarySubstrates: SubstrateDTO[];
|
|
materialLibraryFinishes: MaterialDTO[];
|
|
materialLibraryCategories: MaterialCategoryDTO[];
|
|
materialLibraryDictionaries: SubstrateDictionaryBundleDTO;
|
|
onMaterialLibraryFinishesChange: (finishes: MaterialDTO[]) => void;
|
|
canViewRawMaterialLibrary: boolean;
|
|
activeRawMaterialLibrary: RawMaterialLibraryKey;
|
|
selectedRawMaterialName: string;
|
|
canViewReferenceEstimator: boolean;
|
|
canViewProductPatentLedger: boolean;
|
|
canEditProductPatentLedger: boolean;
|
|
canViewBarcodePrint: boolean;
|
|
canViewBrandFiling: boolean;
|
|
}): IntakePrimaryDomainContentProps {
|
|
return {
|
|
activeSection: params.activeSection,
|
|
fallback: <IntakeEmptyDetail />,
|
|
productDevelopment: {
|
|
pendingEntryTab: params.pendingEntryTab,
|
|
integratedRows: params.skuList,
|
|
nonIntegratedProducts: params.nonIntegratedProducts,
|
|
productDevelopmentProgressProducts:
|
|
params.productDevelopmentProgressProducts,
|
|
initialNonIntegratedPageInfo: params.initialNonIntegratedPageInfo,
|
|
canDeleteProducts: params.canDeleteNonIntegratedProducts,
|
|
canCreateProducts: params.canCreateNonIntegratedProducts,
|
|
canUseDesignControlledProductData:
|
|
params.canUseDesignControlledProductData,
|
|
canViewProductDevelopmentList: params.canViewProductDevelopmentList,
|
|
canViewSeriesDevelopmentList: params.canViewSeriesDevelopmentList,
|
|
canViewStockDevelopmentList: params.canViewStockDevelopmentList,
|
|
canViewProductProgressDashboard:
|
|
params.canViewProductProgressDashboard,
|
|
currentUser: params.user,
|
|
fallback: <IntakeEmptyDetail />,
|
|
canOpenProductForEdit: params.canOpenProductForEdit,
|
|
onProductsChange: params.onProductsChange,
|
|
onOpenProductWorkspace: params.onOpenProductWorkspace,
|
|
onOpenNewProductWorkspace: params.onOpenNewProductWorkspace,
|
|
},
|
|
canViewBomLibrary: params.canViewBomLibrary,
|
|
bomLibrary: {
|
|
user: params.user,
|
|
canEditLibraries: params.canEditBomLibrary,
|
|
activeBomLibrary: params.activeBomLibrary,
|
|
materialLibrarySubstrates: params.materialLibrarySubstrates,
|
|
materialLibraryFinishes: params.materialLibraryFinishes,
|
|
materialLibraryCategories: params.materialLibraryCategories,
|
|
materialLibraryDictionaries: params.materialLibraryDictionaries,
|
|
onMaterialLibraryFinishesChange:
|
|
params.onMaterialLibraryFinishesChange,
|
|
},
|
|
canViewRawMaterialLibrary: params.canViewRawMaterialLibrary,
|
|
rawMaterialLibrary: {
|
|
activeRawMaterialLibrary: params.activeRawMaterialLibrary,
|
|
selectedMaterialName: params.selectedRawMaterialName,
|
|
},
|
|
canViewReferenceEstimator: params.canViewReferenceEstimator,
|
|
referenceEstimator: {
|
|
materialLibrarySubstrates: params.materialLibrarySubstrates,
|
|
},
|
|
canViewProductPatentLedger: params.canViewProductPatentLedger,
|
|
productPatent: {
|
|
products: params.productDevelopmentProgressProducts,
|
|
user: params.user,
|
|
readOnly: !params.canEditProductPatentLedger,
|
|
},
|
|
canViewBarcodePrint: params.canViewBarcodePrint,
|
|
barcodePrint: {
|
|
products: params.nonIntegratedProducts,
|
|
user: params.user,
|
|
},
|
|
canViewBrandFiling: params.canViewBrandFiling,
|
|
};
|
|
}
|
|
|
|
export function buildIntakeRightWorkbenchProps(params: {
|
|
activeWorkspaceTabKind: IntakeWorkspaceTab["kind"] | null;
|
|
activeBrandFilingBrand: BrandFilingBrand | null;
|
|
activeSection: IntakeSection;
|
|
onToggle: (section: Exclude<IntakeSection, null>) => void;
|
|
pendingEntryTab: IntakeEntryTab;
|
|
onPendingEntryTabChange: (entryTab: IntakeEntryTab) => void;
|
|
onOpenProgressDashboard: () => void;
|
|
activeBomLibrary: BomLibraryKey;
|
|
onBomLibraryChange: (library: BomLibraryKey) => void;
|
|
activeRawMaterialLibrary: RawMaterialLibraryKey;
|
|
onOpenRawMaterialLibraryWorkspace: (
|
|
library: RawMaterialLibraryKey,
|
|
selectedMaterialName?: string,
|
|
) => void;
|
|
onOpenReferenceEstimatorWorkspace: () => void;
|
|
onOpenProductPatents: () => void;
|
|
onOpenProductPatentLedger: () => void;
|
|
onOpenProductPatentDashboard: () => void;
|
|
onOpenBarcodePrintWorkspace: () => void;
|
|
onOpenBrandFilingWorkspace: (brand: BrandFilingBrand) => void;
|
|
onOpenWorkRecordWorkspace: () => void;
|
|
onOpenWorkRecordScoreWorkspace: () => void;
|
|
onOpenWorkRecordArchiveWorkspace: () => void;
|
|
onOpenSpuRuleLibraryWorkspace?: () => void;
|
|
canViewProductDevelopmentList: boolean;
|
|
canViewSeriesDevelopmentList: boolean;
|
|
canViewProductProgressDashboard: boolean;
|
|
canViewStockDevelopmentList: boolean;
|
|
canViewBomLibrary: boolean;
|
|
canViewRawMaterialLibrary: boolean;
|
|
canViewReferenceEstimator: boolean;
|
|
canViewProductPatentLedger: boolean;
|
|
canViewProductPatentDashboard: boolean;
|
|
canViewBarcodePrint: boolean;
|
|
canViewBrandFiling: boolean;
|
|
canViewWorkRecord: boolean;
|
|
canViewWorkRecordArchives: boolean;
|
|
}): IntakeRightWorkbenchPanelProps {
|
|
return {
|
|
activeWorkspaceTabKind: params.activeWorkspaceTabKind,
|
|
workbench: {
|
|
activeWorkspaceTabKind: params.activeWorkspaceTabKind,
|
|
activeSection: params.activeSection,
|
|
activeBrandFilingBrand: params.activeBrandFilingBrand,
|
|
onToggle: params.onToggle,
|
|
pendingEntryTab: params.pendingEntryTab,
|
|
onPendingEntryTabChange: params.onPendingEntryTabChange,
|
|
onOpenProgressDashboard: params.onOpenProgressDashboard,
|
|
activeBomLibrary: params.activeBomLibrary,
|
|
onBomLibraryChange: params.onBomLibraryChange,
|
|
activeRawMaterialLibrary: params.activeRawMaterialLibrary,
|
|
onOpenRawMaterialLibraryWorkspace:
|
|
params.onOpenRawMaterialLibraryWorkspace,
|
|
onOpenReferenceEstimatorWorkspace:
|
|
params.onOpenReferenceEstimatorWorkspace,
|
|
onOpenProductPatents: params.onOpenProductPatents,
|
|
onOpenProductPatentLedger: params.onOpenProductPatentLedger,
|
|
onOpenProductPatentDashboard: params.onOpenProductPatentDashboard,
|
|
onOpenBarcodePrintWorkspace: params.onOpenBarcodePrintWorkspace,
|
|
onOpenBrandFilingWorkspace: params.onOpenBrandFilingWorkspace,
|
|
onOpenWorkRecordWorkspace: params.onOpenWorkRecordWorkspace,
|
|
onOpenWorkRecordScoreWorkspace: params.onOpenWorkRecordScoreWorkspace,
|
|
onOpenWorkRecordArchiveWorkspace: params.onOpenWorkRecordArchiveWorkspace,
|
|
onOpenSpuRuleLibraryWorkspace: params.onOpenSpuRuleLibraryWorkspace,
|
|
canViewProductDevelopmentList: params.canViewProductDevelopmentList,
|
|
canViewSeriesDevelopmentList: params.canViewSeriesDevelopmentList,
|
|
canViewProductProgressDashboard:
|
|
params.canViewProductProgressDashboard,
|
|
canViewStockDevelopmentList: params.canViewStockDevelopmentList,
|
|
canViewBomLibrary: params.canViewBomLibrary,
|
|
canViewRawMaterialLibrary: params.canViewRawMaterialLibrary,
|
|
canViewReferenceEstimator: params.canViewReferenceEstimator,
|
|
canViewProductPatentLedger: params.canViewProductPatentLedger,
|
|
canViewProductPatentDashboard: params.canViewProductPatentDashboard,
|
|
canViewBarcodePrint: params.canViewBarcodePrint,
|
|
canViewBrandFiling: params.canViewBrandFiling,
|
|
canViewWorkRecord: params.canViewWorkRecord,
|
|
canViewWorkRecordArchives: params.canViewWorkRecordArchives,
|
|
},
|
|
};
|
|
}
|