1 line
69 KiB
JSON
1 line
69 KiB
JSON
{"ast":null,"code":"import _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"id\"],\n _excluded2 = [\"id\"];\nimport * as React from 'react';\nimport { unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport { useGridApiEventHandler, useGridApiOptionHandler, GridSignature } from '../../utils/useGridApiEventHandler';\nimport { GridEditModes, GridRowModes } from '../../../models/gridEditRowModel';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { gridEditRowsStateSelector } from './gridEditRowsSelector';\nimport { isPrintableKey } from '../../../utils/keyboardUtils';\nimport { gridColumnFieldsSelector } from '../columns/gridColumnsSelector';\nimport { buildWarning } from '../../../utils/warning';\nimport { gridRowsIdToIdLookupSelector } from '../rows/gridRowsSelector';\nimport { deepClone } from '../../../utils/utils';\nimport { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';\nconst missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');\nexport const useGridRowEditing = (apiRef, props) => {\n const [rowModesModel, setRowModesModel] = React.useState({});\n const rowModesModelRef = React.useRef(rowModesModel);\n const prevRowModesModel = React.useRef({});\n const focusTimeout = React.useRef(null);\n const nextFocusedCell = React.useRef(null);\n const {\n processRowUpdate,\n onProcessRowUpdateError,\n rowModesModel: rowModesModelProp,\n onRowModesModelChange,\n signature\n } = props;\n const runIfEditModeIsRow = callback => (...args) => {\n if (props.editMode === GridEditModes.Row) {\n callback(...args);\n }\n };\n const throwIfNotEditable = React.useCallback((id, field) => {\n const params = apiRef.current.getCellParams(id, field);\n if (!apiRef.current.isCellEditable(params)) {\n throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);\n }\n }, [apiRef]);\n const throwIfNotInMode = React.useCallback((id, mode) => {\n if (apiRef.current.getRowMode(id) !== mode) {\n throw new Error(`MUI: The row with id=${id} is not in ${mode} mode.`);\n }\n }, [apiRef]);\n const handleCellDoubleClick = React.useCallback((params, event) => {\n if (!params.isEditable) {\n return;\n }\n if (apiRef.current.getRowMode(params.id) === GridRowModes.Edit) {\n return;\n }\n const rowParams = apiRef.current.getRowParams(params.id);\n const newParams = _extends({}, rowParams, {\n field: params.field,\n reason: GridRowEditStartReasons.cellDoubleClick\n });\n apiRef.current.publishEvent('rowEditStart', newParams, event);\n }, [apiRef]);\n const handleCellFocusIn = React.useCallback(params => {\n nextFocusedCell.current = params;\n }, []);\n const handleCellFocusOut = React.useCallback((params, event) => {\n if (!params.isEditable) {\n return;\n }\n if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n return;\n } // The mechanism to detect if we can stop editing a row is different from\n // the cell editing. Instead of triggering it when clicking outside a cell,\n // we must check if another cell in the same row was not clicked. To achieve\n // that, first we keep track of all cells that gained focus. When a cell loses\n // focus we check if the next cell that received focus is from a different row.\n\n nextFocusedCell.current = null;\n focusTimeout.current = setTimeout(() => {\n var _nextFocusedCell$curr;\n focusTimeout.current = null;\n if (((_nextFocusedCell$curr = nextFocusedCell.current) == null ? void 0 : _nextFocusedCell$curr.id) !== params.id) {\n // The row might have been deleted during the click\n if (!apiRef.current.getRow(params.id)) {\n return;\n } // The row may already changed its mode\n\n if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n return;\n }\n const rowParams = apiRef.current.getRowParams(params.id);\n const newParams = _extends({}, rowParams, {\n field: params.field,\n reason: GridRowEditStopReasons.rowFocusOut\n });\n apiRef.current.publishEvent('rowEditStop', newParams, event);\n }\n });\n }, [apiRef]);\n React.useEffect(() => {\n return () => {\n clearTimeout(focusTimeout.current);\n };\n }, []);\n const handleCellKeyDown = React.useCallback((params, event) => {\n if (params.cellMode === GridRowModes.Edit) {\n // Wait until IME is settled for Asian languages like Japanese and Chinese\n // TODO: `event.which` is depricated but this is a temporary workaround\n if (event.which === 229) {\n return;\n }\n let reason;\n if (event.key === 'Escape') {\n reason = GridRowEditStopReasons.escapeKeyDown;\n } else if (event.key === 'Enter') {\n reason = GridRowEditStopReasons.enterKeyDown;\n } else if (event.key === 'Tab') {\n const columnFields = gridColumnFieldsSelector(apiRef).filter(field => apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field)));\n if (event.shiftKey) {\n if (params.field === columnFields[0]) {\n // Exit if user pressed Shift+Tab on the first field\n reason = GridRowEditStopReasons.shiftTabKeyDown;\n }\n } else if (params.field === columnFields[columnFields.length - 1]) {\n // Exit if user pressed Tab on the last field\n reason = GridRowEditStopReasons.tabKeyDown;\n }\n if (reason) {\n event.preventDefault(); // Prevent going to the next element in the tab sequence\n }\n }\n if (reason) {\n const rowParams = apiRef.current.getRowParams(params.id);\n const newParams = _extends({}, rowParams, {\n reason,\n field: params.field\n });\n apiRef.current.publishEvent('rowEditStop', newParams, event);\n }\n } else if (params.isEditable) {\n let reason;\n if (event.key === ' ' && event.shiftKey) {\n return; // Shift + Space is used to select the row\n }\n if (isPrintableKey(event)) {\n reason = GridRowEditStartReasons.printableKeyDown;\n } else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {\n reason = GridRowEditStartReasons.printableKeyDown;\n } else if (event.key === 'Enter') {\n reason = GridRowEditStartReasons.enterKeyDown;\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // Delete on Windows, Backspace on macOS\n reason = GridRowEditStartReasons.deleteKeyDown;\n }\n if (reason) {\n const rowParams = apiRef.current.getRowParams(params.id);\n const newParams = _extends({}, rowParams, {\n field: params.field,\n key: event.key,\n reason\n });\n apiRef.current.publishEvent('rowEditStart', newParams, event);\n }\n }\n }, [apiRef]);\n const handleRowEditStart = React.useCallback(params => {\n const {\n id,\n field,\n reason,\n key\n } = params;\n const startRowEditModeParams = {\n id,\n fieldToFocus: field\n };\n if (reason === GridRowEditStartReasons.printableKeyDown) {\n if (React.version.startsWith('18')) {\n startRowEditModeParams.initialValue = key; // In React 17, cleaning the input is enough\n } else {\n startRowEditModeParams.deleteValue = !!field;\n }\n } else if (reason === GridRowEditStartReasons.deleteKeyDown) {\n startRowEditModeParams.deleteValue = !!field;\n }\n apiRef.current.startRowEditMode(startRowEditModeParams);\n }, [apiRef]);\n const handleRowEditStop = React.useCallback(params => {\n const {\n id,\n reason,\n field\n } = params;\n apiRef.current.unstable_runPendingEditCellValueMutation(id);\n let cellToFocusAfter;\n if (reason === GridRowEditStopReasons.enterKeyDown) {\n cellToFocusAfter = 'below';\n } else if (reason === GridRowEditStopReasons.tabKeyDown) {\n cellToFocusAfter = 'right';\n } else if (reason === GridRowEditStopReasons.shiftTabKeyDown) {\n cellToFocusAfter = 'left';\n }\n let ignoreModifications = reason === 'escapeKeyDown';\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n if (!ignoreModifications && !props.disableIgnoreModificationsIfProcessingProps) {\n // The user wants to stop editing the cell but we can't wait for the props to be processed.\n // In this case, discard the modifications if any field is processing its props.\n ignoreModifications = Object.values(editingState[id]).some(fieldProps => {\n return fieldProps.isProcessingProps;\n });\n }\n apiRef.current.stopRowEditMode({\n id,\n ignoreModifications,\n field,\n cellToFocusAfter\n });\n }, [apiRef, props.disableIgnoreModificationsIfProcessingProps]);\n useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsRow(handleCellDoubleClick));\n useGridApiEventHandler(apiRef, 'cellFocusIn', runIfEditModeIsRow(handleCellFocusIn));\n useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsRow(handleCellFocusOut));\n useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsRow(handleCellKeyDown));\n useGridApiEventHandler(apiRef, 'rowEditStart', runIfEditModeIsRow(handleRowEditStart));\n useGridApiEventHandler(apiRef, 'rowEditStop', runIfEditModeIsRow(handleRowEditStop));\n useGridApiOptionHandler(apiRef, 'rowEditStart', props.onRowEditStart);\n useGridApiOptionHandler(apiRef, 'rowEditStop', props.onRowEditStop);\n const getRowMode = React.useCallback(id => {\n if (props.editMode === GridEditModes.Cell) {\n return GridRowModes.View;\n }\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const isEditing = editingState[id] && Object.keys(editingState[id]).length > 0;\n return isEditing ? GridRowModes.Edit : GridRowModes.View;\n }, [apiRef, props.editMode]);\n const updateRowModesModel = useEventCallback(newModel => {\n const isNewModelDifferentFromProp = newModel !== props.rowModesModel;\n if (onRowModesModelChange && isNewModelDifferentFromProp) {\n const details = signature === GridSignature.DataGridPro ? {\n api: apiRef.current\n } : {};\n onRowModesModelChange(newModel, details);\n }\n if (props.rowModesModel && isNewModelDifferentFromProp) {\n return; // The prop always win\n }\n setRowModesModel(newModel);\n rowModesModelRef.current = newModel;\n apiRef.current.publishEvent('rowModesModelChange', newModel);\n });\n const updateRowInRowModesModel = React.useCallback((id, newProps) => {\n const newModel = _extends({}, rowModesModelRef.current);\n if (newProps !== null) {\n newModel[id] = _extends({}, newProps);\n } else {\n delete newModel[id];\n }\n updateRowModesModel(newModel);\n }, [updateRowModesModel]);\n const updateOrDeleteRowState = React.useCallback((id, newProps) => {\n apiRef.current.setState(state => {\n const newEditingState = _extends({}, state.editRows);\n if (newProps !== null) {\n newEditingState[id] = newProps;\n } else {\n delete newEditingState[id];\n }\n return _extends({}, state, {\n editRows: newEditingState\n });\n });\n apiRef.current.forceUpdate();\n }, [apiRef]);\n const updateOrDeleteFieldState = React.useCallback((id, field, newProps) => {\n apiRef.current.setState(state => {\n const newEditingState = _extends({}, state.editRows);\n if (newProps !== null) {\n newEditingState[id] = _extends({}, newEditingState[id], {\n [field]: _extends({}, newProps)\n });\n } else {\n delete newEditingState[id][field];\n if (Object.keys(newEditingState[id]).length === 0) {\n delete newEditingState[id];\n }\n }\n return _extends({}, state, {\n editRows: newEditingState\n });\n });\n apiRef.current.forceUpdate();\n }, [apiRef]);\n const startRowEditMode = React.useCallback(params => {\n const {\n id\n } = params,\n other = _objectWithoutPropertiesLoose(params, _excluded);\n throwIfNotInMode(id, GridRowModes.View);\n updateRowInRowModesModel(id, _extends({\n mode: GridRowModes.Edit\n }, other));\n }, [throwIfNotInMode, updateRowInRowModesModel]);\n const updateStateToStartRowEditMode = useEventCallback(params => {\n const {\n id,\n fieldToFocus,\n deleteValue,\n initialValue\n } = params;\n const columnFields = gridColumnFieldsSelector(apiRef);\n const newProps = columnFields.reduce((acc, field) => {\n const cellParams = apiRef.current.getCellParams(id, field);\n if (!cellParams.isEditable) {\n return acc;\n }\n let newValue = apiRef.current.getCellValue(id, field);\n if (fieldToFocus === field && (deleteValue || initialValue)) {\n newValue = deleteValue ? '' : initialValue;\n }\n acc[field] = {\n value: newValue,\n error: false,\n isProcessingProps: false\n };\n return acc;\n }, {});\n updateOrDeleteRowState(id, newProps);\n if (fieldToFocus) {\n apiRef.current.setCellFocus(id, fieldToFocus);\n }\n });\n const stopRowEditMode = React.useCallback(params => {\n const {\n id\n } = params,\n other = _objectWithoutPropertiesLoose(params, _excluded2);\n throwIfNotInMode(id, GridRowModes.Edit);\n updateRowInRowModesModel(id, _extends({\n mode: GridRowModes.View\n }, other));\n }, [throwIfNotInMode, updateRowInRowModesModel]);\n const updateStateToStopRowEditMode = useEventCallback(params => {\n const {\n id,\n ignoreModifications,\n field: focusedField,\n cellToFocusAfter = 'none'\n } = params;\n apiRef.current.unstable_runPendingEditCellValueMutation(id);\n const finishRowEditMode = () => {\n if (cellToFocusAfter !== 'none' && focusedField) {\n apiRef.current.unstable_moveFocusToRelativeCell(id, focusedField, cellToFocusAfter);\n }\n updateOrDeleteRowState(id, null);\n updateRowInRowModesModel(id, null);\n };\n if (ignoreModifications) {\n finishRowEditMode();\n return;\n }\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const row = apiRef.current.getRow(id);\n const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);\n if (isSomeFieldProcessingProps) {\n prevRowModesModel.current[id].mode = GridRowModes.Edit;\n return;\n }\n const hasSomeFieldWithError = Object.values(editingState[id]).some(fieldProps => fieldProps.error);\n if (hasSomeFieldWithError) {\n prevRowModesModel.current[id].mode = GridRowModes.Edit; // Revert the mode in the rowModesModel prop back to \"edit\"\n\n updateRowInRowModesModel(id, {\n mode: GridRowModes.Edit\n });\n return;\n }\n const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);\n if (processRowUpdate) {\n const handleError = errorThrown => {\n prevRowModesModel.current[id].mode = GridRowModes.Edit; // Revert the mode in the rowModesModel prop back to \"edit\"\n\n updateRowInRowModesModel(id, {\n mode: GridRowModes.Edit\n });\n if (onProcessRowUpdateError) {\n onProcessRowUpdateError(errorThrown);\n } else {\n missingOnProcessRowUpdateErrorWarning();\n }\n };\n try {\n Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {\n apiRef.current.updateRows([finalRowUpdate]);\n finishRowEditMode();\n }).catch(handleError);\n } catch (errorThrown) {\n handleError(errorThrown);\n }\n } else {\n apiRef.current.updateRows([rowUpdate]);\n finishRowEditMode();\n }\n });\n const setRowEditingEditCellValue = React.useCallback(params => {\n const {\n id,\n field,\n value,\n debounceMs,\n unstable_skipValueParser: skipValueParser\n } = params;\n throwIfNotEditable(id, field);\n const column = apiRef.current.getColumn(field);\n const row = apiRef.current.getRow(id);\n let parsedValue = value;\n if (column.valueParser && !skipValueParser) {\n parsedValue = column.valueParser(value, apiRef.current.getCellParams(id, field));\n }\n let editingState = gridEditRowsStateSelector(apiRef.current.state);\n let newProps = _extends({}, editingState[id][field], {\n value: parsedValue,\n changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'\n });\n if (!column.preProcessEditCellProps) {\n updateOrDeleteFieldState(id, field, newProps);\n }\n return new Promise(resolve => {\n const promises = [];\n if (column.preProcessEditCellProps) {\n const hasChanged = newProps.value !== editingState[id][field].value;\n newProps = _extends({}, newProps, {\n isProcessingProps: true\n });\n updateOrDeleteFieldState(id, field, newProps);\n const _editingState$id = editingState[id],\n otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id, [field].map(_toPropertyKey));\n const promise = Promise.resolve(column.preProcessEditCellProps({\n id,\n row,\n props: newProps,\n hasChanged,\n otherFieldsProps\n })).then(processedProps => {\n // Check again if the row is in edit mode because the user may have\n // discarded the changes while the props were being processed.\n if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n resolve(false);\n return;\n }\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n processedProps = _extends({}, processedProps, {\n isProcessingProps: false\n }); // We don't reuse the value from the props pre-processing because when the\n // promise resolves it may be already outdated. The only exception to this rule\n // is when there's no pre-processing.\n\n processedProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;\n updateOrDeleteFieldState(id, field, processedProps);\n });\n promises.push(promise);\n }\n Object.entries(editingState[id]).forEach(([thisField, fieldProps]) => {\n if (thisField === field) {\n return;\n }\n const fieldColumn = apiRef.current.getColumn(thisField);\n if (!fieldColumn.preProcessEditCellProps) {\n return;\n }\n fieldProps = _extends({}, fieldProps, {\n isProcessingProps: true\n });\n updateOrDeleteFieldState(id, thisField, fieldProps);\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n const _editingState$id2 = editingState[id],\n otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id2, [thisField].map(_toPropertyKey));\n const promise = Promise.resolve(fieldColumn.preProcessEditCellProps({\n id,\n row,\n props: fieldProps,\n hasChanged: false,\n otherFieldsProps\n })).then(processedProps => {\n // Check again if the row is in edit mode because the user may have\n // discarded the changes while the props were being processed.\n if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n resolve(false);\n return;\n }\n processedProps = _extends({}, processedProps, {\n isProcessingProps: false\n });\n updateOrDeleteFieldState(id, thisField, processedProps);\n });\n promises.push(promise);\n });\n Promise.all(promises).then(() => {\n if (apiRef.current.getRowMode(id) === GridRowModes.Edit) {\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n resolve(!editingState[id][field].error);\n } else {\n resolve(false);\n }\n });\n });\n }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);\n const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const row = apiRef.current.getRow(id);\n let rowUpdate = _extends({}, row);\n Object.entries(editingState[id]).forEach(([field, fieldProps]) => {\n const column = apiRef.current.getColumn(field);\n if (column.valueSetter) {\n rowUpdate = column.valueSetter({\n value: fieldProps.value,\n row: rowUpdate\n });\n } else {\n rowUpdate[field] = fieldProps.value;\n }\n });\n return rowUpdate;\n }, [apiRef]);\n const editingApi = {\n getRowMode,\n startRowEditMode,\n stopRowEditMode,\n unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,\n unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing\n };\n useGridApiMethod(apiRef, editingApi, 'EditingApi');\n React.useEffect(() => {\n if (rowModesModelProp) {\n updateRowModesModel(rowModesModelProp);\n }\n }, [rowModesModelProp, updateRowModesModel]);\n React.useEffect(() => {\n const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef); // Update the ref here because updateStateToStopRowEditMode may change it later\n\n const copyOfPrevRowModesModel = prevRowModesModel.current;\n prevRowModesModel.current = deepClone(rowModesModel); // Do a deep-clone because the attributes might be changed later\n\n Object.entries(rowModesModel).forEach(([id, params]) => {\n var _copyOfPrevRowModesMo, _idToIdLookup$id;\n const prevMode = ((_copyOfPrevRowModesMo = copyOfPrevRowModesModel[id]) == null ? void 0 : _copyOfPrevRowModesMo.mode) || GridRowModes.View;\n const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;\n if (params.mode === GridRowModes.Edit && prevMode === GridRowModes.View) {\n updateStateToStartRowEditMode(_extends({\n id: originalId\n }, params));\n } else if (params.mode === GridRowModes.View && prevMode === GridRowModes.Edit) {\n updateStateToStopRowEditMode(_extends({\n id: originalId\n }, params));\n }\n });\n }, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);\n};","map":{"version":3,"names":["_toPropertyKey","_objectWithoutPropertiesLoose","_extends","_excluded","_excluded2","React","unstable_useEventCallback","useEventCallback","useGridApiEventHandler","useGridApiOptionHandler","GridSignature","GridEditModes","GridRowModes","useGridApiMethod","gridEditRowsStateSelector","isPrintableKey","gridColumnFieldsSelector","buildWarning","gridRowsIdToIdLookupSelector","deepClone","GridRowEditStopReasons","GridRowEditStartReasons","missingOnProcessRowUpdateErrorWarning","useGridRowEditing","apiRef","props","rowModesModel","setRowModesModel","useState","rowModesModelRef","useRef","prevRowModesModel","focusTimeout","nextFocusedCell","processRowUpdate","onProcessRowUpdateError","rowModesModelProp","onRowModesModelChange","signature","runIfEditModeIsRow","callback","args","editMode","Row","throwIfNotEditable","useCallback","id","field","params","current","getCellParams","isCellEditable","Error","throwIfNotInMode","mode","getRowMode","handleCellDoubleClick","event","isEditable","Edit","rowParams","getRowParams","newParams","reason","cellDoubleClick","publishEvent","handleCellFocusIn","handleCellFocusOut","View","setTimeout","_nextFocusedCell$curr","getRow","rowFocusOut","useEffect","clearTimeout","handleCellKeyDown","cellMode","which","key","escapeKeyDown","enterKeyDown","columnFields","filter","shiftKey","shiftTabKeyDown","length","tabKeyDown","preventDefault","printableKeyDown","ctrlKey","metaKey","deleteKeyDown","handleRowEditStart","startRowEditModeParams","fieldToFocus","version","startsWith","initialValue","deleteValue","startRowEditMode","handleRowEditStop","unstable_runPendingEditCellValueMutation","cellToFocusAfter","ignoreModifications","editingState","state","disableIgnoreModificationsIfProcessingProps","Object","values","some","fieldProps","isProcessingProps","stopRowEditMode","onRowEditStart","onRowEditStop","Cell","isEditing","keys","updateRowModesModel","newModel","isNewModelDifferentFromProp","details","DataGridPro","api","updateRowInRowModesModel","newProps","updateOrDeleteRowState","setState","newEditingState","editRows","forceUpdate","updateOrDeleteFieldState","other","updateStateToStartRowEditMode","reduce","acc","cellParams","newValue","getCellValue","value","error","setCellFocus","updateStateToStopRowEditMode","focusedField","finishRowEditMode","unstable_moveFocusToRelativeCell","row","isSomeFieldProcessingProps","hasSomeFieldWithError","rowUpdate","unstable_getRowWithUpdatedValuesFromRowEditing","handleError","errorThrown","Promise","resolve","then","finalRowUpdate","updateRows","catch","setRowEditingEditCellValue","debounceMs","unstable_skipValueParser","skipValueParser","column","getColumn","parsedValue","valueParser","changeReason","preProcessEditCellProps","promises","hasChanged","_editingState$id","otherFieldsProps","map","promise","processedProps","push","entries","forEach","thisField","fieldColumn","_editingState$id2","all","getRowWithUpdatedValuesFromRowEditing","valueSetter","editingApi","unstable_setRowEditingEditCellValue","idToIdLookup","copyOfPrevRowModesModel","_copyOfPrevRowModesMo","_idToIdLookup$id","prevMode","originalId"],"sources":["/home/gnx/Desktop/ETB/ETB-FrontEnd/node_modules/@mui/x-data-grid/hooks/features/editRows/useGridRowEditing.new.js"],"sourcesContent":["import _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"id\"],\n _excluded2 = [\"id\"];\nimport * as React from 'react';\nimport { unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport { useGridApiEventHandler, useGridApiOptionHandler, GridSignature } from '../../utils/useGridApiEventHandler';\nimport { GridEditModes, GridRowModes } from '../../../models/gridEditRowModel';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { gridEditRowsStateSelector } from './gridEditRowsSelector';\nimport { isPrintableKey } from '../../../utils/keyboardUtils';\nimport { gridColumnFieldsSelector } from '../columns/gridColumnsSelector';\nimport { buildWarning } from '../../../utils/warning';\nimport { gridRowsIdToIdLookupSelector } from '../rows/gridRowsSelector';\nimport { deepClone } from '../../../utils/utils';\nimport { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';\nconst missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');\nexport const useGridRowEditing = (apiRef, props) => {\n const [rowModesModel, setRowModesModel] = React.useState({});\n const rowModesModelRef = React.useRef(rowModesModel);\n const prevRowModesModel = React.useRef({});\n const focusTimeout = React.useRef(null);\n const nextFocusedCell = React.useRef(null);\n const {\n processRowUpdate,\n onProcessRowUpdateError,\n rowModesModel: rowModesModelProp,\n onRowModesModelChange,\n signature\n } = props;\n\n const runIfEditModeIsRow = callback => (...args) => {\n if (props.editMode === GridEditModes.Row) {\n callback(...args);\n }\n };\n\n const throwIfNotEditable = React.useCallback((id, field) => {\n const params = apiRef.current.getCellParams(id, field);\n\n if (!apiRef.current.isCellEditable(params)) {\n throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);\n }\n }, [apiRef]);\n const throwIfNotInMode = React.useCallback((id, mode) => {\n if (apiRef.current.getRowMode(id) !== mode) {\n throw new Error(`MUI: The row with id=${id} is not in ${mode} mode.`);\n }\n }, [apiRef]);\n const handleCellDoubleClick = React.useCallback((params, event) => {\n if (!params.isEditable) {\n return;\n }\n\n if (apiRef.current.getRowMode(params.id) === GridRowModes.Edit) {\n return;\n }\n\n const rowParams = apiRef.current.getRowParams(params.id);\n\n const newParams = _extends({}, rowParams, {\n field: params.field,\n reason: GridRowEditStartReasons.cellDoubleClick\n });\n\n apiRef.current.publishEvent('rowEditStart', newParams, event);\n }, [apiRef]);\n const handleCellFocusIn = React.useCallback(params => {\n nextFocusedCell.current = params;\n }, []);\n const handleCellFocusOut = React.useCallback((params, event) => {\n if (!params.isEditable) {\n return;\n }\n\n if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n return;\n } // The mechanism to detect if we can stop editing a row is different from\n // the cell editing. Instead of triggering it when clicking outside a cell,\n // we must check if another cell in the same row was not clicked. To achieve\n // that, first we keep track of all cells that gained focus. When a cell loses\n // focus we check if the next cell that received focus is from a different row.\n\n\n nextFocusedCell.current = null;\n focusTimeout.current = setTimeout(() => {\n var _nextFocusedCell$curr;\n\n focusTimeout.current = null;\n\n if (((_nextFocusedCell$curr = nextFocusedCell.current) == null ? void 0 : _nextFocusedCell$curr.id) !== params.id) {\n // The row might have been deleted during the click\n if (!apiRef.current.getRow(params.id)) {\n return;\n } // The row may already changed its mode\n\n\n if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n return;\n }\n\n const rowParams = apiRef.current.getRowParams(params.id);\n\n const newParams = _extends({}, rowParams, {\n field: params.field,\n reason: GridRowEditStopReasons.rowFocusOut\n });\n\n apiRef.current.publishEvent('rowEditStop', newParams, event);\n }\n });\n }, [apiRef]);\n React.useEffect(() => {\n return () => {\n clearTimeout(focusTimeout.current);\n };\n }, []);\n const handleCellKeyDown = React.useCallback((params, event) => {\n if (params.cellMode === GridRowModes.Edit) {\n // Wait until IME is settled for Asian languages like Japanese and Chinese\n // TODO: `event.which` is depricated but this is a temporary workaround\n if (event.which === 229) {\n return;\n }\n\n let reason;\n\n if (event.key === 'Escape') {\n reason = GridRowEditStopReasons.escapeKeyDown;\n } else if (event.key === 'Enter') {\n reason = GridRowEditStopReasons.enterKeyDown;\n } else if (event.key === 'Tab') {\n const columnFields = gridColumnFieldsSelector(apiRef).filter(field => apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field)));\n\n if (event.shiftKey) {\n if (params.field === columnFields[0]) {\n // Exit if user pressed Shift+Tab on the first field\n reason = GridRowEditStopReasons.shiftTabKeyDown;\n }\n } else if (params.field === columnFields[columnFields.length - 1]) {\n // Exit if user pressed Tab on the last field\n reason = GridRowEditStopReasons.tabKeyDown;\n }\n\n if (reason) {\n event.preventDefault(); // Prevent going to the next element in the tab sequence\n }\n }\n\n if (reason) {\n const rowParams = apiRef.current.getRowParams(params.id);\n\n const newParams = _extends({}, rowParams, {\n reason,\n field: params.field\n });\n\n apiRef.current.publishEvent('rowEditStop', newParams, event);\n }\n } else if (params.isEditable) {\n let reason;\n\n if (event.key === ' ' && event.shiftKey) {\n return; // Shift + Space is used to select the row\n }\n\n if (isPrintableKey(event)) {\n reason = GridRowEditStartReasons.printableKeyDown;\n } else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {\n reason = GridRowEditStartReasons.printableKeyDown;\n } else if (event.key === 'Enter') {\n reason = GridRowEditStartReasons.enterKeyDown;\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // Delete on Windows, Backspace on macOS\n reason = GridRowEditStartReasons.deleteKeyDown;\n }\n\n if (reason) {\n const rowParams = apiRef.current.getRowParams(params.id);\n\n const newParams = _extends({}, rowParams, {\n field: params.field,\n key: event.key,\n reason\n });\n\n apiRef.current.publishEvent('rowEditStart', newParams, event);\n }\n }\n }, [apiRef]);\n const handleRowEditStart = React.useCallback(params => {\n const {\n id,\n field,\n reason,\n key\n } = params;\n const startRowEditModeParams = {\n id,\n fieldToFocus: field\n };\n\n if (reason === GridRowEditStartReasons.printableKeyDown) {\n if (React.version.startsWith('18')) {\n startRowEditModeParams.initialValue = key; // In React 17, cleaning the input is enough\n } else {\n startRowEditModeParams.deleteValue = !!field;\n }\n } else if (reason === GridRowEditStartReasons.deleteKeyDown) {\n startRowEditModeParams.deleteValue = !!field;\n }\n\n apiRef.current.startRowEditMode(startRowEditModeParams);\n }, [apiRef]);\n const handleRowEditStop = React.useCallback(params => {\n const {\n id,\n reason,\n field\n } = params;\n apiRef.current.unstable_runPendingEditCellValueMutation(id);\n let cellToFocusAfter;\n\n if (reason === GridRowEditStopReasons.enterKeyDown) {\n cellToFocusAfter = 'below';\n } else if (reason === GridRowEditStopReasons.tabKeyDown) {\n cellToFocusAfter = 'right';\n } else if (reason === GridRowEditStopReasons.shiftTabKeyDown) {\n cellToFocusAfter = 'left';\n }\n\n let ignoreModifications = reason === 'escapeKeyDown';\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n\n if (!ignoreModifications && !props.disableIgnoreModificationsIfProcessingProps) {\n // The user wants to stop editing the cell but we can't wait for the props to be processed.\n // In this case, discard the modifications if any field is processing its props.\n ignoreModifications = Object.values(editingState[id]).some(fieldProps => {\n return fieldProps.isProcessingProps;\n });\n }\n\n apiRef.current.stopRowEditMode({\n id,\n ignoreModifications,\n field,\n cellToFocusAfter\n });\n }, [apiRef, props.disableIgnoreModificationsIfProcessingProps]);\n useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsRow(handleCellDoubleClick));\n useGridApiEventHandler(apiRef, 'cellFocusIn', runIfEditModeIsRow(handleCellFocusIn));\n useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsRow(handleCellFocusOut));\n useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsRow(handleCellKeyDown));\n useGridApiEventHandler(apiRef, 'rowEditStart', runIfEditModeIsRow(handleRowEditStart));\n useGridApiEventHandler(apiRef, 'rowEditStop', runIfEditModeIsRow(handleRowEditStop));\n useGridApiOptionHandler(apiRef, 'rowEditStart', props.onRowEditStart);\n useGridApiOptionHandler(apiRef, 'rowEditStop', props.onRowEditStop);\n const getRowMode = React.useCallback(id => {\n if (props.editMode === GridEditModes.Cell) {\n return GridRowModes.View;\n }\n\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const isEditing = editingState[id] && Object.keys(editingState[id]).length > 0;\n return isEditing ? GridRowModes.Edit : GridRowModes.View;\n }, [apiRef, props.editMode]);\n const updateRowModesModel = useEventCallback(newModel => {\n const isNewModelDifferentFromProp = newModel !== props.rowModesModel;\n\n if (onRowModesModelChange && isNewModelDifferentFromProp) {\n const details = signature === GridSignature.DataGridPro ? {\n api: apiRef.current\n } : {};\n onRowModesModelChange(newModel, details);\n }\n\n if (props.rowModesModel && isNewModelDifferentFromProp) {\n return; // The prop always win\n }\n\n setRowModesModel(newModel);\n rowModesModelRef.current = newModel;\n apiRef.current.publishEvent('rowModesModelChange', newModel);\n });\n const updateRowInRowModesModel = React.useCallback((id, newProps) => {\n const newModel = _extends({}, rowModesModelRef.current);\n\n if (newProps !== null) {\n newModel[id] = _extends({}, newProps);\n } else {\n delete newModel[id];\n }\n\n updateRowModesModel(newModel);\n }, [updateRowModesModel]);\n const updateOrDeleteRowState = React.useCallback((id, newProps) => {\n apiRef.current.setState(state => {\n const newEditingState = _extends({}, state.editRows);\n\n if (newProps !== null) {\n newEditingState[id] = newProps;\n } else {\n delete newEditingState[id];\n }\n\n return _extends({}, state, {\n editRows: newEditingState\n });\n });\n apiRef.current.forceUpdate();\n }, [apiRef]);\n const updateOrDeleteFieldState = React.useCallback((id, field, newProps) => {\n apiRef.current.setState(state => {\n const newEditingState = _extends({}, state.editRows);\n\n if (newProps !== null) {\n newEditingState[id] = _extends({}, newEditingState[id], {\n [field]: _extends({}, newProps)\n });\n } else {\n delete newEditingState[id][field];\n\n if (Object.keys(newEditingState[id]).length === 0) {\n delete newEditingState[id];\n }\n }\n\n return _extends({}, state, {\n editRows: newEditingState\n });\n });\n apiRef.current.forceUpdate();\n }, [apiRef]);\n const startRowEditMode = React.useCallback(params => {\n const {\n id\n } = params,\n other = _objectWithoutPropertiesLoose(params, _excluded);\n\n throwIfNotInMode(id, GridRowModes.View);\n updateRowInRowModesModel(id, _extends({\n mode: GridRowModes.Edit\n }, other));\n }, [throwIfNotInMode, updateRowInRowModesModel]);\n const updateStateToStartRowEditMode = useEventCallback(params => {\n const {\n id,\n fieldToFocus,\n deleteValue,\n initialValue\n } = params;\n const columnFields = gridColumnFieldsSelector(apiRef);\n const newProps = columnFields.reduce((acc, field) => {\n const cellParams = apiRef.current.getCellParams(id, field);\n\n if (!cellParams.isEditable) {\n return acc;\n }\n\n let newValue = apiRef.current.getCellValue(id, field);\n\n if (fieldToFocus === field && (deleteValue || initialValue)) {\n newValue = deleteValue ? '' : initialValue;\n }\n\n acc[field] = {\n value: newValue,\n error: false,\n isProcessingProps: false\n };\n return acc;\n }, {});\n updateOrDeleteRowState(id, newProps);\n\n if (fieldToFocus) {\n apiRef.current.setCellFocus(id, fieldToFocus);\n }\n });\n const stopRowEditMode = React.useCallback(params => {\n const {\n id\n } = params,\n other = _objectWithoutPropertiesLoose(params, _excluded2);\n\n throwIfNotInMode(id, GridRowModes.Edit);\n updateRowInRowModesModel(id, _extends({\n mode: GridRowModes.View\n }, other));\n }, [throwIfNotInMode, updateRowInRowModesModel]);\n const updateStateToStopRowEditMode = useEventCallback(params => {\n const {\n id,\n ignoreModifications,\n field: focusedField,\n cellToFocusAfter = 'none'\n } = params;\n apiRef.current.unstable_runPendingEditCellValueMutation(id);\n\n const finishRowEditMode = () => {\n if (cellToFocusAfter !== 'none' && focusedField) {\n apiRef.current.unstable_moveFocusToRelativeCell(id, focusedField, cellToFocusAfter);\n }\n\n updateOrDeleteRowState(id, null);\n updateRowInRowModesModel(id, null);\n };\n\n if (ignoreModifications) {\n finishRowEditMode();\n return;\n }\n\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const row = apiRef.current.getRow(id);\n const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);\n\n if (isSomeFieldProcessingProps) {\n prevRowModesModel.current[id].mode = GridRowModes.Edit;\n return;\n }\n\n const hasSomeFieldWithError = Object.values(editingState[id]).some(fieldProps => fieldProps.error);\n\n if (hasSomeFieldWithError) {\n prevRowModesModel.current[id].mode = GridRowModes.Edit; // Revert the mode in the rowModesModel prop back to \"edit\"\n\n updateRowInRowModesModel(id, {\n mode: GridRowModes.Edit\n });\n return;\n }\n\n const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);\n\n if (processRowUpdate) {\n const handleError = errorThrown => {\n prevRowModesModel.current[id].mode = GridRowModes.Edit; // Revert the mode in the rowModesModel prop back to \"edit\"\n\n updateRowInRowModesModel(id, {\n mode: GridRowModes.Edit\n });\n\n if (onProcessRowUpdateError) {\n onProcessRowUpdateError(errorThrown);\n } else {\n missingOnProcessRowUpdateErrorWarning();\n }\n };\n\n try {\n Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {\n apiRef.current.updateRows([finalRowUpdate]);\n finishRowEditMode();\n }).catch(handleError);\n } catch (errorThrown) {\n handleError(errorThrown);\n }\n } else {\n apiRef.current.updateRows([rowUpdate]);\n finishRowEditMode();\n }\n });\n const setRowEditingEditCellValue = React.useCallback(params => {\n const {\n id,\n field,\n value,\n debounceMs,\n unstable_skipValueParser: skipValueParser\n } = params;\n throwIfNotEditable(id, field);\n const column = apiRef.current.getColumn(field);\n const row = apiRef.current.getRow(id);\n let parsedValue = value;\n\n if (column.valueParser && !skipValueParser) {\n parsedValue = column.valueParser(value, apiRef.current.getCellParams(id, field));\n }\n\n let editingState = gridEditRowsStateSelector(apiRef.current.state);\n\n let newProps = _extends({}, editingState[id][field], {\n value: parsedValue,\n changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'\n });\n\n if (!column.preProcessEditCellProps) {\n updateOrDeleteFieldState(id, field, newProps);\n }\n\n return new Promise(resolve => {\n const promises = [];\n\n if (column.preProcessEditCellProps) {\n const hasChanged = newProps.value !== editingState[id][field].value;\n newProps = _extends({}, newProps, {\n isProcessingProps: true\n });\n updateOrDeleteFieldState(id, field, newProps);\n\n const _editingState$id = editingState[id],\n otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id, [field].map(_toPropertyKey));\n\n const promise = Promise.resolve(column.preProcessEditCellProps({\n id,\n row,\n props: newProps,\n hasChanged,\n otherFieldsProps\n })).then(processedProps => {\n // Check again if the row is in edit mode because the user may have\n // discarded the changes while the props were being processed.\n if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n resolve(false);\n return;\n }\n\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n processedProps = _extends({}, processedProps, {\n isProcessingProps: false\n }); // We don't reuse the value from the props pre-processing because when the\n // promise resolves it may be already outdated. The only exception to this rule\n // is when there's no pre-processing.\n\n processedProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;\n updateOrDeleteFieldState(id, field, processedProps);\n });\n promises.push(promise);\n }\n\n Object.entries(editingState[id]).forEach(([thisField, fieldProps]) => {\n if (thisField === field) {\n return;\n }\n\n const fieldColumn = apiRef.current.getColumn(thisField);\n\n if (!fieldColumn.preProcessEditCellProps) {\n return;\n }\n\n fieldProps = _extends({}, fieldProps, {\n isProcessingProps: true\n });\n updateOrDeleteFieldState(id, thisField, fieldProps);\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n\n const _editingState$id2 = editingState[id],\n otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id2, [thisField].map(_toPropertyKey));\n\n const promise = Promise.resolve(fieldColumn.preProcessEditCellProps({\n id,\n row,\n props: fieldProps,\n hasChanged: false,\n otherFieldsProps\n })).then(processedProps => {\n // Check again if the row is in edit mode because the user may have\n // discarded the changes while the props were being processed.\n if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n resolve(false);\n return;\n }\n\n processedProps = _extends({}, processedProps, {\n isProcessingProps: false\n });\n updateOrDeleteFieldState(id, thisField, processedProps);\n });\n promises.push(promise);\n });\n Promise.all(promises).then(() => {\n if (apiRef.current.getRowMode(id) === GridRowModes.Edit) {\n editingState = gridEditRowsStateSelector(apiRef.current.state);\n resolve(!editingState[id][field].error);\n } else {\n resolve(false);\n }\n });\n });\n }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);\n const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {\n const editingState = gridEditRowsStateSelector(apiRef.current.state);\n const row = apiRef.current.getRow(id);\n\n let rowUpdate = _extends({}, row);\n\n Object.entries(editingState[id]).forEach(([field, fieldProps]) => {\n const column = apiRef.current.getColumn(field);\n\n if (column.valueSetter) {\n rowUpdate = column.valueSetter({\n value: fieldProps.value,\n row: rowUpdate\n });\n } else {\n rowUpdate[field] = fieldProps.value;\n }\n });\n return rowUpdate;\n }, [apiRef]);\n const editingApi = {\n getRowMode,\n startRowEditMode,\n stopRowEditMode,\n unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,\n unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing\n };\n useGridApiMethod(apiRef, editingApi, 'EditingApi');\n React.useEffect(() => {\n if (rowModesModelProp) {\n updateRowModesModel(rowModesModelProp);\n }\n }, [rowModesModelProp, updateRowModesModel]);\n React.useEffect(() => {\n const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef); // Update the ref here because updateStateToStopRowEditMode may change it later\n\n const copyOfPrevRowModesModel = prevRowModesModel.current;\n prevRowModesModel.current = deepClone(rowModesModel); // Do a deep-clone because the attributes might be changed later\n\n Object.entries(rowModesModel).forEach(([id, params]) => {\n var _copyOfPrevRowModesMo, _idToIdLookup$id;\n\n const prevMode = ((_copyOfPrevRowModesMo = copyOfPrevRowModesModel[id]) == null ? void 0 : _copyOfPrevRowModesMo.mode) || GridRowModes.View;\n const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;\n\n if (params.mode === GridRowModes.Edit && prevMode === GridRowModes.View) {\n updateStateToStartRowEditMode(_extends({\n id: originalId\n }, params));\n } else if (params.mode === GridRowModes.View && prevMode === GridRowModes.Edit) {\n updateStateToStopRowEditMode(_extends({\n id: originalId\n }, params));\n }\n });\n }, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);\n};"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |