@economic/taco 2.47.0-server.7 → 2.47.0-server.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/components/Calendar/Calendar.d.ts +1 -0
- package/dist/components/Table3/features/useEditingState.d.ts +1 -1
- package/dist/components/Table3/features/useTableEditing.d.ts +2 -2
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +32 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/dist/esm/index.css +10 -2
- package/dist/esm/packages/taco/src/components/Calendar/Calendar.js +12 -11
- package/dist/esm/packages/taco/src/components/Calendar/Calendar.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js +15 -6
- package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +2 -2
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +5 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +11 -6
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +44 -27
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +5 -8
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +2 -2
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useLazyEffect.js +1 -1
- package/dist/esm/packages/taco/src/hooks/useLazyEffect.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/BubbleSelect.js +1 -1
- package/dist/esm/packages/taco/src/primitives/BubbleSelect.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Button.js +1 -6
- package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/EmptyStateBody.js +9 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/EmptyStateBody.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js +4 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/dataTypes.js +6 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/dataTypes.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/search.js +9 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/search.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +8 -3
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/dom.js +9 -1
- package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/keyboard.js +5 -2
- package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -1
- package/dist/hooks/useGlobalKeyDown.d.ts +1 -1
- package/dist/index.css +10 -2
- package/dist/primitives/Table/useTableManager/util/dataTypes.d.ts +1 -1
- package/dist/taco.cjs.development.js +180 -84
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/keyboard.d.ts +1 -1
- package/package.json +2 -1
|
@@ -28,5 +28,6 @@ export declare type CalendarProps = Omit<React.HTMLAttributes<HTMLDivElement>, '
|
|
|
28
28
|
onChange: (date: Date, event?: React.MouseEvent<Element>) => void;
|
|
29
29
|
value?: Date;
|
|
30
30
|
disabledDays?: Matcher[];
|
|
31
|
+
visibleMonth?: Date;
|
|
31
32
|
};
|
|
32
33
|
export declare const Calendar: (props: CalendarProps) => JSX.Element;
|
|
@@ -12,7 +12,7 @@ export declare function usePendingChangesState<TType = unknown>(handleSave: Tabl
|
|
|
12
12
|
setCellValue: <T_1 extends TType>(cell: ReactTableCell<T_1, unknown>, rowIndex: number, value: unknown) => void;
|
|
13
13
|
getCellValue: <T_2 extends TType>(cell: ReactTableCell<T_2, unknown>) => unknown | undefined;
|
|
14
14
|
getCellError: <T_3 extends TType>(cell: ReactTableCell<T_3, unknown>) => string | undefined;
|
|
15
|
-
onCellChanged: <T_4 extends TType>(cell: ReactTableCell<T_4, unknown>, rowIndex: number, shouldRunUpdaters?: boolean) => Promise<void>;
|
|
15
|
+
onCellChanged: <T_4 extends TType>(cell: ReactTableCell<T_4, unknown>, rowIndex: number, nextValue: any, shouldRunUpdaters?: boolean) => Promise<void>;
|
|
16
16
|
getErrorsShownInAlert: <T_5 extends TType>() => {
|
|
17
17
|
rowId: string;
|
|
18
18
|
index: any;
|
|
@@ -12,7 +12,7 @@ export declare function useTableEditing<TType = unknown>(isEnabled: boolean | un
|
|
|
12
12
|
setCellValue: <T_1 extends TType>(cell: import("@tanstack/react-table").Cell<T_1, unknown>, rowIndex: number, value: unknown) => void;
|
|
13
13
|
getCellValue: <T_2 extends TType>(cell: import("@tanstack/react-table").Cell<T_2, unknown>) => unknown;
|
|
14
14
|
getCellError: <T_3 extends TType>(cell: import("@tanstack/react-table").Cell<T_3, unknown>) => string | undefined;
|
|
15
|
-
onCellChanged: <T_4 extends TType>(cell: import("@tanstack/react-table").Cell<T_4, unknown>, rowIndex: number, shouldRunUpdaters?: boolean) => Promise<void>;
|
|
15
|
+
onCellChanged: <T_4 extends TType>(cell: import("@tanstack/react-table").Cell<T_4, unknown>, rowIndex: number, nextValue: any, shouldRunUpdaters?: boolean) => Promise<void>;
|
|
16
16
|
getErrorsShownInAlert: <T_5 extends TType>() => {
|
|
17
17
|
rowId: string;
|
|
18
18
|
index: any;
|
|
@@ -29,7 +29,7 @@ export declare function useTableEditing<TType = unknown>(isEnabled: boolean | un
|
|
|
29
29
|
isEditing: boolean;
|
|
30
30
|
isDetailedMode: boolean;
|
|
31
31
|
toggleDetailedMode: React.Dispatch<React.SetStateAction<boolean>>;
|
|
32
|
-
toggleEditing: <T_9 extends TType>(enabled: React.SetStateAction<boolean>, table: ReactTable<T_9>, scrollToIndex: (index: number) => void) => void;
|
|
32
|
+
toggleEditing: <T_9 extends TType>(enabled: React.SetStateAction<boolean>, table: ReactTable<T_9>, scrollToIndex: (index: number) => void, doSave?: boolean) => void;
|
|
33
33
|
lastFocusedCellIndex: number | undefined;
|
|
34
34
|
setLastFocusedCellIndex: React.Dispatch<React.SetStateAction<number | undefined>>;
|
|
35
35
|
createRow: <T_10 extends TType>(table: ReactTable<T_10>, scrollToIndex: (index: number) => void, row?: Partial<T_10> | undefined) => Promise<void>;
|
|
@@ -27,6 +27,37 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
27
27
|
}
|
|
28
28
|
return target;
|
|
29
29
|
}
|
|
30
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
31
|
+
if (!o) return;
|
|
32
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
33
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
34
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
35
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
36
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
37
|
+
}
|
|
38
|
+
function _arrayLikeToArray(arr, len) {
|
|
39
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
40
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
41
|
+
return arr2;
|
|
42
|
+
}
|
|
43
|
+
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
44
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
45
|
+
if (it) return (it = it.call(o)).next.bind(it);
|
|
46
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
47
|
+
if (it) o = it;
|
|
48
|
+
var i = 0;
|
|
49
|
+
return function () {
|
|
50
|
+
if (i >= o.length) return {
|
|
51
|
+
done: true
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
done: false,
|
|
55
|
+
value: o[i++]
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
60
|
+
}
|
|
30
61
|
|
|
31
|
-
export { _extends as extends, _objectDestructuringEmpty as objectDestructuringEmpty, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose };
|
|
62
|
+
export { _arrayLikeToArray as arrayLikeToArray, _createForOfIteratorHelperLoose as createForOfIteratorHelperLoose, _extends as extends, _objectDestructuringEmpty as objectDestructuringEmpty, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _unsupportedIterableToArray as unsupportedIterableToArray };
|
|
32
63
|
//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/esm/index.css
CHANGED
|
@@ -603,10 +603,14 @@ table[data-taco^='table'] thead tr:last-child {
|
|
|
603
603
|
|
|
604
604
|
/* bottom border for column groups */
|
|
605
605
|
|
|
606
|
-
table[data-taco^='table'] thead tr:not(:last-child) th
|
|
607
|
-
@apply
|
|
606
|
+
table[data-taco^='table'] thead tr:not(:last-child) th {
|
|
607
|
+
@apply print:border-grey-300 print:border-b;
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
+
table[data-taco^='table'] thead tr:not(:last-child) th:before {
|
|
611
|
+
@apply bg-grey-300 absolute bottom-0 left-2 right-2 h-[2px] content-[''];
|
|
612
|
+
}
|
|
613
|
+
|
|
610
614
|
table[data-taco^='table'] tfoot {
|
|
611
615
|
/* z-indexes & layout */
|
|
612
616
|
@apply sticky bottom-0 isolate z-20;
|
|
@@ -627,6 +631,10 @@ table[data-taco^='table'] tbody {
|
|
|
627
631
|
@apply print:!h-auto;
|
|
628
632
|
}
|
|
629
633
|
|
|
634
|
+
table[data-taco^='table']:has([data-taco='empty-state']) {
|
|
635
|
+
@apply overflow-x-hidden;
|
|
636
|
+
}
|
|
637
|
+
|
|
630
638
|
table[data-taco^='table'] tr {
|
|
631
639
|
/* styling */
|
|
632
640
|
@apply relative bg-white outline-none;
|
|
@@ -6,7 +6,7 @@ import { IconButton } from '../IconButton/IconButton.js';
|
|
|
6
6
|
import { useLocalization } from '../Provider/Localization.js';
|
|
7
7
|
import { DayPicker, Button } from 'react-day-picker';
|
|
8
8
|
|
|
9
|
-
var _excluded = ["onChange", "value", "disabledDays"];
|
|
9
|
+
var _excluded = ["onChange", "value", "disabledDays", "visibleMonth"];
|
|
10
10
|
var thisYear = /*#__PURE__*/new Date().getFullYear();
|
|
11
11
|
var years = [];
|
|
12
12
|
for (var i = thisYear - 50; i <= thisYear + 10; i += 1) {
|
|
@@ -92,21 +92,22 @@ var TodayButton = function TodayButton(_ref2) {
|
|
|
92
92
|
}, texts.calendar.actions.today);
|
|
93
93
|
};
|
|
94
94
|
var Calendar = function Calendar(props) {
|
|
95
|
+
var _ref3;
|
|
95
96
|
var handleChange = props.onChange,
|
|
96
97
|
value = props.value,
|
|
97
98
|
disabledDays = props.disabledDays,
|
|
99
|
+
visibleMonth = props.visibleMonth,
|
|
98
100
|
otherProps = _objectWithoutPropertiesLoose(props, _excluded);
|
|
99
|
-
var _React$useState = useState(
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
var _React$useState = useState((_ref3 = visibleMonth !== null && visibleMonth !== void 0 ? visibleMonth : value) !== null && _ref3 !== void 0 ? _ref3 : new Date()),
|
|
102
|
+
internalVisibleMonth = _React$useState[0],
|
|
103
|
+
setInternalVisibleMonth = _React$useState[1];
|
|
102
104
|
var _useLocalization3 = useLocalization(),
|
|
103
105
|
texts = _useLocalization3.texts;
|
|
104
106
|
useEffect(function () {
|
|
105
|
-
if (visibleMonth !==
|
|
106
|
-
|
|
107
|
+
if (visibleMonth && visibleMonth !== internalVisibleMonth) {
|
|
108
|
+
setInternalVisibleMonth(visibleMonth);
|
|
107
109
|
}
|
|
108
|
-
|
|
109
|
-
}, [value]);
|
|
110
|
+
}, [visibleMonth]);
|
|
110
111
|
var handleDayClick = function handleDayClick(date, modifiers, event) {
|
|
111
112
|
if (modifiers.outside || modifiers.disabled) {
|
|
112
113
|
return;
|
|
@@ -120,13 +121,13 @@ var Calendar = function Calendar(props) {
|
|
|
120
121
|
className: className,
|
|
121
122
|
captionLayout: "dropdown-buttons",
|
|
122
123
|
weekStartsOn: 1,
|
|
123
|
-
month:
|
|
124
|
+
month: internalVisibleMonth,
|
|
124
125
|
numberOfMonths: 1,
|
|
125
126
|
components: {
|
|
126
127
|
Caption: function Caption(props) {
|
|
127
128
|
return /*#__PURE__*/createElement(Navbar, Object.assign({}, props, {
|
|
128
|
-
onMonthChange:
|
|
129
|
-
value:
|
|
129
|
+
onMonthChange: setInternalVisibleMonth,
|
|
130
|
+
value: internalVisibleMonth
|
|
130
131
|
}));
|
|
131
132
|
},
|
|
132
133
|
Footer: function Footer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sources":["../../../../../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'clsx';\nimport { Button, CaptionProps, DayClickEventHandler, DayPicker, Matcher } from 'react-day-picker';\nimport { useLocalization } from '../Provider/Localization';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport './Calendar.css';\n\nexport type CalendarTextsActions = {\n /** Aria-label for previous month action button */\n previousMonth: string;\n /** Aria-label for next month action button */\n nextMonth: string;\n /** Aria-label for previous year action button */\n previousYear: string;\n /** Aria-label for next year action button */\n nextYear: string;\n /** Text displayed within today action button */\n today: string;\n};\n\nexport type CalendarTexts = {\n /** Text and aria-label for action buttons in Calendar */\n actions: CalendarTextsActions;\n /** Text abbreviation for months in Calendar's header, starting with January */\n months: string[];\n /** Text abbreviation for days in Calendar's header, starting with Sunday */\n weekdaysShort: string[];\n /** Text for days in Calendar's header, starting with Sunday */\n weekdays: string[];\n};\n\n/** @internal */\ntype CustomNavbarElementProps = {\n onMonthChange: (month: Date) => void;\n value?: Date;\n};\n\nconst thisYear = new Date().getFullYear();\nconst years: number[] = [];\n\nfor (let i = thisYear - 50; i <= thisYear + 10; i += 1) {\n years.push(i);\n}\n\nconst Navbar = React.memo(({ onMonthChange, value = new Date() }: CustomNavbarElementProps): JSX.Element => {\n const {\n texts: {\n calendar: { actions, months },\n },\n } = useLocalization();\n\n const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const { year, month } = event.target.form as HTMLFormElement;\n onMonthChange(new Date(year.value, month.value));\n };\n\n const onNextClick = () => {\n onMonthChange(new Date(value.getFullYear(), value.getMonth() + 1, value.getDay()));\n };\n\n const onPreviousClick = () => {\n onMonthChange(new Date(value.getFullYear(), value.getMonth() - 1, value.getDay()));\n };\n\n return (\n <div className=\"mb-3 flex items-center justify-between\">\n <form className=\"inline-flex space-x-1\">\n <select className=\"h-8 px-2\" name=\"month\" onChange={handleChange} value={value.getMonth()}>\n {months.map((month, i) => (\n <option key={month} value={i}>\n {month}\n </option>\n ))}\n </select>\n <select className=\"h-8 px-2\" name=\"year\" onChange={handleChange} value={value.getFullYear()}>\n {years.map(year => (\n <option key={year} value={year}>\n {String(year)}\n </option>\n ))}\n </select>\n </form>\n <div>\n <Tooltip title={actions.previousMonth}>\n <IconButton\n appearance=\"discrete\"\n icon=\"chevron-left\"\n aria-label={actions.previousMonth}\n onClick={onPreviousClick}\n rounded\n />\n </Tooltip>\n <Tooltip title={actions.nextMonth}>\n <IconButton\n appearance=\"discrete\"\n icon=\"chevron-right\"\n aria-label={actions.nextMonth}\n onClick={onNextClick}\n rounded\n />\n </Tooltip>\n </div>\n </div>\n );\n});\n\nexport type CalendarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'value'> & {\n /** Handler called when a day is clicked in calendar */\n onChange: (date: Date, event?: React.MouseEvent<Element>) => void;\n value?: Date;\n disabledDays?: Matcher[];\n};\n\nconst TodayButton = ({ handleChange }: { handleChange: (month: Date) => void }) => {\n const { texts } = useLocalization();\n\n const handleCalendarClickToday = (): void => {\n const today = new Date();\n\n // set to midday to avoid UTC offset causing dates to be mismatched server side\n today.setHours(12);\n today.setMinutes(0);\n today.setSeconds(0);\n\n handleChange(today);\n };\n return (\n <Button\n className=\"cursor-pointer border-none bg-transparent text-xs text-blue-500 hover:text-blue-300\"\n onClick={handleCalendarClickToday}>\n {texts.calendar.actions.today}\n </Button>\n );\n};\n\nexport const Calendar = (props: CalendarProps) => {\n const { onChange: handleChange, value, disabledDays, ...otherProps } = props;\n const [visibleMonth, setVisibleMonth] = React.useState(value ?? new Date());\n const { texts } = useLocalization();\n\n React.useEffect(() => {\n if (visibleMonth !== value) {\n setVisibleMonth(value ?? new Date());\n }\n // visibleMonth in deps array breaking month switching logic. It should not be in deps array.\n }, [value]);\n\n const handleDayClick: DayClickEventHandler = (date, modifiers, event) => {\n if (modifiers.outside || modifiers.disabled) {\n return;\n }\n\n handleChange(date, event);\n };\n\n const className = cn('flex bg-white text-xs p-2', otherProps.className);\n\n return (\n <div data-taco=\"calendar\">\n <DayPicker\n className={className}\n captionLayout=\"dropdown-buttons\"\n weekStartsOn={1}\n month={visibleMonth}\n numberOfMonths={1}\n components={{\n Caption: (props: CaptionProps) => <Navbar {...props} onMonthChange={setVisibleMonth} value={visibleMonth} />,\n Footer: () => (\n <tfoot>\n <tr>\n <td colSpan={7} className=\"text-center\">\n <TodayButton handleChange={handleChange} />\n </td>\n </tr>\n </tfoot>\n ),\n HeadRow: () => (\n <tr>\n {texts.calendar.weekdaysShort.map((weekday, index) => {\n const label = texts.calendar.weekdays && texts.calendar.weekdays[index];\n return (\n <th key={weekday} aria-label={label} className=\"rdp-head_cell\" title={label}>\n {weekday}\n </th>\n );\n })}\n </tr>\n ),\n }}\n onDayClick={handleDayClick}\n selected={value}\n disabled={disabledDays}\n />\n </div>\n );\n};\n"],"names":["thisYear","Date","getFullYear","years","i","push","Navbar","React","_ref","onMonthChange","_ref$value","value","_useLocalization","useLocalization","_useLocalization$text","texts","calendar","actions","months","handleChange","event","_event$target$form","target","form","year","month","onNextClick","getMonth","getDay","onPreviousClick","className","name","onChange","map","key","String","Tooltip","title","previousMonth","IconButton","appearance","icon","onClick","rounded","nextMonth","TodayButton","_ref2","_useLocalization2","handleCalendarClickToday","today","setHours","setMinutes","setSeconds","Button","Calendar","props","disabledDays","otherProps","_objectWithoutPropertiesLoose","_excluded","_React$useState","visibleMonth","setVisibleMonth","_useLocalization3","handleDayClick","date","modifiers","outside","disabled","cn","DayPicker","captionLayout","weekStartsOn","numberOfMonths","components","Caption","Footer","colSpan","HeadRow","weekdaysShort","weekday","index","label","weekdays","onDayClick","selected"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../../../../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'clsx';\nimport { Button, CaptionProps, DayClickEventHandler, DayPicker, Matcher } from 'react-day-picker';\nimport { useLocalization } from '../Provider/Localization';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport './Calendar.css';\n\nexport type CalendarTextsActions = {\n /** Aria-label for previous month action button */\n previousMonth: string;\n /** Aria-label for next month action button */\n nextMonth: string;\n /** Aria-label for previous year action button */\n previousYear: string;\n /** Aria-label for next year action button */\n nextYear: string;\n /** Text displayed within today action button */\n today: string;\n};\n\nexport type CalendarTexts = {\n /** Text and aria-label for action buttons in Calendar */\n actions: CalendarTextsActions;\n /** Text abbreviation for months in Calendar's header, starting with January */\n months: string[];\n /** Text abbreviation for days in Calendar's header, starting with Sunday */\n weekdaysShort: string[];\n /** Text for days in Calendar's header, starting with Sunday */\n weekdays: string[];\n};\n\n/** @internal */\ntype CustomNavbarElementProps = {\n onMonthChange: (month: Date) => void;\n value?: Date;\n};\n\nconst thisYear = new Date().getFullYear();\nconst years: number[] = [];\n\nfor (let i = thisYear - 50; i <= thisYear + 10; i += 1) {\n years.push(i);\n}\n\nconst Navbar = React.memo(({ onMonthChange, value = new Date() }: CustomNavbarElementProps): JSX.Element => {\n const {\n texts: {\n calendar: { actions, months },\n },\n } = useLocalization();\n\n const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const { year, month } = event.target.form as HTMLFormElement;\n onMonthChange(new Date(year.value, month.value));\n };\n\n const onNextClick = () => {\n onMonthChange(new Date(value.getFullYear(), value.getMonth() + 1, value.getDay()));\n };\n\n const onPreviousClick = () => {\n onMonthChange(new Date(value.getFullYear(), value.getMonth() - 1, value.getDay()));\n };\n\n return (\n <div className=\"mb-3 flex items-center justify-between\">\n <form className=\"inline-flex space-x-1\">\n <select className=\"h-8 px-2\" name=\"month\" onChange={handleChange} value={value.getMonth()}>\n {months.map((month, i) => (\n <option key={month} value={i}>\n {month}\n </option>\n ))}\n </select>\n <select className=\"h-8 px-2\" name=\"year\" onChange={handleChange} value={value.getFullYear()}>\n {years.map(year => (\n <option key={year} value={year}>\n {String(year)}\n </option>\n ))}\n </select>\n </form>\n <div>\n <Tooltip title={actions.previousMonth}>\n <IconButton\n appearance=\"discrete\"\n icon=\"chevron-left\"\n aria-label={actions.previousMonth}\n onClick={onPreviousClick}\n rounded\n />\n </Tooltip>\n <Tooltip title={actions.nextMonth}>\n <IconButton\n appearance=\"discrete\"\n icon=\"chevron-right\"\n aria-label={actions.nextMonth}\n onClick={onNextClick}\n rounded\n />\n </Tooltip>\n </div>\n </div>\n );\n});\n\nexport type CalendarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'value'> & {\n /** Handler called when a day is clicked in calendar */\n onChange: (date: Date, event?: React.MouseEvent<Element>) => void;\n value?: Date;\n disabledDays?: Matcher[];\n visibleMonth?: Date;\n};\n\nconst TodayButton = ({ handleChange }: { handleChange: (month: Date) => void }) => {\n const { texts } = useLocalization();\n\n const handleCalendarClickToday = (): void => {\n const today = new Date();\n\n // set to midday to avoid UTC offset causing dates to be mismatched server side\n today.setHours(12);\n today.setMinutes(0);\n today.setSeconds(0);\n\n handleChange(today);\n };\n return (\n <Button\n className=\"cursor-pointer border-none bg-transparent text-xs text-blue-500 hover:text-blue-300\"\n onClick={handleCalendarClickToday}>\n {texts.calendar.actions.today}\n </Button>\n );\n};\n\nexport const Calendar = (props: CalendarProps) => {\n const { onChange: handleChange, value, disabledDays, visibleMonth, ...otherProps } = props;\n const [internalVisibleMonth, setInternalVisibleMonth] = React.useState(visibleMonth ?? value ?? new Date());\n const { texts } = useLocalization();\n\n React.useEffect(() => {\n if (visibleMonth && visibleMonth !== internalVisibleMonth) {\n setInternalVisibleMonth(visibleMonth);\n }\n }, [visibleMonth]);\n\n const handleDayClick: DayClickEventHandler = (date, modifiers, event) => {\n if (modifiers.outside || modifiers.disabled) {\n return;\n }\n\n handleChange(date, event);\n };\n\n const className = cn('flex bg-white text-xs p-2', otherProps.className);\n\n return (\n <div data-taco=\"calendar\">\n <DayPicker\n className={className}\n captionLayout=\"dropdown-buttons\"\n weekStartsOn={1}\n month={internalVisibleMonth}\n numberOfMonths={1}\n components={{\n Caption: (props: CaptionProps) => (\n <Navbar {...props} onMonthChange={setInternalVisibleMonth} value={internalVisibleMonth} />\n ),\n Footer: () => (\n <tfoot>\n <tr>\n <td colSpan={7} className=\"text-center\">\n <TodayButton handleChange={handleChange} />\n </td>\n </tr>\n </tfoot>\n ),\n HeadRow: () => (\n <tr>\n {texts.calendar.weekdaysShort.map((weekday, index) => {\n const label = texts.calendar.weekdays && texts.calendar.weekdays[index];\n return (\n <th key={weekday} aria-label={label} className=\"rdp-head_cell\" title={label}>\n {weekday}\n </th>\n );\n })}\n </tr>\n ),\n }}\n onDayClick={handleDayClick}\n selected={value}\n disabled={disabledDays}\n />\n </div>\n );\n};\n"],"names":["thisYear","Date","getFullYear","years","i","push","Navbar","React","_ref","onMonthChange","_ref$value","value","_useLocalization","useLocalization","_useLocalization$text","texts","calendar","actions","months","handleChange","event","_event$target$form","target","form","year","month","onNextClick","getMonth","getDay","onPreviousClick","className","name","onChange","map","key","String","Tooltip","title","previousMonth","IconButton","appearance","icon","onClick","rounded","nextMonth","TodayButton","_ref2","_useLocalization2","handleCalendarClickToday","today","setHours","setMinutes","setSeconds","Button","Calendar","props","disabledDays","visibleMonth","otherProps","_objectWithoutPropertiesLoose","_excluded","_React$useState","_ref3","internalVisibleMonth","setInternalVisibleMonth","_useLocalization3","handleDayClick","date","modifiers","outside","disabled","cn","DayPicker","captionLayout","weekStartsOn","numberOfMonths","components","Caption","Footer","colSpan","HeadRow","weekdaysShort","weekday","index","label","weekdays","onDayClick","selected"],"mappings":"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"}
|
|
@@ -20,14 +20,20 @@ var useDatepicker = function useDatepicker(_ref, ref) {
|
|
|
20
20
|
internalValue = _React$useState[0],
|
|
21
21
|
setInternalValue = _React$useState[1];
|
|
22
22
|
var originalValueAsDate = parse(value);
|
|
23
|
-
//
|
|
23
|
+
// Track the current view date (month/year) in the calendar
|
|
24
|
+
var _React$useState2 = useState(originalValueAsDate || new Date()),
|
|
25
|
+
calendarViewDate = _React$useState2[0],
|
|
26
|
+
setCalendarViewDate = _React$useState2[1];
|
|
24
27
|
useEffect(function () {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
// Only update the internal value when the input is not focused
|
|
29
|
+
// This prevents the input value from being reset while user is typing
|
|
30
|
+
if (inputRef.current !== document.activeElement) {
|
|
31
|
+
var formattedValue = format(value, formatting.date);
|
|
32
|
+
if (formattedValue !== internalValue) {
|
|
33
|
+
setInternalValue(formattedValue !== null && formattedValue !== void 0 ? formattedValue : '');
|
|
34
|
+
}
|
|
28
35
|
}
|
|
29
36
|
}, [value]);
|
|
30
|
-
// event handlers
|
|
31
37
|
var handleInputBlur = function handleInputBlur(event) {
|
|
32
38
|
event.persist();
|
|
33
39
|
var valueAsDate = parseFromCustomString(event.target.value, 'dd.mm.yy', originalValueAsDate === null || originalValueAsDate === void 0 ? void 0 : originalValueAsDate.getMonth(), originalValueAsDate === null || originalValueAsDate === void 0 ? void 0 : originalValueAsDate.getFullYear());
|
|
@@ -48,6 +54,8 @@ var useDatepicker = function useDatepicker(_ref, ref) {
|
|
|
48
54
|
setInternalValue(event.target.value);
|
|
49
55
|
};
|
|
50
56
|
var handleChange = function handleChange(date) {
|
|
57
|
+
// Update both the input value and calendar view date when selecting a date
|
|
58
|
+
setCalendarViewDate(date);
|
|
51
59
|
setInputValueByRef(inputRef.current, format(date, formatting.date), 'focusout');
|
|
52
60
|
};
|
|
53
61
|
var handleKeyDown = function handleKeyDown(event) {
|
|
@@ -71,7 +79,8 @@ var useDatepicker = function useDatepicker(_ref, ref) {
|
|
|
71
79
|
});
|
|
72
80
|
var calendarProps = _extends({}, calendar, {
|
|
73
81
|
onChange: handleChange,
|
|
74
|
-
value: originalValueAsDate
|
|
82
|
+
value: originalValueAsDate,
|
|
83
|
+
visibleMonth: calendarViewDate
|
|
75
84
|
});
|
|
76
85
|
return {
|
|
77
86
|
input: inputProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDatepicker.js","sources":["../../../../../../../src/components/Datepicker/useDatepicker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { parseFromCustomString, format, parse } from '../../utils/date';\nimport { useLocalization } from '../Provider/Localization';\nimport { setInputValueByRef } from '../../utils/input';\nimport { useMergedRef } from '../../hooks/useMergedRef';\nimport { DatepickerProps } from './Datepicker';\nimport { CalendarProps } from '../Calendar/Calendar';\nimport { InputProps as BaseInputProps } from '../Input/Input';\n\ntype InputProps = BaseInputProps & { ref: React.RefObject<HTMLInputElement> };\ntype useDatepicker = React.HTMLAttributes<HTMLDivElement> & {\n calendar: CalendarProps;\n input: InputProps;\n};\n\nexport const useDatepicker = (\n { defaultValue: _, calendar, onBlur, onChange, value, ...props }: DatepickerProps,\n ref: React.Ref<HTMLInputElement>\n): useDatepicker => {\n const inputRef = useMergedRef<HTMLInputElement>(ref);\n const { formatting } = useLocalization();\n const [internalValue, setInternalValue] = React.useState(format(value, formatting.date) ?? '');\n const originalValueAsDate = parse(value);\n\n //
|
|
1
|
+
{"version":3,"file":"useDatepicker.js","sources":["../../../../../../../src/components/Datepicker/useDatepicker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { parseFromCustomString, format, parse } from '../../utils/date';\nimport { useLocalization } from '../Provider/Localization';\nimport { setInputValueByRef } from '../../utils/input';\nimport { useMergedRef } from '../../hooks/useMergedRef';\nimport { DatepickerProps } from './Datepicker';\nimport { CalendarProps } from '../Calendar/Calendar';\nimport { InputProps as BaseInputProps } from '../Input/Input';\n\ntype InputProps = BaseInputProps & { ref: React.RefObject<HTMLInputElement> };\ntype useDatepicker = React.HTMLAttributes<HTMLDivElement> & {\n calendar: CalendarProps;\n input: InputProps;\n};\n\nexport const useDatepicker = (\n { defaultValue: _, calendar, onBlur, onChange, value, ...props }: DatepickerProps,\n ref: React.Ref<HTMLInputElement>\n): useDatepicker => {\n const inputRef = useMergedRef<HTMLInputElement>(ref);\n const { formatting } = useLocalization();\n const [internalValue, setInternalValue] = React.useState(format(value, formatting.date) ?? '');\n const originalValueAsDate = parse(value);\n\n // Track the current view date (month/year) in the calendar\n const [calendarViewDate, setCalendarViewDate] = React.useState<Date | undefined>(originalValueAsDate || new Date());\n\n React.useEffect(() => {\n // Only update the internal value when the input is not focused\n // This prevents the input value from being reset while user is typing\n if (inputRef.current !== document.activeElement) {\n const formattedValue = format(value, formatting.date);\n if (formattedValue !== internalValue) {\n setInternalValue(formattedValue ?? '');\n }\n }\n }, [value]);\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n event.persist();\n\n const valueAsDate = parseFromCustomString(\n event.target.value,\n 'dd.mm.yy',\n originalValueAsDate?.getMonth(),\n originalValueAsDate?.getFullYear()\n );\n const formattedValue = valueAsDate ? format(valueAsDate) || '' : '';\n\n event.target.value = formattedValue;\n\n if (onChange) {\n (event as any).detail = valueAsDate;\n onChange(event);\n } else {\n // update the internal value to use the formatted date\n setInternalValue(formattedValue);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n setInternalValue(event.target.value);\n };\n\n const handleChange = date => {\n // Update both the input value and calendar view date when selecting a date\n setCalendarViewDate(date);\n setInputValueByRef(inputRef.current, format(date, formatting.date), 'focusout');\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (props.onKeyDown) {\n props.onKeyDown(event);\n }\n\n if (event.key === 'Enter') {\n event.target.dispatchEvent(new Event('focusout', { bubbles: true }));\n }\n };\n\n const inputProps: InputProps = {\n ...props,\n autoComplete: 'off',\n onBlur: handleInputBlur,\n onChange: handleInputChange,\n onKeyDown: handleKeyDown,\n ref: inputRef,\n type: 'text',\n value: internalValue,\n };\n\n const calendarProps: CalendarProps = {\n ...calendar,\n onChange: handleChange,\n value: originalValueAsDate,\n visibleMonth: calendarViewDate,\n };\n\n return {\n input: inputProps,\n calendar: calendarProps,\n };\n};\n"],"names":["useDatepicker","_ref","ref","calendar","onBlur","onChange","value","props","_objectWithoutPropertiesLoose","_excluded","inputRef","useMergedRef","_useLocalization","useLocalization","formatting","_React$useState","React","_format","format","date","internalValue","setInternalValue","originalValueAsDate","parse","_React$useState2","Date","calendarViewDate","setCalendarViewDate","current","document","activeElement","formattedValue","handleInputBlur","event","persist","valueAsDate","parseFromCustomString","target","getMonth","getFullYear","detail","handleInputChange","handleChange","setInputValueByRef","handleKeyDown","onKeyDown","key","dispatchEvent","Event","bubbles","inputProps","_extends","autoComplete","type","calendarProps","visibleMonth","input"],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ var Content = /*#__PURE__*/forwardRef(function MenuContent(props, ref) {
|
|
|
38
38
|
var _childrenRefs$current, _childrenRefs$current2;
|
|
39
39
|
return (_childrenRefs$current = childrenRefs.current[index]) === null || _childrenRefs$current === void 0 ? void 0 : (_childrenRefs$current2 = _childrenRefs$current.current) === null || _childrenRefs$current2 === void 0 ? void 0 : _childrenRefs$current2.click();
|
|
40
40
|
}, 1);
|
|
41
|
-
}));
|
|
41
|
+
}, true, childrenRefs.current[index].current));
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
shortcuts.forEach(function (handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.js","sources":["../../../../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'clsx';\nimport { Align, Placement } from '../../../types';\nimport { useMergedRef } from '../../../hooks/useMergedRef';\nimport { useCurrentMenu } from '../Context';\nimport { createShortcutKeyDownHandler } from '../../../utils/keyboard';\nimport { MenuItemProps } from './Item';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n align?: Align;\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useMergedRef<any>(ref);\n const menu = useCurrentMenu();\n const { align = 'start', children, placement: side, ...otherProps } = props;\n const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);\n\n // attach refs to each child\n const childrenRefs = React.useRef<React.RefObject<HTMLDivElement>[]>([]);\n const childrenWithRefs = (React.Children.toArray(props.children) as React.ReactElement<MenuItemProps & { ref: any }>[])\n .filter(child => !!child) // remove falsey children\n .map((child, index) => {\n childrenRefs.current[index] = React.createRef<HTMLDivElement>();\n return React.cloneElement(child, { ref: childrenRefs.current[index] });\n });\n\n // register any shortcuts attached to children\n React.useEffect(() => {\n const shortcuts: ((event: KeyboardEvent) => void)[] = [];\n childrenWithRefs.forEach((child, index) => {\n if (child.props.shortcut) {\n shortcuts.push(\n createShortcutKeyDownHandler(child.props.shortcut
|
|
1
|
+
{"version":3,"file":"Content.js","sources":["../../../../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'clsx';\nimport { Align, Placement } from '../../../types';\nimport { useMergedRef } from '../../../hooks/useMergedRef';\nimport { useCurrentMenu } from '../Context';\nimport { createShortcutKeyDownHandler } from '../../../utils/keyboard';\nimport { MenuItemProps } from './Item';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n align?: Align;\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useMergedRef<any>(ref);\n const menu = useCurrentMenu();\n const { align = 'start', children, placement: side, ...otherProps } = props;\n const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);\n\n // attach refs to each child\n const childrenRefs = React.useRef<React.RefObject<HTMLDivElement>[]>([]);\n const childrenWithRefs = (React.Children.toArray(props.children) as React.ReactElement<MenuItemProps & { ref: any }>[])\n .filter(child => !!child) // remove falsey children\n .map((child, index) => {\n childrenRefs.current[index] = React.createRef<HTMLDivElement>();\n return React.cloneElement(child, { ref: childrenRefs.current[index] });\n });\n\n // register any shortcuts attached to children\n React.useEffect(() => {\n const shortcuts: ((event: KeyboardEvent) => void)[] = [];\n childrenWithRefs.forEach((child, index) => {\n if (child.props.shortcut) {\n shortcuts.push(\n createShortcutKeyDownHandler(\n child.props.shortcut,\n event => {\n event.preventDefault();\n menu?.open();\n setTimeout(() => childrenRefs.current[index]?.current?.click(), 1);\n },\n true,\n childrenRefs.current[index].current\n )\n );\n }\n });\n\n shortcuts.forEach(handler => document.addEventListener('keydown', handler));\n\n return () => {\n shortcuts.forEach(handler => document.removeEventListener('keydown', handler));\n };\n }, [childrenWithRefs]);\n\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align={align}\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={3}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}>\n {childrenWithRefs}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useMergedRef","menu","useCurrentMenu","_props$align","align","side","placement","otherProps","_objectWithoutPropertiesLoose","_excluded","className","cn","childrenRefs","childrenWithRefs","toArray","children","filter","child","map","index","current","shortcuts","forEach","shortcut","push","createShortcutKeyDownHandler","event","preventDefault","open","setTimeout","_childrenRefs$current","_childrenRefs$current2","click","handler","document","addEventListener","removeEventListener","DropdownMenuPrimitive","sideOffset","style","minWidth"],"mappings":";;;;;;;;;IAgBaA,OAAO,gBAAGC,UAAgB,CAAC,SAASC,WAAWA,CAACC,KAAuB,EAAEC,GAA8B;EAChH,IAAMC,WAAW,GAAGC,YAAY,CAAMF,GAAG,CAAC;EAC1C,IAAMG,IAAI,GAAGC,cAAc,EAAE;MAC7BC,YAAA,GAAsEN,KAAK,CAAnEO,KAAK;IAALA,KAAK,GAAAD,YAAA,cAAG,OAAO,GAAAA,YAAA;IAAuBE,IAAI,GAAoBR,KAAK,CAAxCS,SAAS;IAAWC,UAAU,GAAAC,6BAAA,CAAKX,KAAK,EAAAY,SAAA;EAC3E,IAAMC,SAAS,GAAGC,EAAE,CAAC,+EAA+E,EAAEd,KAAK,CAACa,SAAS,CAAC;;EAGtH,IAAME,YAAY,GAAGjB,MAAY,CAAoC,EAAE,CAAC;EACxE,IAAMkB,gBAAgB,GAAIlB,QAAc,CAACmB,OAAO,CAACjB,KAAK,CAACkB,QAAQ,CAAwD,CAClHC,MAAM,CAAC,UAAAC,KAAK;IAAA,OAAI,CAAC,CAACA,KAAK;IAAC;GACxBC,GAAG,CAAC,UAACD,KAAK,EAAEE,KAAK;IACdP,YAAY,CAACQ,OAAO,CAACD,KAAK,CAAC,gBAAGxB,SAAe,EAAkB;IAC/D,oBAAOA,YAAkB,CAACsB,KAAK,EAAE;MAAEnB,GAAG,EAAEc,YAAY,CAACQ,OAAO,CAACD,KAAK;KAAG,CAAC;GACzE,CAAC;;EAGNxB,SAAe,CAAC;IACZ,IAAM0B,SAAS,GAAuC,EAAE;IACxDR,gBAAgB,CAACS,OAAO,CAAC,UAACL,KAAK,EAAEE,KAAK;MAClC,IAAIF,KAAK,CAACpB,KAAK,CAAC0B,QAAQ,EAAE;QACtBF,SAAS,CAACG,IAAI,CACVC,4BAA4B,CACxBR,KAAK,CAACpB,KAAK,CAAC0B,QAAQ,EACpB,UAAAG,KAAK;UACDA,KAAK,CAACC,cAAc,EAAE;UACtB1B,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAE2B,IAAI,EAAE;UACZC,UAAU,CAAC;YAAA,IAAAC,qBAAA,EAAAC,sBAAA;YAAA,QAAAD,qBAAA,GAAMlB,YAAY,CAACQ,OAAO,CAACD,KAAK,CAAC,cAAAW,qBAAA,wBAAAC,sBAAA,GAA3BD,qBAAA,CAA6BV,OAAO,cAAAW,sBAAA,uBAApCA,sBAAA,CAAsCC,KAAK,EAAE;aAAE,CAAC,CAAC;SACrE,EACD,IAAI,EACJpB,YAAY,CAACQ,OAAO,CAACD,KAAK,CAAC,CAACC,OAAO,CACtC,CACJ;;KAER,CAAC;IAEFC,SAAS,CAACC,OAAO,CAAC,UAAAW,OAAO;MAAA,OAAIC,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEF,OAAO,CAAC;MAAC;IAE3E,OAAO;MACHZ,SAAS,CAACC,OAAO,CAAC,UAAAW,OAAO;QAAA,OAAIC,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEH,OAAO,CAAC;QAAC;KACjF;GACJ,EAAE,CAACpB,gBAAgB,CAAC,CAAC;EAEtB,oBACIlB,cAAC0C,MAA4B,qBACzB1C,cAAC0C,SAA6B,oBACtB9B,UAAU;IACdH,KAAK,EAAEA,KAAK;IACZM,SAAS,EAAEA,SAAS;iBACV,MAAM;IAChBL,IAAI,EAAEA,IAAI;IACViC,UAAU,EAAE,CAAC;IACbC,KAAK,EAAE;MAAEC,QAAQ,EAAEvC,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEuC;KAAU;IACnC1C,GAAG,EAAEC;MACJc,gBAAgB,CACW,CACL;AAEvC,CAAC;;;;"}
|
package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js
CHANGED
|
@@ -40,13 +40,13 @@ function EditingControlCell(props) {
|
|
|
40
40
|
if (nextValue !== value) {
|
|
41
41
|
tableMeta.editing.setCellValue(cell, rowIndex, nextValue);
|
|
42
42
|
if (hasNonTextControl) {
|
|
43
|
-
tableMeta.editing.onCellChanged(cell, rowIndex);
|
|
43
|
+
tableMeta.editing.onCellChanged(cell, rowIndex, nextValue);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
var handleBlur = function handleBlur() {
|
|
48
48
|
tableMeta.editing.toggleDetailedMode(false);
|
|
49
|
-
tableMeta.editing.onCellChanged(cell, rowIndex, !hasNonTextControl);
|
|
49
|
+
tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl);
|
|
50
50
|
};
|
|
51
51
|
// ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)
|
|
52
52
|
React__default.useEffect(function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditingControlCell.js","sources":["../../../../../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate } from 'date-fns';\nimport { Datepicker } from '../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../Switch/Switch';\nimport { Input } from '../../../../Input/Input';\nimport { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '../../../../../primitives/Table/types';\nimport * as date from '../../../../../utils/date';\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { Field } from '../../../../Field/Field';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../../utils/dom';\nimport { TableCellRendererProps } from '../../../../../primitives/Table/Core/types';\nimport { RowContext } from '../../../../../primitives/Table/Core/components/Row/RowContext';\nimport { getCellAttributes } from '../../../../../primitives/Table/Core/components/Columns/Cell/util';\nimport { useEditingCellAutofocus } from './util';\nimport { isPressingMetaKey } from '../../../../../utils/keyboard';\nimport { Checkbox } from '../../../../Checkbox/Checkbox';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n const handleChange = (nextValue: unknown) => {\n if (nextValue !== value) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n\n if (hasNonTextControl) {\n tableMeta.editing.onCellChanged(cell, rowIndex);\n }\n }\n };\n\n const handleBlur = () => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, !hasNonTextControl);\n };\n\n // ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)\n React.useEffect(() => {\n const ref = cellRef.current;\n\n return () => {\n if (document.activeElement === ref || isElementInsideOrTriggeredFromContainer(document.activeElement, ref)) {\n handleBlur();\n }\n };\n }, []);\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n onBlur: handleBlur,\n onChange: handleChange,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n onBlur: () => void;\n onChange: (value: TValue) => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n onBlur,\n onChange,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id];\n const commonProps = {\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n if (type === 'textarea') {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.target.value);\n };\n\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(dataType === 'number' && event.target.value ? Number.parseInt(event.target.value) : event.target.value);\n };\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => JSX.Element;\n"],"names":["EditingControlCell","props","cell","cellRef","isHighlighted","index","_React$useContext","React","useContext","RowContext","rowIndex","_cell$getContext","getContext","table","tableMeta","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","type","_columnMeta$control","control","handleFocus","useEditingCellAutofocus","value","getValue","hasNonTextControl","useMemo","_cellRef$current","current","querySelector","handleChange","nextValue","editing","setCellValue","onCellChanged","handleBlur","toggleDetailedMode","useEffect","ref","document","activeElement","isElementInsideOrTriggeredFromContainer","error","getCellError","controlProps","dataType","fontSize","size","id","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","row","original","rowPendingChanges","getRowValue","tabIndex","cellAttributes","_extends","getCellAttributes","undefined","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","_props$tabIndex","_props$type","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","Checkbox","handleInputKeyDown","event","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","requestAnimationFrame","_target$select2","isPressingMetaKey","test","valueAsDate","date","newDate","detail","isDate","Datepicker","onKeyDown","TextareaWithAutosizing","String","Number","parseInt","Input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditingControlCell.js","sources":["../../../../../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate } from 'date-fns';\nimport { Datepicker } from '../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../Switch/Switch';\nimport { Input } from '../../../../Input/Input';\nimport { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '../../../../../primitives/Table/types';\nimport * as date from '../../../../../utils/date';\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { Field } from '../../../../Field/Field';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../../utils/dom';\nimport { TableCellRendererProps } from '../../../../../primitives/Table/Core/types';\nimport { RowContext } from '../../../../../primitives/Table/Core/components/Row/RowContext';\nimport { getCellAttributes } from '../../../../../primitives/Table/Core/components/Columns/Cell/util';\nimport { useEditingCellAutofocus } from './util';\nimport { isPressingMetaKey } from '../../../../../utils/keyboard';\nimport { Checkbox } from '../../../../Checkbox/Checkbox';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n const handleChange = (nextValue: unknown) => {\n if (nextValue !== value) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n\n if (hasNonTextControl) {\n tableMeta.editing.onCellChanged(cell, rowIndex, nextValue);\n }\n }\n };\n\n const handleBlur = () => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl);\n };\n\n // ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)\n React.useEffect(() => {\n const ref = cellRef.current;\n\n return () => {\n if (document.activeElement === ref || isElementInsideOrTriggeredFromContainer(document.activeElement, ref)) {\n handleBlur();\n }\n };\n }, []);\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n onBlur: handleBlur,\n onChange: handleChange,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n onBlur: () => void;\n onChange: (value: TValue) => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n onBlur,\n onChange,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id];\n const commonProps = {\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n if (type === 'textarea') {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.target.value);\n };\n\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(dataType === 'number' && event.target.value ? Number.parseInt(event.target.value) : event.target.value);\n };\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => JSX.Element;\n"],"names":["EditingControlCell","props","cell","cellRef","isHighlighted","index","_React$useContext","React","useContext","RowContext","rowIndex","_cell$getContext","getContext","table","tableMeta","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","type","_columnMeta$control","control","handleFocus","useEditingCellAutofocus","value","getValue","hasNonTextControl","useMemo","_cellRef$current","current","querySelector","handleChange","nextValue","editing","setCellValue","onCellChanged","handleBlur","toggleDetailedMode","undefined","useEffect","ref","document","activeElement","isElementInsideOrTriggeredFromContainer","error","getCellError","controlProps","dataType","fontSize","size","id","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","row","original","rowPendingChanges","getRowValue","tabIndex","cellAttributes","_extends","getCellAttributes","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","_props$tabIndex","_props$type","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","Checkbox","handleInputKeyDown","event","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","requestAnimationFrame","_target$select2","isPressingMetaKey","test","valueAsDate","date","newDate","detail","isDate","Datepicker","onKeyDown","TextareaWithAutosizing","String","Number","parseInt","Input"],"mappings":"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"}
|
|
@@ -43,7 +43,11 @@ function Alert(props) {
|
|
|
43
43
|
var visibleColumns = table.getVisibleFlatColumns().map(function (c) {
|
|
44
44
|
return c.id;
|
|
45
45
|
});
|
|
46
|
-
var rowIdentityColumn = tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor)) ?
|
|
46
|
+
var rowIdentityColumn = tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor)) ?
|
|
47
|
+
// table.getColumn(columName) throw error in strict dev mode. Related thread: https://github.com/TanStack/table/discussions/5505
|
|
48
|
+
table.getAllColumns().find(function (x) {
|
|
49
|
+
return x.id === String(tableMeta.rowIdentityAccessor);
|
|
50
|
+
}) : undefined;
|
|
47
51
|
pendingChangesWithErrors.forEach(function (pendingChangeWithError, index) {
|
|
48
52
|
var _row;
|
|
49
53
|
// if appropriate, concatenate the item with the text "and"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","sources":["../../../../../../../../../src/components/Table3/components/Editing/Alert.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { ScrollToOptions as ReactVirtualScrollToOptions } from '@tanstack/react-virtual';\nimport { Alert as BaseAlert, AlertProps as BaseAlertProps } from '../../../Alert/Alert';\nimport { TableRef } from '../../../../primitives/Table/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Dialog, DialogProps } from '../../../Dialog/Dialog';\nimport { Group } from '../../../Group/Group';\nimport { Button } from '../../../Button/Button';\n\ntype AlertProps<TType = unknown> = Omit<BaseAlertProps, 'children'> & {\n scrollToIndex: (index: number, options: ReactVirtualScrollToOptions) => void;\n table: ReactTable<TType>;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Alert<TType = unknown>(props: AlertProps<TType>) {\n const { scrollToIndex, table, tableRef, ...attributes } = props;\n const { texts } = useLocalization();\n const validationTexts = texts.table3.editing.validation;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const [showFilterResetDialog, setShowFilterResetDialog] = React.useState<number | false>(false);\n const pendingChangesWithErrors = tableMeta.editing.getErrorsShownInAlert<TType>();\n\n function scrollToRow(rowIndex: number) {\n tableMeta.rowActive.setRowActiveIndex(rowIndex);\n scrollToIndex(rowIndex, { align: 'center' });\n\n requestAnimationFrame(() => {\n const cell = tableRef.current?.querySelector(\n 'tbody > tr[data-row-active=\"true\"] > td[data-cell-editing-invalid=\"true\"]'\n );\n\n if (cell) {\n (cell as HTMLElement).focus?.();\n }\n });\n }\n\n // generate the \"N unsaved entries\" title\n const title = (\n pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural\n ).replace('[COUNT]', String(pendingChangesWithErrors.length));\n\n // generate links to each invalid row, to go into the error message\n const links: React.ReactNode[] = [];\n const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);\n const rowIdentityColumn =\n tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor))\n ? table.getColumn(String(tableMeta.rowIdentityAccessor))\n : undefined;\n\n pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {\n // if appropriate, concatenate the item with the text \"and\"\n if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {\n // Add space before and after `messageAnd` text\n links.push(` ${validationTexts.alert.messageAnd} `);\n }\n pendingChangeWithError;\n\n const handleClick = () => {\n // if row is visible\n if (pendingChangeWithError.index > -1) {\n scrollToRow(pendingChangeWithError.index);\n tableMeta.rowActive.setRowActiveIndex(pendingChangeWithError.index);\n }\n // if row is filtered out\n else {\n setShowFilterResetDialog(pendingChangeWithError.index);\n }\n };\n\n let tooltip;\n\n if (pendingChangeWithError.errors.row) {\n tooltip = pendingChangeWithError.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(pendingChangeWithError.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;\n }\n\n let row;\n try {\n row = table.getRow(pendingChangeWithError.rowId).original;\n } catch {\n // because of server loading, some rows may not be accessible\n }\n\n links.push(\n <Tooltip key={pendingChangeWithError.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? row?.[rowIdentityColumn.id] : pendingChangeWithError.index + 1}\n </span>\n </Tooltip>\n );\n\n // if appropriate, concatenate the item with the text \",\"\n if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {\n links.push(', ');\n }\n });\n\n // generate the \"Row N is incomplete and hasn't been saved\" error message\n const message = (links.length === 1 ? validationTexts.alert.messageOne : validationTexts.alert.messagePlural)\n .split(/(\\[\\w+\\])/)\n .map(part => {\n if (part === '[COLUMN]') {\n return rowIdentityColumn?.columnDef.meta?.header ?? validationTexts.alert.messageRow;\n }\n\n if (part === '[ROW]') {\n return links;\n }\n\n return part;\n });\n\n const handleResetFilters = () => {\n table.resetGlobalFilter();\n table.resetColumnFilters();\n\n requestAnimationFrame(() => {\n if (showFilterResetDialog && showFilterResetDialog > -1) {\n scrollToRow(showFilterResetDialog);\n }\n\n setShowFilterResetDialog(false);\n });\n };\n\n return (\n <>\n <BaseAlert {...attributes} state=\"error\">\n <span className=\"font-bold\">{title}</span> {message}\n </BaseAlert>\n <FilterResetDialog\n open={showFilterResetDialog !== false}\n onChange={() => setShowFilterResetDialog(false)}\n onSubmit={handleResetFilters}\n />\n </>\n );\n}\n\ntype FilterResetDialogProps = Omit<DialogProps, 'children'> & {\n onSubmit: () => void;\n};\n\nfunction FilterResetDialog(props: FilterResetDialogProps) {\n const { onSubmit: handleSubmit, ...dialogProps } = props;\n const { texts } = useLocalization();\n\n return (\n <Dialog {...dialogProps} size=\"xs\">\n <Dialog.Content aria-label=\"Create a new account\">\n <Dialog.Title>{texts.table3.editing.validation.resetFiltersDialog.title}</Dialog.Title>\n\n <p>{texts.table3.editing.validation.resetFiltersDialog.description}</p>\n\n <Dialog.Footer>\n <Group>\n <Dialog.Close>\n <Button>{texts.table3.editing.validation.resetFiltersDialog.cancel}</Button>\n </Dialog.Close>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {texts.table3.editing.validation.resetFiltersDialog.confirm}\n </Button>\n </Group>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n );\n}\n"],"names":["Alert","props","scrollToIndex","table","tableRef","attributes","_objectWithoutPropertiesLoose","_excluded","_useLocalization","useLocalization","texts","validationTexts","table3","editing","validation","tableMeta","options","meta","_React$useState","React","useState","showFilterResetDialog","setShowFilterResetDialog","pendingChangesWithErrors","getErrorsShownInAlert","scrollToRow","rowIndex","rowActive","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","length","alert","titleOne","titlePlural","replace","String","links","visibleColumns","getVisibleFlatColumns","map","c","id","rowIdentityColumn","rowIdentityAccessor","includes","getColumn","undefined","forEach","pendingChangeWithError","index","push","messageAnd","handleClick","tooltip","errors","row","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","getAllColumns","find","column","columnDef","header","getRow","rowId","original","_unused","Tooltip","key","className","onClick","role","_row","message","messageOne","messagePlural","split","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","_excluded2","_useLocalization2","Dialog","size","Content","Title","resetFiltersDialog","description","Footer","Group","Close","Button","cancel","appearance","confirm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../../../../../../../../src/components/Table3/components/Editing/Alert.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { ScrollToOptions as ReactVirtualScrollToOptions } from '@tanstack/react-virtual';\nimport { Alert as BaseAlert, AlertProps as BaseAlertProps } from '../../../Alert/Alert';\nimport { TableRef } from '../../../../primitives/Table/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Dialog, DialogProps } from '../../../Dialog/Dialog';\nimport { Group } from '../../../Group/Group';\nimport { Button } from '../../../Button/Button';\n\ntype AlertProps<TType = unknown> = Omit<BaseAlertProps, 'children'> & {\n scrollToIndex: (index: number, options: ReactVirtualScrollToOptions) => void;\n table: ReactTable<TType>;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Alert<TType = unknown>(props: AlertProps<TType>) {\n const { scrollToIndex, table, tableRef, ...attributes } = props;\n const { texts } = useLocalization();\n const validationTexts = texts.table3.editing.validation;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const [showFilterResetDialog, setShowFilterResetDialog] = React.useState<number | false>(false);\n const pendingChangesWithErrors = tableMeta.editing.getErrorsShownInAlert<TType>();\n\n function scrollToRow(rowIndex: number) {\n tableMeta.rowActive.setRowActiveIndex(rowIndex);\n scrollToIndex(rowIndex, { align: 'center' });\n\n requestAnimationFrame(() => {\n const cell = tableRef.current?.querySelector(\n 'tbody > tr[data-row-active=\"true\"] > td[data-cell-editing-invalid=\"true\"]'\n );\n\n if (cell) {\n (cell as HTMLElement).focus?.();\n }\n });\n }\n\n // generate the \"N unsaved entries\" title\n const title = (\n pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural\n ).replace('[COUNT]', String(pendingChangesWithErrors.length));\n\n // generate links to each invalid row, to go into the error message\n const links: React.ReactNode[] = [];\n const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);\n const rowIdentityColumn =\n tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor))\n ? // table.getColumn(columName) throw error in strict dev mode. Related thread: https://github.com/TanStack/table/discussions/5505\n table.getAllColumns().find(x => x.id === String(tableMeta.rowIdentityAccessor))\n : undefined;\n\n pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {\n // if appropriate, concatenate the item with the text \"and\"\n if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {\n // Add space before and after `messageAnd` text\n links.push(` ${validationTexts.alert.messageAnd} `);\n }\n pendingChangeWithError;\n\n const handleClick = () => {\n // if row is visible\n if (pendingChangeWithError.index > -1) {\n scrollToRow(pendingChangeWithError.index);\n tableMeta.rowActive.setRowActiveIndex(pendingChangeWithError.index);\n }\n // if row is filtered out\n else {\n setShowFilterResetDialog(pendingChangeWithError.index);\n }\n };\n\n let tooltip;\n\n if (pendingChangeWithError.errors.row) {\n tooltip = pendingChangeWithError.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(pendingChangeWithError.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;\n }\n\n let row;\n try {\n row = table.getRow(pendingChangeWithError.rowId).original;\n } catch {\n // because of server loading, some rows may not be accessible\n }\n\n links.push(\n <Tooltip key={pendingChangeWithError.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? row?.[rowIdentityColumn.id] : pendingChangeWithError.index + 1}\n </span>\n </Tooltip>\n );\n\n // if appropriate, concatenate the item with the text \",\"\n if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {\n links.push(', ');\n }\n });\n\n // generate the \"Row N is incomplete and hasn't been saved\" error message\n const message = (links.length === 1 ? validationTexts.alert.messageOne : validationTexts.alert.messagePlural)\n .split(/(\\[\\w+\\])/)\n .map(part => {\n if (part === '[COLUMN]') {\n return rowIdentityColumn?.columnDef.meta?.header ?? validationTexts.alert.messageRow;\n }\n\n if (part === '[ROW]') {\n return links;\n }\n\n return part;\n });\n\n const handleResetFilters = () => {\n table.resetGlobalFilter();\n table.resetColumnFilters();\n\n requestAnimationFrame(() => {\n if (showFilterResetDialog && showFilterResetDialog > -1) {\n scrollToRow(showFilterResetDialog);\n }\n\n setShowFilterResetDialog(false);\n });\n };\n\n return (\n <>\n <BaseAlert {...attributes} state=\"error\">\n <span className=\"font-bold\">{title}</span> {message}\n </BaseAlert>\n <FilterResetDialog\n open={showFilterResetDialog !== false}\n onChange={() => setShowFilterResetDialog(false)}\n onSubmit={handleResetFilters}\n />\n </>\n );\n}\n\ntype FilterResetDialogProps = Omit<DialogProps, 'children'> & {\n onSubmit: () => void;\n};\n\nfunction FilterResetDialog(props: FilterResetDialogProps) {\n const { onSubmit: handleSubmit, ...dialogProps } = props;\n const { texts } = useLocalization();\n\n return (\n <Dialog {...dialogProps} size=\"xs\">\n <Dialog.Content aria-label=\"Create a new account\">\n <Dialog.Title>{texts.table3.editing.validation.resetFiltersDialog.title}</Dialog.Title>\n\n <p>{texts.table3.editing.validation.resetFiltersDialog.description}</p>\n\n <Dialog.Footer>\n <Group>\n <Dialog.Close>\n <Button>{texts.table3.editing.validation.resetFiltersDialog.cancel}</Button>\n </Dialog.Close>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {texts.table3.editing.validation.resetFiltersDialog.confirm}\n </Button>\n </Group>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n );\n}\n"],"names":["Alert","props","scrollToIndex","table","tableRef","attributes","_objectWithoutPropertiesLoose","_excluded","_useLocalization","useLocalization","texts","validationTexts","table3","editing","validation","tableMeta","options","meta","_React$useState","React","useState","showFilterResetDialog","setShowFilterResetDialog","pendingChangesWithErrors","getErrorsShownInAlert","scrollToRow","rowIndex","rowActive","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","length","alert","titleOne","titlePlural","replace","String","links","visibleColumns","getVisibleFlatColumns","map","c","id","rowIdentityColumn","rowIdentityAccessor","includes","getAllColumns","find","x","undefined","forEach","pendingChangeWithError","index","push","messageAnd","handleClick","tooltip","errors","row","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","column","columnDef","header","getRow","rowId","original","_unused","Tooltip","key","className","onClick","role","_row","message","messageOne","messagePlural","split","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","_excluded2","_useLocalization2","Dialog","size","Content","Title","resetFiltersDialog","description","Footer","Group","Close","Button","cancel","appearance","confirm"],"mappings":"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"}
|