Skip to content

Commit 72d03c1

Browse files
committed
feat(schema): add more operation regarding paths
1 parent 5c177a7 commit 72d03c1

11 files changed

Lines changed: 303 additions & 71 deletions

File tree

components/schema/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@crystallize/schema",
3-
"version": "6.8.0",
3+
"version": "6.9.0",
44
"license": "MIT",
55
"repository": {
66
"type": "git",

components/schema/src/mass-operation/index.ts

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ import {
1515
UpdateProductOperationSchema,
1616
UpsertProductOperationSchema,
1717
DeleteItemOperationSchema,
18-
AddItemTreeNodeAliasesOperationSchema,
19-
AddItemTreeNodeShortcutsOperationSchema,
20-
AddItemTreeNodeHistoryOperationSchema,
2118
AddItemsToFlowStageOperationSchema,
2219
} from './item';
2320
import {
@@ -55,6 +52,17 @@ import {
5552
import { CreateTopicOperationSchema, UpdateTopicOperationSchema, UpsertTopicOperationSchema } from './topic';
5653
import { ModifyProductVariantPriceOperationSchema } from './product-variant';
5754
import { CreateFlowOperationSchema, UpdateFlowOperationSchema, UpsertFlowOperationSchema } from './flow';
55+
import {
56+
RemoveItemTreeNodeHistoryOperationSchema,
57+
SetItemTreeNodeHistoryOperationSchema,
58+
AddItemTreeNodeAliasesOperationSchema,
59+
SetItemTreeNodeAliasesOperationSchema,
60+
RemoveItemTreeNodeAliasesOperationSchema,
61+
AddItemTreeNodeHistoryOperationSchema,
62+
AddItemTreeNodeShortcutsOperationSchema,
63+
SetItemTreeNodeShortcutsOperationSchema,
64+
RemoveItemTreeNodeShortcutsOperationSchema,
65+
} from './item-tree-node';
5866

5967
export const OperationSchema = z.discriminatedUnion('intent', [
6068
DeleteItemOperationSchema,
@@ -113,14 +121,22 @@ export const OperationSchema = z.discriminatedUnion('intent', [
113121
UpdateTopicOperationSchema,
114122
UpsertTopicOperationSchema,
115123

116-
AddItemTreeNodeAliasesOperationSchema,
117-
AddItemTreeNodeShortcutsOperationSchema,
118-
AddItemTreeNodeHistoryOperationSchema,
119-
120124
CreateFlowOperationSchema,
121125
UpdateFlowOperationSchema,
122126
UpsertFlowOperationSchema,
123127
AddItemsToFlowStageOperationSchema,
128+
129+
AddItemTreeNodeAliasesOperationSchema,
130+
SetItemTreeNodeAliasesOperationSchema,
131+
RemoveItemTreeNodeAliasesOperationSchema,
132+
133+
AddItemTreeNodeHistoryOperationSchema,
134+
SetItemTreeNodeHistoryOperationSchema,
135+
RemoveItemTreeNodeHistoryOperationSchema,
136+
137+
AddItemTreeNodeShortcutsOperationSchema,
138+
SetItemTreeNodeShortcutsOperationSchema,
139+
RemoveItemTreeNodeShortcutsOperationSchema,
124140
]);
125141

126142
export const OperationsSchema = z.object({
@@ -147,12 +163,21 @@ export type {
147163
UpdateItemComponentOperation,
148164
UpdateSkuComponentOperation,
149165
DeleteItemOperation,
150-
AddItemTreeNodeAliasesOperation,
151-
AddItemTreeNodeShortcutsOperation,
152-
AddItemTreeNodeHistoryOperation,
153166
AddItemsToFlowStageOperation,
154167
} from './item';
155168

169+
export type {
170+
AddItemTreeNodeShortcutsOperation,
171+
AddItemTreeNodeAliasesOperation,
172+
AddItemTreeNodeHistoryOperation,
173+
SetItemTreeNodeShortcutsOperation,
174+
SetItemTreeNodeAliasesOperation,
175+
SetItemTreeNodeHistoryOperation,
176+
RemoveItemTreeNodeShortcutsOperation,
177+
RemoveItemTreeNodeAliasesOperation,
178+
RemoveItemTreeNodeHistoryOperation,
179+
} from './item-tree-node';
180+
156181
export type { CreateFlowOperation, UpdateFlowOperation, UpsertFlowOperation } from './flow';
157182

158183
export type {
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import { z } from 'zod';
2+
3+
import { checkResourceIdentifierOrId, IdSchema, RefSchema, ResourceIdentifierSchema } from '../shared';
4+
5+
const itemIdAndResourceIdentifierSchemaFields = {
6+
itemId: IdSchema.optional(),
7+
resourceIdentifier: ResourceIdentifierSchema.optional(),
8+
};
9+
10+
const createShortcutsFields = {
11+
_ref: RefSchema.optional(),
12+
...itemIdAndResourceIdentifierSchemaFields,
13+
shortcuts: z.array(
14+
z.object({
15+
parentId: IdSchema,
16+
position: z.number().int().min(0).optional(),
17+
}),
18+
),
19+
};
20+
21+
export const AddItemTreeNodeShortcutsOperationSchema = z
22+
.object({
23+
intent: z.literal('item/paths/addShortcuts'),
24+
...createShortcutsFields,
25+
})
26+
.superRefine(checkResourceIdentifierOrId);
27+
28+
export const SetItemTreeNodeShortcutsOperationSchema = z
29+
.object({
30+
intent: z.literal('item/paths/setShortcuts'),
31+
...createShortcutsFields,
32+
})
33+
.superRefine(checkResourceIdentifierOrId);
34+
35+
export const RemoveItemTreeNodeShortcutsOperationSchema = z
36+
.object({
37+
_ref: RefSchema.optional(),
38+
intent: z.literal('item/paths/removeShortcuts'),
39+
...itemIdAndResourceIdentifierSchemaFields,
40+
parentIds: z.array(IdSchema),
41+
})
42+
.superRefine(checkResourceIdentifierOrId);
43+
44+
const withPathsFields = {
45+
_ref: RefSchema.optional(),
46+
...itemIdAndResourceIdentifierSchemaFields,
47+
language: z.string().min(1),
48+
paths: z.array(z.string().min(1)),
49+
};
50+
51+
export const AddItemTreeNodeAliasesOperationSchema = z
52+
.object({
53+
intent: z.literal('item/paths/addAliases'),
54+
...withPathsFields,
55+
})
56+
.superRefine(checkResourceIdentifierOrId);
57+
58+
export const SetItemTreeNodeAliasesOperationSchema = z
59+
.object({
60+
intent: z.literal('item/paths/setAliases'),
61+
...withPathsFields,
62+
})
63+
.superRefine(checkResourceIdentifierOrId);
64+
65+
export const RemoveItemTreeNodeAliasesOperationSchema = z
66+
.object({
67+
intent: z.literal('item/paths/removeAliases'),
68+
...withPathsFields,
69+
})
70+
.superRefine(checkResourceIdentifierOrId);
71+
72+
export const AddItemTreeNodeHistoryOperationSchema = z
73+
.object({
74+
intent: z.literal('item/paths/addHistory'),
75+
...withPathsFields,
76+
})
77+
.superRefine(checkResourceIdentifierOrId);
78+
79+
export const SetItemTreeNodeHistoryOperationSchema = z
80+
.object({
81+
intent: z.literal('item/paths/setHistory'),
82+
...withPathsFields,
83+
})
84+
.superRefine(checkResourceIdentifierOrId);
85+
86+
export const RemoveItemTreeNodeHistoryOperationSchema = z
87+
.object({
88+
intent: z.literal('item/paths/removeHistory'),
89+
...withPathsFields,
90+
})
91+
.superRefine(checkResourceIdentifierOrId);
92+
93+
export type AddItemTreeNodeShortcutsOperation = z.infer<typeof AddItemTreeNodeShortcutsOperationSchema>;
94+
export type AddItemTreeNodeAliasesOperation = z.infer<typeof AddItemTreeNodeAliasesOperationSchema>;
95+
export type AddItemTreeNodeHistoryOperation = z.infer<typeof AddItemTreeNodeHistoryOperationSchema>;
96+
97+
export type RemoveItemTreeNodeShortcutsOperation = z.infer<typeof RemoveItemTreeNodeShortcutsOperationSchema>;
98+
export type RemoveItemTreeNodeAliasesOperation = z.infer<typeof RemoveItemTreeNodeAliasesOperationSchema>;
99+
export type RemoveItemTreeNodeHistoryOperation = z.infer<typeof RemoveItemTreeNodeHistoryOperationSchema>;
100+
101+
export type SetItemTreeNodeShortcutsOperation = z.infer<typeof SetItemTreeNodeShortcutsOperationSchema>;
102+
export type SetItemTreeNodeAliasesOperation = z.infer<typeof SetItemTreeNodeAliasesOperationSchema>;
103+
export type SetItemTreeNodeHistoryOperation = z.infer<typeof SetItemTreeNodeHistoryOperationSchema>;

components/schema/src/mass-operation/item.ts

Lines changed: 24 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import {
1111
import { checkResourceIdentifierOrId, IdSchema, RefSchema, ResourceIdentifierSchema } from '../shared';
1212
import { FlowContentActionConfigInputSchema, ItemFlowStageAssociationInputSchema } from '../pim/flow/flow-input';
1313

14+
const itemIdAndResourceIdentifierSchemaFields = {
15+
itemId: IdSchema.optional(),
16+
resourceIdentifier: ResourceIdentifierSchema.optional(),
17+
};
18+
1419
export const CreateDocumentOperationSchema = CreateDocumentInputSchema.extend({
1520
_ref: RefSchema.optional(),
1621
intent: z.literal('document/create'),
@@ -22,16 +27,14 @@ export const UpdateDocumentOperationSchema = UpdateDocumentInputSchema.extend({
2227
_ref: RefSchema.optional(),
2328
intent: z.literal('document/update'),
2429
language: z.string().min(1),
25-
itemId: IdSchema.optional(),
26-
resourceIdentifier: ResourceIdentifierSchema.optional(),
30+
...itemIdAndResourceIdentifierSchemaFields,
2731
}).superRefine(checkResourceIdentifierOrId);
2832

2933
export const UpsertDocumentOperationSchema = CreateDocumentInputSchema.extend({
3034
_ref: RefSchema.optional(),
3135
intent: z.literal('document/upsert'),
3236
language: z.string().min(1),
33-
itemId: IdSchema.optional(),
34-
resourceIdentifier: ResourceIdentifierSchema.optional(),
37+
...itemIdAndResourceIdentifierSchemaFields,
3538
});
3639

3740
export const CreateFolderOperationSchema = CreateFolderInputSchema.extend({
@@ -45,16 +48,14 @@ export const UpdateFolderOperationSchema = UpdateFolderInputSchema.extend({
4548
_ref: RefSchema.optional(),
4649
intent: z.literal('folder/update'),
4750
language: z.string().min(1),
48-
itemId: IdSchema.optional(),
49-
resourceIdentifier: ResourceIdentifierSchema.optional(),
51+
...itemIdAndResourceIdentifierSchemaFields,
5052
}).superRefine(checkResourceIdentifierOrId);
5153

5254
export const UpsertFolderOperationSchema = CreateFolderInputSchema.extend({
5355
_ref: RefSchema.optional(),
5456
intent: z.literal('folder/upsert'),
5557
language: z.string().min(1),
56-
itemId: IdSchema.optional(),
57-
resourceIdentifier: ResourceIdentifierSchema.optional(),
58+
...itemIdAndResourceIdentifierSchemaFields,
5859
});
5960

6061
export const CreateProductOperationSchema = CreateProductInputSchema.extend({
@@ -68,16 +69,14 @@ export const UpdateProductOperationSchema = UpdateProductInputSchema.extend({
6869
_ref: RefSchema.optional(),
6970
intent: z.literal('product/update'),
7071
language: z.string().min(1),
71-
itemId: IdSchema.optional(),
72-
resourceIdentifier: ResourceIdentifierSchema.optional(),
72+
...itemIdAndResourceIdentifierSchemaFields,
7373
}).superRefine(checkResourceIdentifierOrId);
7474

7575
export const UpsertProductOperationSchema = CreateProductInputSchema.extend({
7676
_ref: RefSchema.optional(),
7777
intent: z.literal('product/upsert'),
7878
language: z.string().min(1),
79-
itemId: IdSchema.optional(),
80-
resourceIdentifier: ResourceIdentifierSchema.optional(),
79+
...itemIdAndResourceIdentifierSchemaFields,
8180
});
8281

8382
export const UpdateItemComponentOperationSchema = z
@@ -86,8 +85,7 @@ export const UpdateItemComponentOperationSchema = z
8685
intent: z.literal('item/updateComponent/item'),
8786
language: z.string().min(1),
8887
component: ComponentContentInputSchema,
89-
itemId: IdSchema.optional(),
90-
resourceIdentifier: ResourceIdentifierSchema.optional(),
88+
...itemIdAndResourceIdentifierSchemaFields,
9189
})
9290
.superRefine(checkResourceIdentifierOrId);
9391

@@ -99,62 +97,31 @@ export const UpdateSkuComponentOperationSchema = z.object({
9997
sku: z.string(),
10098
});
10199

102-
export const PublishItemOperationSchema = z.object({
100+
const publishUnpublishItemBaseSchemaFields = {
103101
_ref: RefSchema.optional(),
104-
intent: z.literal('item/publish'),
105102
language: z.string().min(1),
106103
includeDescendants: z.boolean().optional(),
107-
itemId: IdSchema.optional(),
108-
resourceIdentifier: ResourceIdentifierSchema.optional(),
109-
});
110-
111-
export const UnPublishItemOperationSchema = PublishItemOperationSchema.omit({ intent: true }).extend({
112-
intent: z.literal('item/unpublish'),
113-
});
114-
115-
export const DeleteItemOperationSchema = z
104+
...itemIdAndResourceIdentifierSchemaFields,
105+
};
106+
export const PublishItemOperationSchema = z
116107
.object({
117-
_ref: RefSchema.optional(),
118-
intent: z.literal('item/delete'),
119-
itemId: IdSchema.optional(),
120-
resourceIdentifier: ResourceIdentifierSchema.optional(),
108+
intent: z.literal('item/publish'),
109+
...publishUnpublishItemBaseSchemaFields,
121110
})
122111
.superRefine(checkResourceIdentifierOrId);
123112

124-
export const AddItemTreeNodeShortcutsOperationSchema = z
113+
export const UnPublishItemOperationSchema = z
125114
.object({
126-
_ref: RefSchema.optional(),
127-
intent: z.literal('item/paths/addShortcuts'),
128-
itemId: IdSchema.optional(),
129-
resourceIdentifier: ResourceIdentifierSchema.optional(),
130-
shortcuts: z.array(
131-
z.object({
132-
parentId: IdSchema,
133-
position: z.number().int().min(0).optional(),
134-
}),
135-
),
115+
intent: z.literal('item/unpublish'),
116+
...publishUnpublishItemBaseSchemaFields,
136117
})
137118
.superRefine(checkResourceIdentifierOrId);
138119

139-
export const AddItemTreeNodeAliasesOperationSchema = z
140-
.object({
141-
_ref: RefSchema.optional(),
142-
intent: z.literal('item/paths/addAliases'),
143-
itemId: IdSchema.optional(),
144-
resourceIdentifier: ResourceIdentifierSchema.optional(),
145-
language: z.string().min(1),
146-
paths: z.array(z.string().min(1)),
147-
})
148-
.superRefine(checkResourceIdentifierOrId);
149-
150-
export const AddItemTreeNodeHistoryOperationSchema = z
120+
export const DeleteItemOperationSchema = z
151121
.object({
152122
_ref: RefSchema.optional(),
153-
intent: z.literal('item/paths/addHistory'),
154-
itemId: IdSchema.optional(),
155-
resourceIdentifier: ResourceIdentifierSchema.optional(),
156-
language: z.string().min(1),
157-
paths: z.array(z.string().min(1)),
123+
intent: z.literal('item/delete'),
124+
...itemIdAndResourceIdentifierSchemaFields,
158125
})
159126
.superRefine(checkResourceIdentifierOrId);
160127

@@ -185,7 +152,4 @@ export type CreateProductOperation = z.infer<typeof CreateProductOperationSchema
185152
export type UpdateProductOperation = z.infer<typeof UpdateProductOperationSchema>;
186153
export type UpsertProductOperation = z.infer<typeof UpsertProductOperationSchema>;
187154

188-
export type AddItemTreeNodeShortcutsOperation = z.infer<typeof AddItemTreeNodeShortcutsOperationSchema>;
189-
export type AddItemTreeNodeAliasesOperation = z.infer<typeof AddItemTreeNodeAliasesOperationSchema>;
190-
export type AddItemTreeNodeHistoryOperation = z.infer<typeof AddItemTreeNodeHistoryOperationSchema>;
191155
export type AddItemsToFlowStageOperation = z.infer<typeof AddItemsToFlowStageOperationSchema>;

components/schema/tests/mass-operation/valid-files/mass-op-paths.json renamed to components/schema/tests/mass-operation/valid-files/mass-op-item-paths.json

File renamed without changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"version": "0.0.1",
3+
"operations": [
4+
{
5+
"_ref": "itemA",
6+
"intent": "folder/upsert",
7+
"tree": {
8+
"parentId": "{{ defaults.rootItemId }}"
9+
},
10+
"language": "en",
11+
"shapeIdentifier": "default-folder",
12+
"name": "Item A",
13+
"resourceIdentifier": "item-a"
14+
},
15+
{
16+
"_ref": "removeAlias",
17+
"intent": "item/paths/removeAliases",
18+
"language": "en",
19+
"itemId": "{{ itemA.itemId }}",
20+
"paths": ["/remove-alias-path"]
21+
}
22+
]
23+
}

0 commit comments

Comments
 (0)