@bsol-oss/react-datatable5 12.0.0-beta.87 → 12.0.0-beta.88
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/index.d.ts
CHANGED
|
@@ -853,7 +853,7 @@ interface FormRootProps<TData extends FieldValues> {
|
|
|
853
853
|
idPickerLabels?: IdPickerLabels;
|
|
854
854
|
enumPickerLabels?: EnumPickerLabels;
|
|
855
855
|
filePickerLabels?: FilePickerLabels;
|
|
856
|
-
|
|
856
|
+
insideDialog?: boolean;
|
|
857
857
|
}
|
|
858
858
|
interface CustomJSONSchema7Definition extends JSONSchema7 {
|
|
859
859
|
variant: string;
|
|
@@ -870,7 +870,7 @@ declare const idPickerSanityCheck: (column: string, foreign_key?: {
|
|
|
870
870
|
column?: string | undefined;
|
|
871
871
|
display_column?: string | undefined;
|
|
872
872
|
} | undefined) => void;
|
|
873
|
-
declare const FormRoot: <TData extends FieldValues>({ schema, idMap, setIdMap, form, serverUrl, translate, children, order, ignore, include, onSubmit, rowNumber, requestOptions, getUpdatedData, customErrorRenderer, customSuccessRenderer, displayConfig, requireConfirmation, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels,
|
|
873
|
+
declare const FormRoot: <TData extends FieldValues>({ schema, idMap, setIdMap, form, serverUrl, translate, children, order, ignore, include, onSubmit, rowNumber, requestOptions, getUpdatedData, customErrorRenderer, customSuccessRenderer, displayConfig, requireConfirmation, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog, }: FormRootProps<TData>) => react_jsx_runtime.JSX.Element;
|
|
874
874
|
|
|
875
875
|
interface DefaultFormProps<TData extends FieldValues> {
|
|
876
876
|
formConfig: Omit<FormRootProps<TData>, "children">;
|
package/dist/index.js
CHANGED
|
@@ -3627,7 +3627,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
|
|
|
3627
3627
|
showSubmitButton: true,
|
|
3628
3628
|
showResetButton: true,
|
|
3629
3629
|
showTitle: true,
|
|
3630
|
-
}, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels,
|
|
3630
|
+
}, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog = false, }) => {
|
|
3631
3631
|
const [isSuccess, setIsSuccess] = React.useState(false);
|
|
3632
3632
|
const [isError, setIsError] = React.useState(false);
|
|
3633
3633
|
const [isSubmiting, setIsSubmiting] = React.useState(false);
|
|
@@ -3718,7 +3718,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
|
|
|
3718
3718
|
enumPickerLabels,
|
|
3719
3719
|
filePickerLabels,
|
|
3720
3720
|
ajvResolver: ajvResolver(schema),
|
|
3721
|
-
|
|
3721
|
+
insideDialog,
|
|
3722
3722
|
}, children: jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children: children }) }));
|
|
3723
3723
|
};
|
|
3724
3724
|
|
|
@@ -4179,7 +4179,7 @@ const DateRangePicker = ({ column, schema, prefix, }) => {
|
|
|
4179
4179
|
|
|
4180
4180
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLimit = false, }) => {
|
|
4181
4181
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
4182
|
-
const { enumPickerLabels,
|
|
4182
|
+
const { enumPickerLabels, insideDialog } = useSchemaContext();
|
|
4183
4183
|
const formI18n = useFormI18n(column, prefix);
|
|
4184
4184
|
const { required, variant } = schema;
|
|
4185
4185
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
@@ -4248,11 +4248,11 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
|
|
|
4248
4248
|
}, children: !!renderDisplay === true
|
|
4249
4249
|
? renderDisplay(enumValue)
|
|
4250
4250
|
: formI18n.t(enumValue) }, enumValue));
|
|
4251
|
-
}) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning:
|
|
4251
|
+
}) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
|
|
4252
4252
|
? { strategy: 'fixed', hideWhenDetached: true }
|
|
4253
4253
|
: undefined, children: [jsxRuntime.jsxs(react.Combobox.Control, { children: [jsxRuntime.jsx(react.Combobox.Input, { placeholder: enumPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxRuntime.jsxs(react.Combobox.IndicatorGroup, { children: [!isMultiple && currentValue.length > 0 && (jsxRuntime.jsx(react.Combobox.ClearTrigger, { onClick: () => {
|
|
4254
4254
|
setValue(colLabel, '');
|
|
4255
|
-
} })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }),
|
|
4255
|
+
} })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), insideDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsxs(react.Combobox.Content, { children: [showTotalAndLimit && (jsxRuntime.jsx(react.Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
|
|
4256
4256
|
formI18n.t('empty_search_result') })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: collection.items.map((item, index) => (jsxRuntime.jsxs(react.Combobox.Item, { item: item, children: [jsxRuntime.jsx(react.Combobox.ItemText, { children: item.label }), jsxRuntime.jsx(react.Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) })) : (jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsxs(react.Combobox.Content, { children: [showTotalAndLimit && (jsxRuntime.jsx(react.Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
|
|
4257
4257
|
formI18n.t('empty_search_result') })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: collection.items.map((item, index) => (jsxRuntime.jsxs(react.Combobox.Item, { item: item, children: [jsxRuntime.jsx(react.Combobox.ItemText, { children: item.label }), jsxRuntime.jsx(react.Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) }) }))] })] }));
|
|
4258
4258
|
};
|
|
@@ -5043,7 +5043,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
|
|
|
5043
5043
|
|
|
5044
5044
|
const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
5045
5045
|
const { watch, getValues, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
5046
|
-
const { serverUrl, idMap, setIdMap,
|
|
5046
|
+
const { serverUrl, idMap, setIdMap, idPickerLabels, insideDialog } = useSchemaContext();
|
|
5047
5047
|
const formI18n = useFormI18n(column, prefix);
|
|
5048
5048
|
const { required, gridColumn = 'span 12', gridRow = 'span 1', renderDisplay, foreign_key, } = schema;
|
|
5049
5049
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
@@ -5120,60 +5120,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
5120
5120
|
enabled: true, // Always enabled for combobox
|
|
5121
5121
|
staleTime: 300000,
|
|
5122
5122
|
});
|
|
5123
|
-
// Query for currently selected items (to display them properly)
|
|
5124
|
-
// This query is needed for side effects (populating idMap) even though the result isn't directly used
|
|
5125
|
-
reactQuery.useQuery({
|
|
5126
|
-
queryKey: [
|
|
5127
|
-
`idpicker-default`,
|
|
5128
|
-
{
|
|
5129
|
-
form: parentSchema.title,
|
|
5130
|
-
column,
|
|
5131
|
-
id: isMultiple ? currentIds : currentId,
|
|
5132
|
-
},
|
|
5133
|
-
],
|
|
5134
|
-
queryFn: async () => {
|
|
5135
|
-
const queryId = currentId;
|
|
5136
|
-
const queryIds = currentIds;
|
|
5137
|
-
if (customQueryFn) {
|
|
5138
|
-
const { data, idMap } = await customQueryFn({
|
|
5139
|
-
searching: '',
|
|
5140
|
-
limit: isMultiple ? queryIds.length : 1,
|
|
5141
|
-
offset: 0,
|
|
5142
|
-
where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
|
|
5143
|
-
});
|
|
5144
|
-
setIdMap((state) => {
|
|
5145
|
-
return { ...state, ...idMap };
|
|
5146
|
-
});
|
|
5147
|
-
return data;
|
|
5148
|
-
}
|
|
5149
|
-
if (!queryId && (!queryIds || queryIds.length === 0)) {
|
|
5150
|
-
return { data: [] };
|
|
5151
|
-
}
|
|
5152
|
-
const data = await getTableData({
|
|
5153
|
-
serverUrl,
|
|
5154
|
-
searching: '',
|
|
5155
|
-
in_table: table,
|
|
5156
|
-
where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
|
|
5157
|
-
limit: isMultiple ? queryIds.length : 1,
|
|
5158
|
-
offset: 0,
|
|
5159
|
-
});
|
|
5160
|
-
const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
|
|
5161
|
-
return [
|
|
5162
|
-
item[column_ref],
|
|
5163
|
-
{
|
|
5164
|
-
...item,
|
|
5165
|
-
},
|
|
5166
|
-
];
|
|
5167
|
-
}));
|
|
5168
|
-
setIdMap((state) => {
|
|
5169
|
-
return { ...state, ...newMap };
|
|
5170
|
-
});
|
|
5171
|
-
return data;
|
|
5172
|
-
},
|
|
5173
|
-
enabled: isMultiple
|
|
5174
|
-
? Array.isArray(currentIds) && currentIds.length > 0
|
|
5175
|
-
: !!currentId,
|
|
5176
|
-
});
|
|
5177
5123
|
const { isLoading, isFetching, data, isPending, isError } = query;
|
|
5178
5124
|
const dataList = data?.data ?? [];
|
|
5179
5125
|
// Check if we're currently searching (user typed but debounce hasn't fired yet)
|
|
@@ -5236,11 +5182,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
5236
5182
|
}, children: !!renderDisplay === true
|
|
5237
5183
|
? renderDisplay(item)
|
|
5238
5184
|
: item[display_column] }, id));
|
|
5239
|
-
}) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning:
|
|
5185
|
+
}) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
|
|
5240
5186
|
? { strategy: 'fixed', hideWhenDetached: true }
|
|
5241
5187
|
: undefined, children: [jsxRuntime.jsxs(react.Combobox.Control, { children: [jsxRuntime.jsx(react.Combobox.Input, { placeholder: idPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxRuntime.jsxs(react.Combobox.IndicatorGroup, { children: [(isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, { size: "xs" }), isError && (jsxRuntime.jsx(react.Icon, { color: "fg.error", children: jsxRuntime.jsx(bi.BiError, {}) })), !isMultiple && currentValue.length > 0 && (jsxRuntime.jsx(react.Combobox.ClearTrigger, { onClick: () => {
|
|
5242
5188
|
setValue(colLabel, '');
|
|
5243
|
-
} })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }),
|
|
5189
|
+
} })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), insideDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsx(react.Combobox.Content, { children: isError ? (jsxRuntime.jsx(react.Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
|
|
5244
5190
|
// Show skeleton items to prevent UI shift
|
|
5245
5191
|
jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: 5 }).map((_, index) => (jsxRuntime.jsx(react.Flex, { p: 2, align: "center", gap: 2, children: jsxRuntime.jsx(react.Skeleton, { height: "20px", flex: "1" }) }, `skeleton-${index}`))) })) : collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: searchText
|
|
5246
5192
|
? idPickerLabels?.emptySearchResult ??
|
package/dist/index.mjs
CHANGED
|
@@ -3607,7 +3607,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
|
|
|
3607
3607
|
showSubmitButton: true,
|
|
3608
3608
|
showResetButton: true,
|
|
3609
3609
|
showTitle: true,
|
|
3610
|
-
}, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels,
|
|
3610
|
+
}, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog = false, }) => {
|
|
3611
3611
|
const [isSuccess, setIsSuccess] = useState(false);
|
|
3612
3612
|
const [isError, setIsError] = useState(false);
|
|
3613
3613
|
const [isSubmiting, setIsSubmiting] = useState(false);
|
|
@@ -3698,7 +3698,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
|
|
|
3698
3698
|
enumPickerLabels,
|
|
3699
3699
|
filePickerLabels,
|
|
3700
3700
|
ajvResolver: ajvResolver(schema),
|
|
3701
|
-
|
|
3701
|
+
insideDialog,
|
|
3702
3702
|
}, children: jsx(FormProvider, { ...form, children: children }) }));
|
|
3703
3703
|
};
|
|
3704
3704
|
|
|
@@ -4159,7 +4159,7 @@ const DateRangePicker = ({ column, schema, prefix, }) => {
|
|
|
4159
4159
|
|
|
4160
4160
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLimit = false, }) => {
|
|
4161
4161
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
4162
|
-
const { enumPickerLabels,
|
|
4162
|
+
const { enumPickerLabels, insideDialog } = useSchemaContext();
|
|
4163
4163
|
const formI18n = useFormI18n(column, prefix);
|
|
4164
4164
|
const { required, variant } = schema;
|
|
4165
4165
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
@@ -4228,11 +4228,11 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
|
|
|
4228
4228
|
}, children: !!renderDisplay === true
|
|
4229
4229
|
? renderDisplay(enumValue)
|
|
4230
4230
|
: formI18n.t(enumValue) }, enumValue));
|
|
4231
|
-
}) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning:
|
|
4231
|
+
}) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
|
|
4232
4232
|
? { strategy: 'fixed', hideWhenDetached: true }
|
|
4233
4233
|
: undefined, children: [jsxs(Combobox.Control, { children: [jsx(Combobox.Input, { placeholder: enumPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxs(Combobox.IndicatorGroup, { children: [!isMultiple && currentValue.length > 0 && (jsx(Combobox.ClearTrigger, { onClick: () => {
|
|
4234
4234
|
setValue(colLabel, '');
|
|
4235
|
-
} })), jsx(Combobox.Trigger, {})] })] }),
|
|
4235
|
+
} })), jsx(Combobox.Trigger, {})] })] }), insideDialog ? (jsx(Combobox.Positioner, { children: jsxs(Combobox.Content, { children: [showTotalAndLimit && (jsx(Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsx(Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
|
|
4236
4236
|
formI18n.t('empty_search_result') })) : (jsx(Fragment, { children: collection.items.map((item, index) => (jsxs(Combobox.Item, { item: item, children: [jsx(Combobox.ItemText, { children: item.label }), jsx(Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) })) : (jsx(Portal, { children: jsx(Combobox.Positioner, { children: jsxs(Combobox.Content, { children: [showTotalAndLimit && (jsx(Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsx(Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
|
|
4237
4237
|
formI18n.t('empty_search_result') })) : (jsx(Fragment, { children: collection.items.map((item, index) => (jsxs(Combobox.Item, { item: item, children: [jsx(Combobox.ItemText, { children: item.label }), jsx(Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) }) }))] })] }));
|
|
4238
4238
|
};
|
|
@@ -5023,7 +5023,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
|
|
|
5023
5023
|
|
|
5024
5024
|
const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
5025
5025
|
const { watch, getValues, formState: { errors }, setValue, } = useFormContext();
|
|
5026
|
-
const { serverUrl, idMap, setIdMap,
|
|
5026
|
+
const { serverUrl, idMap, setIdMap, idPickerLabels, insideDialog } = useSchemaContext();
|
|
5027
5027
|
const formI18n = useFormI18n(column, prefix);
|
|
5028
5028
|
const { required, gridColumn = 'span 12', gridRow = 'span 1', renderDisplay, foreign_key, } = schema;
|
|
5029
5029
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
@@ -5100,60 +5100,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
5100
5100
|
enabled: true, // Always enabled for combobox
|
|
5101
5101
|
staleTime: 300000,
|
|
5102
5102
|
});
|
|
5103
|
-
// Query for currently selected items (to display them properly)
|
|
5104
|
-
// This query is needed for side effects (populating idMap) even though the result isn't directly used
|
|
5105
|
-
useQuery({
|
|
5106
|
-
queryKey: [
|
|
5107
|
-
`idpicker-default`,
|
|
5108
|
-
{
|
|
5109
|
-
form: parentSchema.title,
|
|
5110
|
-
column,
|
|
5111
|
-
id: isMultiple ? currentIds : currentId,
|
|
5112
|
-
},
|
|
5113
|
-
],
|
|
5114
|
-
queryFn: async () => {
|
|
5115
|
-
const queryId = currentId;
|
|
5116
|
-
const queryIds = currentIds;
|
|
5117
|
-
if (customQueryFn) {
|
|
5118
|
-
const { data, idMap } = await customQueryFn({
|
|
5119
|
-
searching: '',
|
|
5120
|
-
limit: isMultiple ? queryIds.length : 1,
|
|
5121
|
-
offset: 0,
|
|
5122
|
-
where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
|
|
5123
|
-
});
|
|
5124
|
-
setIdMap((state) => {
|
|
5125
|
-
return { ...state, ...idMap };
|
|
5126
|
-
});
|
|
5127
|
-
return data;
|
|
5128
|
-
}
|
|
5129
|
-
if (!queryId && (!queryIds || queryIds.length === 0)) {
|
|
5130
|
-
return { data: [] };
|
|
5131
|
-
}
|
|
5132
|
-
const data = await getTableData({
|
|
5133
|
-
serverUrl,
|
|
5134
|
-
searching: '',
|
|
5135
|
-
in_table: table,
|
|
5136
|
-
where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
|
|
5137
|
-
limit: isMultiple ? queryIds.length : 1,
|
|
5138
|
-
offset: 0,
|
|
5139
|
-
});
|
|
5140
|
-
const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
|
|
5141
|
-
return [
|
|
5142
|
-
item[column_ref],
|
|
5143
|
-
{
|
|
5144
|
-
...item,
|
|
5145
|
-
},
|
|
5146
|
-
];
|
|
5147
|
-
}));
|
|
5148
|
-
setIdMap((state) => {
|
|
5149
|
-
return { ...state, ...newMap };
|
|
5150
|
-
});
|
|
5151
|
-
return data;
|
|
5152
|
-
},
|
|
5153
|
-
enabled: isMultiple
|
|
5154
|
-
? Array.isArray(currentIds) && currentIds.length > 0
|
|
5155
|
-
: !!currentId,
|
|
5156
|
-
});
|
|
5157
5103
|
const { isLoading, isFetching, data, isPending, isError } = query;
|
|
5158
5104
|
const dataList = data?.data ?? [];
|
|
5159
5105
|
// Check if we're currently searching (user typed but debounce hasn't fired yet)
|
|
@@ -5216,11 +5162,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
5216
5162
|
}, children: !!renderDisplay === true
|
|
5217
5163
|
? renderDisplay(item)
|
|
5218
5164
|
: item[display_column] }, id));
|
|
5219
|
-
}) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning:
|
|
5165
|
+
}) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
|
|
5220
5166
|
? { strategy: 'fixed', hideWhenDetached: true }
|
|
5221
5167
|
: undefined, children: [jsxs(Combobox.Control, { children: [jsx(Combobox.Input, { placeholder: idPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxs(Combobox.IndicatorGroup, { children: [(isFetching || isLoading || isPending) && jsx(Spinner, { size: "xs" }), isError && (jsx(Icon, { color: "fg.error", children: jsx(BiError, {}) })), !isMultiple && currentValue.length > 0 && (jsx(Combobox.ClearTrigger, { onClick: () => {
|
|
5222
5168
|
setValue(colLabel, '');
|
|
5223
|
-
} })), jsx(Combobox.Trigger, {})] })] }),
|
|
5169
|
+
} })), jsx(Combobox.Trigger, {})] })] }), insideDialog ? (jsx(Combobox.Positioner, { children: jsx(Combobox.Content, { children: isError ? (jsx(Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
|
|
5224
5170
|
// Show skeleton items to prevent UI shift
|
|
5225
5171
|
jsx(Fragment, { children: Array.from({ length: 5 }).map((_, index) => (jsx(Flex, { p: 2, align: "center", gap: 2, children: jsx(Skeleton, { height: "20px", flex: "1" }) }, `skeleton-${index}`))) })) : collection.items.length === 0 ? (jsx(Combobox.Empty, { children: searchText
|
|
5226
5172
|
? idPickerLabels?.emptySearchResult ??
|
|
@@ -45,6 +45,6 @@ export interface SchemaFormContext<TData extends FieldValues> {
|
|
|
45
45
|
enumPickerLabels?: EnumPickerLabels;
|
|
46
46
|
filePickerLabels?: FilePickerLabels;
|
|
47
47
|
ajvResolver: Resolver<FieldValues>;
|
|
48
|
-
|
|
48
|
+
insideDialog?: boolean;
|
|
49
49
|
}
|
|
50
50
|
export declare const SchemaFormContext: import("react").Context<SchemaFormContext<unknown>>;
|
|
@@ -33,7 +33,7 @@ export interface FormRootProps<TData extends FieldValues> {
|
|
|
33
33
|
idPickerLabels?: IdPickerLabels;
|
|
34
34
|
enumPickerLabels?: EnumPickerLabels;
|
|
35
35
|
filePickerLabels?: FilePickerLabels;
|
|
36
|
-
|
|
36
|
+
insideDialog?: boolean;
|
|
37
37
|
}
|
|
38
38
|
export interface CustomJSONSchema7Definition extends JSONSchema7 {
|
|
39
39
|
variant: string;
|
|
@@ -50,4 +50,4 @@ export declare const idPickerSanityCheck: (column: string, foreign_key?: {
|
|
|
50
50
|
column?: string | undefined;
|
|
51
51
|
display_column?: string | undefined;
|
|
52
52
|
} | undefined) => void;
|
|
53
|
-
export declare const FormRoot: <TData extends FieldValues>({ schema, idMap, setIdMap, form, serverUrl, translate, children, order, ignore, include, onSubmit, rowNumber, requestOptions, getUpdatedData, customErrorRenderer, customSuccessRenderer, displayConfig, requireConfirmation, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels,
|
|
53
|
+
export declare const FormRoot: <TData extends FieldValues>({ schema, idMap, setIdMap, form, serverUrl, translate, children, order, ignore, include, onSubmit, rowNumber, requestOptions, getUpdatedData, customErrorRenderer, customSuccessRenderer, displayConfig, requireConfirmation, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog, }: FormRootProps<TData>) => import("react/jsx-runtime").JSX.Element;
|