@qoretechnologies/reqraft 0.10.61 → 0.10.62-pr.137.g86641aa

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 (101) hide show
  1. package/dist/components/dpqlEditor/DpqlEditor.d.ts.map +1 -1
  2. package/dist/components/dpqlEditor/DpqlEditor.js +8 -3
  3. package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
  4. package/dist/components/dpqlEditor/types.d.ts +5 -0
  5. package/dist/components/dpqlEditor/types.d.ts.map +1 -1
  6. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  7. package/dist/components/form/engine/CompactRow.js +17 -8
  8. package/dist/components/form/engine/CompactRow.js.map +1 -1
  9. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  10. package/dist/components/form/engine/FormEngine.js +65 -15
  11. package/dist/components/form/engine/FormEngine.js.map +1 -1
  12. package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
  13. package/dist/components/form/engine/OptionFieldMessages.js +12 -1
  14. package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
  15. package/dist/components/form/engine/compactRowContext.d.ts +2 -0
  16. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  17. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  18. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  19. package/dist/components/form/engine/readFirst.js +5 -1
  20. package/dist/components/form/engine/readFirst.js.map +1 -1
  21. package/dist/components/form/expressions/ExpressionField.d.ts +21 -1
  22. package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
  23. package/dist/components/form/expressions/ExpressionField.js +72 -14
  24. package/dist/components/form/expressions/ExpressionField.js.map +1 -1
  25. package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
  26. package/dist/components/form/expressions/builder/index.js +16 -3
  27. package/dist/components/form/expressions/builder/index.js.map +1 -1
  28. package/dist/components/form/expressions/expressionOperands.d.ts +16 -0
  29. package/dist/components/form/expressions/expressionOperands.d.ts.map +1 -0
  30. package/dist/components/form/expressions/expressionOperands.js +97 -0
  31. package/dist/components/form/expressions/expressionOperands.js.map +1 -0
  32. package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
  33. package/dist/components/form/expressions/mockExpressions.js +15 -0
  34. package/dist/components/form/expressions/mockExpressions.js.map +1 -1
  35. package/dist/components/form/expressions/renderExpressionToText.d.ts +2 -0
  36. package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
  37. package/dist/components/form/expressions/renderExpressionToText.js +24 -5
  38. package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
  39. package/dist/components/form/expressions/textOfExpression.d.ts +18 -0
  40. package/dist/components/form/expressions/textOfExpression.d.ts.map +1 -0
  41. package/dist/components/form/expressions/textOfExpression.js +37 -0
  42. package/dist/components/form/expressions/textOfExpression.js.map +1 -0
  43. package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
  44. package/dist/components/form/expressions/useRenderExpression.js +7 -7
  45. package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
  46. package/dist/components/form/fields/rich-text/RichText.d.ts +8 -1
  47. package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
  48. package/dist/components/form/fields/rich-text/RichText.js +10 -10
  49. package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
  50. package/dist/components/form/fields/template/TemplateField.d.ts +6 -0
  51. package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
  52. package/dist/components/form/fields/template/TemplateField.js +280 -55
  53. package/dist/components/form/fields/template/TemplateField.js.map +1 -1
  54. package/dist/components/form/fields/template/writtenAsText.d.ts +57 -0
  55. package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
  56. package/dist/components/form/fields/template/writtenAsText.js +203 -0
  57. package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
  58. package/dist/components/form/index.d.ts +2 -0
  59. package/dist/components/form/index.d.ts.map +1 -1
  60. package/dist/components/form/index.js +7 -1
  61. package/dist/components/form/index.js.map +1 -1
  62. package/dist/components/smartEditor/useLspSession.d.ts +6 -0
  63. package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
  64. package/dist/components/smartEditor/useLspSession.js +7 -6
  65. package/dist/components/smartEditor/useLspSession.js.map +1 -1
  66. package/dist/helpers/templates.d.ts +18 -0
  67. package/dist/helpers/templates.d.ts.map +1 -1
  68. package/dist/helpers/templates.js +30 -1
  69. package/dist/helpers/templates.js.map +1 -1
  70. package/dist/helpers/validations.d.ts.map +1 -1
  71. package/dist/helpers/validations.js +98 -18
  72. package/dist/helpers/validations.js.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/dpqlEditor/DpqlEditor.tsx +11 -18
  75. package/src/components/dpqlEditor/types.ts +5 -0
  76. package/src/components/form/engine/CompactRow.tsx +31 -10
  77. package/src/components/form/engine/FormEngine.stories.tsx +656 -18
  78. package/src/components/form/engine/FormEngine.tsx +64 -22
  79. package/src/components/form/engine/FormEngineRemote.stories.tsx +5 -0
  80. package/src/components/form/engine/OptionFieldMessages.tsx +12 -1
  81. package/src/components/form/engine/compactRowContext.ts +2 -0
  82. package/src/components/form/engine/readFirst.ts +7 -1
  83. package/src/components/form/expressions/ExpressionField.stories.tsx +57 -9
  84. package/src/components/form/expressions/ExpressionField.tsx +179 -60
  85. package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +8 -1
  86. package/src/components/form/expressions/builder/index.tsx +16 -3
  87. package/src/components/form/expressions/dpqlMockLanguage.ts +7 -2
  88. package/src/components/form/expressions/expressionOperands.ts +74 -0
  89. package/src/components/form/expressions/mockExpressions.ts +16 -4
  90. package/src/components/form/expressions/renderExpressionToText.ts +26 -9
  91. package/src/components/form/expressions/textOfExpression.ts +39 -0
  92. package/src/components/form/expressions/useRenderExpression.ts +9 -1
  93. package/src/components/form/fields/number/Number.stories.tsx +8 -7
  94. package/src/components/form/fields/rich-text/RichText.tsx +18 -10
  95. package/src/components/form/fields/template/TemplateField.stories.tsx +486 -18
  96. package/src/components/form/fields/template/TemplateField.tsx +506 -62
  97. package/src/components/form/fields/template/writtenAsText.ts +217 -0
  98. package/src/components/form/index.tsx +6 -0
  99. package/src/components/smartEditor/useLspSession.ts +15 -10
  100. package/src/helpers/templates.ts +35 -0
  101. package/src/helpers/validations.ts +83 -12
@@ -142,18 +142,19 @@ export const TypedFreely: Story = {
142
142
  docs: {
143
143
  description: {
144
144
  story:
145
- 'Renders the Number field in integer mode after typing what is not a number: 12abc stays as typed (the form flags it, it is not cut to 12), and a template ($local:quantity) or an expression (@qty * 2) is passed on as typed for the field around it to take up.',
145
+ 'Renders the bare Number editor in integer mode, given no templates, after typing what is not a number: 12abc stays as typed (the form flags it, it is not cut to 12), and a decimal point typed before its digits is kept. A number field that takes templates is TemplateField around this editor: see Components/Form/Template › Number Typed Freely.',
146
146
  },
147
147
  },
148
148
  },
149
149
  async play({ args, canvasElement }) {
150
150
  const canvas = within(canvasElement);
151
151
  const input = canvas.getByLabelText('Number');
152
- for (const text of ['12abc', '@qty * 2', '$local:quantity']) {
153
- await userEvent.clear(input);
154
- await userEvent.type(input, text);
155
- await expect(input).toHaveValue(text);
156
- await waitFor(() => expect(args.onChange).toHaveBeenLastCalledWith(text), { timeout: 500 });
157
- }
152
+ await userEvent.clear(input);
153
+ await userEvent.type(input, '12abc');
154
+ await expect(input).toHaveValue('12abc');
155
+ await waitFor(() => expect(args.onChange).toHaveBeenLastCalledWith('12abc'), { timeout: 500 });
156
+ await userEvent.clear(input);
157
+ await userEvent.type(input, '10.');
158
+ await expect(input).toHaveValue('10.');
158
159
  },
159
160
  };
@@ -48,6 +48,13 @@ export interface IRichTextFormFieldProps extends Omit<
48
48
  onChange?: (value: string | IReqoreRichTextEditorProps['value']) => void;
49
49
  allowTemplates?: boolean;
50
50
  templates?: IReqoreFormTemplates;
51
+ /**
52
+ * The catalogue a chip is NAMED from, when it is wider than the `templates` offered: a typed field offers
53
+ * only the fields of its type, but a chip of any field in its value is named as the catalogue names it.
54
+ * Named from the offered list, a field not on it read as its reference's path ("record: pos").
55
+ * Defaults to `templates`.
56
+ */
57
+ namingTemplates?: IReqoreFormTemplates;
51
58
  /**
52
59
  * What the value is. `richtext` (the default) stores the editor's document.
53
60
  * `text` stores a plain string: each template reference in it is drawn as a
@@ -116,14 +123,17 @@ export const RichTextFormField = memo(({
116
123
  onChange,
117
124
  allowTemplates,
118
125
  templates,
126
+ namingTemplates,
119
127
  valueFormat = 'richtext',
120
128
  singleLine,
121
129
  templateToken,
122
130
  ...rest
123
131
  }: IRichTextFormFieldProps) => {
124
132
  const isText = valueFormat === 'text';
133
+ /** What chips are named from: the whole catalogue, not only what is offered (see the prop). */
134
+ const naming = namingTemplates ?? templates;
125
135
  const [localValue, setLocalValue] = useState<any>(() =>
126
- isText ? templateTextToNodes(String(value ?? ''), templates, templateToken) : value
136
+ isText ? templateTextToNodes(String(value ?? ''), naming, templateToken) : value
127
137
  );
128
138
  /* In text mode, the string the editor's document stands for. The value that
129
139
  comes back from the parent is usually that same string, and rebuilding the
@@ -143,7 +153,7 @@ export const RichTextFormField = memo(({
143
153
  const text = String(value ?? '');
144
154
  if (text !== lastTextRef.current) {
145
155
  lastTextRef.current = text;
146
- setLocalValue(templateTextToNodes(text, templates, templateToken));
156
+ setLocalValue(templateTextToNodes(text, naming, templateToken));
147
157
  }
148
158
  return;
149
159
  }
@@ -182,7 +192,7 @@ export const RichTextFormField = memo(({
182
192
  // stopped below. Flattened text is shown as the one line it now is.
183
193
  if (singleLine && hasLineBreak(text)) {
184
194
  lastTextRef.current = flattenToSingleLine(text);
185
- setLocalValue(templateTextToNodes(lastTextRef.current, templates, templateToken));
195
+ setLocalValue(templateTextToNodes(lastTextRef.current, naming, templateToken));
186
196
  return;
187
197
  }
188
198
  lastTextRef.current = text;
@@ -200,9 +210,7 @@ export const RichTextFormField = memo(({
200
210
  // show the same strings, so they must be drawn the same way.
201
211
  const renderMarkdown = useMarkdownRenderer();
202
212
 
203
- const descriptionByValue = useMemo(() => getChipTooltipDescriptions(templates), [
204
- JSON.stringify(templates),
205
- ]);
213
+ const descriptionByValue = useMemo(() => getChipTooltipDescriptions(naming), [JSON.stringify(naming)]);
206
214
 
207
215
  const handleGetTagProps = useCallback(
208
216
  (tag: any): IReqoreTagProps => {
@@ -217,13 +225,13 @@ export const RichTextFormField = memo(({
217
225
  description on hover. Read at render, so a catalogue that arrives
218
226
  after the value still names it. */
219
227
  if (isText && tagValue.startsWith('$')) {
220
- const { item } = describeTemplateReference(templates, tagValue);
228
+ const { item } = describeTemplateReference(naming, tagValue);
221
229
  const metadata = item?.metadata as TTemplateMeta | undefined;
222
230
  return {
223
231
  icon: 'ExchangeDollarLine',
224
232
  leftIconProps: { image: metadata?.image },
225
- label: templateChipLabel(templates, tagValue),
226
- tooltip: templateTooltip(templates, tagValue),
233
+ label: templateChipLabel(naming, tagValue),
234
+ tooltip: templateTooltip(naming, tagValue),
227
235
  ...getTemplateTagStyle(metadata),
228
236
  };
229
237
  }
@@ -269,7 +277,7 @@ export const RichTextFormField = memo(({
269
277
 
270
278
  return {};
271
279
  },
272
- [descriptionByValue, renderMarkdown, isText, templates]
280
+ [descriptionByValue, renderMarkdown, isText, naming]
273
281
  );
274
282
 
275
283
  const handleKeyDown = useCallback(