@qoretechnologies/reqraft 0.10.38-pr.96.g9405cd1 → 0.10.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
- package/dist/components/form/engine/CompactRow.js +27 -0
- package/dist/components/form/engine/CompactRow.js.map +1 -1
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +26 -4
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +3 -3
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
- package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
- package/dist/components/form/fields/template/TemplateField.js +8 -3
- package/dist/components/form/fields/template/TemplateField.js.map +1 -1
- package/dist/helpers/templates.d.ts +66 -0
- package/dist/helpers/templates.d.ts.map +1 -1
- package/dist/helpers/templates.js +143 -1
- package/dist/helpers/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/components/form/engine/CompactRow.tsx +45 -0
- package/src/components/form/engine/FormEngine.stories.tsx +166 -8
- package/src/components/form/engine/readFirst.ts +29 -4
- package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +8 -4
- package/src/components/form/fields/template/TemplateField.stories.tsx +49 -0
- package/src/components/form/fields/template/TemplateField.tsx +9 -4
- package/src/helpers/templates.ts +169 -0
|
@@ -49,7 +49,73 @@ export declare const isCompleteTemplateToken: (value?: unknown) => value is stri
|
|
|
49
49
|
* template-offering input (build #123 review). Word segments cannot contain
|
|
50
50
|
* `{`, so `:{` inside a complete token always starts a braced segment. */
|
|
51
51
|
export declare const isBracedTemplateToken: (value?: unknown) => value is string;
|
|
52
|
+
/**
|
|
53
|
+
* The longest catalogue item whose path is a PREFIX of `value`, plus the part
|
|
54
|
+
* of the path it does not cover.
|
|
55
|
+
*
|
|
56
|
+
* A catalogue can only offer what the action's output type declares, so it
|
|
57
|
+
* stops at a list: `choices` is offered, `choices[0].message.content` is not —
|
|
58
|
+
* an operator hand-extends the path past the named field. Such a value has no
|
|
59
|
+
* item to match and used to render as its own raw token. Naming it by its
|
|
60
|
+
* nearest ancestor (`Choices[0].message.content`) keeps the chip readable
|
|
61
|
+
* without inventing a catalogue entry that does not exist.
|
|
62
|
+
*
|
|
63
|
+
* The match must break at a path boundary (`.` or `[`) so `choicesOther` is
|
|
64
|
+
* never named after `choices`, and the token keys must agree so a `$config:`
|
|
65
|
+
* item never names a `$data:` value.
|
|
66
|
+
*/
|
|
67
|
+
export declare const findTemplateByPath: (templates: IReqoreFormTemplates, value: string) => {
|
|
68
|
+
item: TReqoreDropdownItem;
|
|
69
|
+
remainder: string;
|
|
70
|
+
} | undefined;
|
|
52
71
|
export declare const findTemplate: (templates: IReqoreFormTemplates, value: string) => TReqoreDropdownItem | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* The one answer to "what is this reference called?", so a value reads the
|
|
74
|
+
* same in the picker chip, the read-only tag and the compact row's summary.
|
|
75
|
+
* Exact match first (aliases included), then the nearest catalogue ancestor
|
|
76
|
+
* for a hand-extended path, and finally the raw token — which is honest when
|
|
77
|
+
* the catalogue holds nothing that explains the value.
|
|
78
|
+
*/
|
|
79
|
+
export declare const resolveTemplateLabel: (templates: IReqoreFormTemplates | undefined, value: string) => {
|
|
80
|
+
label: string;
|
|
81
|
+
item?: TReqoreDropdownItem;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* What to call a reference when the catalogue explains nothing about it — the
|
|
85
|
+
* reference's own path, with the token wrapper stripped:
|
|
86
|
+
* `$data:{dc_ai_reply.choices[0].message.content}` reads as
|
|
87
|
+
* `dc_ai_reply.choices[0].message.content`.
|
|
88
|
+
*
|
|
89
|
+
* Surfaces exist with no catalogue at all (the Automation Hub template preview
|
|
90
|
+
* never fetches one), and there the raw token is the only thing left to show.
|
|
91
|
+
* Showing it as `$data:{…}` renders a value as code; showing the path renders
|
|
92
|
+
* it as a name, which is the honest floor.
|
|
93
|
+
*/
|
|
94
|
+
export declare const getTemplateReferencePath: (value: string) => string;
|
|
95
|
+
/**
|
|
96
|
+
* The best available name for a reference, for a surface that must show
|
|
97
|
+
* something readable no matter what: the catalogue's name when it has one,
|
|
98
|
+
* otherwise the bare path. `resolveTemplateLabel` keeps falling back to the
|
|
99
|
+
* raw token, because a picker that cannot resolve a value should say exactly
|
|
100
|
+
* what the value is.
|
|
101
|
+
*/
|
|
102
|
+
export declare const describeTemplateReference: (templates: IReqoreFormTemplates | undefined, value: string) => {
|
|
103
|
+
label: string;
|
|
104
|
+
item?: TReqoreDropdownItem;
|
|
105
|
+
};
|
|
106
|
+
export type TTemplateTextSegment = {
|
|
107
|
+
kind: 'text';
|
|
108
|
+
text: string;
|
|
109
|
+
} | {
|
|
110
|
+
kind: 'token';
|
|
111
|
+
text: string;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Splits prose that embeds template tokens into its literal and token parts —
|
|
115
|
+
* `trim("$data:{…}")` becomes `trim("`, the token, `")`. Used to chip the
|
|
116
|
+
* references inside a rendered expression instead of printing them raw.
|
|
117
|
+
*/
|
|
118
|
+
export declare const splitTemplateTokens: (text?: string) => TTemplateTextSegment[];
|
|
53
119
|
export declare const filterTemplatesByType: (templates?: IReqoreFormTemplates, fieldType?: string, hasArgSchema?: boolean) => IReqoreFormTemplates;
|
|
54
120
|
interface ITemplateItemPayload {
|
|
55
121
|
display_name?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/helpers/templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,EACL,mBAAmB,EAEpB,MAAM,wDAAwD,CAAC;AAMhE;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5F,eAAO,MAAM,mBAAmB,UACvB,aAAa,KACnB;IAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;CAI1C,CAAC;AAEF,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,OAK/C,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,KAAG,MAG9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,MAGhD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,8DAC2B,CAAC;AAI9D;;+DAE+D;AAC/D,eAAO,MAAM,uBAAuB,WAAY,OAAO,oBACW,CAAC;AAEnE;;;;;2EAK2E;AAC3E,eAAO,MAAM,qBAAqB,WAAY,OAAO,oBACG,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/helpers/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
20
20
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.buildTemplates = exports.filterTemplatesByType = exports.findTemplate = exports.isBracedTemplateToken = exports.isCompleteTemplateToken = exports.TEMPLATE_TOKEN_SOURCE = exports.getTemplateValue = exports.getTemplateKey = exports.isValueTemplate = exports.getTemplateTagStyle = exports.TEMPLATE_EXAMPLE_PREVIEW_LENGTH = void 0;
|
|
23
|
+
exports.buildTemplates = exports.filterTemplatesByType = exports.splitTemplateTokens = exports.describeTemplateReference = exports.getTemplateReferencePath = exports.resolveTemplateLabel = exports.findTemplate = exports.findTemplateByPath = exports.isBracedTemplateToken = exports.isCompleteTemplateToken = exports.TEMPLATE_TOKEN_SOURCE = exports.getTemplateValue = exports.getTemplateKey = exports.isValueTemplate = exports.getTemplateTagStyle = exports.TEMPLATE_EXAMPLE_PREVIEW_LENGTH = void 0;
|
|
24
24
|
var reqore_1 = require("@qoretechnologies/reqore");
|
|
25
25
|
var lodash_1 = require("lodash");
|
|
26
26
|
var react_1 = require("react");
|
|
@@ -112,6 +112,61 @@ var matchesTemplateValue = function (item, value) {
|
|
|
112
112
|
return item.value === value ||
|
|
113
113
|
!!((_b = (_a = item.metadata) === null || _a === void 0 ? void 0 : _a.aliasValues) === null || _b === void 0 ? void 0 : _b.includes(value));
|
|
114
114
|
};
|
|
115
|
+
/** Splits `$data:{a.b.c}` into its key (`$data`) and inner path (`a.b.c`). */
|
|
116
|
+
var TEMPLATE_TOKEN_PATH = /^(\$[A-Za-z_][\w-]*):\{(.*)\}$/;
|
|
117
|
+
var getTokenPath = function (value) {
|
|
118
|
+
var match = typeof value === 'string' ? TEMPLATE_TOKEN_PATH.exec(value) : null;
|
|
119
|
+
return match ? { key: match[1], path: match[2] } : undefined;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* The longest catalogue item whose path is a PREFIX of `value`, plus the part
|
|
123
|
+
* of the path it does not cover.
|
|
124
|
+
*
|
|
125
|
+
* A catalogue can only offer what the action's output type declares, so it
|
|
126
|
+
* stops at a list: `choices` is offered, `choices[0].message.content` is not —
|
|
127
|
+
* an operator hand-extends the path past the named field. Such a value has no
|
|
128
|
+
* item to match and used to render as its own raw token. Naming it by its
|
|
129
|
+
* nearest ancestor (`Choices[0].message.content`) keeps the chip readable
|
|
130
|
+
* without inventing a catalogue entry that does not exist.
|
|
131
|
+
*
|
|
132
|
+
* The match must break at a path boundary (`.` or `[`) so `choicesOther` is
|
|
133
|
+
* never named after `choices`, and the token keys must agree so a `$config:`
|
|
134
|
+
* item never names a `$data:` value.
|
|
135
|
+
*/
|
|
136
|
+
var findTemplateByPath = function (templates, value) {
|
|
137
|
+
var ref = getTokenPath(value);
|
|
138
|
+
if (!ref)
|
|
139
|
+
return undefined;
|
|
140
|
+
var best;
|
|
141
|
+
var consider = function (item, candidate) {
|
|
142
|
+
var itemPath = getTokenPath(candidate);
|
|
143
|
+
if (!itemPath || itemPath.key !== ref.key || !ref.path.startsWith(itemPath.path)) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
var boundary = ref.path[itemPath.path.length];
|
|
147
|
+
if (boundary !== '.' && boundary !== '[') {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (!best || itemPath.path.length > best.path.length) {
|
|
151
|
+
best = { item: item, path: itemPath.path, remainder: ref.path.slice(itemPath.path.length) };
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
var walk = function (items) {
|
|
155
|
+
items === null || items === void 0 ? void 0 : items.forEach(function (item) {
|
|
156
|
+
var _a, _b;
|
|
157
|
+
consider(item, item.value);
|
|
158
|
+
(_b = (_a = item.metadata) === null || _a === void 0 ? void 0 : _a.aliasValues) === null || _b === void 0 ? void 0 : _b.forEach(function (alias) {
|
|
159
|
+
return consider(item, alias);
|
|
160
|
+
});
|
|
161
|
+
if (item.items) {
|
|
162
|
+
walk(item.items);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
walk(templates === null || templates === void 0 ? void 0 : templates.items);
|
|
167
|
+
return best ? { item: best.item, remainder: best.remainder } : undefined;
|
|
168
|
+
};
|
|
169
|
+
exports.findTemplateByPath = findTemplateByPath;
|
|
115
170
|
var findTemplate = function (templates, value) {
|
|
116
171
|
if (!value)
|
|
117
172
|
return undefined;
|
|
@@ -131,6 +186,93 @@ var findTemplate = function (templates, value) {
|
|
|
131
186
|
return result;
|
|
132
187
|
};
|
|
133
188
|
exports.findTemplate = findTemplate;
|
|
189
|
+
/**
|
|
190
|
+
* Joins a catalogue item's name to the part of the path it does not cover.
|
|
191
|
+
* A field step reads as a step (`Choices › message`), while an array index
|
|
192
|
+
* binds to the name it indexes (`Choices[0]`) rather than floating off it.
|
|
193
|
+
*/
|
|
194
|
+
var composeExtendedLabel = function (label, remainder) {
|
|
195
|
+
return remainder.startsWith('.') ? "".concat(label, " \u203A ").concat(remainder.slice(1)) : "".concat(label).concat(remainder);
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* The one answer to "what is this reference called?", so a value reads the
|
|
199
|
+
* same in the picker chip, the read-only tag and the compact row's summary.
|
|
200
|
+
* Exact match first (aliases included), then the nearest catalogue ancestor
|
|
201
|
+
* for a hand-extended path, and finally the raw token — which is honest when
|
|
202
|
+
* the catalogue holds nothing that explains the value.
|
|
203
|
+
*/
|
|
204
|
+
var resolveTemplateLabel = function (templates, value) {
|
|
205
|
+
if (!templates || !value) {
|
|
206
|
+
return { label: value };
|
|
207
|
+
}
|
|
208
|
+
var exact = (0, exports.findTemplate)(templates, value);
|
|
209
|
+
if (exact) {
|
|
210
|
+
return { label: exact.label || value, item: exact };
|
|
211
|
+
}
|
|
212
|
+
var extended = (0, exports.findTemplateByPath)(templates, value);
|
|
213
|
+
if (extended) {
|
|
214
|
+
return {
|
|
215
|
+
label: composeExtendedLabel(extended.item.label, extended.remainder),
|
|
216
|
+
item: extended.item,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return { label: value };
|
|
220
|
+
};
|
|
221
|
+
exports.resolveTemplateLabel = resolveTemplateLabel;
|
|
222
|
+
/**
|
|
223
|
+
* What to call a reference when the catalogue explains nothing about it — the
|
|
224
|
+
* reference's own path, with the token wrapper stripped:
|
|
225
|
+
* `$data:{dc_ai_reply.choices[0].message.content}` reads as
|
|
226
|
+
* `dc_ai_reply.choices[0].message.content`.
|
|
227
|
+
*
|
|
228
|
+
* Surfaces exist with no catalogue at all (the Automation Hub template preview
|
|
229
|
+
* never fetches one), and there the raw token is the only thing left to show.
|
|
230
|
+
* Showing it as `$data:{…}` renders a value as code; showing the path renders
|
|
231
|
+
* it as a name, which is the honest floor.
|
|
232
|
+
*/
|
|
233
|
+
var getTemplateReferencePath = function (value) { var _a, _b; return (_b = (_a = getTokenPath(value)) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : value; };
|
|
234
|
+
exports.getTemplateReferencePath = getTemplateReferencePath;
|
|
235
|
+
/**
|
|
236
|
+
* The best available name for a reference, for a surface that must show
|
|
237
|
+
* something readable no matter what: the catalogue's name when it has one,
|
|
238
|
+
* otherwise the bare path. `resolveTemplateLabel` keeps falling back to the
|
|
239
|
+
* raw token, because a picker that cannot resolve a value should say exactly
|
|
240
|
+
* what the value is.
|
|
241
|
+
*/
|
|
242
|
+
var describeTemplateReference = function (templates, value) {
|
|
243
|
+
var resolved = (0, exports.resolveTemplateLabel)(templates, value);
|
|
244
|
+
return resolved.item ? resolved : { label: (0, exports.getTemplateReferencePath)(value) };
|
|
245
|
+
};
|
|
246
|
+
exports.describeTemplateReference = describeTemplateReference;
|
|
247
|
+
var EMBEDDED_TEMPLATE_TOKEN = new RegExp(exports.TEMPLATE_TOKEN_SOURCE, 'g');
|
|
248
|
+
/**
|
|
249
|
+
* Splits prose that embeds template tokens into its literal and token parts —
|
|
250
|
+
* `trim("$data:{…}")` becomes `trim("`, the token, `")`. Used to chip the
|
|
251
|
+
* references inside a rendered expression instead of printing them raw.
|
|
252
|
+
*/
|
|
253
|
+
var splitTemplateTokens = function (text) {
|
|
254
|
+
if (!text) {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
var segments = [];
|
|
258
|
+
var lastIndex = 0;
|
|
259
|
+
// A fresh regex per call: a shared /g instance carries `lastIndex` between
|
|
260
|
+
// calls and would skip tokens on the second string it is given.
|
|
261
|
+
var pattern = new RegExp(EMBEDDED_TEMPLATE_TOKEN.source, 'g');
|
|
262
|
+
var match;
|
|
263
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
264
|
+
if (match.index > lastIndex) {
|
|
265
|
+
segments.push({ kind: 'text', text: text.slice(lastIndex, match.index) });
|
|
266
|
+
}
|
|
267
|
+
segments.push({ kind: 'token', text: match[0] });
|
|
268
|
+
lastIndex = match.index + match[0].length;
|
|
269
|
+
}
|
|
270
|
+
if (lastIndex < text.length) {
|
|
271
|
+
segments.push({ kind: 'text', text: text.slice(lastIndex) });
|
|
272
|
+
}
|
|
273
|
+
return segments;
|
|
274
|
+
};
|
|
275
|
+
exports.splitTemplateTokens = splitTemplateTokens;
|
|
134
276
|
// Ported verbatim from qorus-ide `helpers/functions.tsx` (FIELD_STACK_REPORT
|
|
135
277
|
// batch) — the previous reqraft version used naive badge equality; the IDE
|
|
136
278
|
// routes compatibility through `areQorusTypesCompatible` (int↔string coercion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/helpers/templates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/helpers/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qoretechnologies/reqraft",
|
|
3
|
-
"version": "0.10.38
|
|
3
|
+
"version": "0.10.38",
|
|
4
4
|
"description": "ReQraft is a collection of React components and hooks that are used across Qore Technologies' products made using the ReQore component library from Qore.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,6 +22,8 @@ import {
|
|
|
22
22
|
findTemplate,
|
|
23
23
|
getTemplateTagStyle,
|
|
24
24
|
isValueTemplate,
|
|
25
|
+
describeTemplateReference,
|
|
26
|
+
splitTemplateTokens,
|
|
25
27
|
TTemplateMeta,
|
|
26
28
|
} from '../../../helpers/templates';
|
|
27
29
|
import { richtextToSegments } from '../../../helpers/common';
|
|
@@ -385,6 +387,49 @@ export const CompactRow = memo(
|
|
|
385
387
|
}
|
|
386
388
|
}
|
|
387
389
|
|
|
390
|
+
// An expression summarises to one line of text, and a template reference
|
|
391
|
+
// inside it printed as its own raw token — `$data:{…}` renders a value as
|
|
392
|
+
// code where a name belongs. Chip every reference here, on the richtext
|
|
393
|
+
// branch's pattern above, so the wrapper (`trim(`…`)`) still reads as the
|
|
394
|
+
// text it is while the reference reads as a name.
|
|
395
|
+
//
|
|
396
|
+
// Unconditionally: a surface with no catalogue (the Automation Hub
|
|
397
|
+
// template preview never fetches one) still shows the reference's own
|
|
398
|
+
// path, which is the point — a conditional chip is no chip at all
|
|
399
|
+
// exactly where the raw token looks worst.
|
|
400
|
+
if ((field as { is_expression?: boolean })?.is_expression && formatted) {
|
|
401
|
+
const segments = splitTemplateTokens(formatted);
|
|
402
|
+
const named = segments.map((segment) =>
|
|
403
|
+
segment.kind === 'token' ?
|
|
404
|
+
{ ...segment, ...describeTemplateReference(templates, segment.text) }
|
|
405
|
+
: segment
|
|
406
|
+
);
|
|
407
|
+
|
|
408
|
+
if (named.some((segment) => segment.kind === 'token')) {
|
|
409
|
+
return (
|
|
410
|
+
<span style={{ ...wrapStyle, gap: 4, overflow: 'hidden' }}>
|
|
411
|
+
{named.map((segment, index) =>
|
|
412
|
+
segment.kind === 'token' ?
|
|
413
|
+
<ReqoreTag
|
|
414
|
+
key={index}
|
|
415
|
+
size='tiny'
|
|
416
|
+
// Inherit the row's font size so the chip shares a baseline
|
|
417
|
+
// with the text around it — see the richtext branch above.
|
|
418
|
+
style={{ fontSize: 'inherit' }}
|
|
419
|
+
icon='ExchangeDollarLine'
|
|
420
|
+
label={segment.label}
|
|
421
|
+
tooltip={segment.text}
|
|
422
|
+
{...getTemplateTagStyle(segment.item?.metadata as TTemplateMeta | undefined)}
|
|
423
|
+
/>
|
|
424
|
+
: <span key={index} style={{ whiteSpace: 'pre' }}>
|
|
425
|
+
{segment.text}
|
|
426
|
+
</span>
|
|
427
|
+
)}
|
|
428
|
+
</span>
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
388
433
|
return formatted;
|
|
389
434
|
};
|
|
390
435
|
|
|
@@ -2862,9 +2862,10 @@ export const CompactMultiSelectEditing: Story = {
|
|
|
2862
2862
|
},
|
|
2863
2863
|
play: async () => {
|
|
2864
2864
|
await _testsWaitForText('Audiences');
|
|
2865
|
-
// Read row joins the selected items
|
|
2866
|
-
|
|
2867
|
-
await
|
|
2865
|
+
// Read row joins the selected items, labelled the way the picker labels
|
|
2866
|
+
// them (`Orders`) rather than the way they are stored (`orders`).
|
|
2867
|
+
await _testsWaitForText('Orders');
|
|
2868
|
+
await _testsClickText('Orders');
|
|
2868
2869
|
await waitFor(() => expect(document.querySelector('.options-readfirst-card')).toBeTruthy(), {
|
|
2869
2870
|
timeout: 10000,
|
|
2870
2871
|
});
|
|
@@ -3648,8 +3649,16 @@ export const CompactExpressions: Story = {
|
|
|
3648
3649
|
play: async () => {
|
|
3649
3650
|
const stop = startDpqlMockLsp();
|
|
3650
3651
|
try {
|
|
3651
|
-
// Read-first: the offline DPQL summary of the AST
|
|
3652
|
-
|
|
3652
|
+
// Read-first: the offline DPQL summary of the AST — the literals read as
|
|
3653
|
+
// the text they are, and the template reference reads as a chip rather
|
|
3654
|
+
// than as its raw `$local:name` token inside the string.
|
|
3655
|
+
await waitFor(() => {
|
|
3656
|
+
const chip = Array.from(document.querySelectorAll('.reqore-tag')).find((tag) =>
|
|
3657
|
+
tag.textContent?.includes('$local:name')
|
|
3658
|
+
);
|
|
3659
|
+
expect(chip, 'the reference in the summary renders as a chip').toBeTruthy();
|
|
3660
|
+
});
|
|
3661
|
+
await _testsWaitForText('" == "John"');
|
|
3653
3662
|
|
|
3654
3663
|
// Drill in → the card hosts the ExpressionField (Visual builder).
|
|
3655
3664
|
await fireEvent.click(
|
|
@@ -4406,7 +4415,8 @@ export const CompactFieldTypes: Story = {
|
|
|
4406
4415
|
await _testsWaitForText('0 0 * * *'); // cron
|
|
4407
4416
|
await _testsWaitForText('Python'); // select → allowed_value display label
|
|
4408
4417
|
await _testsWaitForText('Medium'); // enum → allowed_value display label
|
|
4409
|
-
|
|
4418
|
+
// multi-select joined, labelled the way the picker labels them
|
|
4419
|
+
await _testsWaitForText('Orders, Batch');
|
|
4410
4420
|
await _testsWaitForText('a, b'); // list joined
|
|
4411
4421
|
await _testsWaitForText('x, y, z'); // YAML-serialized list summarised
|
|
4412
4422
|
await _testsWaitForText('#0000FF'); // colour → uppercase hex
|
|
@@ -4420,8 +4430,15 @@ export const CompactFieldTypes: Story = {
|
|
|
4420
4430
|
// than a raw hash key-count.
|
|
4421
4431
|
await _testsWaitForText('512MiB');
|
|
4422
4432
|
await _testsWaitForText(/example_customer_addresses/);
|
|
4423
|
-
// Expression field → read-first shows the offline DPQL summary of the AST
|
|
4424
|
-
|
|
4433
|
+
// Expression field → read-first shows the offline DPQL summary of the AST,
|
|
4434
|
+
// with the template reference inside it chipped rather than printed raw.
|
|
4435
|
+
await waitFor(() => {
|
|
4436
|
+
const chip = Array.from(document.querySelectorAll('.reqore-tag')).find((tag) =>
|
|
4437
|
+
tag.textContent?.includes('$local:name')
|
|
4438
|
+
);
|
|
4439
|
+
expect(chip, 'the reference in the summary renders as a chip').toBeTruthy();
|
|
4440
|
+
});
|
|
4441
|
+
await _testsWaitForText('" == "John"');
|
|
4425
4442
|
await expect(document.querySelectorAll('.options-readfirst-card')).toHaveLength(0);
|
|
4426
4443
|
|
|
4427
4444
|
// A hash renders its read-first preview (the structured tree by default)
|
|
@@ -5915,3 +5932,144 @@ export const CompactRowMarkdownWithoutRenderer: Story = {
|
|
|
5915
5932
|
expect(descText).not.toContain('**');
|
|
5916
5933
|
},
|
|
5917
5934
|
};
|
|
5935
|
+
|
|
5936
|
+
/**
|
|
5937
|
+
* The read-first summary of an EXPRESSION: it renders to one line of text, and
|
|
5938
|
+
* a template reference inside it used to print as its own raw token — the same
|
|
5939
|
+
* reference the editor shows as a named chip. This is the Save Reply row of the
|
|
5940
|
+
* Discord assistant template, whose value is
|
|
5941
|
+
* `trim($data:{dc_ai_reply.choices[0].message.content})`.
|
|
5942
|
+
*/
|
|
5943
|
+
export const CompactExpressionTemplateChips: Story = {
|
|
5944
|
+
parameters: {
|
|
5945
|
+
docs: {
|
|
5946
|
+
description: {
|
|
5947
|
+
story:
|
|
5948
|
+
'Renders a compact read-first row whose value is an expression wrapping a template reference — the reference renders as a named chip inside the summary text (trim("Choices[0].message.content")) rather than as its raw $data token.',
|
|
5949
|
+
},
|
|
5950
|
+
},
|
|
5951
|
+
chromatic: { disable: true },
|
|
5952
|
+
},
|
|
5953
|
+
render: () => (
|
|
5954
|
+
<FormEngine
|
|
5955
|
+
compact
|
|
5956
|
+
name='exprChips'
|
|
5957
|
+
stringTemplates={
|
|
5958
|
+
{
|
|
5959
|
+
items: [
|
|
5960
|
+
{
|
|
5961
|
+
label: 'Generate AI Reply',
|
|
5962
|
+
items: [
|
|
5963
|
+
{
|
|
5964
|
+
label: 'Choices',
|
|
5965
|
+
value: '$data:{3.choices}',
|
|
5966
|
+
metadata: { aliasValues: ['$data:{dc_ai_reply.choices}'] },
|
|
5967
|
+
},
|
|
5968
|
+
],
|
|
5969
|
+
},
|
|
5970
|
+
],
|
|
5971
|
+
} as any
|
|
5972
|
+
}
|
|
5973
|
+
options={
|
|
5974
|
+
{
|
|
5975
|
+
reply: {
|
|
5976
|
+
type: 'string',
|
|
5977
|
+
display_name: 'Value',
|
|
5978
|
+
desc: 'The new value for the variable',
|
|
5979
|
+
supports_expressions: true,
|
|
5980
|
+
required: true,
|
|
5981
|
+
},
|
|
5982
|
+
} as unknown as IQorusFormSchema
|
|
5983
|
+
}
|
|
5984
|
+
value={
|
|
5985
|
+
{
|
|
5986
|
+
reply: {
|
|
5987
|
+
type: 'string',
|
|
5988
|
+
is_expression: true,
|
|
5989
|
+
value: {
|
|
5990
|
+
exp: 'trim',
|
|
5991
|
+
args: [{ type: 'string', value: '$data:{dc_ai_reply.choices[0].message.content}' }],
|
|
5992
|
+
},
|
|
5993
|
+
},
|
|
5994
|
+
} as any
|
|
5995
|
+
}
|
|
5996
|
+
onChange={fn()}
|
|
5997
|
+
/>
|
|
5998
|
+
),
|
|
5999
|
+
play: async () => {
|
|
6000
|
+
// The summary keeps its literal text…
|
|
6001
|
+
await _testsWaitForText('trim("', undefined, 1);
|
|
6002
|
+
// …and the reference inside it is a named chip, not the raw token.
|
|
6003
|
+
await waitFor(() => {
|
|
6004
|
+
const chip = Array.from(document.querySelectorAll('.reqore-tag')).find((tag) =>
|
|
6005
|
+
tag.textContent?.includes('Choices[0].message.content')
|
|
6006
|
+
);
|
|
6007
|
+
expect(chip, 'the reference renders as a named chip in the summary').toBeTruthy();
|
|
6008
|
+
});
|
|
6009
|
+
const raw = Array.from(document.querySelectorAll('.readfirst-row')).filter((row) =>
|
|
6010
|
+
row.textContent?.includes('$data:{')
|
|
6011
|
+
);
|
|
6012
|
+
expect(raw, 'the row prints no raw token').toHaveLength(0);
|
|
6013
|
+
},
|
|
6014
|
+
};
|
|
6015
|
+
|
|
6016
|
+
/**
|
|
6017
|
+
* The same row on a surface with NO template catalogue — the Automation Hub
|
|
6018
|
+
* template preview, which never fetches one. There is no name to resolve the
|
|
6019
|
+
* reference to, so the chip carries the reference's own path: the wrapper still
|
|
6020
|
+
* reads as `trim("…")` text, and the reference stops reading as code.
|
|
6021
|
+
*/
|
|
6022
|
+
export const CompactExpressionWithoutCatalogue: Story = {
|
|
6023
|
+
parameters: {
|
|
6024
|
+
docs: {
|
|
6025
|
+
description: {
|
|
6026
|
+
story:
|
|
6027
|
+
'Renders a compact read-first row whose value is an expression wrapping a template reference, with no templates supplied — the reference still renders as a chip carrying its own path (dc_ai_reply.choices[0].message.content) rather than the raw $data token.',
|
|
6028
|
+
},
|
|
6029
|
+
},
|
|
6030
|
+
chromatic: { disable: true },
|
|
6031
|
+
},
|
|
6032
|
+
render: () => (
|
|
6033
|
+
<FormEngine
|
|
6034
|
+
compact
|
|
6035
|
+
name='exprNoCatalogue'
|
|
6036
|
+
options={
|
|
6037
|
+
{
|
|
6038
|
+
reply: {
|
|
6039
|
+
type: 'string',
|
|
6040
|
+
display_name: 'Value',
|
|
6041
|
+
desc: 'The new value for the variable',
|
|
6042
|
+
supports_expressions: true,
|
|
6043
|
+
required: true,
|
|
6044
|
+
},
|
|
6045
|
+
} as unknown as IQorusFormSchema
|
|
6046
|
+
}
|
|
6047
|
+
value={
|
|
6048
|
+
{
|
|
6049
|
+
reply: {
|
|
6050
|
+
type: 'string',
|
|
6051
|
+
is_expression: true,
|
|
6052
|
+
value: {
|
|
6053
|
+
exp: 'trim',
|
|
6054
|
+
args: [{ type: 'string', value: '$data:{dc_ai_reply.choices[0].message.content}' }],
|
|
6055
|
+
},
|
|
6056
|
+
},
|
|
6057
|
+
} as any
|
|
6058
|
+
}
|
|
6059
|
+
onChange={fn()}
|
|
6060
|
+
/>
|
|
6061
|
+
),
|
|
6062
|
+
play: async () => {
|
|
6063
|
+
await _testsWaitForText('trim("', undefined, 1);
|
|
6064
|
+
await waitFor(() => {
|
|
6065
|
+
const chip = Array.from(document.querySelectorAll('.reqore-tag')).find((tag) =>
|
|
6066
|
+
tag.textContent?.includes('dc_ai_reply.choices[0].message.content')
|
|
6067
|
+
);
|
|
6068
|
+
expect(chip, 'the reference chips even with no catalogue').toBeTruthy();
|
|
6069
|
+
});
|
|
6070
|
+
const raw = Array.from(document.querySelectorAll('.readfirst-row')).filter((row) =>
|
|
6071
|
+
row.textContent?.includes('$data:{')
|
|
6072
|
+
);
|
|
6073
|
+
expect(raw, 'the row prints no raw token').toHaveLength(0);
|
|
6074
|
+
},
|
|
6075
|
+
};
|
|
@@ -134,15 +134,40 @@ export const shouldAutoCollapseCompactOption = (
|
|
|
134
134
|
(isCompactBooleanOption(schema) || isFixedCompactAllowedValueOption(schema));
|
|
135
135
|
|
|
136
136
|
/** Prefer the matching allowed_values entry's display_name (fallback `name`)
|
|
137
|
-
* over the raw stored value.
|
|
137
|
+
* over the raw stored value.
|
|
138
|
+
*
|
|
139
|
+
* A LIST carries its options under `element_allowed_values` — they constrain
|
|
140
|
+
* each element, not the list itself — so a multi-select that was missing here
|
|
141
|
+
* printed what it stores rather than what you picked: `orders, batch` for
|
|
142
|
+
* fields whose picker reads "Orders, Batch". The gap shows worst exactly where
|
|
143
|
+
* allowed values earn their keep, since the stored form is often not readable
|
|
144
|
+
* at all (a permission code, `PO_REQUIRE_TYPES`, an app-specific id). */
|
|
138
145
|
const findAllowedOption = (value: unknown, schema?: TQorusFormFieldSchema): any | undefined => {
|
|
139
|
-
const s = schema as
|
|
140
|
-
|
|
146
|
+
const s = schema as
|
|
147
|
+
| { allowed_values?: any[]; element_allowed_values?: any[]; items?: any[] }
|
|
148
|
+
| undefined;
|
|
149
|
+
const options =
|
|
150
|
+
(s?.allowed_values?.length && s.allowed_values) ||
|
|
151
|
+
(s?.element_allowed_values?.length && s.element_allowed_values) ||
|
|
152
|
+
s?.items;
|
|
141
153
|
if (!options?.length) {
|
|
142
154
|
return undefined;
|
|
143
155
|
}
|
|
156
|
+
// A stored element can be the bare value or the typed `{type, value}`
|
|
157
|
+
// envelope the form engine round-trips; match either against either.
|
|
158
|
+
const stored =
|
|
159
|
+
value && typeof value === 'object' && 'value' in (value as Record<string, unknown>) ?
|
|
160
|
+
(value as Record<string, unknown>).value
|
|
161
|
+
: value;
|
|
162
|
+
|
|
144
163
|
return options.find(
|
|
145
|
-
(option) =>
|
|
164
|
+
(option) =>
|
|
165
|
+
option?.value?.value === value ||
|
|
166
|
+
option?.value === value ||
|
|
167
|
+
option?.name === value ||
|
|
168
|
+
option?.value?.value === stored ||
|
|
169
|
+
option?.value === stored ||
|
|
170
|
+
option?.name === stored
|
|
146
171
|
);
|
|
147
172
|
};
|
|
148
173
|
|
|
@@ -2,7 +2,11 @@ import { ReqoreTag, ReqoreTagGroup } from '@qoretechnologies/reqore';
|
|
|
2
2
|
import { IReqoreFormTemplates } from '@qoretechnologies/reqore/dist/components/Textarea';
|
|
3
3
|
import { TSizes } from '@qoretechnologies/reqore/dist/constants/sizes';
|
|
4
4
|
import { memo } from 'react';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
getTemplateTagStyle,
|
|
7
|
+
describeTemplateReference,
|
|
8
|
+
TTemplateMeta,
|
|
9
|
+
} from '../../../../helpers/templates';
|
|
6
10
|
|
|
7
11
|
export interface IReadOnlyTemplateTagProps {
|
|
8
12
|
/** The template reference value, e.g. `$local:test`. */
|
|
@@ -22,14 +26,14 @@ export interface IReadOnlyTemplateTagProps {
|
|
|
22
26
|
*/
|
|
23
27
|
export const ReadOnlyTemplateTag = memo(
|
|
24
28
|
({ value, templates, size }: IReadOnlyTemplateTagProps) => {
|
|
25
|
-
const
|
|
26
|
-
const metadata =
|
|
29
|
+
const { label, item } = describeTemplateReference(templates, value);
|
|
30
|
+
const metadata = item?.metadata as TTemplateMeta | undefined;
|
|
27
31
|
return (
|
|
28
32
|
<ReqoreTagGroup size={size}>
|
|
29
33
|
<ReqoreTag
|
|
30
34
|
icon='ExchangeDollarLine'
|
|
31
35
|
leftIconProps={{ image: metadata?.image }}
|
|
32
|
-
label={
|
|
36
|
+
label={label}
|
|
33
37
|
tooltip={value}
|
|
34
38
|
{...getTemplateTagStyle(metadata)}
|
|
35
39
|
/>
|