@cratis/scene.components 3.4.0 → 3.6.0

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.
Files changed (188) hide show
  1. package/README.md +87 -3
  2. package/bindings/ArcBoundComponents.tsx +40 -0
  3. package/bindings/BoundConstructor.ts +5 -5
  4. package/bindings/bindingRegistry.ts +52 -4
  5. package/bindings/for_bindingRegistry/when_registering_query_identities.ts +81 -0
  6. package/bindings/for_requireArcProxy/NativeProxies.ts +28 -0
  7. package/bindings/for_requireArcProxy/when_mounting_bound_adapters.tsx +73 -0
  8. package/bindings/for_requireArcProxy/when_previewing_without_arc.tsx +37 -0
  9. package/bindings/for_requireArcProxy/when_validating_a_proxy.ts +44 -0
  10. package/bindings/requireArcProxy.ts +24 -0
  11. package/cratisComponents.ts +4 -1
  12. package/cratisComponentsPackage.ts +3 -1
  13. package/data/SceneDataTable.tsx +1 -1
  14. package/data/SceneObservableDataTable.tsx +1 -1
  15. package/data/SceneSingleResult.tsx +29 -0
  16. package/data/SingleResultRuntime.tsx +103 -0
  17. package/data/SingleResultStatus.tsx +13 -0
  18. package/data/for_SceneDataTable/when_forwarding_query_arguments.tsx +23 -2
  19. package/data/for_SceneSingleResult/when_executing_a_native_query.tsx +290 -0
  20. package/data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx +60 -0
  21. package/data/index.ts +1 -0
  22. package/dialogs/SceneCommandDialog.tsx +1 -1
  23. package/dialogs/SceneStepperCommandDialog.tsx +1 -1
  24. package/dist/cjs/bindings/ArcBoundComponents.js +55 -0
  25. package/dist/cjs/bindings/ArcBoundComponents.js.map +1 -0
  26. package/dist/cjs/bindings/bindingRegistry.js +52 -4
  27. package/dist/cjs/bindings/bindingRegistry.js.map +1 -1
  28. package/dist/cjs/bindings/requireArcProxy.js +25 -0
  29. package/dist/cjs/bindings/requireArcProxy.js.map +1 -0
  30. package/dist/cjs/cratisComponents.js +4 -0
  31. package/dist/cjs/cratisComponents.js.map +1 -1
  32. package/dist/cjs/cratisComponentsPackage.js +3 -1
  33. package/dist/cjs/cratisComponentsPackage.js.map +1 -1
  34. package/dist/cjs/data/SceneDataTable.js +1 -1
  35. package/dist/cjs/data/SceneDataTable.js.map +1 -1
  36. package/dist/cjs/data/SceneObservableDataTable.js +1 -1
  37. package/dist/cjs/data/SceneObservableDataTable.js.map +1 -1
  38. package/dist/cjs/data/SceneSingleResult.js +41 -0
  39. package/dist/cjs/data/SceneSingleResult.js.map +1 -0
  40. package/dist/cjs/data/SingleResultRuntime.js +137 -0
  41. package/dist/cjs/data/SingleResultRuntime.js.map +1 -0
  42. package/dist/cjs/data/SingleResultStatus.js +23 -0
  43. package/dist/cjs/data/SingleResultStatus.js.map +1 -0
  44. package/dist/cjs/dialogs/SceneCommandDialog.js +1 -1
  45. package/dist/cjs/dialogs/SceneCommandDialog.js.map +1 -1
  46. package/dist/cjs/dialogs/SceneStepperCommandDialog.js +1 -1
  47. package/dist/cjs/dialogs/SceneStepperCommandDialog.js.map +1 -1
  48. package/dist/cjs/forms/SceneQueryInputForm.js +141 -0
  49. package/dist/cjs/forms/SceneQueryInputForm.js.map +1 -0
  50. package/dist/cjs/forms/fields/SceneRadioButtonField.js +4 -1
  51. package/dist/cjs/forms/fields/SceneRadioButtonField.js.map +1 -1
  52. package/dist/cjs/forms/queryInputs.js +50 -0
  53. package/dist/cjs/forms/queryInputs.js.map +1 -0
  54. package/dist/cjs/index.js +8 -0
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/pages/SceneDataPage.js +1 -1
  57. package/dist/cjs/pages/SceneDataPage.js.map +1 -1
  58. package/dist/esm/bindings/ArcBoundComponents.d.ts +18 -0
  59. package/dist/esm/bindings/ArcBoundComponents.d.ts.map +1 -0
  60. package/dist/esm/bindings/ArcBoundComponents.js +49 -0
  61. package/dist/esm/bindings/ArcBoundComponents.js.map +1 -0
  62. package/dist/esm/bindings/bindingRegistry.d.ts +4 -0
  63. package/dist/esm/bindings/bindingRegistry.d.ts.map +1 -1
  64. package/dist/esm/bindings/bindingRegistry.js +49 -5
  65. package/dist/esm/bindings/bindingRegistry.js.map +1 -1
  66. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts +2 -0
  67. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts.map +1 -0
  68. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js +73 -0
  69. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js.map +1 -0
  70. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts +25 -0
  71. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts.map +1 -0
  72. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js +23 -0
  73. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js.map +1 -0
  74. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts +2 -0
  75. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts.map +1 -0
  76. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js +56 -0
  77. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js.map +1 -0
  78. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts +2 -0
  79. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts.map +1 -0
  80. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js +32 -0
  81. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js.map +1 -0
  82. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts +2 -0
  83. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts.map +1 -0
  84. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js +45 -0
  85. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js.map +1 -0
  86. package/dist/esm/bindings/requireArcProxy.d.ts +5 -0
  87. package/dist/esm/bindings/requireArcProxy.d.ts.map +1 -0
  88. package/dist/esm/bindings/requireArcProxy.js +23 -0
  89. package/dist/esm/bindings/requireArcProxy.js.map +1 -0
  90. package/dist/esm/cratisComponents.d.ts.map +1 -1
  91. package/dist/esm/cratisComponents.js +4 -0
  92. package/dist/esm/cratisComponents.js.map +1 -1
  93. package/dist/esm/cratisComponentsPackage.d.ts.map +1 -1
  94. package/dist/esm/cratisComponentsPackage.js +3 -1
  95. package/dist/esm/cratisComponentsPackage.js.map +1 -1
  96. package/dist/esm/data/SceneDataTable.js +1 -1
  97. package/dist/esm/data/SceneDataTable.js.map +1 -1
  98. package/dist/esm/data/SceneObservableDataTable.js +1 -1
  99. package/dist/esm/data/SceneObservableDataTable.js.map +1 -1
  100. package/dist/esm/data/SceneSingleResult.d.ts +3 -0
  101. package/dist/esm/data/SceneSingleResult.d.ts.map +1 -0
  102. package/dist/esm/data/SceneSingleResult.js +39 -0
  103. package/dist/esm/data/SceneSingleResult.js.map +1 -0
  104. package/dist/esm/data/SingleResultRuntime.d.ts +10 -0
  105. package/dist/esm/data/SingleResultRuntime.d.ts.map +1 -0
  106. package/dist/esm/data/SingleResultRuntime.js +133 -0
  107. package/dist/esm/data/SingleResultRuntime.js.map +1 -0
  108. package/dist/esm/data/SingleResultStatus.d.ts +7 -0
  109. package/dist/esm/data/SingleResultStatus.d.ts.map +1 -0
  110. package/dist/esm/data/SingleResultStatus.js +21 -0
  111. package/dist/esm/data/SingleResultStatus.js.map +1 -0
  112. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js +21 -4
  113. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js.map +1 -1
  114. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts +2 -0
  115. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts.map +1 -0
  116. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js +255 -0
  117. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js.map +1 -0
  118. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts +2 -0
  119. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts.map +1 -0
  120. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js +54 -0
  121. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js.map +1 -0
  122. package/dist/esm/data/index.d.ts +1 -0
  123. package/dist/esm/data/index.d.ts.map +1 -1
  124. package/dist/esm/data/index.js +1 -0
  125. package/dist/esm/data/index.js.map +1 -1
  126. package/dist/esm/dialogs/SceneCommandDialog.js +1 -1
  127. package/dist/esm/dialogs/SceneCommandDialog.js.map +1 -1
  128. package/dist/esm/dialogs/SceneStepperCommandDialog.js +1 -1
  129. package/dist/esm/dialogs/SceneStepperCommandDialog.js.map +1 -1
  130. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts +2 -0
  131. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts.map +1 -0
  132. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js +14 -0
  133. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js.map +1 -0
  134. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts +2 -0
  135. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts.map +1 -0
  136. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js +16 -0
  137. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js.map +1 -0
  138. package/dist/esm/forms/SceneQueryInputForm.d.ts +3 -0
  139. package/dist/esm/forms/SceneQueryInputForm.d.ts.map +1 -0
  140. package/dist/esm/forms/SceneQueryInputForm.js +139 -0
  141. package/dist/esm/forms/SceneQueryInputForm.js.map +1 -0
  142. package/dist/esm/forms/fields/SceneRadioButtonField.d.ts.map +1 -1
  143. package/dist/esm/forms/fields/SceneRadioButtonField.js +4 -1
  144. package/dist/esm/forms/fields/SceneRadioButtonField.js.map +1 -1
  145. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts +2 -0
  146. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts.map +1 -0
  147. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js +38 -0
  148. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js.map +1 -0
  149. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +4 -0
  150. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +1 -1
  151. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts +26 -0
  152. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts.map +1 -0
  153. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js +44 -0
  154. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js.map +1 -0
  155. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts +2 -0
  156. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts.map +1 -0
  157. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js +175 -0
  158. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js.map +1 -0
  159. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts +2 -0
  160. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts.map +1 -0
  161. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js +413 -0
  162. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js.map +1 -0
  163. package/dist/esm/forms/index.d.ts +2 -0
  164. package/dist/esm/forms/index.d.ts.map +1 -1
  165. package/dist/esm/forms/index.js +1 -0
  166. package/dist/esm/forms/index.js.map +1 -1
  167. package/dist/esm/forms/queryInputs.d.ts +10 -0
  168. package/dist/esm/forms/queryInputs.d.ts.map +1 -0
  169. package/dist/esm/forms/queryInputs.js +47 -0
  170. package/dist/esm/forms/queryInputs.js.map +1 -0
  171. package/dist/esm/index.js +3 -1
  172. package/dist/esm/index.js.map +1 -1
  173. package/dist/esm/pages/SceneDataPage.js +1 -1
  174. package/dist/esm/pages/SceneDataPage.js.map +1 -1
  175. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  176. package/for_cratisComponentsPackage/when_describing_query_input_form.ts +17 -0
  177. package/for_cratisComponentsPackage/when_describing_single_result.ts +20 -0
  178. package/forms/SceneQueryInputForm.tsx +79 -0
  179. package/forms/fields/SceneRadioButtonField.tsx +4 -1
  180. package/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx +45 -0
  181. package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +6 -0
  182. package/forms/for_SceneQueryInputForm/ProjectLookup.ts +54 -0
  183. package/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.tsx +188 -0
  184. package/forms/for_SceneQueryInputForm/when_submitting_native_queries.tsx +423 -0
  185. package/forms/index.ts +2 -0
  186. package/forms/queryInputs.ts +50 -0
  187. package/package.json +23 -7
  188. package/pages/SceneDataPage.tsx +1 -1
@@ -0,0 +1,139 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useSyncExternalStore, useId, useState, lazy } from 'react';
3
+ import { BindingKind } from '../bindings/BindingKind.js';
4
+ import { subscribeQueryBindings, resolveExactQuery } from '../bindings/bindingRegistry.js';
5
+ import '../bindings/resolveElementBinding.js';
6
+ import { MissingBinding } from '../bindings/MissingBinding.js';
7
+ import { ArcRuntimeBoundary } from '../bindings/ArcRuntimeBoundary.js';
8
+ import { stringProperty } from '../properties.js';
9
+ import { SingleResultStatus } from '../data/SingleResultStatus.js';
10
+ import { queryInputs, queryInputError } from './queryInputs.js';
11
+
12
+ const SingleResultRuntime = /*#__PURE__*/ lazy(()=>import('../data/SingleResultRuntime.js'));
13
+ /** Opt-in, form-local string drafts around the existing optional-single execution owner. */ function SceneQueryInputForm({ element }) {
14
+ const name = stringProperty(element.properties, 'query');
15
+ const target = useSyncExternalStore(subscribeQueryBindings, ()=>name ? resolveExactQuery(name) : undefined);
16
+ if (target === 'ambiguous') return /*#__PURE__*/ jsxs("div", {
17
+ role: "alert",
18
+ children: [
19
+ "Ambiguous query binding '",
20
+ name,
21
+ "' on ",
22
+ element.componentName
23
+ ]
24
+ });
25
+ if (!target) return /*#__PURE__*/ jsx(MissingBinding, {
26
+ element: element,
27
+ kind: BindingKind.Query,
28
+ name: name
29
+ });
30
+ const inputs = queryInputs(element.properties);
31
+ const resultField = stringProperty(element.properties, 'resultField');
32
+ if (!inputs || !resultField) return /*#__PURE__*/ jsx("div", {
33
+ role: "alert",
34
+ children: "Invalid query input form configuration"
35
+ });
36
+ if (!element.isEnabled) return /*#__PURE__*/ jsx(SingleResultStatus, {
37
+ state: "idle"
38
+ });
39
+ // A different form declaration starts a new session; ordinary host rerenders retain drafts.
40
+ return /*#__PURE__*/ jsx(QueryInputForm, {
41
+ query: target,
42
+ inputs: inputs,
43
+ resultField: resultField,
44
+ label: stringProperty(element.properties, 'label') ?? 'Query input',
45
+ submitLabel: stringProperty(element.properties, 'submitLabel') ?? 'Search'
46
+ }, JSON.stringify([
47
+ name,
48
+ inputs,
49
+ resultField
50
+ ]));
51
+ }
52
+ function QueryInputForm({ query, inputs, resultField, label, submitLabel }) {
53
+ const id = useId();
54
+ const [drafts, setDrafts] = useState(()=>Object.fromEntries(inputs.map((input)=>[
55
+ input.parameter,
56
+ ''
57
+ ])));
58
+ const [errors, setErrors] = useState({});
59
+ const [committed, setCommitted] = useState();
60
+ return /*#__PURE__*/ jsxs("form", {
61
+ "aria-label": label,
62
+ noValidate: true,
63
+ onSubmit: (event)=>{
64
+ event.preventDefault();
65
+ const validation = Object.fromEntries(inputs.map((input)=>[
66
+ input.parameter,
67
+ queryInputError(input, drafts[input.parameter])
68
+ ]));
69
+ setErrors(validation);
70
+ if (Object.values(validation).some(Boolean)) {
71
+ setCommitted(undefined);
72
+ return;
73
+ }
74
+ // New identity even for unchanged values: repeat submit is an explicit retry. No trimming,
75
+ // coercion, generated identifier, property-path evaluation or query while typing.
76
+ setCommitted(Object.freeze(Object.fromEntries(inputs.map((input)=>[
77
+ input.parameter,
78
+ drafts[input.parameter]
79
+ ]))));
80
+ },
81
+ children: [
82
+ inputs.map((input, index)=>{
83
+ const controlId = `${id}-${index}`;
84
+ const error = Object.hasOwn(errors, input.parameter) ? errors[input.parameter] : undefined;
85
+ return /*#__PURE__*/ jsxs("div", {
86
+ children: [
87
+ /*#__PURE__*/ jsx("label", {
88
+ htmlFor: controlId,
89
+ children: input.label
90
+ }),
91
+ /*#__PURE__*/ jsx("input", {
92
+ id: controlId,
93
+ name: input.parameter,
94
+ type: "text",
95
+ required: input.required,
96
+ value: drafts[input.parameter],
97
+ "aria-invalid": !!error,
98
+ "aria-describedby": error ? `${controlId}-error` : undefined,
99
+ onChange: (event)=>{
100
+ setDrafts({
101
+ ...drafts,
102
+ [input.parameter]: event.currentTarget.value
103
+ });
104
+ setErrors({
105
+ ...errors,
106
+ [input.parameter]: undefined
107
+ });
108
+ // Unmount synchronously on edit: runtime cleanup aborts and masks late replies.
109
+ setCommitted(undefined);
110
+ }
111
+ }),
112
+ error && /*#__PURE__*/ jsx("div", {
113
+ id: `${controlId}-error`,
114
+ role: "alert",
115
+ children: error
116
+ })
117
+ ]
118
+ }, input.parameter);
119
+ }),
120
+ /*#__PURE__*/ jsx("button", {
121
+ type: "submit",
122
+ children: submitLabel
123
+ }),
124
+ committed ? /*#__PURE__*/ jsx(ArcRuntimeBoundary, {
125
+ children: /*#__PURE__*/ jsx(SingleResultRuntime, {
126
+ query: query,
127
+ queryArguments: committed,
128
+ resultField: resultField,
129
+ stringInputs: true
130
+ })
131
+ }) : /*#__PURE__*/ jsx(SingleResultStatus, {
132
+ state: "idle"
133
+ })
134
+ ]
135
+ });
136
+ }
137
+
138
+ export { SceneQueryInputForm };
139
+ //# sourceMappingURL=SceneQueryInputForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneQueryInputForm.js","sources":["../../../forms/SceneQueryInputForm.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { lazy, useId, useState, useSyncExternalStore } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { ArcRuntimeBoundary, BindingKind, BoundConstructor, MissingBinding, resolveExactQuery, subscribeQueryBindings } from '../bindings';\nimport { stringProperty } from '../properties';\nimport { SingleResultStatus } from '../data/SingleResultStatus';\nimport { QueryInput, queryInputError, queryInputs } from './queryInputs';\n\nconst SingleResultRuntime = lazy(() => import('../data/SingleResultRuntime'));\n\n/** Opt-in, form-local string drafts around the existing optional-single execution owner. */\nexport function SceneQueryInputForm({ element }: RegisteredComponentProps) {\n const name = stringProperty(element.properties, 'query');\n const target = useSyncExternalStore(subscribeQueryBindings, () => name ? resolveExactQuery(name) : undefined);\n if (target === 'ambiguous') return <div role='alert'>Ambiguous query binding '{name}' on {element.componentName}</div>;\n if (!target) return <MissingBinding element={element} kind={BindingKind.Query} name={name} />;\n\n const inputs = queryInputs(element.properties);\n const resultField = stringProperty(element.properties, 'resultField');\n if (!inputs || !resultField) return <div role='alert'>Invalid query input form configuration</div>;\n if (!element.isEnabled) return <SingleResultStatus state='idle' />;\n\n // A different form declaration starts a new session; ordinary host rerenders retain drafts.\n return <QueryInputForm key={JSON.stringify([name, inputs, resultField])}\n query={target} inputs={inputs} resultField={resultField}\n label={stringProperty(element.properties, 'label') ?? 'Query input'}\n submitLabel={stringProperty(element.properties, 'submitLabel') ?? 'Search'} />;\n}\n\ninterface Props {\n query: BoundConstructor;\n inputs: QueryInput[];\n resultField: string;\n label: string;\n submitLabel: string;\n}\n\nfunction QueryInputForm({ query, inputs, resultField, label, submitLabel }: Props) {\n const id = useId();\n const [drafts, setDrafts] = useState<Record<string, string>>(() => Object.fromEntries(inputs.map(input => [input.parameter, ''])));\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\n const [committed, setCommitted] = useState<Record<string, string>>();\n\n return <form aria-label={label} noValidate onSubmit={event => {\n event.preventDefault();\n const validation = Object.fromEntries(inputs.map(input => [input.parameter, queryInputError(input, drafts[input.parameter])]));\n setErrors(validation);\n if (Object.values(validation).some(Boolean)) {\n setCommitted(undefined);\n return;\n }\n // New identity even for unchanged values: repeat submit is an explicit retry. No trimming,\n // coercion, generated identifier, property-path evaluation or query while typing.\n setCommitted(Object.freeze(Object.fromEntries(inputs.map(input => [input.parameter, drafts[input.parameter]]))));\n }}>\n {inputs.map((input, index) => {\n const controlId = `${id}-${index}`;\n const error = Object.hasOwn(errors, input.parameter) ? errors[input.parameter] : undefined;\n return <div key={input.parameter}>\n <label htmlFor={controlId}>{input.label}</label>\n <input id={controlId} name={input.parameter} type='text' required={input.required}\n value={drafts[input.parameter]} aria-invalid={!!error} aria-describedby={error ? `${controlId}-error` : undefined}\n onChange={event => {\n setDrafts({ ...drafts, [input.parameter]: event.currentTarget.value });\n setErrors({ ...errors, [input.parameter]: undefined });\n // Unmount synchronously on edit: runtime cleanup aborts and masks late replies.\n setCommitted(undefined);\n }} />\n {error && <div id={`${controlId}-error`} role='alert'>{error}</div>}\n </div>;\n })}\n <button type='submit'>{submitLabel}</button>\n {committed ? <ArcRuntimeBoundary>\n <SingleResultRuntime query={query} queryArguments={committed} resultField={resultField} stringInputs />\n </ArcRuntimeBoundary> : <SingleResultStatus state='idle' />}\n </form>;\n}\n"],"names":["SingleResultRuntime","lazy","SceneQueryInputForm","element","name","stringProperty","properties","target","useSyncExternalStore","subscribeQueryBindings","resolveExactQuery","undefined","_jsxs","div","role","componentName","_jsx","MissingBinding","kind","BindingKind","Query","inputs","queryInputs","resultField","isEnabled","SingleResultStatus","state","QueryInputForm","query","label","submitLabel","JSON","stringify","id","useId","drafts","setDrafts","useState","Object","fromEntries","map","input","parameter","errors","setErrors","committed","setCommitted","form","aria-label","noValidate","onSubmit","event","preventDefault","validation","queryInputError","values","some","Boolean","freeze","index","controlId","error","hasOwn","htmlFor","type","required","value","aria-invalid","aria-describedby","onChange","currentTarget","button","ArcRuntimeBoundary","queryArguments","stringInputs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SceneRadioButtonField.d.ts","sourceRoot":"","sources":["../../../../forms/fields/SceneRadioButtonField.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAiB/D,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,wBAAwB,+BAe1E"}
1
+ {"version":3,"file":"SceneRadioButtonField.d.ts","sourceRoot":"","sources":["../../../../forms/fields/SceneRadioButtonField.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAiB/D,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,wBAAwB,+BAkB1E"}
@@ -17,11 +17,14 @@ const RadioButtonField = /*#__PURE__*/ lazy(async ()=>({
17
17
  * `buttonValue` is read as a string first and a number second, since a choice is usually a string but a
18
18
  * numeric code is common enough that forcing it through as `'1'` would bind the wrong value.
19
19
  */ function SceneRadioButtonField({ element }) {
20
+ // Use the same reader as CommandFormField's binding gate; that gate owns missing-property feedback.
21
+ const name = stringProperty(element.properties, 'property');
20
22
  const buttonValue = stringProperty(element.properties, 'buttonValue') ?? numberProperty(element.properties, 'buttonValue') ?? '';
21
23
  return /*#__PURE__*/ jsx(CommandFormField, {
22
24
  element: element,
23
- children: (binding)=>/*#__PURE__*/ jsx(RadioButtonField, {
25
+ children: (binding)=>name !== undefined && /*#__PURE__*/ jsx(RadioButtonField, {
24
26
  ...binding,
27
+ name: name,
25
28
  buttonValue: buttonValue,
26
29
  label: stringProperty(element.properties, 'label'),
27
30
  className: stringProperty(element.properties, 'className')
@@ -1 +1 @@
1
- {"version":3,"file":"SceneRadioButtonField.js","sources":["../../../../forms/fields/SceneRadioButtonField.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { lazy } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { numberProperty, stringProperty } from '../../properties';\nimport { CommandFormField } from './CommandFormField';\n\nconst RadioButtonField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).RadioButtonField }));\n\n/**\n * The `Cratis.Components:radioButtonField` component - `RadioButtonField` from\n * `@cratis/components/CommandForm`.\n *\n * One button of a mutually exclusive set, for a screen that needs the choices placed individually rather\n * than as a block. `buttonValue` is the value this particular button writes to the bound property, and\n * the whole set is tied together by every button naming the same `property`.\n *\n * `buttonValue` is read as a string first and a number second, since a choice is usually a string but a\n * numeric code is common enough that forcing it through as `'1'` would bind the wrong value.\n */\nexport function SceneRadioButtonField({ element }: RegisteredComponentProps) {\n const buttonValue = stringProperty(element.properties, 'buttonValue') ?? numberProperty(element.properties, 'buttonValue') ?? '';\n\n return (\n <CommandFormField element={element}>\n {binding => (\n <RadioButtonField\n {...binding}\n buttonValue={buttonValue}\n label={stringProperty(element.properties, 'label')}\n className={stringProperty(element.properties, 'className')}\n />\n )}\n </CommandFormField>\n );\n}\n"],"names":["RadioButtonField","lazy","default","SceneRadioButtonField","element","buttonValue","stringProperty","properties","numberProperty","_jsx","CommandFormField","binding","label","className"],"mappings":";;;;;AAQA,MAAMA,gBAAAA,iBAAmBC,IAAAA,CAAK,WAAa;AAAEC,QAAAA,OAAAA,EAAS,CAAC,MAAM,OAAO,gCAAA,CAAgC,EAAGF;KAAiB,CAAA,CAAA;AAExH;;;;;;;;;;AAUC,IACM,SAASG,qBAAAA,CAAsB,EAAEC,OAAO,EAA4B,EAAA;IACvE,MAAMC,WAAAA,GAAcC,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,kBAAkBC,cAAAA,CAAeJ,OAAAA,CAAQG,UAAU,EAAE,aAAA,CAAA,IAAkB,EAAA;AAE9H,IAAA,qBACIE,GAAA,CAACC,gBAAAA,EAAAA;QAAiBN,OAAAA,EAASA,OAAAA;AACtBO,QAAAA,QAAAA,EAAAA,CAAAA,wBACGF,GAAA,CAACT,gBAAAA,EAAAA;AACI,gBAAA,GAAGW,OAAO;gBACXN,WAAAA,EAAaA,WAAAA;gBACbO,KAAAA,EAAON,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,OAAA,CAAA;gBAC1CM,SAAAA,EAAWP,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,WAAA;;;AAKlE;;"}
1
+ {"version":3,"file":"SceneRadioButtonField.js","sources":["../../../../forms/fields/SceneRadioButtonField.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { lazy } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { numberProperty, stringProperty } from '../../properties';\nimport { CommandFormField } from './CommandFormField';\n\nconst RadioButtonField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).RadioButtonField }));\n\n/**\n * The `Cratis.Components:radioButtonField` component - `RadioButtonField` from\n * `@cratis/components/CommandForm`.\n *\n * One button of a mutually exclusive set, for a screen that needs the choices placed individually rather\n * than as a block. `buttonValue` is the value this particular button writes to the bound property, and\n * the whole set is tied together by every button naming the same `property`.\n *\n * `buttonValue` is read as a string first and a number second, since a choice is usually a string but a\n * numeric code is common enough that forcing it through as `'1'` would bind the wrong value.\n */\nexport function SceneRadioButtonField({ element }: RegisteredComponentProps) {\n // Use the same reader as CommandFormField's binding gate; that gate owns missing-property feedback.\n const name = stringProperty(element.properties, 'property');\n const buttonValue = stringProperty(element.properties, 'buttonValue') ?? numberProperty(element.properties, 'buttonValue') ?? '';\n\n return (\n <CommandFormField element={element}>\n {binding => name !== undefined && (\n <RadioButtonField\n {...binding}\n name={name}\n buttonValue={buttonValue}\n label={stringProperty(element.properties, 'label')}\n className={stringProperty(element.properties, 'className')}\n />\n )}\n </CommandFormField>\n );\n}\n"],"names":["RadioButtonField","lazy","default","SceneRadioButtonField","element","name","stringProperty","properties","buttonValue","numberProperty","_jsx","CommandFormField","binding","undefined","label","className"],"mappings":";;;;;AAQA,MAAMA,gBAAAA,iBAAmBC,IAAAA,CAAK,WAAa;AAAEC,QAAAA,OAAAA,EAAS,CAAC,MAAM,OAAO,gCAAA,CAAgC,EAAGF;KAAiB,CAAA,CAAA;AAExH;;;;;;;;;;AAUC,IACM,SAASG,qBAAAA,CAAsB,EAAEC,OAAO,EAA4B,EAAA;;AAEvE,IAAA,MAAMC,IAAAA,GAAOC,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,UAAA,CAAA;IAChD,MAAMC,WAAAA,GAAcF,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,kBAAkBE,cAAAA,CAAeL,OAAAA,CAAQG,UAAU,EAAE,aAAA,CAAA,IAAkB,EAAA;AAE9H,IAAA,qBACIG,GAAA,CAACC,gBAAAA,EAAAA;QAAiBP,OAAAA,EAASA,OAAAA;kBACtBQ,CAAAA,OAAAA,GAAWP,IAAAA,KAASQ,SAAAA,kBACjBH,GAAA,CAACV,gBAAAA,EAAAA;AACI,gBAAA,GAAGY,OAAO;gBACXP,IAAAA,EAAMA,IAAAA;gBACNG,WAAAA,EAAaA,WAAAA;gBACbM,KAAAA,EAAOR,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,OAAA,CAAA;gBAC1CQ,SAAAA,EAAWT,cAAAA,CAAeF,OAAAA,CAAQG,UAAU,EAAE,WAAA;;;AAKlE;;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=when_mapping_the_group_name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_mapping_the_group_name.d.ts","sourceRoot":"","sources":["../../../../../forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { act, cleanup, render, screen } from '@testing-library/react';
3
+ import { expect, vi } from 'vitest';
4
+ import { externalComponent } from '../../../given';
5
+ describe('when mapping the radio group name', () => {
6
+ const received = vi.fn();
7
+ let SceneRadioButtonField;
8
+ beforeEach(async () => {
9
+ vi.resetModules();
10
+ received.mockClear();
11
+ vi.doMock('@cratis/components/CommandForm', () => ({
12
+ RadioButtonField: (props) => { received(props); return _jsx("input", { type: 'radio', name: props.name }); },
13
+ }));
14
+ ({ SceneRadioButtonField } = await import('../SceneRadioButtonField'));
15
+ });
16
+ afterEach(() => {
17
+ cleanup();
18
+ vi.doUnmock('@cratis/components/CommandForm');
19
+ vi.resetModules();
20
+ });
21
+ it('should group options by the explicit property, regardless of titles or labels', async () => {
22
+ await act(async () => {
23
+ render(_jsx(_Fragment, { children: ['First title', 'Second title'].map((title, index) => _jsx(SceneRadioButtonField, { element: externalComponent('Cratis.Components:radioButtonField', { property: 'choice', title, label: 'Display label', buttonValue: index }), slots: {} }, title)) }));
24
+ });
25
+ expect(screen.getAllByRole('radio').map(radio => radio.getAttribute('name'))).toEqual(['choice', 'choice']);
26
+ expect(received.mock.calls.map(([props]) => props.value({ choice: 2 }))).toEqual([2, 2]);
27
+ });
28
+ for (const property of [undefined, 42, null, {}, []]) {
29
+ it(`should visibly reject malformed property ${JSON.stringify(property)} instead of using the title`, async () => {
30
+ await act(async () => {
31
+ render(_jsx(SceneRadioButtonField, { element: externalComponent('Cratis.Components:radioButtonField', { property, title: 'Not a binding' }), slots: {} }));
32
+ });
33
+ expect(screen.getByText("Missing 'property' on Cratis.Components:radioButtonField")).toBeTruthy();
34
+ expect(received).not.toHaveBeenCalled();
35
+ });
36
+ }
37
+ });
38
+ //# sourceMappingURL=when_mapping_the_group_name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_mapping_the_group_name.js","sourceRoot":"","sources":["../../../../../forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import { externalComponent } from '../../../given';
2
2
  import { resolveFieldBinding } from '../resolveFieldBinding';
3
3
  describe('when resolving a field binding', () => {
4
+ it('should preserve manually constructed field bindings without a native group name', () => {
5
+ const binding = { value: instance => instance.customerName, title: 'Customer' };
6
+ binding.value({ customerName: 'Acme' }).should.equal('Acme');
7
+ });
4
8
  describe('and the element names a property with a title and description', () => {
5
9
  const binding = resolveFieldBinding(externalComponent('Cratis.Components:inputTextField', {
6
10
  property: 'customerName',
@@ -1 +1 @@
1
- {"version":3,"file":"when_resolving_a_field_binding.js","sourceRoot":"","sources":["../../../../../forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC5C,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,mBAAmB,CAC/B,iBAAiB,CAAC,kCAAkC,EAAE;YAClD,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,wBAAwB;SACxC,CAAC,CACJ,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnI,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAClF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAY,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAE,CAAC;QAE1H,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3G,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAElH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"when_resolving_a_field_binding.js","sourceRoot":"","sources":["../../../../../forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACvF,MAAM,OAAO,GAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,mBAAmB,CAC/B,iBAAiB,CAAC,kCAAkC,EAAE;YAClD,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,wBAAwB;SACxC,CAAC,CACJ,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnI,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAClF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAY,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAE,CAAC;QAE1H,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3G,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAElH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { QueryFor, QueryResultWithState } from '@cratis/arc/queries';
2
+ import { PerformQuery, SetSorting, QueryWhen } from '@cratis/arc.react/queries';
3
+ import { ParameterDescriptor } from '@cratis/arc/reflection';
4
+ import { Guid } from '@cratis/fundamentals';
5
+ export interface ProjectByIdParameters {
6
+ projectId: Guid;
7
+ }
8
+ export declare class ProjectById extends QueryFor<ProjectSummary, ProjectByIdParameters> {
9
+ readonly route: string;
10
+ readonly queryName: string;
11
+ readonly treatWarningsAsErrors: boolean;
12
+ readonly roles: string[];
13
+ readonly defaultValue: ProjectSummary;
14
+ constructor();
15
+ get requiredRequestParameters(): string[];
16
+ readonly parameterDescriptors: ParameterDescriptor[];
17
+ projectId: Guid;
18
+ static use(args?: ProjectByIdParameters): [QueryResultWithState<ProjectSummary>, PerformQuery<ProjectByIdParameters>, SetSorting];
19
+ static useSuspense(args?: ProjectByIdParameters): [QueryResultWithState<ProjectSummary>, PerformQuery<ProjectByIdParameters>, SetSorting];
20
+ static when(condition: boolean): QueryWhen<ProjectById, ProjectSummary, ProjectByIdParameters>;
21
+ }
22
+ export declare class ProjectSummary {
23
+ name: string;
24
+ projectId: Guid;
25
+ }
26
+ //# sourceMappingURL=ProjectLookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectLookup.d.ts","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/ProjectLookup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAA8B,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAS,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,qBAAa,WAAY,SAAQ,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAA6D;IACnF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAsF;IAChH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAS;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAwB;IAE7D,cAEC;IAED,IAAI,yBAAyB,IAAI,MAAM,EAAE,CAExC;IAED,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAElD;IAEF,SAAS,EAAG,IAAI,CAAC;IAEjB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,EAAE,UAAU,CAAC,CAEhI;IAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,EAAE,UAAU,CAAC,CAExI;IAED,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAE7F;CACJ;AAED,qBAAa,cAAc;IAEvB,IAAI,EAAG,MAAM,CAAC;IAEd,SAAS,EAAG,IAAI,CAAC;CACpB"}
@@ -0,0 +1,44 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { QueryFor } from '@cratis/arc/queries';
3
+ import { useQuery, useSuspenseQuery, QueryWhen } from '@cratis/arc.react/queries';
4
+ import { ParameterDescriptor } from '@cratis/arc/reflection';
5
+ import { Guid, field } from '@cratis/fundamentals';
6
+ export class ProjectById extends QueryFor {
7
+ route = '/api/projects/registration/project-lookup/project-by-id';
8
+ queryName = 'CanonicalProjects.Projects.Registration.ProjectLookup.ProjectSummary.ProjectById';
9
+ treatWarningsAsErrors = false;
10
+ roles = [];
11
+ defaultValue = {};
12
+ constructor() {
13
+ super(ProjectSummary, false);
14
+ }
15
+ get requiredRequestParameters() {
16
+ return ['projectId'];
17
+ }
18
+ parameterDescriptors = [
19
+ new ParameterDescriptor('projectId', Guid, false),
20
+ ];
21
+ projectId;
22
+ static use(args) {
23
+ return useQuery(ProjectById, args);
24
+ }
25
+ static useSuspense(args) {
26
+ return useSuspenseQuery(ProjectById, args);
27
+ }
28
+ static when(condition) {
29
+ return new QueryWhen(ProjectById, condition);
30
+ }
31
+ }
32
+ export class ProjectSummary {
33
+ name;
34
+ projectId;
35
+ }
36
+ __decorate([
37
+ field(String),
38
+ __metadata("design:type", String)
39
+ ], ProjectSummary.prototype, "name", void 0);
40
+ __decorate([
41
+ field(Guid),
42
+ __metadata("design:type", Guid)
43
+ ], ProjectSummary.prototype, "projectId", void 0);
44
+ //# sourceMappingURL=ProjectLookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectLookup.js","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/ProjectLookup.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,QAAQ,EAAwB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAA4B,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAMnD,MAAM,OAAO,WAAY,SAAQ,QAA+C;IACnE,KAAK,GAAW,yDAAyD,CAAC;IAC1E,SAAS,GAAW,kFAAkF,CAAC;IACvG,qBAAqB,GAAY,KAAK,CAAC;IACvC,KAAK,GAAa,EAAE,CAAC;IACrB,YAAY,GAAmB,EAAoB,CAAC;IAE7D;QACI,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,yBAAyB;QACzB,OAAO,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAEQ,oBAAoB,GAA0B;QACnD,IAAI,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC;KACpD,CAAC;IAEF,SAAS,CAAQ;IAEjB,MAAM,CAAC,GAAG,CAAC,IAA4B;QACnC,OAAO,QAAQ,CAAqD,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAA4B;QAC3C,OAAO,gBAAgB,CAAqD,WAAW,EAAE,IAAI,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,SAAkB;QAC1B,OAAO,IAAI,SAAS,CAAqD,WAAW,EAAE,SAAS,CAAC,CAAC;IACrG,CAAC;CACJ;AAED,MAAM,OAAO,cAAc;IAEvB,IAAI,CAAU;IAEd,SAAS,CAAQ;CACpB;AAHG;IADC,KAAK,CAAC,MAAM,CAAC;;4CACA;AAEd;IADC,KAAK,CAAC,IAAI,CAAC;8BACA,IAAI;iDAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=when_submitting_generated_guid_parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_submitting_generated_guid_parameters.d.ts","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { act, cleanup, fireEvent, render, screen } from '@testing-library/react';
3
+ import { expect, vi } from 'vitest';
4
+ import { ArcContext } from '@cratis/arc.react';
5
+ import { QueryFor } from '@cratis/arc/queries';
6
+ import { ParameterDescriptor } from '@cratis/arc/reflection';
7
+ import { Guid } from '@cratis/fundamentals';
8
+ import { SceneElementView } from '@cratis/scene.react';
9
+ import { clearBindings, registerQuery, registerQueryIdentity, unregisterQueryIdentity } from '../../bindings';
10
+ import { cratisComponents } from '../../cratisComponents';
11
+ import { externalComponent } from '../../given';
12
+ import { ProjectById } from './ProjectLookup';
13
+ const projectId = 'AB123456-7890-4ABC-8DEF-1234567890AB';
14
+ const input = { parameter: 'projectId', type: 'string', label: 'Project identifier' };
15
+ const identity = 'Projects/Registration/ProjectLookup/ProjectLookup.ts:ProjectById';
16
+ const context = { microservice: 'projects', origin: 'https://example.test', apiBasePath: '' };
17
+ function response(data) {
18
+ return { ok: true, status: 200, json: async () => ({
19
+ data, isSuccess: true, isAuthorized: true, isValid: true, hasExceptions: false,
20
+ validationResults: [], exceptionMessages: [], exceptionStackTrace: '',
21
+ paging: { page: 0, size: 0, totalItems: 0, totalPages: 0 },
22
+ }) };
23
+ }
24
+ function view(properties = {}, component = 'queryInputForm') {
25
+ return _jsx(ArcContext.Provider, { value: context, children: _jsx(SceneElementView, { element: externalComponent(`Cratis.Components:${component}`, {
26
+ query: 'ProjectById', inputs: [input], resultField: 'name', ...properties,
27
+ }), registry: cratisComponents, resolveBinding: () => undefined }) });
28
+ }
29
+ async function submit(value = projectId) {
30
+ fireEvent.change(screen.getByRole('textbox', { name: input.label }), { target: { value } });
31
+ await act(async () => { fireEvent.submit(screen.getByRole('form')); });
32
+ }
33
+ describe('when submitting the canonical generated Guid proxy shape through SceneElementView', () => {
34
+ const fetch = vi.fn();
35
+ beforeEach(() => {
36
+ clearBindings();
37
+ registerQueryIdentity('ProjectById', identity, ProjectById);
38
+ fetch.mockReset();
39
+ fetch.mockResolvedValue(response({ name: 'Canonical project', projectId }));
40
+ vi.stubGlobal('fetch', fetch);
41
+ });
42
+ afterEach(() => { cleanup(); clearBindings(); vi.unstubAllGlobals(); });
43
+ it('keeps the generated Guid contract and inherited native perform, sending exact entered text', async () => {
44
+ const proxy = new ProjectById();
45
+ expect(proxy.perform).toBe(QueryFor.prototype.perform);
46
+ expect(proxy.parameterDescriptors).toEqual([new ParameterDescriptor('projectId', Guid, false)]);
47
+ expect(proxy.requiredRequestParameters).toEqual(['projectId']);
48
+ expect(proxy.defaultValue).toEqual({});
49
+ expect(proxy.queryName).toBe('CanonicalProjects.Projects.Registration.ProjectLookup.ProjectSummary.ProjectById');
50
+ render(view());
51
+ expect(fetch).not.toHaveBeenCalled();
52
+ await submit();
53
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
54
+ expect(fetch).toHaveBeenCalledTimes(1);
55
+ const [url, init] = fetch.mock.calls[0];
56
+ expect(String(url)).toBe(`https://example.test/api/projects/registration/project-lookup/project-by-id?projectId=${projectId}`);
57
+ expect(init?.method).toBe('GET');
58
+ expect(new URL(String(url)).searchParams.get('projectId')).toBe(projectId);
59
+ expect(screen.getByRole('textbox')).toHaveProperty('value', projectId);
60
+ });
61
+ for (const data of [null, undefined]) {
62
+ it(`preserves native absence (${String(data)}) despite the generated empty-object default`, async () => {
63
+ fetch.mockResolvedValue(response(data));
64
+ render(view());
65
+ await submit();
66
+ expect(await screen.findByText('Not found')).not.toBeNull();
67
+ expect(fetch).toHaveBeenCalledTimes(1);
68
+ });
69
+ }
70
+ it('does not claim Guid descriptors enforce format: native perform sends an unformatted string unchanged', async () => {
71
+ render(view());
72
+ await submit(' not-a-guid ');
73
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
74
+ expect(new URL(String(fetch.mock.calls[0][0])).searchParams.get('projectId')).toBe(' not-a-guid ');
75
+ });
76
+ it('lets an explicitly supplied pattern reject invalid Guid text before HTTP and permit correction', async () => {
77
+ render(view({ inputs: [{ ...input, pattern: '[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}' }] }));
78
+ await submit('not-a-guid');
79
+ expect(screen.getByRole('alert').textContent).toBe('Project identifier has an invalid format');
80
+ expect(fetch).not.toHaveBeenCalled();
81
+ expect(screen.getByRole('textbox')).toHaveProperty('value', 'not-a-guid');
82
+ await submit();
83
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
84
+ expect(new URL(String(fetch.mock.calls[0][0])).searchParams.get('projectId')).toBe(projectId);
85
+ });
86
+ it('retains native required-argument validation when the form permits an empty string', async () => {
87
+ render(view({ inputs: [{ ...input, required: false }] }));
88
+ await submit('');
89
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
90
+ expect(fetch).not.toHaveBeenCalled();
91
+ });
92
+ for (const descriptors of [
93
+ [new ParameterDescriptor('projectId', Number, false)],
94
+ [new ParameterDescriptor('projectId', Boolean, false)],
95
+ [new ParameterDescriptor('projectId', Object, false)],
96
+ [new ParameterDescriptor('projectId', Guid, true)],
97
+ [new ParameterDescriptor('projectId', String, true)],
98
+ [new ParameterDescriptor('ProjectID', Guid, false)],
99
+ [],
100
+ [new ParameterDescriptor('projectId', Guid, false), new ParameterDescriptor('projectId', String, false)],
101
+ ]) {
102
+ it(`rejects unsupported descriptor mapping before HTTP: ${descriptors.map(d => `${d.name}:${d.type.name}:${d.isEnumerable}`).join(',')}`, async () => {
103
+ class Incompatible extends ProjectById {
104
+ parameterDescriptors = descriptors;
105
+ }
106
+ registerQueryIdentity('ProjectById', identity, Incompatible);
107
+ render(view());
108
+ await submit();
109
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
110
+ expect(screen.getByRole('textbox')).toHaveProperty('value', projectId);
111
+ expect(fetch).not.toHaveBeenCalled();
112
+ });
113
+ }
114
+ it('rejects an unknown extra parameter even when every required native argument is present', async () => {
115
+ render(view({ inputs: [input, { parameter: 'unknown', type: 'string', label: 'Unknown', required: false }] }));
116
+ await submit();
117
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
118
+ expect(fetch).not.toHaveBeenCalled();
119
+ });
120
+ it('demonstrates why native descriptor mapping alone cannot protect the form', async () => {
121
+ class Numeric extends ProjectById {
122
+ parameterDescriptors = [new ParameterDescriptor('projectId', Number, false)];
123
+ }
124
+ const proxy = new Numeric();
125
+ proxy.setOrigin(context.origin);
126
+ const args = { projectId: 'not-a-number', unknown: 'extra' };
127
+ const result = await proxy.perform(args);
128
+ expect(result.isSuccess).toBe(true);
129
+ expect(fetch).toHaveBeenCalledTimes(1);
130
+ const url = new URL(String(fetch.mock.calls[0][0]));
131
+ expect(url.searchParams.get('projectId')).toBe('not-a-number');
132
+ expect(url.searchParams.get('unknown')).toBe('extra');
133
+ });
134
+ it('allows an identity-only registration to serve an existing singleResult with the same semantic name', async () => {
135
+ render(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
136
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
137
+ expect(new URL(String(fetch.mock.calls[0][0])).searchParams.get('projectId')).toBe(projectId);
138
+ });
139
+ it('fails visibly without selecting an ambiguous identity in an existing singleResult', () => {
140
+ registerQueryIdentity('ProjectById', 'Other/ProjectById', ProjectById);
141
+ render(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
142
+ expect(screen.getByText("Unresolved query binding 'ProjectById' on Cratis.Components:singleResult")).not.toBeNull();
143
+ expect(fetch).not.toHaveBeenCalled();
144
+ });
145
+ it('resolves identity replacement and removal on an existing adapter host rerender', async () => {
146
+ const mounted = render(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
147
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
148
+ class Replacement extends ProjectById {
149
+ route = '/replacement';
150
+ }
151
+ act(() => { registerQueryIdentity('ProjectById', identity, Replacement); });
152
+ mounted.rerender(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
153
+ await screen.findByText('Canonical project');
154
+ expect(fetch).toHaveBeenCalledTimes(2);
155
+ expect(new URL(String(fetch.mock.calls[1][0])).pathname).toBe('/replacement');
156
+ act(() => { unregisterQueryIdentity('ProjectById', identity); });
157
+ mounted.rerender(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
158
+ expect(screen.getByText("Unresolved query binding 'ProjectById' on Cratis.Components:singleResult")).not.toBeNull();
159
+ expect(fetch).toHaveBeenCalledTimes(2);
160
+ });
161
+ it('keeps legacy replacement authoritative for singleResult while queryInputForm rejects mixed candidates', async () => {
162
+ class Legacy extends ProjectById {
163
+ route = '/legacy';
164
+ }
165
+ registerQuery('ProjectById', ProjectById);
166
+ registerQuery('ProjectById', Legacy);
167
+ const mounted = render(view({ queryArguments: { projectId }, enabled: true }, 'singleResult'));
168
+ expect(await screen.findByText('Canonical project')).not.toBeNull();
169
+ expect(new URL(String(fetch.mock.calls[0][0])).pathname).toBe('/legacy');
170
+ mounted.rerender(view());
171
+ expect(screen.getByRole('alert').textContent).toContain("Ambiguous query binding 'ProjectById'");
172
+ expect(fetch).toHaveBeenCalledTimes(1);
173
+ });
174
+ });
175
+ //# sourceMappingURL=when_submitting_generated_guid_parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_submitting_generated_guid_parameters.js","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=when_submitting_native_queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_submitting_native_queries.d.ts","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/when_submitting_native_queries.tsx"],"names":[],"mappings":""}