@json-layout/core 2.7.1 → 2.8.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-layout/core",
3
- "version": "2.7.1",
3
+ "version": "2.8.1",
4
4
  "description": "Compilation and state management utilities for JSON Layout.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -82,7 +82,7 @@
82
82
  },
83
83
  "homepage": "https://github.com/json-layout/json-layout#readme",
84
84
  "peerDependencies": {
85
- "@json-layout/vocabulary": "^2.13.0"
85
+ "@json-layout/vocabulary": "^2.13.1"
86
86
  },
87
87
  "dependencies": {
88
88
  "ajv": "^8.17.1",
package/src/i18n/de.js CHANGED
@@ -8,6 +8,7 @@ export default {
8
8
  confirm: 'Bestätigen',
9
9
  close: 'Schließen',
10
10
  duplicate: 'Duplizieren',
11
+ insertAfter: 'Danach einfügen',
11
12
  copy: 'Kopie',
12
13
  paste: 'Paste',
13
14
  sort: 'Sortieren',
package/src/i18n/en.js CHANGED
@@ -8,6 +8,7 @@ export default {
8
8
  confirm: 'Confirm',
9
9
  close: 'Close',
10
10
  duplicate: 'Duplicate',
11
+ insertAfter: 'Insert after',
11
12
  copy: 'Copy',
12
13
  paste: 'Paste',
13
14
  sort: 'Sort',
package/src/i18n/fr.js CHANGED
@@ -8,6 +8,7 @@ export default {
8
8
  confirm: 'Confirmer',
9
9
  close: 'Fermer',
10
10
  duplicate: 'Dupliquer',
11
+ insertAfter: 'Insérer après',
11
12
  copy: 'Copier',
12
13
  paste: 'Coller',
13
14
  sort: 'Trier',
package/src/i18n/nl.js CHANGED
@@ -8,6 +8,7 @@ export default {
8
8
  edit: 'Bewerken',
9
9
  close: 'Sluiten',
10
10
  duplicate: 'Verveelvoudigen',
11
+ insertAfter: 'Hierna invoegen',
11
12
  copy: 'Kopiëren',
12
13
  paste: 'Plakken',
13
14
  sort: 'Sorteren',
package/src/i18n/types.ts CHANGED
@@ -12,6 +12,7 @@ export interface StateOptionsMessages {
12
12
  edit: string
13
13
  close: string
14
14
  duplicate: string
15
+ insertAfter: string
15
16
  copy: string
16
17
  paste: string
17
18
  sort: string
@@ -331,7 +331,12 @@ export class StatefulLayout {
331
331
  logGetItems(node.fullKey, 'automatic get items, fetched results', items)
332
332
  const rawData = /** @type {any[]} */(node.data ?? [])
333
333
  const existingItems = rawData.map(item => this.prepareSelectItem(node, item))
334
- const data = produceListData(rawData, existingItems, items)
334
+ const isList = node.layout.comp === 'list'
335
+ const listActions = isList ? /** @type {any} */(node.layout).listActions : null
336
+ const listEditMode = isList ? /** @type {any} */(node.layout).listEditMode : null
337
+ const preserveOrder = isList && Array.isArray(listActions) && listActions.includes('sort')
338
+ const replaceData = isList && Array.isArray(listActions) && !listActions.includes('edit') && listEditMode !== 'inline'
339
+ const data = produceListData(rawData, existingItems, items, preserveOrder, replaceData)
335
340
  logGetItems(node.fullKey, 'automatic get items, input produced data', data)
336
341
  this.input(node, data)
337
342
  }, err => console.error('error fetching items', node.fullKey, err))
@@ -1010,8 +1010,52 @@ export const producePatchedData = produce((draft, node, data) => {
1010
1010
  }
1011
1011
  })
1012
1012
 
1013
- /** @type {(existingData: any[], existingItems: import('@json-layout/vocabulary').SelectItems, newItems: import('@json-layout/vocabulary').SelectItems) => any} */
1014
- export const produceListData = (existingData, existingItems, newItems) => {
1013
+ /**
1014
+ * Merge a fresh getItems result into the list's current data.
1015
+ *
1016
+ * For every item in newItems, matched by key against existingItems:
1017
+ * - matching key: the existing data entry is preserved (local edits win,
1018
+ * the new item.value is discarded);
1019
+ * - new key: the new item.value is used;
1020
+ * - existing keys absent from newItems: dropped.
1021
+ *
1022
+ * When preserveOrder is true (used when listActions includes 'sort'):
1023
+ * - the user's current order is kept for items that are still present;
1024
+ * - items new in newItems are appended at the end, in newItems order;
1025
+ * - items dropped from newItems are still removed.
1026
+ *
1027
+ * When preserveOrder is false (default), the order from newItems is used.
1028
+ *
1029
+ * When replaceData is true (used when items are not editable locally — i.e.
1030
+ * listActions does not include 'edit' and listEditMode is not 'inline'):
1031
+ * - on a matching key, the new item.value replaces the existing data
1032
+ * entry (server is the source of truth for non-editable items).
1033
+ *
1034
+ * When replaceData is false (default), local data is preserved on match.
1035
+ * @type {(existingData: any[], existingItems: import('@json-layout/vocabulary').SelectItems, newItems: import('@json-layout/vocabulary').SelectItems, preserveOrder?: boolean, replaceData?: boolean) => any}
1036
+ */
1037
+ export const produceListData = (existingData, existingItems, newItems, preserveOrder = false, replaceData = false) => {
1038
+ if (preserveOrder) {
1039
+ const newKeys = new Set(newItems.map(i => i.key))
1040
+ const existingKeys = new Set(existingItems.map(i => i.key))
1041
+ const data = []
1042
+ for (let i = 0; i < existingItems.length; i++) {
1043
+ if (newKeys.has(existingItems[i].key)) {
1044
+ if (replaceData) {
1045
+ data.push(newItems.find(n => n.key === existingItems[i].key)?.value)
1046
+ } else {
1047
+ data.push(existingData[i])
1048
+ }
1049
+ }
1050
+ }
1051
+ for (const item of newItems) {
1052
+ if (!existingKeys.has(item.key)) data.push(item.value)
1053
+ }
1054
+ return shallowProduceArray(existingData, data)
1055
+ }
1056
+ if (replaceData) {
1057
+ return shallowProduceArray(existingData, newItems.map(i => i.value))
1058
+ }
1015
1059
  const data = []
1016
1060
  for (const item of newItems) {
1017
1061
  const existingItem = existingItems.find(i => i.key === item.key)
@@ -7,6 +7,7 @@ declare const _default: {
7
7
  confirm: string;
8
8
  close: string;
9
9
  duplicate: string;
10
+ insertAfter: string;
10
11
  copy: string;
11
12
  paste: string;
12
13
  sort: string;
@@ -7,6 +7,7 @@ declare const _default: {
7
7
  confirm: string;
8
8
  close: string;
9
9
  duplicate: string;
10
+ insertAfter: string;
10
11
  copy: string;
11
12
  paste: string;
12
13
  sort: string;
@@ -7,6 +7,7 @@ declare const _default: {
7
7
  confirm: string;
8
8
  close: string;
9
9
  duplicate: string;
10
+ insertAfter: string;
10
11
  copy: string;
11
12
  paste: string;
12
13
  sort: string;
@@ -7,6 +7,7 @@ declare const _default: {
7
7
  edit: string;
8
8
  close: string;
9
9
  duplicate: string;
10
+ insertAfter: string;
10
11
  copy: string;
11
12
  paste: string;
12
13
  sort: string;
@@ -10,6 +10,7 @@ export interface StateOptionsMessages {
10
10
  edit: string;
11
11
  close: string;
12
12
  duplicate: string;
13
+ insertAfter: string;
13
14
  copy: string;
14
15
  paste: string;
15
16
  sort: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":"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"}
@@ -35,6 +35,29 @@ export function createStateNode(context: import("./types.js").CreateStateTreeCon
35
35
  export function useDefaultData(data: unknown, layout: import("@json-layout/vocabulary").BaseCompObject, options: import("./types.js").StateNodeOptions): boolean;
36
36
  /** @type {(draft: any, node: import('./types.js').StateNode, data: unknown) => any} */
37
37
  export const producePatchedData: (draft: any, node: import("./types.js").StateNode, data: unknown) => any;
38
- /** @type {(existingData: any[], existingItems: import('@json-layout/vocabulary').SelectItems, newItems: import('@json-layout/vocabulary').SelectItems) => any} */
39
- export const produceListData: (existingData: any[], existingItems: import("@json-layout/vocabulary").SelectItems, newItems: import("@json-layout/vocabulary").SelectItems) => any;
38
+ /**
39
+ * Merge a fresh getItems result into the list's current data.
40
+ *
41
+ * For every item in newItems, matched by key against existingItems:
42
+ * - matching key: the existing data entry is preserved (local edits win,
43
+ * the new item.value is discarded);
44
+ * - new key: the new item.value is used;
45
+ * - existing keys absent from newItems: dropped.
46
+ *
47
+ * When preserveOrder is true (used when listActions includes 'sort'):
48
+ * - the user's current order is kept for items that are still present;
49
+ * - items new in newItems are appended at the end, in newItems order;
50
+ * - items dropped from newItems are still removed.
51
+ *
52
+ * When preserveOrder is false (default), the order from newItems is used.
53
+ *
54
+ * When replaceData is true (used when items are not editable locally — i.e.
55
+ * listActions does not include 'edit' and listEditMode is not 'inline'):
56
+ * - on a matching key, the new item.value replaces the existing data
57
+ * entry (server is the source of truth for non-editable items).
58
+ *
59
+ * When replaceData is false (default), local data is preserved on match.
60
+ * @type {(existingData: any[], existingItems: import('@json-layout/vocabulary').SelectItems, newItems: import('@json-layout/vocabulary').SelectItems, preserveOrder?: boolean, replaceData?: boolean) => any}
61
+ */
62
+ export const produceListData: (existingData: any[], existingItems: import("@json-layout/vocabulary").SelectItems, newItems: import("@json-layout/vocabulary").SelectItems, preserveOrder?: boolean, replaceData?: boolean) => any;
40
63
  //# sourceMappingURL=state-node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"AAkRA;;;;;;;;;;;GAWG;AACH,4CAXW,OAAO,aAAa,EAAE,kBAAkB,EAAE,cAC1C,OAAO,yBAAyB,EAAE,UAAU,QAC5C,GAAG,WACH,OAAO,YAAY,EAAE,gBAAgB,WACrC,OAAO,oBAAoB,EAAE,OAAO,UACpC,OAAO,yBAAyB,EAAE,cAAc,aAChD,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,gBAAgB,CAAC,YAC9C,OAAO,iBACP,OAAO,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,GAC1D,GAAG,CAsBf;AAiCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yCAlBW,OAAO,YAAY,EAAE,sBAAsB,iBAC3C,OAAO,YAAY,EAAE,gBAAgB,kBACrC,OAAO,aAAa,EAAE,cAAc,OACpC,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,MAAM,kBACN,MAAM,GAAG,IAAI,YACb,OAAO,aAAa,EAAE,YAAY,mBAClC,OAAO,yBAAyB,EAAE,KAAK,GAAG,IAAI,iBAC9C,OAAO,oBAAoB,EAAE,OAAO,QACpC,GAAG,iBACH,OAAO,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,mBAC5D,OAAO,YAAY,EAAE,eAAe,cACpC,MAAM,eACN,OAAO,YAAY,EAAE,SAAS,GAC5B,OAAO,YAAY,EAAE,SAAS,CA2nB1C;AAl8BM,qCALI,OAAO,UACP,OAAO,yBAAyB,EAAE,cAAc,WAChD,OAAO,YAAY,EAAE,gBAAgB,GACnC,OAAO,CAMnB;AAg8BD,uFAAuF;AACvF,iCADW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,GAAG,CAgBjF;AAEF,kKAAkK;AAClK,8BADW,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,yBAAyB,EAAE,WAAW,KAAK,GAAG,CAY7J"}
1
+ {"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"AAkRA;;;;;;;;;;;GAWG;AACH,4CAXW,OAAO,aAAa,EAAE,kBAAkB,EAAE,cAC1C,OAAO,yBAAyB,EAAE,UAAU,QAC5C,GAAG,WACH,OAAO,YAAY,EAAE,gBAAgB,WACrC,OAAO,oBAAoB,EAAE,OAAO,UACpC,OAAO,yBAAyB,EAAE,cAAc,aAChD,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,gBAAgB,CAAC,YAC9C,OAAO,iBACP,OAAO,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,GAC1D,GAAG,CAsBf;AAiCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yCAlBW,OAAO,YAAY,EAAE,sBAAsB,iBAC3C,OAAO,YAAY,EAAE,gBAAgB,kBACrC,OAAO,aAAa,EAAE,cAAc,OACpC,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,MAAM,kBACN,MAAM,GAAG,IAAI,YACb,OAAO,aAAa,EAAE,YAAY,mBAClC,OAAO,yBAAyB,EAAE,KAAK,GAAG,IAAI,iBAC9C,OAAO,oBAAoB,EAAE,OAAO,QACpC,GAAG,iBACH,OAAO,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,mBAC5D,OAAO,YAAY,EAAE,eAAe,cACpC,MAAM,eACN,OAAO,YAAY,EAAE,SAAS,GAC5B,OAAO,YAAY,EAAE,SAAS,CA2nB1C;AAl8BM,qCALI,OAAO,UACP,OAAO,yBAAyB,EAAE,cAAc,WAChD,OAAO,YAAY,EAAE,gBAAgB,GACnC,OAAO,CAMnB;AAg8BD,uFAAuF;AACvF,iCADW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,GAAG,CAgBjF;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,8BAFU,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,KAAK,GAAG,CAkC5M"}