@servicetitan/dte-unlayer 0.158.0 → 0.160.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.
- package/dist/api-core.js +22 -29
- package/dist/api-core.js.map +1 -1
- package/dist/api-custom-tools.js +23 -29
- package/dist/api-custom-tools.js.map +1 -1
- package/dist/business-calendar/BusinessCalendarDrawer.d.ts +19 -0
- package/dist/business-calendar/BusinessCalendarDrawer.d.ts.map +1 -0
- package/dist/business-calendar/BusinessCalendarDrawer.js +41 -0
- package/dist/business-calendar/BusinessCalendarDrawer.js.map +1 -0
- package/dist/business-calendar/business-calendar-requests.d.ts +25 -0
- package/dist/business-calendar/business-calendar-requests.d.ts.map +1 -0
- package/dist/business-calendar/business-calendar-requests.js +46 -0
- package/dist/business-calendar/business-calendar-requests.js.map +1 -0
- package/dist/business-calendar/business-calendar-state.d.ts +22 -0
- package/dist/business-calendar/business-calendar-state.d.ts.map +1 -0
- package/dist/business-calendar/business-calendar-state.js +74 -0
- package/dist/business-calendar/business-calendar-state.js.map +1 -0
- package/dist/business-calendar/useBusinessCalendarRequests.d.ts +15 -0
- package/dist/business-calendar/useBusinessCalendarRequests.d.ts.map +1 -0
- package/dist/business-calendar/useBusinessCalendarRequests.js +30 -0
- package/dist/business-calendar/useBusinessCalendarRequests.js.map +1 -0
- package/dist/display-conditions/ConditionGroup.d.ts.map +1 -1
- package/dist/display-conditions/ConditionGroup.js +20 -89
- package/dist/display-conditions/ConditionGroup.js.map +1 -1
- package/dist/display-conditions/ConditionGroupsSection.d.ts.map +1 -1
- package/dist/display-conditions/ConditionGroupsSection.js +2 -70
- package/dist/display-conditions/ConditionGroupsSection.js.map +1 -1
- package/dist/display-conditions/ConditionRow.d.ts.map +1 -1
- package/dist/display-conditions/ConditionRow.js +88 -212
- package/dist/display-conditions/ConditionRow.js.map +1 -1
- package/dist/display-conditions/DisplayConditionModal.d.ts.map +1 -1
- package/dist/display-conditions/DisplayConditionModal.js +39 -194
- package/dist/display-conditions/DisplayConditionModal.js.map +1 -1
- package/dist/display-conditions/LookupValueControl.js +42 -105
- package/dist/display-conditions/LookupValueControl.js.map +1 -1
- package/dist/display-conditions/SeparatorWithChip.js +1 -10
- package/dist/display-conditions/SeparatorWithChip.js.map +1 -1
- package/dist/display-conditions/constants.js +15 -20
- package/dist/display-conditions/constants.js.map +1 -1
- package/dist/display-conditions/displayConditionController.js +5 -8
- package/dist/display-conditions/displayConditionController.js.map +1 -1
- package/dist/display-conditions/lookupOptionsController.js +16 -16
- package/dist/display-conditions/lookupOptionsController.js.map +1 -1
- package/dist/display-conditions/nunjucks.js +98 -116
- package/dist/display-conditions/nunjucks.js.map +1 -1
- package/dist/display-conditions/schemaDataPoints.js +13 -11
- package/dist/display-conditions/schemaDataPoints.js.map +1 -1
- package/dist/display-conditions/types.js +23 -67
- package/dist/display-conditions/types.js.map +1 -1
- package/dist/display-conditions/useConditionForms.js +38 -56
- package/dist/display-conditions/useConditionForms.js.map +1 -1
- package/dist/display-conditions/useLookupOptions.js +24 -44
- package/dist/display-conditions/useLookupOptions.js.map +1 -1
- package/dist/e-sign-offset/ESignDateSignedOffsetModal.js +42 -155
- package/dist/e-sign-offset/ESignDateSignedOffsetModal.js.map +1 -1
- package/dist/e-sign-offset/ESignOffsetRuleRow.js +12 -73
- package/dist/e-sign-offset/ESignOffsetRuleRow.js.map +1 -1
- package/dist/e-sign-offset/eSignOffsetController.js +5 -8
- package/dist/e-sign-offset/eSignOffsetController.js.map +1 -1
- package/dist/editor-core-source.d.ts +2 -2
- package/dist/editor-core-source.d.ts.map +1 -1
- package/dist/editor-core-source.js +3 -3
- package/dist/editor-core-source.js.map +1 -1
- package/dist/editor-core.js +2 -2
- package/dist/editor-core.js.map +1 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +56 -118
- package/dist/editor.js.map +1 -1
- package/dist/image-upload-error.js +3 -3
- package/dist/image-upload-error.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/loadScript.js +7 -8
- package/dist/loadScript.js.map +1 -1
- package/dist/log.js +2 -3
- package/dist/log.js.map +1 -1
- package/dist/merge-tags.js +18 -17
- package/dist/merge-tags.js.map +1 -1
- package/dist/shared/configs.js +1 -2
- package/dist/shared/configs.js.map +1 -1
- package/dist/shared/const.d.ts +70 -0
- package/dist/shared/const.d.ts.map +1 -1
- package/dist/shared/const.js +13 -4
- package/dist/shared/const.js.map +1 -1
- package/dist/shared/date-calc.js +47 -38
- package/dist/shared/date-calc.js.map +1 -1
- package/dist/shared/e-sign-offset.js +46 -63
- package/dist/shared/e-sign-offset.js.map +1 -1
- package/dist/shared/edit-icon.js +0 -1
- package/dist/shared/edit-icon.js.map +1 -1
- package/dist/shared/fonts.js +16 -17
- package/dist/shared/fonts.js.map +1 -1
- package/dist/shared/forms.js +16 -38
- package/dist/shared/forms.js.map +1 -1
- package/dist/shared/instance-id.js +6 -9
- package/dist/shared/instance-id.js.map +1 -1
- package/dist/shared/nunjucks-helpers.js +2 -5
- package/dist/shared/nunjucks-helpers.js.map +1 -1
- package/dist/shared/schema.js +52 -96
- package/dist/shared/schema.js.map +1 -1
- package/dist/shared/tools.js +6 -13
- package/dist/shared/tools.js.map +1 -1
- package/dist/store.d.ts +15 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +851 -548
- package/dist/store.js.map +1 -1
- package/dist/tools.js +133 -143
- package/dist/tools.js.map +1 -1
- package/dist/unlayer-interface.d.ts +15 -4
- package/dist/unlayer-interface.d.ts.map +1 -1
- package/dist/unlayer-interface.js +1 -2
- package/dist/unlayer-interface.js.map +1 -1
- package/dist/unlayer.js +86 -113
- package/dist/unlayer.js.map +1 -1
- package/dist/vendor/dte-shared/business-calendar-validation.utils.d.ts +25 -0
- package/dist/vendor/dte-shared/business-calendar-validation.utils.js +80 -0
- package/dist/vendor/dte-shared/components/business-calendar-section.d.ts +15 -0
- package/dist/vendor/dte-shared/components/business-calendar-section.js +14 -0
- package/dist/vendor/dte-shared/components/schedule-drawer.d.ts +18 -0
- package/dist/vendor/dte-shared/components/schedule-drawer.js +119 -0
- package/dist/vendor/dte-shared/components/schedule-picker.d.ts +8 -0
- package/dist/vendor/dte-shared/components/schedule-picker.js +88 -0
- package/dist/vendor/dte-shared/constants.d.ts +31 -0
- package/dist/vendor/dte-shared/constants.js +34 -0
- package/dist/vendor/dte-shared/field-schedule-editor-context.d.ts +31 -0
- package/dist/vendor/dte-shared/field-schedule-editor-context.js +110 -0
- package/dist/vendor/dte-shared/index.d.ts +8 -0
- package/dist/vendor/dte-shared/index.js +7 -0
- package/dist/vendor/dte-shared/schedule-bindings.utils.d.ts +22 -0
- package/dist/vendor/dte-shared/schedule-bindings.utils.js +31 -0
- package/dist/vendor/dte-shared/styles/schedule.css +19 -0
- package/dist/vendor/dte-shared/types.d.ts +129 -0
- package/dist/vendor/dte-shared/types.js +1 -0
- package/package.json +7 -1
- package/src/__tests__/business-calendar-drawer.test.tsx +183 -0
- package/src/__tests__/business-calendar-requests.test.ts +166 -0
- package/src/__tests__/business-calendar-state.test.tsx +142 -0
- package/src/__tests__/condition-row.test.tsx +51 -8
- package/src/__tests__/e-sign-offset-modal.test.tsx +13 -2
- package/src/__tests__/store.business-calendar.test.ts +185 -0
- package/src/__tests__/unlayer.e-sign-types.test.ts +30 -0
- package/src/business-calendar/BusinessCalendarDrawer.tsx +76 -0
- package/src/business-calendar/business-calendar-requests.ts +80 -0
- package/src/business-calendar/business-calendar-state.ts +113 -0
- package/src/business-calendar/useBusinessCalendarRequests.ts +49 -0
- package/src/display-conditions/ConditionGroup.tsx +13 -3
- package/src/display-conditions/ConditionGroupsSection.tsx +24 -21
- package/src/display-conditions/ConditionRow.tsx +75 -32
- package/src/display-conditions/DisplayConditionModal.tsx +18 -59
- package/src/e-sign-offset/ESignDateSignedOffsetModal.tsx +6 -6
- package/src/editor-core-source.ts +2 -2
- package/src/editor.tsx +15 -0
- package/src/index.ts +10 -0
- package/src/shared/const.ts +59 -0
- package/src/store.ts +67 -5
- package/src/unlayer-interface.tsx +15 -4
- package/src/unlayer.tsx +5 -5
|
@@ -3,21 +3,22 @@ import { TextField } from '@servicetitan/anvil2';
|
|
|
3
3
|
import { SelectField, SelectFieldSync } from '@servicetitan/anvil2/beta';
|
|
4
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
5
|
import { useLookupOptions } from './useLookupOptions';
|
|
6
|
-
const toOption = (option)=>({
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const toOption = (option) => ({
|
|
7
|
+
id: option.key,
|
|
8
|
+
label: option.label,
|
|
9
|
+
});
|
|
10
10
|
/*
|
|
11
11
|
* Searchable sources return nothing until the user types, which would make the
|
|
12
12
|
* dropdown show its built-in "No match found" empty state on open — confusing
|
|
13
13
|
* before any search has happened. Render a disabled hint instead so the list is
|
|
14
14
|
* never mistaken for "no results".
|
|
15
|
-
*/
|
|
15
|
+
*/
|
|
16
|
+
const SEARCH_HINT_OPTION = {
|
|
16
17
|
id: '__lookup_search_hint__',
|
|
17
18
|
label: 'Start typing to search…',
|
|
18
|
-
disabled: true
|
|
19
|
+
disabled: true,
|
|
19
20
|
};
|
|
20
|
-
const sanitizeNumericInput = (raw)=>{
|
|
21
|
+
const sanitizeNumericInput = (raw) => {
|
|
21
22
|
let value = raw.replaceAll(/[^0-9.-]/g, '');
|
|
22
23
|
const isNegative = value.startsWith('-');
|
|
23
24
|
value = value.replaceAll('-', '');
|
|
@@ -39,66 +40,48 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
39
40
|
* Unlayer persists conditions as a Nunjucks string, so a saved searchable value
|
|
40
41
|
* has no stored label — we display the saved key as the label until the user
|
|
41
42
|
* re-searches and re-selects.
|
|
42
|
-
*/
|
|
43
|
+
*/
|
|
44
|
+
export function LookupValueControl({ fieldType, lookupSource, onChange, value, }) {
|
|
43
45
|
const { loadOptions, options, resolveOptions, status } = useLookupOptions(lookupSource);
|
|
44
|
-
const staticOptions = useMemo(()=>options.map(toOption), [
|
|
45
|
-
options
|
|
46
|
-
]);
|
|
46
|
+
const staticOptions = useMemo(() => options.map(toOption), [options]);
|
|
47
47
|
/*
|
|
48
48
|
* Fall back to the raw value so a saved key that the host omits from its list
|
|
49
49
|
* (e.g. an inactive/renamed option) still shows on edit instead of vanishing.
|
|
50
|
-
*/
|
|
51
|
-
|
|
50
|
+
*/
|
|
51
|
+
const staticSelected = useMemo(() => {
|
|
52
|
+
var _a;
|
|
52
53
|
if (!value) {
|
|
53
54
|
return null;
|
|
54
55
|
}
|
|
55
|
-
return (
|
|
56
|
-
|
|
57
|
-
label: value
|
|
58
|
-
};
|
|
59
|
-
}, [
|
|
60
|
-
staticOptions,
|
|
61
|
-
value
|
|
62
|
-
]);
|
|
56
|
+
return ((_a = staticOptions.find(option => String(option.id) === value)) !== null && _a !== void 0 ? _a : { id: value, label: value });
|
|
57
|
+
}, [staticOptions, value]);
|
|
63
58
|
/*
|
|
64
59
|
* Ensure the saved value is present in the list so it is visible/selectable
|
|
65
60
|
* even when the host did not return it.
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
];
|
|
61
|
+
*/
|
|
62
|
+
const staticOptionsWithSelected = useMemo(() => {
|
|
63
|
+
if (staticSelected &&
|
|
64
|
+
!staticOptions.some(option => String(option.id) === String(staticSelected.id))) {
|
|
65
|
+
return [staticSelected, ...staticOptions];
|
|
72
66
|
}
|
|
73
67
|
return staticOptions;
|
|
74
|
-
}, [
|
|
75
|
-
|
|
76
|
-
staticSelected
|
|
77
|
-
]);
|
|
78
|
-
const [searchableSelected, setSearchableSelected] = useState(value ? {
|
|
79
|
-
id: value,
|
|
80
|
-
label: value
|
|
81
|
-
} : null);
|
|
68
|
+
}, [staticOptions, staticSelected]);
|
|
69
|
+
const [searchableSelected, setSearchableSelected] = useState(value ? { id: value, label: value } : null);
|
|
82
70
|
// Tracks the key we've already turned into a human-readable label so we don't re-resolve it.
|
|
83
71
|
const resolvedKeyRef = useRef(null);
|
|
84
|
-
useEffect(()=>{
|
|
85
|
-
setSearchableSelected(
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
setSearchableSelected(prev => {
|
|
86
74
|
if (!value) {
|
|
87
75
|
return null;
|
|
88
76
|
}
|
|
89
77
|
if ((prev === null || prev === void 0 ? void 0 : prev.id) === value) {
|
|
90
78
|
return prev;
|
|
91
79
|
}
|
|
92
|
-
return {
|
|
93
|
-
id: value,
|
|
94
|
-
label: value
|
|
95
|
-
};
|
|
80
|
+
return { id: value, label: value };
|
|
96
81
|
});
|
|
97
|
-
}, [
|
|
98
|
-
value
|
|
99
|
-
]);
|
|
82
|
+
}, [value]);
|
|
100
83
|
// On open (or when a saved searchable value appears), ask the host to resolve key -> label.
|
|
101
|
-
useEffect(()=>{
|
|
84
|
+
useEffect(() => {
|
|
102
85
|
if (status !== 'searchable' || !value) {
|
|
103
86
|
resolvedKeyRef.current = null;
|
|
104
87
|
return;
|
|
@@ -107,90 +90,44 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
107
90
|
return;
|
|
108
91
|
}
|
|
109
92
|
let cancelled = false;
|
|
110
|
-
resolveOptions([
|
|
111
|
-
value
|
|
112
|
-
]).then((result)=>{
|
|
93
|
+
resolveOptions([value]).then(result => {
|
|
113
94
|
if (cancelled) {
|
|
114
95
|
return;
|
|
115
96
|
}
|
|
116
|
-
const match = result.find(
|
|
97
|
+
const match = result.find(option => option.key === value);
|
|
117
98
|
if (match) {
|
|
118
99
|
resolvedKeyRef.current = value;
|
|
119
|
-
setSearchableSelected({
|
|
120
|
-
id: match.key,
|
|
121
|
-
label: match.label
|
|
122
|
-
});
|
|
100
|
+
setSearchableSelected({ id: match.key, label: match.label });
|
|
123
101
|
}
|
|
124
102
|
});
|
|
125
|
-
return ()=>{
|
|
103
|
+
return () => {
|
|
126
104
|
cancelled = true;
|
|
127
105
|
};
|
|
128
|
-
}, [
|
|
129
|
-
|
|
130
|
-
value,
|
|
131
|
-
resolveOptions
|
|
132
|
-
]);
|
|
133
|
-
const handleLoadOptions = useCallback(async (query)=>{
|
|
106
|
+
}, [status, value, resolveOptions]);
|
|
107
|
+
const handleLoadOptions = useCallback(async (query) => {
|
|
134
108
|
if (!query.trim()) {
|
|
135
|
-
return [
|
|
136
|
-
SEARCH_HINT_OPTION
|
|
137
|
-
];
|
|
109
|
+
return [SEARCH_HINT_OPTION];
|
|
138
110
|
}
|
|
139
111
|
const result = await loadOptions(query);
|
|
140
112
|
return result.map(toOption);
|
|
141
|
-
}, [
|
|
142
|
-
loadOptions
|
|
143
|
-
]);
|
|
113
|
+
}, [loadOptions]);
|
|
144
114
|
if (status === 'loading') {
|
|
145
|
-
return
|
|
146
|
-
label: "Value",
|
|
147
|
-
flex: 1,
|
|
148
|
-
disabled: true,
|
|
149
|
-
value: "",
|
|
150
|
-
placeholder: "",
|
|
151
|
-
"aria-label": "Value"
|
|
152
|
-
});
|
|
115
|
+
return (_jsx(TextField, { label: "Value", flex: 1, disabled: true, value: "", placeholder: "", "aria-label": "Value" }));
|
|
153
116
|
}
|
|
154
117
|
if (status === 'static') {
|
|
155
|
-
return
|
|
156
|
-
flex: 1,
|
|
157
|
-
label: "Value",
|
|
158
|
-
placeholder: "Search value...",
|
|
159
|
-
options: staticOptionsWithSelected,
|
|
160
|
-
value: staticSelected,
|
|
161
|
-
onSelectedOptionChange: (option)=>onChange(option ? String(option.id) : '')
|
|
162
|
-
});
|
|
118
|
+
return (_jsx(SelectFieldSync, { flex: 1, label: "Value", placeholder: "Search value...", options: staticOptionsWithSelected, value: staticSelected, onSelectedOptionChange: option => onChange(option ? String(option.id) : '') }));
|
|
163
119
|
}
|
|
164
120
|
if (status === 'searchable') {
|
|
165
|
-
return
|
|
166
|
-
flex: 1,
|
|
167
|
-
label: "Value",
|
|
168
|
-
placeholder: "Type to search...",
|
|
169
|
-
initialLoad: "open",
|
|
170
|
-
loadOptions: handleLoadOptions,
|
|
171
|
-
value: searchableSelected,
|
|
172
|
-
onSelectedOptionChange: (option)=>{
|
|
121
|
+
return (_jsx(SelectField, { flex: 1, label: "Value", placeholder: "Type to search...", initialLoad: "open", loadOptions: handleLoadOptions, value: searchableSelected, onSelectedOptionChange: option => {
|
|
173
122
|
resolvedKeyRef.current = option ? String(option.id) : null;
|
|
174
123
|
setSearchableSelected(option);
|
|
175
124
|
onChange(option ? String(option.id) : '');
|
|
176
|
-
}
|
|
177
|
-
});
|
|
125
|
+
} }));
|
|
178
126
|
}
|
|
179
127
|
// idle / fallback (no source, empty, error, or timeout) -> free text.
|
|
180
|
-
const handleTextChange = (raw)=>{
|
|
128
|
+
const handleTextChange = (raw) => {
|
|
181
129
|
onChange(fieldType === 'number' ? sanitizeNumericInput(raw) : raw);
|
|
182
130
|
};
|
|
183
|
-
return
|
|
184
|
-
label: "Value",
|
|
185
|
-
flex: 1,
|
|
186
|
-
value: value,
|
|
187
|
-
onChange: (e)=>handleTextChange(e.target.value),
|
|
188
|
-
placeholder: fieldType === 'number' ? 'e.g. 1.5' : 'Enter value...',
|
|
189
|
-
"aria-label": "Value",
|
|
190
|
-
...fieldType === 'number' && {
|
|
191
|
-
inputMode: 'decimal'
|
|
192
|
-
}
|
|
193
|
-
});
|
|
131
|
+
return (_jsx(TextField, { label: "Value", flex: 1, value: value, onChange: e => handleTextChange(e.target.value), placeholder: fieldType === 'number' ? 'e.g. 1.5' : 'Enter value...', "aria-label": "Value", ...(fieldType === 'number' && { inputMode: 'decimal' }) }));
|
|
194
132
|
}
|
|
195
|
-
|
|
196
133
|
//# sourceMappingURL=LookupValueControl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/LookupValueControl.tsx"],"sourcesContent":["import { TextField } from '@servicetitan/anvil2';\nimport { SelectField, SelectFieldOption, SelectFieldSync } from '@servicetitan/anvil2/beta';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { LookupOption } from './lookupOptionsController';\nimport { useLookupOptions } from './useLookupOptions';\n\nexport interface LookupValueControlProps {\n value: string;\n fieldType: 'number' | 'string';\n /** The selected data point's `options.fieldLookupSource`; empty -> free-text input. */\n lookupSource?: string;\n onChange: (value: string) => void;\n}\n\nconst toOption = (option: LookupOption): SelectFieldOption => ({\n id: option.key,\n label: option.label,\n});\n\n/*\n * Searchable sources return nothing until the user types, which would make the\n * dropdown show its built-in \"No match found\" empty state on open — confusing\n * before any search has happened. Render a disabled hint instead so the list is\n * never mistaken for \"no results\".\n */\nconst SEARCH_HINT_OPTION: SelectFieldOption = {\n id: '__lookup_search_hint__',\n label: 'Start typing to search…',\n disabled: true,\n};\n\nconst sanitizeNumericInput = (raw: string): string => {\n let value = raw.replaceAll(/[^0-9.-]/g, '');\n const isNegative = value.startsWith('-');\n value = value.replaceAll('-', '');\n if (isNegative) {\n value = `-${value}`;\n }\n const firstDot = value.indexOf('.');\n if (firstDot >= 0) {\n value = `${value.slice(0, firstDot + 1)}${value.slice(firstDot + 1).replaceAll('.', '')}`;\n }\n return value;\n};\n\n/**\n * Renders the value control for a single condition based on the field's lookup source:\n * - `static` -> full list returned by the host, filtered locally (`SelectFieldSync`).\n * - `searchable` -> host searches per typed query (`SelectField` + `loadOptions`).\n * - `idle`/`fallback`/`loading` -> free-text input (never block the user).\n *\n * Unlayer persists conditions as a Nunjucks string, so a saved searchable value\n * has no stored label — we display the saved key as the label until the user\n * re-searches and re-selects.\n */\nexport function LookupValueControl({\n fieldType,\n lookupSource,\n onChange,\n value,\n}: Readonly<LookupValueControlProps>) {\n const { loadOptions, options, resolveOptions, status } = useLookupOptions(lookupSource);\n\n const staticOptions = useMemo<SelectFieldOption[]>(() => options.map(toOption), [options]);\n\n /*\n * Fall back to the raw value so a saved key that the host omits from its list\n * (e.g. an inactive/renamed option) still shows on edit instead of vanishing.\n */\n const staticSelected = useMemo<SelectFieldOption | null>(() => {\n if (!value) {\n return null;\n }\n return (\n staticOptions.find(option => String(option.id) === value) ?? { id: value, label: value }\n );\n }, [staticOptions, value]);\n\n /*\n * Ensure the saved value is present in the list so it is visible/selectable\n * even when the host did not return it.\n */\n const staticOptionsWithSelected = useMemo<SelectFieldOption[]>(() => {\n if (\n staticSelected &&\n !staticOptions.some(option => String(option.id) === String(staticSelected.id))\n ) {\n return [staticSelected, ...staticOptions];\n }\n return staticOptions;\n }, [staticOptions, staticSelected]);\n\n const [searchableSelected, setSearchableSelected] = useState<SelectFieldOption | null>(\n value ? { id: value, label: value } : null,\n );\n\n // Tracks the key we've already turned into a human-readable label so we don't re-resolve it.\n const resolvedKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n setSearchableSelected(prev => {\n if (!value) {\n return null;\n }\n if (prev?.id === value) {\n return prev;\n }\n return { id: value, label: value };\n });\n }, [value]);\n\n // On open (or when a saved searchable value appears), ask the host to resolve key -> label.\n useEffect(() => {\n if (status !== 'searchable' || !value) {\n resolvedKeyRef.current = null;\n return;\n }\n if (resolvedKeyRef.current === value) {\n return;\n }\n\n let cancelled = false;\n resolveOptions([value]).then(result => {\n if (cancelled) {\n return;\n }\n const match = result.find(option => option.key === value);\n if (match) {\n resolvedKeyRef.current = value;\n setSearchableSelected({ id: match.key, label: match.label });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [status, value, resolveOptions]);\n\n const handleLoadOptions = useCallback(\n async (query: string) => {\n if (!query.trim()) {\n return [SEARCH_HINT_OPTION];\n }\n const result = await loadOptions(query);\n return result.map(toOption);\n },\n [loadOptions],\n );\n\n if (status === 'loading') {\n return (\n <TextField label=\"Value\" flex={1} disabled value=\"\" placeholder=\"\" aria-label=\"Value\" />\n );\n }\n\n if (status === 'static') {\n return (\n <SelectFieldSync\n flex={1}\n label=\"Value\"\n placeholder=\"Search value...\"\n options={staticOptionsWithSelected}\n value={staticSelected}\n onSelectedOptionChange={option => onChange(option ? String(option.id) : '')}\n />\n );\n }\n\n if (status === 'searchable') {\n return (\n <SelectField\n flex={1}\n label=\"Value\"\n placeholder=\"Type to search...\"\n initialLoad=\"open\"\n loadOptions={handleLoadOptions}\n value={searchableSelected}\n onSelectedOptionChange={option => {\n resolvedKeyRef.current = option ? String(option.id) : null;\n setSearchableSelected(option);\n onChange(option ? String(option.id) : '');\n }}\n />\n );\n }\n\n // idle / fallback (no source, empty, error, or timeout) -> free text.\n const handleTextChange = (raw: string) => {\n onChange(fieldType === 'number' ? sanitizeNumericInput(raw) : raw);\n };\n\n return (\n <TextField\n label=\"Value\"\n flex={1}\n value={value}\n onChange={e => handleTextChange(e.target.value)}\n placeholder={fieldType === 'number' ? 'e.g. 1.5' : 'Enter value...'}\n aria-label=\"Value\"\n {...(fieldType === 'number' && { inputMode: 'decimal' })}\n />\n );\n}\n"],"names":["TextField","SelectField","SelectFieldSync","useCallback","useEffect","useMemo","useRef","useState","useLookupOptions","toOption","option","id","key","label","SEARCH_HINT_OPTION","disabled","sanitizeNumericInput","raw","value","replaceAll","isNegative","startsWith","firstDot","indexOf","slice","LookupValueControl","fieldType","lookupSource","onChange","loadOptions","options","resolveOptions","status","staticOptions","map","staticSelected","find","String","staticOptionsWithSelected","some","searchableSelected","setSearchableSelected","resolvedKeyRef","prev","current","cancelled","then","result","match","handleLoadOptions","query","trim","flex","placeholder","aria-label","onSelectedOptionChange","initialLoad","handleTextChange","e","target","inputMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LookupValueControl.js","sourceRoot":"","sources":["../../src/display-conditions/LookupValueControl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Chip, Divider } from '@servicetitan/anvil2';
|
|
3
3
|
export function SeparatorWithChip({ color = '#94a3b8', label }) {
|
|
4
|
-
return
|
|
5
|
-
alignContent: "center",
|
|
6
|
-
spacing: "2",
|
|
7
|
-
children: /*#__PURE__*/ _jsx(Chip, {
|
|
8
|
-
label: label,
|
|
9
|
-
size: "small",
|
|
10
|
-
color: color
|
|
11
|
-
})
|
|
12
|
-
});
|
|
4
|
+
return (_jsx(Divider, { alignContent: "center", spacing: "2", children: _jsx(Chip, { label: label, size: "small", color: color }) }));
|
|
13
5
|
}
|
|
14
|
-
|
|
15
6
|
//# sourceMappingURL=SeparatorWithChip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/SeparatorWithChip.tsx"],"
|
|
1
|
+
{"version":3,"file":"SeparatorWithChip.js","sourceRoot":"","sources":["../../src/display-conditions/SeparatorWithChip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAOrD,MAAM,UAAU,iBAAiB,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAoC;IAC5F,OAAO,CACH,KAAC,OAAO,IAAC,YAAY,EAAC,QAAQ,EAAC,OAAO,EAAC,GAAG,YACtC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,KAAK,GAAI,GAC3C,CACb,CAAC;AACN,CAAC"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
export const generateId = ()=>Math.random().toString(36).slice(2, 11);
|
|
2
|
-
export const defaultCondition = ()=>({
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export const defaultGroup = ()=>({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
groups: [
|
|
17
|
-
defaultGroup()
|
|
18
|
-
]
|
|
19
|
-
});
|
|
1
|
+
export const generateId = () => Math.random().toString(36).slice(2, 11);
|
|
2
|
+
export const defaultCondition = () => ({
|
|
3
|
+
dataPointKey: '',
|
|
4
|
+
id: generateId(),
|
|
5
|
+
operator: 'is_equal_to',
|
|
6
|
+
value: '',
|
|
7
|
+
});
|
|
8
|
+
export const defaultGroup = () => ({
|
|
9
|
+
conditions: [defaultCondition()],
|
|
10
|
+
id: generateId(),
|
|
11
|
+
});
|
|
12
|
+
export const defaultState = () => ({
|
|
13
|
+
behavior: 'show',
|
|
14
|
+
groups: [defaultGroup()],
|
|
15
|
+
});
|
|
20
16
|
export const MODAL_CONTENT_MAX_HEIGHT = '70vh';
|
|
21
|
-
|
|
22
17
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/constants.ts"],"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/display-conditions/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAoB,EAAE,CAAC,CAAC;IACpD,YAAY,EAAE,EAAE;IAChB,EAAE,EAAE,UAAU,EAAE;IAChB,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAmB,EAAE,CAAC,CAAC;IAC/C,UAAU,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAChC,EAAE,EAAE,UAAU,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,GAA0B,EAAE,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const DISPLAY_CONDITION_EVENT = 'dte:display-condition';
|
|
2
2
|
const displayConditionEvents = new EventTarget();
|
|
3
3
|
let activeListeners = 0;
|
|
4
|
-
export const onDisplayCondition = (listener)=>{
|
|
5
|
-
const handler = (event)=>{
|
|
4
|
+
export const onDisplayCondition = (listener) => {
|
|
5
|
+
const handler = (event) => {
|
|
6
6
|
const detail = event.detail;
|
|
7
7
|
if (!detail) {
|
|
8
8
|
return;
|
|
@@ -11,19 +11,16 @@ export const onDisplayCondition = (listener)=>{
|
|
|
11
11
|
};
|
|
12
12
|
activeListeners += 1;
|
|
13
13
|
displayConditionEvents.addEventListener(DISPLAY_CONDITION_EVENT, handler);
|
|
14
|
-
return ()=>{
|
|
14
|
+
return () => {
|
|
15
15
|
activeListeners = Math.max(0, activeListeners - 1);
|
|
16
16
|
displayConditionEvents.removeEventListener(DISPLAY_CONDITION_EVENT, handler);
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
export const emitDisplayCondition = (request)=>{
|
|
19
|
+
export const emitDisplayCondition = (request) => {
|
|
20
20
|
if (activeListeners === 0) {
|
|
21
21
|
request.done(request.data);
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
displayConditionEvents.dispatchEvent(new CustomEvent(DISPLAY_CONDITION_EVENT, {
|
|
25
|
-
detail: request
|
|
26
|
-
}));
|
|
24
|
+
displayConditionEvents.dispatchEvent(new CustomEvent(DISPLAY_CONDITION_EVENT, { detail: request }));
|
|
27
25
|
};
|
|
28
|
-
|
|
29
26
|
//# sourceMappingURL=displayConditionController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/displayConditionController.ts"],"
|
|
1
|
+
{"version":3,"file":"displayConditionController.js","sourceRoot":"","sources":["../../src/display-conditions/displayConditionController.ts"],"names":[],"mappings":"AAOA,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AACxD,MAAM,sBAAsB,GAAG,IAAI,WAAW,EAAE,CAAC;AACjD,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAkB,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAI,KAA8C,CAAC,MAAM,CAAC;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,eAAe,IAAI,CAAC,CAAC;IACrB,sBAAsB,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,OAAwB,CAAC,CAAC;IAE3F,OAAO,GAAG,EAAE;QACR,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QACnD,sBAAsB,CAAC,mBAAmB,CACtC,uBAAuB,EACvB,OAAwB,CAC3B,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAgC,EAAE,EAAE;IACrE,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACX,CAAC;IAED,sBAAsB,CAAC,aAAa,CAChC,IAAI,WAAW,CAA0B,uBAAuB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CACzF,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -25,16 +25,17 @@
|
|
|
25
25
|
* The host-side resolver is intentionally NOT implemented in this package. The
|
|
26
26
|
* host listens via `onLookupOptionsRequest` and replies via
|
|
27
27
|
* `emitLookupOptionsResponse`.
|
|
28
|
-
*/
|
|
28
|
+
*/
|
|
29
|
+
export const LOOKUP_OPTIONS_REQUEST_EVENT = 'dte-unlayer:lookup-options-request';
|
|
29
30
|
export const LOOKUP_OPTIONS_RESPONSE_EVENT = 'dte-unlayer:lookup-options-response';
|
|
30
31
|
const lookupOptionsEvents = new EventTarget();
|
|
31
|
-
/** editor -> host: ask the host to resolve options for a lookup source. */
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}));
|
|
32
|
+
/** editor -> host: ask the host to resolve options for a lookup source. */
|
|
33
|
+
export const emitLookupOptionsRequest = (request) => {
|
|
34
|
+
lookupOptionsEvents.dispatchEvent(new CustomEvent(LOOKUP_OPTIONS_REQUEST_EVENT, { detail: request }));
|
|
35
35
|
};
|
|
36
|
-
/** host side: listen for editor requests. Returns an unsubscribe function. */
|
|
37
|
-
|
|
36
|
+
/** host side: listen for editor requests. Returns an unsubscribe function. */
|
|
37
|
+
export const onLookupOptionsRequest = (listener) => {
|
|
38
|
+
const handler = (event) => {
|
|
38
39
|
const detail = event.detail;
|
|
39
40
|
if (!detail) {
|
|
40
41
|
return;
|
|
@@ -42,17 +43,17 @@ const lookupOptionsEvents = new EventTarget();
|
|
|
42
43
|
listener(detail);
|
|
43
44
|
};
|
|
44
45
|
lookupOptionsEvents.addEventListener(LOOKUP_OPTIONS_REQUEST_EVENT, handler);
|
|
45
|
-
return ()=>{
|
|
46
|
+
return () => {
|
|
46
47
|
lookupOptionsEvents.removeEventListener(LOOKUP_OPTIONS_REQUEST_EVENT, handler);
|
|
47
48
|
};
|
|
48
49
|
};
|
|
49
|
-
/** host -> editor: deliver resolved options back to the editor. */
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}));
|
|
50
|
+
/** host -> editor: deliver resolved options back to the editor. */
|
|
51
|
+
export const emitLookupOptionsResponse = (response) => {
|
|
52
|
+
lookupOptionsEvents.dispatchEvent(new CustomEvent(LOOKUP_OPTIONS_RESPONSE_EVENT, { detail: response }));
|
|
53
53
|
};
|
|
54
|
-
/** editor side: listen for host responses. Returns an unsubscribe function. */
|
|
55
|
-
|
|
54
|
+
/** editor side: listen for host responses. Returns an unsubscribe function. */
|
|
55
|
+
export const onLookupOptionsResponse = (listener) => {
|
|
56
|
+
const handler = (event) => {
|
|
56
57
|
const detail = event.detail;
|
|
57
58
|
if (!detail) {
|
|
58
59
|
return;
|
|
@@ -60,9 +61,8 @@ const lookupOptionsEvents = new EventTarget();
|
|
|
60
61
|
listener(detail);
|
|
61
62
|
};
|
|
62
63
|
lookupOptionsEvents.addEventListener(LOOKUP_OPTIONS_RESPONSE_EVENT, handler);
|
|
63
|
-
return ()=>{
|
|
64
|
+
return () => {
|
|
64
65
|
lookupOptionsEvents.removeEventListener(LOOKUP_OPTIONS_RESPONSE_EVENT, handler);
|
|
65
66
|
};
|
|
66
67
|
};
|
|
67
|
-
|
|
68
68
|
//# sourceMappingURL=lookupOptionsController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/lookupOptionsController.ts"],"
|
|
1
|
+
{"version":3,"file":"lookupOptionsController.js","sourceRoot":"","sources":["../../src/display-conditions/lookupOptionsController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AA4CH,MAAM,CAAC,MAAM,4BAA4B,GAAG,oCAAoC,CAAC;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG,qCAAqC,CAAC;AAEnF,MAAM,mBAAmB,GAAG,IAAI,WAAW,EAAE,CAAC;AAE9C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACtE,mBAAmB,CAAC,aAAa,CAC7B,IAAI,WAAW,CAAuB,4BAA4B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAC3F,CAAC;AACN,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAiD,EAAE,EAAE;IACxF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAI,KAA2C,CAAC,MAAM,CAAC;QACnE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,mBAAmB,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IAE5E,OAAO,GAAG,EAAE;QACR,mBAAmB,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAA+B,EAAE,EAAE;IACzE,mBAAmB,CAAC,aAAa,CAC7B,IAAI,WAAW,CAAwB,6BAA6B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAC9F,CAAC;AACN,CAAC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAmD,EAAE,EAAE;IAC3F,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAI,KAA4C,CAAC,MAAM,CAAC;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,mBAAmB,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IAE7E,OAAO,GAAG,EAAE;QACR,mBAAmB,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC,CAAC;AACN,CAAC,CAAC"}
|