@sustaina/shared-ui 1.70.7 → 1.70.8
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.js +81 -71
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +82 -72
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import { createPortal } from 'react-dom';
|
|
|
15
15
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
16
16
|
import { useForm, FormProvider, Controller, useFormContext, useFormState, useFieldArray, useWatch } from 'react-hook-form';
|
|
17
17
|
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
18
|
-
import { format, isValid, parseISO,
|
|
18
|
+
import { format, isValid, parseISO, compareAsc, parse, isAfter } from 'date-fns';
|
|
19
19
|
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
20
20
|
import { Command as Command$1 } from 'cmdk';
|
|
21
21
|
import * as DialogPrimitive2 from '@radix-ui/react-dialog';
|
|
@@ -5500,6 +5500,77 @@ var DatePicker2 = (props) => {
|
|
|
5500
5500
|
// src/components/advanceSearch/components/constants/index.ts
|
|
5501
5501
|
var fallbackShortDateFormat = "DD/MM/YYYY";
|
|
5502
5502
|
var UUIDregex = /^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$/i;
|
|
5503
|
+
var RANGE_START_ERROR = "Start value must be before end value.";
|
|
5504
|
+
var RANGE_END_ERROR = "End value must be after start value.";
|
|
5505
|
+
var RANGE_VALIDATED_TYPES = ["date", "datetime", "datemonth"];
|
|
5506
|
+
var sanitizeInput = (val) => {
|
|
5507
|
+
if (!val) return val;
|
|
5508
|
+
if (Array.isArray(val)) {
|
|
5509
|
+
return val.map((v) => sanitizeInput(v));
|
|
5510
|
+
}
|
|
5511
|
+
if (val.includes("\n") || val.includes("\r") || /[\u2028\u2029]/u.test(val))
|
|
5512
|
+
return "__INVALID_NEWLINE__";
|
|
5513
|
+
if (/\\\\/.test(val)) return "__INVALID_ESCAPE__";
|
|
5514
|
+
if (/\\(n|t|r|b|f|u[0-9a-fA-F]{4})/.test(val)) return "__INVALID_ESCAPE__";
|
|
5515
|
+
if (/\p{Cf}/u.test(val)) return "__INVALID_UNICODE_WHITESPACE__";
|
|
5516
|
+
if (/[\u00A0\u1680\u180E\u202F\u205F\u3000]/u.test(val)) return "__INVALID_UNICODE_WHITESPACE__";
|
|
5517
|
+
const trimmed = val.trim();
|
|
5518
|
+
if (/^\{.*\}$/s.test(trimmed) || /^\[.*\]$/s.test(trimmed)) return "__INVALID_JSON_LITERAL__";
|
|
5519
|
+
if (/\\\{/.test(val) || /\\\}/.test(val)) return "__INVALID_JSON_ESCAPE__";
|
|
5520
|
+
if (/[%*~^]/.test(trimmed)) return "__INVALID_WILDCARD__";
|
|
5521
|
+
if (/[%><={}\\[\]"']/u.test(trimmed)) return "__INVALID_CHAR__";
|
|
5522
|
+
if (/\p{Cc}/u.test(val)) return "__INVALID_CONTROL_CHAR__";
|
|
5523
|
+
return val;
|
|
5524
|
+
};
|
|
5525
|
+
var numericTypes = ["number"];
|
|
5526
|
+
var dateTypes = ["date", "datemonth"];
|
|
5527
|
+
var validateByFieldType = (value, fieldType) => {
|
|
5528
|
+
if (!value) return { valid: true };
|
|
5529
|
+
if (Array.isArray(value)) {
|
|
5530
|
+
return { valid: true };
|
|
5531
|
+
}
|
|
5532
|
+
if (numericTypes.includes(fieldType)) {
|
|
5533
|
+
if (!/^-?\d+(\.\d+)?$/.test(value)) {
|
|
5534
|
+
return { valid: false, message: "Please enter a valid number." };
|
|
5535
|
+
}
|
|
5536
|
+
}
|
|
5537
|
+
if (fieldType === "uuid") {
|
|
5538
|
+
if (!UUIDregex.test(value)) {
|
|
5539
|
+
return { valid: false, message: "Please enter a valid UUID." };
|
|
5540
|
+
}
|
|
5541
|
+
}
|
|
5542
|
+
if (dateTypes.includes(fieldType)) {
|
|
5543
|
+
const normalized = fieldType === "datemonth" ? `${value}-01` : value;
|
|
5544
|
+
const parsed = parseISO(normalized);
|
|
5545
|
+
if (!isValid(parsed)) {
|
|
5546
|
+
return { valid: false, message: "Invalid date format." };
|
|
5547
|
+
}
|
|
5548
|
+
}
|
|
5549
|
+
return { valid: true };
|
|
5550
|
+
};
|
|
5551
|
+
var parseRangeValue = (raw, fieldType) => {
|
|
5552
|
+
if (!raw) return void 0;
|
|
5553
|
+
const normalized = fieldType === "datemonth" ? `${raw}-01` : raw;
|
|
5554
|
+
const parsed = parseISO(normalized);
|
|
5555
|
+
return isValid(parsed) ? parsed : void 0;
|
|
5556
|
+
};
|
|
5557
|
+
var validateDateRange = (which, row, formValues) => {
|
|
5558
|
+
if (row.operator !== "between" || !RANGE_VALIDATED_TYPES.includes(row.fieldType)) return true;
|
|
5559
|
+
const start = formValues[`value_${row.id}`];
|
|
5560
|
+
const end = formValues[`value2_${row.id}`];
|
|
5561
|
+
if (typeof start !== "string" || typeof end !== "string" || !start || !end) return true;
|
|
5562
|
+
const d1 = parseRangeValue(start, row.fieldType);
|
|
5563
|
+
const d2 = parseRangeValue(end, row.fieldType);
|
|
5564
|
+
if (d1 && d2 && isAfter(d1, d2)) {
|
|
5565
|
+
return which === "value" ? RANGE_START_ERROR : RANGE_END_ERROR;
|
|
5566
|
+
}
|
|
5567
|
+
return true;
|
|
5568
|
+
};
|
|
5569
|
+
var buildValueRules = (which, row) => ({
|
|
5570
|
+
required: "This field is required.",
|
|
5571
|
+
validate: (_value, formValues) => validateDateRange(which, row, formValues),
|
|
5572
|
+
deps: [which === "value" ? `value2_${row.id}` : `value_${row.id}`]
|
|
5573
|
+
});
|
|
5503
5574
|
var ConditionDateInput = ({
|
|
5504
5575
|
row,
|
|
5505
5576
|
control,
|
|
@@ -5523,8 +5594,9 @@ var ConditionDateInput = ({
|
|
|
5523
5594
|
{
|
|
5524
5595
|
control,
|
|
5525
5596
|
name: fieldName,
|
|
5526
|
-
rules:
|
|
5597
|
+
rules: buildValueRules(which, row),
|
|
5527
5598
|
render: ({ field, fieldState }) => {
|
|
5599
|
+
const { value: fieldValue, ...fieldRest } = field;
|
|
5528
5600
|
const handleValueChange = (next) => {
|
|
5529
5601
|
field.onChange(next ?? void 0);
|
|
5530
5602
|
if (!next) {
|
|
@@ -5535,8 +5607,8 @@ var ConditionDateInput = ({
|
|
|
5535
5607
|
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(
|
|
5536
5608
|
DatePicker2,
|
|
5537
5609
|
{
|
|
5538
|
-
...
|
|
5539
|
-
value:
|
|
5610
|
+
...fieldRest,
|
|
5611
|
+
value: fieldValue || void 0,
|
|
5540
5612
|
onValueChange: handleValueChange,
|
|
5541
5613
|
placeholder: dateFormat,
|
|
5542
5614
|
ariaLabel: buildAriaLabel(options?.isEnd),
|
|
@@ -6045,9 +6117,10 @@ var ConditionMonthInput = ({ row, control, onClear }) => {
|
|
|
6045
6117
|
{
|
|
6046
6118
|
control,
|
|
6047
6119
|
name: fieldName,
|
|
6048
|
-
rules:
|
|
6120
|
+
rules: buildValueRules(which, row),
|
|
6049
6121
|
render: ({ field, fieldState }) => {
|
|
6050
|
-
const value
|
|
6122
|
+
const { value: fieldValue, ...fieldRest } = field;
|
|
6123
|
+
const value = fieldValue || void 0;
|
|
6051
6124
|
const handleValueChange = (next) => {
|
|
6052
6125
|
field.onChange(next ?? void 0);
|
|
6053
6126
|
if (!next) {
|
|
@@ -6058,7 +6131,7 @@ var ConditionMonthInput = ({ row, control, onClear }) => {
|
|
|
6058
6131
|
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(
|
|
6059
6132
|
MonthPicker2,
|
|
6060
6133
|
{
|
|
6061
|
-
...
|
|
6134
|
+
...fieldRest,
|
|
6062
6135
|
value,
|
|
6063
6136
|
onValueChange: handleValueChange,
|
|
6064
6137
|
placeholder,
|
|
@@ -8605,51 +8678,6 @@ function transformFilterKeys(obj, fieldMap = FILTER_FIELD_MAP) {
|
|
|
8605
8678
|
}
|
|
8606
8679
|
return obj;
|
|
8607
8680
|
}
|
|
8608
|
-
var sanitizeInput = (val) => {
|
|
8609
|
-
if (!val) return val;
|
|
8610
|
-
if (Array.isArray(val)) {
|
|
8611
|
-
return val.map((v) => sanitizeInput(v));
|
|
8612
|
-
}
|
|
8613
|
-
if (val.includes("\n") || val.includes("\r") || /[\u2028\u2029]/u.test(val))
|
|
8614
|
-
return "__INVALID_NEWLINE__";
|
|
8615
|
-
if (/\\\\/.test(val)) return "__INVALID_ESCAPE__";
|
|
8616
|
-
if (/\\(n|t|r|b|f|u[0-9a-fA-F]{4})/.test(val)) return "__INVALID_ESCAPE__";
|
|
8617
|
-
if (/\p{Cf}/u.test(val)) return "__INVALID_UNICODE_WHITESPACE__";
|
|
8618
|
-
if (/[\u00A0\u1680\u180E\u202F\u205F\u3000]/u.test(val)) return "__INVALID_UNICODE_WHITESPACE__";
|
|
8619
|
-
const trimmed = val.trim();
|
|
8620
|
-
if (/^\{.*\}$/s.test(trimmed) || /^\[.*\]$/s.test(trimmed)) return "__INVALID_JSON_LITERAL__";
|
|
8621
|
-
if (/\\\{/.test(val) || /\\\}/.test(val)) return "__INVALID_JSON_ESCAPE__";
|
|
8622
|
-
if (/[%*~^]/.test(trimmed)) return "__INVALID_WILDCARD__";
|
|
8623
|
-
if (/[%><={}\\[\]"']/u.test(trimmed)) return "__INVALID_CHAR__";
|
|
8624
|
-
if (/\p{Cc}/u.test(val)) return "__INVALID_CONTROL_CHAR__";
|
|
8625
|
-
return val;
|
|
8626
|
-
};
|
|
8627
|
-
var numericTypes = ["number"];
|
|
8628
|
-
var dateTypes = ["date", "datemonth"];
|
|
8629
|
-
var validateByFieldType = (value, fieldType) => {
|
|
8630
|
-
if (!value) return { valid: true };
|
|
8631
|
-
if (Array.isArray(value)) {
|
|
8632
|
-
return { valid: true };
|
|
8633
|
-
}
|
|
8634
|
-
if (numericTypes.includes(fieldType)) {
|
|
8635
|
-
if (!/^-?\d+(\.\d+)?$/.test(value)) {
|
|
8636
|
-
return { valid: false, message: "Please enter a valid number." };
|
|
8637
|
-
}
|
|
8638
|
-
}
|
|
8639
|
-
if (fieldType === "uuid") {
|
|
8640
|
-
if (!UUIDregex.test(value)) {
|
|
8641
|
-
return { valid: false, message: "Please enter a valid UUID." };
|
|
8642
|
-
}
|
|
8643
|
-
}
|
|
8644
|
-
if (dateTypes.includes(fieldType)) {
|
|
8645
|
-
const normalized = fieldType === "datemonth" ? `${value}-01` : value;
|
|
8646
|
-
const parsed = parseISO(normalized);
|
|
8647
|
-
if (!isValid(parsed)) {
|
|
8648
|
-
return { valid: false, message: "Invalid date format." };
|
|
8649
|
-
}
|
|
8650
|
-
}
|
|
8651
|
-
return { valid: true };
|
|
8652
|
-
};
|
|
8653
8681
|
var AdvanceSearch = ({
|
|
8654
8682
|
fields,
|
|
8655
8683
|
portalId,
|
|
@@ -8702,13 +8730,6 @@ var AdvanceSearch = ({
|
|
|
8702
8730
|
},
|
|
8703
8731
|
[resetField, clearErrors]
|
|
8704
8732
|
);
|
|
8705
|
-
const parseRangeValue = useCallback((raw, fieldType) => {
|
|
8706
|
-
if (!raw) return void 0;
|
|
8707
|
-
if (Array.isArray(raw)) return void 0;
|
|
8708
|
-
const normalized = fieldType === "datemonth" ? `${raw}-01` : raw;
|
|
8709
|
-
const parsed = parseISO(normalized);
|
|
8710
|
-
return isValid(parsed) ? parsed : void 0;
|
|
8711
|
-
}, []);
|
|
8712
8733
|
const onSubmit = useCallback(() => {
|
|
8713
8734
|
const operatorValidation = {};
|
|
8714
8735
|
rows.forEach((r) => {
|
|
@@ -8752,16 +8773,6 @@ var AdvanceSearch = ({
|
|
|
8752
8773
|
setError(endField, { type: "validate", message: valid2.message });
|
|
8753
8774
|
return null;
|
|
8754
8775
|
}
|
|
8755
|
-
if (v1 && v2 && ["date", "datemonth"].includes(r.fieldType)) {
|
|
8756
|
-
const d1 = parseRangeValue(v1, r.fieldType);
|
|
8757
|
-
const d2 = parseRangeValue(v2, r.fieldType);
|
|
8758
|
-
if (d1 && d2 && isAfter(d1, d2)) {
|
|
8759
|
-
hasError = true;
|
|
8760
|
-
setError(startField, { type: "validate", message: "Start value must be before end value." });
|
|
8761
|
-
setError(endField, { type: "validate", message: "End value must be after start value." });
|
|
8762
|
-
return null;
|
|
8763
|
-
}
|
|
8764
|
-
}
|
|
8765
8776
|
return { ...r, value: v1, value2: v2 };
|
|
8766
8777
|
}
|
|
8767
8778
|
return { ...r, value: v1 };
|
|
@@ -8791,7 +8802,6 @@ var AdvanceSearch = ({
|
|
|
8791
8802
|
rows,
|
|
8792
8803
|
operatorsForField,
|
|
8793
8804
|
getValues,
|
|
8794
|
-
parseRangeValue,
|
|
8795
8805
|
setError,
|
|
8796
8806
|
setOperatorErrors,
|
|
8797
8807
|
filterFieldMap,
|
|
@@ -13831,8 +13841,8 @@ var GridSettingsModal = ({
|
|
|
13831
13841
|
}
|
|
13832
13842
|
}, [isOpen, currentColumns, form]);
|
|
13833
13843
|
const addColumn = async () => {
|
|
13834
|
-
const
|
|
13835
|
-
if (
|
|
13844
|
+
const isValid6 = await trigger("columns");
|
|
13845
|
+
if (isValid6) {
|
|
13836
13846
|
append({ id: "" });
|
|
13837
13847
|
requestAnimationFrame(() => {
|
|
13838
13848
|
const container = scrollRef.current;
|