@genesislcap/foundation-forms 15.3.2 → 15.3.3
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/dist/dts/form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,aAAa,EAGd,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB1C,OAAO,EACL,aAAa,EAOb,yBAAyB,EACzB,aAAa,EAOb,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAWL,aAAa,EACd,MAAM,SAAS,CAAC;AAiBjB;;;GAGG;AACH,eAAO,MAAM,SAAS,OAwBrB,CAAC;;;;;;;;kBA5CyB,CAAC;;;;;;;;8BAmDqD,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAW7F,CAAC;4IAC6D,CAAC;wFACsB,CAAC;+IAUvF,CAAH;2FAG+C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA6BlC,CAAC;;;;;;;;;;;;;;;;;;;;;;;mBA0EZ,CAAC;;;;;;;;;;;;;6BAwBM,CAAC;8BAGmC,CAAC;kBAGvB,CAAC;;oBAG8C,CAAC;;sBAGrE,CAAD;oBAIC,CAAA;;;;;;;;gDAgBG,CAAC;;;;;;;;;;;;;;;;;;uBA4BkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAuHxB,CAAA;yBAGC,CAAA;UAAoD,GAAG;WAIxC,GAAG;;gBAEoB,GAAG;;;;;;;WActC,GAAH;YAAiD,GAAG;;;;;;;;;;;oBAyCQ,GAE/D,CAAE;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,28 @@ export declare function resolveResourceOptionLabel(raw: any, options: any): Prom
|
|
|
66
66
|
* @internal
|
|
67
67
|
*/
|
|
68
68
|
export declare function resolveEnumLabel(raw: any, fieldName: string, schema: any): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
71
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field. Numbers
|
|
72
|
+
* are formatted with `toIntlNumberFormat` (the same precision-safe path `NumberField` itself
|
|
73
|
+
* uses); dates/datetimes with `getDateFormatter`, adding hours/minutes for `GenesisType.DATETIME`
|
|
74
|
+
* fields. Returns `null` for non-number/date fields, or when no JSON schema is available to
|
|
75
|
+
* determine the field's type.
|
|
76
|
+
*
|
|
77
|
+
* `uischemaOptions` (the Control element's `options`, as passed to `resolveOptionLabel` etc.)
|
|
78
|
+
* carries the same display-affecting settings `NumberControlRenderer` reads directly —
|
|
79
|
+
* `formatOptions`, `withoutFormatting`, `prefix`, `suffix` — so a field configured with e.g.
|
|
80
|
+
* `withoutFormatting: true` or a custom `formatOptions.maximumFractionDigits` doesn't disagree
|
|
81
|
+
* with review over how many digits it shows.
|
|
82
|
+
*
|
|
83
|
+
* A `raw` array against an array-typed field schema (`{ type: 'array', items: {...} }`, per
|
|
84
|
+
* `isArray`'s convention) formats each element against `items` individually — e.g. an array of
|
|
85
|
+
* DATE values — falling back to the unformatted element for any that don't format, so
|
|
86
|
+
* `formatValueForReview`'s comma-join still sees a flat array of primitives. `uischemaOptions`
|
|
87
|
+
* applies to every element, matching how one Control renders every item in the array.
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatValueByFieldType(raw: any, fieldName: string, schema: any, uischemaOptions?: any): string | unknown[] | null;
|
|
69
91
|
/**
|
|
70
92
|
* Navigates a `/properties/`-separated path in data to support nested object scopes
|
|
71
93
|
* such as `ADDRESS/properties/STREET` produced by Group layout UI schemas.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/review-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/review-utils.ts"],"names":[],"mappings":"AASA,cAAc;AACd,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,cAAc;AACd,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,aAAa,EAAE,CAAC,CAwE1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAc9F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAMxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8B/F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAaxF;AAwED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,GAAG,EACX,eAAe,CAAC,EAAE,GAAG,GACpB,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAY3B;AAqED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAEpE;AAYD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAwBvD"}
|
package/dist/esm/form.js
CHANGED
|
@@ -393,7 +393,27 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
|
|
|
393
393
|
this.$emit('submit', { payload, errors: this.errors });
|
|
394
394
|
if (Object.entries(payload).length !== 0 && !this.hasValidationErrors() && this.resourceName) {
|
|
395
395
|
this.submitting = true;
|
|
396
|
-
|
|
396
|
+
// The try only wraps the network call itself: anything that can go wrong here is a
|
|
397
|
+
// genuine transport failure, so it's fair to report it as SUBMIT_ERROR. Response
|
|
398
|
+
// handling below (which can itself throw — e.g. a backend sending ERROR as a single
|
|
399
|
+
// object rather than an array) stays outside it, so a bug there surfaces as itself
|
|
400
|
+
// instead of being mislabeled as a transport failure with the server's real message lost.
|
|
401
|
+
// submitting is always cleared before the terminal $emit (success or failure) fires, not
|
|
402
|
+
// after, so a listener that reads it or re-triggers submission sees the request as done.
|
|
403
|
+
let formSubmitReq;
|
|
404
|
+
try {
|
|
405
|
+
formSubmitReq = yield this.connect.commitEvent(this.resourceName, commitPayload);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
// No applyServerFieldErrors here: a transport failure has no FIELD/PATH, so
|
|
409
|
+
// mapGenesisFieldErrorsToAdditionalErrors would map it to [] and wipe out any
|
|
410
|
+
// inline server errors already on screen from a prior submit, replacing them with
|
|
411
|
+
// nothing. Left to submit-failure listeners, matching the bulk/row-level paths below.
|
|
412
|
+
const errors = [{ CODE: 'SUBMIT_ERROR', TEXT: String(error) }];
|
|
413
|
+
this.submitting = false;
|
|
414
|
+
this.$emit('submit-failure', { payload, errors });
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
397
417
|
this.submitting = false;
|
|
398
418
|
if (formSubmitReq.ERROR) {
|
|
399
419
|
const approvalError = formSubmitReq.ERROR.find((err) => err.CODE === 'APPROVAL_MESSAGE_MISSING');
|
|
@@ -459,55 +479,66 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
|
|
|
459
479
|
return;
|
|
460
480
|
}
|
|
461
481
|
this.submitting = true;
|
|
462
|
-
// Initialize rows as pending, but preserve already successful rows
|
|
463
|
-
for (let i = 0; i < items.length; i += 1) {
|
|
464
|
-
const currentStatus = this.rowSubmitStatuses.get(i);
|
|
465
|
-
// Don't reset rows that were already successfully submitted
|
|
466
|
-
if ((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.status) !== 'success') {
|
|
467
|
-
this.rowSubmitStatuses.set(i, { status: 'pending' });
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
// Trigger reactivity by reassigning and emit event
|
|
471
|
-
this.rowSubmitStatuses = new Map(this.rowSubmitStatuses);
|
|
472
|
-
this.$emit('row-status-changed', {
|
|
473
|
-
statuses: this.rowSubmitStatuses,
|
|
474
|
-
});
|
|
475
482
|
const results = {
|
|
476
483
|
successful: [],
|
|
477
484
|
failed: [],
|
|
478
485
|
};
|
|
479
|
-
//
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
+
// Wraps everything from here through the end of the row loop: buildCommitPayload and the
|
|
487
|
+
// pre-request updateRowStatus call sit outside the per-row try below, so an unexpected
|
|
488
|
+
// throw from either of those (or from the row-init loop above) would otherwise skip
|
|
489
|
+
// `this.submitting = false` entirely and permanently wedge the form — _submit()'s
|
|
490
|
+
// `if (this.submitting) return` guard means every future submit attempt would silently
|
|
491
|
+
// no-op. The per-row try/catch already isolates genuine per-item transport failures; this
|
|
492
|
+
// finally is the backstop for anything else.
|
|
493
|
+
try {
|
|
494
|
+
// Initialize rows as pending, but preserve already successful rows
|
|
495
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
496
|
+
const currentStatus = this.rowSubmitStatuses.get(i);
|
|
497
|
+
// Don't reset rows that were already successfully submitted
|
|
498
|
+
if ((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.status) !== 'success') {
|
|
499
|
+
this.rowSubmitStatuses.set(i, { status: 'pending' });
|
|
500
|
+
}
|
|
486
501
|
}
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
502
|
+
// Trigger reactivity by reassigning and emit event
|
|
503
|
+
this.rowSubmitStatuses = new Map(this.rowSubmitStatuses);
|
|
504
|
+
this.$emit('row-status-changed', {
|
|
505
|
+
statuses: this.rowSubmitStatuses,
|
|
506
|
+
});
|
|
507
|
+
// Submit each item sequentially, skipping already successful rows
|
|
508
|
+
/* oxlint-disable no-await-in-loop -- bulk submit must be sequential */
|
|
509
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
510
|
+
// Skip rows that were already successfully submitted
|
|
511
|
+
const currentStatus = this.rowSubmitStatuses.get(i);
|
|
512
|
+
if ((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.status) === 'success') {
|
|
513
|
+
continue;
|
|
497
514
|
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
515
|
+
const item = items[i];
|
|
516
|
+
// Filter data to only include fields from UI schema
|
|
517
|
+
const commitPayload = this.buildCommitPayload(item, true);
|
|
518
|
+
// Update status to submitting
|
|
519
|
+
this.updateRowStatus(i, { status: 'submitting' });
|
|
520
|
+
try {
|
|
521
|
+
const response = yield this.connect.commitEvent(this.resourceName, commitPayload);
|
|
522
|
+
if (response.ERROR) {
|
|
523
|
+
results.failed.push({ item, index: i, errors: response.ERROR });
|
|
524
|
+
this.updateRowStatus(i, { status: 'failed', errors: response.ERROR });
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
results.successful.push({ item, index: i, response });
|
|
528
|
+
this.updateRowStatus(i, { status: 'success', response });
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
catch (error) {
|
|
532
|
+
const errors = [{ CODE: 'SUBMIT_ERROR', TEXT: String(error) }];
|
|
533
|
+
results.failed.push({ item, index: i, errors });
|
|
534
|
+
this.updateRowStatus(i, { status: 'failed', errors });
|
|
501
535
|
}
|
|
502
536
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
}
|
|
537
|
+
/* oxlint-enable no-await-in-loop */
|
|
538
|
+
}
|
|
539
|
+
finally {
|
|
540
|
+
this.submitting = false;
|
|
508
541
|
}
|
|
509
|
-
/* oxlint-enable no-await-in-loop */
|
|
510
|
-
this.submitting = false;
|
|
511
542
|
// Emit bulk-specific event with aggregated results
|
|
512
543
|
this.$emit('bulk-submit-complete', results);
|
|
513
544
|
// Also emit standard events based on overall result
|
|
@@ -802,19 +833,40 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
|
|
|
802
833
|
DETAILS: this.pendingPayload,
|
|
803
834
|
APPROVAL_MESSAGE: this.approvalMessage,
|
|
804
835
|
};
|
|
805
|
-
|
|
836
|
+
// See the equivalent comment in _performSubmit: the try only wraps the network call, so a
|
|
837
|
+
// failure while handling the response (e.g. closeApprovalModal's approvalModal.close()
|
|
838
|
+
// throwing) can't be reported as a transport failure for a submission that already
|
|
839
|
+
// succeeded — that previously fired submit-failure with payload: null (pendingPayload is
|
|
840
|
+
// cleared by closeApprovalModal before .close() runs) right after submit-success had
|
|
841
|
+
// already fired for the same request, and left the modal visually open despite its state
|
|
842
|
+
// saying otherwise.
|
|
843
|
+
const pendingPayload = this.pendingPayload;
|
|
844
|
+
let formSubmitReq;
|
|
845
|
+
try {
|
|
846
|
+
formSubmitReq = yield this.connect.commitEvent(this.resourceName, commitPayload);
|
|
847
|
+
}
|
|
848
|
+
catch (error) {
|
|
849
|
+
// No applyServerFieldErrors here: no FIELD/PATH, so it would wipe existing inline errors
|
|
850
|
+
// and show nothing in their place.
|
|
851
|
+
const errors = [{ CODE: 'SUBMIT_ERROR', TEXT: String(error) }];
|
|
852
|
+
this.submitting = false;
|
|
853
|
+
this.$emit('submit-failure', {
|
|
854
|
+
payload: pendingPayload,
|
|
855
|
+
errors,
|
|
856
|
+
});
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
806
859
|
this.submitting = false;
|
|
807
860
|
if (formSubmitReq.ERROR) {
|
|
808
861
|
this.applyServerFieldErrors(formSubmitReq.ERROR);
|
|
809
862
|
this.$emit('submit-failure', {
|
|
810
|
-
payload:
|
|
863
|
+
payload: pendingPayload,
|
|
811
864
|
errors: formSubmitReq.ERROR,
|
|
812
865
|
});
|
|
813
866
|
}
|
|
814
867
|
else {
|
|
815
|
-
this.$emit('submit-success', { payload:
|
|
868
|
+
this.$emit('submit-success', { payload: pendingPayload, response: formSubmitReq });
|
|
816
869
|
this.closeApprovalModal();
|
|
817
|
-
this.pendingPayload = null;
|
|
818
870
|
}
|
|
819
871
|
});
|
|
820
872
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { getDatasource } from '@genesislcap/foundation-comms';
|
|
3
3
|
import { CriteriaBuilder, ExpressionBuilder } from '@genesislcap/foundation-criteria';
|
|
4
|
+
import { toIntlNumberFormat } from '@genesislcap/foundation-ui';
|
|
5
|
+
import { getDateFormatter } from '@genesislcap/foundation-utils';
|
|
4
6
|
import { capitalCase } from 'change-case';
|
|
7
|
+
import { isOneOfDate } from '../jsonforms/testers/isDate';
|
|
8
|
+
import { isBigDecimal, isOneOfNumber } from '../jsonforms/testers/isOneOfNumber';
|
|
9
|
+
import { GenesisType } from './types';
|
|
5
10
|
/**
|
|
6
11
|
* Builds the review panel's fields grouped into sections by their nearest `Group` layout.
|
|
7
12
|
* Sections are formed from consecutive runs of the same group title as fields are
|
|
@@ -39,8 +44,8 @@ export function buildReviewSections(data, uiSchema, schema) {
|
|
|
39
44
|
}
|
|
40
45
|
};
|
|
41
46
|
const resolveDisplayValue = (raw, fieldName, options) => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
var _a, _b, _c;
|
|
43
|
-
const displayValue = (_c = (_b = (_a = resolveOptionLabel(raw, options)) !== null && _a !== void 0 ? _a : (yield resolveResourceOptionLabel(raw, options))) !== null && _b !== void 0 ? _b : resolveEnumLabel(raw, fieldName, schema)) !== null && _c !== void 0 ? _c : raw;
|
|
47
|
+
var _a, _b, _c, _d;
|
|
48
|
+
const displayValue = (_d = (_c = (_b = (_a = resolveOptionLabel(raw, options)) !== null && _a !== void 0 ? _a : (yield resolveResourceOptionLabel(raw, options))) !== null && _b !== void 0 ? _b : resolveEnumLabel(raw, fieldName, schema)) !== null && _c !== void 0 ? _c : formatValueByFieldType(raw, fieldName, schema, options)) !== null && _d !== void 0 ? _d : raw;
|
|
44
49
|
return formatValueForReview(displayValue);
|
|
45
50
|
});
|
|
46
51
|
const collect = (element, groupTitle) => {
|
|
@@ -170,24 +175,161 @@ export function resolveResourceOptionLabel(raw, options) {
|
|
|
170
175
|
* @internal
|
|
171
176
|
*/
|
|
172
177
|
export function resolveEnumLabel(raw, fieldName, schema) {
|
|
173
|
-
var _a, _b, _c
|
|
178
|
+
var _a, _b, _c;
|
|
174
179
|
if (typeof raw !== 'string')
|
|
175
180
|
return null;
|
|
181
|
+
const fieldSchema = resolveFieldSchema(fieldName, schema);
|
|
182
|
+
if (!fieldSchema)
|
|
183
|
+
return null;
|
|
184
|
+
// Matches plain `enum: [...]` or nullable `oneOf: [{ enum: [...] }, { type: 'null' }]`
|
|
185
|
+
const enumValues = (_a = fieldSchema.enum) !== null && _a !== void 0 ? _a : (_c = (_b = fieldSchema.oneOf) === null || _b === void 0 ? void 0 : _b.find((x) => x.enum)) === null || _c === void 0 ? void 0 : _c.enum;
|
|
186
|
+
if (Array.isArray(enumValues) && enumValues.includes(raw)) {
|
|
187
|
+
return capitalCase(raw);
|
|
188
|
+
}
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Navigates a `/properties/`-separated field name through `schema.properties` to find the
|
|
193
|
+
* JSON schema describing that field, honoring nested Group scopes
|
|
194
|
+
* (`ADDRESS/properties/STREET`). Returns `null` when `schema` has no `properties` (e.g. no
|
|
195
|
+
* JSON schema is available) or the path doesn't resolve.
|
|
196
|
+
* @internal
|
|
197
|
+
*/
|
|
198
|
+
function resolveFieldSchema(fieldName, schema) {
|
|
199
|
+
var _a;
|
|
176
200
|
if (!(schema === null || schema === void 0 ? void 0 : schema.properties))
|
|
177
201
|
return null;
|
|
178
202
|
let fieldSchema = schema;
|
|
179
203
|
for (const part of fieldName.split('/properties/')) {
|
|
180
204
|
fieldSchema = (_a = fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.properties) === null || _a === void 0 ? void 0 : _a[part];
|
|
181
205
|
}
|
|
206
|
+
return fieldSchema !== null && fieldSchema !== void 0 ? fieldSchema : null;
|
|
207
|
+
}
|
|
208
|
+
/** Minimal `Control` uischema used to drive the `isOneOfNumber`/`isOneOfDate` testers directly
|
|
209
|
+
* against an already-resolved field schema — `schemaMatches` only needs `scope` to be a
|
|
210
|
+
* non-empty string here, since a non-object field schema is tested as-is rather than resolved
|
|
211
|
+
* further via that scope. @internal */
|
|
212
|
+
const FIELD_SCHEMA_TESTER_CONTROL = { type: 'Control', scope: '#' };
|
|
213
|
+
const FIELD_SCHEMA_TESTER_CONTEXT = { config: {}, rootSchema: {} };
|
|
214
|
+
/** Matches `NumberControlRenderer`'s own `defaultOptions`, used whenever the uischema doesn't
|
|
215
|
+
* set `options.formatOptions`. */
|
|
216
|
+
const REVIEW_NUMBER_OPTIONS = {
|
|
217
|
+
maximumFractionDigits: 3,
|
|
218
|
+
minimumFractionDigits: 0,
|
|
219
|
+
};
|
|
220
|
+
/** `NumberField`'s own hardcoded default (`number-field.ts`) — `NumberControlRenderer` never
|
|
221
|
+
* forwards a `locale` from uischema options to the control, so every number field renders in
|
|
222
|
+
* this locale regardless of the user's browser locale. Matching it here (rather than e.g. the
|
|
223
|
+
* date branch's browser-locale resolution) is what "shows the same thing as the field" means
|
|
224
|
+
* for numbers specifically. */
|
|
225
|
+
const NUMBER_FIELD_DEFAULT_LOCALE = 'en-US';
|
|
226
|
+
/** Plain decimal or scientific notation only — matches what `Number()`/`Intl.NumberFormat`
|
|
227
|
+
* parse correctly. Excludes anything else (ids, free text) that a BigDecimal-described schema
|
|
228
|
+
* might still carry as bad data. */
|
|
229
|
+
const NUMERIC_STRING = /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/;
|
|
230
|
+
// No `timeZone` override: `DateControlRenderer` builds its `<input>` value from
|
|
231
|
+
// `new Date(x.control.data)`'s local getters (`getFullYear`/`getMonth`/`getDate`/...), so
|
|
232
|
+
// formatting here must default to the runtime's local time zone too, or the review panel
|
|
233
|
+
// disagrees with the field the user just filled in for anyone not in UTC.
|
|
234
|
+
const REVIEW_DATE_OPTIONS = {
|
|
235
|
+
year: 'numeric',
|
|
236
|
+
month: '2-digit',
|
|
237
|
+
day: '2-digit',
|
|
238
|
+
};
|
|
239
|
+
const REVIEW_DATETIME_OPTIONS = Object.assign(Object.assign({}, REVIEW_DATE_OPTIONS), { hour: '2-digit', minute: '2-digit' });
|
|
240
|
+
/**
|
|
241
|
+
* The runtime's default `Intl` locale — the same one `Intl.DateTimeFormat(undefined, ...)`
|
|
242
|
+
* (and, in a browser, `<input type="date">`'s native rendering) resolves to. `getDateFormatter`
|
|
243
|
+
* defaults to a hardcoded `en-GB` when passed `undefined`, which would pin review to
|
|
244
|
+
* DD/MM/YYYY regardless of what locale the field actually renders in for the user.
|
|
245
|
+
* @internal
|
|
246
|
+
*/
|
|
247
|
+
function resolveDefaultLocale() {
|
|
248
|
+
return new Intl.DateTimeFormat().resolvedOptions().locale;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
252
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field. Numbers
|
|
253
|
+
* are formatted with `toIntlNumberFormat` (the same precision-safe path `NumberField` itself
|
|
254
|
+
* uses); dates/datetimes with `getDateFormatter`, adding hours/minutes for `GenesisType.DATETIME`
|
|
255
|
+
* fields. Returns `null` for non-number/date fields, or when no JSON schema is available to
|
|
256
|
+
* determine the field's type.
|
|
257
|
+
*
|
|
258
|
+
* `uischemaOptions` (the Control element's `options`, as passed to `resolveOptionLabel` etc.)
|
|
259
|
+
* carries the same display-affecting settings `NumberControlRenderer` reads directly —
|
|
260
|
+
* `formatOptions`, `withoutFormatting`, `prefix`, `suffix` — so a field configured with e.g.
|
|
261
|
+
* `withoutFormatting: true` or a custom `formatOptions.maximumFractionDigits` doesn't disagree
|
|
262
|
+
* with review over how many digits it shows.
|
|
263
|
+
*
|
|
264
|
+
* A `raw` array against an array-typed field schema (`{ type: 'array', items: {...} }`, per
|
|
265
|
+
* `isArray`'s convention) formats each element against `items` individually — e.g. an array of
|
|
266
|
+
* DATE values — falling back to the unformatted element for any that don't format, so
|
|
267
|
+
* `formatValueForReview`'s comma-join still sees a flat array of primitives. `uischemaOptions`
|
|
268
|
+
* applies to every element, matching how one Control renders every item in the array.
|
|
269
|
+
* @internal
|
|
270
|
+
*/
|
|
271
|
+
export function formatValueByFieldType(raw, fieldName, schema, uischemaOptions) {
|
|
272
|
+
const fieldSchema = resolveFieldSchema(fieldName, schema);
|
|
273
|
+
if (!fieldSchema || raw === undefined || raw === null || raw === '' || Number.isNaN(raw))
|
|
274
|
+
return null;
|
|
275
|
+
if (Array.isArray(raw) && fieldSchema.items) {
|
|
276
|
+
return raw.map((item) => { var _a; return (_a = formatScalarByFieldSchema(item, fieldSchema.items, uischemaOptions)) !== null && _a !== void 0 ? _a : item; });
|
|
277
|
+
}
|
|
278
|
+
return formatScalarByFieldSchema(raw, fieldSchema, uischemaOptions);
|
|
279
|
+
}
|
|
280
|
+
/** Formats a single value against an already-resolved (non-array) field schema. @internal */
|
|
281
|
+
function formatScalarByFieldSchema(raw, fieldSchema, uischemaOptions) {
|
|
282
|
+
var _a, _b;
|
|
182
283
|
if (!fieldSchema)
|
|
183
284
|
return null;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
285
|
+
if (isOneOfDate(FIELD_SCHEMA_TESTER_CONTROL, fieldSchema, FIELD_SCHEMA_TESTER_CONTEXT)) {
|
|
286
|
+
// Mirrors DateControlRenderer's own `!x.control.data` check, which treats a falsy
|
|
287
|
+
// timestamp (including 0) as "no value" and renders the input blank rather than
|
|
288
|
+
// 01/01/1970 — falling through to raw here avoids fabricating that date.
|
|
289
|
+
if (!raw)
|
|
290
|
+
return null;
|
|
291
|
+
// Mirrors typeSwitch's exact control flow (DateControlRenderer.ts), which short-circuits
|
|
292
|
+
// on `hasOwnProperty('oneOf')`: once `oneOf` is present it ONLY looks at branch-level
|
|
293
|
+
// `genesisType`, ignoring the field's own top-level `genesisType` entirely — it is not an
|
|
294
|
+
// OR of both. That matters because the server's actual nullable-field shape (see
|
|
295
|
+
// foundation-utils' `ORDER_DATETIME` fixture) puts `genesisType: 'DATETIME'` at the top
|
|
296
|
+
// level with bare, typeless `oneOf` branches — which typeSwitch (and so this) resolves to
|
|
297
|
+
// date-only, not datetime.
|
|
298
|
+
const isDatetime = fieldSchema.hasOwnProperty('oneOf')
|
|
299
|
+
? fieldSchema.oneOf.some((branch) => branch.genesisType === GenesisType.DATETIME)
|
|
300
|
+
: fieldSchema.genesisType === GenesisType.DATETIME;
|
|
301
|
+
const formatted = getDateFormatter(resolveDefaultLocale(), isDatetime ? REVIEW_DATETIME_OPTIONS : REVIEW_DATE_OPTIONS)({ value: raw });
|
|
302
|
+
return formatted || null;
|
|
303
|
+
}
|
|
304
|
+
if (isOneOfNumber(FIELD_SCHEMA_TESTER_CONTROL, fieldSchema, FIELD_SCHEMA_TESTER_CONTEXT)) {
|
|
305
|
+
const isBigDecimalField = isBigDecimal(fieldSchema) ||
|
|
306
|
+
((_a = fieldSchema.oneOf) === null || _a === void 0 ? void 0 : _a.some((branch) => isBigDecimal(branch)));
|
|
307
|
+
// BigDecimals arrive as strings and can carry Java's `toString()` scientific notation
|
|
308
|
+
// (e.g. `1E-7`) — guard against that (and other non-numeric bad data) up front, same as
|
|
309
|
+
// before, rather than handing it to `Intl`/`Number()` and rendering "NaN".
|
|
310
|
+
if (isBigDecimalField && (typeof raw !== 'string' || !NUMERIC_STRING.test(raw))) {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
const withoutFormatting = !!(uischemaOptions === null || uischemaOptions === void 0 ? void 0 : uischemaOptions.withoutFormatting);
|
|
314
|
+
const formatOptions = (_b = uischemaOptions === null || uischemaOptions === void 0 ? void 0 : uischemaOptions.formatOptions) !== null && _b !== void 0 ? _b : REVIEW_NUMBER_OPTIONS;
|
|
315
|
+
// `NumberField`'s `value` is always a string internally, and `withFormatting: false` shows
|
|
316
|
+
// it completely unformatted (no grouping, no fraction-digit rounding) — matching that here
|
|
317
|
+
// means skipping `toIntlNumberFormat` entirely rather than applying it and stripping commas
|
|
318
|
+
// back out.
|
|
319
|
+
const core = withoutFormatting
|
|
320
|
+
? String(raw)
|
|
321
|
+
: toIntlNumberFormat(String(raw), NUMBER_FIELD_DEFAULT_LOCALE, formatOptions);
|
|
322
|
+
if (!core)
|
|
323
|
+
return null;
|
|
324
|
+
return applyAffixes(core, uischemaOptions);
|
|
188
325
|
}
|
|
189
326
|
return null;
|
|
190
327
|
}
|
|
328
|
+
/** Wraps a formatted value with `options.prefix`/`options.suffix`, matching the affix text
|
|
329
|
+
* `AffixMixin` (shared by `NumberField`/`TextField`) renders alongside the control. @internal */
|
|
330
|
+
function applyAffixes(value, options) {
|
|
331
|
+
return [options === null || options === void 0 ? void 0 : options.prefix, value, options === null || options === void 0 ? void 0 : options.suffix].filter(Boolean).join(' ');
|
|
332
|
+
}
|
|
191
333
|
/**
|
|
192
334
|
* Navigates a `/properties/`-separated path in data to support nested object scopes
|
|
193
335
|
* such as `ADDRESS/properties/STREET` produced by Group layout UI schemas.
|
|
@@ -1970,6 +1970,29 @@ declare const Form_base: (new (...args: any[]) => {
|
|
|
1970
1970
|
focus(options?: FocusOptions): void;
|
|
1971
1971
|
}) & typeof FoundationElement;
|
|
1972
1972
|
|
|
1973
|
+
/**
|
|
1974
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
1975
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field. Numbers
|
|
1976
|
+
* are formatted with `toIntlNumberFormat` (the same precision-safe path `NumberField` itself
|
|
1977
|
+
* uses); dates/datetimes with `getDateFormatter`, adding hours/minutes for `GenesisType.DATETIME`
|
|
1978
|
+
* fields. Returns `null` for non-number/date fields, or when no JSON schema is available to
|
|
1979
|
+
* determine the field's type.
|
|
1980
|
+
*
|
|
1981
|
+
* `uischemaOptions` (the Control element's `options`, as passed to `resolveOptionLabel` etc.)
|
|
1982
|
+
* carries the same display-affecting settings `NumberControlRenderer` reads directly —
|
|
1983
|
+
* `formatOptions`, `withoutFormatting`, `prefix`, `suffix` — so a field configured with e.g.
|
|
1984
|
+
* `withoutFormatting: true` or a custom `formatOptions.maximumFractionDigits` doesn't disagree
|
|
1985
|
+
* with review over how many digits it shows.
|
|
1986
|
+
*
|
|
1987
|
+
* A `raw` array against an array-typed field schema (`{ type: 'array', items: {...} }`, per
|
|
1988
|
+
* `isArray`'s convention) formats each element against `items` individually — e.g. an array of
|
|
1989
|
+
* DATE values — falling back to the unformatted element for any that don't format, so
|
|
1990
|
+
* `formatValueForReview`'s comma-join still sees a flat array of primitives. `uischemaOptions`
|
|
1991
|
+
* applies to every element, matching how one Control renders every item in the array.
|
|
1992
|
+
* @internal
|
|
1993
|
+
*/
|
|
1994
|
+
export declare function formatValueByFieldType(raw: any, fieldName: string, schema: any, uischemaOptions?: any): string | unknown[] | null;
|
|
1995
|
+
|
|
1973
1996
|
/**
|
|
1974
1997
|
* Converts a raw field value to a display string for the review panel.
|
|
1975
1998
|
* Arrays of primitives are comma-joined; arrays of objects and plain objects
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/foundation-forms",
|
|
3
3
|
"description": "Genesis Foundation Forms",
|
|
4
|
-
"version": "15.3.
|
|
4
|
+
"version": "15.3.3",
|
|
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": "15.3.
|
|
63
|
-
"@genesislcap/genx": "15.3.
|
|
64
|
-
"@genesislcap/rollup-builder": "15.3.
|
|
65
|
-
"@genesislcap/ts-builder": "15.3.
|
|
66
|
-
"@genesislcap/uvu-playwright-builder": "15.3.
|
|
67
|
-
"@genesislcap/vite-builder": "15.3.
|
|
68
|
-
"@genesislcap/webpack-builder": "15.3.
|
|
62
|
+
"@genesislcap/foundation-testing": "15.3.3",
|
|
63
|
+
"@genesislcap/genx": "15.3.3",
|
|
64
|
+
"@genesislcap/rollup-builder": "15.3.3",
|
|
65
|
+
"@genesislcap/ts-builder": "15.3.3",
|
|
66
|
+
"@genesislcap/uvu-playwright-builder": "15.3.3",
|
|
67
|
+
"@genesislcap/vite-builder": "15.3.3",
|
|
68
|
+
"@genesislcap/webpack-builder": "15.3.3",
|
|
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": "15.3.
|
|
86
|
-
"@genesislcap/foundation-criteria": "15.3.
|
|
87
|
-
"@genesislcap/foundation-logger": "15.3.
|
|
88
|
-
"@genesislcap/foundation-notifications": "15.3.
|
|
89
|
-
"@genesislcap/foundation-ui": "15.3.
|
|
90
|
-
"@genesislcap/foundation-utils": "15.3.
|
|
85
|
+
"@genesislcap/foundation-comms": "15.3.3",
|
|
86
|
+
"@genesislcap/foundation-criteria": "15.3.3",
|
|
87
|
+
"@genesislcap/foundation-logger": "15.3.3",
|
|
88
|
+
"@genesislcap/foundation-notifications": "15.3.3",
|
|
89
|
+
"@genesislcap/foundation-ui": "15.3.3",
|
|
90
|
+
"@genesislcap/foundation-utils": "15.3.3",
|
|
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": "
|
|
112
|
+
"gitHead": "f02b0631f64efa5fa842ba5f44028246fad7252c"
|
|
113
113
|
}
|