@k3-tech/react-kit 0.0.61 → 0.0.62
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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +482 -9
- package/dist/kit/builder/data-table/components/DataTable.d.ts +3 -1
- package/dist/kit/builder/data-table/components/DataTable.d.ts.map +1 -1
- package/dist/kit/components/data-table-headers/DataTableHeader.d.ts +25 -0
- package/dist/kit/components/data-table-headers/DataTableHeader.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/DebouncedFilterField.d.ts +23 -0
- package/dist/kit/components/data-table-headers/DebouncedFilterField.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/FilterFieldRenderer.d.ts +19 -0
- package/dist/kit/components/data-table-headers/FilterFieldRenderer.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/index.d.ts +7 -0
- package/dist/kit/components/data-table-headers/index.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/types.d.ts +76 -0
- package/dist/kit/components/data-table-headers/types.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/urlSerialization.d.ts +12 -0
- package/dist/kit/components/data-table-headers/urlSerialization.d.ts.map +1 -0
- package/dist/kit/components/data-table-headers/useDataTableHeaderUrl.d.ts +36 -0
- package/dist/kit/components/data-table-headers/useDataTableHeaderUrl.d.ts.map +1 -0
- package/dist/kit/themes/clean-slate.css +8 -0
- package/dist/kit/themes/default.css +8 -0
- package/dist/kit/themes/minimal-modern.css +8 -0
- package/dist/kit/themes/spotify.css +8 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/kit/builder/data-table/components/DataTable.tsx +5 -2
- package/src/kit/components/data-table-headers/DataTableHeader.tsx +158 -0
- package/src/kit/components/data-table-headers/DebouncedFilterField.tsx +83 -0
- package/src/kit/components/data-table-headers/FilterFieldRenderer.tsx +194 -0
- package/src/kit/components/data-table-headers/index.ts +6 -0
- package/src/kit/components/data-table-headers/types.ts +89 -0
- package/src/kit/components/data-table-headers/urlSerialization.ts +173 -0
- package/src/kit/components/data-table-headers/useDataTableHeaderUrl.ts +107 -0
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './kit/components/fileuploader';
|
|
|
16
16
|
export * from './kit/components/numpad';
|
|
17
17
|
export * from './kit/components/keyboard';
|
|
18
18
|
export * from './kit/components/timepicker';
|
|
19
|
+
export * from './kit/components/data-table-headers';
|
|
19
20
|
export { default as AdminLayout } from './kit/layouts/admin/components/AdminLayout';
|
|
20
21
|
export { default as ThemeToggle } from './kit/layouts/admin/components/ThemeToggle';
|
|
21
22
|
export * from './kit/layouts/admin/hooks/menu';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAK1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAE1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAChE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAK1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAE1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAChE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAKpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACpF,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,2BAA2B,CAAC;AAK1C,cAAc,+BAA+B,CAAC;AAK9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAK/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9927,7 +9927,7 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
9927
9927
|
const isRadio = isRadioInput(ref);
|
|
9928
9928
|
const isCheckBox = isCheckBoxInput(ref);
|
|
9929
9929
|
const isRadioOrCheckbox2 = isRadio || isCheckBox;
|
|
9930
|
-
const
|
|
9930
|
+
const isEmpty2 = (valueAsNumber || isFileInput(ref)) && isUndefined(ref.value) && isUndefined(inputValue) || isHTMLElement$2(ref) && ref.value === "" || inputValue === "" || Array.isArray(inputValue) && !inputValue.length;
|
|
9931
9931
|
const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);
|
|
9932
9932
|
const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {
|
|
9933
9933
|
const message2 = exceedMax ? maxLengthMessage : minLengthMessage;
|
|
@@ -9938,7 +9938,7 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
9938
9938
|
...appendErrorsCurry(exceedMax ? maxType : minType, message2)
|
|
9939
9939
|
};
|
|
9940
9940
|
};
|
|
9941
|
-
if (isFieldArray ? !Array.isArray(inputValue) || !inputValue.length : required2 && (!isRadioOrCheckbox2 && (
|
|
9941
|
+
if (isFieldArray ? !Array.isArray(inputValue) || !inputValue.length : required2 && (!isRadioOrCheckbox2 && (isEmpty2 || isNullOrUndefined(inputValue)) || isBoolean$1(inputValue) && !inputValue || isCheckBox && !getCheckboxValue(refs).isValid || isRadio && !getRadioValue(refs).isValid)) {
|
|
9942
9942
|
const { value, message: message2 } = isString$2(required2) ? { value: !!required2, message: required2 } : getValueAndMessage(required2);
|
|
9943
9943
|
if (value) {
|
|
9944
9944
|
error[name] = {
|
|
@@ -9953,7 +9953,7 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
9953
9953
|
}
|
|
9954
9954
|
}
|
|
9955
9955
|
}
|
|
9956
|
-
if (!
|
|
9956
|
+
if (!isEmpty2 && (!isNullOrUndefined(min2) || !isNullOrUndefined(max2))) {
|
|
9957
9957
|
let exceedMax;
|
|
9958
9958
|
let exceedMin;
|
|
9959
9959
|
const maxOutput = getValueAndMessage(max2);
|
|
@@ -9986,7 +9986,7 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
9986
9986
|
}
|
|
9987
9987
|
}
|
|
9988
9988
|
}
|
|
9989
|
-
if ((maxLength || minLength) && !
|
|
9989
|
+
if ((maxLength || minLength) && !isEmpty2 && (isString$2(inputValue) || isFieldArray && Array.isArray(inputValue))) {
|
|
9990
9990
|
const maxLengthOutput = getValueAndMessage(maxLength);
|
|
9991
9991
|
const minLengthOutput = getValueAndMessage(minLength);
|
|
9992
9992
|
const exceedMax = !isNullOrUndefined(maxLengthOutput.value) && inputValue.length > +maxLengthOutput.value;
|
|
@@ -9999,7 +9999,7 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
9999
9999
|
}
|
|
10000
10000
|
}
|
|
10001
10001
|
}
|
|
10002
|
-
if (pattern && !
|
|
10002
|
+
if (pattern && !isEmpty2 && isString$2(inputValue)) {
|
|
10003
10003
|
const { value: patternValue, message: message2 } = getValueAndMessage(pattern);
|
|
10004
10004
|
if (isRegex(patternValue) && !inputValue.match(patternValue)) {
|
|
10005
10005
|
error[name] = {
|
|
@@ -40233,6 +40233,7 @@ function DataTable({
|
|
|
40233
40233
|
onTable,
|
|
40234
40234
|
className,
|
|
40235
40235
|
emptyText = "No results.",
|
|
40236
|
+
formFilterForm,
|
|
40236
40237
|
formFilters,
|
|
40237
40238
|
formFilterValues,
|
|
40238
40239
|
onFormFilterChange,
|
|
@@ -40441,6 +40442,7 @@ function DataTable({
|
|
|
40441
40442
|
/* @__PURE__ */ jsx(AccordionContent, { className: "px-4 pb-4 pt-5", children: /* @__PURE__ */ jsx(
|
|
40442
40443
|
FormBuilder,
|
|
40443
40444
|
{
|
|
40445
|
+
form: formFilterForm,
|
|
40444
40446
|
sections: formFilters,
|
|
40445
40447
|
defaultValues: formFilterValues,
|
|
40446
40448
|
onSubmit: (data2) => onFormFilterChange == null ? void 0 : onFormFilterChange(data2),
|
|
@@ -40449,8 +40451,7 @@ function DataTable({
|
|
|
40449
40451
|
submitLabel: "Apply",
|
|
40450
40452
|
resetLabel: "Clear",
|
|
40451
40453
|
showActionsSeparator: filterShowActionsSeparator
|
|
40452
|
-
}
|
|
40453
|
-
JSON.stringify(formFilterValues ?? {})
|
|
40454
|
+
}
|
|
40454
40455
|
) })
|
|
40455
40456
|
] })
|
|
40456
40457
|
}
|
|
@@ -44674,7 +44675,7 @@ function requireLodash() {
|
|
|
44674
44675
|
function isElement2(value) {
|
|
44675
44676
|
return isObjectLike(value) && value.nodeType === 1 && !isPlainObject2(value);
|
|
44676
44677
|
}
|
|
44677
|
-
function
|
|
44678
|
+
function isEmpty2(value) {
|
|
44678
44679
|
if (value == null) {
|
|
44679
44680
|
return true;
|
|
44680
44681
|
}
|
|
@@ -45807,7 +45808,7 @@ function requireLodash() {
|
|
|
45807
45808
|
lodash2.isBuffer = isBuffer2;
|
|
45808
45809
|
lodash2.isDate = isDate2;
|
|
45809
45810
|
lodash2.isElement = isElement2;
|
|
45810
|
-
lodash2.isEmpty =
|
|
45811
|
+
lodash2.isEmpty = isEmpty2;
|
|
45811
45812
|
lodash2.isEqual = isEqual;
|
|
45812
45813
|
lodash2.isEqualWith = isEqualWith;
|
|
45813
45814
|
lodash2.isError = isError;
|
|
@@ -47847,6 +47848,470 @@ function Keyboard({
|
|
|
47847
47848
|
);
|
|
47848
47849
|
}
|
|
47849
47850
|
Keyboard.displayName = "Keyboard";
|
|
47851
|
+
function DebouncedFilterField({
|
|
47852
|
+
field,
|
|
47853
|
+
value,
|
|
47854
|
+
onChange,
|
|
47855
|
+
debounceMs,
|
|
47856
|
+
control,
|
|
47857
|
+
className
|
|
47858
|
+
}) {
|
|
47859
|
+
const [draft, setDraft] = useState(value);
|
|
47860
|
+
const lastPushedRef = useRef(value);
|
|
47861
|
+
const debounced = c$1((v) => {
|
|
47862
|
+
lastPushedRef.current = v;
|
|
47863
|
+
onChange(v);
|
|
47864
|
+
}, debounceMs);
|
|
47865
|
+
const handleChange = (v) => {
|
|
47866
|
+
setDraft(v);
|
|
47867
|
+
debounced(v);
|
|
47868
|
+
};
|
|
47869
|
+
useEffect(() => {
|
|
47870
|
+
if (!Object.is(value, lastPushedRef.current)) {
|
|
47871
|
+
debounced.cancel();
|
|
47872
|
+
lastPushedRef.current = value;
|
|
47873
|
+
setDraft(value);
|
|
47874
|
+
}
|
|
47875
|
+
}, [value]);
|
|
47876
|
+
useEffect(
|
|
47877
|
+
() => () => {
|
|
47878
|
+
debounced.flush();
|
|
47879
|
+
},
|
|
47880
|
+
[debounced]
|
|
47881
|
+
);
|
|
47882
|
+
const common = {
|
|
47883
|
+
field,
|
|
47884
|
+
control,
|
|
47885
|
+
fieldPath: field.name,
|
|
47886
|
+
value: draft,
|
|
47887
|
+
onChange: handleChange,
|
|
47888
|
+
className
|
|
47889
|
+
};
|
|
47890
|
+
if (field.type === "textarea") return /* @__PURE__ */ jsx(TextareaField, { ...common });
|
|
47891
|
+
if (field.type === "number") return /* @__PURE__ */ jsx(NumberField, { ...common });
|
|
47892
|
+
return /* @__PURE__ */ jsx(TextField, { ...common });
|
|
47893
|
+
}
|
|
47894
|
+
const DEBOUNCED_TYPES = /* @__PURE__ */ new Set([
|
|
47895
|
+
"text",
|
|
47896
|
+
"email",
|
|
47897
|
+
"password",
|
|
47898
|
+
"number",
|
|
47899
|
+
"textarea"
|
|
47900
|
+
]);
|
|
47901
|
+
const UNSUPPORTED_TYPES = /* @__PURE__ */ new Set([
|
|
47902
|
+
"object",
|
|
47903
|
+
"array",
|
|
47904
|
+
"custom_field",
|
|
47905
|
+
"hidden"
|
|
47906
|
+
]);
|
|
47907
|
+
const warned = /* @__PURE__ */ new Set();
|
|
47908
|
+
const warnUnsupported = (type) => {
|
|
47909
|
+
if (process.env.NODE_ENV !== "production" && !warned.has(type)) {
|
|
47910
|
+
warned.add(type);
|
|
47911
|
+
console.warn(
|
|
47912
|
+
`[DataTableHeader] field type '${type}' is not supported in filter headers and was skipped.`
|
|
47913
|
+
);
|
|
47914
|
+
}
|
|
47915
|
+
};
|
|
47916
|
+
function FilterFieldRenderer({
|
|
47917
|
+
field,
|
|
47918
|
+
value,
|
|
47919
|
+
onChange,
|
|
47920
|
+
debounceMs,
|
|
47921
|
+
control
|
|
47922
|
+
}) {
|
|
47923
|
+
if (UNSUPPORTED_TYPES.has(field.type)) {
|
|
47924
|
+
warnUnsupported(field.type);
|
|
47925
|
+
return null;
|
|
47926
|
+
}
|
|
47927
|
+
const inputClassName = cn$1("bg-background", field.className);
|
|
47928
|
+
let input;
|
|
47929
|
+
if (DEBOUNCED_TYPES.has(field.type)) {
|
|
47930
|
+
input = /* @__PURE__ */ jsx(
|
|
47931
|
+
DebouncedFilterField,
|
|
47932
|
+
{
|
|
47933
|
+
field,
|
|
47934
|
+
value,
|
|
47935
|
+
onChange,
|
|
47936
|
+
debounceMs,
|
|
47937
|
+
control,
|
|
47938
|
+
className: inputClassName
|
|
47939
|
+
}
|
|
47940
|
+
);
|
|
47941
|
+
} else {
|
|
47942
|
+
const common = {
|
|
47943
|
+
field,
|
|
47944
|
+
control,
|
|
47945
|
+
fieldPath: field.name,
|
|
47946
|
+
value,
|
|
47947
|
+
onChange,
|
|
47948
|
+
className: inputClassName
|
|
47949
|
+
};
|
|
47950
|
+
switch (field.type) {
|
|
47951
|
+
case "select":
|
|
47952
|
+
input = /* @__PURE__ */ jsx(SelectField, { ...common });
|
|
47953
|
+
break;
|
|
47954
|
+
case "autocomplete":
|
|
47955
|
+
input = /* @__PURE__ */ jsx(AutocompleteField, { ...common });
|
|
47956
|
+
break;
|
|
47957
|
+
case "checkbox":
|
|
47958
|
+
input = /* @__PURE__ */ jsx(CheckboxField, { ...common });
|
|
47959
|
+
break;
|
|
47960
|
+
case "switch":
|
|
47961
|
+
input = /* @__PURE__ */ jsx(SwitchField, { ...common });
|
|
47962
|
+
break;
|
|
47963
|
+
case "radio":
|
|
47964
|
+
input = /* @__PURE__ */ jsx(RadioField, { ...common });
|
|
47965
|
+
break;
|
|
47966
|
+
case "date":
|
|
47967
|
+
input = /* @__PURE__ */ jsx(DateField, { ...common });
|
|
47968
|
+
break;
|
|
47969
|
+
case "date_picker":
|
|
47970
|
+
input = /* @__PURE__ */ jsx(DatePickerField, { ...common });
|
|
47971
|
+
break;
|
|
47972
|
+
case "date_range":
|
|
47973
|
+
input = /* @__PURE__ */ jsx(DateRangePickerField, { ...common });
|
|
47974
|
+
break;
|
|
47975
|
+
case "date_time":
|
|
47976
|
+
input = /* @__PURE__ */ jsx(DateTimePickerField, { ...common });
|
|
47977
|
+
break;
|
|
47978
|
+
case "date_time_range":
|
|
47979
|
+
input = /* @__PURE__ */ jsx(DateTimeRangePickerField, { ...common });
|
|
47980
|
+
break;
|
|
47981
|
+
case "month":
|
|
47982
|
+
input = /* @__PURE__ */ jsx(MonthPickerField, { ...common });
|
|
47983
|
+
break;
|
|
47984
|
+
case "month_range":
|
|
47985
|
+
input = /* @__PURE__ */ jsx(MonthRangePickerField, { ...common });
|
|
47986
|
+
break;
|
|
47987
|
+
case "time":
|
|
47988
|
+
input = /* @__PURE__ */ jsx(TimePickerField, { ...common });
|
|
47989
|
+
break;
|
|
47990
|
+
case "time_range":
|
|
47991
|
+
input = /* @__PURE__ */ jsx(TimeRangePickerField, { ...common });
|
|
47992
|
+
break;
|
|
47993
|
+
case "file":
|
|
47994
|
+
input = /* @__PURE__ */ jsx(FileField, { ...common });
|
|
47995
|
+
break;
|
|
47996
|
+
default:
|
|
47997
|
+
input = /* @__PURE__ */ jsx(
|
|
47998
|
+
DebouncedFilterField,
|
|
47999
|
+
{
|
|
48000
|
+
field,
|
|
48001
|
+
value,
|
|
48002
|
+
onChange,
|
|
48003
|
+
debounceMs,
|
|
48004
|
+
control,
|
|
48005
|
+
className: inputClassName
|
|
48006
|
+
}
|
|
48007
|
+
);
|
|
48008
|
+
}
|
|
48009
|
+
}
|
|
48010
|
+
const labelText = typeof field.label === "string" ? field.label.trim() : field.label;
|
|
48011
|
+
const showLabel = field.labelPlacement !== "hidden" && labelText != null && labelText !== "" && field.type !== "checkbox" && field.type !== "switch";
|
|
48012
|
+
return /* @__PURE__ */ jsxs(
|
|
48013
|
+
"div",
|
|
48014
|
+
{
|
|
48015
|
+
className: cn$1(
|
|
48016
|
+
"w-full space-y-1 sm:w-auto sm:min-w-[180px]",
|
|
48017
|
+
field.wrapperClassName
|
|
48018
|
+
),
|
|
48019
|
+
children: [
|
|
48020
|
+
showLabel && /* @__PURE__ */ jsx(Label$2, { htmlFor: field.name, className: "text-xs text-muted-foreground", children: field.label }),
|
|
48021
|
+
input
|
|
48022
|
+
]
|
|
48023
|
+
}
|
|
48024
|
+
);
|
|
48025
|
+
}
|
|
48026
|
+
const DATE_TYPES = /* @__PURE__ */ new Set([
|
|
48027
|
+
"date",
|
|
48028
|
+
"date_picker",
|
|
48029
|
+
"month",
|
|
48030
|
+
"time",
|
|
48031
|
+
"date_time"
|
|
48032
|
+
]);
|
|
48033
|
+
const RANGE_TYPES = /* @__PURE__ */ new Set([
|
|
48034
|
+
"date_range",
|
|
48035
|
+
"date_time_range",
|
|
48036
|
+
"month_range",
|
|
48037
|
+
"time_range"
|
|
48038
|
+
]);
|
|
48039
|
+
const SKIP_TYPES = /* @__PURE__ */ new Set(["object", "array", "custom_field", "hidden"]);
|
|
48040
|
+
const isEmpty = (v) => v === null || v === void 0 || v === "";
|
|
48041
|
+
const toIso = (v) => {
|
|
48042
|
+
const d = v instanceof Date ? v : new Date(v);
|
|
48043
|
+
return Number.isNaN(d.getTime()) ? null : d.toISOString();
|
|
48044
|
+
};
|
|
48045
|
+
const fromIso = (raw) => {
|
|
48046
|
+
const d = new Date(raw);
|
|
48047
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
48048
|
+
};
|
|
48049
|
+
const recoverOptionValue = (field, raw) => {
|
|
48050
|
+
var _a2;
|
|
48051
|
+
const match2 = (_a2 = field.options) == null ? void 0 : _a2.find((o2) => String(o2.value) === raw);
|
|
48052
|
+
return match2 ? match2.value : raw;
|
|
48053
|
+
};
|
|
48054
|
+
const coerceScalar = (raw) => raw !== "" && !Number.isNaN(Number(raw)) ? Number(raw) : raw;
|
|
48055
|
+
function serializeAll(fields, values) {
|
|
48056
|
+
const params = {};
|
|
48057
|
+
for (const field of fields) {
|
|
48058
|
+
if (SKIP_TYPES.has(field.type)) continue;
|
|
48059
|
+
const name = field.name;
|
|
48060
|
+
const value = values[name];
|
|
48061
|
+
if (RANGE_TYPES.has(field.type)) {
|
|
48062
|
+
const range = value;
|
|
48063
|
+
const from = range && !isEmpty(range.from) ? toIso(range.from) : null;
|
|
48064
|
+
const to = range && !isEmpty(range.to) ? toIso(range.to) : null;
|
|
48065
|
+
if (from) params[`${name}_from`] = from;
|
|
48066
|
+
if (to) params[`${name}_to`] = to;
|
|
48067
|
+
continue;
|
|
48068
|
+
}
|
|
48069
|
+
if (isEmpty(value)) continue;
|
|
48070
|
+
if (Array.isArray(value)) {
|
|
48071
|
+
const arr = value.filter((v) => !isEmpty(v)).map((v) => String(v));
|
|
48072
|
+
if (arr.length) params[name] = arr;
|
|
48073
|
+
continue;
|
|
48074
|
+
}
|
|
48075
|
+
if (DATE_TYPES.has(field.type)) {
|
|
48076
|
+
const iso = toIso(value);
|
|
48077
|
+
if (iso) params[name] = iso;
|
|
48078
|
+
continue;
|
|
48079
|
+
}
|
|
48080
|
+
params[name] = String(value);
|
|
48081
|
+
}
|
|
48082
|
+
return params;
|
|
48083
|
+
}
|
|
48084
|
+
function deserializeAll(fields, params) {
|
|
48085
|
+
const result = {};
|
|
48086
|
+
const first = (v) => Array.isArray(v) ? v[0] : v;
|
|
48087
|
+
for (const field of fields) {
|
|
48088
|
+
if (SKIP_TYPES.has(field.type)) continue;
|
|
48089
|
+
const name = field.name;
|
|
48090
|
+
if (RANGE_TYPES.has(field.type)) {
|
|
48091
|
+
const from = first(params[`${name}_from`]);
|
|
48092
|
+
const to = first(params[`${name}_to`]);
|
|
48093
|
+
const range = {};
|
|
48094
|
+
if (from) {
|
|
48095
|
+
const d = fromIso(from);
|
|
48096
|
+
if (d) range.from = d;
|
|
48097
|
+
}
|
|
48098
|
+
if (to) {
|
|
48099
|
+
const d = fromIso(to);
|
|
48100
|
+
if (d) range.to = d;
|
|
48101
|
+
}
|
|
48102
|
+
if (range.from || range.to) result[name] = range;
|
|
48103
|
+
continue;
|
|
48104
|
+
}
|
|
48105
|
+
const raw = params[name];
|
|
48106
|
+
if (raw === void 0) continue;
|
|
48107
|
+
if (field.multiple || Array.isArray(raw)) {
|
|
48108
|
+
const arr = (Array.isArray(raw) ? raw : [raw]).map(coerceScalar);
|
|
48109
|
+
result[name] = arr;
|
|
48110
|
+
continue;
|
|
48111
|
+
}
|
|
48112
|
+
const value = raw;
|
|
48113
|
+
switch (field.type) {
|
|
48114
|
+
case "number":
|
|
48115
|
+
if (value !== "" && !Number.isNaN(Number(value)))
|
|
48116
|
+
result[name] = Number(value);
|
|
48117
|
+
break;
|
|
48118
|
+
case "checkbox":
|
|
48119
|
+
case "switch":
|
|
48120
|
+
result[name] = value === "true";
|
|
48121
|
+
break;
|
|
48122
|
+
case "select":
|
|
48123
|
+
case "radio":
|
|
48124
|
+
result[name] = recoverOptionValue(field, value);
|
|
48125
|
+
break;
|
|
48126
|
+
case "autocomplete":
|
|
48127
|
+
result[name] = coerceScalar(value);
|
|
48128
|
+
break;
|
|
48129
|
+
default:
|
|
48130
|
+
if (DATE_TYPES.has(field.type)) {
|
|
48131
|
+
const d = fromIso(value);
|
|
48132
|
+
if (d) result[name] = d;
|
|
48133
|
+
} else {
|
|
48134
|
+
result[name] = value;
|
|
48135
|
+
}
|
|
48136
|
+
}
|
|
48137
|
+
}
|
|
48138
|
+
return result;
|
|
48139
|
+
}
|
|
48140
|
+
const nativeAdapter = {
|
|
48141
|
+
read: () => {
|
|
48142
|
+
if (typeof window === "undefined") return {};
|
|
48143
|
+
const usp = new URLSearchParams(window.location.search);
|
|
48144
|
+
const out = {};
|
|
48145
|
+
for (const key of usp.keys()) {
|
|
48146
|
+
if (key in out) continue;
|
|
48147
|
+
const all = usp.getAll(key);
|
|
48148
|
+
out[key] = all.length > 1 ? all : all[0];
|
|
48149
|
+
}
|
|
48150
|
+
return out;
|
|
48151
|
+
},
|
|
48152
|
+
write: (params) => {
|
|
48153
|
+
if (typeof window === "undefined") return;
|
|
48154
|
+
const usp = new URLSearchParams();
|
|
48155
|
+
for (const [key, value] of Object.entries(params)) {
|
|
48156
|
+
if (Array.isArray(value))
|
|
48157
|
+
value.forEach((v) => {
|
|
48158
|
+
usp.append(key, v);
|
|
48159
|
+
});
|
|
48160
|
+
else usp.append(key, value);
|
|
48161
|
+
}
|
|
48162
|
+
const query = usp.toString();
|
|
48163
|
+
const url = query ? `${window.location.pathname}?${query}` : window.location.pathname;
|
|
48164
|
+
window.history.replaceState(null, "", url);
|
|
48165
|
+
}
|
|
48166
|
+
};
|
|
48167
|
+
function useDataTableHeaderUrl({
|
|
48168
|
+
enabled,
|
|
48169
|
+
fields,
|
|
48170
|
+
values,
|
|
48171
|
+
adapter,
|
|
48172
|
+
onHydrate
|
|
48173
|
+
}) {
|
|
48174
|
+
const hydratedRef = useRef(false);
|
|
48175
|
+
const lastWrittenRef = useRef(null);
|
|
48176
|
+
useEffect(() => {
|
|
48177
|
+
if (!enabled || hydratedRef.current) return;
|
|
48178
|
+
hydratedRef.current = true;
|
|
48179
|
+
const params = adapter.read();
|
|
48180
|
+
const hydrated = deserializeAll(fields, params);
|
|
48181
|
+
lastWrittenRef.current = JSON.stringify(serializeAll(fields, hydrated));
|
|
48182
|
+
if (Object.keys(hydrated).length) onHydrate(hydrated);
|
|
48183
|
+
}, [enabled]);
|
|
48184
|
+
useEffect(() => {
|
|
48185
|
+
if (!enabled) return;
|
|
48186
|
+
const params = serializeAll(fields, values);
|
|
48187
|
+
const serialized = JSON.stringify(params);
|
|
48188
|
+
if (serialized === lastWrittenRef.current) return;
|
|
48189
|
+
lastWrittenRef.current = serialized;
|
|
48190
|
+
adapter.write(params);
|
|
48191
|
+
}, [enabled, values]);
|
|
48192
|
+
}
|
|
48193
|
+
function useFilterControl() {
|
|
48194
|
+
const { control } = useForm();
|
|
48195
|
+
return control;
|
|
48196
|
+
}
|
|
48197
|
+
function DataTableHeader({
|
|
48198
|
+
fields,
|
|
48199
|
+
values,
|
|
48200
|
+
onChange,
|
|
48201
|
+
onChangeAll,
|
|
48202
|
+
debounceMs = 400,
|
|
48203
|
+
url = false,
|
|
48204
|
+
actions = [],
|
|
48205
|
+
onRefresh,
|
|
48206
|
+
children,
|
|
48207
|
+
className,
|
|
48208
|
+
filtersClassName,
|
|
48209
|
+
actionsClassName
|
|
48210
|
+
}) {
|
|
48211
|
+
const control = useFilterControl();
|
|
48212
|
+
const adapter = url === true ? nativeAdapter : url || nativeAdapter;
|
|
48213
|
+
const handleHydrate = useCallback(
|
|
48214
|
+
(next) => {
|
|
48215
|
+
if (onChangeAll) {
|
|
48216
|
+
onChangeAll({ ...values, ...next });
|
|
48217
|
+
return;
|
|
48218
|
+
}
|
|
48219
|
+
for (const [name, value] of Object.entries(next)) onChange(name, value);
|
|
48220
|
+
},
|
|
48221
|
+
// `values` intentionally omitted: hydration runs once on mount and we don't
|
|
48222
|
+
// want to re-bind to every value change.
|
|
48223
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48224
|
+
[onChange, onChangeAll]
|
|
48225
|
+
);
|
|
48226
|
+
useDataTableHeaderUrl({
|
|
48227
|
+
enabled: url !== false,
|
|
48228
|
+
fields,
|
|
48229
|
+
values,
|
|
48230
|
+
adapter,
|
|
48231
|
+
onHydrate: handleHydrate
|
|
48232
|
+
});
|
|
48233
|
+
const renderActionButton = (action, key) => {
|
|
48234
|
+
if (action.element)
|
|
48235
|
+
return /* @__PURE__ */ jsx(React__default.Fragment, { children: action.element }, key);
|
|
48236
|
+
const content = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
|
|
48237
|
+
action.icon && /* @__PURE__ */ jsx(
|
|
48238
|
+
"span",
|
|
48239
|
+
{
|
|
48240
|
+
className: cn$1(action.iconPosition === "right" ? "order-last" : ""),
|
|
48241
|
+
children: action.icon
|
|
48242
|
+
}
|
|
48243
|
+
),
|
|
48244
|
+
action.label
|
|
48245
|
+
] });
|
|
48246
|
+
return /* @__PURE__ */ jsx(
|
|
48247
|
+
Button$1,
|
|
48248
|
+
{
|
|
48249
|
+
size: "sm",
|
|
48250
|
+
variant: action.variant ?? "default",
|
|
48251
|
+
disabled: action.disabled,
|
|
48252
|
+
onClick: action.onClick,
|
|
48253
|
+
className: "h-8",
|
|
48254
|
+
children: content
|
|
48255
|
+
},
|
|
48256
|
+
key
|
|
48257
|
+
);
|
|
48258
|
+
};
|
|
48259
|
+
return /* @__PURE__ */ jsxs(
|
|
48260
|
+
"div",
|
|
48261
|
+
{
|
|
48262
|
+
className: cn$1("flex items-start justify-between gap-3", className),
|
|
48263
|
+
children: [
|
|
48264
|
+
/* @__PURE__ */ jsx(
|
|
48265
|
+
"div",
|
|
48266
|
+
{
|
|
48267
|
+
className: cn$1(
|
|
48268
|
+
"flex min-w-0 flex-1 flex-wrap items-end gap-2",
|
|
48269
|
+
filtersClassName
|
|
48270
|
+
),
|
|
48271
|
+
children: fields.map((field) => /* @__PURE__ */ jsx(
|
|
48272
|
+
FilterFieldRenderer,
|
|
48273
|
+
{
|
|
48274
|
+
field,
|
|
48275
|
+
value: values[field.name],
|
|
48276
|
+
onChange: (value) => onChange(field.name, value),
|
|
48277
|
+
debounceMs,
|
|
48278
|
+
control
|
|
48279
|
+
},
|
|
48280
|
+
field.name
|
|
48281
|
+
))
|
|
48282
|
+
}
|
|
48283
|
+
),
|
|
48284
|
+
children,
|
|
48285
|
+
(actions.length > 0 || onRefresh) && /* @__PURE__ */ jsxs(
|
|
48286
|
+
"div",
|
|
48287
|
+
{
|
|
48288
|
+
className: cn$1(
|
|
48289
|
+
"flex shrink-0 flex-nowrap items-center gap-2",
|
|
48290
|
+
actionsClassName
|
|
48291
|
+
),
|
|
48292
|
+
children: [
|
|
48293
|
+
onRefresh && /* @__PURE__ */ jsxs(
|
|
48294
|
+
Button$1,
|
|
48295
|
+
{
|
|
48296
|
+
variant: "outline",
|
|
48297
|
+
size: "sm",
|
|
48298
|
+
onClick: onRefresh,
|
|
48299
|
+
className: "h-8",
|
|
48300
|
+
title: "Refresh",
|
|
48301
|
+
children: [
|
|
48302
|
+
/* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" }),
|
|
48303
|
+
" Refresh"
|
|
48304
|
+
]
|
|
48305
|
+
}
|
|
48306
|
+
),
|
|
48307
|
+
actions.map((action) => renderActionButton(action, action.key))
|
|
48308
|
+
]
|
|
48309
|
+
}
|
|
48310
|
+
)
|
|
48311
|
+
]
|
|
48312
|
+
}
|
|
48313
|
+
);
|
|
48314
|
+
}
|
|
47850
48315
|
const MOBILE_BREAKPOINT = 768;
|
|
47851
48316
|
function useIsMobile() {
|
|
47852
48317
|
const [isMobile, setIsMobile] = React.useState(
|
|
@@ -67031,12 +67496,14 @@ export {
|
|
|
67031
67496
|
ContextMenuTrigger,
|
|
67032
67497
|
DataTable,
|
|
67033
67498
|
DataTableColumnHeader,
|
|
67499
|
+
DataTableHeader,
|
|
67034
67500
|
DataTablePagination,
|
|
67035
67501
|
DataTableViewOptions,
|
|
67036
67502
|
DatePicker,
|
|
67037
67503
|
DateRangePicker,
|
|
67038
67504
|
DateTimePicker,
|
|
67039
67505
|
DateTimeRangePicker,
|
|
67506
|
+
DebouncedFilterField,
|
|
67040
67507
|
Dialog,
|
|
67041
67508
|
DialogClose,
|
|
67042
67509
|
DialogContent,
|
|
@@ -67074,6 +67541,7 @@ export {
|
|
|
67074
67541
|
DropdownMenuSubTrigger,
|
|
67075
67542
|
DropdownMenuTrigger,
|
|
67076
67543
|
FileUploader,
|
|
67544
|
+
FilterFieldRenderer,
|
|
67077
67545
|
Form,
|
|
67078
67546
|
FormBuilder,
|
|
67079
67547
|
FormBuilderActions,
|
|
@@ -67243,11 +67711,14 @@ export {
|
|
|
67243
67711
|
createSection,
|
|
67244
67712
|
createStorage,
|
|
67245
67713
|
createTokenManager,
|
|
67714
|
+
deserializeAll,
|
|
67246
67715
|
dotAccessor,
|
|
67247
67716
|
evaluatePermissionRule,
|
|
67248
67717
|
expandPermissions,
|
|
67249
67718
|
expandRoles,
|
|
67719
|
+
nativeAdapter,
|
|
67250
67720
|
navigationMenuTriggerStyle,
|
|
67721
|
+
serializeAll,
|
|
67251
67722
|
toast,
|
|
67252
67723
|
toggleVariants,
|
|
67253
67724
|
transformers,
|
|
@@ -67263,8 +67734,10 @@ export {
|
|
|
67263
67734
|
useAuthToken,
|
|
67264
67735
|
useAuthUser,
|
|
67265
67736
|
useCan,
|
|
67737
|
+
useDataTableHeaderUrl,
|
|
67266
67738
|
useDialog,
|
|
67267
67739
|
useDialogController,
|
|
67740
|
+
useFilterControl,
|
|
67268
67741
|
useFormBuilder,
|
|
67269
67742
|
useFormField,
|
|
67270
67743
|
useIsAuthenticated,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ColumnDef, ColumnFiltersState, PaginationState, Table as ReactTable, SortingState, VisibilityState } from '@tanstack/react-table';
|
|
2
|
+
import { UseFormReturn } from 'react-hook-form';
|
|
2
3
|
import { DataTableAction, DataTableBatchAction, DataTableFiltersProp } from '../types';
|
|
3
4
|
import * as React from 'react';
|
|
4
5
|
export interface DataTableProps<TData, TValue> {
|
|
@@ -25,6 +26,7 @@ export interface DataTableProps<TData, TValue> {
|
|
|
25
26
|
formFilters?: DataTableFiltersProp;
|
|
26
27
|
formFilterValues?: Record<string, unknown> | null;
|
|
27
28
|
onFormFilterChange?: (values: Record<string, unknown>) => void;
|
|
29
|
+
formFilterForm?: UseFormReturn<any>;
|
|
28
30
|
selectable?: boolean;
|
|
29
31
|
actions?: DataTableAction[];
|
|
30
32
|
batchActions?: DataTableBatchAction<TData>[];
|
|
@@ -40,5 +42,5 @@ export interface DataTableProps<TData, TValue> {
|
|
|
40
42
|
*/
|
|
41
43
|
CustomHeaderComponent?: () => React.ReactNode;
|
|
42
44
|
}
|
|
43
|
-
export declare function DataTable<TData, TValue>({ columns, data, loading, sorting, sortingState, onSortingChange, columnFilters, columnFiltersState, onColumnFiltersChange, rowCount, pagination, paginationVariant, onPaginationChange, paginationState, columnVisibility, columnVisibilityState, onColumnVisibilityChange, onTable, className, emptyText, formFilters, formFilterValues, onFormFilterChange, selectable, actions, batchActions, showStandardActions, onRefresh, onRowClick, filterWrapper, filterTitle, filterShowActionsSeparator, CustomHeaderComponent, }: DataTableProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare function DataTable<TData, TValue>({ columns, data, loading, sorting, sortingState, onSortingChange, columnFilters, columnFiltersState, onColumnFiltersChange, rowCount, pagination, paginationVariant, onPaginationChange, paginationState, columnVisibility, columnVisibilityState, onColumnVisibilityChange, onTable, className, emptyText, formFilterForm, formFilters, formFilterValues, onFormFilterChange, selectable, actions, batchActions, showStandardActions, onRefresh, onRowClick, filterWrapper, filterTitle, filterShowActionsSeparator, CustomHeaderComponent, }: DataTableProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
|
|
44
46
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/data-table/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,KAAK,IAAI,UAAU,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/data-table/components/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DataTableHeaderProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* A plug-in replacement for the DataTable's default filter + actions header.
|
|
4
|
+
*
|
|
5
|
+
* Plug it into `DataTable`'s `CustomHeaderComponent`:
|
|
6
|
+
*```
|
|
7
|
+
* <DataTable
|
|
8
|
+
* CustomHeaderComponent={() => (
|
|
9
|
+
* <DataTableHeader
|
|
10
|
+
* fields={filterFields}
|
|
11
|
+
* values={filtersState} // owned by your list hook
|
|
12
|
+
* onChange={setFilter} // updates that same state
|
|
13
|
+
* actions={[addAction, refreshAction]}
|
|
14
|
+
* />
|
|
15
|
+
* )}
|
|
16
|
+
* />
|
|
17
|
+
*```
|
|
18
|
+
* Unlike the default FormBuilder-based filter, this header holds NO filter data
|
|
19
|
+
* of its own — `values` is the single source of truth, so the UI can never
|
|
20
|
+
* drift from what is sent to the API. Filters apply on every change (no
|
|
21
|
+
* Apply/Clear); free-typing inputs are debounced internally.
|
|
22
|
+
*/
|
|
23
|
+
export declare function DataTableHeader({ fields, values, onChange, onChangeAll, debounceMs, url, actions, onRefresh, children, className, filtersClassName, actionsClassName, }: DataTableHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default DataTableHeader;
|
|
25
|
+
//# sourceMappingURL=DataTableHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableHeader.d.ts","sourceRoot":"","sources":["../../../../src/kit/components/data-table-headers/DataTableHeader.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAyB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAO3E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,MAAM,EACN,QAAQ,EACR,WAAW,EACX,UAAgB,EAChB,GAAW,EACX,OAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,EAAE,oBAAoB,2CA4GtB;AAED,eAAe,eAAe,CAAC"}
|