refactor(intake): extract non-integrated style detail state

This commit is contained in:
WuYongJie 2026-06-08 18:54:59 +08:00
parent 68d16eaae3
commit ce30eca2bb
2 changed files with 69 additions and 55 deletions

View File

@ -465,6 +465,11 @@ import {
resolveQualityInspectionImageFieldKey,
syncQualityInspectionRowsWithSkuItems,
} from "./qualityInspectionHelpers";
import {
buildInstallationRevisionSignature,
buildPackagingRevisionSignature,
type StyleDetailForm,
} from "./styleDetailState";
import {
MATERIAL_TYPE_OPTIONS,
PLANNING_LAYOUT_AUDIENCE_OPTIONS,
@ -870,27 +875,6 @@ type FieldDefinition = {
auto?: boolean;
};
type StyleDetailForm = {
installMethod: string;
installSteps: string;
packageDetail: string;
craftDetail: string;
model3dFileName: string;
model3dDataUrl: string;
model3dNodeOffsets: PreviewNodeOffsetMap;
model3dNodeRotations: PreviewNodeRotationMap;
model3dNodeMaterialIds: PreviewNodeMaterialIdMap;
model3dUvConfig: AssetVariantUvConfig | null;
outerPackagingType: string;
innerPackagingItems: NonIntegratedPackagingInnerItem[];
packagingModel3dFileName: string;
packagingModel3dDataUrl: string;
packagingModel3dNodeOffsets: PreviewNodeOffsetMap;
packagingModel3dNodeRotations: PreviewNodeRotationMap;
packagingModel3dNodeMaterialIds: PreviewNodeMaterialIdMap;
packagingModel3dUvConfig: AssetVariantUvConfig | null;
};
type ReviewSheetFieldKey = Exclude<keyof NonIntegratedReviewSheet, "issues">;
type ReviewIssueFieldKey = Exclude<
keyof NonIntegratedReviewIssue,
@ -1429,40 +1413,6 @@ const EMPTY_STYLE_DETAIL: StyleDetailForm = {
packagingModel3dUvConfig: null,
};
function buildInstallationRevisionSignature(
styleDetails: Record<string, StyleDetailForm>,
) {
return Object.fromEntries(
Object.entries(styleDetails).map(([styleKey, detail]) => [
styleKey,
{
installMethod: detail.installMethod,
installSteps: detail.installSteps,
},
]),
);
}
function buildPackagingRevisionSignature(
styleDetails: Record<string, StyleDetailForm>,
) {
return Object.fromEntries(
Object.entries(styleDetails).map(([styleKey, detail]) => [
styleKey,
{
packageDetail: detail.packageDetail,
craftDetail: detail.craftDetail,
outerPackagingType: detail.outerPackagingType,
innerPackagingItems: detail.innerPackagingItems,
packagingModel3dFileName: detail.packagingModel3dFileName,
packagingModel3dDataUrl: detail.packagingModel3dDataUrl,
packagingModel3dNodeOffsets: detail.packagingModel3dNodeOffsets,
packagingModel3dNodeRotations: detail.packagingModel3dNodeRotations,
},
]),
);
}
function createEmptySkuItem(): NonIntegratedSkuItem {
return {
id: buildNonIntegratedSkuId(),

View File

@ -0,0 +1,64 @@
import type { AssetVariantUvConfig } from "@/lib/asset-variant-render-config";
import type {
NonIntegratedPackagingInnerItem,
} from "./nonIntegratedStorage";
import type {
PreviewNodeMaterialIdMap,
PreviewNodeOffsetMap,
PreviewNodeRotationMap,
} from "./previewState";
export type StyleDetailForm = {
installMethod: string;
installSteps: string;
packageDetail: string;
craftDetail: string;
model3dFileName: string;
model3dDataUrl: string;
model3dNodeOffsets: PreviewNodeOffsetMap;
model3dNodeRotations: PreviewNodeRotationMap;
model3dNodeMaterialIds: PreviewNodeMaterialIdMap;
model3dUvConfig: AssetVariantUvConfig | null;
outerPackagingType: string;
innerPackagingItems: NonIntegratedPackagingInnerItem[];
packagingModel3dFileName: string;
packagingModel3dDataUrl: string;
packagingModel3dNodeOffsets: PreviewNodeOffsetMap;
packagingModel3dNodeRotations: PreviewNodeRotationMap;
packagingModel3dNodeMaterialIds: PreviewNodeMaterialIdMap;
packagingModel3dUvConfig: AssetVariantUvConfig | null;
};
export function buildInstallationRevisionSignature(
styleDetails: Record<string, StyleDetailForm>,
) {
return Object.fromEntries(
Object.entries(styleDetails).map(([styleKey, detail]) => [
styleKey,
{
installMethod: detail.installMethod,
installSteps: detail.installSteps,
},
]),
);
}
export function buildPackagingRevisionSignature(
styleDetails: Record<string, StyleDetailForm>,
) {
return Object.fromEntries(
Object.entries(styleDetails).map(([styleKey, detail]) => [
styleKey,
{
packageDetail: detail.packageDetail,
craftDetail: detail.craftDetail,
outerPackagingType: detail.outerPackagingType,
innerPackagingItems: detail.innerPackagingItems,
packagingModel3dFileName: detail.packagingModel3dFileName,
packagingModel3dDataUrl: detail.packagingModel3dDataUrl,
packagingModel3dNodeOffsets: detail.packagingModel3dNodeOffsets,
packagingModel3dNodeRotations: detail.packagingModel3dNodeRotations,
},
]),
);
}