@osdk/react-components 0.9.0 → 0.10.0-main-b355bc3b41a4d89ec093054dc8d2845c772ef1e2
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/CHANGELOG.md +14 -0
- package/README.md +23 -0
- package/build/browser/action-form/FormFieldApi.js +8 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/fields/AsyncDropdownField.js +81 -0
- package/build/browser/action-form/fields/AsyncDropdownField.js.map +1 -0
- package/build/browser/action-form/fields/AsyncDropdownField.module.css +31 -0
- package/build/browser/action-form/fields/AsyncDropdownField.module.css.js +8 -0
- package/build/browser/action-form/fields/DropdownField.js +29 -14
- package/build/browser/action-form/fields/DropdownField.js.map +1 -1
- package/build/browser/action-form/fields/FormFieldRenderer.js +17 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/ObjectSelectField.js +109 -0
- package/build/browser/action-form/fields/ObjectSelectField.js.map +1 -0
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +14 -5
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/browser/base-components/combobox/Combobox.module.css +23 -2
- package/build/browser/base-components/combobox/Combobox.module.css.js +3 -3
- package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
- package/build/browser/shared/hooks/useDebouncedValue.js +35 -0
- package/build/browser/shared/hooks/useDebouncedValue.js.map +1 -0
- package/build/browser/shared/hooks/useEventCallback.js +44 -0
- package/build/browser/shared/hooks/useEventCallback.js.map +1 -0
- package/build/browser/shared/hooks/useInfiniteScroll.js +81 -0
- package/build/browser/shared/hooks/useInfiniteScroll.js.map +1 -0
- package/build/browser/styles.css +73 -2
- package/build/browser/tokens/component-tokens/async-dropdown.css +16 -0
- package/build/browser/tokens.css +1 -0
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-EEES66LS.cjs → chunk-5DVHLBWS.cjs} +3 -3
- package/build/cjs/chunk-5DVHLBWS.cjs.map +1 -0
- package/build/cjs/{chunk-OXP3XQE4.cjs → chunk-ALZS624H.cjs} +47 -47
- package/build/cjs/{chunk-OXP3XQE4.cjs.map → chunk-ALZS624H.cjs.map} +1 -1
- package/build/cjs/{chunk-UEY63J2G.cjs → chunk-FURJRQWI.cjs} +9 -9
- package/build/cjs/{chunk-UEY63J2G.cjs.map → chunk-FURJRQWI.cjs.map} +1 -1
- package/build/cjs/{chunk-RY2GVYT2.cjs → chunk-MVNWOKH2.cjs} +49 -36
- package/build/cjs/chunk-MVNWOKH2.cjs.map +1 -0
- package/build/cjs/{chunk-O5ZAMFDU.cjs → chunk-QWFJF7IM.cjs} +468 -207
- package/build/cjs/chunk-QWFJF7IM.cjs.map +1 -0
- package/build/cjs/{chunk-2FPKTOPE.cjs → chunk-XBXC6VAS.cjs} +2 -2
- package/build/cjs/{chunk-2FPKTOPE.cjs.map → chunk-XBXC6VAS.cjs.map} +1 -1
- package/build/cjs/{chunk-SHTQGKS5.cjs → chunk-Z3CXMFCZ.cjs} +4 -4
- package/build/cjs/{chunk-SHTQGKS5.cjs.map → chunk-Z3CXMFCZ.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +6 -6
- package/build/cjs/public/experimental/action-form.css +24 -1
- package/build/cjs/public/experimental/action-form.css.map +1 -1
- package/build/cjs/public/experimental/action-form.d.cts +48 -3
- package/build/cjs/public/experimental/filter-list.cjs +7 -7
- package/build/cjs/public/experimental/filter-list.css +9 -1
- package/build/cjs/public/experimental/filter-list.css.map +1 -1
- package/build/cjs/public/experimental/object-table.cjs +10 -10
- package/build/cjs/public/experimental/object-table.css +9 -1
- package/build/cjs/public/experimental/object-table.css.map +1 -1
- package/build/cjs/public/experimental/pdf-viewer.cjs +24 -24
- package/build/cjs/public/experimental.cjs +41 -41
- package/build/cjs/public/experimental.css +24 -1
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/esm/action-form/FormFieldApi.js +8 -0
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/fields/AsyncDropdownField.js +81 -0
- package/build/esm/action-form/fields/AsyncDropdownField.js.map +1 -0
- package/build/esm/action-form/fields/AsyncDropdownField.module.css +31 -0
- package/build/esm/action-form/fields/DropdownField.js +29 -14
- package/build/esm/action-form/fields/DropdownField.js.map +1 -1
- package/build/esm/action-form/fields/FormFieldRenderer.js +17 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/ObjectSelectField.js +109 -0
- package/build/esm/action-form/fields/ObjectSelectField.js.map +1 -0
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +14 -5
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/esm/base-components/combobox/Combobox.module.css +23 -2
- package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
- package/build/esm/shared/hooks/useDebouncedValue.js +35 -0
- package/build/esm/shared/hooks/useDebouncedValue.js.map +1 -0
- package/build/esm/shared/hooks/useEventCallback.js +44 -0
- package/build/esm/shared/hooks/useEventCallback.js.map +1 -0
- package/build/esm/shared/hooks/useInfiniteScroll.js +81 -0
- package/build/esm/shared/hooks/useInfiniteScroll.js.map +1 -0
- package/build/esm/tokens/component-tokens/async-dropdown.css +16 -0
- package/build/esm/tokens.css +1 -0
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/action-form/FormFieldApi.d.ts +48 -3
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/fields/AsyncDropdownField.d.ts +25 -0
- package/build/types/action-form/fields/AsyncDropdownField.d.ts.map +1 -0
- package/build/types/action-form/fields/DropdownField.d.ts +2 -2
- package/build/types/action-form/fields/DropdownField.d.ts.map +1 -1
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/ObjectSelectField.d.ts +3 -0
- package/build/types/action-form/fields/ObjectSelectField.d.ts.map +1 -0
- package/build/types/shared/hooks/useDebouncedValue.d.ts +5 -0
- package/build/types/shared/hooks/useDebouncedValue.d.ts.map +1 -0
- package/build/types/shared/hooks/useEventCallback.d.ts +13 -0
- package/build/types/shared/hooks/useEventCallback.d.ts.map +1 -0
- package/build/types/shared/hooks/useInfiniteScroll.d.ts +19 -0
- package/build/types/shared/hooks/useInfiniteScroll.d.ts.map +1 -0
- package/package.json +9 -9
- package/build/cjs/chunk-EEES66LS.cjs.map +0 -1
- package/build/cjs/chunk-O5ZAMFDU.cjs.map +0 -1
- package/build/cjs/chunk-RY2GVYT2.cjs.map +0 -1
|
@@ -1,32 +1,51 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkUCTQICPR_cjs = require('./chunk-UCTQICPR.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkMVNWOKH2_cjs = require('./chunk-MVNWOKH2.cjs');
|
|
5
5
|
var chunkJLESWL47_cjs = require('./chunk-JLESWL47.cjs');
|
|
6
6
|
var chunkY5ULR6PM_cjs = require('./chunk-Y5ULR6PM.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkXBXC6VAS_cjs = require('./chunk-XBXC6VAS.cjs');
|
|
8
8
|
var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
|
|
9
|
-
var
|
|
9
|
+
var chunk5DVHLBWS_cjs = require('./chunk-5DVHLBWS.cjs');
|
|
10
10
|
var react = require('@osdk/react');
|
|
11
11
|
var experimental = require('@osdk/react/experimental');
|
|
12
|
-
var
|
|
12
|
+
var React18 = require('react');
|
|
13
13
|
var icons = require('@blueprintjs/icons');
|
|
14
14
|
var classnames = require('classnames');
|
|
15
15
|
var reactHookForm = require('react-hook-form');
|
|
16
16
|
var input = require('@base-ui/react/input');
|
|
17
17
|
var popover = require('@base-ui/react/popover');
|
|
18
18
|
var button = require('@base-ui/react/button');
|
|
19
|
+
var lodashEs = require('lodash-es');
|
|
19
20
|
var radio = require('@base-ui/react/radio');
|
|
20
21
|
var radioGroup = require('@base-ui/react/radio-group');
|
|
21
22
|
|
|
22
23
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
function _interopNamespace(e) {
|
|
26
|
+
if (e && e.__esModule) return e;
|
|
27
|
+
var n = Object.create(null);
|
|
28
|
+
if (e) {
|
|
29
|
+
Object.keys(e).forEach(function (k) {
|
|
30
|
+
if (k !== 'default') {
|
|
31
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
32
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () { return e[k]; }
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
n.default = e;
|
|
40
|
+
return Object.freeze(n);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var React18__namespace = /*#__PURE__*/_interopNamespace(React18);
|
|
25
44
|
var classnames__default = /*#__PURE__*/_interopDefault(classnames);
|
|
26
45
|
|
|
27
46
|
function useIsMounted() {
|
|
28
|
-
const isMountedRef =
|
|
29
|
-
|
|
47
|
+
const isMountedRef = React18.useRef(true);
|
|
48
|
+
React18.useEffect(function trackMountedState() {
|
|
30
49
|
return () => {
|
|
31
50
|
isMountedRef.current = false;
|
|
32
51
|
};
|
|
@@ -36,10 +55,10 @@ function useIsMounted() {
|
|
|
36
55
|
|
|
37
56
|
// src/shared/hooks/useAsyncAction.ts
|
|
38
57
|
function useAsyncAction(action) {
|
|
39
|
-
const [isPending, setIsPending] =
|
|
40
|
-
const [error, setError] =
|
|
58
|
+
const [isPending, setIsPending] = React18.useState(false);
|
|
59
|
+
const [error, setError] = React18.useState(void 0);
|
|
41
60
|
const isMountedRef = useIsMounted();
|
|
42
|
-
const execute =
|
|
61
|
+
const execute = React18.useCallback(async (...args) => {
|
|
43
62
|
setError(void 0);
|
|
44
63
|
setIsPending(true);
|
|
45
64
|
try {
|
|
@@ -54,7 +73,7 @@ function useAsyncAction(action) {
|
|
|
54
73
|
}
|
|
55
74
|
}
|
|
56
75
|
}, [action, isMountedRef]);
|
|
57
|
-
const clearError =
|
|
76
|
+
const clearError = React18.useCallback(() => {
|
|
58
77
|
setError(void 0);
|
|
59
78
|
}, []);
|
|
60
79
|
return {
|
|
@@ -228,7 +247,7 @@ function formatBytes(bytes) {
|
|
|
228
247
|
var FormField_default = {};
|
|
229
248
|
|
|
230
249
|
// src/action-form/FormField.tsx
|
|
231
|
-
var FormField = /* @__PURE__ */
|
|
250
|
+
var FormField = /* @__PURE__ */ React18.memo(function FormFieldFn({
|
|
232
251
|
fieldKey,
|
|
233
252
|
label,
|
|
234
253
|
isRequired,
|
|
@@ -237,41 +256,41 @@ var FormField = /* @__PURE__ */ React15.memo(function FormFieldFn({
|
|
|
237
256
|
onBlur,
|
|
238
257
|
children
|
|
239
258
|
}) {
|
|
240
|
-
return /* @__PURE__ */
|
|
259
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
241
260
|
className: FormField_default.osdkFormField,
|
|
242
261
|
onBlur
|
|
243
|
-
}, label != null && /* @__PURE__ */
|
|
262
|
+
}, label != null && /* @__PURE__ */ React18__namespace.default.createElement("label", {
|
|
244
263
|
className: FormField_default.osdkFormFieldLabel,
|
|
245
264
|
htmlFor: fieldKey
|
|
246
|
-
}, label, isRequired === true && /* @__PURE__ */
|
|
265
|
+
}, label, isRequired === true && /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
247
266
|
className: FormField_default.osdkFormFieldRequired,
|
|
248
267
|
"aria-label": "required"
|
|
249
|
-
}, " ", "*")), children, error != null && /* @__PURE__ */
|
|
268
|
+
}, " ", "*")), children, error != null && /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
250
269
|
className: FormField_default.osdkFormFieldError,
|
|
251
270
|
role: "alert"
|
|
252
|
-
}, error), helperText != null && /* @__PURE__ */
|
|
271
|
+
}, error), helperText != null && /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
253
272
|
className: FormField_default.osdkFormFieldHelperText
|
|
254
273
|
}, helperText));
|
|
255
274
|
});
|
|
256
275
|
|
|
257
276
|
// src/action-form/FormFieldApi.ts
|
|
258
277
|
var EMPTY_RANGE = [null, null];
|
|
259
|
-
var CustomField = /* @__PURE__ */
|
|
278
|
+
var CustomField = /* @__PURE__ */ React18.memo(function CustomFieldFn({
|
|
260
279
|
customRenderer: CustomRenderer,
|
|
261
280
|
...baseProps
|
|
262
281
|
}) {
|
|
263
|
-
return /* @__PURE__ */
|
|
282
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(CustomRenderer, baseProps);
|
|
264
283
|
});
|
|
265
284
|
|
|
266
285
|
// src/action-form/fields/DateRangeInputField.module.css
|
|
267
286
|
var DateRangeInputField_default = {};
|
|
268
|
-
var DateRangeCalendarLazy = /* @__PURE__ */
|
|
287
|
+
var DateRangeCalendarLazy = /* @__PURE__ */ React18__namespace.default.lazy(() => import('./DateRangeCalendar-JHO2BF3Z.cjs'));
|
|
269
288
|
function LazyDateRangeCalendar(props) {
|
|
270
|
-
return /* @__PURE__ */
|
|
271
|
-
fallback: /* @__PURE__ */
|
|
272
|
-
className:
|
|
289
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(React18.Suspense, {
|
|
290
|
+
fallback: /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
291
|
+
className: chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerFallback
|
|
273
292
|
})
|
|
274
|
-
}, /* @__PURE__ */
|
|
293
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(DateRangeCalendarLazy, props));
|
|
275
294
|
}
|
|
276
295
|
|
|
277
296
|
// src/action-form/fields/DateRangeInputField.tsx
|
|
@@ -285,14 +304,14 @@ function _extends() {
|
|
|
285
304
|
}, _extends.apply(null, arguments);
|
|
286
305
|
}
|
|
287
306
|
var SHARED_INPUT_PROPS = {
|
|
288
|
-
className:
|
|
307
|
+
className: chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerInput,
|
|
289
308
|
type: "text",
|
|
290
309
|
onClick: chunkJLESWL47_cjs.stopPropagation,
|
|
291
310
|
autoComplete: "off",
|
|
292
311
|
role: "combobox",
|
|
293
312
|
"aria-haspopup": "dialog"
|
|
294
313
|
};
|
|
295
|
-
var DateRangeInputField = /* @__PURE__ */
|
|
314
|
+
var DateRangeInputField = /* @__PURE__ */ React18__namespace.default.memo(function DateRangeInputField2({
|
|
296
315
|
id,
|
|
297
316
|
value,
|
|
298
317
|
onChange,
|
|
@@ -306,23 +325,23 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
306
325
|
parseDate
|
|
307
326
|
}) {
|
|
308
327
|
const shouldCloseOnSelection = !showTime;
|
|
309
|
-
const popoverId =
|
|
310
|
-
const startInputRef =
|
|
311
|
-
const endInputRef =
|
|
312
|
-
const popoverRef =
|
|
313
|
-
const [isOpen, setIsOpen] =
|
|
314
|
-
const [activeBoundary, setActiveBoundary] =
|
|
328
|
+
const popoverId = React18.useId();
|
|
329
|
+
const startInputRef = React18.useRef(null);
|
|
330
|
+
const endInputRef = React18.useRef(null);
|
|
331
|
+
const popoverRef = React18.useRef(null);
|
|
332
|
+
const [isOpen, setIsOpen] = React18.useState(false);
|
|
333
|
+
const [activeBoundary, setActiveBoundary] = React18.useState("start");
|
|
315
334
|
const [startDate, endDate] = value ?? EMPTY_RANGE;
|
|
316
|
-
const editFormatFn = showTime ?
|
|
317
|
-
const displayFormatFn = formatDate ?? (showTime ?
|
|
318
|
-
const parseFn = parseDate ?? (showTime ?
|
|
319
|
-
const startOnChange =
|
|
335
|
+
const editFormatFn = showTime ? chunkXBXC6VAS_cjs.formatDatetimeForInput : chunkXBXC6VAS_cjs.formatDateForInput;
|
|
336
|
+
const displayFormatFn = formatDate ?? (showTime ? chunkXBXC6VAS_cjs.formatDatetimeForInput : chunkXBXC6VAS_cjs.formatDateForDisplay);
|
|
337
|
+
const parseFn = parseDate ?? (showTime ? chunkXBXC6VAS_cjs.parseDatetimeFromInput : chunkXBXC6VAS_cjs.parseDateFromInput);
|
|
338
|
+
const startOnChange = React18.useCallback((date) => {
|
|
320
339
|
if (date != null && isOverlapping(date, endDate, allowSingleDayRange)) {
|
|
321
340
|
return;
|
|
322
341
|
}
|
|
323
342
|
onChange?.([date, endDate ?? null]);
|
|
324
343
|
}, [endDate, onChange, allowSingleDayRange]);
|
|
325
|
-
const endOnChange =
|
|
344
|
+
const endOnChange = React18.useCallback((date) => {
|
|
326
345
|
if (date != null && isOverlapping(startDate, date, allowSingleDayRange)) {
|
|
327
346
|
return;
|
|
328
347
|
}
|
|
@@ -338,7 +357,7 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
338
357
|
commitAndStopEditing: commitStartAndStopEditing,
|
|
339
358
|
setInputValue: setStartInputValue,
|
|
340
359
|
setDateValue: setStartDateValue
|
|
341
|
-
} =
|
|
360
|
+
} = chunkMVNWOKH2_cjs.useDateEditState({
|
|
342
361
|
value: startDate,
|
|
343
362
|
displayFormatFn,
|
|
344
363
|
editFormatFn,
|
|
@@ -357,7 +376,7 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
357
376
|
commitAndStopEditing: commitEndAndStopEditing,
|
|
358
377
|
setInputValue: setEndInputValue,
|
|
359
378
|
setDateValue: setEndDateValue
|
|
360
|
-
} =
|
|
379
|
+
} = chunkMVNWOKH2_cjs.useDateEditState({
|
|
361
380
|
value: endDate,
|
|
362
381
|
displayFormatFn,
|
|
363
382
|
editFormatFn,
|
|
@@ -374,17 +393,17 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
374
393
|
})();
|
|
375
394
|
const startInvalid = startInputError != null || hasOverlapError;
|
|
376
395
|
const endInvalid = endInputError != null || hasOverlapError;
|
|
377
|
-
const handleStartFocus =
|
|
396
|
+
const handleStartFocus = React18.useCallback(() => {
|
|
378
397
|
beginStartEditing();
|
|
379
398
|
setActiveBoundary("start");
|
|
380
399
|
setIsOpen(true);
|
|
381
400
|
}, [beginStartEditing]);
|
|
382
|
-
const handleEndFocus =
|
|
401
|
+
const handleEndFocus = React18.useCallback(() => {
|
|
383
402
|
beginEndEditing();
|
|
384
403
|
setActiveBoundary("end");
|
|
385
404
|
setIsOpen(true);
|
|
386
405
|
}, [beginEndEditing]);
|
|
387
|
-
const handleStartBlur =
|
|
406
|
+
const handleStartBlur = React18.useCallback((e) => {
|
|
388
407
|
const related = e.relatedTarget ?? document.activeElement;
|
|
389
408
|
if (popoverRef.current?.contains(related)) {
|
|
390
409
|
e.stopPropagation();
|
|
@@ -395,7 +414,7 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
395
414
|
}
|
|
396
415
|
commitStartAndStopEditing();
|
|
397
416
|
}, [commitStartAndStopEditing]);
|
|
398
|
-
const handleEndBlur =
|
|
417
|
+
const handleEndBlur = React18.useCallback((e) => {
|
|
399
418
|
const related = e.relatedTarget ?? document.activeElement;
|
|
400
419
|
if (popoverRef.current?.contains(related)) {
|
|
401
420
|
e.stopPropagation();
|
|
@@ -406,14 +425,14 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
406
425
|
}
|
|
407
426
|
commitEndAndStopEditing();
|
|
408
427
|
}, [commitEndAndStopEditing]);
|
|
409
|
-
const closePopover =
|
|
428
|
+
const closePopover = React18.useCallback(() => {
|
|
410
429
|
setIsOpen(false);
|
|
411
430
|
stopStartEditing();
|
|
412
431
|
stopEndEditing();
|
|
413
432
|
startInputRef.current?.blur();
|
|
414
433
|
endInputRef.current?.blur();
|
|
415
434
|
}, [stopStartEditing, stopEndEditing]);
|
|
416
|
-
const handleStartKeyDown =
|
|
435
|
+
const handleStartKeyDown = React18.useCallback((e) => {
|
|
417
436
|
if (e.key === "Enter") {
|
|
418
437
|
e.preventDefault();
|
|
419
438
|
commitStartAndStopEditing();
|
|
@@ -425,7 +444,7 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
425
444
|
setIsOpen(false);
|
|
426
445
|
}
|
|
427
446
|
}, [commitStartAndStopEditing, closePopover]);
|
|
428
|
-
const handleEndKeyDown =
|
|
447
|
+
const handleEndKeyDown = React18.useCallback((e) => {
|
|
429
448
|
if (e.key === "Enter") {
|
|
430
449
|
e.preventDefault();
|
|
431
450
|
commitEndAndStopEditing();
|
|
@@ -441,14 +460,14 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
441
460
|
}
|
|
442
461
|
}
|
|
443
462
|
}, [commitEndAndStopEditing, closePopover, isOpen]);
|
|
444
|
-
const handleOpenChange =
|
|
463
|
+
const handleOpenChange = React18.useCallback((nextOpen) => {
|
|
445
464
|
if (nextOpen) {
|
|
446
465
|
setIsOpen(true);
|
|
447
466
|
} else {
|
|
448
467
|
closePopover();
|
|
449
468
|
}
|
|
450
469
|
}, [closePopover]);
|
|
451
|
-
const handleRangeSelect =
|
|
470
|
+
const handleRangeSelect = React18.useCallback((range) => {
|
|
452
471
|
const newStart = range?.from ?? null;
|
|
453
472
|
const newEnd = range?.to ?? null;
|
|
454
473
|
onChange?.([newStart, newEnd]);
|
|
@@ -463,31 +482,31 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
463
482
|
setEndDateValue(newEnd);
|
|
464
483
|
}
|
|
465
484
|
}, [onChange, shouldCloseOnSelection, closePopover, stopStartEditing, setStartDateValue, setEndDateValue]);
|
|
466
|
-
const handleStartTimeChange =
|
|
485
|
+
const handleStartTimeChange = React18.useCallback((timeString) => {
|
|
467
486
|
const {
|
|
468
487
|
hours,
|
|
469
488
|
minutes
|
|
470
|
-
} =
|
|
489
|
+
} = chunkXBXC6VAS_cjs.parseTimeString(timeString);
|
|
471
490
|
const base = startDate != null ? new Date(startDate.getTime()) : /* @__PURE__ */ new Date();
|
|
472
491
|
base.setHours(hours, minutes, 0, 0);
|
|
473
492
|
onChange?.([base, endDate ?? null]);
|
|
474
493
|
setStartDateValue(base);
|
|
475
494
|
}, [startDate, endDate, onChange, setStartDateValue]);
|
|
476
|
-
const handleEndTimeChange =
|
|
495
|
+
const handleEndTimeChange = React18.useCallback((timeString) => {
|
|
477
496
|
const {
|
|
478
497
|
hours,
|
|
479
498
|
minutes
|
|
480
|
-
} =
|
|
499
|
+
} = chunkXBXC6VAS_cjs.parseTimeString(timeString);
|
|
481
500
|
const base = endDate != null ? new Date(endDate.getTime()) : /* @__PURE__ */ new Date();
|
|
482
501
|
base.setHours(hours, minutes, 0, 0);
|
|
483
502
|
onChange?.([startDate ?? null, base]);
|
|
484
503
|
setEndDateValue(base);
|
|
485
504
|
}, [startDate, endDate, onChange, setEndDateValue]);
|
|
486
|
-
const handleStartFocusBoundary =
|
|
505
|
+
const handleStartFocusBoundary = React18.useCallback(() => {
|
|
487
506
|
const activeRef = activeBoundary === "start" ? startInputRef : endInputRef;
|
|
488
507
|
activeRef.current?.focus();
|
|
489
508
|
}, [activeBoundary]);
|
|
490
|
-
const handleEndFocusBoundary =
|
|
509
|
+
const handleEndFocusBoundary = React18.useCallback((e) => {
|
|
491
510
|
const related = e.relatedTarget ?? document.activeElement;
|
|
492
511
|
if (popoverRef.current?.contains(related)) {
|
|
493
512
|
closePopover();
|
|
@@ -501,14 +520,14 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
501
520
|
from: startDate ?? void 0,
|
|
502
521
|
to: endDate ?? void 0
|
|
503
522
|
} : void 0;
|
|
504
|
-
const timeFooter = showTime ? /* @__PURE__ */
|
|
523
|
+
const timeFooter = showTime ? /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
505
524
|
className: DateRangeInputField_default.osdkDateRangeTimeRow
|
|
506
|
-
}, /* @__PURE__ */
|
|
507
|
-
value:
|
|
525
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(chunkMVNWOKH2_cjs.TimePicker, {
|
|
526
|
+
value: chunkXBXC6VAS_cjs.getTimeValue(startDate),
|
|
508
527
|
onChange: handleStartTimeChange,
|
|
509
528
|
label: "Start time"
|
|
510
|
-
}), /* @__PURE__ */
|
|
511
|
-
value:
|
|
529
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement(chunkMVNWOKH2_cjs.TimePicker, {
|
|
530
|
+
value: chunkXBXC6VAS_cjs.getTimeValue(endDate),
|
|
512
531
|
onChange: handleEndTimeChange,
|
|
513
532
|
label: "End time"
|
|
514
533
|
})) : void 0;
|
|
@@ -516,17 +535,17 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
516
535
|
...SHARED_INPUT_PROPS,
|
|
517
536
|
"aria-controls": popoverId
|
|
518
537
|
};
|
|
519
|
-
return /* @__PURE__ */
|
|
538
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(popover.Popover.Root, {
|
|
520
539
|
open: isOpen,
|
|
521
540
|
onOpenChange: handleOpenChange
|
|
522
|
-
}, /* @__PURE__ */
|
|
541
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(popover.Popover.Trigger, {
|
|
523
542
|
nativeButton: false,
|
|
524
|
-
render: /* @__PURE__ */
|
|
543
|
+
render: /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
525
544
|
className: DateRangeInputField_default.osdkDateRangeContainer
|
|
526
545
|
})
|
|
527
|
-
}, /* @__PURE__ */
|
|
528
|
-
className: classnames__default.default(
|
|
529
|
-
}, /* @__PURE__ */
|
|
546
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
547
|
+
className: classnames__default.default(chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, startInvalid && chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
|
|
548
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(input.Input, _extends({
|
|
530
549
|
ref: startInputRef,
|
|
531
550
|
id: id != null ? `${id}-start` : void 0,
|
|
532
551
|
value: displayedStart,
|
|
@@ -538,9 +557,9 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
538
557
|
"aria-expanded": isOpen && activeBoundary === "start",
|
|
539
558
|
"aria-label": "Start date",
|
|
540
559
|
"aria-invalid": startInvalid || void 0
|
|
541
|
-
}, sharedInputProps))), /* @__PURE__ */
|
|
542
|
-
className: classnames__default.default(
|
|
543
|
-
}, /* @__PURE__ */
|
|
560
|
+
}, sharedInputProps))), /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
561
|
+
className: classnames__default.default(chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, endInvalid && chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
|
|
562
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(input.Input, _extends({
|
|
544
563
|
ref: endInputRef,
|
|
545
564
|
id: id != null ? `${id}-end` : void 0,
|
|
546
565
|
value: displayedEnd,
|
|
@@ -552,30 +571,30 @@ var DateRangeInputField = /* @__PURE__ */ React15__default.default.memo(function
|
|
|
552
571
|
"aria-expanded": isOpen && activeBoundary === "end",
|
|
553
572
|
"aria-label": "End date",
|
|
554
573
|
"aria-invalid": endInvalid || void 0
|
|
555
|
-
}, sharedInputProps)))), /* @__PURE__ */
|
|
574
|
+
}, sharedInputProps)))), /* @__PURE__ */ React18__namespace.default.createElement(popover.Popover.Portal, null, /* @__PURE__ */ React18__namespace.default.createElement(popover.Popover.Positioner, {
|
|
556
575
|
sideOffset: 4
|
|
557
|
-
}, /* @__PURE__ */
|
|
576
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(popover.Popover.Popup, {
|
|
558
577
|
ref: popoverRef,
|
|
559
|
-
className:
|
|
578
|
+
className: chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerPopover,
|
|
560
579
|
id: popoverId,
|
|
561
580
|
role: "dialog",
|
|
562
581
|
"aria-label": "date range picker",
|
|
563
582
|
finalFocus: false
|
|
564
|
-
}, /* @__PURE__ */
|
|
583
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
565
584
|
onFocus: handleStartFocusBoundary,
|
|
566
585
|
tabIndex: 0,
|
|
567
586
|
"aria-label": "Start of date range picker dialog",
|
|
568
|
-
className:
|
|
569
|
-
}), /* @__PURE__ */
|
|
587
|
+
className: chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
|
|
588
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement(LazyDateRangeCalendar, {
|
|
570
589
|
selected: calendarSelected,
|
|
571
590
|
onSelect: handleRangeSelect,
|
|
572
591
|
min,
|
|
573
592
|
max
|
|
574
|
-
}), timeFooter, /* @__PURE__ */
|
|
593
|
+
}), timeFooter, /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
575
594
|
onFocus: handleEndFocusBoundary,
|
|
576
595
|
tabIndex: 0,
|
|
577
596
|
"aria-label": "End of date range picker dialog",
|
|
578
|
-
className:
|
|
597
|
+
className: chunkMVNWOKH2_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
|
|
579
598
|
})))));
|
|
580
599
|
});
|
|
581
600
|
function isOverlapping(start, end, allowSingleDayRange) {
|
|
@@ -588,7 +607,7 @@ function isOverlapping(start, end, allowSingleDayRange) {
|
|
|
588
607
|
var FilePickerField_default = {};
|
|
589
608
|
|
|
590
609
|
// src/action-form/fields/FilePickerField.tsx
|
|
591
|
-
var FilePickerField = /* @__PURE__ */
|
|
610
|
+
var FilePickerField = /* @__PURE__ */ React18.memo(function FilePickerFieldFn({
|
|
592
611
|
id,
|
|
593
612
|
value,
|
|
594
613
|
onChange,
|
|
@@ -602,11 +621,11 @@ var FilePickerField = /* @__PURE__ */ React15.memo(function FilePickerFieldFn({
|
|
|
602
621
|
text = "No file chosen",
|
|
603
622
|
buttonText = "Browse"
|
|
604
623
|
}) {
|
|
605
|
-
const inputRef =
|
|
606
|
-
const openFileDialog =
|
|
624
|
+
const inputRef = React18.useRef(null);
|
|
625
|
+
const openFileDialog = React18.useCallback(() => {
|
|
607
626
|
inputRef.current?.click();
|
|
608
627
|
}, []);
|
|
609
|
-
const handleInputChange =
|
|
628
|
+
const handleInputChange = React18.useCallback((event) => {
|
|
610
629
|
const files = event.target.files;
|
|
611
630
|
if (files == null || files.length === 0) {
|
|
612
631
|
onChange?.(null);
|
|
@@ -618,7 +637,7 @@ var FilePickerField = /* @__PURE__ */ React15.memo(function FilePickerFieldFn({
|
|
|
618
637
|
onChange?.(files[0] ?? null);
|
|
619
638
|
}
|
|
620
639
|
}, [onChange, isMulti]);
|
|
621
|
-
const handleClear =
|
|
640
|
+
const handleClear = React18.useCallback((event) => {
|
|
622
641
|
event.stopPropagation();
|
|
623
642
|
event.preventDefault();
|
|
624
643
|
onChange?.(null);
|
|
@@ -626,22 +645,22 @@ var FilePickerField = /* @__PURE__ */ React15.memo(function FilePickerFieldFn({
|
|
|
626
645
|
inputRef.current.value = "";
|
|
627
646
|
}
|
|
628
647
|
}, [onChange]);
|
|
629
|
-
const handleKeyDown =
|
|
648
|
+
const handleKeyDown = React18.useCallback((event) => {
|
|
630
649
|
if (event.key === "Enter" || event.key === " ") {
|
|
631
650
|
event.preventDefault();
|
|
632
651
|
openFileDialog();
|
|
633
652
|
}
|
|
634
653
|
}, [openFileDialog]);
|
|
635
|
-
const displayText =
|
|
654
|
+
const displayText = React18.useMemo(() => getDisplayText(value), [value]);
|
|
636
655
|
const hasValue = displayText != null;
|
|
637
|
-
const acceptString =
|
|
656
|
+
const acceptString = React18.useMemo(() => normalizeAccept(accept), [accept]);
|
|
638
657
|
return (
|
|
639
658
|
// The entire component is a single tab stop (tabIndex={0}).
|
|
640
659
|
// Text and Browse are <span>s (not buttons) so they don't create
|
|
641
660
|
// extra tab stops — clicks on them bubble up to the container's onClick.
|
|
642
661
|
// The clear button is the only inner interactive element and gets its
|
|
643
662
|
// own tab stop so keyboard users can clear the selection.
|
|
644
|
-
/* @__PURE__ */
|
|
663
|
+
/* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
645
664
|
id,
|
|
646
665
|
className: FilePickerField_default.osdkFilePickerTrigger,
|
|
647
666
|
tabIndex: 0,
|
|
@@ -650,7 +669,7 @@ var FilePickerField = /* @__PURE__ */ React15.memo(function FilePickerFieldFn({
|
|
|
650
669
|
onClick: openFileDialog,
|
|
651
670
|
onKeyDown: handleKeyDown,
|
|
652
671
|
"aria-invalid": error != null || void 0
|
|
653
|
-
}, /* @__PURE__ */
|
|
672
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement("input", {
|
|
654
673
|
ref: inputRef,
|
|
655
674
|
type: "file",
|
|
656
675
|
className: FilePickerField_default.osdkFilePickerHiddenInput,
|
|
@@ -658,15 +677,15 @@ var FilePickerField = /* @__PURE__ */ React15.memo(function FilePickerFieldFn({
|
|
|
658
677
|
accept: acceptString,
|
|
659
678
|
onChange: handleInputChange,
|
|
660
679
|
tabIndex: -1
|
|
661
|
-
}), /* @__PURE__ */
|
|
680
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
662
681
|
className: classnames__default.default(FilePickerField_default.osdkFilePickerText, !hasValue && FilePickerField_default.osdkFilePickerPlaceholder)
|
|
663
682
|
}, displayText ?? text), hasValue && // stopPropagation + preventDefault prevent the click from
|
|
664
683
|
// bubbling to the container's onClick which opens the file dialog.
|
|
665
|
-
/* @__PURE__ */
|
|
684
|
+
/* @__PURE__ */ React18__namespace.default.createElement(button.Button, {
|
|
666
685
|
className: FilePickerField_default.osdkFilePickerClear,
|
|
667
686
|
onClick: handleClear,
|
|
668
687
|
"aria-label": "Clear selection"
|
|
669
|
-
}, /* @__PURE__ */
|
|
688
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(icons.Cross, null)), /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
670
689
|
className: FilePickerField_default.osdkFilePickerBrowse
|
|
671
690
|
}, buttonText))
|
|
672
691
|
);
|
|
@@ -704,8 +723,8 @@ function NumberInputField({
|
|
|
704
723
|
max,
|
|
705
724
|
step
|
|
706
725
|
}) {
|
|
707
|
-
const [displayValue, setDisplayValue] =
|
|
708
|
-
const prevValueRef =
|
|
726
|
+
const [displayValue, setDisplayValue] = React18.useState(() => formatNumberForDisplay(value));
|
|
727
|
+
const prevValueRef = React18.useRef(value);
|
|
709
728
|
if (prevValueRef.current !== value) {
|
|
710
729
|
prevValueRef.current = value;
|
|
711
730
|
const currentParsed = parseNumericValue(displayValue);
|
|
@@ -713,14 +732,14 @@ function NumberInputField({
|
|
|
713
732
|
setDisplayValue(formatNumberForDisplay(value));
|
|
714
733
|
}
|
|
715
734
|
}
|
|
716
|
-
const handleValueChange =
|
|
735
|
+
const handleValueChange = React18.useCallback((newValue) => {
|
|
717
736
|
if (!isValidInput(newValue)) {
|
|
718
737
|
return;
|
|
719
738
|
}
|
|
720
739
|
setDisplayValue(newValue);
|
|
721
740
|
onChange?.(parseNumericValue(newValue));
|
|
722
741
|
}, [onChange]);
|
|
723
|
-
const applyStep =
|
|
742
|
+
const applyStep = React18.useCallback((direction) => {
|
|
724
743
|
const current = parseNumericValue(displayValue) ?? 0;
|
|
725
744
|
const delta = direction * (step ?? DEFAULT_STEP);
|
|
726
745
|
const next = clamp(current + delta, min, max);
|
|
@@ -728,23 +747,23 @@ function NumberInputField({
|
|
|
728
747
|
setDisplayValue(formatted);
|
|
729
748
|
onChange?.(next);
|
|
730
749
|
}, [displayValue, onChange, step, min, max]);
|
|
731
|
-
const handleKeyDown =
|
|
750
|
+
const handleKeyDown = React18.useCallback((e) => {
|
|
732
751
|
if (e.key !== "ArrowUp" && e.key !== "ArrowDown") {
|
|
733
752
|
return;
|
|
734
753
|
}
|
|
735
754
|
e.preventDefault();
|
|
736
755
|
applyStep(e.key === "ArrowUp" ? 1 : -1);
|
|
737
756
|
}, [applyStep]);
|
|
738
|
-
const handleStepUp =
|
|
757
|
+
const handleStepUp = React18.useCallback(() => {
|
|
739
758
|
applyStep(1);
|
|
740
759
|
}, [applyStep]);
|
|
741
|
-
const handleStepDown =
|
|
760
|
+
const handleStepDown = React18.useCallback(() => {
|
|
742
761
|
applyStep(-1);
|
|
743
762
|
}, [applyStep]);
|
|
744
|
-
return /* @__PURE__ */
|
|
763
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
745
764
|
className: NumberInputField_default.osdkNumberInputWrapper,
|
|
746
765
|
"aria-invalid": error != null || void 0
|
|
747
|
-
}, /* @__PURE__ */
|
|
766
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(input.Input, {
|
|
748
767
|
id,
|
|
749
768
|
className: NumberInputField_default.osdkNumberInputField,
|
|
750
769
|
type: "text",
|
|
@@ -753,21 +772,21 @@ function NumberInputField({
|
|
|
753
772
|
onValueChange: handleValueChange,
|
|
754
773
|
onKeyDown: handleKeyDown,
|
|
755
774
|
placeholder
|
|
756
|
-
}), /* @__PURE__ */
|
|
775
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
757
776
|
className: NumberInputField_default.osdkNumberInputStepper
|
|
758
|
-
}, /* @__PURE__ */
|
|
777
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(button.Button, {
|
|
759
778
|
className: NumberInputField_default.osdkNumberInputStepButton,
|
|
760
779
|
"aria-label": "Increment",
|
|
761
780
|
tabIndex: -1,
|
|
762
781
|
onClick: handleStepUp
|
|
763
|
-
}, /* @__PURE__ */
|
|
782
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(icons.ChevronUp, {
|
|
764
783
|
size: CHEVRON_SIZE
|
|
765
|
-
})), /* @__PURE__ */
|
|
784
|
+
})), /* @__PURE__ */ React18__namespace.default.createElement(button.Button, {
|
|
766
785
|
className: NumberInputField_default.osdkNumberInputStepButton,
|
|
767
786
|
"aria-label": "Decrement",
|
|
768
787
|
tabIndex: -1,
|
|
769
788
|
onClick: handleStepDown
|
|
770
|
-
}, /* @__PURE__ */
|
|
789
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(icons.ChevronDown, {
|
|
771
790
|
size: CHEVRON_SIZE
|
|
772
791
|
}))));
|
|
773
792
|
}
|
|
@@ -789,23 +808,241 @@ function clamp(value, min, max) {
|
|
|
789
808
|
if (max != null && value > max) return max;
|
|
790
809
|
return value;
|
|
791
810
|
}
|
|
792
|
-
|
|
811
|
+
function useDebouncedValue(value, debounceMs) {
|
|
812
|
+
const [debouncedValue, setDebouncedValue] = React18.useState(value);
|
|
813
|
+
React18.useEffect(function debounceValue() {
|
|
814
|
+
const timer = setTimeout(() => {
|
|
815
|
+
setDebouncedValue(value);
|
|
816
|
+
}, debounceMs);
|
|
817
|
+
return () => {
|
|
818
|
+
clearTimeout(timer);
|
|
819
|
+
};
|
|
820
|
+
}, [value, debounceMs]);
|
|
821
|
+
return debouncedValue;
|
|
822
|
+
}
|
|
823
|
+
function useEventCallback(callback) {
|
|
824
|
+
const latestCallbackValueWrapper = React18__namespace.useRef((...args) => {
|
|
825
|
+
if (typeof globalThis.console !== "undefined") {
|
|
826
|
+
globalThis.console.error("A callback created with `useEventCallback` was called during the initial render of a component. This will throw an error in the future.");
|
|
827
|
+
}
|
|
828
|
+
return callback(...args);
|
|
829
|
+
});
|
|
830
|
+
React18__namespace.useEffect(() => {
|
|
831
|
+
latestCallbackValueWrapper.current = callback;
|
|
832
|
+
}, [callback]);
|
|
833
|
+
return React18__namespace.useCallback((...args) => latestCallbackValueWrapper.current(...args), []);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
// src/shared/hooks/useInfiniteScroll.ts
|
|
837
|
+
var THRESHOLD = 0.5;
|
|
838
|
+
var OPTIONS = {
|
|
839
|
+
threshold: THRESHOLD
|
|
840
|
+
};
|
|
841
|
+
function useInfiniteScroll({
|
|
842
|
+
callback,
|
|
843
|
+
loadedCount
|
|
844
|
+
}) {
|
|
845
|
+
const observer = React18.useRef();
|
|
846
|
+
const targetRef = React18.useRef();
|
|
847
|
+
const eventCallback = useEventCallback(callback);
|
|
848
|
+
const throttledCallback = React18.useCallback(lodashEs.throttle(eventCallback), []);
|
|
849
|
+
const handleObserverUpdate = React18.useCallback(
|
|
850
|
+
(entries) => {
|
|
851
|
+
const ent = entries[0];
|
|
852
|
+
if (ent && ent.isIntersecting) {
|
|
853
|
+
throttledCallback();
|
|
854
|
+
}
|
|
855
|
+
},
|
|
856
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
857
|
+
[]
|
|
858
|
+
);
|
|
859
|
+
React18.useEffect(() => {
|
|
860
|
+
const {
|
|
861
|
+
current: targetElement
|
|
862
|
+
} = targetRef;
|
|
863
|
+
if (observer.current == null || targetElement == null) {
|
|
864
|
+
return;
|
|
865
|
+
}
|
|
866
|
+
observer.current.observe(targetElement);
|
|
867
|
+
return () => {
|
|
868
|
+
observer.current?.unobserve(targetElement);
|
|
869
|
+
};
|
|
870
|
+
}, [loadedCount]);
|
|
871
|
+
const setRef = (node) => {
|
|
872
|
+
if (node != null) {
|
|
873
|
+
targetRef.current = node;
|
|
874
|
+
if (observer.current == null) {
|
|
875
|
+
observer.current = new IntersectionObserver(handleObserverUpdate, OPTIONS);
|
|
876
|
+
}
|
|
877
|
+
observer.current.observe(node);
|
|
878
|
+
} else if (targetRef.current != null) {
|
|
879
|
+
observer.current?.unobserve(targetRef.current);
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
return setRef;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
// src/action-form/fields/AsyncDropdownField.module.css
|
|
886
|
+
var AsyncDropdownField_default = {};
|
|
887
|
+
|
|
888
|
+
// src/action-form/fields/AsyncDropdownField.tsx
|
|
889
|
+
function _extends2() {
|
|
890
|
+
return _extends2 = Object.assign ? Object.assign.bind() : function(n) {
|
|
891
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
892
|
+
var t = arguments[e];
|
|
893
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
894
|
+
}
|
|
895
|
+
return n;
|
|
896
|
+
}, _extends2.apply(null, arguments);
|
|
897
|
+
}
|
|
898
|
+
var AsyncDropdownField = chunkMVNWOKH2_cjs.typedReactMemo(function AsyncDropdownFieldFn({
|
|
899
|
+
isLoading,
|
|
900
|
+
hasMore,
|
|
901
|
+
isSearching,
|
|
902
|
+
onFetchMore,
|
|
903
|
+
fetchError,
|
|
904
|
+
...dropdownProps
|
|
905
|
+
}) {
|
|
906
|
+
const itemCount = dropdownProps.items.length;
|
|
907
|
+
const popupStatus = React18.useMemo(() => {
|
|
908
|
+
if (fetchError != null) {
|
|
909
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
910
|
+
className: AsyncDropdownField_default.osdkAsyncDropdownError,
|
|
911
|
+
role: "alert"
|
|
912
|
+
}, fetchError.message);
|
|
913
|
+
}
|
|
914
|
+
if (isSearching) {
|
|
915
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
916
|
+
className: AsyncDropdownField_default.osdkAsyncDropdownStatus
|
|
917
|
+
}, "Searching\u2026");
|
|
918
|
+
}
|
|
919
|
+
if (isLoading && itemCount === 0) {
|
|
920
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
921
|
+
className: AsyncDropdownField_default.osdkAsyncDropdownStatus
|
|
922
|
+
}, "Loading\u2026");
|
|
923
|
+
}
|
|
924
|
+
return null;
|
|
925
|
+
}, [fetchError, isSearching, isLoading, itemCount]);
|
|
926
|
+
const infiniteScrollRef = useInfiniteScroll({
|
|
927
|
+
callback: onFetchMore,
|
|
928
|
+
loadedCount: itemCount
|
|
929
|
+
});
|
|
930
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(chunkMVNWOKH2_cjs.DropdownField, _extends2({}, dropdownProps, {
|
|
931
|
+
isSearchable: true,
|
|
932
|
+
popupStatus,
|
|
933
|
+
trailingItem: hasMore ? /* @__PURE__ */ React18__namespace.default.createElement(InfiniteScrollSentinel, {
|
|
934
|
+
key: "sentinel",
|
|
935
|
+
infiniteScrollRef
|
|
936
|
+
}) : null,
|
|
937
|
+
disableClientSideFiltering: dropdownProps.onQueryChange != null
|
|
938
|
+
}));
|
|
939
|
+
});
|
|
940
|
+
function InfiniteScrollSentinel({
|
|
941
|
+
infiniteScrollRef
|
|
942
|
+
}) {
|
|
943
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
944
|
+
ref: infiniteScrollRef,
|
|
945
|
+
role: "presentation"
|
|
946
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
|
|
947
|
+
className: AsyncDropdownField_default.osdkAsyncDropdownSkeleton
|
|
948
|
+
}));
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
// src/action-form/fields/ObjectSelectField.tsx
|
|
952
|
+
var SEARCH_DEBOUNCE_MS = 300;
|
|
953
|
+
var PAGE_SIZE = 50;
|
|
954
|
+
var EMPTY_ITEMS = [];
|
|
955
|
+
var ObjectSelectField = /* @__PURE__ */ React18.memo(function ObjectSelectFieldFn({
|
|
956
|
+
objectType,
|
|
957
|
+
value,
|
|
958
|
+
onChange,
|
|
959
|
+
error,
|
|
960
|
+
id,
|
|
961
|
+
placeholder,
|
|
962
|
+
isMultiple,
|
|
963
|
+
portalRef
|
|
964
|
+
}) {
|
|
965
|
+
const [query, setQuery] = React18.useState("");
|
|
966
|
+
const debouncedQuery = useDebouncedValue(query, SEARCH_DEBOUNCE_MS);
|
|
967
|
+
const handleChange = React18.useCallback((newValue) => {
|
|
968
|
+
onChange?.(newValue);
|
|
969
|
+
setQuery("");
|
|
970
|
+
}, [onChange]);
|
|
971
|
+
const {
|
|
972
|
+
metadata
|
|
973
|
+
} = react.useOsdkMetadata(objectType);
|
|
974
|
+
const titleProperty = typeof metadata?.titleProperty === "string" ? metadata.titleProperty : void 0;
|
|
975
|
+
const where = React18.useMemo(() => {
|
|
976
|
+
const trimmed = debouncedQuery.trim();
|
|
977
|
+
if (trimmed === "" || titleProperty == null) {
|
|
978
|
+
return void 0;
|
|
979
|
+
}
|
|
980
|
+
return {
|
|
981
|
+
[titleProperty]: {
|
|
982
|
+
$containsAllTermsInOrder: trimmed
|
|
983
|
+
}
|
|
984
|
+
};
|
|
985
|
+
}, [debouncedQuery, titleProperty]);
|
|
986
|
+
const {
|
|
987
|
+
data,
|
|
988
|
+
isLoading,
|
|
989
|
+
error: fetchError,
|
|
990
|
+
fetchMore,
|
|
991
|
+
hasMore
|
|
992
|
+
} = experimental.useOsdkObjects(objectType, {
|
|
993
|
+
where,
|
|
994
|
+
pageSize: PAGE_SIZE
|
|
995
|
+
});
|
|
996
|
+
const items = data ?? EMPTY_ITEMS;
|
|
997
|
+
const handleFetchMore = React18.useCallback(() => {
|
|
998
|
+
void fetchMore?.();
|
|
999
|
+
}, [fetchMore]);
|
|
1000
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(AsyncDropdownField, {
|
|
1001
|
+
id,
|
|
1002
|
+
value,
|
|
1003
|
+
onChange: handleChange,
|
|
1004
|
+
error,
|
|
1005
|
+
items,
|
|
1006
|
+
itemToStringLabel,
|
|
1007
|
+
itemToKey,
|
|
1008
|
+
isItemEqual,
|
|
1009
|
+
placeholder: placeholder ?? "Search\u2026",
|
|
1010
|
+
isMultiple,
|
|
1011
|
+
portalRef,
|
|
1012
|
+
onQueryChange: setQuery,
|
|
1013
|
+
isLoading,
|
|
1014
|
+
isSearching: debouncedQuery.trim() !== "" && isLoading,
|
|
1015
|
+
hasMore,
|
|
1016
|
+
onFetchMore: handleFetchMore,
|
|
1017
|
+
fetchError
|
|
1018
|
+
});
|
|
1019
|
+
});
|
|
1020
|
+
function itemToStringLabel(obj) {
|
|
1021
|
+
return obj.$title ?? String(obj.$primaryKey);
|
|
1022
|
+
}
|
|
1023
|
+
function itemToKey(obj) {
|
|
1024
|
+
return String(obj.$primaryKey);
|
|
1025
|
+
}
|
|
1026
|
+
function isItemEqual(a, b) {
|
|
1027
|
+
return a.$primaryKey === b.$primaryKey;
|
|
1028
|
+
}
|
|
1029
|
+
var BlueprintIcon = /* @__PURE__ */ React18__namespace.default.memo(function BlueprintIconFn({
|
|
793
1030
|
icon,
|
|
794
1031
|
size
|
|
795
1032
|
}) {
|
|
796
1033
|
const paths = useIcon(icon.name, size);
|
|
797
|
-
return /* @__PURE__ */
|
|
1034
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(icons.SVGIconContainer, {
|
|
798
1035
|
iconName: icon.name,
|
|
799
1036
|
color: icon.color
|
|
800
|
-
}, paths != null ? paths.map((d, i) => /* @__PURE__ */
|
|
1037
|
+
}, paths != null ? paths.map((d, i) => /* @__PURE__ */ React18__namespace.default.createElement("path", {
|
|
801
1038
|
key: i,
|
|
802
1039
|
d,
|
|
803
1040
|
fillRule: "evenodd"
|
|
804
1041
|
})) : []);
|
|
805
1042
|
});
|
|
806
1043
|
function useIcon(icon, size) {
|
|
807
|
-
const [iconPaths, setIconPaths] =
|
|
808
|
-
|
|
1044
|
+
const [iconPaths, setIconPaths] = React18__namespace.default.useState(() => icons.Icons.getPaths(icon, size));
|
|
1045
|
+
React18__namespace.default.useEffect(function loadIconPaths() {
|
|
809
1046
|
let isMounted = true;
|
|
810
1047
|
const loadedIconPaths = icons.Icons.getPaths(icon, size);
|
|
811
1048
|
if (loadedIconPaths != null) {
|
|
@@ -834,20 +1071,20 @@ var DEFAULT_OBJECT_ICON = {
|
|
|
834
1071
|
};
|
|
835
1072
|
var ICON_SIZE = icons.IconSize.STANDARD;
|
|
836
1073
|
var DEFAULT_EMPTY_MESSAGE = "Object set is not defined";
|
|
837
|
-
var ObjectSetField =
|
|
1074
|
+
var ObjectSetField = chunkMVNWOKH2_cjs.typedReactMemo(function ObjectSetFieldFn({
|
|
838
1075
|
value,
|
|
839
1076
|
emptyMessage = DEFAULT_EMPTY_MESSAGE
|
|
840
1077
|
}) {
|
|
841
1078
|
if (value == null) {
|
|
842
|
-
return /* @__PURE__ */
|
|
1079
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
843
1080
|
className: classnames__default.default(ObjectSetField_default.osdkObjectSetField, ObjectSetField_default.osdkObjectSetFieldEmpty)
|
|
844
1081
|
}, emptyMessage);
|
|
845
1082
|
}
|
|
846
|
-
return /* @__PURE__ */
|
|
1083
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(ObjectSetFieldContent, {
|
|
847
1084
|
objectSet: value
|
|
848
1085
|
});
|
|
849
1086
|
});
|
|
850
|
-
var ObjectSetFieldContent = /* @__PURE__ */
|
|
1087
|
+
var ObjectSetFieldContent = /* @__PURE__ */ React18__namespace.default.memo(function ObjectSetFieldContentFn({
|
|
851
1088
|
objectSet
|
|
852
1089
|
}) {
|
|
853
1090
|
const objectTypeDef = objectSet.$objectSetInternals.def;
|
|
@@ -865,22 +1102,22 @@ var ObjectSetFieldContent = /* @__PURE__ */ React15__default.default.memo(functi
|
|
|
865
1102
|
pageSize: 1
|
|
866
1103
|
});
|
|
867
1104
|
const hasMetadata = metadata != null;
|
|
868
|
-
const icon =
|
|
1105
|
+
const icon = React18__namespace.default.useMemo(() => metadata != null && "icon" in metadata && metadata.icon != null ? toComponentIcon(metadata.icon) : DEFAULT_OBJECT_ICON, [metadata]);
|
|
869
1106
|
const displayName = totalCount === "1" || !hasMetadata || !("pluralDisplayName" in metadata) ? metadata?.displayName : metadata.pluralDisplayName;
|
|
870
1107
|
const showLoadingState = metadataLoading && !hasMetadata;
|
|
871
|
-
return /* @__PURE__ */
|
|
1108
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
872
1109
|
className: ObjectSetField_default.osdkObjectSetField
|
|
873
|
-
}, showLoadingState ? /* @__PURE__ */
|
|
1110
|
+
}, showLoadingState ? /* @__PURE__ */ React18__namespace.default.createElement(React18__namespace.default.Fragment, null, OBJECT_SET_ICON_SKELETON, OBJECT_SET_LABEL_SKELETON) : /* @__PURE__ */ React18__namespace.default.createElement(React18__namespace.default.Fragment, null, /* @__PURE__ */ React18__namespace.default.createElement(BlueprintIcon, {
|
|
874
1111
|
icon,
|
|
875
1112
|
size: ICON_SIZE
|
|
876
|
-
}), /* @__PURE__ */
|
|
1113
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement(ObjectSetLabel, {
|
|
877
1114
|
displayName,
|
|
878
1115
|
totalCount,
|
|
879
1116
|
error: objectSetError,
|
|
880
1117
|
isLoading: objectSetLoading
|
|
881
1118
|
})));
|
|
882
1119
|
});
|
|
883
|
-
var ObjectSetLabel = /* @__PURE__ */
|
|
1120
|
+
var ObjectSetLabel = /* @__PURE__ */ React18__namespace.default.memo(function ObjectSetLabelFn({
|
|
884
1121
|
displayName,
|
|
885
1122
|
totalCount,
|
|
886
1123
|
isLoading,
|
|
@@ -890,15 +1127,15 @@ var ObjectSetLabel = /* @__PURE__ */ React15__default.default.memo(function Obje
|
|
|
890
1127
|
const label = displayName ?? (totalCount === "1" ? "object" : "objects");
|
|
891
1128
|
const showSkeleton = isLoading && !hasData;
|
|
892
1129
|
const showError = error != null && !hasData && !isLoading;
|
|
893
|
-
return /* @__PURE__ */
|
|
1130
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(React18__namespace.default.Fragment, null, showSkeleton && OBJECT_SET_LABEL_SKELETON, showError && /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
894
1131
|
className: ObjectSetField_default.osdkObjectSetFieldError,
|
|
895
1132
|
role: "alert"
|
|
896
|
-
}, `Failed to load: ${error.message}`), !showSkeleton && !showError && /* @__PURE__ */
|
|
1133
|
+
}, `Failed to load: ${error.message}`), !showSkeleton && !showError && /* @__PURE__ */ React18__namespace.default.createElement("span", null, `${formatCount(totalCount)} ${label}`));
|
|
897
1134
|
});
|
|
898
|
-
var OBJECT_SET_ICON_SKELETON = /* @__PURE__ */
|
|
1135
|
+
var OBJECT_SET_ICON_SKELETON = /* @__PURE__ */ React18__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
|
|
899
1136
|
className: ObjectSetField_default.osdkObjectSetIconSkeleton
|
|
900
1137
|
});
|
|
901
|
-
var OBJECT_SET_LABEL_SKELETON = /* @__PURE__ */
|
|
1138
|
+
var OBJECT_SET_LABEL_SKELETON = /* @__PURE__ */ React18__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
|
|
902
1139
|
className: ObjectSetField_default.osdkObjectSetLabelSkeleton
|
|
903
1140
|
});
|
|
904
1141
|
function formatCount(count) {
|
|
@@ -919,40 +1156,40 @@ function toComponentIcon(apiIcon) {
|
|
|
919
1156
|
var RadioButtonsField_default = {};
|
|
920
1157
|
|
|
921
1158
|
// src/action-form/fields/RadioButtonsField.tsx
|
|
922
|
-
var RadioButtonsField =
|
|
1159
|
+
var RadioButtonsField = chunkMVNWOKH2_cjs.typedReactMemo(function RadioButtonsFieldFn({
|
|
923
1160
|
id,
|
|
924
1161
|
value,
|
|
925
1162
|
onChange,
|
|
926
1163
|
options,
|
|
927
1164
|
orientation
|
|
928
1165
|
}) {
|
|
929
|
-
const selectedLabel =
|
|
930
|
-
const handleValueChange =
|
|
1166
|
+
const selectedLabel = React18.useMemo(() => value != null ? options.find((opt) => opt.value === value)?.label : void 0, [options, value]);
|
|
1167
|
+
const handleValueChange = React18.useCallback((nextLabel) => {
|
|
931
1168
|
const match = options.find((opt) => opt.label === nextLabel);
|
|
932
1169
|
onChange?.(match?.value ?? null);
|
|
933
1170
|
}, [options, onChange]);
|
|
934
|
-
return /* @__PURE__ */
|
|
1171
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(radioGroup.RadioGroup, {
|
|
935
1172
|
id,
|
|
936
1173
|
className: RadioButtonsField_default.osdkRadioGroup,
|
|
937
1174
|
"data-orientation": orientation ?? "vertical",
|
|
938
1175
|
value: selectedLabel,
|
|
939
1176
|
onValueChange: handleValueChange
|
|
940
|
-
}, options.map((option) => /* @__PURE__ */
|
|
1177
|
+
}, options.map((option) => /* @__PURE__ */ React18__namespace.default.createElement(RadioItem, {
|
|
941
1178
|
key: option.label,
|
|
942
1179
|
option
|
|
943
1180
|
})));
|
|
944
1181
|
});
|
|
945
|
-
var RadioItem = /* @__PURE__ */
|
|
1182
|
+
var RadioItem = /* @__PURE__ */ React18.memo(function RadioItemFn({
|
|
946
1183
|
option
|
|
947
1184
|
}) {
|
|
948
|
-
return /* @__PURE__ */
|
|
1185
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("label", {
|
|
949
1186
|
className: RadioButtonsField_default.osdkRadioItem
|
|
950
|
-
}, /* @__PURE__ */
|
|
1187
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(radio.Radio.Root, {
|
|
951
1188
|
value: option.label,
|
|
952
1189
|
className: RadioButtonsField_default.osdkRadioRoot
|
|
953
|
-
}, /* @__PURE__ */
|
|
1190
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(radio.Radio.Indicator, {
|
|
954
1191
|
className: RadioButtonsField_default.osdkRadioIndicator
|
|
955
|
-
})), /* @__PURE__ */
|
|
1192
|
+
})), /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
956
1193
|
className: RadioButtonsField_default.osdkRadioLabel
|
|
957
1194
|
}, option.label));
|
|
958
1195
|
});
|
|
@@ -961,14 +1198,14 @@ var RadioItem = /* @__PURE__ */ React15.memo(function RadioItemFn({
|
|
|
961
1198
|
var BaseInput_default = {};
|
|
962
1199
|
|
|
963
1200
|
// src/action-form/fields/TextAreaField.tsx
|
|
964
|
-
function
|
|
965
|
-
return
|
|
1201
|
+
function _extends3() {
|
|
1202
|
+
return _extends3 = Object.assign ? Object.assign.bind() : function(n) {
|
|
966
1203
|
for (var e = 1; e < arguments.length; e++) {
|
|
967
1204
|
var t = arguments[e];
|
|
968
1205
|
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
969
1206
|
}
|
|
970
1207
|
return n;
|
|
971
|
-
},
|
|
1208
|
+
}, _extends3.apply(null, arguments);
|
|
972
1209
|
}
|
|
973
1210
|
var TEXTAREA_STYLE = {
|
|
974
1211
|
resize: "vertical"
|
|
@@ -984,12 +1221,12 @@ function TextAreaField({
|
|
|
984
1221
|
minLength,
|
|
985
1222
|
maxLength
|
|
986
1223
|
}) {
|
|
987
|
-
const renderTextarea =
|
|
1224
|
+
const renderTextarea = React18.useCallback((props) => /* @__PURE__ */ React18__namespace.default.createElement("textarea", _extends3({}, props, {
|
|
988
1225
|
rows,
|
|
989
1226
|
wrap,
|
|
990
1227
|
style: TEXTAREA_STYLE
|
|
991
1228
|
})), [rows, wrap]);
|
|
992
|
-
return /* @__PURE__ */
|
|
1229
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(input.Input, {
|
|
993
1230
|
id,
|
|
994
1231
|
className: BaseInput_default.osdkBaseInput,
|
|
995
1232
|
value: value ?? "",
|
|
@@ -1010,7 +1247,7 @@ function TextInputField({
|
|
|
1010
1247
|
minLength,
|
|
1011
1248
|
maxLength
|
|
1012
1249
|
}) {
|
|
1013
|
-
return /* @__PURE__ */
|
|
1250
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(input.Input, {
|
|
1014
1251
|
id,
|
|
1015
1252
|
className: BaseInput_default.osdkBaseInput,
|
|
1016
1253
|
type: "text",
|
|
@@ -1024,16 +1261,16 @@ function TextInputField({
|
|
|
1024
1261
|
}
|
|
1025
1262
|
|
|
1026
1263
|
// src/action-form/fields/FormFieldRenderer.tsx
|
|
1027
|
-
function
|
|
1028
|
-
return
|
|
1264
|
+
function _extends4() {
|
|
1265
|
+
return _extends4 = Object.assign ? Object.assign.bind() : function(n) {
|
|
1029
1266
|
for (var e = 1; e < arguments.length; e++) {
|
|
1030
1267
|
var t = arguments[e];
|
|
1031
1268
|
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
1032
1269
|
}
|
|
1033
1270
|
return n;
|
|
1034
|
-
},
|
|
1271
|
+
}, _extends4.apply(null, arguments);
|
|
1035
1272
|
}
|
|
1036
|
-
var FormFieldRenderer = /* @__PURE__ */
|
|
1273
|
+
var FormFieldRenderer = /* @__PURE__ */ React18.memo(function FormFieldRendererFn({
|
|
1037
1274
|
fieldDefinition,
|
|
1038
1275
|
value,
|
|
1039
1276
|
onFieldValueChange,
|
|
@@ -1046,7 +1283,7 @@ var FormFieldRenderer = /* @__PURE__ */ React15.memo(function FormFieldRendererF
|
|
|
1046
1283
|
helperText,
|
|
1047
1284
|
helperTextPlacement
|
|
1048
1285
|
} = fieldDefinition;
|
|
1049
|
-
return /* @__PURE__ */
|
|
1286
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(FormField, {
|
|
1050
1287
|
label,
|
|
1051
1288
|
isRequired,
|
|
1052
1289
|
fieldKey: fieldDefinition.fieldKey,
|
|
@@ -1058,14 +1295,14 @@ var FormFieldRenderer = /* @__PURE__ */ React15.memo(function FormFieldRendererF
|
|
|
1058
1295
|
function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
1059
1296
|
switch (fieldDefinition.fieldComponent) {
|
|
1060
1297
|
case "DATE_RANGE_INPUT":
|
|
1061
|
-
return /* @__PURE__ */
|
|
1298
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(DateRangeInputField, _extends4({
|
|
1062
1299
|
id: fieldDefinition.fieldKey,
|
|
1063
1300
|
value: coerceToDateRange(value),
|
|
1064
1301
|
onChange,
|
|
1065
1302
|
placeholderStart: fieldDefinition.placeholder
|
|
1066
1303
|
}, fieldDefinition.fieldComponentProps));
|
|
1067
1304
|
case "TEXT_INPUT":
|
|
1068
|
-
return /* @__PURE__ */
|
|
1305
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(TextInputField, _extends4({
|
|
1069
1306
|
id: fieldDefinition.fieldKey,
|
|
1070
1307
|
value: value != null ? String(value) : "",
|
|
1071
1308
|
onChange,
|
|
@@ -1073,7 +1310,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
|
1073
1310
|
error
|
|
1074
1311
|
}, fieldDefinition.fieldComponentProps));
|
|
1075
1312
|
case "TEXT_AREA":
|
|
1076
|
-
return /* @__PURE__ */
|
|
1313
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(TextAreaField, _extends4({
|
|
1077
1314
|
id: fieldDefinition.fieldKey,
|
|
1078
1315
|
value: value != null ? String(value) : "",
|
|
1079
1316
|
onChange,
|
|
@@ -1081,7 +1318,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
|
1081
1318
|
error
|
|
1082
1319
|
}, fieldDefinition.fieldComponentProps));
|
|
1083
1320
|
case "DROPDOWN": {
|
|
1084
|
-
return /* @__PURE__ */
|
|
1321
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(chunkMVNWOKH2_cjs.DropdownField, _extends4({
|
|
1085
1322
|
id: fieldDefinition.fieldKey,
|
|
1086
1323
|
value,
|
|
1087
1324
|
onChange,
|
|
@@ -1090,7 +1327,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
|
1090
1327
|
}, fieldDefinition.fieldComponentProps));
|
|
1091
1328
|
}
|
|
1092
1329
|
case "DATETIME_PICKER":
|
|
1093
|
-
return /* @__PURE__ */
|
|
1330
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(chunkMVNWOKH2_cjs.DatetimePickerField, _extends4({
|
|
1094
1331
|
id: fieldDefinition.fieldKey,
|
|
1095
1332
|
placeholder: fieldDefinition.placeholder,
|
|
1096
1333
|
value: value instanceof Date ? value : null,
|
|
@@ -1098,21 +1335,21 @@ function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
|
1098
1335
|
error
|
|
1099
1336
|
}, fieldDefinition.fieldComponentProps));
|
|
1100
1337
|
case "RADIO_BUTTONS":
|
|
1101
|
-
return /* @__PURE__ */
|
|
1338
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(RadioButtonsField, _extends4({
|
|
1102
1339
|
id: fieldDefinition.fieldKey,
|
|
1103
1340
|
value,
|
|
1104
1341
|
onChange,
|
|
1105
1342
|
error
|
|
1106
1343
|
}, fieldDefinition.fieldComponentProps));
|
|
1107
1344
|
case "CUSTOM":
|
|
1108
|
-
return /* @__PURE__ */
|
|
1345
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(CustomField, _extends4({
|
|
1109
1346
|
id: fieldDefinition.fieldKey,
|
|
1110
1347
|
value,
|
|
1111
1348
|
onChange,
|
|
1112
1349
|
error
|
|
1113
1350
|
}, fieldDefinition.fieldComponentProps));
|
|
1114
1351
|
case "NUMBER_INPUT":
|
|
1115
|
-
return /* @__PURE__ */
|
|
1352
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(NumberInputField, _extends4({
|
|
1116
1353
|
id: fieldDefinition.fieldKey,
|
|
1117
1354
|
value: typeof value === "number" ? value : null,
|
|
1118
1355
|
onChange,
|
|
@@ -1120,14 +1357,22 @@ function renderFieldComponent(fieldDefinition, value, onChange, error) {
|
|
|
1120
1357
|
error
|
|
1121
1358
|
}, fieldDefinition.fieldComponentProps));
|
|
1122
1359
|
case "FILE_PICKER":
|
|
1123
|
-
return /* @__PURE__ */
|
|
1360
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(FilePickerField, _extends4({
|
|
1124
1361
|
id: fieldDefinition.fieldKey,
|
|
1125
1362
|
value: coerceToFileValue(value),
|
|
1126
1363
|
onChange,
|
|
1127
1364
|
error
|
|
1128
1365
|
}, fieldDefinition.fieldComponentProps));
|
|
1366
|
+
case "OBJECT_SELECT":
|
|
1367
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(ObjectSelectField, _extends4({
|
|
1368
|
+
id: fieldDefinition.fieldKey,
|
|
1369
|
+
value: narrowToOsdkObject(value),
|
|
1370
|
+
onChange,
|
|
1371
|
+
placeholder: fieldDefinition.placeholder,
|
|
1372
|
+
error
|
|
1373
|
+
}, fieldDefinition.fieldComponentProps));
|
|
1129
1374
|
case "OBJECT_SET":
|
|
1130
|
-
return /* @__PURE__ */
|
|
1375
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(ObjectSetField, _extends4({
|
|
1131
1376
|
id: fieldDefinition.fieldKey
|
|
1132
1377
|
}, fieldDefinition.fieldComponentProps));
|
|
1133
1378
|
default:
|
|
@@ -1153,18 +1398,24 @@ function coerceToFileValue(value) {
|
|
|
1153
1398
|
}
|
|
1154
1399
|
return null;
|
|
1155
1400
|
}
|
|
1401
|
+
function narrowToOsdkObject(value) {
|
|
1402
|
+
if (value != null && typeof value === "object" && "$primaryKey" in value) {
|
|
1403
|
+
return value;
|
|
1404
|
+
}
|
|
1405
|
+
return null;
|
|
1406
|
+
}
|
|
1156
1407
|
function assertUnreachableFieldComponent(value) {
|
|
1157
1408
|
throw new Error(`Unhandled field component: ${String(value)}`);
|
|
1158
1409
|
}
|
|
1159
1410
|
|
|
1160
1411
|
// src/action-form/fields/FieldBridge.tsx
|
|
1161
1412
|
var SELECT_LIKE_FIELDS = /* @__PURE__ */ new Set(["RADIO_BUTTONS", "DROPDOWN"]);
|
|
1162
|
-
var FieldBridge = /* @__PURE__ */
|
|
1413
|
+
var FieldBridge = /* @__PURE__ */ React18.memo(function FieldBridgeFn({
|
|
1163
1414
|
fieldDef,
|
|
1164
1415
|
control,
|
|
1165
1416
|
onExternalChange
|
|
1166
1417
|
}) {
|
|
1167
|
-
const rules =
|
|
1418
|
+
const rules = React18.useMemo(() => extractValidationRules(fieldDef), [fieldDef]);
|
|
1168
1419
|
const {
|
|
1169
1420
|
field: {
|
|
1170
1421
|
onChange,
|
|
@@ -1180,20 +1431,20 @@ var FieldBridge = /* @__PURE__ */ React15.memo(function FieldBridgeFn({
|
|
|
1180
1431
|
rules
|
|
1181
1432
|
});
|
|
1182
1433
|
const isSelectLike = SELECT_LIKE_FIELDS.has(fieldDef.fieldComponent);
|
|
1183
|
-
const handleChange =
|
|
1434
|
+
const handleChange = React18.useCallback((newValue) => {
|
|
1184
1435
|
onChange(newValue);
|
|
1185
1436
|
onExternalChange?.(fieldDef.fieldKey, newValue);
|
|
1186
1437
|
if (isSelectLike) {
|
|
1187
1438
|
onBlur();
|
|
1188
1439
|
}
|
|
1189
1440
|
}, [onChange, onBlur, onExternalChange, fieldDef.fieldKey, isSelectLike]);
|
|
1190
|
-
const handleBlur =
|
|
1441
|
+
const handleBlur = React18.useCallback((e) => {
|
|
1191
1442
|
if (e.currentTarget.contains(e.relatedTarget)) {
|
|
1192
1443
|
return;
|
|
1193
1444
|
}
|
|
1194
1445
|
onBlur();
|
|
1195
1446
|
}, [onBlur]);
|
|
1196
|
-
return /* @__PURE__ */
|
|
1447
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(FormFieldRenderer, {
|
|
1197
1448
|
value,
|
|
1198
1449
|
fieldDefinition: fieldDef,
|
|
1199
1450
|
onFieldValueChange: handleChange,
|
|
@@ -1206,16 +1457,16 @@ var FieldBridge = /* @__PURE__ */ React15.memo(function FieldBridgeFn({
|
|
|
1206
1457
|
var FormHeader_default = {};
|
|
1207
1458
|
|
|
1208
1459
|
// src/action-form/FormHeader.tsx
|
|
1209
|
-
var FormHeader = /* @__PURE__ */
|
|
1460
|
+
var FormHeader = /* @__PURE__ */ React18.memo(function FormHeaderFn({
|
|
1210
1461
|
title
|
|
1211
1462
|
}) {
|
|
1212
|
-
return /* @__PURE__ */
|
|
1463
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("h2", {
|
|
1213
1464
|
className: FormHeader_default.osdkFormHeader
|
|
1214
1465
|
}, title);
|
|
1215
1466
|
});
|
|
1216
1467
|
|
|
1217
1468
|
// src/action-form/BaseForm.tsx
|
|
1218
|
-
var BaseForm = /* @__PURE__ */
|
|
1469
|
+
var BaseForm = /* @__PURE__ */ React18.memo(function BaseFormFn({
|
|
1219
1470
|
formTitle,
|
|
1220
1471
|
fieldDefinitions,
|
|
1221
1472
|
formState: controlledFormState,
|
|
@@ -1227,7 +1478,7 @@ var BaseForm = /* @__PURE__ */ React15.memo(function BaseFormFn({
|
|
|
1227
1478
|
className
|
|
1228
1479
|
}) {
|
|
1229
1480
|
const isControlled = controlledFormState != null;
|
|
1230
|
-
const defaultValues =
|
|
1481
|
+
const defaultValues = React18.useMemo(() => buildDefaultValues(fieldDefinitions), [fieldDefinitions]);
|
|
1231
1482
|
const {
|
|
1232
1483
|
control,
|
|
1233
1484
|
trigger,
|
|
@@ -1246,7 +1497,7 @@ var BaseForm = /* @__PURE__ */ React15.memo(function BaseFormFn({
|
|
|
1246
1497
|
defaultValues
|
|
1247
1498
|
}
|
|
1248
1499
|
});
|
|
1249
|
-
const [hasAttemptedSubmit, setHasAttemptedSubmit] =
|
|
1500
|
+
const [hasAttemptedSubmit, setHasAttemptedSubmit] = React18.useState(false);
|
|
1250
1501
|
const {
|
|
1251
1502
|
isPending: isSubmitting,
|
|
1252
1503
|
error: submissionError,
|
|
@@ -1254,7 +1505,7 @@ var BaseForm = /* @__PURE__ */ React15.memo(function BaseFormFn({
|
|
|
1254
1505
|
clearError
|
|
1255
1506
|
} = useAsyncAction(onSubmit);
|
|
1256
1507
|
const submissionErrorMessage = submissionError != null ? submissionError instanceof Error ? submissionError.message : "Submission failed" : void 0;
|
|
1257
|
-
const handleFormSubmit =
|
|
1508
|
+
const handleFormSubmit = React18.useCallback(async (e) => {
|
|
1258
1509
|
e.preventDefault();
|
|
1259
1510
|
setHasAttemptedSubmit(true);
|
|
1260
1511
|
const isValid = await trigger();
|
|
@@ -1263,41 +1514,41 @@ var BaseForm = /* @__PURE__ */ React15.memo(function BaseFormFn({
|
|
|
1263
1514
|
}
|
|
1264
1515
|
await executeSubmit(controlledFormState ?? getValues());
|
|
1265
1516
|
}, [trigger, executeSubmit, controlledFormState, getValues]);
|
|
1266
|
-
const handleFieldChange =
|
|
1517
|
+
const handleFieldChange = React18.useCallback((fieldKey, value) => {
|
|
1267
1518
|
clearError();
|
|
1268
1519
|
onFieldValueChange?.(fieldKey, value);
|
|
1269
1520
|
}, [clearError, onFieldValueChange]);
|
|
1270
1521
|
const isFormPending = isPending || isSubmitting;
|
|
1271
|
-
const labelByFieldKey =
|
|
1522
|
+
const labelByFieldKey = React18.useMemo(() => new Map(fieldDefinitions.map((d) => [d.fieldKey, d.label])), [fieldDefinitions]);
|
|
1272
1523
|
const errorEntries = Object.entries(errors).map(([key, entry]) => ({
|
|
1273
1524
|
label: labelByFieldKey.get(key) ?? key,
|
|
1274
1525
|
message: entry?.message ?? "Invalid"
|
|
1275
1526
|
}));
|
|
1276
1527
|
const areErrorsPresent = errorEntries.length > 0;
|
|
1277
1528
|
const buttonErrorMessage = areErrorsPresent ? "Some fields are invalid" : submissionErrorMessage;
|
|
1278
|
-
return /* @__PURE__ */
|
|
1529
|
+
return /* @__PURE__ */ React18__namespace.default.createElement("form", {
|
|
1279
1530
|
className: classnames__default.default(BaseForm_default.osdkForm, className),
|
|
1280
1531
|
onSubmit: handleFormSubmit
|
|
1281
|
-
}, formTitle != null && /* @__PURE__ */
|
|
1532
|
+
}, formTitle != null && /* @__PURE__ */ React18__namespace.default.createElement(FormHeader, {
|
|
1282
1533
|
title: formTitle
|
|
1283
|
-
}), isLoading && fieldDefinitions.length === 0 && /* @__PURE__ */
|
|
1534
|
+
}), isLoading && fieldDefinitions.length === 0 && /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
1284
1535
|
role: "status",
|
|
1285
1536
|
"aria-label": "Loading form fields",
|
|
1286
1537
|
className: BaseForm_default.osdkFormFields
|
|
1287
|
-
}, FORM_SKELETON), /* @__PURE__ */
|
|
1538
|
+
}, FORM_SKELETON), /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
1288
1539
|
className: BaseForm_default.osdkFormFields
|
|
1289
|
-
}, fieldDefinitions.map((fieldDef) => /* @__PURE__ */
|
|
1540
|
+
}, fieldDefinitions.map((fieldDef) => /* @__PURE__ */ React18__namespace.default.createElement(FieldBridge, {
|
|
1290
1541
|
key: fieldDef.fieldKey,
|
|
1291
1542
|
fieldDef,
|
|
1292
1543
|
control,
|
|
1293
1544
|
onExternalChange: handleFieldChange
|
|
1294
|
-
}))), /* @__PURE__ */
|
|
1545
|
+
}))), /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
1295
1546
|
className: BaseForm_default.osdkFormFooter
|
|
1296
|
-
}, /* @__PURE__ */
|
|
1547
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(ErrorIndicator, {
|
|
1297
1548
|
errorEntries
|
|
1298
|
-
}), /* @__PURE__ */
|
|
1549
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
1299
1550
|
className: BaseForm_default.osdkFormSubmitButton
|
|
1300
|
-
}, /* @__PURE__ */
|
|
1551
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(SubmitButton, {
|
|
1301
1552
|
isPending: isFormPending,
|
|
1302
1553
|
isSubmitDisabled: isSubmitDisabled || hasAttemptedSubmit && areErrorsPresent,
|
|
1303
1554
|
errorMessage: buttonErrorMessage
|
|
@@ -1306,12 +1557,12 @@ var BaseForm = /* @__PURE__ */ React15.memo(function BaseFormFn({
|
|
|
1306
1557
|
var SKELETON_FIELD_COUNT = 3;
|
|
1307
1558
|
var FORM_SKELETON = Array.from({
|
|
1308
1559
|
length: SKELETON_FIELD_COUNT
|
|
1309
|
-
}, (_, i) => /* @__PURE__ */
|
|
1560
|
+
}, (_, i) => /* @__PURE__ */ React18__namespace.default.createElement("div", {
|
|
1310
1561
|
key: i,
|
|
1311
1562
|
className: BaseForm_default.osdkFormSkeletonField
|
|
1312
|
-
}, /* @__PURE__ */
|
|
1563
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
|
|
1313
1564
|
className: BaseForm_default.osdkFormSkeletonLabel
|
|
1314
|
-
}), /* @__PURE__ */
|
|
1565
|
+
}), /* @__PURE__ */ React18__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
|
|
1315
1566
|
className: BaseForm_default.osdkFormSkeletonInput
|
|
1316
1567
|
})));
|
|
1317
1568
|
function buildDefaultValues(fieldDefinitions) {
|
|
@@ -1324,13 +1575,13 @@ function buildDefaultValues(fieldDefinitions) {
|
|
|
1324
1575
|
}
|
|
1325
1576
|
return values;
|
|
1326
1577
|
}
|
|
1327
|
-
var SubmitButton = /* @__PURE__ */
|
|
1578
|
+
var SubmitButton = /* @__PURE__ */ React18.memo(function SubmitButtonFn({
|
|
1328
1579
|
isPending,
|
|
1329
1580
|
isSubmitDisabled,
|
|
1330
1581
|
errorMessage
|
|
1331
1582
|
}) {
|
|
1332
1583
|
const buttonLabel = isPending ? "Submitting\u2026" : "Submit";
|
|
1333
|
-
const button = /* @__PURE__ */
|
|
1584
|
+
const button = /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.ActionButton, {
|
|
1334
1585
|
type: "submit",
|
|
1335
1586
|
variant: "primary",
|
|
1336
1587
|
disabled: isSubmitDisabled || isPending
|
|
@@ -1338,13 +1589,13 @@ var SubmitButton = /* @__PURE__ */ React15.memo(function SubmitButtonFn({
|
|
|
1338
1589
|
if (errorMessage == null) {
|
|
1339
1590
|
return button;
|
|
1340
1591
|
}
|
|
1341
|
-
return /* @__PURE__ */
|
|
1592
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Root, {
|
|
1342
1593
|
defaultOpen: true
|
|
1343
|
-
}, /* @__PURE__ */
|
|
1344
|
-
render: /* @__PURE__ */
|
|
1594
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Trigger, {
|
|
1595
|
+
render: /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
1345
1596
|
className: BaseForm_default.osdkTooltipTriggerWrapper
|
|
1346
1597
|
})
|
|
1347
|
-
}, button), /* @__PURE__ */
|
|
1598
|
+
}, button), /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Portal, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Popup, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Arrow, null), errorMessage))));
|
|
1348
1599
|
});
|
|
1349
1600
|
function ErrorIndicator({
|
|
1350
1601
|
errorEntries
|
|
@@ -1353,15 +1604,15 @@ function ErrorIndicator({
|
|
|
1353
1604
|
return null;
|
|
1354
1605
|
}
|
|
1355
1606
|
const count = errorEntries.length;
|
|
1356
|
-
return /* @__PURE__ */
|
|
1607
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Root, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Trigger, null, /* @__PURE__ */ React18__namespace.default.createElement("span", {
|
|
1357
1608
|
className: BaseForm_default.osdkFormErrorIndicator
|
|
1358
|
-
}, /* @__PURE__ */
|
|
1609
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement(icons.Error, {
|
|
1359
1610
|
size: 14
|
|
1360
|
-
}), count === 1 ? "1 issue" : `${count} issues`)), /* @__PURE__ */
|
|
1611
|
+
}), count === 1 ? "1 issue" : `${count} issues`)), /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Portal, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Popup, null, /* @__PURE__ */ React18__namespace.default.createElement(chunkY5ULR6PM_cjs.Tooltip.Arrow, null), /* @__PURE__ */ React18__namespace.default.createElement("ul", {
|
|
1361
1612
|
className: BaseForm_default.osdkFormErrorList
|
|
1362
|
-
}, errorEntries.map((entry) => /* @__PURE__ */
|
|
1613
|
+
}, errorEntries.map((entry) => /* @__PURE__ */ React18__namespace.default.createElement("li", {
|
|
1363
1614
|
key: entry.label
|
|
1364
|
-
}, /* @__PURE__ */
|
|
1615
|
+
}, /* @__PURE__ */ React18__namespace.default.createElement("strong", null, entry.label, ":"), " ", entry.message)))))));
|
|
1365
1616
|
}
|
|
1366
1617
|
|
|
1367
1618
|
// src/action-form/utils/coerceFieldValue.ts
|
|
@@ -1432,7 +1683,6 @@ function extractNumber(rawValue) {
|
|
|
1432
1683
|
function getDefaultFieldDefinitions(metadata) {
|
|
1433
1684
|
return Object.entries(metadata.parameters).map(([key, param]) => buildFieldDefinition(key, param));
|
|
1434
1685
|
}
|
|
1435
|
-
var EMPTY_ITEMS = [];
|
|
1436
1686
|
function buildFieldDefinition(key, param) {
|
|
1437
1687
|
const base = {
|
|
1438
1688
|
fieldKey: key,
|
|
@@ -1452,14 +1702,25 @@ function buildFieldDefinition(key, param) {
|
|
|
1452
1702
|
}
|
|
1453
1703
|
};
|
|
1454
1704
|
case "object":
|
|
1455
|
-
case "interface":
|
|
1456
1705
|
return {
|
|
1457
1706
|
...base,
|
|
1458
|
-
fieldComponent: "
|
|
1707
|
+
fieldComponent: "OBJECT_SELECT",
|
|
1459
1708
|
fieldComponentProps: {
|
|
1460
|
-
|
|
1709
|
+
// Construct a minimal ObjectTypeDefinition from the action
|
|
1710
|
+
// parameter metadata. At runtime useOsdkObjects only reads
|
|
1711
|
+
// type + apiName from the definition.
|
|
1712
|
+
objectType: {
|
|
1713
|
+
type: "object",
|
|
1714
|
+
apiName: paramType.object
|
|
1715
|
+
}
|
|
1461
1716
|
}
|
|
1462
1717
|
};
|
|
1718
|
+
case "interface":
|
|
1719
|
+
return {
|
|
1720
|
+
...base,
|
|
1721
|
+
fieldComponent: "TEXT_INPUT",
|
|
1722
|
+
fieldComponentProps: {}
|
|
1723
|
+
};
|
|
1463
1724
|
case "struct":
|
|
1464
1725
|
return {
|
|
1465
1726
|
...base,
|
|
@@ -1521,17 +1782,17 @@ function buildFieldDefinition(key, param) {
|
|
|
1521
1782
|
}
|
|
1522
1783
|
|
|
1523
1784
|
// src/action-form/ActionForm.tsx
|
|
1524
|
-
function
|
|
1525
|
-
return
|
|
1785
|
+
function _extends5() {
|
|
1786
|
+
return _extends5 = Object.assign ? Object.assign.bind() : function(n) {
|
|
1526
1787
|
for (var e = 1; e < arguments.length; e++) {
|
|
1527
1788
|
var t = arguments[e];
|
|
1528
1789
|
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
1529
1790
|
}
|
|
1530
1791
|
return n;
|
|
1531
|
-
},
|
|
1792
|
+
}, _extends5.apply(null, arguments);
|
|
1532
1793
|
}
|
|
1533
1794
|
var EMPTY_FIELD_DEFINITIONS = [];
|
|
1534
|
-
var ActionForm =
|
|
1795
|
+
var ActionForm = chunkMVNWOKH2_cjs.typedReactMemo(function ActionFormFn({
|
|
1535
1796
|
actionDefinition,
|
|
1536
1797
|
formTitle,
|
|
1537
1798
|
formFieldDefinitions,
|
|
@@ -1552,7 +1813,7 @@ var ActionForm = chunkRY2GVYT2_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1552
1813
|
loading: metadataLoading,
|
|
1553
1814
|
error: metadataError
|
|
1554
1815
|
} = react.useOsdkMetadata(actionDefinition);
|
|
1555
|
-
|
|
1816
|
+
React18.useEffect(function saveMetadataError() {
|
|
1556
1817
|
if (metadataError != null) {
|
|
1557
1818
|
onError?.({
|
|
1558
1819
|
type: "unknown",
|
|
@@ -1561,7 +1822,7 @@ var ActionForm = chunkRY2GVYT2_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1561
1822
|
}
|
|
1562
1823
|
}, [metadataError, onError]);
|
|
1563
1824
|
const parameters = metadata?.parameters;
|
|
1564
|
-
const customFieldDefinitions =
|
|
1825
|
+
const customFieldDefinitions = React18.useMemo(() => {
|
|
1565
1826
|
if (formFieldDefinitions == null) {
|
|
1566
1827
|
return null;
|
|
1567
1828
|
}
|
|
@@ -1572,15 +1833,15 @@ var ActionForm = chunkRY2GVYT2_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1572
1833
|
defaultValue: def.defaultValue
|
|
1573
1834
|
}));
|
|
1574
1835
|
}, [formFieldDefinitions, parameters]);
|
|
1575
|
-
const rendererFieldDefinitions =
|
|
1576
|
-
const coerceFormState =
|
|
1836
|
+
const rendererFieldDefinitions = React18.useMemo(() => customFieldDefinitions ?? (metadata != null ? getDefaultFieldDefinitions(metadata) : EMPTY_FIELD_DEFINITIONS), [customFieldDefinitions, metadata]);
|
|
1837
|
+
const coerceFormState = React18.useCallback((rawState) => {
|
|
1577
1838
|
const coerced = {};
|
|
1578
1839
|
for (const [key, value] of Object.entries(rawState)) {
|
|
1579
1840
|
coerced[key] = coerceFieldValue(parameters?.[key]?.type, value);
|
|
1580
1841
|
}
|
|
1581
1842
|
return coerced;
|
|
1582
1843
|
}, [parameters]);
|
|
1583
|
-
const handleSubmit =
|
|
1844
|
+
const handleSubmit = React18.useCallback(async (rawFormState) => {
|
|
1584
1845
|
const formState = coerceFormState(rawFormState);
|
|
1585
1846
|
try {
|
|
1586
1847
|
if (onSubmit != null) {
|
|
@@ -1596,7 +1857,7 @@ var ActionForm = chunkRY2GVYT2_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1596
1857
|
});
|
|
1597
1858
|
}
|
|
1598
1859
|
}, [coerceFormState, onSubmit, osdkApplyAction, onSuccess, onError]);
|
|
1599
|
-
const handleFieldValueChange =
|
|
1860
|
+
const handleFieldValueChange = React18.useCallback((fieldKey, value) => {
|
|
1600
1861
|
onFormStateChange?.((prev) => ({
|
|
1601
1862
|
...prev,
|
|
1602
1863
|
[fieldKey]: value
|
|
@@ -1614,17 +1875,17 @@ var ActionForm = chunkRY2GVYT2_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1614
1875
|
onFieldValueChange: handleFieldValueChange
|
|
1615
1876
|
};
|
|
1616
1877
|
if (!isControlled) {
|
|
1617
|
-
return /* @__PURE__ */
|
|
1878
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(BaseForm, commonProps);
|
|
1618
1879
|
}
|
|
1619
|
-
return /* @__PURE__ */
|
|
1880
|
+
return /* @__PURE__ */ React18__namespace.default.createElement(BaseForm, _extends5({}, commonProps, {
|
|
1620
1881
|
formState: controlledFormState
|
|
1621
1882
|
}));
|
|
1622
1883
|
});
|
|
1623
1884
|
|
|
1624
1885
|
// src/public/experimental/action-form.ts
|
|
1625
|
-
var ActionForm2 =
|
|
1886
|
+
var ActionForm2 = chunk5DVHLBWS_cjs.withOsdkMetrics(ActionForm, "ActionForm");
|
|
1626
1887
|
|
|
1627
1888
|
exports.ActionForm = ActionForm2;
|
|
1628
1889
|
exports.BaseForm = BaseForm;
|
|
1629
|
-
//# sourceMappingURL=chunk-
|
|
1630
|
-
//# sourceMappingURL=chunk-
|
|
1890
|
+
//# sourceMappingURL=chunk-QWFJF7IM.cjs.map
|
|
1891
|
+
//# sourceMappingURL=chunk-QWFJF7IM.cjs.map
|