@economic/taco 2.47.0-server.7 → 2.47.0-server.9

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.
Files changed (53) hide show
  1. package/dist/components/Calendar/Calendar.d.ts +1 -0
  2. package/dist/components/Table3/features/useEditingState.d.ts +1 -1
  3. package/dist/components/Table3/features/useTableEditing.d.ts +2 -2
  4. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +32 -1
  5. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  6. package/dist/esm/index.css +10 -2
  7. package/dist/esm/packages/taco/src/components/Calendar/Calendar.js +12 -11
  8. package/dist/esm/packages/taco/src/components/Calendar/Calendar.js.map +1 -1
  9. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js +15 -6
  10. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js.map +1 -1
  11. package/dist/esm/packages/taco/src/components/Menu/components/Content.js +1 -1
  12. package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
  13. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +2 -2
  14. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  15. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +5 -1
  16. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +9 -6
  18. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +45 -28
  20. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +5 -8
  22. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  23. package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +2 -2
  24. package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -1
  25. package/dist/esm/packages/taco/src/hooks/useLazyEffect.js +1 -1
  26. package/dist/esm/packages/taco/src/hooks/useLazyEffect.js.map +1 -1
  27. package/dist/esm/packages/taco/src/primitives/BubbleSelect.js +1 -1
  28. package/dist/esm/packages/taco/src/primitives/BubbleSelect.js.map +1 -1
  29. package/dist/esm/packages/taco/src/primitives/Button.js +1 -6
  30. package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
  31. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/EmptyStateBody.js +9 -2
  32. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/EmptyStateBody.js.map +1 -1
  33. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js +4 -1
  34. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js.map +1 -1
  35. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/dataTypes.js +6 -2
  36. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/dataTypes.js.map +1 -1
  37. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/search.js +9 -1
  38. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/search.js.map +1 -1
  39. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +8 -3
  40. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  41. package/dist/esm/packages/taco/src/utils/dom.js +9 -1
  42. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  43. package/dist/esm/packages/taco/src/utils/keyboard.js +5 -2
  44. package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -1
  45. package/dist/hooks/useGlobalKeyDown.d.ts +1 -1
  46. package/dist/index.css +10 -2
  47. package/dist/primitives/Table/useTableManager/util/dataTypes.d.ts +1 -1
  48. package/dist/taco.cjs.development.js +179 -85
  49. package/dist/taco.cjs.development.js.map +1 -1
  50. package/dist/taco.cjs.production.min.js +1 -1
  51. package/dist/taco.cjs.production.min.js.map +1 -1
  52. package/dist/utils/keyboard.d.ts +1 -1
  53. package/package.json +2 -1
@@ -139,6 +139,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
139
139
  var _temp7 = _forOf(Object.keys(changes), function (rowId) {
140
140
  var status = getRowStatus(rowId);
141
141
  return _catch(function () {
142
+ var _changes$rowId;
142
143
  function _temp6(_result) {
143
144
  return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
144
145
  // cleanup changes, we don't need them after saving
@@ -150,12 +151,13 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
150
151
  }, DELAY_BEFORE_REMOVING_SAVE_STATUS);
151
152
  });
152
153
  }
154
+ var rowChanges = (_changes$rowId = changes[rowId]) !== null && _changes$rowId !== void 0 ? _changes$rowId : {};
153
155
  // don't try to save if - already saving, or there are known errors
154
- if (status === 'saving' || status === 'errored') {
156
+ if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {
155
157
  return;
156
158
  }
157
159
  setRowStatus(rowId, 'saving');
158
- var changeSet = _extends({}, state.changes.originals[rowId], changes[rowId]);
160
+ var changeSet = _extends({}, state.changes.originals[rowId], rowChanges);
159
161
  // if we had to create a temporary id, delete it first - it's our data, not theirs
160
162
  if (isTemporaryRow(changeSet[rowIdentityAccessor])) {
161
163
  delete changeSet[rowIdentityAccessor];
@@ -217,11 +219,12 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
217
219
  return Promise.reject(e);
218
220
  }
219
221
  };
220
- var onCellChanged = function onCellChanged(cell, rowIndex, shouldRunUpdaters) {
222
+ var onCellChanged = function onCellChanged(cell, rowIndex, nextValue, shouldRunUpdaters) {
221
223
  if (shouldRunUpdaters === void 0) {
222
224
  shouldRunUpdaters = true;
223
225
  }
224
226
  try {
227
+ var _extends3;
225
228
  var _temp4 = function _temp4() {
226
229
  var _state$changes$errors11;
227
230
  function _temp2() {
@@ -262,7 +265,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
262
265
  });
263
266
  }
264
267
  // create a projection of the next state, so we can act against it
265
- var nextChanges = _extends({}, state.changes.rows[cell.row.id], updatesForOtherCells);
268
+ var nextChanges = _extends({}, changes, updatesForOtherCells);
266
269
  var nextMoveReasons = _extends({}, state.changes.moveReasons[cell.row.id]);
267
270
  var nextCellErrors = _extends({}, (_state$changes$errors11 = state.changes.errors[cell.row.id]) === null || _state$changes$errors11 === void 0 ? void 0 : _state$changes$errors11.cells);
268
271
  // run validation
@@ -277,8 +280,8 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
277
280
  }();
278
281
  return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
279
282
  };
280
- var changes = state.changes.rows[cell.row.id];
281
- if (!changes) {
283
+ var changes = nextValue !== undefined ? _extends({}, state.changes.rows[cell.row.id], (_extends3 = {}, _extends3[cell.column.id] = nextValue, _extends3)) : _extends({}, state.changes.rows[cell.row.id]);
284
+ if (!Object.keys(changes).length) {
282
285
  return Promise.resolve();
283
286
  }
284
287
  var updatesForOtherCells = {};
@@ -1 +1 @@
1
- {"version":3,"file":"useEditingState.js","sources":["../../../../../../../../src/components/Table3/features/useEditingState.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';\nimport { v4 as uuid } from 'uuid';\nimport omit from 'lodash/omit';\nimport setWith from 'lodash/setWith';\nimport { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isTemporaryRow, TEMPORARY_ROW_ID_PREFIX, willRowMove } from '../util/editing';\nimport { useLocalization } from '../../Provider/Localization';\n\nconst DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;\n\ntype EditingError = {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n};\ntype EditingRowMoveReason = Record<string, 'search' | 'sorting' | 'filter'>;\ntype EditingSaveState = 'saving' | 'saved' | 'errored';\ntype EditingChangeset<TType = unknown> = Partial<TType>;\ntype EditingState<TType = unknown> = {\n changes: {\n rows: Record<string, EditingChangeset<TType>>;\n errors: Record<string, EditingError>;\n moveReasons: Record<string, EditingRowMoveReason>;\n originals: Record<string, TType>;\n status: Record<string, EditingSaveState>;\n };\n indexes: Record<string, number>;\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'insertTemporaryRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, index, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, index, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n indexes: omit(state.indexes, rowId),\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'insertTemporaryRow': {\n const { index, value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n indexes: {},\n temporaryRows: [],\n });\n\n // rows\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as string];\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function getRowStatus(rowId: string) {\n return state.changes.status[rowId];\n }\n\n function setRowStatus(rowId: string, status: EditingSaveState | undefined) {\n dispatch({\n type: 'setRowStatus',\n rowId,\n payload: {\n status,\n },\n });\n }\n\n function insertTemporaryRow<T extends TType>(data: Partial<T>, rowIndex: number) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'insertTemporaryRow',\n rowId: newRowId,\n payload: { index: rowIndex, value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n index: rowIndex,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, shouldRunUpdaters = true) {\n const changes = state.changes.rows[cell.row.id];\n\n if (!changes) {\n return;\n }\n\n let updatesForOtherCells: Partial<T> = {};\n\n // run the updater handler if there is one, to see if there are any other cells to update\n if (typeof handleChange === 'function' && shouldRunUpdaters) {\n const previousRowValue = {\n ...state.changes.originals[cell.row.id],\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...state.changes.originals[cell.row.id],\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id],\n nextRowValue,\n previousRowValue\n )) ?? {}) as Partial<T>;\n }\n\n // create a projection of the next state, so we can act against it\n const nextChanges = { ...state.changes.rows[cell.row.id], ...updatesForOtherCells };\n const nextMoveReasons: EditingRowMoveReason = { ...state.changes.moveReasons[cell.row.id] };\n const nextCellErrors: Record<string, string> = { ...state.changes.errors[cell.row.id]?.cells };\n\n // run validation\n let validationErrors: Record<string, string> = {};\n\n if (validator) {\n const nextRowValue = { ...state.changes.originals[cell.row.id], ...changes, ...updatesForOtherCells };\n validationErrors = ((await validator(nextRowValue)) ?? {}) as Record<string, string>;\n }\n\n // only set errors and move reasons for the cells we're currently acting on\n // why? because the UX is not good if we set them for cells the user hasn't touched yet\n const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];\n const allCells = cell.row._getAllCellsByColumnId();\n\n cellsToActOn.forEach(accessor => {\n if (validationErrors[accessor]) {\n nextCellErrors[accessor] = validationErrors[accessor];\n // don't show move indicator for cells with errors, they aren't valid and can't be saved\n delete nextMoveReasons[accessor];\n } else {\n // there isn't any error in this run, remove any error set in state\n delete nextCellErrors[accessor];\n\n if (allCells[accessor]?.column.getIsSorted()) {\n // run row move determination\n const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);\n\n // if the row will move based on this change save why, otherwise delete any existing state\n if (reason) {\n nextMoveReasons[accessor] = reason;\n } else {\n delete nextMoveReasons[accessor];\n }\n }\n }\n });\n\n dispatch({\n type: 'updateRow',\n rowId: cell.row.id,\n payload: {\n cellErrors: nextCellErrors,\n index: rowIndex,\n moveReasons: nextMoveReasons,\n value: nextChanges,\n },\n });\n }\n\n // general\n function getErrorsShownInAlert<T extends TType>() {\n const rowsWithErrors = Object.keys(state.changes.errors);\n\n if (!rowsWithErrors.length) {\n return [];\n }\n\n return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({\n rowId,\n index: state.indexes[rowId],\n changes: state.changes.rows[rowId] as EditingChangeset<T>,\n errors: state.changes.errors[rowId],\n }));\n }\n\n function hasSaved() {\n return !!Object.values(state.changes.status).filter(value => value === 'saved').length;\n }\n\n function hasChanges(rowId?: string) {\n return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;\n }\n\n async function saveChanges<T extends TType>(table: ReactTable<T>, rowId: string | undefined = undefined): Promise<boolean> {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return false;\n }\n\n // sometimes we only want to save one row\n const changes = rowId ? { [rowId]: state.changes.rows[rowId] } : state.changes.rows;\n\n let completed = true;\n\n for (const rowId of Object.keys(changes)) {\n const status = getRowStatus(rowId);\n\n try {\n // don't try to save if - already saving, or there are known errors\n if (status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...changes[rowId] };\n\n // if we had to create a temporary id, delete it first - it's our data, not theirs\n if (isTemporaryRow(changeSet[rowIdentityAccessor as string])) {\n delete changeSet[rowIdentityAccessor];\n }\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n discardChanges(rowId, table);\n\n // show the saved status, then remove it after a delay\n setRowStatus(rowId, 'saved');\n setTimeout(() => {\n setRowStatus(rowId, undefined);\n }, DELAY_BEFORE_REMOVING_SAVE_STATUS);\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof TypeError || (error as any)?.response?.status >= 500) {\n console.error(error);\n }\n\n // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError: string | undefined;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n dispatch({\n type: 'setRowErrors',\n rowId,\n payload: {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n },\n });\n }\n\n setRowStatus(rowId, 'errored');\n completed = false;\n }\n }\n\n return completed;\n }\n\n function discardChanges<T extends TType>(rowId: string, table: ReactTable<T>) {\n // remove any new rows from pinned state before discarding them\n table.resetRowPinning(true);\n\n dispatch({\n type: 'removeRow',\n rowId,\n payload: { rowIdentityAccessor },\n });\n }\n\n return {\n // row\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n hasTemporaryRowErrors,\n getRowStatus,\n setRowStatus,\n // cells\n setCellValue,\n getCellValue,\n getCellError,\n onCellChanged,\n // general\n getErrorsShownInAlert,\n hasChanges,\n saveChanges,\n discardChanges,\n hasSaved,\n // new rows\n insertTemporaryRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","index","row","value","_extends","changes","rows","setWith","Object","originals","indexes","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","_objectDestructuringEmpty","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","_ref","completed","_temp7","_forOf","getRowStatus","_catch","_temp6","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp","nextRowValue","_validator","_temp2","_temp3","previousRowValue","_handleChange","_temp4","useLocalization","_React$useReducer","React","useReducer","getRowValue","_state$changes$rows$r","_state$changes$rows","getRowMoveReason","_Object$values$","values","_state$changes$moveRe","_state$changes$moveRe2","hasRowErrors","_state$changes$errors","_state$changes$errors2","_state$changes$errors3","hasRowErrorsShownInAlert","_state$changes$errors4","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","_extends2","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors8","_state$changes$errors9","_state$changes$errors10","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges","resetRowPinning"],"mappings":"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"}
1
+ {"version":3,"file":"useEditingState.js","sources":["../../../../../../../../src/components/Table3/features/useEditingState.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';\nimport { v4 as uuid } from 'uuid';\nimport omit from 'lodash/omit';\nimport setWith from 'lodash/setWith';\nimport { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isTemporaryRow, TEMPORARY_ROW_ID_PREFIX, willRowMove } from '../util/editing';\nimport { useLocalization } from '../../Provider/Localization';\n\nconst DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;\n\ntype EditingError = {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n};\ntype EditingRowMoveReason = Record<string, 'search' | 'sorting' | 'filter'>;\ntype EditingSaveState = 'saving' | 'saved' | 'errored';\ntype EditingChangeset<TType = unknown> = Partial<TType>;\ntype EditingState<TType = unknown> = {\n changes: {\n rows: Record<string, EditingChangeset<TType>>;\n errors: Record<string, EditingError>;\n moveReasons: Record<string, EditingRowMoveReason>;\n originals: Record<string, TType>;\n status: Record<string, EditingSaveState>;\n };\n indexes: Record<string, number>;\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'insertTemporaryRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, index, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, index, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n indexes: omit(state.indexes, rowId),\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'insertTemporaryRow': {\n const { index, value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n indexes: {},\n temporaryRows: [],\n });\n\n // rows\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as string];\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function getRowStatus(rowId: string) {\n return state.changes.status[rowId];\n }\n\n function setRowStatus(rowId: string, status: EditingSaveState | undefined) {\n dispatch({\n type: 'setRowStatus',\n rowId,\n payload: {\n status,\n },\n });\n }\n\n function insertTemporaryRow<T extends TType>(data: Partial<T>, rowIndex: number) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'insertTemporaryRow',\n rowId: newRowId,\n payload: { index: rowIndex, value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n index: rowIndex,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(\n cell: ReactTableCell<T, unknown>,\n rowIndex: number,\n nextValue,\n shouldRunUpdaters = true\n ) {\n const changes =\n nextValue !== undefined\n ? { ...state.changes.rows[cell.row.id], [cell.column.id]: nextValue }\n : { ...state.changes.rows[cell.row.id] };\n\n if (!Object.keys(changes).length) {\n return;\n }\n\n let updatesForOtherCells: Partial<T> = {};\n\n // run the updater handler if there is one, to see if there are any other cells to update\n if (typeof handleChange === 'function' && shouldRunUpdaters) {\n const previousRowValue = {\n ...state.changes.originals[cell.row.id],\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...state.changes.originals[cell.row.id],\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id],\n nextRowValue,\n previousRowValue\n )) ?? {}) as Partial<T>;\n }\n\n // create a projection of the next state, so we can act against it\n const nextChanges = { ...changes, ...updatesForOtherCells };\n const nextMoveReasons: EditingRowMoveReason = { ...state.changes.moveReasons[cell.row.id] };\n const nextCellErrors: Record<string, string> = { ...state.changes.errors[cell.row.id]?.cells };\n\n // run validation\n let validationErrors: Record<string, string> = {};\n\n if (validator) {\n const nextRowValue = { ...state.changes.originals[cell.row.id], ...changes, ...updatesForOtherCells };\n validationErrors = ((await validator(nextRowValue)) ?? {}) as Record<string, string>;\n }\n\n // only set errors and move reasons for the cells we're currently acting on\n // why? because the UX is not good if we set them for cells the user hasn't touched yet\n const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];\n const allCells = cell.row._getAllCellsByColumnId();\n\n cellsToActOn.forEach(accessor => {\n if (validationErrors[accessor]) {\n nextCellErrors[accessor] = validationErrors[accessor];\n // don't show move indicator for cells with errors, they aren't valid and can't be saved\n delete nextMoveReasons[accessor];\n } else {\n // there isn't any error in this run, remove any error set in state\n delete nextCellErrors[accessor];\n\n if (allCells[accessor]?.column.getIsSorted()) {\n // run row move determination\n const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);\n\n // if the row will move based on this change save why, otherwise delete any existing state\n if (reason) {\n nextMoveReasons[accessor] = reason;\n } else {\n delete nextMoveReasons[accessor];\n }\n }\n }\n });\n\n dispatch({\n type: 'updateRow',\n rowId: cell.row.id,\n payload: {\n cellErrors: nextCellErrors,\n index: rowIndex,\n moveReasons: nextMoveReasons,\n value: nextChanges,\n },\n });\n }\n\n // general\n function getErrorsShownInAlert<T extends TType>() {\n const rowsWithErrors = Object.keys(state.changes.errors);\n\n if (!rowsWithErrors.length) {\n return [];\n }\n\n return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({\n rowId,\n index: state.indexes[rowId],\n changes: state.changes.rows[rowId] as EditingChangeset<T>,\n errors: state.changes.errors[rowId],\n }));\n }\n\n function hasSaved() {\n return !!Object.values(state.changes.status).filter(value => value === 'saved').length;\n }\n\n function hasChanges(rowId?: string) {\n return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;\n }\n\n async function saveChanges<T extends TType>(table: ReactTable<T>, rowId: string | undefined = undefined): Promise<boolean> {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return false;\n }\n\n // sometimes we only want to save one row\n const changes = rowId ? { [rowId]: state.changes.rows[rowId] } : state.changes.rows;\n\n let completed = true;\n\n for (const rowId of Object.keys(changes)) {\n const status = getRowStatus(rowId);\n\n try {\n const rowChanges = changes[rowId] ?? {};\n\n // don't try to save if - already saving, or there are known errors\n if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...rowChanges };\n\n // if we had to create a temporary id, delete it first - it's our data, not theirs\n if (isTemporaryRow(changeSet[rowIdentityAccessor as string])) {\n delete changeSet[rowIdentityAccessor];\n }\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n discardChanges(rowId, table);\n\n // show the saved status, then remove it after a delay\n setRowStatus(rowId, 'saved');\n setTimeout(() => {\n setRowStatus(rowId, undefined);\n }, DELAY_BEFORE_REMOVING_SAVE_STATUS);\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof TypeError || (error as any)?.response?.status >= 500) {\n console.error(error);\n }\n\n // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError: string | undefined;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n dispatch({\n type: 'setRowErrors',\n rowId,\n payload: {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n },\n });\n }\n\n setRowStatus(rowId, 'errored');\n completed = false;\n }\n }\n\n return completed;\n }\n\n function discardChanges<T extends TType>(rowId: string, table: ReactTable<T>) {\n // remove any new rows from pinned state before discarding them\n table.resetRowPinning(true);\n\n dispatch({\n type: 'removeRow',\n rowId,\n payload: { rowIdentityAccessor },\n });\n }\n\n return {\n // row\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n hasTemporaryRowErrors,\n getRowStatus,\n setRowStatus,\n // cells\n setCellValue,\n getCellValue,\n getCellError,\n onCellChanged,\n // general\n getErrorsShownInAlert,\n hasChanges,\n saveChanges,\n discardChanges,\n hasSaved,\n // new rows\n insertTemporaryRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","index","row","value","_extends","changes","rows","setWith","Object","originals","indexes","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","_objectDestructuringEmpty","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","_ref","completed","_temp7","_forOf","getRowStatus","_catch","_changes$rowId","_temp6","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","rowChanges","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","nextValue","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp","nextRowValue","_validator","_temp2","_extends3","_temp3","previousRowValue","_handleChange","_temp4","useLocalization","_React$useReducer","React","useReducer","getRowValue","_state$changes$rows$r","_state$changes$rows","getRowMoveReason","_Object$values$","values","_state$changes$moveRe","_state$changes$moveRe2","hasRowErrors","_state$changes$errors","_state$changes$errors2","_state$changes$errors3","hasRowErrorsShownInAlert","_state$changes$errors4","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","_extends2","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors8","_state$changes$errors9","_state$changes$errors10","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges","resetRowPinning"],"mappings":"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"}
@@ -6,30 +6,44 @@ import { usePendingChangesState } from './useEditingState.js';
6
6
  function useTableEditing(isEnabled, handleSave, handleChange, handleCreate, rowIdentityAccessor, validator) {
7
7
  var createRow = function createRow(table, scrollToIndex, row) {
8
8
  try {
9
- if (!handleCreate) {
10
- return Promise.resolve();
11
- }
12
- var tableMeta = table.options.meta;
13
- return Promise.resolve(tableMeta.editing.saveChanges(table)).then(function (saved) {
14
- if (!saved) {
15
- return;
16
- }
9
+ var _temp2 = function _temp2(_result) {
10
+ if (_exit) return _result;
17
11
  var changeset = row !== null && row !== void 0 ? row : handleCreate();
18
12
  try {
19
13
  if (changeset) {
20
- // set the active row to the new row before toggling editing on
21
14
  var temporaryRows = tableMeta.editing.temporaryRows;
22
15
  var nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;
23
- var rowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);
24
- table.getRow(rowId).pin('bottom');
25
- tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
26
- toggleEditing(true, table, scrollToIndex);
16
+ var newRowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);
17
+ // reset before changing row otherwise the cell changes and validation might run
27
18
  setLastFocusedCellIndex(undefined);
19
+ // set the active row to the new row before toggling editing on
20
+ tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
21
+ // wait until set states have run
22
+ requestAnimationFrame(function () {
23
+ toggleEditing(true, table, scrollToIndex, false);
24
+ table.getRow(newRowId).pin('bottom');
25
+ });
28
26
  }
29
27
  } catch (error) {
30
28
  console.error(error);
31
29
  }
32
- });
30
+ };
31
+ var _exit = false;
32
+ if (!handleCreate) {
33
+ return Promise.resolve();
34
+ }
35
+ var tableMeta = table.options.meta;
36
+ var _temp = function () {
37
+ if (tableMeta.rowActive.rowActiveIndex !== undefined) {
38
+ var _table$getRowModel$ro2;
39
+ return Promise.resolve(tableMeta.editing.saveChanges(table, (_table$getRowModel$ro2 = table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex]) === null || _table$getRowModel$ro2 === void 0 ? void 0 : _table$getRowModel$ro2.id)).then(function (saved) {
40
+ if (!saved) {
41
+ _exit = true;
42
+ }
43
+ });
44
+ }
45
+ }();
46
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
33
47
  } catch (e) {
34
48
  return Promise.reject(e);
35
49
  }
@@ -52,26 +66,29 @@ function useTableEditing(isEnabled, handleSave, handleChange, handleCreate, rowI
52
66
  lastFocusedCellIndex = _React$useState3[0],
53
67
  setLastFocusedCellIndex = _React$useState3[1];
54
68
  var pendingChangesFns = usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator);
55
- function toggleEditing(enabled, table, scrollToIndex) {
56
- var _tableMeta$rowActive$, _table$getRowModel$ro;
57
- if (!enabled) {
58
- // save
59
- pendingChangesFns.saveChanges(table);
69
+ function toggleEditing(enabled, table, scrollToIndex, doSave) {
70
+ if (doSave === void 0) {
71
+ doSave = true;
72
+ }
73
+ var tableMeta = table.options.meta;
74
+ if (enabled) {
75
+ var _tableMeta$rowActive$, _table$getRowModel$ro;
76
+ var index = (_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0;
77
+ if (tableMeta.rowActive.rowActiveIndex === undefined) {
78
+ tableMeta.rowActive.setRowActiveIndex(index);
79
+ }
80
+ if (!isTemporaryRow((_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id)) {
81
+ scrollToIndex(index);
82
+ }
83
+ } else if (!enabled) {
60
84
  // reset detailed mode
61
85
  toggleDetailedMode(false);
62
86
  // reset the last index back to the first focusable element, when editing gets turned off
63
87
  setLastFocusedCellIndex(undefined);
64
88
  }
65
- var tableMeta = table.options.meta;
66
- var index = (_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0;
67
- if (tableMeta.rowActive.rowActiveIndex === undefined) {
68
- tableMeta.rowActive.setRowActiveIndex(index);
69
- }
70
89
  setEditing(enabled);
71
- var row = (_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id;
72
- if (row && !isTemporaryRow(row)) {
73
- console.log('hmm');
74
- scrollToIndex(index);
90
+ if (doSave) {
91
+ pendingChangesFns.saveChanges(table);
75
92
  }
76
93
  }
77
94
  return _extends({
@@ -1 +1 @@
1
- {"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} from '../types';\nimport { usePendingChangesState } from './useEditingState';\nimport { isTemporaryRow } from '../util/editing';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n handleCreate: Table3EditingCreateHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, setEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // used to contain ref to the create button\n const createRowButtonRef = React.useRef<HTMLButtonElement>(null);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = React.useState<number | undefined>(undefined);\n\n const pendingChangesFns = usePendingChangesState<TType>(\n handleSave,\n handleChange,\n rowIdentityAccessor as keyof TType,\n validator\n );\n\n function toggleEditing<T extends TType>(\n enabled: React.SetStateAction<boolean>,\n table: ReactTable<T>,\n scrollToIndex: (index: number) => void\n ) {\n if (!enabled) {\n // save\n pendingChangesFns.saveChanges(table);\n // reset detailed mode\n toggleDetailedMode(false);\n // reset the last index back to the first focusable element, when editing gets turned off\n setLastFocusedCellIndex(undefined);\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const index = tableMeta.rowActive.rowActiveIndex ?? 0;\n\n if (tableMeta.rowActive.rowActiveIndex === undefined) {\n tableMeta.rowActive.setRowActiveIndex(index);\n }\n\n setEditing(enabled);\n\n const row = table.getRowModel().rows[index]?.id;\n\n if (row && !isTemporaryRow(row)) {\n console.log('hmm');\n scrollToIndex(index);\n }\n }\n\n async function createRow<T extends TType>(table: ReactTable<T>, scrollToIndex: (index: number) => void, row?: Partial<T>) {\n if (!handleCreate) {\n return;\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const saved = await tableMeta.editing.saveChanges(table);\n\n if (!saved) {\n return;\n }\n\n const changeset = row ?? handleCreate();\n\n try {\n if (changeset) {\n // set the active row to the new row before toggling editing on\n const temporaryRows = tableMeta.editing.temporaryRows as TType[];\n const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;\n const rowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);\n table.getRow(rowId).pin('bottom');\n\n tableMeta.rowActive.setRowActiveIndex(nextRowIndex);\n\n toggleEditing(true, table, scrollToIndex);\n setLastFocusedCellIndex(undefined);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n return {\n isEnabled,\n isEditing,\n isDetailedMode,\n toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,\n toggleEditing: isEnabled ? toggleEditing : () => undefined,\n lastFocusedCellIndex,\n setLastFocusedCellIndex,\n createRow,\n createRowButtonRef,\n ...pendingChangesFns,\n };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","handleChange","handleCreate","rowIdentityAccessor","validator","createRow","table","scrollToIndex","row","Promise","resolve","tableMeta","options","meta","editing","saveChanges","then","saved","changeset","temporaryRows","nextRowIndex","length","rowId","pendingChangesFns","insertTemporaryRow","getRow","pin","rowActive","setRowActiveIndex","toggleEditing","setLastFocusedCellIndex","undefined","error","console","e","reject","_React$useState","React","useState","isEditing","setEditing","_React$useState2","isDetailedMode","toggleDetailedMode","createRowButtonRef","useRef","_React$useState3","lastFocusedCellIndex","usePendingChangesState","enabled","index","_tableMeta$rowActive$","rowActiveIndex","_table$getRowModel$ro","getRowModel","rows","id","isTemporaryRow","log","_extends"],"mappings":";;;;;SAWgBA,eAAeA,CAC3BC,SAAS,EACTC,UAAuD,EACvDC,YAA2D,EAC3DC,YAA2D,EAC3DC,mBAA4C,EAC5CC,SAAsD;MAoDvCC,SAAS,YAATA,SAASA,CAAkBC,KAAoB,EAAEC,aAAsC,EAAEC,GAAgB;IAAA;MACpH,IAAI,CAACN,YAAY,EAAE;QACf,OAAAO,OAAA,CAAAC,OAAA;;MAGJ,IAAMC,SAAS,GAAGL,KAAK,CAACM,OAAO,CAACC,IAA6B;MAAC,OAAAJ,OAAA,CAAAC,OAAA,CAC1CC,SAAS,CAACG,OAAO,CAACC,WAAW,CAACT,KAAK,CAAC,EAAAU,IAAA,WAAlDC,KAAK;QAEX,IAAI,CAACA,KAAK,EAAE;UACR;;QAGJ,IAAMC,SAAS,GAAGV,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAIN,YAAY,EAAE;QAEvC,IAAI;UACA,IAAIgB,SAAS,EAAE;;YAEX,IAAMC,aAAa,GAAGR,SAAS,CAACG,OAAO,CAACK,aAAwB;YAChE,IAAMC,YAAY,GAAGD,aAAa,CAACE,MAAM,GAAGV,SAAS,CAACU,MAAM,GAAG,CAAC,GAAGV,SAAS,CAACU,MAAM;YACnF,IAAMC,KAAK,GAAGC,iBAAiB,CAACC,kBAAkB,CAACN,SAAS,EAAEE,YAAY,CAAC;YAC3Ed,KAAK,CAACmB,MAAM,CAACH,KAAK,CAAC,CAACI,GAAG,CAAC,QAAQ,CAAC;YAEjCf,SAAS,CAACgB,SAAS,CAACC,iBAAiB,CAACR,YAAY,CAAC;YAEnDS,aAAa,CAAC,IAAI,EAAEvB,KAAK,EAAEC,aAAa,CAAC;YACzCuB,uBAAuB,CAACC,SAAS,CAAC;;SAEzC,CAAC,OAAOC,KAAK,EAAE;UACZC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;;;KAE3B,QAAAE,CAAA;MAAA,OAAAzB,OAAA,CAAA0B,MAAA,CAAAD,CAAA;;;EAAA,IAvFDnC,SAAS;IAATA,SAAS,GAAG,KAAK;;;EAQjB,IAAAqC,eAAA,GAAgCC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;IAA9CC,SAAS,GAAAH,eAAA;IAAEI,UAAU,GAAAJ,eAAA;;EAG5B,IAAAK,gBAAA,GAA6CJ,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;IAA3DI,cAAc,GAAAD,gBAAA;IAAEE,kBAAkB,GAAAF,gBAAA;;EAGzC,IAAMG,kBAAkB,GAAGP,cAAK,CAACQ,MAAM,CAAoB,IAAI,CAAC;;EAGhE,IAAAC,gBAAA,GAAwDT,cAAK,CAACC,QAAQ,CAAqBP,SAAS,CAAC;IAA9FgB,oBAAoB,GAAAD,gBAAA;IAAEhB,uBAAuB,GAAAgB,gBAAA;EAEpD,IAAMvB,iBAAiB,GAAGyB,sBAAsB,CAC5ChD,UAAU,EACVC,YAAY,EACZE,mBAAkC,EAClCC,SAAS,CACZ;EAED,SAASyB,aAAaA,CAClBoB,OAAsC,EACtC3C,KAAoB,EACpBC,aAAsC;;IAEtC,IAAI,CAAC0C,OAAO,EAAE;;MAEV1B,iBAAiB,CAACR,WAAW,CAACT,KAAK,CAAC;;MAEpCqC,kBAAkB,CAAC,KAAK,CAAC;;MAEzBb,uBAAuB,CAACC,SAAS,CAAC;;IAGtC,IAAMpB,SAAS,GAAGL,KAAK,CAACM,OAAO,CAACC,IAA6B;IAC7D,IAAMqC,KAAK,IAAAC,qBAAA,GAAGxC,SAAS,CAACgB,SAAS,CAACyB,cAAc,cAAAD,qBAAA,cAAAA,qBAAA,GAAI,CAAC;IAErD,IAAIxC,SAAS,CAACgB,SAAS,CAACyB,cAAc,KAAKrB,SAAS,EAAE;MAClDpB,SAAS,CAACgB,SAAS,CAACC,iBAAiB,CAACsB,KAAK,CAAC;;IAGhDV,UAAU,CAACS,OAAO,CAAC;IAEnB,IAAMzC,GAAG,IAAA6C,qBAAA,GAAG/C,KAAK,CAACgD,WAAW,EAAE,CAACC,IAAI,CAACL,KAAK,CAAC,cAAAG,qBAAA,uBAA/BA,qBAAA,CAAiCG,EAAE;IAE/C,IAAIhD,GAAG,IAAI,CAACiD,cAAc,CAACjD,GAAG,CAAC,EAAE;MAC7ByB,OAAO,CAACyB,GAAG,CAAC,KAAK,CAAC;MAClBnD,aAAa,CAAC2C,KAAK,CAAC;;;EAoC5B,OAAAS,QAAA;IACI5D,SAAS,EAATA,SAAS;IACTwC,SAAS,EAATA,SAAS;IACTG,cAAc,EAAdA,cAAc;IACdC,kBAAkB,EAAE5C,SAAS,GAAG4C,kBAAkB,GAAG;MAAA,OAAMZ,SAAS;;IACpEF,aAAa,EAAE9B,SAAS,GAAG8B,aAAa,GAAG;MAAA,OAAME,SAAS;;IAC1DgB,oBAAoB,EAApBA,oBAAoB;IACpBjB,uBAAuB,EAAvBA,uBAAuB;IACvBzB,SAAS,EAATA,SAAS;IACTuC,kBAAkB,EAAlBA;KACGrB,iBAAiB;AAE5B;;;;"}
1
+ {"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} from '../types';\nimport { usePendingChangesState } from './useEditingState';\nimport { isTemporaryRow } from '../util/editing';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n handleCreate: Table3EditingCreateHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, setEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // used to contain ref to the create button\n const createRowButtonRef = React.useRef<HTMLButtonElement>(null);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = React.useState<number | undefined>(undefined);\n\n const pendingChangesFns = usePendingChangesState<TType>(\n handleSave,\n handleChange,\n rowIdentityAccessor as keyof TType,\n validator\n );\n\n function toggleEditing<T extends TType>(\n enabled: React.SetStateAction<boolean>,\n table: ReactTable<T>,\n scrollToIndex: (index: number) => void,\n doSave = true\n ) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n if (enabled) {\n const index = tableMeta.rowActive.rowActiveIndex ?? 0;\n\n if (tableMeta.rowActive.rowActiveIndex === undefined) {\n tableMeta.rowActive.setRowActiveIndex(index);\n }\n\n if (!isTemporaryRow(table.getRowModel().rows[index]?.id)) {\n scrollToIndex(index);\n }\n } else if (!enabled) {\n // reset detailed mode\n toggleDetailedMode(false);\n // reset the last index back to the first focusable element, when editing gets turned off\n setLastFocusedCellIndex(undefined);\n }\n\n setEditing(enabled);\n\n if (doSave) {\n pendingChangesFns.saveChanges(table);\n }\n }\n\n async function createRow<T extends TType>(table: ReactTable<T>, scrollToIndex: (index: number) => void, row?: Partial<T>) {\n if (!handleCreate) {\n return;\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n const saved = await tableMeta.editing.saveChanges(\n table,\n table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex]?.id\n );\n\n if (!saved) {\n return;\n }\n }\n\n const changeset = row ?? handleCreate();\n\n try {\n if (changeset) {\n const temporaryRows = tableMeta.editing.temporaryRows as TType[];\n const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;\n\n const newRowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);\n\n // reset before changing row otherwise the cell changes and validation might run\n setLastFocusedCellIndex(undefined);\n // set the active row to the new row before toggling editing on\n tableMeta.rowActive.setRowActiveIndex(nextRowIndex);\n\n // wait until set states have run\n requestAnimationFrame(() => {\n toggleEditing(true, table, scrollToIndex, false);\n table.getRow(newRowId).pin('bottom');\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n return {\n isEnabled,\n isEditing,\n isDetailedMode,\n toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,\n toggleEditing: isEnabled ? toggleEditing : () => undefined,\n lastFocusedCellIndex,\n setLastFocusedCellIndex,\n createRow,\n createRowButtonRef,\n ...pendingChangesFns,\n };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","handleChange","handleCreate","rowIdentityAccessor","validator","createRow","table","scrollToIndex","row","changeset","temporaryRows","tableMeta","editing","nextRowIndex","length","newRowId","pendingChangesFns","insertTemporaryRow","setLastFocusedCellIndex","undefined","rowActive","setRowActiveIndex","requestAnimationFrame","toggleEditing","getRow","pin","error","console","_exit","Promise","resolve","options","meta","_temp","rowActiveIndex","_table$getRowModel$ro2","saveChanges","getRowModel","rows","id","then","saved","_temp2","e","reject","_React$useState","React","useState","isEditing","setEditing","_React$useState2","isDetailedMode","toggleDetailedMode","createRowButtonRef","useRef","_React$useState3","lastFocusedCellIndex","usePendingChangesState","enabled","doSave","_tableMeta$rowActive$","_table$getRowModel$ro","index","isTemporaryRow","_extends"],"mappings":"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"}
@@ -9,16 +9,13 @@ import { shortcut } from '../util/editing.js';
9
9
  function useTableEditingListener(table, tableRef, scrollToIndex) {
10
10
  var tableMeta = table.options.meta;
11
11
  var localization = useLocalization();
12
- // save when the row changes
13
- // store the last row active index, otherwise everytime tableMeta.editing.saveChanges changes the hook runs again
14
- var lastRowActiveIndexRef = React__default.useRef(tableMeta.rowActive.rowActiveIndex);
15
12
  useLazyEffect(function () {
16
- if (tableMeta.rowActive.rowActiveIndex !== lastRowActiveIndexRef.current) {
17
- lastRowActiveIndexRef.current = tableMeta.rowActive.rowActiveIndex;
18
- if (tableMeta.editing.isEditing && lastRowActiveIndexRef.current !== undefined) {
19
- tableMeta.editing.saveChanges(table);
13
+ return function () {
14
+ if (tableMeta.editing.isEditing && tableMeta.rowActive.rowActiveIndex !== undefined) {
15
+ var _table$getRowModel$ro;
16
+ tableMeta.editing.saveChanges(table, (_table$getRowModel$ro = table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id);
20
17
  }
21
- }
18
+ };
22
19
  }, [tableMeta.rowActive.rowActiveIndex]);
23
20
  // show a warning if the user navigates away without triggering save, such as using the browser back/forward button
24
21
  var hasChanges = tableMeta.editing.hasChanges();
@@ -1 +1 @@
1
- {"version":3,"file":"useTableEditingListener.js","sources":["../../../../../../../../src/components/Table3/listeners/useTableEditingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../hooks/useLazyEffect';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { resetHighlightedColumnIndexes } from '../../../primitives/Table/useTableManager/util/search';\nimport { useLocalization } from '../../Provider/Localization';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { shortcut } from '../util/editing';\n\nexport function useTableEditingListener<TType = unknown>(\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n scrollToIndex: (index: number) => void\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n\n // save when the row changes\n // store the last row active index, otherwise everytime tableMeta.editing.saveChanges changes the hook runs again\n const lastRowActiveIndexRef = React.useRef<number | undefined>(tableMeta.rowActive.rowActiveIndex);\n\n useLazyEffect(() => {\n if (tableMeta.rowActive.rowActiveIndex !== lastRowActiveIndexRef.current) {\n lastRowActiveIndexRef.current = tableMeta.rowActive.rowActiveIndex;\n\n if (tableMeta.editing.isEditing && lastRowActiveIndexRef.current !== undefined) {\n tableMeta.editing.saveChanges(table);\n }\n }\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // show a warning if the user navigates away without triggering save, such as using the browser back/forward button\n const hasChanges = tableMeta.editing.hasChanges();\n\n React.useEffect(() => {\n function showUnsavedChangesWarning(event: BeforeUnloadEvent) {\n if (tableMeta.editing.isEditing && hasChanges) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n }\n\n window.addEventListener('beforeunload', showUnsavedChangesWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showUnsavedChangesWarning);\n };\n }, [tableMeta.editing.isEditing, hasChanges]);\n\n const hasSavedChanges = tableMeta.editing.hasSaved();\n\n useLazyEffect(() => {\n if (hasSavedChanges) {\n resetHighlightedColumnIndexes(table.getState().globalFilter, table, localization);\n }\n }, [hasSavedChanges]);\n\n React.useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (tableMeta.editing.isEditing) {\n const element = event.target as Element;\n const isTableOrIsInsideTable =\n element.tagName === 'TABLE' ||\n element.tagName === 'TBODY' ||\n element.getAttribute('data-taco') === 'backdrop' ||\n element.getAttribute('data-table') === 'editing-toggle' ||\n !document.body.contains(element) ||\n isElementInsideOrTriggeredFromContainer(element, tableRef.current);\n\n // users can click the white space below rows which could be inside the table, but a valid scenario to save\n if (!isTableOrIsInsideTable) {\n tableMeta.editing.saveChanges(table);\n }\n }\n };\n\n document.addEventListener('click', onClickOutside);\n\n return () => document.removeEventListener('click', onClickOutside);\n }, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);\n\n /*\n const rows = table.getRowModel().rows;\n\n // make sure pending changes are removed for rows that no longer exist\n useLazyEffect(() => {\n const pendingChanges = tableMeta.editing.getErrorsShownInAlert();\n\n pendingChanges.forEach(pendingChange => {\n try {\n table.getRow(pendingChange.rowId);\n } catch {\n // TODO: this has the potential to remove changes for \"unloaded\" rows in server loading\n //tableMeta.editing.discardChanges(pendingChange.rowId, table);\n }\n });\n }, [rows.length]);\n */\n\n // shortcuts\n useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, (event: KeyboardEvent) => {\n event.preventDefault();\n tableMeta.editing.toggleEditing(!tableMeta.editing.isEditing, table, scrollToIndex);\n });\n\n useGlobalKeyDown(tableMeta.editing.isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n tableMeta.editing.saveChanges(table);\n });\n}\n"],"names":["useTableEditingListener","table","tableRef","scrollToIndex","tableMeta","options","meta","localization","useLocalization","lastRowActiveIndexRef","React","useRef","rowActive","rowActiveIndex","useLazyEffect","current","editing","isEditing","undefined","saveChanges","hasChanges","useEffect","showUnsavedChangesWarning","event","returnValue","window","addEventListener","removeEventListener","hasSavedChanges","hasSaved","resetHighlightedColumnIndexes","getState","globalFilter","onClickOutside","element","target","isTableOrIsInsideTable","tagName","getAttribute","document","body","contains","isElementInsideOrTriggeredFromContainer","useGlobalKeyDown","isEnabled","shortcut","preventDefault","toggleEditing","key","shift"],"mappings":"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"}
1
+ {"version":3,"file":"useTableEditingListener.js","sources":["../../../../../../../../src/components/Table3/listeners/useTableEditingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../hooks/useLazyEffect';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { resetHighlightedColumnIndexes } from '../../../primitives/Table/useTableManager/util/search';\nimport { useLocalization } from '../../Provider/Localization';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { shortcut } from '../util/editing';\n\nexport function useTableEditingListener<TType = unknown>(\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n scrollToIndex: (index: number) => void\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n\n useLazyEffect(() => {\n return () => {\n if (tableMeta.editing.isEditing && tableMeta.rowActive.rowActiveIndex !== undefined) {\n tableMeta.editing.saveChanges(table, table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex]?.id);\n }\n };\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // show a warning if the user navigates away without triggering save, such as using the browser back/forward button\n const hasChanges = tableMeta.editing.hasChanges();\n\n React.useEffect(() => {\n function showUnsavedChangesWarning(event: BeforeUnloadEvent) {\n if (tableMeta.editing.isEditing && hasChanges) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n }\n\n window.addEventListener('beforeunload', showUnsavedChangesWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showUnsavedChangesWarning);\n };\n }, [tableMeta.editing.isEditing, hasChanges]);\n\n const hasSavedChanges = tableMeta.editing.hasSaved();\n\n useLazyEffect(() => {\n if (hasSavedChanges) {\n resetHighlightedColumnIndexes(table.getState().globalFilter, table, localization);\n }\n }, [hasSavedChanges]);\n\n React.useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (tableMeta.editing.isEditing) {\n const element = event.target as Element;\n const isTableOrIsInsideTable =\n element.tagName === 'TABLE' ||\n element.tagName === 'TBODY' ||\n element.getAttribute('data-taco') === 'backdrop' ||\n element.getAttribute('data-table') === 'editing-toggle' ||\n !document.body.contains(element) ||\n isElementInsideOrTriggeredFromContainer(element, tableRef.current);\n\n // users can click the white space below rows which could be inside the table, but a valid scenario to save\n if (!isTableOrIsInsideTable) {\n tableMeta.editing.saveChanges(table);\n }\n }\n };\n\n document.addEventListener('click', onClickOutside);\n\n return () => document.removeEventListener('click', onClickOutside);\n }, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);\n\n /*\n const rows = table.getRowModel().rows;\n\n // make sure pending changes are removed for rows that no longer exist\n useLazyEffect(() => {\n const pendingChanges = tableMeta.editing.getErrorsShownInAlert();\n\n pendingChanges.forEach(pendingChange => {\n try {\n table.getRow(pendingChange.rowId);\n } catch {\n // TODO: this has the potential to remove changes for \"unloaded\" rows in server loading\n //tableMeta.editing.discardChanges(pendingChange.rowId, table);\n }\n });\n }, [rows.length]);\n */\n\n // shortcuts\n useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, (event: KeyboardEvent) => {\n event.preventDefault();\n tableMeta.editing.toggleEditing(!tableMeta.editing.isEditing, table, scrollToIndex);\n });\n\n useGlobalKeyDown(tableMeta.editing.isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n tableMeta.editing.saveChanges(table);\n });\n}\n"],"names":["useTableEditingListener","table","tableRef","scrollToIndex","tableMeta","options","meta","localization","useLocalization","useLazyEffect","editing","isEditing","rowActive","rowActiveIndex","undefined","_table$getRowModel$ro","saveChanges","getRowModel","rows","id","hasChanges","React","useEffect","showUnsavedChangesWarning","event","returnValue","window","addEventListener","removeEventListener","hasSavedChanges","hasSaved","resetHighlightedColumnIndexes","getState","globalFilter","onClickOutside","element","target","isTableOrIsInsideTable","tagName","getAttribute","document","body","contains","isElementInsideOrTriggeredFromContainer","current","useGlobalKeyDown","isEnabled","shortcut","preventDefault","toggleEditing","key","shift"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import React__default from 'react';
2
2
  import { createShortcutKeyDownHandler } from '../utils/keyboard.js';
3
3
 
4
- var useGlobalKeyDown = function useGlobalKeyDown(shortcut, handler) {
4
+ var useGlobalKeyDown = function useGlobalKeyDown(shortcut, handler, element) {
5
5
  React__default.useEffect(function () {
6
6
  var handleKeyDown;
7
7
  if (shortcut) {
8
- handleKeyDown = createShortcutKeyDownHandler(shortcut, handler, false);
8
+ handleKeyDown = createShortcutKeyDownHandler(shortcut, handler, false, element);
9
9
  document.addEventListener('keydown', handleKeyDown);
10
10
  }
11
11
  return function () {
@@ -1 +1 @@
1
- {"version":3,"file":"useGlobalKeyDown.js","sources":["../../../../../../src/hooks/useGlobalKeyDown.ts"],"sourcesContent":["import React from 'react';\nimport { createShortcutKeyDownHandler, KeyDownHandlerOptions } from '../utils/keyboard';\n\nexport const useGlobalKeyDown = (\n shortcut: string | KeyDownHandlerOptions | undefined,\n handler: (event: KeyboardEvent) => void\n) => {\n React.useEffect(() => {\n let handleKeyDown;\n\n if (shortcut) {\n handleKeyDown = createShortcutKeyDownHandler(\n shortcut,\n handler as (event: KeyboardEvent | React.KeyboardEvent) => void,\n false\n );\n\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n }\n };\n }, [shortcut, handler]);\n};\n"],"names":["useGlobalKeyDown","shortcut","handler","React","useEffect","handleKeyDown","createShortcutKeyDownHandler","document","addEventListener","removeEventListener"],"mappings":";;;IAGaA,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACzBC,QAAoD,EACpDC,OAAuC;EAEvCC,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIC,aAAa;IAEjB,IAAIJ,QAAQ,EAAE;MACVI,aAAa,GAAGC,4BAA4B,CACxCL,QAAQ,EACRC,OAA+D,EAC/D,KAAK,CACR;MAEDK,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEH,aAAa,CAAC;;IAGvD,OAAO;MACH,IAAIA,aAAa,EAAE;QACfE,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEJ,aAAa,CAAC;;KAE7D;GACJ,EAAE,CAACJ,QAAQ,EAAEC,OAAO,CAAC,CAAC;AAC3B;;;;"}
1
+ {"version":3,"file":"useGlobalKeyDown.js","sources":["../../../../../../src/hooks/useGlobalKeyDown.ts"],"sourcesContent":["import React from 'react';\nimport { createShortcutKeyDownHandler, KeyDownHandlerOptions } from '../utils/keyboard';\n\nexport const useGlobalKeyDown = (\n shortcut: string | KeyDownHandlerOptions | undefined,\n handler: (event: KeyboardEvent) => void,\n element?: HTMLElement | null\n) => {\n React.useEffect(() => {\n let handleKeyDown;\n\n if (shortcut) {\n handleKeyDown = createShortcutKeyDownHandler(\n shortcut,\n handler as (event: KeyboardEvent | React.KeyboardEvent) => void,\n false,\n element\n );\n\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n }\n };\n }, [shortcut, handler]);\n};\n"],"names":["useGlobalKeyDown","shortcut","handler","element","React","useEffect","handleKeyDown","createShortcutKeyDownHandler","document","addEventListener","removeEventListener"],"mappings":";;;IAGaA,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACzBC,QAAoD,EACpDC,OAAuC,EACvCC,OAA4B;EAE5BC,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIC,aAAa;IAEjB,IAAIL,QAAQ,EAAE;MACVK,aAAa,GAAGC,4BAA4B,CACxCN,QAAQ,EACRC,OAA+D,EAC/D,KAAK,EACLC,OAAO,CACV;MAEDK,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEH,aAAa,CAAC;;IAGvD,OAAO;MACH,IAAIA,aAAa,EAAE;QACfE,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEJ,aAAa,CAAC;;KAE7D;GACJ,EAAE,CAACL,QAAQ,EAAEC,OAAO,CAAC,CAAC;AAC3B;;;;"}
@@ -5,7 +5,7 @@ function useLazyEffect(effect, deps) {
5
5
  var readyRef = React__default.useRef(false);
6
6
  React__default.useEffect(function () {
7
7
  if (readyRef.current) {
8
- effect();
8
+ return effect();
9
9
  } else {
10
10
  readyRef.current = true;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useLazyEffect.js","sources":["../../../../../../src/hooks/useLazyEffect.ts"],"sourcesContent":["import React from 'react';\n\n// augments useEffect to not run on the initial mount\nexport function useLazyEffect(effect: React.EffectCallback, deps?: React.DependencyList | undefined) {\n const readyRef = React.useRef(false);\n\n React.useEffect(() => {\n if (readyRef.current) {\n effect();\n } else {\n readyRef.current = true;\n }\n }, deps);\n}\n"],"names":["useLazyEffect","effect","deps","readyRef","React","useRef","useEffect","current"],"mappings":";;AAEA;SACgBA,aAAaA,CAACC,MAA4B,EAAEC,IAAuC;EAC/F,IAAMC,QAAQ,GAAGC,cAAK,CAACC,MAAM,CAAC,KAAK,CAAC;EAEpCD,cAAK,CAACE,SAAS,CAAC;IACZ,IAAIH,QAAQ,CAACI,OAAO,EAAE;MAClBN,MAAM,EAAE;KACX,MAAM;MACHE,QAAQ,CAACI,OAAO,GAAG,IAAI;;GAE9B,EAAEL,IAAI,CAAC;AACZ;;;;"}
1
+ {"version":3,"file":"useLazyEffect.js","sources":["../../../../../../src/hooks/useLazyEffect.ts"],"sourcesContent":["import React from 'react';\n\n// augments useEffect to not run on the initial mount\nexport function useLazyEffect(effect: React.EffectCallback, deps?: React.DependencyList | undefined) {\n const readyRef = React.useRef(false);\n\n React.useEffect(() => {\n if (readyRef.current) {\n return effect();\n } else {\n readyRef.current = true;\n }\n }, deps);\n}\n"],"names":["useLazyEffect","effect","deps","readyRef","React","useRef","useEffect","current"],"mappings":";;AAEA;SACgBA,aAAaA,CAACC,MAA4B,EAAEC,IAAuC;EAC/F,IAAMC,QAAQ,GAAGC,cAAK,CAACC,MAAM,CAAC,KAAK,CAAC;EAEpCD,cAAK,CAACE,SAAS,CAAC;IACZ,IAAIH,QAAQ,CAACI,OAAO,EAAE;MAClB,OAAON,MAAM,EAAE;KAClB,MAAM;MACHE,QAAQ,CAACI,OAAO,GAAG,IAAI;;GAE9B,EAAEL,IAAI,CAAC;AACZ;;;;"}
@@ -17,7 +17,7 @@ var BubbleSelect = function BubbleSelect(props) {
17
17
  if (prevValue !== value && setValue) {
18
18
  if (Array.isArray(value)) {
19
19
  value.forEach(function (v) {
20
- var option = select.querySelector("option[value='" + v + "']");
20
+ var option = select.querySelector("option[value='" + CSS.escape(v) + "']");
21
21
  if (option) {
22
22
  option.selected = true;
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BubbleSelect.js","sources":["../../../../../../src/primitives/BubbleSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { usePreviousValue } from '../hooks/usePrevious';\n\n// taken from radix - https://github.com/radix-ui/primitives/blob/main/packages/react/select/src/Select.tsx#L1183-L1224\nexport const BubbleSelect = (props: React.SelectHTMLAttributes<HTMLSelectElement>) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef<HTMLSelectElement>(null);\n const prevValue = usePreviousValue(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current!;\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, 'value') as PropertyDescriptor;\n const setValue = descriptor.set;\n\n if (prevValue !== value && setValue) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n const option: HTMLOptionElement | null = select.querySelector(`option[value='${v}']`);\n\n if (option) {\n option.selected = true;\n }\n });\n } else {\n setValue.call(select, value);\n }\n\n const event = new Event('change', { bubbles: true });\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n * wrap it will not be able to access its value via the FormData API.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n */\n return <select {...selectProps} defaultValue={value} ref={ref} style={{ display: 'none' }} />;\n};\n"],"names":["BubbleSelect","props","value","selectProps","_objectWithoutPropertiesLoose","_excluded","ref","React","useRef","prevValue","usePreviousValue","useEffect","select","current","descriptor","Object","getOwnPropertyDescriptor","window","HTMLSelectElement","prototype","setValue","set","Array","isArray","forEach","v","option","querySelector","selected","call","event","Event","bubbles","dispatchEvent","defaultValue","style","display"],"mappings":";;;;;AAGA;IACaA,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAoD;EAC7E,IAAQC,KAAK,GAAqBD,KAAK,CAA/BC,KAAK;IAAKC,WAAW,GAAAC,6BAAA,CAAKH,KAAK,EAAAI,SAAA;EACvC,IAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EACjD,IAAMC,SAAS,GAAGC,gBAAgB,CAACR,KAAK,CAAC;;EAGzCK,cAAK,CAACI,SAAS,CAAC;IACZ,IAAMC,MAAM,GAAGN,GAAG,CAACO,OAAQ;IAC3B,IAAMC,UAAU,GAAGC,MAAM,CAACC,wBAAwB,CAACC,MAAM,CAACC,iBAAiB,CAACC,SAAS,EAAE,OAAO,CAAuB;IACrH,IAAMC,QAAQ,GAAGN,UAAU,CAACO,GAAG;IAE/B,IAAIZ,SAAS,KAAKP,KAAK,IAAIkB,QAAQ,EAAE;MACjC,IAAIE,KAAK,CAACC,OAAO,CAACrB,KAAK,CAAC,EAAE;QACtBA,KAAK,CAACsB,OAAO,CAAC,UAAAC,CAAC;UACX,IAAMC,MAAM,GAA6Bd,MAAM,CAACe,aAAa,oBAAkBF,CAAC,OAAI,CAAC;UAErF,IAAIC,MAAM,EAAE;YACRA,MAAM,CAACE,QAAQ,GAAG,IAAI;;SAE7B,CAAC;OACL,MAAM;QACHR,QAAQ,CAACS,IAAI,CAACjB,MAAM,EAAEV,KAAK,CAAC;;MAGhC,IAAM4B,KAAK,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;QAAEC,OAAO,EAAE;OAAM,CAAC;MACpDpB,MAAM,CAACqB,aAAa,CAACH,KAAK,CAAC;;GAElC,EAAE,CAACrB,SAAS,EAAEP,KAAK,CAAC,CAAC;;;;;;;;;;EAWtB,oBAAOK,yDAAYJ,WAAW;IAAE+B,YAAY,EAAEhC,KAAK;IAAEI,GAAG,EAAEA,GAAG;IAAE6B,KAAK,EAAE;MAAEC,OAAO,EAAE;;KAAY;AACjG;;;;"}
1
+ {"version":3,"file":"BubbleSelect.js","sources":["../../../../../../src/primitives/BubbleSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { usePreviousValue } from '../hooks/usePrevious';\n\n// taken from radix - https://github.com/radix-ui/primitives/blob/main/packages/react/select/src/Select.tsx#L1183-L1224\nexport const BubbleSelect = (props: React.SelectHTMLAttributes<HTMLSelectElement>) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef<HTMLSelectElement>(null);\n const prevValue = usePreviousValue(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current!;\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, 'value') as PropertyDescriptor;\n const setValue = descriptor.set;\n\n if (prevValue !== value && setValue) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n const option: HTMLOptionElement | null = select.querySelector(`option[value='${CSS.escape(v)}']`);\n\n if (option) {\n option.selected = true;\n }\n });\n } else {\n setValue.call(select, value);\n }\n\n const event = new Event('change', { bubbles: true });\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n * wrap it will not be able to access its value via the FormData API.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n */\n return <select {...selectProps} defaultValue={value} ref={ref} style={{ display: 'none' }} />;\n};\n"],"names":["BubbleSelect","props","value","selectProps","_objectWithoutPropertiesLoose","_excluded","ref","React","useRef","prevValue","usePreviousValue","useEffect","select","current","descriptor","Object","getOwnPropertyDescriptor","window","HTMLSelectElement","prototype","setValue","set","Array","isArray","forEach","v","option","querySelector","CSS","escape","selected","call","event","Event","bubbles","dispatchEvent","defaultValue","style","display"],"mappings":";;;;;AAGA;IACaA,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAoD;EAC7E,IAAQC,KAAK,GAAqBD,KAAK,CAA/BC,KAAK;IAAKC,WAAW,GAAAC,6BAAA,CAAKH,KAAK,EAAAI,SAAA;EACvC,IAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EACjD,IAAMC,SAAS,GAAGC,gBAAgB,CAACR,KAAK,CAAC;;EAGzCK,cAAK,CAACI,SAAS,CAAC;IACZ,IAAMC,MAAM,GAAGN,GAAG,CAACO,OAAQ;IAC3B,IAAMC,UAAU,GAAGC,MAAM,CAACC,wBAAwB,CAACC,MAAM,CAACC,iBAAiB,CAACC,SAAS,EAAE,OAAO,CAAuB;IACrH,IAAMC,QAAQ,GAAGN,UAAU,CAACO,GAAG;IAE/B,IAAIZ,SAAS,KAAKP,KAAK,IAAIkB,QAAQ,EAAE;MACjC,IAAIE,KAAK,CAACC,OAAO,CAACrB,KAAK,CAAC,EAAE;QACtBA,KAAK,CAACsB,OAAO,CAAC,UAAAC,CAAC;UACX,IAAMC,MAAM,GAA6Bd,MAAM,CAACe,aAAa,oBAAkBC,GAAG,CAACC,MAAM,CAACJ,CAAC,CAAC,OAAI,CAAC;UAEjG,IAAIC,MAAM,EAAE;YACRA,MAAM,CAACI,QAAQ,GAAG,IAAI;;SAE7B,CAAC;OACL,MAAM;QACHV,QAAQ,CAACW,IAAI,CAACnB,MAAM,EAAEV,KAAK,CAAC;;MAGhC,IAAM8B,KAAK,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;QAAEC,OAAO,EAAE;OAAM,CAAC;MACpDtB,MAAM,CAACuB,aAAa,CAACH,KAAK,CAAC;;GAElC,EAAE,CAACvB,SAAS,EAAEP,KAAK,CAAC,CAAC;;;;;;;;;;EAWtB,oBAAOK,yDAAYJ,WAAW;IAAEiC,YAAY,EAAElC,KAAK;IAAEI,GAAG,EAAEA,GAAG;IAAE+B,KAAK,EAAE;MAAEC,OAAO,EAAE;;KAAY;AACjG;;;;"}
@@ -15,13 +15,8 @@ var Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
15
15
  useGlobalKeyDown(shortcut, function (event) {
16
16
  var _internalRef$current;
17
17
  event === null || event === void 0 ? void 0 : event.preventDefault();
18
- var dialog = document.querySelector('[role="dialog"]');
19
- // Don't trigger the click on the button if it is outside of the dialog
20
- if (dialog && !(dialog !== null && dialog !== void 0 && dialog.contains(internalRef.current))) {
21
- return;
22
- }
23
18
  (_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.click();
24
- });
19
+ }, internalRef.current);
25
20
  var Tag = props.href ? 'a' : 'button';
26
21
  return /*#__PURE__*/createElement(Tag, Object.assign({}, otherProps, {
27
22
  href: disabled ? undefined : props.href,
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeyDownHandlerOptions } from '../utils/keyboard';\nimport { useMergedRef } from '../hooks/useMergedRef';\nimport { useGlobalKeyDown } from '../hooks/useGlobalKeyDown';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n shortcut?: string | KeyDownHandlerOptions;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, shortcut, target, type = 'button', ...otherProps } = props;\n const internalRef = useMergedRef<HTMLButtonElement | HTMLAnchorElement>(ref);\n\n useGlobalKeyDown(shortcut, event => {\n event?.preventDefault();\n const dialog = document.querySelector('[role=\"dialog\"]');\n\n // Don't trigger the click on the button if it is outside of the dialog\n if (dialog && !dialog?.contains(internalRef.current)) {\n return;\n }\n\n internalRef.current?.click();\n });\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n href={disabled ? undefined : props.href}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={internalRef as any}>\n {React.Children.count(props.children) > 1\n ? React.Children.map(props.children, child => (typeof child === 'string' ? <span>{child}</span> : child))\n : props.children}\n </Tag>\n );\n});\n\nexport { Button };\nexport type { ButtonProps };\n"],"names":["Button","React","props","ref","disabled","shortcut","target","_props$type","type","otherProps","_objectWithoutPropertiesLoose","_excluded","internalRef","useMergedRef","useGlobalKeyDown","event","preventDefault","dialog","document","querySelector","contains","current","_internalRef$current","click","Tag","href","undefined","count","children","map","child"],"mappings":";;;;;;IAeMA,MAAM,gBAAGC,UAAgB,CAAC,SAASD,MAAMA,CAACE,KAAkB,EAAEC,GAAqD;EACrH,IAAQC,QAAQ,GAAuDF,KAAK,CAApEE,QAAQ;IAAEC,QAAQ,GAA6CH,KAAK,CAA1DG,QAAQ;IAAEC,MAAM,GAAqCJ,KAAK,CAAhDI,MAAM;IAAAC,WAAA,GAAqCL,KAAK,CAAxCM,IAAI;IAAJA,IAAI,GAAAD,WAAA,cAAG,QAAQ,GAAAA,WAAA;IAAKE,UAAU,GAAAC,6BAAA,CAAKR,KAAK,EAAAS,SAAA;EAC5E,IAAMC,WAAW,GAAGC,YAAY,CAAwCV,GAAG,CAAC;EAE5EW,gBAAgB,CAACT,QAAQ,EAAE,UAAAU,KAAK;;IAC5BA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEC,cAAc,EAAE;IACvB,IAAMC,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,iBAAiB,CAAC;;IAGxD,IAAIF,MAAM,IAAI,EAACA,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEG,QAAQ,CAACR,WAAW,CAACS,OAAO,CAAC,GAAE;MAClD;;IAGJ,CAAAC,oBAAA,GAAAV,WAAW,CAACS,OAAO,cAAAC,oBAAA,uBAAnBA,oBAAA,CAAqBC,KAAK,EAAE;GAC/B,CAAC;EAEF,IAAMC,GAAG,GAAGtB,KAAK,CAACuB,IAAI,GAAG,GAAG,GAAG,QAAQ;EAEvC,oBACIxB,cAACuB,GAAG,oBACIf,UAAU;IACdgB,IAAI,EAAErB,QAAQ,GAAGsB,SAAS,GAAGxB,KAAK,CAACuB,IAAI;qBACxBrB,QAAQ,GAAG,MAAM,GAAGsB,SAAS;IAC5CtB,QAAQ,EAAEA,QAAQ;IAClBE,MAAM,EAAEkB,GAAG,KAAK,GAAG,GAAGlB,MAAM,GAAGoB,SAAS;IACxClB,IAAI,EAAEgB,GAAG,KAAK,GAAG,GAAGhB,IAAI,GAAGkB,SAAS;IACpCvB,GAAG,EAAES;MACJX,QAAc,CAAC0B,KAAK,CAACzB,KAAK,CAAC0B,QAAQ,CAAC,GAAG,CAAC,GACnC3B,QAAc,CAAC4B,GAAG,CAAC3B,KAAK,CAAC0B,QAAQ,EAAE,UAAAE,KAAK;IAAA,OAAK,OAAOA,KAAK,KAAK,QAAQ,gBAAG7B,4BAAO6B,KAAK,CAAQ,GAAGA,KAAK;GAAC,CAAC,GACvG5B,KAAK,CAAC0B,QAAQ,CAClB;AAEd,CAAC;;;;"}
1
+ {"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeyDownHandlerOptions } from '../utils/keyboard';\nimport { useMergedRef } from '../hooks/useMergedRef';\nimport { useGlobalKeyDown } from '../hooks/useGlobalKeyDown';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n shortcut?: string | KeyDownHandlerOptions;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, shortcut, target, type = 'button', ...otherProps } = props;\n const internalRef = useMergedRef<HTMLButtonElement | HTMLAnchorElement>(ref);\n\n useGlobalKeyDown(\n shortcut,\n event => {\n event?.preventDefault();\n internalRef.current?.click();\n },\n internalRef.current\n );\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n href={disabled ? undefined : props.href}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={internalRef as any}>\n {React.Children.count(props.children) > 1\n ? React.Children.map(props.children, child => (typeof child === 'string' ? <span>{child}</span> : child))\n : props.children}\n </Tag>\n );\n});\n\nexport { Button };\nexport type { ButtonProps };\n"],"names":["Button","React","props","ref","disabled","shortcut","target","_props$type","type","otherProps","_objectWithoutPropertiesLoose","_excluded","internalRef","useMergedRef","useGlobalKeyDown","event","preventDefault","_internalRef$current","current","click","Tag","href","undefined","count","children","map","child"],"mappings":";;;;;;IAeMA,MAAM,gBAAGC,UAAgB,CAAC,SAASD,MAAMA,CAACE,KAAkB,EAAEC,GAAqD;EACrH,IAAQC,QAAQ,GAAuDF,KAAK,CAApEE,QAAQ;IAAEC,QAAQ,GAA6CH,KAAK,CAA1DG,QAAQ;IAAEC,MAAM,GAAqCJ,KAAK,CAAhDI,MAAM;IAAAC,WAAA,GAAqCL,KAAK,CAAxCM,IAAI;IAAJA,IAAI,GAAAD,WAAA,cAAG,QAAQ,GAAAA,WAAA;IAAKE,UAAU,GAAAC,6BAAA,CAAKR,KAAK,EAAAS,SAAA;EAC5E,IAAMC,WAAW,GAAGC,YAAY,CAAwCV,GAAG,CAAC;EAE5EW,gBAAgB,CACZT,QAAQ,EACR,UAAAU,KAAK;;IACDA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEC,cAAc,EAAE;IACvB,CAAAC,oBAAA,GAAAL,WAAW,CAACM,OAAO,cAAAD,oBAAA,uBAAnBA,oBAAA,CAAqBE,KAAK,EAAE;GAC/B,EACDP,WAAW,CAACM,OAAO,CACtB;EAED,IAAME,GAAG,GAAGlB,KAAK,CAACmB,IAAI,GAAG,GAAG,GAAG,QAAQ;EAEvC,oBACIpB,cAACmB,GAAG,oBACIX,UAAU;IACdY,IAAI,EAAEjB,QAAQ,GAAGkB,SAAS,GAAGpB,KAAK,CAACmB,IAAI;qBACxBjB,QAAQ,GAAG,MAAM,GAAGkB,SAAS;IAC5ClB,QAAQ,EAAEA,QAAQ;IAClBE,MAAM,EAAEc,GAAG,KAAK,GAAG,GAAGd,MAAM,GAAGgB,SAAS;IACxCd,IAAI,EAAEY,GAAG,KAAK,GAAG,GAAGZ,IAAI,GAAGc,SAAS;IACpCnB,GAAG,EAAES;MACJX,QAAc,CAACsB,KAAK,CAACrB,KAAK,CAACsB,QAAQ,CAAC,GAAG,CAAC,GACnCvB,QAAc,CAACwB,GAAG,CAACvB,KAAK,CAACsB,QAAQ,EAAE,UAAAE,KAAK;IAAA,OAAK,OAAOA,KAAK,KAAK,QAAQ,gBAAGzB,4BAAOyB,KAAK,CAAQ,GAAGA,KAAK;GAAC,CAAC,GACvGxB,KAAK,CAACsB,QAAQ,CAClB;AAEd,CAAC;;;;"}