@cohesivesystems/presentation-react 0.1.0-alpha.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/LICENSE +55 -0
- package/dist/collection-chrome-slot-renderer-registry.d.ts +12 -0
- package/dist/collection-chrome-slot-renderer-registry.d.ts.map +1 -0
- package/dist/collection-chrome-slot-renderer-registry.js +12 -0
- package/dist/collection-chrome-slot-renderer-registry.js.map +1 -0
- package/dist/collection-selection-state-context.d.ts +6 -0
- package/dist/collection-selection-state-context.d.ts.map +1 -0
- package/dist/collection-selection-state-context.js +25 -0
- package/dist/collection-selection-state-context.js.map +1 -0
- package/dist/collection-selection-state.d.ts +3 -0
- package/dist/collection-selection-state.d.ts.map +1 -0
- package/dist/collection-selection-state.js +52 -0
- package/dist/collection-selection-state.js.map +1 -0
- package/dist/document-workspace-runtime.d.ts +262 -0
- package/dist/document-workspace-runtime.d.ts.map +1 -0
- package/dist/document-workspace-runtime.js +699 -0
- package/dist/document-workspace-runtime.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/input-form-endpoint-runtime.d.ts +140 -0
- package/dist/input-form-endpoint-runtime.d.ts.map +1 -0
- package/dist/input-form-endpoint-runtime.js +280 -0
- package/dist/input-form-endpoint-runtime.js.map +1 -0
- package/dist/local-flow-state-data-source-projection.d.ts +21 -0
- package/dist/local-flow-state-data-source-projection.d.ts.map +1 -0
- package/dist/local-flow-state-data-source-projection.js +65 -0
- package/dist/local-flow-state-data-source-projection.js.map +1 -0
- package/dist/navigation-runtime-context.d.ts +22 -0
- package/dist/navigation-runtime-context.d.ts.map +1 -0
- package/dist/navigation-runtime-context.js +23 -0
- package/dist/navigation-runtime-context.js.map +1 -0
- package/dist/navigation-shell-frame-renderer-registry.d.ts +20 -0
- package/dist/navigation-shell-frame-renderer-registry.d.ts.map +1 -0
- package/dist/navigation-shell-frame-renderer-registry.js +9 -0
- package/dist/navigation-shell-frame-renderer-registry.js.map +1 -0
- package/dist/navigation-shell-region-component-registry.d.ts +50 -0
- package/dist/navigation-shell-region-component-registry.d.ts.map +1 -0
- package/dist/navigation-shell-region-component-registry.js +44 -0
- package/dist/navigation-shell-region-component-registry.js.map +1 -0
- package/dist/navigation-shell-slot-renderer-registry.d.ts +22 -0
- package/dist/navigation-shell-slot-renderer-registry.d.ts.map +1 -0
- package/dist/navigation-shell-slot-renderer-registry.js +9 -0
- package/dist/navigation-shell-slot-renderer-registry.js.map +1 -0
- package/dist/page-host-projection.d.ts +127 -0
- package/dist/page-host-projection.d.ts.map +1 -0
- package/dist/page-host-projection.js +59 -0
- package/dist/page-host-projection.js.map +1 -0
- package/dist/page-host-renderer-registry.d.ts +72 -0
- package/dist/page-host-renderer-registry.d.ts.map +1 -0
- package/dist/page-host-renderer-registry.js +63 -0
- package/dist/page-host-renderer-registry.js.map +1 -0
- package/dist/presentation-action-group-runtime-options.d.ts +36 -0
- package/dist/presentation-action-group-runtime-options.d.ts.map +1 -0
- package/dist/presentation-action-group-runtime-options.js +50 -0
- package/dist/presentation-action-group-runtime-options.js.map +1 -0
- package/dist/presentation-action-runtime.d.ts +52 -0
- package/dist/presentation-action-runtime.d.ts.map +1 -0
- package/dist/presentation-action-runtime.js +78 -0
- package/dist/presentation-action-runtime.js.map +1 -0
- package/dist/presentation-data-source-binding-runtime.d.ts +3 -0
- package/dist/presentation-data-source-binding-runtime.d.ts.map +1 -0
- package/dist/presentation-data-source-binding-runtime.js +65 -0
- package/dist/presentation-data-source-binding-runtime.js.map +1 -0
- package/dist/presentation-data-source-binding.d.ts +12 -0
- package/dist/presentation-data-source-binding.d.ts.map +1 -0
- package/dist/presentation-data-source-binding.js +13 -0
- package/dist/presentation-data-source-binding.js.map +1 -0
- package/dist/presentation-flow-runtime.d.ts +139 -0
- package/dist/presentation-flow-runtime.d.ts.map +1 -0
- package/dist/presentation-flow-runtime.js +514 -0
- package/dist/presentation-flow-runtime.js.map +1 -0
- package/dist/presentation-module-context.d.ts +4 -0
- package/dist/presentation-module-context.d.ts.map +1 -0
- package/dist/presentation-module-context.js +6 -0
- package/dist/presentation-module-context.js.map +1 -0
- package/dist/presentation-module-provider.d.ts +7 -0
- package/dist/presentation-module-provider.d.ts.map +1 -0
- package/dist/presentation-module-provider.js +7 -0
- package/dist/presentation-module-provider.js.map +1 -0
- package/dist/presentation-projection-diagnostics-context.d.ts +8 -0
- package/dist/presentation-projection-diagnostics-context.d.ts.map +1 -0
- package/dist/presentation-projection-diagnostics-context.js +3 -0
- package/dist/presentation-projection-diagnostics-context.js.map +1 -0
- package/dist/presentation-projection-diagnostics-hooks.d.ts +4 -0
- package/dist/presentation-projection-diagnostics-hooks.d.ts.map +1 -0
- package/dist/presentation-projection-diagnostics-hooks.js +17 -0
- package/dist/presentation-projection-diagnostics-hooks.js.map +1 -0
- package/dist/presentation-projection-diagnostics-runtime.d.ts +12 -0
- package/dist/presentation-projection-diagnostics-runtime.d.ts.map +1 -0
- package/dist/presentation-projection-diagnostics-runtime.js +54 -0
- package/dist/presentation-projection-diagnostics-runtime.js.map +1 -0
- package/dist/presentation-projection-trace.d.ts +27 -0
- package/dist/presentation-projection-trace.d.ts.map +1 -0
- package/dist/presentation-projection-trace.js +54 -0
- package/dist/presentation-projection-trace.js.map +1 -0
- package/dist/presentation-query-form-runtime.d.ts +30 -0
- package/dist/presentation-query-form-runtime.d.ts.map +1 -0
- package/dist/presentation-query-form-runtime.js +75 -0
- package/dist/presentation-query-form-runtime.js.map +1 -0
- package/dist/presentation-query-form-state-adapter-registry.d.ts +4 -0
- package/dist/presentation-query-form-state-adapter-registry.d.ts.map +1 -0
- package/dist/presentation-query-form-state-adapter-registry.js +13 -0
- package/dist/presentation-query-form-state-adapter-registry.js.map +1 -0
- package/dist/presentation-query-form-state-context.d.ts +20 -0
- package/dist/presentation-query-form-state-context.d.ts.map +1 -0
- package/dist/presentation-query-form-state-context.js +20 -0
- package/dist/presentation-query-form-state-context.js.map +1 -0
- package/dist/presentation-query-form-state.d.ts +29 -0
- package/dist/presentation-query-form-state.d.ts.map +1 -0
- package/dist/presentation-query-form-state.js +99 -0
- package/dist/presentation-query-form-state.js.map +1 -0
- package/dist/presentation-renderer-registry.d.ts +109 -0
- package/dist/presentation-renderer-registry.d.ts.map +1 -0
- package/dist/presentation-renderer-registry.js +25 -0
- package/dist/presentation-renderer-registry.js.map +1 -0
- package/dist/presentation-standards-context.d.ts +4 -0
- package/dist/presentation-standards-context.d.ts.map +1 -0
- package/dist/presentation-standards-context.js +12 -0
- package/dist/presentation-standards-context.js.map +1 -0
- package/dist/presentation-standards-provider.d.ts +14 -0
- package/dist/presentation-standards-provider.d.ts.map +1 -0
- package/dist/presentation-standards-provider.js +16 -0
- package/dist/presentation-standards-provider.js.map +1 -0
- package/dist/projected-document-action-runtime-bindings.d.ts +20 -0
- package/dist/projected-document-action-runtime-bindings.d.ts.map +1 -0
- package/dist/projected-document-action-runtime-bindings.js +88 -0
- package/dist/projected-document-action-runtime-bindings.js.map +1 -0
- package/dist/projected-document-action-runtime.d.ts +76 -0
- package/dist/projected-document-action-runtime.d.ts.map +1 -0
- package/dist/projected-document-action-runtime.js +224 -0
- package/dist/projected-document-action-runtime.js.map +1 -0
- package/dist/projected-document-process-preview-action-runtime-bindings.d.ts +26 -0
- package/dist/projected-document-process-preview-action-runtime-bindings.d.ts.map +1 -0
- package/dist/projected-document-process-preview-action-runtime-bindings.js +106 -0
- package/dist/projected-document-process-preview-action-runtime-bindings.js.map +1 -0
- package/dist/projected-document-process-preview-action-runtime.d.ts +321 -0
- package/dist/projected-document-process-preview-action-runtime.d.ts.map +1 -0
- package/dist/projected-document-process-preview-action-runtime.js +729 -0
- package/dist/projected-document-process-preview-action-runtime.js.map +1 -0
- package/dist/projected-document-process-preview-capability-runtime.d.ts +47 -0
- package/dist/projected-document-process-preview-capability-runtime.d.ts.map +1 -0
- package/dist/projected-document-process-preview-capability-runtime.js +49 -0
- package/dist/projected-document-process-preview-capability-runtime.js.map +1 -0
- package/dist/projected-document-workspace-action-runtime.d.ts +87 -0
- package/dist/projected-document-workspace-action-runtime.d.ts.map +1 -0
- package/dist/projected-document-workspace-action-runtime.js +150 -0
- package/dist/projected-document-workspace-action-runtime.js.map +1 -0
- package/dist/projected-document-workspace-projection-renderer-diagnostics.d.ts +18 -0
- package/dist/projected-document-workspace-projection-renderer-diagnostics.d.ts.map +1 -0
- package/dist/projected-document-workspace-projection-renderer-diagnostics.js +207 -0
- package/dist/projected-document-workspace-projection-renderer-diagnostics.js.map +1 -0
- package/dist/projected-document-workspace-runtime-binding-diagnostics.d.ts +19 -0
- package/dist/projected-document-workspace-runtime-binding-diagnostics.d.ts.map +1 -0
- package/dist/projected-document-workspace-runtime-binding-diagnostics.js +124 -0
- package/dist/projected-document-workspace-runtime-binding-diagnostics.js.map +1 -0
- package/dist/projected-navigation-provider.d.ts +16 -0
- package/dist/projected-navigation-provider.d.ts.map +1 -0
- package/dist/projected-navigation-provider.js +51 -0
- package/dist/projected-navigation-provider.js.map +1 -0
- package/dist/projected-presentation-flow-host.d.ts +16 -0
- package/dist/projected-presentation-flow-host.d.ts.map +1 -0
- package/dist/projected-presentation-flow-host.js +14 -0
- package/dist/projected-presentation-flow-host.js.map +1 -0
- package/dist/projected-query-form-state-adapter.d.ts +12 -0
- package/dist/projected-query-form-state-adapter.d.ts.map +1 -0
- package/dist/projected-query-form-state-adapter.js +361 -0
- package/dist/projected-query-form-state-adapter.js.map +1 -0
- package/dist/react-router-binding.d.ts +133 -0
- package/dist/react-router-binding.d.ts.map +1 -0
- package/dist/react-router-binding.js +76 -0
- package/dist/react-router-binding.js.map +1 -0
- package/dist/react-router-path.d.ts +4 -0
- package/dist/react-router-path.d.ts.map +1 -0
- package/dist/react-router-path.js +11 -0
- package/dist/react-router-path.js.map +1 -0
- package/dist/scope-selection-context.d.ts +28 -0
- package/dist/scope-selection-context.d.ts.map +1 -0
- package/dist/scope-selection-context.js +13 -0
- package/dist/scope-selection-context.js.map +1 -0
- package/dist/scope-selection-provider.d.ts +33 -0
- package/dist/scope-selection-provider.d.ts.map +1 -0
- package/dist/scope-selection-provider.js +162 -0
- package/dist/scope-selection-provider.js.map +1 -0
- package/dist/scope-selection-request.d.ts +6 -0
- package/dist/scope-selection-request.d.ts.map +1 -0
- package/dist/scope-selection-request.js +12 -0
- package/dist/scope-selection-request.js.map +1 -0
- package/dist/standard-navigation-shell-frame-renderers.d.ts +15 -0
- package/dist/standard-navigation-shell-frame-renderers.d.ts.map +1 -0
- package/dist/standard-navigation-shell-frame-renderers.js +22 -0
- package/dist/standard-navigation-shell-frame-renderers.js.map +1 -0
- package/dist/standard-navigation-shell-slot-renderers.d.ts +59 -0
- package/dist/standard-navigation-shell-slot-renderers.d.ts.map +1 -0
- package/dist/standard-navigation-shell-slot-renderers.js +67 -0
- package/dist/standard-navigation-shell-slot-renderers.js.map +1 -0
- package/dist/view-chrome-slot-renderer-registry.d.ts +12 -0
- package/dist/view-chrome-slot-renderer-registry.d.ts.map +1 -0
- package/dist/view-chrome-slot-renderer-registry.js +12 -0
- package/dist/view-chrome-slot-renderer-registry.js.map +1 -0
- package/package.json +60 -0
- package/src/collection-chrome-slot-renderer-registry.ts +66 -0
- package/src/collection-selection-state-context.ts +51 -0
- package/src/collection-selection-state.tsx +101 -0
- package/src/document-workspace-runtime.tsx +1505 -0
- package/src/index.ts +50 -0
- package/src/input-form-endpoint-runtime.ts +632 -0
- package/src/local-flow-state-data-source-projection.ts +133 -0
- package/src/navigation-runtime-context.ts +40 -0
- package/src/navigation-shell-frame-renderer-registry.ts +54 -0
- package/src/navigation-shell-region-component-registry.tsx +127 -0
- package/src/navigation-shell-slot-renderer-registry.ts +88 -0
- package/src/page-host-projection.ts +356 -0
- package/src/page-host-renderer-registry.tsx +353 -0
- package/src/presentation-action-group-runtime-options.ts +121 -0
- package/src/presentation-action-runtime.ts +190 -0
- package/src/presentation-data-source-binding-runtime.ts +109 -0
- package/src/presentation-data-source-binding.tsx +24 -0
- package/src/presentation-flow-runtime.tsx +835 -0
- package/src/presentation-module-context.ts +10 -0
- package/src/presentation-module-provider.tsx +19 -0
- package/src/presentation-projection-diagnostics-context.ts +17 -0
- package/src/presentation-projection-diagnostics-hooks.ts +29 -0
- package/src/presentation-projection-diagnostics-runtime.tsx +95 -0
- package/src/presentation-projection-trace.ts +117 -0
- package/src/presentation-query-form-runtime.ts +148 -0
- package/src/presentation-query-form-state-adapter-registry.ts +25 -0
- package/src/presentation-query-form-state-context.ts +56 -0
- package/src/presentation-query-form-state.tsx +250 -0
- package/src/presentation-renderer-registry.ts +214 -0
- package/src/presentation-standards-context.ts +21 -0
- package/src/presentation-standards-provider.tsx +44 -0
- package/src/projected-document-action-runtime-bindings.ts +132 -0
- package/src/projected-document-action-runtime.ts +414 -0
- package/src/projected-document-process-preview-action-runtime-bindings.ts +231 -0
- package/src/projected-document-process-preview-action-runtime.ts +1725 -0
- package/src/projected-document-process-preview-capability-runtime.ts +216 -0
- package/src/projected-document-workspace-action-runtime.ts +402 -0
- package/src/projected-document-workspace-projection-renderer-diagnostics.ts +342 -0
- package/src/projected-document-workspace-runtime-binding-diagnostics.ts +208 -0
- package/src/projected-navigation-provider.tsx +104 -0
- package/src/projected-presentation-flow-host.tsx +46 -0
- package/src/projected-query-form-state-adapter.ts +578 -0
- package/src/react-router-binding.tsx +417 -0
- package/src/react-router-path.ts +16 -0
- package/src/scope-selection-context.ts +58 -0
- package/src/scope-selection-provider.tsx +324 -0
- package/src/scope-selection-request.ts +21 -0
- package/src/standard-navigation-shell-frame-renderers.tsx +106 -0
- package/src/standard-navigation-shell-slot-renderers.tsx +289 -0
- package/src/view-chrome-slot-renderer-registry.ts +66 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { createQueryFormUrlFields, createQueryFormUrlSearch, createQueryFormUrlSearchKey, readObjectPath, readQueryFormUrlValue, writeObjectPath, } from '@cohesivesystems/presentation-core';
|
|
2
|
+
import { createPresentationEnumDiscriminator, matchesPresentationEnum, } from '@cohesivesystems/presentation-core';
|
|
3
|
+
import { inputFormChoiceDefaultSelections, inputFormFieldControlKinds, inputFormFieldKinds, presentationValueKinds, } from '@cohesivesystems/presentation-contracts';
|
|
4
|
+
import { createDefaultDateTimeFilter, isDateTimePreset, normalizeDateTimeFilter, } from '@cohesivesystems/presentation-core';
|
|
5
|
+
const dateTimeRangeParamValue = 'range';
|
|
6
|
+
/**
|
|
7
|
+
* Creates the default frontend interpretation for an IR-declared query form.
|
|
8
|
+
*
|
|
9
|
+
* The adapter derives draft/applied state shape, normalization, and URL state
|
|
10
|
+
* from the query form's backing input-form fields. Targets can still override a
|
|
11
|
+
* query form by registering an adapter with the same query form id.
|
|
12
|
+
*/
|
|
13
|
+
export function createProjectedQueryFormStateAdapter(queryFormId) {
|
|
14
|
+
return {
|
|
15
|
+
createAppliedSearch: ({ choiceValuesByFieldId, inputForm, queryForm, search, value, }) => createQueryFormUrlSearch({
|
|
16
|
+
allValuesByFieldId: choiceValuesByFieldId,
|
|
17
|
+
defaultValue: createProjectedQueryFormDefaultValue({
|
|
18
|
+
choiceValuesByFieldId,
|
|
19
|
+
inputForm,
|
|
20
|
+
}),
|
|
21
|
+
fieldCodecs: createProjectedQueryFormUrlFieldCodecs(inputForm),
|
|
22
|
+
fields: createQueryFormUrlFields(inputForm, queryForm),
|
|
23
|
+
queryForm,
|
|
24
|
+
search,
|
|
25
|
+
value: normalizeProjectedQueryFormValue({
|
|
26
|
+
choiceValuesByFieldId,
|
|
27
|
+
inputForm,
|
|
28
|
+
value,
|
|
29
|
+
}),
|
|
30
|
+
}),
|
|
31
|
+
createDefaultValue: (context) => createProjectedQueryFormDefaultValue(context),
|
|
32
|
+
createSearchKey: ({ choiceValuesByFieldId = {}, inputForm, queryForm, search, }) => createQueryFormUrlSearchKey({
|
|
33
|
+
allValuesByFieldId: choiceValuesByFieldId,
|
|
34
|
+
defaultValue: createProjectedQueryFormDefaultValue({
|
|
35
|
+
choiceValuesByFieldId,
|
|
36
|
+
inputForm,
|
|
37
|
+
}),
|
|
38
|
+
fieldCodecs: createProjectedQueryFormUrlFieldCodecs(inputForm),
|
|
39
|
+
fields: createQueryFormUrlFields(inputForm, queryForm),
|
|
40
|
+
queryForm,
|
|
41
|
+
search,
|
|
42
|
+
}),
|
|
43
|
+
normalizeValue: ({ choiceValuesByFieldId, inputForm, value }) => normalizeProjectedQueryFormValue({
|
|
44
|
+
choiceValuesByFieldId,
|
|
45
|
+
inputForm,
|
|
46
|
+
value,
|
|
47
|
+
}),
|
|
48
|
+
queryFormId,
|
|
49
|
+
readValueFromSearch: ({ choiceValuesByFieldId = {}, inputForm, queryForm, search, }) => normalizeProjectedQueryFormValue({
|
|
50
|
+
choiceValuesByFieldId,
|
|
51
|
+
inputForm,
|
|
52
|
+
value: readQueryFormUrlValue({
|
|
53
|
+
defaultValue: createProjectedQueryFormDefaultValue({
|
|
54
|
+
choiceValuesByFieldId,
|
|
55
|
+
inputForm,
|
|
56
|
+
}),
|
|
57
|
+
fieldCodecs: createProjectedQueryFormUrlFieldCodecs(inputForm),
|
|
58
|
+
fields: createQueryFormUrlFields(inputForm, queryForm),
|
|
59
|
+
queryForm,
|
|
60
|
+
search,
|
|
61
|
+
}),
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createProjectedQueryFormDefaultValue({ choiceValuesByFieldId = {}, inputForm, }) {
|
|
66
|
+
if (!inputForm) {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
const value = {};
|
|
70
|
+
for (const field of inputForm.Fields) {
|
|
71
|
+
writeObjectPath(value, field.ValuePath, createDefaultInputFormFieldValue(field, readChoiceValues(choiceValuesByFieldId, field)));
|
|
72
|
+
}
|
|
73
|
+
return applyLiteralInputFormDefaultValues(inputForm, value);
|
|
74
|
+
}
|
|
75
|
+
function normalizeProjectedQueryFormValue({ choiceValuesByFieldId, inputForm, value, }) {
|
|
76
|
+
if (!inputForm) {
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
const nextValue = clonePlainObject(value);
|
|
80
|
+
for (const field of inputForm.Fields) {
|
|
81
|
+
const choiceValues = readChoiceValues(choiceValuesByFieldId, field);
|
|
82
|
+
const currentValue = readObjectPath(nextValue, field.ValuePath);
|
|
83
|
+
writeObjectPath(nextValue, field.ValuePath, normalizeInputFormFieldValue(field, currentValue, choiceValues));
|
|
84
|
+
}
|
|
85
|
+
return nextValue;
|
|
86
|
+
}
|
|
87
|
+
function createDefaultInputFormFieldValue(field, choiceValues) {
|
|
88
|
+
if (isInputFormFieldKind(field, 'multiSelect', 'MultiSelect')) {
|
|
89
|
+
return createDefaultChoiceSelection(field, choiceValues);
|
|
90
|
+
}
|
|
91
|
+
if (isInputFormFieldKind(field, 'select', 'Select')) {
|
|
92
|
+
return createDefaultSingleChoice(field, choiceValues);
|
|
93
|
+
}
|
|
94
|
+
if (isInputFormFieldKind(field, 'dateTimeRange', 'DateTimeRange')) {
|
|
95
|
+
return isDateTimeFilterControl(field)
|
|
96
|
+
? createDefaultDateTimeFilter()
|
|
97
|
+
: { after: null, before: null };
|
|
98
|
+
}
|
|
99
|
+
if (isInputFormFieldKind(field, 'number', 'Number')) {
|
|
100
|
+
return readDefaultNumber(field.DefaultValue);
|
|
101
|
+
}
|
|
102
|
+
if (isInputFormFieldKind(field, 'numberRange', 'NumberRange')) {
|
|
103
|
+
return { maximum: null, minimum: null };
|
|
104
|
+
}
|
|
105
|
+
if (isInputFormFieldKind(field, 'boolean', 'Boolean')) {
|
|
106
|
+
return field.DefaultValue === 'true';
|
|
107
|
+
}
|
|
108
|
+
return field.DefaultValue ?? '';
|
|
109
|
+
}
|
|
110
|
+
function normalizeInputFormFieldValue(field, value, choiceValues) {
|
|
111
|
+
if (isInputFormFieldKind(field, 'multiSelect', 'MultiSelect')) {
|
|
112
|
+
const selectedValues = normalizeStringSet(value);
|
|
113
|
+
const availableValues = normalizeStringSet(choiceValues);
|
|
114
|
+
const availableSet = new Set(availableValues);
|
|
115
|
+
const visibleSelectedValues = availableSet.size > 0
|
|
116
|
+
? selectedValues.filter((selectedValue) => availableSet.has(selectedValue))
|
|
117
|
+
: selectedValues;
|
|
118
|
+
return visibleSelectedValues.length > 0
|
|
119
|
+
? visibleSelectedValues
|
|
120
|
+
: createDefaultChoiceSelection(field, availableValues);
|
|
121
|
+
}
|
|
122
|
+
if (isInputFormFieldKind(field, 'select', 'Select')) {
|
|
123
|
+
const selectedValue = typeof value === 'string' ? value.trim() : '';
|
|
124
|
+
const availableValues = normalizeStringSet(choiceValues);
|
|
125
|
+
return selectedValue && (availableValues.length === 0 || availableValues.includes(selectedValue))
|
|
126
|
+
? selectedValue
|
|
127
|
+
: createDefaultSingleChoice(field, availableValues);
|
|
128
|
+
}
|
|
129
|
+
if (isInputFormFieldKind(field, 'dateTimeRange', 'DateTimeRange')) {
|
|
130
|
+
return isDateTimeFilterControl(field)
|
|
131
|
+
? coerceDateTimeFilterValue(value)
|
|
132
|
+
: normalizePlainDateTimeRange(value);
|
|
133
|
+
}
|
|
134
|
+
if (isInputFormFieldKind(field, 'dateTime', 'DateTime') ||
|
|
135
|
+
isInputFormFieldKind(field, 'date', 'Date')) {
|
|
136
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
137
|
+
}
|
|
138
|
+
if (isInputFormFieldKind(field, 'number', 'Number')) {
|
|
139
|
+
return typeof value === 'number' && Number.isFinite(value)
|
|
140
|
+
? value
|
|
141
|
+
: readDefaultNumber(field.DefaultValue);
|
|
142
|
+
}
|
|
143
|
+
if (isInputFormFieldKind(field, 'numberRange', 'NumberRange')) {
|
|
144
|
+
return normalizeNumberRange(value);
|
|
145
|
+
}
|
|
146
|
+
if (isInputFormFieldKind(field, 'boolean', 'Boolean')) {
|
|
147
|
+
return value === true;
|
|
148
|
+
}
|
|
149
|
+
return typeof value === 'string' ? value.trim() : field.DefaultValue ?? '';
|
|
150
|
+
}
|
|
151
|
+
function createProjectedQueryFormUrlFieldCodecs(inputForm) {
|
|
152
|
+
if (!inputForm) {
|
|
153
|
+
return {};
|
|
154
|
+
}
|
|
155
|
+
return Object.fromEntries(inputForm.Fields
|
|
156
|
+
.filter((field) => isInputFormFieldKind(field, 'dateTimeRange', 'DateTimeRange') &&
|
|
157
|
+
isDateTimeFilterControl(field))
|
|
158
|
+
.map((field) => [
|
|
159
|
+
field.Id,
|
|
160
|
+
{
|
|
161
|
+
deleteParams: ({ key, params }) => deleteDateTimeFilterParams(params, key),
|
|
162
|
+
read: ({ defaultFieldValue, key, params }) => readDateTimeFilterParams(params, key, coerceDateTimeFilterValue(defaultFieldValue)),
|
|
163
|
+
write: ({ fieldValue, key, params }) => writeDateTimeFilterParams(params, key, coerceDateTimeFilterValue(fieldValue)),
|
|
164
|
+
},
|
|
165
|
+
]));
|
|
166
|
+
}
|
|
167
|
+
function readDateTimeFilterParams(params, key, defaults) {
|
|
168
|
+
const value = params.get(key)?.trim() ?? '';
|
|
169
|
+
const timezone = params.get(createDateTimeFilterParam(key, 'tz'))?.trim() || defaults.timezone;
|
|
170
|
+
if (value === dateTimeRangeParamValue) {
|
|
171
|
+
return normalizeDateTimeFilter({
|
|
172
|
+
...defaults,
|
|
173
|
+
afterLocal: params.get(createDateTimeFilterParam(key, 'after'))?.trim() ?? '',
|
|
174
|
+
beforeLocal: params.get(createDateTimeFilterParam(key, 'before'))?.trim() ?? '',
|
|
175
|
+
mode: 'range',
|
|
176
|
+
timezone,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (value && isDateTimePreset(value)) {
|
|
180
|
+
return normalizeDateTimeFilter({
|
|
181
|
+
...defaults,
|
|
182
|
+
mode: 'preset',
|
|
183
|
+
preset: value,
|
|
184
|
+
timezone,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return defaults;
|
|
188
|
+
}
|
|
189
|
+
function writeDateTimeFilterParams(params, key, value) {
|
|
190
|
+
const normalizedValue = normalizeDateTimeFilter(value);
|
|
191
|
+
if (normalizedValue.mode === 'range') {
|
|
192
|
+
params.set(key, dateTimeRangeParamValue);
|
|
193
|
+
writeStringParam(params, createDateTimeFilterParam(key, 'after'), normalizedValue.afterLocal);
|
|
194
|
+
writeStringParam(params, createDateTimeFilterParam(key, 'before'), normalizedValue.beforeLocal);
|
|
195
|
+
writeStringParam(params, createDateTimeFilterParam(key, 'tz'), normalizedValue.timezone);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (normalizedValue.preset !== 'today') {
|
|
199
|
+
params.set(key, normalizedValue.preset);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function deleteDateTimeFilterParams(params, key) {
|
|
203
|
+
params.delete(key);
|
|
204
|
+
params.delete(createDateTimeFilterParam(key, 'after'));
|
|
205
|
+
params.delete(createDateTimeFilterParam(key, 'before'));
|
|
206
|
+
params.delete(createDateTimeFilterParam(key, 'tz'));
|
|
207
|
+
}
|
|
208
|
+
function createDateTimeFilterParam(key, suffix) {
|
|
209
|
+
return `${key}_${suffix}`;
|
|
210
|
+
}
|
|
211
|
+
function writeStringParam(params, key, value) {
|
|
212
|
+
const trimmedValue = value.trim();
|
|
213
|
+
if (trimmedValue) {
|
|
214
|
+
params.set(key, trimmedValue);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function createDefaultChoiceSelection(field, choiceValues) {
|
|
218
|
+
if (isInputFormChoiceDefaultSelection(field, 'all', 'All')) {
|
|
219
|
+
return [...choiceValues];
|
|
220
|
+
}
|
|
221
|
+
if (isInputFormChoiceDefaultSelection(field, 'first', 'First')) {
|
|
222
|
+
return choiceValues[0] ? [choiceValues[0]] : [];
|
|
223
|
+
}
|
|
224
|
+
return normalizeStringSet(field.DefaultValue);
|
|
225
|
+
}
|
|
226
|
+
function createDefaultSingleChoice(field, choiceValues) {
|
|
227
|
+
if (isInputFormChoiceDefaultSelection(field, 'first', 'First')) {
|
|
228
|
+
return choiceValues[0] ?? '';
|
|
229
|
+
}
|
|
230
|
+
return field.DefaultValue ?? '';
|
|
231
|
+
}
|
|
232
|
+
function readChoiceValues(choiceValuesByFieldId, field) {
|
|
233
|
+
return choiceValuesByFieldId[field.Id] ??
|
|
234
|
+
choiceValuesByFieldId[field.FieldId] ??
|
|
235
|
+
[];
|
|
236
|
+
}
|
|
237
|
+
function coerceDateTimeFilterValue(value) {
|
|
238
|
+
const fallback = createDefaultDateTimeFilter();
|
|
239
|
+
if (!value || typeof value !== 'object') {
|
|
240
|
+
return fallback;
|
|
241
|
+
}
|
|
242
|
+
const record = value;
|
|
243
|
+
return normalizeDateTimeFilter({
|
|
244
|
+
afterLocal: readOptionalString(record.afterLocal) || fallback.afterLocal,
|
|
245
|
+
beforeLocal: readOptionalString(record.beforeLocal) || fallback.beforeLocal,
|
|
246
|
+
mode: record.mode === 'range' ? 'range' : 'preset',
|
|
247
|
+
preset: readOptionalString(record.preset),
|
|
248
|
+
timezone: readOptionalString(record.timezone) || fallback.timezone,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function normalizePlainDateTimeRange(value) {
|
|
252
|
+
const range = value && typeof value === 'object'
|
|
253
|
+
? value
|
|
254
|
+
: {};
|
|
255
|
+
return {
|
|
256
|
+
after: readOptionalString(range.after) || null,
|
|
257
|
+
before: readOptionalString(range.before) || null,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function normalizeNumberRange(value) {
|
|
261
|
+
const range = value && typeof value === 'object'
|
|
262
|
+
? value
|
|
263
|
+
: {};
|
|
264
|
+
return {
|
|
265
|
+
maximum: readOptionalNumber(range.maximum),
|
|
266
|
+
minimum: readOptionalNumber(range.minimum),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function readDefaultNumber(value) {
|
|
270
|
+
return readOptionalNumber(value) ?? null;
|
|
271
|
+
}
|
|
272
|
+
function readOptionalNumber(value) {
|
|
273
|
+
if (typeof value === 'string' && value.trim() === '') {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
const numberValue = typeof value === 'number'
|
|
277
|
+
? value
|
|
278
|
+
: Number(value);
|
|
279
|
+
return Number.isFinite(numberValue) ? numberValue : null;
|
|
280
|
+
}
|
|
281
|
+
function readOptionalString(value) {
|
|
282
|
+
return typeof value === 'string' ? value : '';
|
|
283
|
+
}
|
|
284
|
+
function normalizeStringSet(value) {
|
|
285
|
+
const values = Array.isArray(value) ? value : typeof value === 'string' ? [value] : [];
|
|
286
|
+
return Array.from(new Set(values
|
|
287
|
+
.map((entry) => typeof entry === 'string' ? entry.trim() : '')
|
|
288
|
+
.filter((entry) => entry.length > 0)));
|
|
289
|
+
}
|
|
290
|
+
function applyLiteralInputFormDefaultValues(inputForm, value) {
|
|
291
|
+
const defaultValues = inputForm.DefaultValues ?? [];
|
|
292
|
+
if (defaultValues.length === 0) {
|
|
293
|
+
return value;
|
|
294
|
+
}
|
|
295
|
+
const target = clonePlainObject(value);
|
|
296
|
+
for (const binding of defaultValues) {
|
|
297
|
+
const resolvedValue = resolveLiteralDefaultValue(binding.Source);
|
|
298
|
+
if ((resolvedValue === null || resolvedValue === undefined) && binding.OmitWhenNull) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (resolvedValue !== undefined) {
|
|
302
|
+
writeObjectPath(target, binding.TargetPath, resolvedValue);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return target;
|
|
306
|
+
}
|
|
307
|
+
function resolveLiteralDefaultValue(value) {
|
|
308
|
+
if (isPresentationValueKind(value.Kind, presentationValueKinds.literal, 'literal')) {
|
|
309
|
+
return parseDefaultValue(value.Literal);
|
|
310
|
+
}
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
function parseDefaultValue(value) {
|
|
314
|
+
if (value === null || value === undefined) {
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
if (value === 'null') {
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
if (value === 'true') {
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
if (value === 'false') {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
const numberValue = Number(value);
|
|
327
|
+
return Number.isFinite(numberValue) && value.trim() !== ''
|
|
328
|
+
? numberValue
|
|
329
|
+
: value;
|
|
330
|
+
}
|
|
331
|
+
function isInputFormFieldKind(field, kind, label) {
|
|
332
|
+
return matchesPresentationEnum(field.Kind, createPresentationEnumDiscriminator(inputFormFieldKinds, kind, label));
|
|
333
|
+
}
|
|
334
|
+
function isInputFormChoiceDefaultSelection(field, selection, label) {
|
|
335
|
+
const defaultSelection = field.ChoiceSource?.DefaultSelection;
|
|
336
|
+
return defaultSelection !== null &&
|
|
337
|
+
defaultSelection !== undefined &&
|
|
338
|
+
matchesPresentationEnum(defaultSelection, createPresentationEnumDiscriminator(inputFormChoiceDefaultSelections, selection, label));
|
|
339
|
+
}
|
|
340
|
+
function isDateTimeFilterControl(field) {
|
|
341
|
+
const control = field.Display?.Control;
|
|
342
|
+
return control === inputFormFieldControlKinds.dateTimeFilter ||
|
|
343
|
+
control?.toString().toLocaleLowerCase() === 'datetimefilter';
|
|
344
|
+
}
|
|
345
|
+
function isPresentationValueKind(value, numericKind, stringKind) {
|
|
346
|
+
return value === numericKind ||
|
|
347
|
+
(typeof value === 'string' && value.toLowerCase() === stringKind.toLowerCase());
|
|
348
|
+
}
|
|
349
|
+
function clonePlainObject(value) {
|
|
350
|
+
return clonePlainValue(value);
|
|
351
|
+
}
|
|
352
|
+
function clonePlainValue(value) {
|
|
353
|
+
if (Array.isArray(value)) {
|
|
354
|
+
return value.map(clonePlainValue);
|
|
355
|
+
}
|
|
356
|
+
if (value && typeof value === 'object') {
|
|
357
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, clonePlainValue(entry)]));
|
|
358
|
+
}
|
|
359
|
+
return value;
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=projected-query-form-state-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projected-query-form-state-adapter.js","sourceRoot":"","sources":["../src/projected-query-form-state-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type NavigationDefinitionProjection, type NavigationTarget } from '@cohesivesystems/presentation-core';
|
|
3
|
+
import type { NavigationRouteDefinition, PageHostDefinition } from '@cohesivesystems/presentation-contracts';
|
|
4
|
+
import { type PageHostComponentRegistry, type RouteParameterValues, type UnknownPageHostRenderer } from './page-host-projection.js';
|
|
5
|
+
/**
|
|
6
|
+
* Props for rendering one semantic navigation route through React Router.
|
|
7
|
+
*
|
|
8
|
+
* The route definition remains presentation IR; this component only adapts it
|
|
9
|
+
* to React Router matching, resolves the target page host, and then delegates
|
|
10
|
+
* rendering to either an app-specific navigation target renderer or the
|
|
11
|
+
* page-host projection runtime.
|
|
12
|
+
*/
|
|
13
|
+
export interface ProjectedNavigationRouteProps<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext> {
|
|
14
|
+
/** Optional concrete component registry used when rendering a bound page host directly. */
|
|
15
|
+
readonly componentRegistry?: PageHostComponentRegistry<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
16
|
+
/** App-defined runtime context carried through route and page-host renderers. */
|
|
17
|
+
readonly context: TProjectionContext;
|
|
18
|
+
/** Presentation module or module projection that owns the route target bindings. */
|
|
19
|
+
readonly module: TModule;
|
|
20
|
+
/** Navigation graph containing the route and its page-host definitions. */
|
|
21
|
+
readonly navigation: TNavigation;
|
|
22
|
+
/** Fallback renderer for unmatched routes, missing page hosts, or unknown bindings. */
|
|
23
|
+
readonly renderUnknownPageHost: UnknownPageHostRenderer<TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
24
|
+
/**
|
|
25
|
+
* Optional higher-level renderer for the resolved navigation target.
|
|
26
|
+
*
|
|
27
|
+
* Use this when an app needs to attach route-level services, auth, data-source
|
|
28
|
+
* bindings, or layout before rendering the page host.
|
|
29
|
+
*/
|
|
30
|
+
readonly renderNavigationTarget?: ProjectedNavigationTargetRenderer<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
31
|
+
/**
|
|
32
|
+
* Optional component-key resolver used by direct page-host rendering.
|
|
33
|
+
*
|
|
34
|
+
* Most projected apps prefer target bindings or a `renderNavigationTarget`
|
|
35
|
+
* implementation; this hook remains useful for simple router integrations.
|
|
36
|
+
*/
|
|
37
|
+
readonly resolveComponentKey?: (context: ProjectedNavigationRouteResolutionContext<TModule, TNavigation, TRoute, TPageHost, TProjectionContext>) => string | null;
|
|
38
|
+
/** The semantic route definition being adapted to a React Router route. */
|
|
39
|
+
readonly route: TRoute;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Context available while resolving a route-level component key.
|
|
43
|
+
*
|
|
44
|
+
* This is deliberately pre-render context: route parameters are not included
|
|
45
|
+
* here because component-key resolution should depend on the semantic route,
|
|
46
|
+
* page host, and module bindings rather than current URL values.
|
|
47
|
+
*/
|
|
48
|
+
export interface ProjectedNavigationRouteResolutionContext<TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext> {
|
|
49
|
+
/** App-defined runtime context passed into the navigation projection. */
|
|
50
|
+
readonly context: TProjectionContext;
|
|
51
|
+
/** Presentation module or module projection used by the resolver. */
|
|
52
|
+
readonly module: TModule;
|
|
53
|
+
/** Navigation graph that contains the current route and page host. */
|
|
54
|
+
readonly navigation: TNavigation;
|
|
55
|
+
/** Fully resolved semantic navigation target for the matched route. */
|
|
56
|
+
readonly navigationTarget: NavigationTarget<TRoute, TPageHost>;
|
|
57
|
+
/** Page host addressed by the route, or `null` when the graph is incomplete. */
|
|
58
|
+
readonly pageHost: TPageHost | null;
|
|
59
|
+
/** Matched semantic route definition. */
|
|
60
|
+
readonly route: TRoute;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Convenience route-resolution context for integrations that use the generated
|
|
64
|
+
* default navigation and page-host shapes.
|
|
65
|
+
*/
|
|
66
|
+
export type SimpleProjectedNavigationRouteResolutionContext<TModule, TProjectionContext> = ProjectedNavigationRouteResolutionContext<TModule, NavigationDefinitionProjection, NavigationRouteDefinition, PageHostDefinition, TProjectionContext>;
|
|
67
|
+
/**
|
|
68
|
+
* Render context for apps that take over the route target after React Router
|
|
69
|
+
* has matched a URL.
|
|
70
|
+
*
|
|
71
|
+
* This is the main extension point for product shells: callers receive route
|
|
72
|
+
* params, semantic route/page-host data, and a helper for falling back to the
|
|
73
|
+
* standard page-host renderer.
|
|
74
|
+
*/
|
|
75
|
+
export interface ProjectedNavigationTargetRenderContext<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext> extends ProjectedNavigationRouteResolutionContext<TModule, TNavigation, TRoute, TPageHost, TProjectionContext> {
|
|
76
|
+
/** Route parameter values returned by React Router for the matched URL. */
|
|
77
|
+
readonly parameters: RouteParameterValues;
|
|
78
|
+
/**
|
|
79
|
+
* Renders the resolved page host through the standard page-host projection.
|
|
80
|
+
*
|
|
81
|
+
* Pass a component key to force a binding for simple adapters; omit it to let
|
|
82
|
+
* the page-host projection resolve from the registry and target metadata.
|
|
83
|
+
*/
|
|
84
|
+
readonly renderBoundPageHost: (componentKey?: TComponentKey | string | null) => ReactNode;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Convenience target-render context for integrations that use the generated
|
|
88
|
+
* default navigation and page-host shapes.
|
|
89
|
+
*/
|
|
90
|
+
export type SimpleProjectedNavigationTargetRenderContext<TModule, TProjectionContext> = ProjectedNavigationTargetRenderContext<string, TModule, NavigationDefinitionProjection, NavigationRouteDefinition, PageHostDefinition, TProjectionContext>;
|
|
91
|
+
/**
|
|
92
|
+
* App-level route target renderer.
|
|
93
|
+
*
|
|
94
|
+
* Implement this when route dispatch needs to be explicit and inspectable while
|
|
95
|
+
* the actual page body remains projected from presentation IR.
|
|
96
|
+
*/
|
|
97
|
+
export type ProjectedNavigationTargetRenderer<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext> = (context: ProjectedNavigationTargetRenderContext<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>) => ReactNode;
|
|
98
|
+
/**
|
|
99
|
+
* React Router element for one generated presentation route.
|
|
100
|
+
*
|
|
101
|
+
* It resolves the semantic navigation target, captures URL parameters, and then
|
|
102
|
+
* either invokes `renderNavigationTarget` or renders the target page host
|
|
103
|
+
* directly through `renderPageHost`.
|
|
104
|
+
*/
|
|
105
|
+
export declare function ProjectedNavigationRoute<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext>({ componentRegistry, context, module, navigation, renderUnknownPageHost, renderNavigationTarget, resolveComponentKey, route, }: ProjectedNavigationRouteProps<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>): ReactNode;
|
|
106
|
+
/**
|
|
107
|
+
* Props for projecting an entire navigation graph into React Router routes.
|
|
108
|
+
*/
|
|
109
|
+
export interface ProjectedNavigationRoutesProps<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext> {
|
|
110
|
+
/** Optional registry used when route elements render page hosts directly. */
|
|
111
|
+
readonly componentRegistry?: PageHostComponentRegistry<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
112
|
+
/** App-defined runtime context passed to every generated route element. */
|
|
113
|
+
readonly context: TProjectionContext;
|
|
114
|
+
/** Presentation module or module projection used by generated routes. */
|
|
115
|
+
readonly module: TModule;
|
|
116
|
+
/** Semantic navigation graph whose routes are projected into React Router. */
|
|
117
|
+
readonly navigation: TNavigation;
|
|
118
|
+
/** Fallback renderer used for missing bindings and the catch-all route. */
|
|
119
|
+
readonly renderUnknownPageHost: UnknownPageHostRenderer<TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
120
|
+
/** Optional route-level renderer invoked after a URL has matched. */
|
|
121
|
+
readonly renderNavigationTarget?: ProjectedNavigationTargetRenderer<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>;
|
|
122
|
+
/** Optional direct page-host component-key resolver. */
|
|
123
|
+
readonly resolveComponentKey?: ProjectedNavigationRouteProps<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>['resolveComponentKey'];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Projects a semantic navigation graph into a React Router `<Routes>` tree.
|
|
127
|
+
*
|
|
128
|
+
* Each `NavigationRouteDefinition.PathTemplate` is translated to a React Router
|
|
129
|
+
* path, while unmatched URLs are routed to the supplied unknown page-host
|
|
130
|
+
* renderer.
|
|
131
|
+
*/
|
|
132
|
+
export declare function ProjectedNavigationRoutes<TComponentKey extends string, TModule, TNavigation extends NavigationDefinitionProjection<TRoute, TPageHost>, TRoute extends NavigationRouteDefinition, TPageHost extends PageHostDefinition, TProjectionContext>({ componentRegistry, context, module, navigation, renderUnknownPageHost, renderNavigationTarget, resolveComponentKey, }: ProjectedNavigationRoutesProps<TComponentKey, TModule, TNavigation, TRoute, TPageHost, TProjectionContext>): import("react/jsx-runtime").JSX.Element;
|
|
133
|
+
//# sourceMappingURL=react-router-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-router-binding.d.ts","sourceRoot":"","sources":["../src/react-router-binding.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Route, Routes, useLocation, useParams } from 'react-router';
|
|
3
|
+
import { createNavigationRouteInstanceKey, resolveNavigationTarget, } from '@cohesivesystems/presentation-core';
|
|
4
|
+
import { renderPageHost, } from './page-host-projection.js';
|
|
5
|
+
import { toReactRouterPath } from './react-router-path.js';
|
|
6
|
+
/**
|
|
7
|
+
* React Router element for one generated presentation route.
|
|
8
|
+
*
|
|
9
|
+
* It resolves the semantic navigation target, captures URL parameters, and then
|
|
10
|
+
* either invokes `renderNavigationTarget` or renders the target page host
|
|
11
|
+
* directly through `renderPageHost`.
|
|
12
|
+
*/
|
|
13
|
+
export function ProjectedNavigationRoute({ componentRegistry, context, module, navigation, renderUnknownPageHost, renderNavigationTarget, resolveComponentKey, route, }) {
|
|
14
|
+
const parameters = useParams();
|
|
15
|
+
const navigationTarget = resolveNavigationTarget(navigation, route);
|
|
16
|
+
const pageHost = navigationTarget.pageHost;
|
|
17
|
+
const resolvedComponentRegistry = (componentRegistry ?? {});
|
|
18
|
+
const renderBoundPageHost = (componentKey) => renderPageHost({
|
|
19
|
+
componentKey,
|
|
20
|
+
componentRegistry: resolvedComponentRegistry,
|
|
21
|
+
context,
|
|
22
|
+
module,
|
|
23
|
+
navigation,
|
|
24
|
+
navigationTarget,
|
|
25
|
+
pageHost,
|
|
26
|
+
parameters,
|
|
27
|
+
renderUnknownPageHost,
|
|
28
|
+
route,
|
|
29
|
+
});
|
|
30
|
+
if (renderNavigationTarget) {
|
|
31
|
+
return renderNavigationTarget({
|
|
32
|
+
context,
|
|
33
|
+
module,
|
|
34
|
+
navigation,
|
|
35
|
+
navigationTarget,
|
|
36
|
+
pageHost,
|
|
37
|
+
parameters,
|
|
38
|
+
renderBoundPageHost,
|
|
39
|
+
route,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const componentKey = resolveComponentKey?.({
|
|
43
|
+
context,
|
|
44
|
+
module,
|
|
45
|
+
navigation,
|
|
46
|
+
navigationTarget,
|
|
47
|
+
pageHost,
|
|
48
|
+
route,
|
|
49
|
+
}) ?? null;
|
|
50
|
+
return renderBoundPageHost(componentKey);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Projects a semantic navigation graph into a React Router `<Routes>` tree.
|
|
54
|
+
*
|
|
55
|
+
* Each `NavigationRouteDefinition.PathTemplate` is translated to a React Router
|
|
56
|
+
* path, while unmatched URLs are routed to the supplied unknown page-host
|
|
57
|
+
* renderer.
|
|
58
|
+
*/
|
|
59
|
+
export function ProjectedNavigationRoutes({ componentRegistry, context, module, navigation, renderUnknownPageHost, renderNavigationTarget, resolveComponentKey, }) {
|
|
60
|
+
const location = useLocation();
|
|
61
|
+
const routeInstanceKey = createNavigationRouteInstanceKey(navigation, location);
|
|
62
|
+
return (
|
|
63
|
+
// A semantic route instance owns route-scoped bindings and workspace state.
|
|
64
|
+
// The navigation history policy declares which URL parts identify that instance.
|
|
65
|
+
_jsxs(Routes, { children: [navigation.Routes.map((route) => (_jsx(Route, { element: _jsx(ProjectedNavigationRoute, { componentRegistry: componentRegistry, context: context, module: module, navigation: navigation, renderUnknownPageHost: renderUnknownPageHost, renderNavigationTarget: renderNavigationTarget, resolveComponentKey: resolveComponentKey, route: route }), path: toReactRouterPath(route.PathTemplate) }, route.Id))), _jsx(Route, { element: renderUnknownPageHost({
|
|
66
|
+
context,
|
|
67
|
+
module,
|
|
68
|
+
navigation,
|
|
69
|
+
navigationTarget: null,
|
|
70
|
+
pageHost: null,
|
|
71
|
+
parameters: {},
|
|
72
|
+
reason: 'unmatched-route',
|
|
73
|
+
route: null,
|
|
74
|
+
}), path: "*" })] }, routeInstanceKey));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=react-router-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-router-binding.js","sourceRoot":"","sources":["../src/react-router-binding.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RouteParameterValues } from './page-host-projection.js';
|
|
2
|
+
export declare function readRequiredRouteParameter(parameters: RouteParameterValues, name: string): string;
|
|
3
|
+
export declare function toReactRouterPath(pathTemplate: string): string;
|
|
4
|
+
//# sourceMappingURL=react-router-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-router-path.d.ts","sourceRoot":"","sources":["../src/react-router-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,oBAAoB,EAChC,IAAI,EAAE,MAAM,UAGb;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAMrD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function readRequiredRouteParameter(parameters, name) {
|
|
2
|
+
return parameters[name] ?? '';
|
|
3
|
+
}
|
|
4
|
+
export function toReactRouterPath(pathTemplate) {
|
|
5
|
+
const pathname = pathTemplate.split(/[?#]/)[0] ?? '/';
|
|
6
|
+
const routePath = pathname.length === 0 ? '/' : pathname;
|
|
7
|
+
return routePath.replace(/\{([^}]+)\}/g, (_token, parameterName) => {
|
|
8
|
+
return `:${parameterName}`;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=react-router-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-router-path.js","sourceRoot":"","sources":["../src/react-router-path.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CACxC,UAAgC,EAChC,IAAY;IAEZ,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;IACxD,OAAO,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,aAAqB,EAAE,EAAE;QACzE,OAAO,IAAI,aAAa,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|