formica-ui-lib 1.0.248 → 1.0.250

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/componentProps/molecules/cards/issuegroupreviewcard/IssueGroupReviewCardProps.d.ts +2 -0
  2. package/dist/componentProps/organisms/collections/localizationmarketcollection/LocalizationMarketCollectionProps.d.ts +1 -0
  3. package/dist/componentProps/organisms/forms/dynamicform/DynamicFormProps.d.ts +1 -0
  4. package/dist/componentProps/templates/admin/authstatus/AdminAuthStatusTemplateProps.d.ts +27 -0
  5. package/dist/componentProps/templates/admin/dashboard/AdminDashboardTemplateProps.d.ts +9 -0
  6. package/dist/componentProps/templates/admin/dataissues/AdminDataIssuesTemplateProps.d.ts +164 -0
  7. package/dist/componentProps/templates/admin/dataissuessource/AdminDataIssuesSourceTemplateProps.d.ts +69 -0
  8. package/dist/componentProps/templates/admin/datareport/AdminDataReportTemplateProps.d.ts +22 -0
  9. package/dist/componentProps/templates/admin/issuegroupreview/AdminIssueGroupReviewTemplateProps.d.ts +57 -0
  10. package/dist/componentProps/templates/admin/productjourney/ProductJourneyTemplateProps.d.ts +68 -0
  11. package/dist/componentProps/templates/admin/productlocalization/ProductLocalizationTemplateProps.d.ts +130 -0
  12. package/dist/componentProps/templates/admin/shared/AdminPageTemplateShellProps.d.ts +10 -0
  13. package/dist/componentProps/templates/admin/shared/AdminTemplateStatus.d.ts +8 -0
  14. package/dist/componentProps/templates/admin/users/AdminUsersTemplateProps.d.ts +78 -0
  15. package/dist/index.cjs +8 -8
  16. package/dist/index.d.ts +21 -0
  17. package/dist/index.js +2498 -698
  18. package/dist/stories/templates/admin/authstatus/AdminAuthStatusTemplate.d.ts +4 -0
  19. package/dist/stories/templates/admin/dashboard/AdminDashboardTemplate.d.ts +4 -0
  20. package/dist/stories/templates/admin/dataissues/AdminDataIssuesTemplate.d.ts +4 -0
  21. package/dist/stories/templates/admin/dataissuessource/AdminDataIssuesSourceTemplate.d.ts +4 -0
  22. package/dist/stories/templates/admin/datareport/AdminDataReportTemplate.d.ts +4 -0
  23. package/dist/stories/templates/admin/issuegroupreview/AdminIssueGroupReviewTemplate.d.ts +4 -0
  24. package/dist/stories/templates/admin/productjourney/ProductJourneyTemplate.d.ts +4 -0
  25. package/dist/stories/templates/admin/productlocalization/ProductLocalizationTemplate.d.ts +4 -0
  26. package/dist/stories/templates/admin/shared/AdminPageTemplateShell.d.ts +4 -0
  27. package/dist/stories/templates/admin/shared/AdminTemplateStatusPanel.d.ts +7 -0
  28. package/dist/stories/templates/admin/users/AdminUsersTemplate.d.ts +4 -0
  29. package/dist/tailwind.css +1 -1
  30. package/package.json +7 -7
@@ -14,6 +14,8 @@ export interface IssueGroupReviewCardProps {
14
14
  resolveLabel?: string;
15
15
  selectLabel?: string;
16
16
  selectedLabel?: string;
17
+ resolveDisabled?: boolean;
18
+ statusMessage?: string;
17
19
  ariaLabel?: string;
18
20
  onRecordSelect?: (payload: IssueRecordCandidateSelectPayload) => void;
19
21
  onResolveClick?: (payload: IssueGroupResolvePayload) => void;
@@ -16,6 +16,7 @@ export interface LocalizationMarketCollectionProps {
16
16
  saveAndNextLabel?: string;
17
17
  saveAndNextHelpText?: string;
18
18
  saveAndNextDisabled?: boolean;
19
+ localizationSelectionDisabled?: boolean;
19
20
  onLocalizationSelect?: (payload: LocalizationStatusCardClickPayload) => void;
20
21
  onSaveAndNext?: () => void;
21
22
  }
@@ -54,6 +54,7 @@ export interface DynamicFormProps {
54
54
  severityDisplay?: DynamicFormSeverityDisplay;
55
55
  submitLabel?: string;
56
56
  cancelLabel?: string;
57
+ cancelDisabled?: boolean;
57
58
  submitDisabled?: boolean;
58
59
  showActions?: boolean;
59
60
  validationSummary?: React.ReactNode;
@@ -0,0 +1,27 @@
1
+ export type AdminAuthStatusTone = "loading" | "info" | "warning" | "error";
2
+ export interface AdminAuthStatusAction {
3
+ id: string;
4
+ label: string;
5
+ iconName?: string;
6
+ disabled?: boolean;
7
+ loading?: boolean;
8
+ }
9
+ export interface AdminAuthStatusInformationGroup {
10
+ id: string;
11
+ title: string;
12
+ items: string[];
13
+ }
14
+ export interface AdminAuthStatusActionPayload {
15
+ actionId: string;
16
+ }
17
+ export interface AdminAuthStatusTemplateProps {
18
+ eyebrow?: string;
19
+ title: string;
20
+ description: string;
21
+ detail?: string;
22
+ tone: AdminAuthStatusTone;
23
+ primaryAction?: AdminAuthStatusAction;
24
+ secondaryAction?: AdminAuthStatusAction;
25
+ informationGroups?: AdminAuthStatusInformationGroup[];
26
+ onActionClick?: (payload: AdminAuthStatusActionPayload) => void;
27
+ }
@@ -0,0 +1,9 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ export interface AdminDashboardTemplateProps {
3
+ pageTitle: string;
4
+ welcomeTitle: string;
5
+ welcomeMessage: string;
6
+ aboutTitle: string;
7
+ aboutDescription: string;
8
+ sideNavProps: AdminSideNavProps;
9
+ }
@@ -0,0 +1,164 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { DataHealthSummaryCardProps } from "../../../molecules/cards/datahealthsummarycard/DataHealthSummaryCardProps";
3
+ import type { DataIssueActionCardActionPayload, DataIssueActionCardProps } from "../../../molecules/cards/dataissueactioncard/DataIssueActionCardProps";
4
+ import type { DataIssueMetricCardProps } from "../../../molecules/cards/dataissuemetriccard/DataIssueMetricCardProps";
5
+ import type { IssueTypeBreakdownCardProps } from "../../../molecules/cards/issuetypebreakdowncard/IssueTypeBreakdownCardProps";
6
+ import type { RecommendedNextStepCardProps } from "../../../molecules/cards/recommendednextstepcard/RecommendedNextStepCardProps";
7
+ import type { AdminTemplateStatus } from "../shared/AdminTemplateStatus";
8
+ export type AdminDataIssuesDataSourceType = "salsify-export" | "salsify-api";
9
+ export interface AdminDataIssuesDataSource {
10
+ id: string;
11
+ source: AdminDataIssuesReportSource;
12
+ recordCount: number;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ latestReport?: AdminDataIssuesLatestReport;
16
+ }
17
+ export interface AdminDataIssuesReportSource {
18
+ sourceType: AdminDataIssuesDataSourceType;
19
+ label: string;
20
+ locale: string;
21
+ rangeCode?: string;
22
+ }
23
+ export interface AdminDataIssuesReportSummary {
24
+ automationCoverage?: number;
25
+ duplicateGroups: number;
26
+ duplicateRecords: number;
27
+ goodSkuRows: number;
28
+ healthScore: number;
29
+ missingHierarchyRecords: number;
30
+ problemSkuRows: number;
31
+ requiredDataGapRecords: number;
32
+ safelyResolvableGroups?: number;
33
+ }
34
+ export type AdminDataIssuesIssueSeverity = "success" | "warning" | "error" | "review" | "neutral";
35
+ export interface AdminDataIssuesIssueType {
36
+ id: string;
37
+ label: string;
38
+ description?: string;
39
+ groups: number;
40
+ records: number;
41
+ severity: AdminDataIssuesIssueSeverity;
42
+ stepNumber?: number;
43
+ }
44
+ export interface AdminDataIssuesReportSection {
45
+ id: string;
46
+ title: string;
47
+ groupCount: number;
48
+ recordCount?: number;
49
+ description: string;
50
+ severity: AdminDataIssuesIssueSeverity;
51
+ stepNumber?: number;
52
+ recommendedActionTitle?: string;
53
+ recommendedAction: string[];
54
+ confidenceLabel?: string;
55
+ estimatedRuntimeLabel?: string;
56
+ }
57
+ export interface AdminDataIssuesWhatToDoNext {
58
+ actionLabel: string;
59
+ groups: number;
60
+ issueType: string;
61
+ label: string;
62
+ message: string;
63
+ records: number;
64
+ severity: AdminDataIssuesIssueSeverity;
65
+ stepNumber: number;
66
+ steps: string[];
67
+ title: string;
68
+ }
69
+ export interface AdminDataIssuesLatestReport {
70
+ generatedAt: string;
71
+ recordsScanned: number;
72
+ skuRowsScanned: number;
73
+ summary: AdminDataIssuesReportSummary;
74
+ issueTypes: AdminDataIssuesIssueType[];
75
+ sections: AdminDataIssuesReportSection[];
76
+ source: AdminDataIssuesReportSource;
77
+ whatToDoNext?: AdminDataIssuesWhatToDoNext;
78
+ }
79
+ export interface AdminDataIssuesResponse {
80
+ ok: boolean;
81
+ exists?: boolean;
82
+ report?: AdminDataIssuesLatestReport;
83
+ dataSource?: AdminDataIssuesDataSource | null;
84
+ }
85
+ export type AdminDataIssuesOperationStatus = "idle" | "pending" | "success" | "error";
86
+ export interface AdminDataIssuesCacheActions {
87
+ status: AdminDataIssuesOperationStatus;
88
+ title: string;
89
+ description: string;
90
+ statusMessage?: string;
91
+ updateLabel: string;
92
+ updateDisabled?: boolean;
93
+ rebuildLabel: string;
94
+ rebuildDisabled?: boolean;
95
+ }
96
+ export interface AdminDataIssuesRebuildConfirmation {
97
+ open: boolean;
98
+ title: string;
99
+ message: string;
100
+ warning?: string;
101
+ cancelLabel: string;
102
+ confirmLabel: string;
103
+ pending?: boolean;
104
+ }
105
+ export type AdminDataIssuesResolveDialog = {
106
+ open: false;
107
+ } | {
108
+ open: true;
109
+ mode: "confirm";
110
+ title: string;
111
+ previewStatus: "loading" | "ready" | "error";
112
+ message?: string;
113
+ errorMessage?: string;
114
+ cancelLabel: string;
115
+ confirmLabel: string;
116
+ confirmDisabled?: boolean;
117
+ confirming?: boolean;
118
+ } | {
119
+ open: true;
120
+ mode: "progress";
121
+ title: string;
122
+ statusLabel: string;
123
+ message: string;
124
+ percentComplete: number;
125
+ completedLabel?: string;
126
+ failedLabel?: string;
127
+ errorMessages?: string[];
128
+ pollingWarning?: string;
129
+ retryLabel?: string;
130
+ retryDisabled?: boolean;
131
+ closeLabel: string;
132
+ };
133
+ export interface AdminDataIssuesTemplateProps {
134
+ pageTitle: string;
135
+ pageDescription?: string;
136
+ lastScanLabel?: string;
137
+ updateCacheLabel?: string;
138
+ deleteAndRebuildLabel?: string;
139
+ changeProductDataLabel?: string;
140
+ sideNavProps: AdminSideNavProps;
141
+ status?: AdminTemplateStatus;
142
+ /** @deprecated Map report data to the card props in Data Forge instead. */
143
+ dataIssuesResponse?: AdminDataIssuesResponse | null;
144
+ dataHealthSummaryCardProps?: DataHealthSummaryCardProps;
145
+ metricCardProps?: DataIssueMetricCardProps[];
146
+ issueTypeBreakdownCardProps?: IssueTypeBreakdownCardProps;
147
+ recommendedNextStepCardProps?: RecommendedNextStepCardProps;
148
+ issueActionCardProps?: DataIssueActionCardProps[];
149
+ cacheActions?: AdminDataIssuesCacheActions;
150
+ rebuildConfirmation?: AdminDataIssuesRebuildConfirmation;
151
+ resolveDialog?: AdminDataIssuesResolveDialog;
152
+ onRetryClick?: () => void;
153
+ onRecalculateClick?: () => void;
154
+ onChangeProductDataClick?: () => void;
155
+ onUpdateCacheClick?: () => void;
156
+ onDeleteAndRebuildClick?: () => void;
157
+ onRebuildConfirm?: () => void;
158
+ onRebuildCancel?: () => void;
159
+ onResolveConfirm?: () => void;
160
+ onResolveClose?: () => void;
161
+ onResolveRetry?: () => void;
162
+ onIssuePrimaryActionClick?: (payload: DataIssueActionCardActionPayload) => void;
163
+ onIssueSecondaryActionClick?: (payload: DataIssueActionCardActionPayload) => void;
164
+ }
@@ -0,0 +1,69 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { DropdownOption } from "../../../atoms/dropdown/DropdownProps";
3
+ import type { AdminDataIssuesDataSourceType } from "../dataissues/AdminDataIssuesTemplateProps";
4
+ import type { AdminTemplateStatus } from "../shared/AdminTemplateStatus";
5
+ export type AdminDataIssuesActionStatus = "idle" | "pending" | "success" | "error";
6
+ export interface AdminDataIssuesSelectedFile {
7
+ name: string;
8
+ sizeLabel?: string;
9
+ }
10
+ export interface AdminDataIssuesDataSourceSummary {
11
+ id: string;
12
+ source: {
13
+ sourceType: AdminDataIssuesDataSourceType;
14
+ label: string;
15
+ locale: string;
16
+ };
17
+ recordCount: number;
18
+ createdAt: string;
19
+ updatedAt: string;
20
+ latestReport?: {
21
+ label?: string;
22
+ createdAt?: string;
23
+ };
24
+ }
25
+ export interface AdminDataIssuesFileSelectPayload {
26
+ files: File[];
27
+ }
28
+ export interface AdminDataIssuesRangeChangePayload {
29
+ value: string;
30
+ }
31
+ export interface AdminDataIssuesSourceTemplateProps {
32
+ pageTitle: string;
33
+ pageDescription?: string;
34
+ sideNavProps: AdminSideNavProps;
35
+ status?: AdminTemplateStatus;
36
+ dataSource?: AdminDataIssuesDataSourceSummary | null;
37
+ existingDataTitle?: string;
38
+ existingDataEmptyTitle?: string;
39
+ existingDataEmptyDescription?: string;
40
+ useExistingDataLabel?: string;
41
+ uploadTitle?: string;
42
+ uploadDescription?: string;
43
+ uploadDropLabel?: string;
44
+ uploadBrowseLabel?: string;
45
+ uploadHelpText?: string;
46
+ selectedFile?: AdminDataIssuesSelectedFile;
47
+ uploadStatus?: AdminDataIssuesActionStatus;
48
+ uploadStatusMessage?: string;
49
+ uploadLabel?: string;
50
+ uploadDisabled?: boolean;
51
+ clearFileLabel?: string;
52
+ directDownloadTitle?: string;
53
+ directDownloadDescription?: string;
54
+ rangeLabel?: string;
55
+ rangePlaceholder?: string;
56
+ rangeOptions: DropdownOption[];
57
+ selectedRangeValue?: string;
58
+ directDownloadLabel?: string;
59
+ downloadStatus?: AdminDataIssuesActionStatus;
60
+ downloadStatusMessage?: string;
61
+ downloadDisabled?: boolean;
62
+ onUseExistingDataClick?: () => void;
63
+ onReportFileSelect?: (payload: AdminDataIssuesFileSelectPayload) => void;
64
+ onUploadClick?: () => void;
65
+ onClearSelectedFileClick?: () => void;
66
+ onRangeChange?: (payload: AdminDataIssuesRangeChangePayload) => void;
67
+ onDirectDownloadClick?: () => void;
68
+ onRetryClick?: () => void;
69
+ }
@@ -0,0 +1,22 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { DataReportCollectionProps } from "../../../organisms/collections/datareportcollection/DataReportCollectionProps";
3
+ import type { AdminTemplateStatus } from "../shared/AdminTemplateStatus";
4
+ export interface AdminDataReportPagination {
5
+ previousLabel: string;
6
+ nextLabel: string;
7
+ previousDisabled: boolean;
8
+ nextDisabled: boolean;
9
+ }
10
+ export interface AdminDataReportTemplateProps {
11
+ pageTitle: string;
12
+ pageDescription?: string;
13
+ backLabel?: string;
14
+ sideNavProps: AdminSideNavProps;
15
+ report: DataReportCollectionProps;
16
+ status?: AdminTemplateStatus;
17
+ pagination?: AdminDataReportPagination;
18
+ onBackClick?: () => void;
19
+ onRetryClick?: () => void;
20
+ onPreviousPageClick?: () => void;
21
+ onNextPageClick?: () => void;
22
+ }
@@ -0,0 +1,57 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { IssueRecordCandidateSelectPayload } from "../../../molecules/cards/issuerecordcandidatecard/IssueRecordCandidateCardProps";
3
+ import type { IssueGroupResolvePayload } from "../../../molecules/cards/issuegroupreviewcard/IssueGroupReviewCardProps";
4
+ import type { AdminTemplateStatus } from "../shared/AdminTemplateStatus";
5
+ export interface AdminIssueGroupReviewRecord {
6
+ hierarchyLevel?: string;
7
+ itemPartNumber?: string;
8
+ itemSku?: string;
9
+ productName?: string;
10
+ salsifyId?: string;
11
+ score?: number;
12
+ }
13
+ export interface AdminIssueGroupReviewGroup {
14
+ conflictFields: string[];
15
+ groupId: string;
16
+ issueType: string;
17
+ matchReasons: string[];
18
+ reason: string;
19
+ records: AdminIssueGroupReviewRecord[];
20
+ }
21
+ export interface AdminIssueGroupReviewResponse {
22
+ groups: AdminIssueGroupReviewGroup[];
23
+ hasMore: boolean;
24
+ issueType: string;
25
+ limit: number;
26
+ offset: number;
27
+ ok: boolean;
28
+ totalGroups: number;
29
+ }
30
+ export interface AdminIssueGroupReviewTemplateProps {
31
+ pageTitle: string;
32
+ pageDescription?: string;
33
+ issueTypeLabel?: string;
34
+ backLabel?: string;
35
+ previousLabel?: string;
36
+ nextLabel?: string;
37
+ resolveLabel?: string;
38
+ selectLabel?: string;
39
+ selectedLabel?: string;
40
+ sideNavProps: AdminSideNavProps;
41
+ issueGroupResponse: AdminIssueGroupReviewResponse;
42
+ selectedRecordIds?: Record<string, string>;
43
+ status?: AdminTemplateStatus;
44
+ groupActionStates?: AdminIssueGroupActionState[];
45
+ onBackClick?: () => void;
46
+ onPreviousPageClick?: () => void;
47
+ onNextPageClick?: () => void;
48
+ onRecordSelect?: (payload: IssueRecordCandidateSelectPayload) => void;
49
+ onResolveGroupClick?: (payload: IssueGroupResolvePayload) => void;
50
+ onRetryClick?: () => void;
51
+ }
52
+ export interface AdminIssueGroupActionState {
53
+ groupId: string;
54
+ resolveLabel?: string;
55
+ resolveDisabled?: boolean;
56
+ statusMessage?: string;
57
+ }
@@ -0,0 +1,68 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { DynamicFormProps } from "../../../organisms/forms/dynamicform/DynamicFormProps";
3
+ import type { DynamicFormFieldChangePayload, DynamicFormFieldValue } from "../../../organisms/forms/dynamicform/DynamicFormProps";
4
+ import type { MessageListCardProps } from "../../../molecules/cards/messagelistcard/MessageListCardProps";
5
+ import type { SearchComboboxOption, SearchComboboxSelectPayload } from "../../../molecules/searchcombobox/SearchComboboxProps";
6
+ import type { StatusFlowConnectorProps } from "../../../molecules/statusflowconnector/StatusFlowConnectorProps";
7
+ import type { StatusSummaryCardProps } from "../../../molecules/cards/statussummarycard/StatusSummaryCardProps";
8
+ import type { StatusFlowGroupProps } from "../../../organisms/sections/statusflowgroup/StatusFlowGroupProps";
9
+ import type { StatusFlowPanelProps } from "../../../organisms/sections/statusflowpanel/StatusFlowPanelProps";
10
+ export interface ProductJourneySearchPayload {
11
+ value: string;
12
+ }
13
+ export interface ProductJourneyCheckpoint {
14
+ type: "checkpoint";
15
+ id: string;
16
+ cardProps: Omit<StatusSummaryCardProps, "id" | "variant" | "onCardClick">;
17
+ }
18
+ export interface ProductJourneyConnector {
19
+ type: "connector";
20
+ id: string;
21
+ connectorProps: Omit<StatusFlowConnectorProps, "variant">;
22
+ }
23
+ export interface ProductJourneyCheckpointGroup {
24
+ type: "group";
25
+ id: string;
26
+ groupProps: Omit<StatusFlowGroupProps, "children" | "variant">;
27
+ items: ProductJourneyFlowItem[];
28
+ }
29
+ export type ProductJourneyFlowItem = ProductJourneyCheckpoint | ProductJourneyConnector | ProductJourneyCheckpointGroup;
30
+ export interface ProductJourneyCheckpointSelectPayload {
31
+ checkpointId: string;
32
+ title: string;
33
+ description?: string;
34
+ status: StatusSummaryCardProps["status"];
35
+ statusLabel: string;
36
+ }
37
+ export interface ProductJourneyCheckpointFieldChangePayload extends DynamicFormFieldChangePayload {
38
+ checkpointId: string;
39
+ value: DynamicFormFieldValue;
40
+ }
41
+ export interface ProductJourneyCheckpointModalChangePayload {
42
+ open: boolean;
43
+ checkpointId: string | null;
44
+ }
45
+ export interface ProductJourneyTemplateProps {
46
+ pageTitle: string;
47
+ searchPlaceholder?: string;
48
+ searchValue: string;
49
+ searchOptions?: SearchComboboxOption[];
50
+ checkButtonLabel?: string;
51
+ sideNavProps: AdminSideNavProps;
52
+ state: NonNullable<StatusFlowPanelProps["state"]>;
53
+ statusFlowPanelProps: Omit<StatusFlowPanelProps, "state" | "diagram" | "legend" | "actions">;
54
+ flowItems: ProductJourneyFlowItem[];
55
+ messageListCardProps: MessageListCardProps;
56
+ selectedCheckpointId: string | null;
57
+ checkpointModalOpen: boolean;
58
+ checkpointFormPropsById: Partial<Record<string, DynamicFormProps>>;
59
+ productDataModalTitle?: string;
60
+ productDataModalDescription?: string;
61
+ onSearchChange?: (payload: ProductJourneySearchPayload) => void;
62
+ onSearchClear?: (payload: ProductJourneySearchPayload) => void;
63
+ onSearchOptionSelect?: (payload: SearchComboboxSelectPayload) => void;
64
+ onCheckClick?: (payload: ProductJourneySearchPayload) => void;
65
+ onCheckpointSelect?: (payload: ProductJourneyCheckpointSelectPayload) => void;
66
+ onCheckpointModalChange?: (payload: ProductJourneyCheckpointModalChangePayload) => void;
67
+ onCheckpointFieldChange?: (payload: ProductJourneyCheckpointFieldChangePayload) => void;
68
+ }
@@ -0,0 +1,130 @@
1
+ import type { DynamicFormFieldConfig, DynamicFormFieldValue } from "../../../organisms/forms/dynamicform/DynamicFormProps";
2
+ import type { LocalizationMarketItem } from "../../../organisms/collections/localizationmarketcollection/LocalizationMarketCollectionProps";
3
+ import type { LocalizationStatusCardClickPayload } from "../../../molecules/cards/localizationstatuscard/LocalizationStatusCardProps";
4
+ import type { CommerceSyncPanelProps } from "../../../organisms/sections/commercesyncpanel/CommerceSyncPanelProps";
5
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
6
+ export type ProductLocalizationTabId = string;
7
+ export interface ProductLocalizationProduct {
8
+ name: string;
9
+ sku: string;
10
+ partNumber: string;
11
+ imageUrl: string;
12
+ imageAlt: string;
13
+ statusLabel: string;
14
+ completedLocalizationCount: number;
15
+ requiredLocalizationCount: number;
16
+ requiredMarketsLabel: string;
17
+ hierarchy?: ProductLocalizationHierarchy;
18
+ }
19
+ export interface ProductLocalizationHierarchy {
20
+ parentId: string;
21
+ levelLabel: string;
22
+ status: "valid" | "missing";
23
+ statusLabel: string;
24
+ }
25
+ export interface ProductLocalizationActiveRecord {
26
+ id: string;
27
+ heading: string;
28
+ completionStatus: "complete" | "incomplete";
29
+ completionStatusLabel: string;
30
+ saveStatus: ProductLocalizationSaveStatus;
31
+ saveStatusLabel: string;
32
+ saveErrorMessage?: string;
33
+ lastSavedLabel?: string;
34
+ missingRequiredFieldLabels: string[];
35
+ }
36
+ export type ProductLocalizationSaveStatus = "saved" | "unsaved" | "saving" | "error";
37
+ interface ProductLocalizationTabBase {
38
+ id: ProductLocalizationTabId;
39
+ label: string;
40
+ heading?: string;
41
+ description?: string;
42
+ }
43
+ export interface ProductLocalizationFormTab extends ProductLocalizationTabBase {
44
+ type: "form";
45
+ fields: DynamicFormFieldConfig[];
46
+ }
47
+ export interface ProductLocalizationInformationTab extends ProductLocalizationTabBase {
48
+ type: "information";
49
+ fields: DynamicFormFieldConfig[];
50
+ }
51
+ export interface ProductLocalizationCommerceSyncTab extends ProductLocalizationTabBase {
52
+ type: "commerceSync";
53
+ panel: Omit<CommerceSyncPanelProps, "onLxSyncClick" | "onBigCommerceSyncClick" | "onRefreshClick">;
54
+ }
55
+ export type ProductLocalizationTab = ProductLocalizationFormTab | ProductLocalizationInformationTab | ProductLocalizationCommerceSyncTab;
56
+ export interface ProductLocalizationSaveControls {
57
+ cancelLabel: string;
58
+ cancelDisabled?: boolean;
59
+ saveLabel: string;
60
+ saveDisabled: boolean;
61
+ saveAndNextLabel: string;
62
+ saveAndNextHelpText?: string;
63
+ saveAndNextDisabled: boolean;
64
+ localizationSelectionDisabled?: boolean;
65
+ tabSelectionDisabled?: boolean;
66
+ }
67
+ export interface ProductLocalizationNotice {
68
+ tone: "info" | "warning" | "error" | "success";
69
+ title?: string;
70
+ message: string;
71
+ actionLabel?: string;
72
+ }
73
+ export interface ProductLocalizationTemplateData {
74
+ pageTitle: string;
75
+ pageDescription?: string;
76
+ product: ProductLocalizationProduct;
77
+ localization: ProductLocalizationActiveRecord;
78
+ markets: LocalizationMarketItem[];
79
+ tabs: ProductLocalizationTab[];
80
+ activeTabId: ProductLocalizationTabId;
81
+ saveControls: ProductLocalizationSaveControls;
82
+ notice?: ProductLocalizationNotice;
83
+ }
84
+ export interface ProductLocalizationFieldChangePayload {
85
+ localizationId: string;
86
+ tabId: ProductLocalizationTabId;
87
+ fieldId: string;
88
+ value: DynamicFormFieldValue;
89
+ }
90
+ export interface ProductLocalizationTabSelectPayload {
91
+ tabId: ProductLocalizationTabId;
92
+ label: string;
93
+ }
94
+ export interface ProductLocalizationActionPayload {
95
+ localizationId: string;
96
+ }
97
+ export interface ProductLocalizationSyncActionPayload {
98
+ localizationId: string;
99
+ sku: string;
100
+ }
101
+ interface ProductLocalizationTemplateCallbacks {
102
+ sideNavProps?: AdminSideNavProps;
103
+ data: ProductLocalizationTemplateData;
104
+ onLocalizationSelect?: (payload: LocalizationStatusCardClickPayload) => void;
105
+ onTabSelect?: (payload: ProductLocalizationTabSelectPayload) => void;
106
+ onFieldChange?: (payload: ProductLocalizationFieldChangePayload) => void;
107
+ onSave?: (payload: ProductLocalizationActionPayload) => void;
108
+ onCancel?: (payload: ProductLocalizationActionPayload) => void;
109
+ onSaveAndNext?: (payload: ProductLocalizationActionPayload) => void;
110
+ onLxSyncClick?: (payload: ProductLocalizationSyncActionPayload) => void;
111
+ onBigCommerceSyncClick?: (payload: ProductLocalizationSyncActionPayload) => void;
112
+ onCommerceRefreshClick?: (payload: ProductLocalizationSyncActionPayload) => void;
113
+ onNoticeActionClick?: () => void;
114
+ }
115
+ export type ProductLocalizationTemplateProps = (ProductLocalizationTemplateCallbacks & {
116
+ state?: "ready";
117
+ }) | {
118
+ state: "loading";
119
+ sideNavProps: AdminSideNavProps;
120
+ pageTitle: string;
121
+ message?: string;
122
+ } | {
123
+ state: "error" | "notFound" | "empty";
124
+ sideNavProps: AdminSideNavProps;
125
+ pageTitle: string;
126
+ message: string;
127
+ actionLabel?: string;
128
+ onActionClick?: () => void;
129
+ };
130
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
3
+ export interface AdminPageTemplateShellProps {
4
+ pageTitle: string;
5
+ pageDescription?: string;
6
+ sideNavProps: AdminSideNavProps;
7
+ headerLeading?: ReactNode;
8
+ headerActions?: ReactNode;
9
+ children: ReactNode;
10
+ }
@@ -0,0 +1,8 @@
1
+ export type AdminTemplateState = "loading" | "ready" | "empty" | "error";
2
+ export interface AdminTemplateStatus {
3
+ state: AdminTemplateState;
4
+ title?: string;
5
+ message?: string;
6
+ detail?: string;
7
+ retryLabel?: string;
8
+ }
@@ -0,0 +1,78 @@
1
+ import type { AdminSideNavProps } from "../../../organisms/navigation/AdminSideNavProps";
2
+ import type { DataReportRowUpdatePayload } from "../../../organisms/collections/datareportcollection/DataReportCollectionProps";
3
+ export type AdminUsersTemplateState = "loading" | "error" | "ready";
4
+ export type AdminUsersRole = "user" | "admin";
5
+ export interface AdminUsersRoleOption {
6
+ label: string;
7
+ value: AdminUsersRole;
8
+ }
9
+ export interface AdminUsersCreateDraft {
10
+ email: string;
11
+ role: AdminUsersRole;
12
+ active: boolean;
13
+ }
14
+ export interface AdminUsersTemplateUser {
15
+ email: string;
16
+ role: AdminUsersRole;
17
+ active: boolean;
18
+ isCurrentUser?: boolean;
19
+ activeToggleDisabled?: boolean;
20
+ removeDisabled?: boolean;
21
+ }
22
+ export interface AdminUsersEmailChangePayload {
23
+ value: string;
24
+ }
25
+ export interface AdminUsersRoleChangePayload {
26
+ role: AdminUsersRole;
27
+ }
28
+ export interface AdminUsersActiveChangePayload {
29
+ active: boolean;
30
+ }
31
+ export interface AdminUsersCreatePayload {
32
+ user: AdminUsersCreateDraft;
33
+ }
34
+ export interface AdminUsersUserActionPayload {
35
+ user: AdminUsersTemplateUser;
36
+ }
37
+ export interface AdminUsersDeleteConfirmPayload {
38
+ email: string;
39
+ }
40
+ export interface AdminUsersTemplateProps {
41
+ pageTitle: string;
42
+ pageDescription?: string;
43
+ sideNavProps: AdminSideNavProps;
44
+ hasAdminAccess: boolean;
45
+ accessRequiredTitle?: string;
46
+ accessRequiredMessage?: string;
47
+ state: AdminUsersTemplateState;
48
+ loadingMessage?: string;
49
+ errorMessage?: string;
50
+ createUserDraft: AdminUsersCreateDraft;
51
+ roleOptions: AdminUsersRoleOption[];
52
+ users: AdminUsersTemplateUser[];
53
+ createMessage?: string;
54
+ updateMessage?: string;
55
+ deleteMessage?: string;
56
+ createPending?: boolean;
57
+ updatePending?: boolean;
58
+ deletePending?: boolean;
59
+ deleteUserEmail: string | null;
60
+ addUserLabel?: string;
61
+ addingUserLabel?: string;
62
+ updateLabel?: string;
63
+ updatingLabel?: string;
64
+ activateLabel?: string;
65
+ suspendLabel?: string;
66
+ removeLabel?: string;
67
+ removingLabel?: string;
68
+ cancelLabel?: string;
69
+ onNewUserEmailChange?: (payload: AdminUsersEmailChangePayload) => void;
70
+ onNewUserRoleChange?: (payload: AdminUsersRoleChangePayload) => void;
71
+ onNewUserActiveChange?: (payload: AdminUsersActiveChangePayload) => void;
72
+ onCreateUser?: (payload: AdminUsersCreatePayload) => void;
73
+ onRowUpdate?: (payload: DataReportRowUpdatePayload) => void;
74
+ onUserActiveToggle?: (payload: AdminUsersUserActionPayload) => void;
75
+ onDeleteUserRequest?: (payload: AdminUsersUserActionPayload) => void;
76
+ onDeleteModalClose?: () => void;
77
+ onDeleteUserConfirm?: (payload: AdminUsersDeleteConfirmPayload) => void;
78
+ }