@genesislcap/foundation-forms 14.473.0 → 14.474.0-canary.TAM-8.26-patch.2

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.
@@ -1460,6 +1460,15 @@
1460
1460
  "privacy": "private",
1461
1461
  "default": "false"
1462
1462
  },
1463
+ {
1464
+ "kind": "field",
1465
+ "name": "serverErrors",
1466
+ "type": {
1467
+ "text": "ErrorObject[]"
1468
+ },
1469
+ "privacy": "private",
1470
+ "default": "[]"
1471
+ },
1463
1472
  {
1464
1473
  "kind": "field",
1465
1474
  "name": "submitted",
@@ -1595,6 +1604,19 @@
1595
1604
  "kind": "method",
1596
1605
  "name": "bulkInsertChanged"
1597
1606
  },
1607
+ {
1608
+ "kind": "field",
1609
+ "name": "serverFieldErrors",
1610
+ "type": {
1611
+ "text": "ErrorObject[]"
1612
+ },
1613
+ "default": "[]",
1614
+ "description": "Server-side field validation errors from the parent foundation-form.\nSynced into internal state when the binding changes."
1615
+ },
1616
+ {
1617
+ "kind": "method",
1618
+ "name": "serverFieldErrorsChanged"
1619
+ },
1598
1620
  {
1599
1621
  "kind": "field",
1600
1622
  "name": "props",
@@ -1607,6 +1629,75 @@
1607
1629
  "kind": "field",
1608
1630
  "name": "dispatch"
1609
1631
  },
1632
+ {
1633
+ "kind": "method",
1634
+ "name": "setServerErrors",
1635
+ "parameters": [
1636
+ {
1637
+ "name": "errors",
1638
+ "type": {
1639
+ "text": "ErrorObject[]"
1640
+ }
1641
+ }
1642
+ ],
1643
+ "description": "Applies server-side validation errors returned from an EVENT_NACK response.\nErrors are merged into `core.additionalErrors` and shown inline on fields.",
1644
+ "privacy": "public"
1645
+ },
1646
+ {
1647
+ "kind": "method",
1648
+ "name": "clearServerErrors",
1649
+ "description": "Clears all server-side validation errors from the form.",
1650
+ "privacy": "public"
1651
+ },
1652
+ {
1653
+ "kind": "method",
1654
+ "name": "buildAdditionalErrors",
1655
+ "privacy": "private",
1656
+ "return": {
1657
+ "type": {
1658
+ "text": "ErrorObject[]"
1659
+ }
1660
+ },
1661
+ "parameters": [
1662
+ {
1663
+ "name": "uischema",
1664
+ "type": {
1665
+ "text": "UISchemaElement"
1666
+ }
1667
+ },
1668
+ {
1669
+ "name": "data",
1670
+ "type": {
1671
+ "text": "any"
1672
+ }
1673
+ }
1674
+ ]
1675
+ },
1676
+ {
1677
+ "kind": "method",
1678
+ "name": "applyAdditionalErrorsToCore",
1679
+ "privacy": "private",
1680
+ "parameters": [
1681
+ {
1682
+ "name": "nextCore",
1683
+ "type": {
1684
+ "text": "JsonFormsCore"
1685
+ }
1686
+ },
1687
+ {
1688
+ "name": "changedPath",
1689
+ "optional": true,
1690
+ "type": {
1691
+ "text": "string"
1692
+ }
1693
+ }
1694
+ ]
1695
+ },
1696
+ {
1697
+ "kind": "method",
1698
+ "name": "refreshAdditionalErrors",
1699
+ "privacy": "private"
1700
+ },
1610
1701
  {
1611
1702
  "kind": "field",
1612
1703
  "name": "validate",
@@ -1943,6 +2034,14 @@
1943
2034
  "package": "./validation"
1944
2035
  }
1945
2036
  },
2037
+ {
2038
+ "kind": "js",
2039
+ "name": "*",
2040
+ "declaration": {
2041
+ "name": "*",
2042
+ "package": "./server-errors"
2043
+ }
2044
+ },
1946
2045
  {
1947
2046
  "kind": "js",
1948
2047
  "name": "*",
@@ -1965,6 +2064,58 @@
1965
2064
  "declarations": [],
1966
2065
  "exports": []
1967
2066
  },
2067
+ {
2068
+ "kind": "javascript-module",
2069
+ "path": "src/utils/server-errors.ts",
2070
+ "declarations": [
2071
+ {
2072
+ "kind": "function",
2073
+ "name": "mapGenesisFieldErrorsToAdditionalErrors",
2074
+ "return": {
2075
+ "type": {
2076
+ "text": "ErrorObject[]"
2077
+ }
2078
+ },
2079
+ "parameters": [
2080
+ {
2081
+ "name": "errors",
2082
+ "type": {
2083
+ "text": "GenesisFieldError[] | undefined"
2084
+ },
2085
+ "description": "Genesis ERROR array from an EVENT_NACK response"
2086
+ },
2087
+ {
2088
+ "name": "schema",
2089
+ "optional": true,
2090
+ "type": {
2091
+ "text": "JSONSchema7"
2092
+ },
2093
+ "description": "JSON schema used to resolve `parentSchema` for each field"
2094
+ },
2095
+ {
2096
+ "name": "instancePathPrefix",
2097
+ "optional": true,
2098
+ "type": {
2099
+ "text": "string"
2100
+ },
2101
+ "description": "Optional prefix for bulk-insert rows (e.g. `/items/0`)"
2102
+ }
2103
+ ],
2104
+ "description": "Maps Genesis commitEvent NACK `ERROR[]` entries to JsonForms `ErrorObject[]`\nsuitable for `additionalErrors` on the form core.\n\nOnly entries with a `FIELD` or `PATH` are mapped; generic errors (no field\nassociation) are omitted so callers can still surface them via toast/dialog.",
2105
+ "privacy": "public"
2106
+ }
2107
+ ],
2108
+ "exports": [
2109
+ {
2110
+ "kind": "js",
2111
+ "name": "mapGenesisFieldErrorsToAdditionalErrors",
2112
+ "declaration": {
2113
+ "name": "mapGenesisFieldErrorsToAdditionalErrors",
2114
+ "module": "src/utils/server-errors.ts"
2115
+ }
2116
+ }
2117
+ ]
2118
+ },
1968
2119
  {
1969
2120
  "kind": "javascript-module",
1970
2121
  "path": "src/utils/translation.ts",
@@ -2370,6 +2521,46 @@
2370
2521
  "kind": "javascript-module",
2371
2522
  "path": "src/jsonforms/renderers/ConnectedMultiselectControlRenderer.ts",
2372
2523
  "declarations": [
2524
+ {
2525
+ "kind": "function",
2526
+ "name": "resolveSelectedOptions",
2527
+ "return": {
2528
+ "type": {
2529
+ "text": "any[]"
2530
+ }
2531
+ },
2532
+ "parameters": [
2533
+ {
2534
+ "name": "control",
2535
+ "type": {
2536
+ "text": "any"
2537
+ }
2538
+ }
2539
+ ]
2540
+ },
2541
+ {
2542
+ "kind": "function",
2543
+ "name": "resolveSelectionValue",
2544
+ "return": {
2545
+ "type": {
2546
+ "text": "any"
2547
+ }
2548
+ },
2549
+ "parameters": [
2550
+ {
2551
+ "name": "control",
2552
+ "type": {
2553
+ "text": "any"
2554
+ }
2555
+ },
2556
+ {
2557
+ "name": "detail",
2558
+ "type": {
2559
+ "text": "any"
2560
+ }
2561
+ }
2562
+ ]
2563
+ },
2373
2564
  {
2374
2565
  "kind": "function",
2375
2566
  "name": "ConnectedMultiselectControlRendererTemplate",
@@ -2393,6 +2584,22 @@
2393
2584
  }
2394
2585
  ],
2395
2586
  "exports": [
2587
+ {
2588
+ "kind": "js",
2589
+ "name": "resolveSelectedOptions",
2590
+ "declaration": {
2591
+ "name": "resolveSelectedOptions",
2592
+ "module": "src/jsonforms/renderers/ConnectedMultiselectControlRenderer.ts"
2593
+ }
2594
+ },
2595
+ {
2596
+ "kind": "js",
2597
+ "name": "resolveSelectionValue",
2598
+ "declaration": {
2599
+ "name": "resolveSelectionValue",
2600
+ "module": "src/jsonforms/renderers/ConnectedMultiselectControlRenderer.ts"
2601
+ }
2602
+ },
2396
2603
  {
2397
2604
  "kind": "js",
2398
2605
  "name": "ConnectedMultiselectControlRendererTemplate",
@@ -1,4 +1,5 @@
1
1
  import { FoundationElement } from '@microsoft/fast-foundation';
2
+ import { ErrorObject } from 'ajv';
2
3
  import { JSONSchema7 } from 'json-schema';
3
4
  import { BulkRowStatus, RendererEntry, UiSchema } from './types';
4
5
  /**
@@ -443,6 +444,12 @@ export declare class Form extends Form_base {
443
444
  * @internal
444
445
  */
445
446
  csvFileInput: HTMLInputElement;
447
+ /**
448
+ * Server-side field validation errors mapped from EVENT_NACK responses.
449
+ * Passed to json-forms via binding; cleared on reset and successful submit.
450
+ * @internal
451
+ */
452
+ serverFieldErrors: ErrorObject[];
446
453
  /**
447
454
  * Stores the approval message entered by the user.
448
455
  * @internal
@@ -671,6 +678,16 @@ export declare class Form extends Form_base {
671
678
  * @public
672
679
  */
673
680
  reset(clearData?: boolean): void;
681
+ /**
682
+ * Maps Genesis EVENT_NACK field errors onto the form via additionalErrors.
683
+ * @internal
684
+ */
685
+ private applyServerFieldErrors;
686
+ /**
687
+ * Maps field errors from failed bulk-insert rows onto the form.
688
+ * @internal
689
+ */
690
+ private applyBulkServerFieldErrors;
674
691
  /**
675
692
  * Show the approval message modal
676
693
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form.template.d.ts","sourceRoot":"","sources":["../../src/form.template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBnC,gBAAgB;AAChB,eAAO,MAAM,eAAe,GAAI,WAAM,8DAiHrC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,sBAAsB,2DAElC,CAAC"}
1
+ {"version":3,"file":"form.template.d.ts","sourceRoot":"","sources":["../../src/form.template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBnC,gBAAgB;AAChB,eAAO,MAAM,eAAe,GAAI,WAAM,8DAkHrC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,sBAAsB,2DAElC,CAAC"}
@@ -11,6 +11,7 @@ import { BulkRowStatus } from '../types';
11
11
  */
12
12
  export declare class JSONForms extends FASTElement {
13
13
  private _submitted;
14
+ private serverErrors;
14
15
  get submitted(): boolean;
15
16
  set submitted(value: boolean);
16
17
  prefix: any;
@@ -46,8 +47,28 @@ export declare class JSONForms extends FASTElement {
46
47
  */
47
48
  bulkInsert: boolean;
48
49
  bulkInsertChanged(): void;
50
+ /**
51
+ * Server-side field validation errors from the parent foundation-form.
52
+ * Synced into internal state when the binding changes.
53
+ */
54
+ serverFieldErrors: ErrorObject[];
55
+ serverFieldErrorsChanged(): void;
49
56
  get props(): RendererProps;
50
57
  dispatch: (action: UpdateAction) => void;
58
+ /**
59
+ * Applies server-side validation errors returned from an EVENT_NACK response.
60
+ * Errors are merged into `core.additionalErrors` and shown inline on fields.
61
+ * @public
62
+ */
63
+ setServerErrors(errors: ErrorObject[]): void;
64
+ /**
65
+ * Clears all server-side validation errors from the form.
66
+ * @public
67
+ */
68
+ clearServerErrors(): void;
69
+ private buildAdditionalErrors;
70
+ private applyAdditionalErrorsToCore;
71
+ private refreshAdditionalErrors;
51
72
  /**
52
73
  * Performs client-side validation by running the validator defined in the UI schema.
53
74
  * @param uischema the UI schema
@@ -1 +1 @@
1
- {"version":3,"file":"json-forms.d.ts","sourceRoot":"","sources":["../../../src/jsonforms/json-forms.ts"],"names":[],"mappings":"AACA,OAAO,EASL,8BAA8B,EAE9B,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,WAAW,EAKZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmCzC;;;;;;GAMG;AACH,qBAUa,SAAU,SAAQ,WAAW;IACxC,OAAO,CAAC,UAAU,CAAS;IAE3B,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAG3B;IAEW,MAAM,MAAC;IACnB,aAAa;IAGD,SAAS,MAAC;IACV,IAAI,MAAC;IACL,YAAY,MAAC;IAEb,MAAM,MAAC;IACnB,aAAa;IA2DD,QAAQ,EAAE,eAAe,CAAC;IACtC,eAAe;IAIH,IAAI,MAAC;IACjB,WAAW;IAkCC,SAAS,EAAE,8BAA8B,EAAE,CAAC;IACxD,gBAAgB;IAIJ,cAAc,EAAE,cAAc,CAAC;IAC3C,qBAAqB;IAIT,GAAG,EAAE,GAAG,CAAiD;IACrE,UAAU;IAIiB,QAAQ,EAAE,OAAO,CAAC;IAC7C,eAAe;IAIH,MAAM,EAAE,GAAG,CAAC;IACxB,aAAa;IAIb;;;OAGG;IACS,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;IACtE,wBAAwB;IAUxB;;;OAGG;IACS,UAAU,EAAE,OAAO,CAAS;IACxC,iBAAiB;IAUjB,IAAI,KAAK,IAAI,aAAa,CAuBzB;IAED,QAAQ,GAAI,QAAQ,YAAY,UAoB9B;IAEF;;;;;OAKG;IACH,QAAQ,GAAI,UAAU,eAAe,EAAE,UAAiC,KAAG,WAAW,EAAE,CAoDtF;IAEI,uBAAuB;CAQ9B"}
1
+ {"version":3,"file":"json-forms.d.ts","sourceRoot":"","sources":["../../../src/jsonforms/json-forms.ts"],"names":[],"mappings":"AACA,OAAO,EASL,8BAA8B,EAE9B,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,WAAW,EAKZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmCzC;;;;;;GAMG;AACH,qBAUa,SAAU,SAAQ,WAAW;IACxC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAqB;IAEzC,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAG3B;IAEW,MAAM,MAAC;IACnB,aAAa;IAGD,SAAS,MAAC;IACV,IAAI,MAAC;IACL,YAAY,MAAC;IAEb,MAAM,MAAC;IACnB,aAAa;IA+DD,QAAQ,EAAE,eAAe,CAAC;IACtC,eAAe;IAIH,IAAI,MAAC;IACjB,WAAW;IAwBC,SAAS,EAAE,8BAA8B,EAAE,CAAC;IACxD,gBAAgB;IAIJ,cAAc,EAAE,cAAc,CAAC;IAC3C,qBAAqB;IAIT,GAAG,EAAE,GAAG,CAAiD;IACrE,UAAU;IAIiB,QAAQ,EAAE,OAAO,CAAC;IAC7C,eAAe;IAIH,MAAM,EAAE,GAAG,CAAC;IACxB,aAAa;IAIb;;;OAGG;IACS,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;IACtE,wBAAwB;IAUxB;;;OAGG;IACS,UAAU,EAAE,OAAO,CAAS;IACxC,iBAAiB;IAUjB;;;OAGG;IACS,iBAAiB,EAAE,WAAW,EAAE,CAAM;IAClD,wBAAwB;IAIxB,IAAI,KAAK,IAAI,aAAa,CAuBzB;IAED,QAAQ,GAAI,QAAQ,YAAY,UAe9B;IAEF;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE;IAKrC;;;OAGG;IACH,iBAAiB;IAKjB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,uBAAuB;IAO/B;;;;;OAKG;IACH,QAAQ,GAAI,UAAU,eAAe,EAAE,UAAiC,KAAG,WAAW,EAAE,CAoDtF;IAEI,uBAAuB;CAQ9B"}
@@ -1,5 +1,7 @@
1
1
  import { RendererEntry } from '../../types';
2
2
  import { DispatchRenderer } from './dispatch-renderer';
3
+ export declare const resolveSelectedOptions: (control: any) => any[];
4
+ export declare const resolveSelectionValue: (control: any, detail: any) => any;
3
5
  export declare const ConnectedMultiselectControlRendererTemplate: (prefix?: string) => import("@microsoft/fast-element").ViewTemplate<DispatchRenderer, any>;
4
6
  export declare const ConnectedMultiselectControlRendererEntry: RendererEntry;
5
7
  //# sourceMappingURL=ConnectedMultiselectControlRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedMultiselectControlRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/ConnectedMultiselectControlRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD,eAAO,MAAM,2CAA2C,GACtD,SAAQ,MAAe,0EAuCxB,CAAC;AAEF,eAAO,MAAM,wCAAwC,EAAE,aAMtD,CAAC"}
1
+ {"version":3,"file":"ConnectedMultiselectControlRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/ConnectedMultiselectControlRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD,eAAO,MAAM,sBAAsB,GAAI,SAAS,GAAG,KAAG,GAAG,EAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,GAAG,EAAE,QAAQ,GAAG,KAAG,GAMjE,CAAC;AAEF,eAAO,MAAM,2CAA2C,GACtD,SAAQ,MAAe,0EAgCxB,CAAC;AAEF,eAAO,MAAM,wCAAwC,EAAE,aAMtD,CAAC"}
@@ -3,5 +3,6 @@ export * from './filters';
3
3
  export * from './logger';
4
4
  export * from './translation';
5
5
  export * from './validation';
6
+ export * from './server-errors';
6
7
  export * from './types';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { ErrorObject } from 'ajv';
2
+ import { JSONSchema7 } from 'json-schema';
3
+ /**
4
+ * Genesis EVENT_NACK field-level error entry.
5
+ * @public
6
+ */
7
+ export type GenesisFieldError = {
8
+ '@type'?: string;
9
+ CODE?: string;
10
+ TEXT: string;
11
+ STATUS_CODE?: string;
12
+ FIELD?: string;
13
+ PATH?: string | null;
14
+ };
15
+ /**
16
+ * Converts a JsonForms/Ajv instance path to a JSON Forms scope string.
17
+ * @example `/items/0/CCY` → `#/properties/items/items/0/properties/CCY`
18
+ * @internal
19
+ */
20
+ export declare function instancePathToJsonFormsScope(instancePath: string): string;
21
+ /**
22
+ * Converts a Genesis JSON-path or FIELD name to a JsonForms instance path.
23
+ * Strips the `$.` prefix and optional `DETAILS` segment used in event payloads.
24
+ * @internal
25
+ */
26
+ export declare function genesisFieldToInstancePath(field?: string, path?: string | null, instancePathPrefix?: string): string | null;
27
+ /**
28
+ * Maps Genesis commitEvent NACK `ERROR[]` entries to JsonForms `ErrorObject[]`
29
+ * suitable for `additionalErrors` on the form core.
30
+ *
31
+ * Only entries with a `FIELD` or `PATH` are mapped; generic errors (no field
32
+ * association) are omitted so callers can still surface them via toast/dialog.
33
+ *
34
+ * @param errors - Genesis ERROR array from an EVENT_NACK response
35
+ * @param schema - JSON schema used to resolve `parentSchema` for each field
36
+ * @param instancePathPrefix - Optional prefix for bulk-insert rows (e.g. `/items/0`)
37
+ * @public
38
+ */
39
+ export declare function mapGenesisFieldErrorsToAdditionalErrors(errors: GenesisFieldError[] | undefined, schema?: JSONSchema7, instancePathPrefix?: string): ErrorObject[];
40
+ //# sourceMappingURL=server-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-errors.d.ts","sourceRoot":"","sources":["../../../src/utils/server-errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAkBzE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAuBf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,EACvC,MAAM,CAAC,EAAE,WAAW,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,WAAW,EAAE,CAoCf"}
package/dist/esm/form.js CHANGED
@@ -29,7 +29,7 @@ import { NumberControlRendererEntry } from './jsonforms/renderers/NumberControlR
29
29
  import { SegmentedControlRendererEntry } from './jsonforms/renderers/SegmentedControlRenderer';
30
30
  import { StringArrayEntry } from './jsonforms/renderers/StringArrayControlRenderer';
31
31
  import { StringControlRendererTemplate } from './jsonforms/renderers/StringControlRenderer';
32
- import { downloadCsvTemplate as downloadCsvFile, extractFieldsFromUiSchema, generateCsvTemplate, logger, mapCsvToSchema, parseCsv, } from './utils';
32
+ import { downloadCsvTemplate as downloadCsvFile, extractFieldsFromUiSchema, generateCsvTemplate, logger, mapCsvToSchema, mapGenesisFieldErrorsToAdditionalErrors, parseCsv, } from './utils';
33
33
  import { findModalParent, showConfirmationDialog } from './utils/confirmation-dialog-utils';
34
34
  import { removeDataPropertiesNotInSchema } from './utils/form-utils';
35
35
  import { generateBulkUiSchema, isBulkUiSchema } from './utils/schema-utils';
@@ -106,6 +106,12 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
106
106
  * @public
107
107
  */
108
108
  this.approvalMessageLabel = 'Approval Message';
109
+ /**
110
+ * Server-side field validation errors mapped from EVENT_NACK responses.
111
+ * Passed to json-forms via binding; cleared on reset and successful submit.
112
+ * @internal
113
+ */
114
+ this.serverFieldErrors = [];
109
115
  /**
110
116
  * Stores the approval message entered by the user.
111
117
  * @internal
@@ -298,6 +304,7 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
298
304
  this.showApprovalModal();
299
305
  }
300
306
  else {
307
+ this.applyServerFieldErrors(formSubmitReq.ERROR);
301
308
  this.$emit('submit-failure', { payload, errors: formSubmitReq.ERROR });
302
309
  }
303
310
  }
@@ -391,15 +398,18 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
391
398
  this.$emit('bulk-submit-complete', results);
392
399
  // Also emit standard events based on overall result
393
400
  if (results.failed.length === 0) {
401
+ this.serverFieldErrors = [];
394
402
  this.$emit('submit-success', { payload: this.data, results });
395
403
  }
396
404
  else if (results.successful.length === 0) {
405
+ this.applyBulkServerFieldErrors(results.failed);
397
406
  this.$emit('submit-failure', {
398
407
  payload: this.data,
399
408
  errors: results.failed.flatMap((f) => f.errors),
400
409
  });
401
410
  }
402
411
  else {
412
+ this.applyBulkServerFieldErrors(results.failed);
403
413
  // Partial success - emit both events
404
414
  this.$emit('submit-partial-success', { payload: this.data, results });
405
415
  }
@@ -462,6 +472,7 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
462
472
  const response = yield this.connect.commitEvent(this.resourceName, commitPayload);
463
473
  if (response.ERROR) {
464
474
  this.updateRowStatus(index, { status: 'failed', errors: response.ERROR });
475
+ this.applyServerFieldErrors(response.ERROR, `/items/${index}`);
465
476
  this.$emit('row-submit-failure', { index, item, errors: response.ERROR });
466
477
  }
467
478
  else {
@@ -595,11 +606,26 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
595
606
  reset(clearData = true) {
596
607
  this.submitted = false;
597
608
  this.clearRowSubmitStatuses();
609
+ this.serverFieldErrors = [];
598
610
  if (clearData) {
599
611
  this.data = {};
600
612
  }
601
613
  Observable.notify(this, 'submitted');
602
614
  }
615
+ /**
616
+ * Maps Genesis EVENT_NACK field errors onto the form via additionalErrors.
617
+ * @internal
618
+ */
619
+ applyServerFieldErrors(errors, instancePathPrefix) {
620
+ this.serverFieldErrors = mapGenesisFieldErrorsToAdditionalErrors(errors, this.jsonSchema, instancePathPrefix);
621
+ }
622
+ /**
623
+ * Maps field errors from failed bulk-insert rows onto the form.
624
+ * @internal
625
+ */
626
+ applyBulkServerFieldErrors(failed) {
627
+ this.serverFieldErrors = failed.flatMap(({ index, errors }) => mapGenesisFieldErrorsToAdditionalErrors(errors, this.jsonSchema, `/items/${index}`));
628
+ }
603
629
  /**
604
630
  * Show the approval message modal
605
631
  * @internal
@@ -644,6 +670,7 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
644
670
  const formSubmitReq = yield this.connect.commitEvent(this.resourceName, commitPayload);
645
671
  this.submitting = false;
646
672
  if (formSubmitReq.ERROR) {
673
+ this.applyServerFieldErrors(formSubmitReq.ERROR);
647
674
  this.$emit('submit-failure', { payload: this.pendingPayload, errors: formSubmitReq.ERROR });
648
675
  }
649
676
  else {
@@ -787,6 +814,9 @@ __decorate([
787
814
  __decorate([
788
815
  attr({ attribute: 'approval-message-label' })
789
816
  ], Form.prototype, "approvalMessageLabel", void 0);
817
+ __decorate([
818
+ observable
819
+ ], Form.prototype, "serverFieldErrors", void 0);
790
820
  __decorate([
791
821
  observable
792
822
  ], Form.prototype, "approvalMessage", void 0);
@@ -50,6 +50,7 @@ export const getPrefixedForm = (prefix) => html `
50
50
  :uischema=${(x) => x.uischema}
51
51
  :schema=${(x) => x.jsonSchema}
52
52
  :data=${(x) => x.data}
53
+ :serverFieldErrors=${(x) => x.serverFieldErrors}
53
54
  :prefix=${(x) => x.prefix}
54
55
  :rowSubmitStatuses=${(x) => x.rowSubmitStatuses}
55
56
  :bulkInsert=${(x) => x.bulkInsert}
@@ -37,6 +37,7 @@ let JSONForms = class JSONForms extends FASTElement {
37
37
  constructor() {
38
38
  super(...arguments);
39
39
  this._submitted = false;
40
+ this.serverErrors = [];
40
41
  this.ajv = createAjv({ useDefaults: true, $data: true });
41
42
  /**
42
43
  * Row submit statuses for bulk insert mode.
@@ -48,22 +49,24 @@ let JSONForms = class JSONForms extends FASTElement {
48
49
  * Passed from the parent foundation-form.
49
50
  */
50
51
  this.bulkInsert = false;
52
+ /**
53
+ * Server-side field validation errors from the parent foundation-form.
54
+ * Synced into internal state when the binding changes.
55
+ */
56
+ this.serverFieldErrors = [];
51
57
  this.dispatch = (action) => {
52
58
  // Re-run custom validators against the updated data and push the result
53
59
  // back into core so renderers (which read `core.additionalErrors`) see
54
60
  // the fresh errors. Without this, the value baked in by `Actions.init`
55
61
  // sticks forever even when validators would now return [].
56
62
  const nextCore = coreReducer(this.jsonforms.core, action);
57
- // Validate against the post-action data, not `this.jsonforms.core.data`
58
- // (which is still the pre-action snapshot at this point).
59
- const additionalErrors = this.validate(this.uichemaToUse, nextCore.data);
60
- this.jsonforms = Object.assign(Object.assign({}, this.jsonforms), { core: Object.assign(Object.assign({}, nextCore), { additionalErrors }) });
61
- this.$emit('data-change', {
62
- data: this.jsonforms.core.data,
63
- errors: this.jsonforms.core.errors,
64
- additionalErrors,
65
- path: action.path,
66
- });
63
+ if (action.path) {
64
+ const editedPath = action.path.startsWith('/')
65
+ ? action.path
66
+ : `/${action.path.replace(/\./g, '/')}`;
67
+ this.serverErrors = this.serverErrors.filter((e) => e.instancePath !== editedPath);
68
+ }
69
+ this.applyAdditionalErrorsToCore(nextCore, action.path);
67
70
  };
68
71
  /**
69
72
  * Performs client-side validation by running the validator defined in the UI schema.
@@ -139,6 +142,7 @@ let JSONForms = class JSONForms extends FASTElement {
139
142
  if (!this.schema) {
140
143
  return;
141
144
  }
145
+ this.serverErrors = [];
142
146
  this.uichemaToUse = (_a = this.uischema) !== null && _a !== void 0 ? _a : Generate.uiSchema(this.schema);
143
147
  if (!this.uischema) {
144
148
  logger.debug('UI schema not provided. Auto generated schema:', this.uichemaToUse);
@@ -152,7 +156,7 @@ let JSONForms = class JSONForms extends FASTElement {
152
156
  const core = coreReducer(initialCore, Actions.init(this.data, this.schema, this.uichemaToUse, {
153
157
  validationMode: this.validationMode || 'ValidateAndShow',
154
158
  ajv: this.ajv,
155
- additionalErrors: this.validate(this.uichemaToUse, this.data),
159
+ additionalErrors: this.buildAdditionalErrors(this.uichemaToUse, this.data),
156
160
  }));
157
161
  return core;
158
162
  };
@@ -166,7 +170,7 @@ let JSONForms = class JSONForms extends FASTElement {
166
170
  rowSubmitStatuses: this.rowSubmitStatuses,
167
171
  bulkInsert: this.bulkInsert,
168
172
  };
169
- const additionalErrors = this.validate(this.uichemaToUse, this.data);
173
+ const additionalErrors = this.buildAdditionalErrors(this.uichemaToUse, this.data);
170
174
  // Only notify consumers when `init` actually changed `core.data` (e.g. defaults
171
175
  // were filled in). A bare uischema/schema swap must not re-emit `this.data` —
172
176
  // when `<foundation-form>` mirrors the echo into its own `data` property it
@@ -202,13 +206,7 @@ let JSONForms = class JSONForms extends FASTElement {
202
206
  const nextCore = coreReducer(this.jsonforms.core, Actions.updateCore(this.data, this.schema, this.uichemaToUse));
203
207
  // Validate against the freshly-reduced data, not the still-assigned
204
208
  // `this.jsonforms.core.data` (which is the pre-action snapshot).
205
- const additionalErrors = this.validate(this.uichemaToUse, nextCore.data);
206
- this.jsonforms = Object.assign(Object.assign({}, this.jsonforms), { core: Object.assign(Object.assign({}, nextCore), { additionalErrors }) });
207
- this.$emit('data-change', {
208
- data: this.jsonforms.core.data,
209
- errors: this.jsonforms.core.errors,
210
- additionalErrors,
211
- });
209
+ this.applyAdditionalErrorsToCore(nextCore);
212
210
  }
213
211
  renderersChanged() {
214
212
  this.schemaChanged();
@@ -237,6 +235,9 @@ let JSONForms = class JSONForms extends FASTElement {
237
235
  this.jsonforms = Object.assign(Object.assign({}, this.jsonforms), { bulkInsert: this.bulkInsert });
238
236
  }
239
237
  }
238
+ serverFieldErrorsChanged() {
239
+ this.setServerErrors(this.serverFieldErrors);
240
+ }
240
241
  get props() {
241
242
  var _a;
242
243
  if (!this.schema && !this.uischema) {
@@ -257,6 +258,43 @@ let JSONForms = class JSONForms extends FASTElement {
257
258
  visible: true,
258
259
  };
259
260
  }
261
+ /**
262
+ * Applies server-side validation errors returned from an EVENT_NACK response.
263
+ * Errors are merged into `core.additionalErrors` and shown inline on fields.
264
+ * @public
265
+ */
266
+ setServerErrors(errors) {
267
+ this.serverErrors = errors !== null && errors !== void 0 ? errors : [];
268
+ this.refreshAdditionalErrors();
269
+ }
270
+ /**
271
+ * Clears all server-side validation errors from the form.
272
+ * @public
273
+ */
274
+ clearServerErrors() {
275
+ this.serverErrors = [];
276
+ this.refreshAdditionalErrors();
277
+ }
278
+ buildAdditionalErrors(uischema, data) {
279
+ return [...this.validate(uischema, data), ...this.serverErrors];
280
+ }
281
+ applyAdditionalErrorsToCore(nextCore, changedPath) {
282
+ const additionalErrors = this.buildAdditionalErrors(this.uichemaToUse, nextCore.data);
283
+ this.jsonforms = Object.assign(Object.assign({}, this.jsonforms), { core: Object.assign(Object.assign({}, nextCore), { additionalErrors }) });
284
+ this.$emit('data-change', {
285
+ data: this.jsonforms.core.data,
286
+ errors: this.jsonforms.core.errors,
287
+ additionalErrors,
288
+ path: changedPath,
289
+ });
290
+ }
291
+ refreshAdditionalErrors() {
292
+ var _a;
293
+ if (!((_a = this.jsonforms) === null || _a === void 0 ? void 0 : _a.core) || !this.uichemaToUse) {
294
+ return;
295
+ }
296
+ this.applyAdditionalErrorsToCore(this.jsonforms.core);
297
+ }
260
298
  copyUISchemaToClipboard() {
261
299
  return __awaiter(this, void 0, void 0, function* () {
262
300
  try {
@@ -311,6 +349,9 @@ __decorate([
311
349
  __decorate([
312
350
  observable
313
351
  ], JSONForms.prototype, "bulkInsert", void 0);
352
+ __decorate([
353
+ observable
354
+ ], JSONForms.prototype, "serverFieldErrors", void 0);
314
355
  JSONForms = __decorate([
315
356
  customElement({
316
357
  name: 'json-forms',
@@ -5,6 +5,23 @@ import { isOneOfOptionMultiselect } from '../testers/isOneOfOptionMultiselect';
5
5
  import { controlWrapperTemplate } from './ControlWrapperRenderer';
6
6
  import { MULTISELECT_CONTROL_RANK } from './RenderersRanks';
7
7
  MultiselectDatasource;
8
+ export const resolveSelectedOptions = (control) => {
9
+ var _a, _b;
10
+ const delimiter = (_b = (_a = control === null || control === void 0 ? void 0 : control.uischema) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.delimiter;
11
+ const data = control === null || control === void 0 ? void 0 : control.data;
12
+ if (delimiter) {
13
+ return data ? data.split(delimiter) : [];
14
+ }
15
+ return data || [];
16
+ };
17
+ export const resolveSelectionValue = (control, detail) => {
18
+ var _a, _b;
19
+ const delimiter = (_b = (_a = control === null || control === void 0 ? void 0 : control.uischema) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.delimiter;
20
+ if (!delimiter) {
21
+ return detail;
22
+ }
23
+ return detail && detail.length ? detail.join(delimiter) : null;
24
+ };
8
25
  export const ConnectedMultiselectControlRendererTemplate = (prefix = 'zero') => html `
9
26
  <template>
10
27
  ${controlWrapperTemplate({
@@ -14,19 +31,10 @@ export const ConnectedMultiselectControlRendererTemplate = (prefix = 'zero') =>
14
31
  style="width: 100%"
15
32
  async=${(x) => { var _a; return (_a = x.control.uischema.options) === null || _a === void 0 ? void 0 : _a.async; }}
16
33
  ?disabled=${(x) => !x.control.enabled}
17
- :selectedOptions=${(x) => {
18
- var _a, _b, _c;
19
- const selectedOptions = ((_a = x.control.uischema.options) === null || _a === void 0 ? void 0 : _a.delimiter)
20
- ? (_b = x.control.data) === null || _b === void 0 ? void 0 : _b.split((_c = x.control.uischema.options) === null || _c === void 0 ? void 0 : _c.delimiter)
21
- : x.control.data;
22
- return selectedOptions || [];
23
- }}
34
+ :selectedOptions=${(x) => resolveSelectedOptions(x.control)}
24
35
  tabindex="${(x) => { var _a, _b; return (_b = (_a = x.control.uischema) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.tabIndex; }}"
25
36
  @selectionChange=${(x, c) => {
26
- var _a, _b, _c;
27
- const value = !((_a = x.control.uischema.options) === null || _a === void 0 ? void 0 : _a.delimiter)
28
- ? c.event.detail
29
- : (_b = c.event.detail) === null || _b === void 0 ? void 0 : _b.join((_c = x.control.uischema.options) === null || _c === void 0 ? void 0 : _c.delimiter);
37
+ const value = resolveSelectionValue(x.control, c.event.detail);
30
38
  x.control.handleChange(x.control.path, value);
31
39
  x.$emit('change');
32
40
  x.onBlur();
@@ -3,4 +3,5 @@ export * from './filters';
3
3
  export * from './logger';
4
4
  export * from './translation';
5
5
  export * from './validation';
6
+ export * from './server-errors';
6
7
  export * from './types';
@@ -0,0 +1,98 @@
1
+ import { Resolve } from '@jsonforms/core';
2
+ /**
3
+ * Converts a JsonForms/Ajv instance path to a JSON Forms scope string.
4
+ * @example `/items/0/CCY` → `#/properties/items/items/0/properties/CCY`
5
+ * @internal
6
+ */
7
+ export function instancePathToJsonFormsScope(instancePath) {
8
+ const segments = instancePath.replace(/^\//, '').split('/').filter(Boolean);
9
+ if (segments.length === 0) {
10
+ return '#';
11
+ }
12
+ let scope = '#';
13
+ for (let i = 0; i < segments.length; i += 1) {
14
+ const segment = segments[i];
15
+ if (i === 0) {
16
+ scope += `/properties/${segment}`;
17
+ }
18
+ else if (/^\d+$/.test(segment)) {
19
+ scope += `/items/${segment}`;
20
+ }
21
+ else {
22
+ scope += `/properties/${segment}`;
23
+ }
24
+ }
25
+ return scope;
26
+ }
27
+ /**
28
+ * Converts a Genesis JSON-path or FIELD name to a JsonForms instance path.
29
+ * Strips the `$.` prefix and optional `DETAILS` segment used in event payloads.
30
+ * @internal
31
+ */
32
+ export function genesisFieldToInstancePath(field, path, instancePathPrefix) {
33
+ let relativePath = null;
34
+ if (path) {
35
+ let normalized = path.replace(/^\$\.?/, '').replace(/\./g, '/');
36
+ normalized = normalized.replace(/^DETAILS\//, '');
37
+ relativePath = normalized.startsWith('/') ? normalized : `/${normalized}`;
38
+ }
39
+ else if (field) {
40
+ relativePath = field.startsWith('/') ? field : `/${field}`;
41
+ }
42
+ if (!relativePath) {
43
+ return null;
44
+ }
45
+ if (instancePathPrefix) {
46
+ const prefix = instancePathPrefix.startsWith('/')
47
+ ? instancePathPrefix.replace(/\/$/, '')
48
+ : `/${instancePathPrefix.replace(/\/$/, '')}`;
49
+ return `${prefix}${relativePath}`;
50
+ }
51
+ return relativePath;
52
+ }
53
+ /**
54
+ * Maps Genesis commitEvent NACK `ERROR[]` entries to JsonForms `ErrorObject[]`
55
+ * suitable for `additionalErrors` on the form core.
56
+ *
57
+ * Only entries with a `FIELD` or `PATH` are mapped; generic errors (no field
58
+ * association) are omitted so callers can still surface them via toast/dialog.
59
+ *
60
+ * @param errors - Genesis ERROR array from an EVENT_NACK response
61
+ * @param schema - JSON schema used to resolve `parentSchema` for each field
62
+ * @param instancePathPrefix - Optional prefix for bulk-insert rows (e.g. `/items/0`)
63
+ * @public
64
+ */
65
+ export function mapGenesisFieldErrorsToAdditionalErrors(errors, schema, instancePathPrefix) {
66
+ if (!(errors === null || errors === void 0 ? void 0 : errors.length)) {
67
+ return [];
68
+ }
69
+ return errors
70
+ .map((entry) => {
71
+ const instancePath = genesisFieldToInstancePath(entry.FIELD, entry.PATH, instancePathPrefix);
72
+ if (!instancePath) {
73
+ return null;
74
+ }
75
+ const error = {
76
+ keyword: 'serverValidation',
77
+ message: entry.TEXT,
78
+ instancePath,
79
+ schemaPath: '',
80
+ params: { code: entry.CODE },
81
+ };
82
+ if (schema) {
83
+ try {
84
+ const scope = instancePathToJsonFormsScope(instancePath);
85
+ const jsonFormsSchema = schema;
86
+ const fieldSchema = Resolve.schema(jsonFormsSchema, scope, jsonFormsSchema);
87
+ if (fieldSchema) {
88
+ error.parentSchema = fieldSchema;
89
+ }
90
+ }
91
+ catch (_a) {
92
+ // parentSchema is best-effort; errors still render without it
93
+ }
94
+ }
95
+ return error;
96
+ })
97
+ .filter((e) => e !== null);
98
+ }
@@ -2736,6 +2736,32 @@
2736
2736
  ],
2737
2737
  "name": "generateCsvTemplate"
2738
2738
  },
2739
+ {
2740
+ "kind": "TypeAlias",
2741
+ "canonicalReference": "@genesislcap/foundation-forms!GenesisFieldError:type",
2742
+ "docComment": "/**\n * Genesis EVENT_NACK field-level error entry.\n *\n * @public\n */\n",
2743
+ "excerptTokens": [
2744
+ {
2745
+ "kind": "Content",
2746
+ "text": "export type GenesisFieldError = "
2747
+ },
2748
+ {
2749
+ "kind": "Content",
2750
+ "text": "{\n '@type'?: string;\n CODE?: string;\n TEXT: string;\n STATUS_CODE?: string;\n FIELD?: string;\n PATH?: string | null;\n}"
2751
+ },
2752
+ {
2753
+ "kind": "Content",
2754
+ "text": ";"
2755
+ }
2756
+ ],
2757
+ "fileUrlPath": "src/utils/server-errors.ts",
2758
+ "releaseTag": "Public",
2759
+ "name": "GenesisFieldError",
2760
+ "typeTokenRange": {
2761
+ "startIndex": 1,
2762
+ "endIndex": 2
2763
+ }
2764
+ },
2739
2765
  {
2740
2766
  "kind": "Function",
2741
2767
  "canonicalReference": "@genesislcap/foundation-forms!getAnyOfErrorMessage:function(1)",
@@ -3309,6 +3335,94 @@
3309
3335
  ],
3310
3336
  "name": "mapCsvToSchema"
3311
3337
  },
3338
+ {
3339
+ "kind": "Function",
3340
+ "canonicalReference": "@genesislcap/foundation-forms!mapGenesisFieldErrorsToAdditionalErrors:function(1)",
3341
+ "docComment": "/**\n * Maps Genesis commitEvent NACK `ERROR[]` entries to JsonForms `ErrorObject[]` suitable for `additionalErrors` on the form core.\n *\n * Only entries with a `FIELD` or `PATH` are mapped; generic errors (no field association) are omitted so callers can still surface them via toast/dialog.\n *\n * @param errors - Genesis ERROR array from an EVENT_NACK response\n *\n * @param schema - JSON schema used to resolve `parentSchema` for each field\n *\n * @param instancePathPrefix - Optional prefix for bulk-insert rows (e.g. `/items/0`)\n *\n * @public\n */\n",
3342
+ "excerptTokens": [
3343
+ {
3344
+ "kind": "Content",
3345
+ "text": "export declare function mapGenesisFieldErrorsToAdditionalErrors(errors: "
3346
+ },
3347
+ {
3348
+ "kind": "Reference",
3349
+ "text": "GenesisFieldError",
3350
+ "canonicalReference": "@genesislcap/foundation-forms!GenesisFieldError:type"
3351
+ },
3352
+ {
3353
+ "kind": "Content",
3354
+ "text": "[] | undefined"
3355
+ },
3356
+ {
3357
+ "kind": "Content",
3358
+ "text": ", schema?: "
3359
+ },
3360
+ {
3361
+ "kind": "Reference",
3362
+ "text": "JSONSchema7",
3363
+ "canonicalReference": "@types/json-schema!JSONSchema7:interface"
3364
+ },
3365
+ {
3366
+ "kind": "Content",
3367
+ "text": ", instancePathPrefix?: "
3368
+ },
3369
+ {
3370
+ "kind": "Content",
3371
+ "text": "string"
3372
+ },
3373
+ {
3374
+ "kind": "Content",
3375
+ "text": "): "
3376
+ },
3377
+ {
3378
+ "kind": "Reference",
3379
+ "text": "ErrorObject",
3380
+ "canonicalReference": "ajv!ErrorObject:interface"
3381
+ },
3382
+ {
3383
+ "kind": "Content",
3384
+ "text": "[]"
3385
+ },
3386
+ {
3387
+ "kind": "Content",
3388
+ "text": ";"
3389
+ }
3390
+ ],
3391
+ "fileUrlPath": "src/utils/server-errors.ts",
3392
+ "returnTypeTokenRange": {
3393
+ "startIndex": 8,
3394
+ "endIndex": 10
3395
+ },
3396
+ "releaseTag": "Public",
3397
+ "overloadIndex": 1,
3398
+ "parameters": [
3399
+ {
3400
+ "parameterName": "errors",
3401
+ "parameterTypeTokenRange": {
3402
+ "startIndex": 1,
3403
+ "endIndex": 3
3404
+ },
3405
+ "isOptional": false
3406
+ },
3407
+ {
3408
+ "parameterName": "schema",
3409
+ "parameterTypeTokenRange": {
3410
+ "startIndex": 4,
3411
+ "endIndex": 5
3412
+ },
3413
+ "isOptional": true
3414
+ },
3415
+ {
3416
+ "parameterName": "instancePathPrefix",
3417
+ "parameterTypeTokenRange": {
3418
+ "startIndex": 6,
3419
+ "endIndex": 7
3420
+ },
3421
+ "isOptional": true
3422
+ }
3423
+ ],
3424
+ "name": "mapGenesisFieldErrorsToAdditionalErrors"
3425
+ },
3312
3426
  {
3313
3427
  "kind": "Variable",
3314
3428
  "canonicalReference": "@genesislcap/foundation-forms!MulticolumnDropdownControlRendererEntry:var",
@@ -1090,6 +1090,12 @@ export declare class Form extends Form_base {
1090
1090
  * @internal
1091
1091
  */
1092
1092
  csvFileInput: HTMLInputElement;
1093
+ /**
1094
+ * Server-side field validation errors mapped from EVENT_NACK responses.
1095
+ * Passed to json-forms via binding; cleared on reset and successful submit.
1096
+ * @internal
1097
+ */
1098
+ serverFieldErrors: ErrorObject[];
1093
1099
  /**
1094
1100
  * Stores the approval message entered by the user.
1095
1101
  * @internal
@@ -1318,6 +1324,16 @@ export declare class Form extends Form_base {
1318
1324
  * @public
1319
1325
  */
1320
1326
  reset(clearData?: boolean): void;
1327
+ /**
1328
+ * Maps Genesis EVENT_NACK field errors onto the form via additionalErrors.
1329
+ * @internal
1330
+ */
1331
+ private applyServerFieldErrors;
1332
+ /**
1333
+ * Maps field errors from failed bulk-insert rows onto the form.
1334
+ * @internal
1335
+ */
1336
+ private applyBulkServerFieldErrors;
1321
1337
  /**
1322
1338
  * Show the approval message modal
1323
1339
  * @internal
@@ -1745,6 +1761,26 @@ export declare function generateCsvTemplate(schema: JSONSchema7 | undefined, uiS
1745
1761
  */
1746
1762
  export declare const genesisErrorTranslator: ErrorTranslator;
1747
1763
 
1764
+ /**
1765
+ * Genesis EVENT_NACK field-level error entry.
1766
+ * @public
1767
+ */
1768
+ export declare type GenesisFieldError = {
1769
+ '@type'?: string;
1770
+ CODE?: string;
1771
+ TEXT: string;
1772
+ STATUS_CODE?: string;
1773
+ FIELD?: string;
1774
+ PATH?: string | null;
1775
+ };
1776
+
1777
+ /**
1778
+ * Converts a Genesis JSON-path or FIELD name to a JsonForms instance path.
1779
+ * Strips the `$.` prefix and optional `DETAILS` segment used in event payloads.
1780
+ * @internal
1781
+ */
1782
+ export declare function genesisFieldToInstancePath(field?: string, path?: string | null, instancePathPrefix?: string): string | null;
1783
+
1748
1784
  /**
1749
1785
  * @internal
1750
1786
  * Needed to explicitly set as string as we don't want to let typescript set them as ascending numbers
@@ -1787,6 +1823,13 @@ export declare function getVerticalCategorizationHeight(layout: CategorizationLa
1787
1823
  */
1788
1824
  export declare type GroupRendererOptions = CategorizationRendererOptions;
1789
1825
 
1826
+ /**
1827
+ * Converts a JsonForms/Ajv instance path to a JSON Forms scope string.
1828
+ * @example `/items/0/CCY` → `#/properties/items/items/0/properties/CCY`
1829
+ * @internal
1830
+ */
1831
+ export declare function instancePathToJsonFormsScope(instancePath: string): string;
1832
+
1790
1833
  /**
1791
1834
  * Whether categorization `layout` selects the vertical renderer (string `'vertical'` or object `{ type: 'vertical' }`).
1792
1835
  * @public
@@ -1861,6 +1904,20 @@ export declare const logger: Logger;
1861
1904
  */
1862
1905
  export declare function mapCsvToSchema(csvRows: Record<string, string>[], schema: JSONSchema7 | undefined, uiSchema?: UiSchema): CsvMappingResult;
1863
1906
 
1907
+ /**
1908
+ * Maps Genesis commitEvent NACK `ERROR[]` entries to JsonForms `ErrorObject[]`
1909
+ * suitable for `additionalErrors` on the form core.
1910
+ *
1911
+ * Only entries with a `FIELD` or `PATH` are mapped; generic errors (no field
1912
+ * association) are omitted so callers can still surface them via toast/dialog.
1913
+ *
1914
+ * @param errors - Genesis ERROR array from an EVENT_NACK response
1915
+ * @param schema - JSON schema used to resolve `parentSchema` for each field
1916
+ * @param instancePathPrefix - Optional prefix for bulk-insert rows (e.g. `/items/0`)
1917
+ * @public
1918
+ */
1919
+ export declare function mapGenesisFieldErrorsToAdditionalErrors(errors: GenesisFieldError[] | undefined, schema?: JSONSchema7, instancePathPrefix?: string): ErrorObject[];
1920
+
1864
1921
  /** @beta */
1865
1922
  export declare const MulticolumnDropdownControlRendererEntry: any;
1866
1923
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-forms",
3
3
  "description": "Genesis Foundation Forms",
4
- "version": "14.473.0",
4
+ "version": "14.474.0-canary.TAM-8.26-patch.2",
5
5
  "sideEffects": false,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "main": "dist/esm/index.js",
@@ -59,13 +59,13 @@
59
59
  }
60
60
  },
61
61
  "devDependencies": {
62
- "@genesislcap/foundation-testing": "14.473.0",
63
- "@genesislcap/genx": "14.473.0",
64
- "@genesislcap/rollup-builder": "14.473.0",
65
- "@genesislcap/ts-builder": "14.473.0",
66
- "@genesislcap/uvu-playwright-builder": "14.473.0",
67
- "@genesislcap/vite-builder": "14.473.0",
68
- "@genesislcap/webpack-builder": "14.473.0",
62
+ "@genesislcap/foundation-testing": "14.474.0-canary.TAM-8.26-patch.2",
63
+ "@genesislcap/genx": "14.474.0-canary.TAM-8.26-patch.2",
64
+ "@genesislcap/rollup-builder": "14.474.0-canary.TAM-8.26-patch.2",
65
+ "@genesislcap/ts-builder": "14.474.0-canary.TAM-8.26-patch.2",
66
+ "@genesislcap/uvu-playwright-builder": "14.474.0-canary.TAM-8.26-patch.2",
67
+ "@genesislcap/vite-builder": "14.474.0-canary.TAM-8.26-patch.2",
68
+ "@genesislcap/webpack-builder": "14.474.0-canary.TAM-8.26-patch.2",
69
69
  "@types/json-schema": "^7.0.11",
70
70
  "@types/papaparse": "^5.3.14"
71
71
  },
@@ -82,12 +82,12 @@
82
82
  }
83
83
  },
84
84
  "dependencies": {
85
- "@genesislcap/foundation-comms": "14.473.0",
86
- "@genesislcap/foundation-criteria": "14.473.0",
87
- "@genesislcap/foundation-logger": "14.473.0",
88
- "@genesislcap/foundation-notifications": "14.473.0",
89
- "@genesislcap/foundation-ui": "14.473.0",
90
- "@genesislcap/foundation-utils": "14.473.0",
85
+ "@genesislcap/foundation-comms": "14.474.0-canary.TAM-8.26-patch.2",
86
+ "@genesislcap/foundation-criteria": "14.474.0-canary.TAM-8.26-patch.2",
87
+ "@genesislcap/foundation-logger": "14.474.0-canary.TAM-8.26-patch.2",
88
+ "@genesislcap/foundation-notifications": "14.474.0-canary.TAM-8.26-patch.2",
89
+ "@genesislcap/foundation-ui": "14.474.0-canary.TAM-8.26-patch.2",
90
+ "@genesislcap/foundation-utils": "14.474.0-canary.TAM-8.26-patch.2",
91
91
  "@json-schema-tools/dereferencer": "^1.6.1",
92
92
  "@jsonforms/core": "^3.2.1",
93
93
  "@microsoft/fast-components": "2.30.6",
@@ -109,5 +109,5 @@
109
109
  "access": "public"
110
110
  },
111
111
  "customElements": "dist/custom-elements.json",
112
- "gitHead": "2408f54cd71e4fe715ab6cbb43b6fd16ec2b733e"
112
+ "gitHead": "982c6b4a6f9532461a2f7195af4e0bd41a4519e7"
113
113
  }