{"version":3,"file":"91205bd95160ea0c345b7936.js?3.6.14.7428b935c.1723600572441","mappings":"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","sources":["webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/CellEditor/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/ChangesChip/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/GridEditor/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/Header/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/SideEditor/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/components/SingleFieldEditor/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/containers/GridEditor/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/store/change/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/store/grid/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/store/progress/index.tsx","webpack://mono-repo/./packages/core-attribute-grid-editor/src/store/selection/index.tsx"],"sourcesContent":["import React, {useEffect} from 'react';\nimport {QueryClientProvider} from '@tanstack/react-query';\nimport {\n\tLegacyFormAttribute,\n\ttype LegacyFormAttributeProps,\n} from '@netx/core-attribute/components/Attribute';\nimport {\n\twithForm,\n\tWithFormPropsIn,\n\tWithFormPropsOut,\n} from '@netx/core-components/Form';\nimport Theme from '@netx/core-components/Theme';\nimport {queryClient} from '@netx/core-next/lib/queryClient';\n\nexport interface CellEditorProps\n\textends WithFormPropsIn,\n\t\tOmit {\n\tonChange(value: any): void;\n}\n\n/** For cell editing within the hypergrid */\nconst CellEditor: React.FC> = ({\n\tonChange,\n\tform,\n\t...props\n}) => {\n\tuseEffect(() => {\n\t\tonChange(form.values[props.attrData.name]);\n\t}, [form.values, props.attrData.name]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default withForm(CellEditor as any);\n","import React, {useCallback, useMemo, useState} from 'react';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport {Avatar, Menu} from '@mui/material';\nimport {Chip, ChipProps, MenuItem} from '@netx/core-components';\nimport {type ReactAction as Action} from '@netx/core/bootstrap';\n\nimport {\n\tfaTimes as TimesIcon,\n\tfaMousePointer as MousePointerIcon,\n} from '@fortawesome/pro-solid-svg-icons';\n\nimport {createStyles, withStyles, type WithStyles} from '@mui/styles';\nimport {Severity, Theme} from '@netx/core-components/Theme';\n\nimport {useChangeStore, useGridStore, useSelectionStore} from '../../store';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\ticonWrapper: {\n\t\t\tbackground: theme.palette.warning.main,\n\t\t\tborderRadius: '50%',\n\t\t\twidth: 20,\n\t\t\theight: 20,\n\t\t\tdisplay: 'inline-flex',\n\t\t\talignItems: 'center',\n\t\t\tjustifyContent: 'center',\n\t\t\t'& svg': {\n\t\t\t\tcolor: theme.palette.background.default,\n\t\t\t\twidth: '0.5em !important',\n\t\t\t},\n\t\t},\n\t});\n\nexport interface ChangesChipProps\n\textends Omit {}\n\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faUndo as CaretDownIcon} from '@fortawesome/pro-solid-svg-icons';\n\nimport type {PopoverProps} from '@mui/material/Popover';\n\nconst ChangesChip: React.FC & ChangesChipProps> = ({\n\tclasses,\n\tdisabled,\n\tlabel,\n\t...props\n}) => {\n\tconst [anchorEl, setAnchorEl] = useState(null);\n\tconst [open, setOpen] = useState(false);\n\n\tconst chipRef = React.useRef(null);\n\n\tconst changeStore = useChangeStore();\n\tconst selectionStore = useSelectionStore();\n\tconst gridStore = useGridStore();\n\n\tconst actions = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ticon: MousePointerIcon,\n\t\t\t\t\tlabel: i18n.t('i18n.resetSelected'),\n\t\t\t\t\tcb: gridStore.resetSelectedChanges,\n\t\t\t\t\tenableTest: () => !!selectionStore.state.count,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: TimesIcon,\n\t\t\t\t\tlabel: i18n.t('i18n.resetAll'),\n\t\t\t\t\tcb: gridStore.resetAllChanges,\n\t\t\t\t},\n\t\t\t].filter((action) => !action.enableTest || action.enableTest()),\n\t\t[\n\t\t\tgridStore.resetAllChanges,\n\t\t\tgridStore.resetSelectedChanges,\n\t\t\tselectionStore.state.count,\n\t\t],\n\t);\n\n\tconst handleClose = useCallback['onClose']>(\n\t\t(event: React.MouseEvent, reason) => {\n\t\t\tsetOpen(false);\n\t\t},\n\t\t[],\n\t);\n\n\t/** Menu exited */\n\tconst handleExited = useCallback(() => setAnchorEl(null), []);\n\n\t/** Show options or execute the only option */\n\tconst handleShowClick = useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\t// Execute only option\n\t\t\tif (actions.length === 1) {\n\t\t\t\tactions[0].cb();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Show options menu\n\t\t\tsetAnchorEl(chipRef.current);\n\t\t\tsetOpen(true);\n\t\t},\n\t\t[actions],\n\t);\n\n\tconst handleActionClick = useCallback(\n\t\t(action: Action) =>\n\t\t\t(\n\t\t\t\tevent: React.MouseEvent,\n\t\t\t) => {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tsetOpen(false);\n\t\t\t\taction.cb();\n\t\t\t},\n\t\t[],\n\t);\n\n\treturn useMemo(\n\t\t() => (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\t\t\t{changeStore.state.count > 99 ? '99+' : changeStore.state.count}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\tmeshAvatar\n\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t{...props}\n\t\t\t\t\tdeleteIcon={\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\tdisabled={disabled || !changeStore.state.count}\n\t\t\t\t\tlabel={label || i18n.t('i18n.changed')}\n\t\t\t\t\tonDelete={changeStore.state.count ? handleShowClick : undefined}\n\t\t\t\t\tonClick={handleShowClick}\n\t\t\t\t\tref={chipRef}\n\t\t\t\t\tcolor=\"warning\"\n\t\t\t\t/>\n\t\t\t\t{anchorEl ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{actions.map((action) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t) : null}\n\t\t\t\n\t\t),\n\t\t[\n\t\t\tactions,\n\t\t\tanchorEl,\n\t\t\topen,\n\n\t\t\tdisabled,\n\t\t\tlabel,\n\n\t\t\thandleClose,\n\t\t\thandleExited,\n\t\t\thandleActionClick,\n\t\t\thandleShowClick,\n\n\t\t\tchangeStore.state.count,\n\t\t],\n\t);\n};\n\nexport default withStyles(styles)(ChangesChip as any);\n","import React, {useCallback, useMemo, useRef, useState} from 'react';\nimport clsx from 'clsx';\n\nimport {i18n} from '@netx/core/i18n';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n\nimport {\n\tDialogContent,\n\tDialogContentText,\n\tLinearProgress,\n\tPaper,\n} from '@mui/material';\nimport {createStyles, withStyles, type WithStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\n\nimport {Header, SideEditor, SingleFieldEditor} from '../';\n\nimport {\n\tuseChangeStore,\n\tuseGridStore,\n\tuseProgressStore,\n\tuseSelectionStore,\n} from '../../store';\n\nimport {\n\tDialog,\n\tFormActions,\n\tFormValues,\n\tuseWhenChangedEffect,\n} from '@netx/core-components';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '1 1 auto',\n\t\t\tminHeight: 0,\n\t\t\toverflow: 'hidden',\n\t\t\theight: 'initial',\n\t\t\tposition: 'relative',\n\t\t\t'&$overflownX': {\n\t\t\t\t'& .hypergrid-container': {\n\t\t\t\t\t'& .scrollbar-x-border-hack': {\n\t\t\t\t\t\tborderTop: `1px solid ${theme.palette.custom.border}`,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\theight: '17px',\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 'initial',\n\t\t\t\t\t},\n\t\t\t\t\t'& > div:not([class*=\"scrollbar-\"]):not([class*=\"finbar-\"])': {\n\t\t\t\t\t\tmarginBottom: '17px',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t'&$overflownY': {\n\t\t\t\t'& .hypergrid-container': {\n\t\t\t\t\t'& .scrollbar-y-border-hack': {\n\t\t\t\t\t\tborderLeft: `1px solid ${theme.palette.custom.border}`,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\twidth: '17px',\n\t\t\t\t\t\tleft: 'initial',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t},\n\t\t\t\t\t'& .scrollbar-x-border-hack': {\n\t\t\t\t\t\tright: '17px',\n\t\t\t\t\t},\n\t\t\t\t\t'& > div:not([class*=\"scrollbar-\"]):not([class*=\"finbar-\"])': {\n\t\t\t\t\t\tmarginRight: '17px',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t'& .hypergrid-container': {\n\t\t\t\tborderTop: `1px solid ${theme.palette.custom.border}`,\n\t\t\t\theight: 'initial',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflex: '1 1 auto',\n\t\t\t\tminHeight: 0,\n\t\t\t\tpaddingBottom: 17,\n\t\t\t\t'& .container': {\n\t\t\t\t\tbackground: theme.palette.background.paper,\n\t\t\t\t},\n\t\t\t\t'& > div:not([class*=\"scrollbar-\"]):not([class*=\"finbar-\"])': {\n\t\t\t\t\t...theme.mixins.absoluteFill,\n\t\t\t\t},\n\n\t\t\t\t'& .scrollbar-x-border-hack, & .scrollbar-y-border-hack': {\n\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\tbackground:\n\t\t\t\t\t\ttheme.palette.mode === 'light'\n\t\t\t\t\t\t\t? 'rgba(0, 0, 0, 0.05)'\n\t\t\t\t\t\t\t: 'rgba(255, 255, 255, 0.08)',\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tright: 0,\n\t\t\t\t},\n\t\t\t\t'& .finbar-horizontal, & .finbar-vertical': {\n\t\t\t\t\t'& .thumb': {\n\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\tbackgroundColor: theme.palette.mode === 'light' ? '#666' : '#bbb',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'& .finbar-horizontal': {\n\t\t\t\t\theight: '11px',\n\t\t\t\t\tright: '16px !important',\n\t\t\t\t},\n\t\t\t\t'& .finbar-vertical': {\n\t\t\t\t\twidth: '11px',\n\t\t\t\t},\n\t\t\t},\n\t\t\t'&$editorOpen': {\n\t\t\t\t'& $main': {\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t'&:before': {\n\t\t\t\t\t\tbackground: theme.palette.background.default,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\tcontent: '\"',\n\t\t\t\t\t\topacity: 0.5,\n\t\t\t\t\t\t...theme.mixins.absoluteFill,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tmain: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '1 1 auto',\n\t\t\tflexDirection: 'column',\n\t\t\tminHeight: 0,\n\t\t},\n\t\tsideEditor: {\n\t\t\tflex: '0 0 auto',\n\t\t\tmarginTop: 4,\n\t\t\tposition: 'relative',\n\t\t},\n\t\teditorOpen: {\n\t\t\t'&::after': {\n\t\t\t\tbackground: 'rgba(0, 0, 0, 0.5)',\n\t\t\t\tcontent: '\"\"',\n\t\t\t\tdisplay: 'block',\n\t\t\t\t...theme.mixins.absoluteFill,\n\t\t\t},\n\t\t\t'& $sideEditor': {\n\t\t\t\tzIndex: 2,\n\t\t\t},\n\t\t},\n\t\tclosedActions: {\n\t\t\tflex: '1 1 auto',\n\t\t\tdisplay: 'flex',\n\t\t\tjustifyContent: 'center',\n\t\t\talignItems: 'center',\n\t\t\tposition: 'absolute',\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0,\n\t\t\tpointerEvents: 'none',\n\t\t},\n\t\toverflownX: {},\n\t\toverflownY: {},\n\t\tprogress: {\n\t\t\tposition: 'absolute',\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tright: 0,\n\t\t},\n\t\twrapper: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '1 1 auto',\n\t\t\tflexDirection: 'column',\n\t\t},\n\t\tloadingOverlay: {\n\t\t\tdisplay: 'flex',\n\t\t\talignItems: 'center',\n\t\t\tjustifyContent: 'center',\n\t\t\tbackground: 'rgba(255, 255, 255, 0.5)',\n\t\t\t...theme.mixins.absoluteFill,\n\t\t},\n\t\tloadingContainer: {\n\t\t\tpadding: theme.spacing(2),\n\t\t},\n\t\tdisable: {\n\t\t\tpointerEvents: 'none',\n\t\t},\n\t\tworking: {},\n\t});\n\nimport {useConfirmation} from '@netx/core-components/Confirmation';\n\nexport interface GridEditorProps {\n\tonClose?: (event: any, reason: string) => void;\n\tonChange?: (hasChanges: boolean) => void;\n\tref?: React.Ref;\n}\n\nconst GridEditor = React.forwardRef<\n\tHTMLDivElement,\n\tWithStyles & GridEditorProps\n>(({classes, onChange, onClose}, ref) => {\n\tconst rootRef = useRef(null);\n\tconst [editorOpen, setEditorOpen] = useState(false);\n\n\tconst confirm = useConfirmation();\n\n\tconst grid = useGridStore();\n\tconst selection = useSelectionStore();\n\tconst changes = useChangeStore();\n\tconst progress = useProgressStore();\n\n\tconst hasChanges = !!changes.state.count;\n\tconst singleRow = selection.state.inSingleRow;\n\n\tconst disable = grid.state.loading || grid.state.saving;\n\tconst working = progress.state.working || disable;\n\tconst indeterminateProgress =\n\t\t(working && progress.state.progress === 0) ||\n\t\t(grid.state.saving && progress.state.progress === 100);\n\n\tuseWhenChangedEffect(\n\t\thasChanges,\n\t\tuseCallback(\n\t\t\t(hasChanges) => {\n\t\t\t\tonChange?.(hasChanges);\n\t\t\t},\n\t\t\t[onChange],\n\t\t),\n\t);\n\n\tconst handleClone = useCallback(() => {\n\t\tsingleRow !== false &&\n\t\t\tdispatcher.trigger(\n\t\t\t\t'asset:tagPanel:grid:clone',\n\t\t\t\tgrid.getCloneData(singleRow),\n\t\t\t);\n\t}, [grid.getCloneData, singleRow]);\n\n\tconst handleClose = useCallback(() => {\n\t\tif (!hasChanges) return onClose?.(null, '');\n\n\t\tconfirm({\n\t\t\tmessage: i18n.t('i18n.anyUnsavedChangesWillBeLostConfirm'),\n\t\t}).then(() => onClose?.(null, ''));\n\t}, [hasChanges, onClose]);\n\n\tconst handleEditClick = useCallback(() => setEditorOpen(true), []);\n\n\tconst handleInputLineSubmit = useCallback(\n\t\tasync (data: any, changes: any, actions: any) =>\n\t\t\tgrid.updateData(data, actions),\n\t\t[grid.updateData],\n\t);\n\n\tconst handleSideEditorSubmit = useCallback(\n\t\tasync (values: FormValues, actions: FormActions) => {\n\t\t\tawait grid.updateData(values, actions);\n\t\t\tsetEditorOpen(false);\n\t\t},\n\t\t[grid.updateData],\n\t);\n\n\tconst _Header = useMemo(() => {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}, [handleClose, handleClone, handleEditClick]);\n\n\tconst _SideEditor = useMemo(() => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}, [classes, editorOpen, handleSideEditorSubmit, setEditorOpen]);\n\n\tconst _SingleFieldEditor = useMemo(() => {\n\t\treturn ;\n\t}, [handleInputLineSubmit]);\n\n\treturn useMemo(() => {\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{_Header}\n\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{_SingleFieldEditor}\n\n\t\t\t\t\t\t{/** Do not add any other props to these elements */}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t{_SideEditor}\n\n\t\t\t\t{/** Show dialog at initial data load */}\n\t\t\t\t{grid.state.loading ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{i18n.t(\n\t\t\t\t\t\t\t\t'i18n.gridEditorDependingOnCartnSizeThisCouldTakeAMoment',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) : null}\n\t\t\t\n\t\t);\n\t}, [\n\t\tclasses,\n\t\t_Header,\n\t\t_SideEditor,\n\t\t_SingleFieldEditor,\n\t\tdisable,\n\t\tindeterminateProgress,\n\t\tworking,\n\t\tgrid.state.loading,\n\t\tgrid.state.overflownX,\n\t\tgrid.state.overflownY,\n\t\tprogress.state.progress,\n\t]);\n});\n\nexport default withStyles(styles)(GridEditor);\n","import React, {useMemo} from 'react';\nimport clsx from 'clsx';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport {createStyles, withStyles, type WithStyles} from '@mui/styles';\nimport {Severity, Theme} from '@netx/core-components/Theme';\n\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {\n\tfaClone as CloneIcon,\n\tfaPencil as PencilIcon,\n\tfaTimes as TimesIcon,\n} from '@fortawesome/pro-solid-svg-icons';\n\nimport {ChangesChip} from '..';\nimport {\n\tuseChangeStore,\n\tuseGridStore,\n\tuseProgressStore,\n\tuseSelectionStore,\n} from '../../store';\n\nimport Selection, {\n\tSelectionProps,\n} from '@netx/core-attribute-set-selection/components/SetSelector';\n\n// import {\n// \tSelection as SetSelection,\n// \tSelectionProps as SetSelectionProps,\n// } from '@netx/core-asset/components/Attributes/Sets';\n\nimport {Button, CountChip, IconButton} from '@netx/core-components';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\tpadding: theme.spacing(1.5, 2, 1, 2),\n\t\t\tdisplay: 'flex',\n\t\t\talignItems: 'center',\n\t\t},\n\t\ttitle: {\n\t\t\tflex: '0 1 auto',\n\t\t\tdisplay: 'flex',\n\t\t\talignItems: 'center',\n\t\t},\n\t\tclose: {\n\t\t\tflex: '0 0 auto',\n\t\t},\n\t\tcounts: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '1 1 auto',\n\t\t\tmarginRight: theme.spacing(1),\n\t\t\t'& > * + *': {\n\t\t\t\tmarginLeft: theme.spacing(1),\n\t\t\t},\n\t\t},\n\t\tactions: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '0 0 auto',\n\t\t\tmarginRight: theme.spacing(1),\n\t\t\t'& > * + *': {\n\t\t\t\tmarginLeft: theme.spacing(1),\n\t\t\t},\n\t\t},\n\t\tcontrols: {\n\t\t\tdisplay: 'flex',\n\t\t\tflex: '1 0 auto',\n\t\t\talignItems: 'center',\n\t\t},\n\t\tworking: {\n\t\t\tpointerEvents: 'none',\n\t\t},\n\t\tsetSelection: {\n\t\t\tflex: '1 1 auto',\n\t\t\tmaxWidth: 300,\n\t\t\tminWidth: 220,\n\t\t\tpadding: theme.spacing(0, 2, 0, 0),\n\t\t},\n\t});\n\nexport interface MainHeaderProps {\n\tonClone?: () => void;\n\tonClose?: () => void;\n\tonEdit?: () => void;\n\t// onSetChange: SelectionProps['onChange'];\n}\n\nconst MainHeader: React.FC & MainHeaderProps> =\n\tReact.memo(\n\t\t({\n\t\t\tclasses,\n\n\t\t\tonClone,\n\t\t\tonClose,\n\t\t\tonEdit,\n\t\t\t// onSetChange,\n\t\t}) => {\n\t\t\tconst selection = useSelectionStore();\n\t\t\tconst grid = useGridStore();\n\t\t\tconst changes = useChangeStore();\n\t\t\tconst progress = useProgressStore();\n\n\t\t\tconst hasChanges = !!changes.state.count;\n\t\t\tconst hasSelection = !!selection.state.count;\n\n\t\t\tconst working =\n\t\t\t\tprogress.state.working || grid.state.loading || grid.state.saving;\n\n\t\t\treturn useMemo(\n\t\t\t\t() => (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{onEdit ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{i18n.t('i18n.edit')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{onClone ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{i18n.t('i18n.clone')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{i18n.t('i18n.save')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{onClose ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\tclasses,\n\n\t\t\t\t\tonClose,\n\t\t\t\t\tonEdit,\n\n\t\t\t\t\thasChanges,\n\t\t\t\t\thasSelection,\n\t\t\t\t\tworking,\n\n\t\t\t\t\tchanges.state.count,\n\t\t\t\t\tgrid.resetAllChanges,\n\t\t\t\t\tgrid.save,\n\t\t\t\t\tselection.state.count,\n\t\t\t\t\tselection.state.inSingleRow,\n\t\t\t\t\tselection.reset,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t);\n\nexport default withStyles(styles)(MainHeader);\n","// This file still needs love\n\nimport React, {useCallback, useEffect, useMemo, useState} from 'react';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport BulkEditorComponent, {\n\tEditorProps as BulkEditorComponentProps,\n} from '@netx/core-attribute-asset/components/Editor';\nimport {DrawerVariant} from '@netx/core-components/Drawer';\nimport AppendAction from '@netx/core-attribute-quick-edit/components/Actions/AppendToggle';\nimport {attributes as attributesSingleton} from '@netx/core-attribute/singletons/attributeTemplates';\n\nimport {withStyles, createStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\n\nconst StyledBulkEditorComponent = withStyles((theme: Theme) =>\n\tcreateStyles({\n\t\tattributesWrapper: {\n\t\t\tpadding: theme.spacing(0, 2),\n\t\t},\n\t}),\n)(BulkEditorComponent);\n\nimport {\n\tisEmptyValue,\n\tFormMultipleValues,\n\tFormType,\n} from '@netx/core-components/Form';\nimport {withDrawer} from '@netx/core-components/Drawer';\nimport {\n\tuseUpdateEffect,\n\tuseWhenChangedEffect,\n} from '@netx/core-components/hooks';\n\nimport {useGridStore, useProgressStore} from '../../store';\nimport {useForm, getInputFormObject} from '@netx/core-components/Form';\nimport {\n\tuseAttributeProvider,\n\tuseMetadataLookups,\n\tAttributeValue,\n} from '@netx/core-attribute';\nimport {parseValue} from '@netx/core-attribute/utils';\nimport type {AttributeFormValues, Action} from '@netx/core-attribute-asset';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\n\ntype SideEditorFormType = FormType;\n\n/** Get submit data from attribute values */\n// TODO: utilize the attribute selection context for attribute templates\nfunction getSubmitData(\n\tvalues: SideEditorFormType['values'],\n\tchanges: SideEditorFormType['changes'],\n\tactions: SideEditorFormType['actions'],\n\tmode?: Action,\n) {\n\tconst submitData: Record = {}; // SideEditorFormType['values'] = {};\n\tObject.keys(values).forEach((key) => {\n\t\tconst id = parseInt(key.toString());\n\n\t\tif (changes[id] !== true) return;\n\n\t\tconst attr = attributesSingleton.get(id);\n\t\tif (!attr) return;\n\n\t\tconst fieldAction = actions[id] || 'overwrite';\n\t\tconst updateType =\n\t\t\tmode === 'append' && fieldAction !== 'clear' ? 'append' : fieldAction;\n\t\tconst value = values[id];\n\n\t\t// Cannot empty a mandatory attribute\n\t\tconst empty = isEmptyValue(value) || updateType === 'clear';\n\t\tif (empty && attr.get('mandatory') === 1) return;\n\n\t\tsubmitData[attr.get('name')] = value;\n\t});\n\n\treturn submitData;\n}\n\n// We handle the submit from the form and pass it along to you, the condumer!\nexport interface BulkEditorProps\n\textends Omit<\n\t\tBulkEditorComponentProps,\n\t\t| 'actions'\n\t\t| 'errors'\n\t\t| 'form'\n\t\t| 'inputForm'\n\t\t| 'values'\n\t\t| 'multipleValues'\n\t\t| 'originalValues'\n\t> {\n\tactive?: boolean;\n\tonChange?: (hasChanges: boolean) => void;\n\tonSubmit: (\n\t\tvalues: SideEditorFormType['values'],\n\t\tactions: SideEditorFormType['actions'],\n\t) => Promise;\n}\n\nconst BulkEditor: React.FC = ({\n\tactive,\n\tdisabled,\n\tonChange,\n\tonSubmit,\n\t...props\n}) => {\n\tconst {state} = useGridStore();\n\tconst progress = useProgressStore();\n\tconst [working, setWorking] = useState(false);\n\tconst attributeProvider = useAttributeProvider();\n\n\tconst data = useMemo(() => {\n\t\tconst values: AttributeFormValues = {};\n\t\tconst multipleValues: FormMultipleValues = {};\n\t\tconst readOnlyValues: Record = {};\n\n\t\tconst {storedData} = state;\n\t\tconst keys = storedData ? Object.keys(storedData) : [];\n\t\tif (keys.length) {\n\t\t\tfor (const key in storedData) {\n\t\t\t\tconst data = storedData[key];\n\t\t\t\tconst attr = attributeProvider.data.find((attr) => attr.name === key);\n\t\t\t\tif (attr) {\n\t\t\t\t\tvalues[attr.attributeid] = data.multipleValues\n\t\t\t\t\t\t? (null as any)\n\t\t\t\t\t\t: (parseValue(attr.type, data.value) as AttributeValue);\n\t\t\t\t\tmultipleValues[attr.attributeid] = data.multipleValues === true;\n\t\t\t\t\treadOnlyValues[attr.attributeid] = data.readOnly === true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tvalues,\n\t\t\tmultipleValues,\n\t\t\treadOnlyValues,\n\t\t};\n\t}, [state.storedData, attributeProvider.data]);\n\n\tconst form = useForm(undefined, {\n\t\tonSubmit: useCallback(\n\t\t\tasync (\n\t\t\t\tvalues: SideEditorFormType['values'],\n\t\t\t\tchanges: SideEditorFormType['changes'] = {},\n\t\t\t\tactions: SideEditorFormType['actions'] = {},\n\t\t\t) => {\n\t\t\t\tif (disabled) return;\n\n\t\t\t\tconst updatedValues = getSubmitData(\n\t\t\t\t\tvalues,\n\t\t\t\t\tchanges,\n\t\t\t\t\tactions,\n\t\t\t\t\tprops.mode,\n\t\t\t\t);\n\t\t\t\tif (!Object.keys(values).length) return;\n\n\t\t\t\tconst updatedActions: SideEditorFormType['actions'] = {};\n\t\t\t\t// TODO: we are actually using the attribute names here and not the ids, so our form typing is not correct\n\t\t\t\t// we just need to clean this all up - we do submit with ids to get here but getSubmitData returns names instead\n\t\t\t\t// so we are incorrectly saying what comes out of here\n\t\t\t\tfor (const key in updatedValues)\n\t\t\t\t\tupdatedActions[key as any] = props.mode || actions[key as any];\n\n\t\t\t\treturn await onSubmit(updatedValues, updatedActions);\n\t\t\t},\n\t\t\t[disabled, onSubmit, props.mode],\n\t\t),\n\t}) as SideEditorFormType;\n\tconst inputForm = getInputFormObject(form);\n\n\tconst ids = useMemo(() => {\n\t\treturn Object.keys(data.values).map((id) => parseInt(id.toString()));\n\t}, [data.values]);\n\n\tconst {lookup, lookupsAllowed, attributesWorking} = useMetadataLookups({\n\t\tattributeTemplates: attributeProvider.data,\n\t\tattributeIds: ids,\n\t\tonLookup: (values, attributeId, lookupValue) => {\n\t\t\tform.setValue({\n\t\t\t\t...values,\n\t\t\t\t[attributeId]: lookupValue,\n\t\t\t} as any);\n\t\t},\n\t});\n\n\tuseWhenChangedEffect(\n\t\tform.hasChanged,\n\t\tuseCallback(\n\t\t\t(hasChanged) => {\n\t\t\t\tonChange?.(hasChanged);\n\t\t\t},\n\t\t\t[onChange],\n\t\t),\n\t);\n\n\t// When `mode` changes, reset form to original values\n\tuseUpdateEffect(() => {\n\t\tform.reset(\n\t\t\tform.originalValuesRef.current,\n\t\t\tundefined,\n\t\t\tform.multipleValuesRef.current,\n\t\t);\n\t}, [props.mode]);\n\n\tuseWhenChangedEffect(\n\t\tdata,\n\t\tuseCallback(\n\t\t\t(data) => {\n\t\t\t\tform.reset(data.values, undefined, data.multipleValues);\n\t\t\t},\n\t\t\t[form.reset],\n\t\t),\n\t\t{\n\t\t\texecuteAtMount: true,\n\t\t},\n\t);\n\n\tuseEffect(() => {\n\t\tconst working = !active || progress.state.working; // || !Object.keys(data.values).length;\n\t\tif (working) {\n\t\t\tsetWorking(true);\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tsetWorking(false);\n\t\t}, 200);\n\t}, [active, progress.state.working]);\n\n\treturn (\n\t\t\n\t);\n};\n\nconst BulkEditorDrawer = withDrawer(BulkEditor);\n\nexport default function ({\n\tactive,\n\t...props\n}: React.ComponentProps & {active?: boolean}) {\n\tconst [editorAppend, setEditorAppend] = useState(false);\n\tconst [hasChanges, setHasChanges] = useState(false);\n\tconst [dataActive, setDataActive] = useState(false);\n\n\tconst {getSelectedValues, resetStore, state} = useGridStore();\n\n\tconst handleChange = useCallback(\n\t\t(hasChanges: boolean) => setHasChanges(hasChanges),\n\t\t[],\n\t);\n\n\tconst handleEntered = useCallback(() => {\n\t\tif (!state.storedData) getSelectedValues();\n\t\tsetDataActive(true);\n\t}, [state]);\n\n\tconst handleExited = useCallback(() => {\n\t\tresetStore();\n\t\tsetDataActive(false);\n\t\tsetHasChanges(false);\n\t}, []);\n\n\treturn useMemo(\n\t\t() => (\n\t\t\t setEditorAppend(on)}\n\t\t\t\t\t\t\ton={editorAppend}\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\n\t\t\t\t\tkeepMounted: false,\n\t\t\t\t\tonEntered: handleEntered,\n\t\t\t\t\tonExited: handleExited,\n\t\t\t\t\topen: active,\n\t\t\t\t\ttitle: i18n.t('i18n.bulkEditor'),\n\t\t\t\t\tvariant: DrawerVariant.TEMPORARY,\n\t\t\t\t\t...props.DrawerProps,\n\t\t\t\t\twidth: 200,\n\t\t\t\t}}\n\t\t\t/>\n\t\t),\n\t\t[\n\t\t\tactive,\n\t\t\tprops,\n\n\t\t\teditorAppend,\n\t\t\thasChanges,\n\n\t\t\tgetSelectedValues,\n\t\t\thandleChange,\n\t\t\tresetStore,\n\t\t],\n\t);\n}\n","// TODO: this \"component\" still needs love\nimport React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport clsx from 'clsx';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport {Typography} from '@mui/material';\nimport {createStyles, withStyles, type WithStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\nimport {messages} from '../../properties';\nimport {useGridStore, useProgressStore, useSelectionStore} from '../../store';\nimport {\n\tgetInputFormObject,\n\tisEmptyValue,\n\twithForm,\n\tLegacyForm as Form,\n\tFormType,\n\tWithFormPropsIn,\n\tWithFormPropsOut,\n} from '@netx/core-components/Form';\nimport SubmitButton from '@netx/core-components/SubmitButton';\n\nimport {LegacyFormAttribute} from '@netx/core-attribute/components/Attribute';\nimport {\n\tuseAttributeProvider,\n\tATTRIBUTE_APPENDABLE_TYPES,\n} from '@netx/core-attribute';\n\nimport AppendAction from '@netx/core-attribute-quick-edit/components/Actions/AppendToggle';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\tbackground:\n\t\t\t\ttheme.palette.mode === 'light'\n\t\t\t\t\t? 'rgba(0,0,0,0.02)'\n\t\t\t\t\t: 'rgba(255,255,255,0.02)',\n\n\t\t\tflexDirection: 'column',\n\t\t\theight: 108,\n\t\t\tpadding: theme.spacing(1, 2),\n\t\t\tposition: 'relative',\n\n\t\t\t'&, & $message': {\n\t\t\t\talignItems: 'center',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t},\n\t\t\t'&, & $action, & $submit': {\n\t\t\t\tflex: '0 0 auto',\n\t\t\t},\n\t\t\t'& textarea': {\n\t\t\t\tmaxHeight: 42,\n\t\t\t\t...theme.mixins.forceScrollable,\n\t\t\t},\n\t\t\t'& $form, & $inputWrapper': {\n\t\t\t\talignItems: 'center',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflex: '1 1 auto',\n\t\t\t\tminHeight: 0,\n\t\t\t\tminWidth: 0,\n\t\t\t},\n\t\t\t'& $form, & $message': {\n\t\t\t\twidth: '100%',\n\t\t\t},\n\t\t\t'& $actions, & $inputWrapper': {\n\t\t\t\tpaddingRight: theme.spacing(1),\n\t\t\t},\n\t\t},\n\t\tactions: {},\n\t\tform: {},\n\t\tinputWrapper: {\n\t\t\theight: '100%',\n\t\t\tmaxHeight: '100%',\n\t\t},\n\t\tloading: {\n\t\t\tpointerEvents: 'none',\n\t\t},\n\t\tmessage: {\n\t\t\tcolor: theme.palette.text.secondary,\n\t\t\tflex: '0 1 auto',\n\t\t},\n\t\tsubmit: {\n\t\t\t'& > button': {\n\t\t\t\tminWidth: 115,\n\t\t\t},\n\t\t},\n\t});\n\n// TODO: make this component accept the Values and pass them to the form\ntype FormValues = Record;\n\nexport interface InputLineProps extends WithFormPropsIn<{}, FormValues> {\n\tonSubmit(\n\t\tvalues: FormValues,\n\t\tchanges: FormType['changes'],\n\t\tactions: FormType['actions'],\n\t): Promise;\n}\n\nconst InputLine = ({\n\tclasses,\n\tform,\n\tonSubmit,\n}: WithStyles &\n\tWithFormPropsOut) => {\n\tconst [appending, setAppending] = useState(false);\n\tconst [canAppend, setCanAppend] = useState(false);\n\tconst attributeProvider = useAttributeProvider();\n\n\tconst selection = useSelectionStore();\n\tconst grid = useGridStore();\n\tconst progress = useProgressStore();\n\n\tconst selectedField = selection.state.inSingleColumn;\n\tconst canSubmit =\n\t\tform.hasChanged &&\n\t\tform.isValid &&\n\t\t!progress.state.working &&\n\t\t(!appending ||\n\t\t\t(selectedField !== false && !isEmptyValue(form.values[selectedField])));\n\tconst multipleFieldsSelected =\n\t\tselectedField === false && !!selection.state.count;\n\tconst working = progress.state.working || form.isSubmitting;\n\n\tconst inputForm = getInputFormObject(form);\n\n\t// When the selection changes, and the selection is in a single column,\n\t// get the attribute data for that field\n\tconst attrData = useMemo(() => {\n\t\tif (selectedField === false) return null;\n\t\tconst attr = attributeProvider.getByName(selectedField);\n\t\treturn attr && !attr.system ? attr : null;\n\t}, [selectedField, attributeProvider.getByName]);\n\n\t// When selected data updates, and the selection is in a single column,\n\t// update the form to reflect updated data\n\tuseEffect(() => {\n\t\tconst {storedData} = grid.state;\n\t\tif (selectedField === false || !storedData) return;\n\n\t\tconst keys = Object.keys(storedData);\n\t\tconst fieldLength = keys.length;\n\t\tif (!fieldLength || fieldLength > 1) {\n\t\t\tform.reset();\n\t\t\treturn;\n\t\t}\n\n\t\tconst fieldName = keys[0];\n\t\tconst data = storedData[fieldName];\n\t\tform.reset({[fieldName]: data.value}, form.actionsRef.current[fieldName], {\n\t\t\t[fieldName]: data.multipleValues === true,\n\t\t});\n\t}, [grid.state.storedData, selectedField]);\n\n\t// When attribute data updates, check to see if the type is appendable\n\tuseEffect(() => {\n\t\tsetCanAppend(\n\t\t\tattrData\n\t\t\t\t? ATTRIBUTE_APPENDABLE_TYPES.includes(attrData.type) &&\n\t\t\t\t\t\tattrData.permission !== 'r' &&\n\t\t\t\t\t\tgrid.state.storedData?.[attrData.name]?.readOnly !== true\n\t\t\t\t: false,\n\t\t);\n\t}, [attrData, grid.state.storedData]);\n\n\t// If the attribute is of a type that can no longer append, and the selection\n\t// is in a single column, turn append off and update form action\n\tuseEffect(() => {\n\t\tif (selectedField === false || canAppend) return;\n\n\t\tsetAppending(false);\n\t}, [canAppend, selectedField]);\n\n\tconst handleSubmit = useCallback(\n\t\tasync (values: any, changes: any, actions: any) => {\n\t\t\tif (appending) {\n\t\t\t\tObject.keys(actions).forEach((field) => (actions[field] = 'append'));\n\t\t\t}\n\t\t\tonSubmit?.(values, changes, actions);\n\t\t},\n\t\t[appending, onSubmit],\n\t);\n\n\t// We do not need to render for all the context changes we are utilizing\n\treturn useMemo(\n\t\t() => (\n\t\t\t\n\t\t\t\t{selectedField !== false && attrData != null ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t setAppending(on)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{multipleFieldsSelected\n\t\t\t\t\t\t\t\t\t? messages.singleFieldMultipleFieldsSelected\n\t\t\t\t\t\t\t\t\t: messages.singleFieldNoFieldsSelected}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t),\n\t\t[\n\t\t\tclasses,\n\t\t\tform.actions,\n\t\t\tform.multipleValues,\n\t\t\tform.originalValues,\n\t\t\tform.values,\n\n\t\t\tinputForm,\n\n\t\t\tappending,\n\t\t\tattrData,\n\t\t\tcanAppend,\n\t\t\tcanSubmit,\n\t\t\tmultipleFieldsSelected,\n\t\t\tselectedField,\n\t\t\tworking,\n\t\t],\n\t);\n};\n\nexport default withStyles(styles)(\n\t// @ts-ignore\n\twithForm(InputLine, {\n\t\tresetOnSubmit: false,\n\t}),\n);\n","import React, {useCallback, useEffect, useRef, useState, useMemo} from 'react';\nimport _ from 'underscore';\n\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n\n// @ts-ignore\nimport {default as hypergrid} from 'core-libs/fin-hypergrid/fin-hypergrid';\n// Do not remove\n// If we do not do anything with this it gets discarded in builds\n// you can console.log or assign it to a variable to keep it around\n// `hypergrid` itself resolves to be `{}` - they install it in the\n// `global.fin` namespace\nconst someWeirdTreeShakingIsHappening = hypergrid;\n\nimport columns from '../../columns';\n// import {GridEditor, GridEditorProps} from './containers';\nimport {cellKeyboardNavigationHack, scrollHack} from '../../hacks';\nimport {AttributeSetSelectionProvider} from '@netx/core-attribute-set-selection';\nimport {AttributeSetsProvider} from '@netx/core-attribute-set';\nimport {AttributeProvider} from '@netx/core-attribute';\nimport GridEditor, {GridEditorProps} from '../../components/GridEditor';\nimport {\n\tChangeStoreProvider,\n\tGridStoreProvider,\n\tProgressStoreProvider,\n\tSelectionStoreProvider,\n} from '../../store';\nimport {ColumnSchema, DataRow, GridEditor as GridEditorType} from '../../types';\nimport properties from '@netx/core-grid/properties/grid';\nimport {getDefaults} from '@netx/core-grid/lib/configs/default';\nimport ClientSort from '@netx/core-grid/lib/sorters/client';\nimport ServerSort from '@netx/core-grid/lib/sorters/server';\nimport {withErrorBoundary} from '@netx/core-components/ErrorBoundary';\n\nconst Sorters = {\n\tclient: ClientSort,\n\tserver: ServerSort,\n};\n\nexport type GridEditorContainerProps = GridEditorProps;\n\nconst GridEditorContainer = ({\n\tonChange,\n\t...props\n}: GridEditorContainerProps) => {\n\tconst elementRef = useRef(null);\n\tconst pluginRef = useRef();\n\tconst configurationRef = useRef>({});\n\tconst [pluginReady, setPluginReady] = useState(false);\n\n\tconst schemaRef = useRef[]>([]);\n\tconst columnsRef = useRef>();\n\tconst [hasChanges, setHasChanges] = useState(false);\n\n\tconst defaultSelection = useMemo(() => ['all'], []);\n\n\t// Setup hypergrid plugin\n\tuseEffect(() => {\n\t\tif (!elementRef.current) {\n\t\t\tsetPluginReady(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst plugin: GridEditorType = (pluginRef.current =\n\t\t\t// @ts-ignore\n\t\t\tnew global.fin.Hypergrid(elementRef.current, {\n\t\t\t\tdata: [],\n\t\t\t}));\n\n\t\tcellKeyboardNavigationHack(plugin);\n\t\tscrollHack(plugin);\n\n\t\tplugin.addProperties(properties);\n\n\t\tconst updateConfiguration = (type?: string) => {\n\t\t\tconfigurationRef.current = {...getDefaults(type), fixedColumnCount: 3};\n\t\t\tplugin.setState(configurationRef.current);\n\t\t};\n\n\t\tupdateConfiguration();\n\n\t\t// Setup columns\n\t\tconst _columns = (columnsRef.current = columns(plugin));\n\n\t\tconst themeListener = (type: string) => {\n\t\t\tupdateConfiguration(type);\n\t\t\t// Have to resetup schema after updating the configuration\n\t\t\t_columns.updateSchema(schemaRef.current);\n\t\t};\n\t\tdispatcher.on('theme:toggled', themeListener);\n\n\t\tsetPluginReady(true);\n\n\t\treturn () => {\n\t\t\tdispatcher.off('theme:toggled', themeListener);\n\t\t\ttry {\n\t\t\t\tpluginRef.current = undefined;\n\t\t\t\tplugin.removeAllEventListeners();\n\t\t\t\tplugin.terminate();\n\t\t\t\twhile (plugin.div.hasChildNodes()) {\n\t\t\t\t\tplugin.div.lastChild && plugin.div.removeChild(plugin.div.lastChild);\n\t\t\t\t}\n\t\t\t} catch (ex) {}\n\t\t};\n\t}, []);\n\n\tconst handleSetData = useCallback((data: DataRow[], schema: ColumnSchema) => {\n\t\tconst plugin = pluginRef.current;\n\t\tif (!plugin) return;\n\n\t\tplugin.setData(data, {\n\t\t\tschema: schema.map((schema) => {\n\t\t\t\treturn {\n\t\t\t\t\theader: schema.header,\n\t\t\t\t\tname: schema.name,\n\t\t\t\t};\n\t\t\t}),\n\t\t});\n\n\t\tcolumnsRef.current?.updateSchema((schemaRef.current = schema));\n\n\t\tplugin.installPlugins(Sorters.client);\n\n\t\tsetTimeout(() => {\n\t\t\tplugin.fireSyntheticGridResizedEvent(new Event('resize'));\n\t\t}, 51);\n\t}, []);\n\n\tconst handleChange = useCallback(\n\t\t(hasChanges: boolean) => {\n\t\t\tsetHasChanges(hasChanges);\n\t\t\tonChange?.(hasChanges);\n\t\t},\n\t\t[onChange],\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default withErrorBoundary(GridEditorContainer);\n","import React, {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseReducer,\n} from 'react';\n\nimport {ACTIONS} from './constants';\nimport reducer, {initialState, Change, Changes, ID} from './reducer';\n\ntype ChangeContextType = {\n\tstate: typeof initialState;\n\n\tadd(primary: ID, field: string): void;\n\tget(primary: ID): Change;\n\tchanged(primary: ID, field: string): boolean;\n\tremove(primary: ID, field: string): void;\n\treset(changes?: Changes): void;\n};\n\nconst StoreContext = createContext({} as any);\n\nexport const useChangeStore = () => useContext(StoreContext);\n\nexport const ChangeStoreProvider = ({children, gridEditor}: any) => {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\t// When update changes updates, update the count\n\tuseEffect(() => {\n\t\tconst changes = state.changes;\n\t\tlet count = 0;\n\t\tfor (const key in changes) count += changes[key].length;\n\t\tdispatch({\n\t\t\ttype: ACTIONS.SET_COUNT,\n\t\t\tcount,\n\t\t});\n\t}, [state.changes]);\n\n\tconst reset = useCallback((changes?: Changes) => {\n\t\tdispatch({type: ACTIONS.RESET, changes});\n\t}, []);\n\n\tconst get = useCallback(\n\t\t(primary: ID) => state.changes[primary] || [],\n\t\t[state.changes],\n\t);\n\n\tconst changed = useCallback(\n\t\t(primary: ID, field: string) => get(primary).includes(field),\n\t\t[get],\n\t);\n\n\tconst addFieldTimeout = React.useRef();\n\tconst addField = useCallback(() => {\n\t\tconst toAdd: Changes = {};\n\t\tconst reset = () => {\n\t\t\taddFieldTimeout.current && clearTimeout(addFieldTimeout.current);\n\t\t\taddFieldTimeout.current = setTimeout(() => {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: ACTIONS.ADD_CHANGES,\n\t\t\t\t\tchanges: toAdd,\n\t\t\t\t});\n\t\t\t}, 25);\n\t\t};\n\t\treturn (primary: ID, field: string) => {\n\t\t\treset();\n\t\t\t!toAdd[primary] ? (toAdd[primary] = [field]) : toAdd[primary].push(field);\n\t\t};\n\t}, []);\n\n\tconst removeFieldTimeout = React.useRef();\n\tconst removeField = useCallback(() => {\n\t\tconst toRemove: Changes = {};\n\t\tconst reset = () => {\n\t\t\tremoveFieldTimeout.current && clearTimeout(removeFieldTimeout.current);\n\t\t\tremoveFieldTimeout.current = setTimeout(() => {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: ACTIONS.REMOVE_CHANGES,\n\t\t\t\t\tchanges: toRemove,\n\t\t\t\t});\n\t\t\t}, 25);\n\t\t};\n\t\treturn (primary: ID, field: string) => {\n\t\t\treset();\n\t\t\t!toRemove[primary]\n\t\t\t\t? (toRemove[primary] = [field])\n\t\t\t\t: toRemove[primary].push(field);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n","import React, {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseReducer,\n\tuseRef,\n} from 'react';\n\nimport {i18n} from '@netx/core/i18n';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n\nimport {isEmptyValue} from '@netx/core/lib/underscore-netx';\n\nimport _ from 'underscore';\n\nimport {ACTIONS} from './constants';\nimport reducer, {initialState} from './reducer';\n\nimport {\n\tbreakItUp,\n\tcheckEquality,\n\tgetColumnsByName,\n\tgetColumnFromGrid,\n\tgetColumnsFromGrid,\n\tgetDataFromGrid,\n\tgetDataPointFromCellEvent,\n\tgetSortIndexesFromGrid,\n} from '../../utils';\n\nimport type {AttributeAttributes} from '@netx/core-asset/models/attribute';\nimport attributeValidators from '@netx/core-attribute/validators';\nimport attributeFormatters from '@netx/core-attribute/formatters';\nimport attributeParsersOut from '@netx/core-attribute/parsers-out';\nimport attributeParsers from '@netx/core-attribute/parsers';\nimport type {FormActions, FormValues} from '@netx/core-components/Form';\n\nimport useWhenChangedEffect from '@netx/core-components/hooks/useWhenChangedEffect';\n\nimport {useChangeStore} from '../change';\nimport {useSelectionStore} from '../selection';\nimport {useProgressStore} from '../progress';\n\nimport {type SearchAssetAttributesSchema} from '../../schema/searchAssetAttributes';\nimport {\n\ttype SetAssetAttributesSchema,\n\ttype SetAssetAttributesAttribute,\n} from '../../schema';\nimport {parseValue} from '@netx/core-attribute/utils';\n\nimport type {\n\tColumnProps,\n\tColumnSchema,\n\tDataRow,\n\tGridEditor,\n\tGridEditorColumn,\n\tHypergridCellEvent,\n\tPermissions,\n} from '../../types';\nimport {types} from '@netx/core-asset/properties/attributes';\n\nimport {useGetData, useSaveData} from './data';\n\nimport {useAttributeSetSelectionProvider} from '@netx/core-attribute-set-selection/context';\nimport {useCurrentCart} from '@netx/core-cart-current';\n\nimport {loose as _getSelectedValues} from './get-values';\nimport {\n\tloose as updateSelectedValues,\n\tspecific as updateSpecificValues,\n} from './set-values';\nimport {\n\tall as resetAllValues,\n\tloose as resetSelectedValues,\n} from './reset-values';\n\ntype GridContextType = {\n\tstate: typeof initialState;\n\t// attributeSetId: string;\n\tgetCloneData(y: number):\n\t\t| {\n\t\t\t\tcloneData: Record;\n\t\t\t\tcloneFields: GridEditorColumn[];\n\t\t\t\tcloneSchema: Record[] | undefined;\n\t\t\t\tcloneTargets: Record[];\n\t\t }\n\t\t| undefined;\n\tgetSelectedValues(): Promise;\n\tresetAllChanges(): Promise;\n\tresetSelectedChanges(): Promise;\n\tresetStore(): void;\n\tsave(): Promise;\n\tsetData(data: FormValues[], schema: Record[]): void;\n\tupdateData(values: FormValues, actions?: FormActions): Promise;\n};\n\nconst StoreContext = createContext({} as any);\n\nexport const useGridStore = () => useContext(StoreContext);\n\nconst getColumnPropsForAttribute = (attr: AttributeAttributes) => {\n\tconst type = types[attr.type];\n\n\tconst props: ColumnProps = {\n\t\tname: attr.name,\n\t\theader: attr.name,\n\t\ttype,\n\t\tid: attr.attributeid,\n\t\titems: null,\n\t\tmultiline: attr.type === 2,\n\t\tmultivalue: attr.multivalue,\n\t\trequired: attr.mandatory === 1,\n\t\treadOnly: attr.permission === 'r',\n\t\ttypeId: attr.type,\n\t\t// Tags and semantics\n\t\tsemanticTypeId: attr.semanticTypeId,\n\t\tspec1: attr.spec1,\n\t\tspec2: attr.spec2,\n\n\t\t// For editing\n\t\tlocalizer: {\n\t\t\tformat: (value: any, opts: any) =>\n\t\t\t\t// @ts-ignore\n\t\t\t\tattributeFormatters[attr.type](value, attr),\n\t\t\t// @ts-ignore\n\t\t\tparse: (value: any) => attributeParsers[attr.type](value),\n\t\t\tinvalid: (value: any) => {\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst valid = attributeValidators[attr.type](value);\n\t\t\t\tif (valid === true) return false;\n\t\t\t\tif (valid instanceof Error) {\n\t\t\t\t\treturn valid.message;\n\t\t\t\t}\n\t\t\t\treturn i18n.t('i18n.invalid');\n\t\t\t},\n\t\t},\n\t\t// @ts-ignore\n\t\tparseOutValue: (value: any) => attributeParsersOut[attr.type](value),\n\t\t// For display\n\t\tformatValue: (value: any, opts: any) =>\n\t\t\t// @ts-ignore\n\t\t\tattributeFormatters[attr.type](value, attr),\n\t\t// @ts-ignore\n\t\tparseInValue: (value: any) => attributeParsers[attr.type](value),\n\t};\n\n\tswitch (type) {\n\t\tcase 'select':\n\t\tcase 'multiselect':\n\t\t\tprops.items = attr.pulldownOptions;\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tprops.type = attr.spec2 && attr.spec2 !== 4 ? 'float' : 'int';\n\t\t\tbreak;\n\t\tcase 'tagVocab':\n\t\t\tprops.type = 'tag';\n\t\t\tbreak;\n\t}\n\n\treturn props;\n};\n\nconst getCellEditor =\n\t(\n\t\tplugin: GridEditor,\n\t\tpermissionsRef: React.RefObject,\n\t): GridEditor['behavior']['dataModel']['getCellEditorAt'] =>\n\t(x, y, declaredEditorName, cellEvent) => {\n\t\tconst permissions = permissionsRef?.current || {};\n\n\t\tconst column = getColumnFromGrid(plugin, x);\n\t\tif (column.properties.readOnly) return null;\n\n\t\tif (y > 0) y--;\n\n\t\tconst data = getDataFromGrid(plugin);\n\t\tconst indexes = getSortIndexesFromGrid(plugin);\n\t\tconst realIndex = indexes[y];\n\t\tconst rowData = data[realIndex];\n\t\tif (!rowData) return;\n\t\tconst assetId = rowData.assetId;\n\t\tconst perms = permissions[assetId];\n\n\t\tif (perms && perms.includes(column.name)) return null;\n\n\t\tlet editorType = column.type || 'textfield';\n\t\tswitch (editorType) {\n\t\t\tcase 'int':\n\t\t\tcase 'float':\n\t\t\t\teditorType = 'number';\n\t\t\t\tbreak;\n\t\t\tcase 'date':\n\t\t\t\teditorType = 'datepicker';\n\t\t\t\tbreak;\n\t\t\tcase 'text':\n\t\t\t\teditorType = 'textfield';\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn plugin.cellEditors.create(\n\t\t\teditorType,\n\t\t\tObject.assign(cellEvent, {\n\t\t\t\titems: column.properties.items,\n\t\t\t}),\n\t\t);\n\t};\n\ninterface GridEditorProviderProps {\n\tonSetData: (data: DataRow[], schema: ColumnSchema) => void;\n\tgridEditor?: GridEditor;\n}\n\nexport const GridStoreProvider = ({\n\tchildren,\n\tonSetData,\n\tgridEditor,\n}: React.PropsWithChildren) => {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\tconst getData = useGetData();\n\tconst saveData = useSaveData();\n\tconst {cart} = useCurrentCart();\n\n\tconst dataRef = useRef([]);\n\tconst rawDataRef = useRef([]);\n\tconst schemaRef = useRef();\n\tconst permissionRef = useRef({});\n\n\tconst progressStore = useProgressStore();\n\n\tconst changeStore = useChangeStore();\n\tconst changeStoreRef = useRef(changeStore);\n\tuseEffect(() => {\n\t\tchangeStoreRef.current = changeStore;\n\t\tgridEditor?.repaint();\n\t}, [changeStore, gridEditor]);\n\n\tconst selectionStore = useSelectionStore();\n\tconst selectionStoreRef = useRef(selectionStore);\n\tuseEffect(() => {\n\t\tselectionStoreRef.current = selectionStore;\n\t}, [selectionStore]);\n\n\tconst attributeSetSelection = useAttributeSetSelectionProvider();\n\n\tconst getGridData = useCallback(\n\t\tasync (data: SearchAssetAttributesSchema[]) => {\n\t\t\tconst size = data.length;\n\t\t\tconst gridData: DataRow[] = [];\n\t\t\t// indexed by asset id- will contain an array of read only field names\n\t\t\tconst permissions: Permissions = {};\n\t\t\tconst attributeTemplates = Object.values(\n\t\t\t\tattributeSetSelection.attributeTemplates,\n\t\t\t).flat();\n\n\t\t\treturn breakItUp(\n\t\t\t\t{\n\t\t\t\t\tsize,\n\t\t\t\t\tamount: 10,\n\t\t\t\t},\n\t\t\t\t(index) => {\n\t\t\t\t\tprogressStore.update(Math.round(((index + 1) / size) * 100));\n\n\t\t\t\t\tconst datum = data[index];\n\t\t\t\t\tconst {assetId, readOnly} = datum;\n\t\t\t\t\tconst rowData = {\n\t\t\t\t\t\tassetId,\n\t\t\t\t\t\tname: datum.name,\n\t\t\t\t\t\tthumbUrl: datum.thumbUrl,\n\t\t\t\t\t};\n\n\t\t\t\t\tdatum.attributes.forEach((record) => {\n\t\t\t\t\t\tconst attr = attributeTemplates.find(\n\t\t\t\t\t\t\t(attr) => attr.attributeid === record.templateId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!attr) return;\n\n\t\t\t\t\t\tconst {name, type} = attr;\n\t\t\t\t\t\t// We will only store fields that are no writable as I would argue\n\t\t\t\t\t\t// there should be less of them than the others (if one is usign grid editor)\n\t\t\t\t\t\tif (!record.writable || readOnly) {\n\t\t\t\t\t\t\t!permissions[assetId]\n\t\t\t\t\t\t\t\t? (permissions[assetId] = [name])\n\t\t\t\t\t\t\t\t: permissions[assetId].push(name);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst values = parseValue(type, record.values);\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\trowData[name] = values;\n\t\t\t\t\t});\n\t\t\t\t\tgridData.push(rowData);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\treturn {data: gridData, permissions};\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[attributeSetSelection.attributeTemplateIds, progressStore.update],\n\t);\n\n\tconst getSchema = useCallback(async () => {\n\t\t//const attributeIds = attributeSet.attributeIds;\n\t\tconst schema: ColumnProps[] = [\n\t\t\t{\n\t\t\t\tname: 'assetId',\n\t\t\t\theader: i18n.t('i18n.assetId'),\n\t\t\t\ttype: 'number',\n\t\t\t\treadOnly: true,\n\t\t\t\tid: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'thumbUrl',\n\t\t\t\theader: i18n.t('i18n.thumbnail'),\n\t\t\t\ttype: 'image',\n\t\t\t\treadOnly: true,\n\t\t\t\tid: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'name',\n\t\t\t\theader: i18n.t('i18n.name'),\n\t\t\t\ttype: 'text',\n\t\t\t\treadOnly: true,\n\t\t\t\tid: 0,\n\t\t\t},\n\t\t].concat(\n\t\t\t// TODO: make sure it is unique\n\t\t\tObject.values(attributeSetSelection.attributeTemplates)\n\t\t\t\t.flat()\n\t\t\t\t.filter((attr) => attr.attributeid > 0)\n\t\t\t\t.map((attr) => getColumnPropsForAttribute(attr)),\n\t\t);\n\t\treturn schema;\n\t}, [attributeSetSelection.attributeTemplates]);\n\n\tconst clone = useCallback(\n\t\tasync (cloneFromId: number, cloneToIds: number[], fields: string[]) => {\n\t\t\tif (!gridEditor) return;\n\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\t\t\tconst permissions = permissionRef.current;\n\t\t\tconst cloneDataSource = data.find((d) => d.assetId === cloneFromId);\n\t\t\tif (!cloneDataSource) return;\n\n\t\t\tconst totalItemsToCloneTo = cloneToIds.length;\n\t\t\tconst columns = getColumnsFromGrid(gridEditor);\n\t\t\tconst columnsByName = getColumnsByName(columns);\n\n\t\t\tconst {round} = Math;\n\n\t\t\tconst updatedData: FormValues[] = [];\n\n\t\t\tprogressStore.update(0);\n\n\t\t\t// First build the data object that will be applied to each row\n\t\t\tconst cloneFromData: FormValues = {};\n\t\t\tfields.forEach((field) => {\n\t\t\t\tconst column = columnsByName[field];\n\t\t\t\tif (!column) return;\n\n\t\t\t\tconst {parseInValue, readOnly, required} = column.properties;\n\t\t\t\tif (readOnly) return;\n\n\t\t\t\tconst value = parseInValue\n\t\t\t\t\t? parseInValue(cloneDataSource[field])\n\t\t\t\t\t: cloneDataSource[field];\n\n\t\t\t\tif (!required || !isEmptyValue(value)) {\n\t\t\t\t\tcloneFromData[field] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Build our updated data by row\n\t\t\treturn breakItUp(\n\t\t\t\t{\n\t\t\t\t\tsize: totalItemsToCloneTo,\n\t\t\t\t},\n\t\t\t\t(index) => {\n\t\t\t\t\tconst assetId = cloneToIds[index];\n\t\t\t\t\tprogressStore.update(\n\t\t\t\t\t\tround(((index + 1) / totalItemsToCloneTo) * 100),\n\t\t\t\t\t);\n\t\t\t\t\tconst _cloneFromData = {...cloneFromData};\n\t\t\t\t\tif (permissions[assetId]) {\n\t\t\t\t\t\tpermissions[assetId].forEach((field) => {\n\t\t\t\t\t\t\tdelete _cloneFromData[field];\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tupdatedData.push({\n\t\t\t\t\t\t...cloneFromData,\n\t\t\t\t\t\tassetId,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tawait updateSpecificValues(\n\t\t\t\t\t\tgridEditor,\n\t\t\t\t\t\tupdatedData,\n\t\t\t\t\t\tdataRef.current,\n\t\t\t\t\t\tchangeStoreRef.current,\n\t\t\t\t\t\tpermissionRef.current,\n\t\t\t\t\t\tprogressStore.update,\n\t\t\t\t\t);\n\t\t\t\t\tprogressStore.update(100);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[gridEditor, progressStore.update],\n\t);\n\n\tconst getCloneData = useCallback(\n\t\t(y: number) => {\n\t\t\tif (!gridEditor) return;\n\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\n\t\t\tconst indexes = getSortIndexesFromGrid(gridEditor);\n\t\t\tconst realIndex = indexes[y];\n\n\t\t\tconst cloneData = data[realIndex];\n\t\t\tconst cloneTargets = [...data];\n\t\t\tcloneTargets.splice(realIndex, 1);\n\t\t\treturn {\n\t\t\t\tcloneData,\n\t\t\t\tcloneFields: getColumnsFromGrid(gridEditor),\n\t\t\t\tcloneSchema: schemaRef.current,\n\t\t\t\tcloneTargets,\n\t\t\t};\n\t\t},\n\t\t[gridEditor],\n\t);\n\n\tconst workerAbortRef = useRef<() => void>();\n\tconst getSelectedValues = useCallback(\n\t\tasync (ignoreParseOut?: boolean) => {\n\t\t\tif (!gridEditor) return;\n\n\t\t\tif (workerAbortRef.current) {\n\t\t\t\tworkerAbortRef.current();\n\t\t\t\tworkerAbortRef.current = undefined;\n\t\t\t}\n\n\t\t\tconst worker = _getSelectedValues(\n\t\t\t\tgridEditor,\n\t\t\t\tselectionStoreRef.current,\n\t\t\t\tpermissionRef.current,\n\t\t\t\tprogressStore.update,\n\t\t\t\tignoreParseOut,\n\t\t\t);\n\t\t\tworkerAbortRef.current = worker.abort;\n\t\t\tconst data = await worker.job;\n\t\t\tif (!data) return;\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.SET_STORED_DATA,\n\t\t\t\tdata: data,\n\t\t\t});\n\n\t\t\tprogressStore.update(100);\n\t\t},\n\t\t[gridEditor, progressStore.update],\n\t);\n\n\tconst resetAllChanges = useCallback(async () => {\n\t\tif (!gridEditor) return;\n\n\t\tawait resetAllValues(\n\t\t\tgridEditor,\n\t\t\tchangeStoreRef.current,\n\t\t\tdataRef.current,\n\t\t\tprogressStore.update,\n\t\t);\n\t\tprogressStore.update(100);\n\n\t\tstate.storedData && getSelectedValues(true);\n\t}, [gridEditor, getSelectedValues, state.storedData, progressStore.update]);\n\n\tconst resetStore = useCallback(() => {\n\t\tif (selectionStoreRef.current.state.inSingleColumn === false) {\n\t\t\tif (workerAbortRef.current) {\n\t\t\t\tworkerAbortRef.current();\n\t\t\t\tworkerAbortRef.current = undefined;\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.CLEAR_STORED_DATA,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tgetSelectedValues();\n\t}, [getSelectedValues]);\n\n\tconst resetSelectedChanges = useCallback(async () => {\n\t\tif (!gridEditor) return;\n\n\t\tawait resetSelectedValues(\n\t\t\tgridEditor,\n\t\t\tselectionStoreRef.current,\n\t\t\tchangeStoreRef.current,\n\t\t\tdataRef.current,\n\t\t\tprogressStore.update,\n\t\t);\n\t\tresetStore();\n\t}, [gridEditor, resetStore, state.storedData, progressStore.update]);\n\n\tconst setData = useCallback(\n\t\tasync (data: DataRow[]) => {\n\t\t\tif (!gridEditor) return;\n\n\t\t\tconst schema = await getSchema();\n\n\t\t\t// Store\n\t\t\tdataRef.current = JSON.parse(JSON.stringify(data));\n\t\t\tschemaRef.current = JSON.parse(JSON.stringify(schema));\n\t\t\t// Reset\n\t\t\tselectionStoreRef.current.reset();\n\t\t\tchangeStoreRef.current.reset();\n\n\t\t\t// Update grid\n\t\t\tonSetData(data, schema);\n\n\t\t\tsetTimeout(() => gridEditor.resized(), 50);\n\t\t},\n\t\t[getSchema, gridEditor, onSetData],\n\t);\n\n\t// When attributeSet or loading state changes, update grid data\n\tuseWhenChangedEffect(\n\t\t[attributeSetSelection.attributeTemplateIds, state.loading] as const,\n\t\tuseCallback(\n\t\t\t([attributeIds, loadingData]) => {\n\t\t\t\tif (loadingData) return;\n\t\t\t\tif (!attributeIds.length) {\n\t\t\t\t\tpermissionRef.current = {};\n\t\t\t\t\tsetData(dataRef.current);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tgetGridData(rawDataRef.current).then((details) => {\n\t\t\t\t\tpermissionRef.current = details.permissions;\n\t\t\t\t\tsetData(details.data);\n\t\t\t\t});\n\t\t\t},\n\t\t\t[setData, state.loading],\n\t\t),\n\t);\n\n\tconst updateData = useCallback(\n\t\tasync (values: FormValues, actions?: FormActions) => {\n\t\t\tif (!gridEditor) return;\n\n\t\t\tawait updateSelectedValues(\n\t\t\t\tgridEditor,\n\t\t\t\tselectionStoreRef.current,\n\t\t\t\tchangeStoreRef.current,\n\t\t\t\tdataRef.current,\n\t\t\t\tvalues,\n\t\t\t\tpermissionRef.current,\n\t\t\t\tactions,\n\t\t\t\tprogressStore.update,\n\t\t\t);\n\t\t\tprogressStore.update(100);\n\n\t\t\tresetStore();\n\t\t},\n\t\t[resetStore, progressStore.update],\n\t);\n\n\t// When gridEditor\n\tuseEffect(() => {\n\t\tif (!gridEditor) return;\n\n\t\tconst images: {\n\t\t\t[asset_id: string]: HTMLImageElement[];\n\t\t} = {};\n\n\t\tconst cellConfig_setAlignment = (config: any, column: any) => {\n\t\t\tif (config.isHandleColumn) {\n\t\t\t\tconfig.halign = 'center';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (column.name === 'assetId') {\n\t\t\t\tconfig.halign = 'center';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Do it like excel/pages\n\t\t\tswitch (column.getType()) {\n\t\t\t\tcase 'date':\n\t\t\t\tcase 'float':\n\t\t\t\tcase 'int':\n\t\t\t\t\tconfig.halign = 'right';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconfig.halign = 'left';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\tconst loadImage = (config: any) => {\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\t\t\tconst sortIndex = getSortIndexesFromGrid(gridEditor);\n\n\t\t\tconst dataCell = config.dataCell;\n\t\t\tconst realIndex = sortIndex[dataCell.y];\n\t\t\tconst rowData = data[realIndex];\n\t\t\tconst primary = rowData.assetId;\n\t\t\tconst maxThumbnailHeight = 150;\n\t\t\tconst maxThumbnailWidth = 150;\n\n\t\t\tlet rowImages = images[primary];\n\t\t\tif (!rowImages) {\n\t\t\t\trowImages = images[primary] = [];\n\t\t\t}\n\n\t\t\tlet img = rowImages[dataCell.x];\n\n\t\t\t// Already cached\n\t\t\tif (img) {\n\t\t\t\tconfig.value = img;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New image\n\t\t\timg = new Image();\n\t\t\timg.onload = () => {\n\t\t\t\tconst ratio = img.naturalWidth / img.naturalHeight;\n\t\t\t\tlet h = maxThumbnailHeight;\n\t\t\t\tlet w = h * ratio;\n\n\t\t\t\tif (w > maxThumbnailWidth) {\n\t\t\t\t\tw = maxThumbnailWidth;\n\t\t\t\t\th = w / ratio;\n\t\t\t\t}\n\t\t\t\timg.height = h;\n\t\t\t\timg.width = w;\n\t\t\t\tgridEditor.repaint();\n\t\t\t};\n\t\t\timg.src = config.value;\n\n\t\t\t// Cache and assign\n\t\t\trowImages[dataCell.x] = config.value = img;\n\t\t};\n\n\t\tconst cellConfig_setColor = (config: any, column: any) => {\n\t\t\tif (!config.isUserDataArea) return;\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\t\t\tconst sortIndex = getSortIndexesFromGrid(gridEditor);\n\t\t\tconst rowData = data[sortIndex[config.dataCell.y]];\n\t\t\tconst columnProps = column.properties;\n\t\t\tconst perms = permissionRef.current[rowData.assetId];\n\n\t\t\tconst {properties} = gridEditor;\n\t\t\t// Uneditable cell\n\t\t\tif (\n\t\t\t\tcolumn.index < properties.fixedColumnCount ||\n\t\t\t\t(perms && perms.includes(column.name))\n\t\t\t) {\n\t\t\t\tconfig.backgroundColor = properties.cellReadOnlyColor;\n\t\t\t} else if (changeStoreRef.current.changed(rowData.assetId, column.name)) {\n\t\t\t\tconfig.backgroundColor = properties.cellChangedColor;\n\t\t\t}\n\t\t\t// Mandatory cell\n\t\t\telse if (columnProps.required) {\n\t\t\t\tconfig.backgroundColor = properties.cellMandatoryColor;\n\t\t\t}\n\t\t\t// Default background color\n\t\t\telse {\n\t\t\t\tconfig.backgroundColor = properties.cellDefaultColor;\n\t\t\t}\n\t\t};\n\n\t\tconst getCellRenderer = (config: any, declaredRendererName: any) => {\n\t\t\tconst point = config.dataCell;\n\n\t\t\tconst column = gridEditor.behavior.getColumn(point.x);\n\n\t\t\tcellConfig_setAlignment(config, column);\n\t\t\tcellConfig_setColor(config, column);\n\n\t\t\t// Not a data cell\n\t\t\tif (!config.isUserDataArea) {\n\t\t\t\t// No selection checkboxes at all\n\t\t\t\tif (gridEditor.properties.rowSelection) {\n\t\t\t\t\tif (point.x === -2) {\n\t\t\t\t\t\tconfig.centerIcon = config.leftIcon = null;\n\t\t\t\t\t\t// config.bounds.width = 40;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// No checkboxes on the data rows (maintain the select all one in the top left corner)\n\t\t\t\telse if (config.isHandleColumn) {\n\t\t\t\t\t// Header - center the icon\n\t\t\t\t\tif (config.gridCell.y === 0) {\n\t\t\t\t\t\tconfig.centerIcon = config.leftIcon;\n\t\t\t\t\t}\n\t\t\t\t\tconfig.leftIcon = null;\n\t\t\t\t\t// config.bounds.width = 40;\n\t\t\t\t}\n\t\t\t\treturn gridEditor.cellRenderers.get(declaredRendererName);\n\t\t\t}\n\n\t\t\t// This is my own deal that I will be submitting as a pull request when they merge the refactor branch into master\n\t\t\tconfig.multiline = true;\n\n\t\t\t// Check for schema formatting\n\t\t\tif (column.properties.formatValue) {\n\t\t\t\tconfig.value = column.properties.formatValue(config.value);\n\t\t\t}\n\n\t\t\tif (column.type === 'image') {\n\t\t\t\t// Value should now be an image url\n\t\t\t\tloadImage(config);\n\t\t\t}\n\n\t\t\t// Switch over field name\n\t\t\tswitch (column.getType()) {\n\t\t\t\tcase 'image':\n\t\t\t\t\treturn gridEditor.cellRenderers.get('ThumbnailCell');\n\t\t\t\tdefault:\n\t\t\t\t\treturn gridEditor.cellRenderers.get(declaredRendererName);\n\t\t\t}\n\t\t};\n\n\t\tgridEditor.behavior.dataModel.getCell = getCellRenderer;\n\t\tgridEditor.behavior.dataModel.getCellEditorAt = getCellEditor(\n\t\t\tgridEditor,\n\t\t\tpermissionRef,\n\t\t);\n\n\t\tconst handleCellClicked = (event: HypergridCellEvent) => {\n\t\t\tconst {detail} = event;\n\n\t\t\tlet point = detail.gridCell;\n\t\t\tif (!point || !gridEditor.isGridRow(point.y)) return;\n\n\t\t\tpoint = getDataPointFromCellEvent(event);\n\n\t\t\tconst indexes = getSortIndexesFromGrid(gridEditor);\n\t\t\tconst realIndex = indexes[point.y];\n\t\t\tconst rowData = getDataFromGrid(gridEditor)[realIndex];\n\t\t\tif (!rowData) return;\n\n\t\t\tconst column = getColumnFromGrid(gridEditor, point.x);\n\t\t\tif (column.name === 'thumbUrl') {\n\t\t\t\tdispatcher.trigger('asset:tagPanel:grid:preview', rowData.assetId);\n\t\t\t}\n\t\t};\n\n\t\tconst handleCellEditorDataChange = (event: HypergridCellEvent) => {\n\t\t\tconst {detail} = event;\n\t\t\tconst {input} = detail;\n\t\t\tconst {name} = input.column;\n\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\t\t\tconst sortIndex = getSortIndexesFromGrid(gridEditor);\n\n\t\t\tconst realIndex = sortIndex[input.event.dataCell.y];\n\t\t\tconst rowData = data[realIndex];\n\n\t\t\tconst {assetId} = rowData;\n\t\t\tconst originalValue = dataRef.current.find(\n\t\t\t\t(data) => data.assetId === assetId,\n\t\t\t)?.[name];\n\n\t\t\t!checkEquality(detail.newValue, originalValue)\n\t\t\t\t? changeStoreRef.current.add(assetId, name)\n\t\t\t\t: changeStoreRef.current.remove(assetId, name);\n\n\t\t\tresetStore();\n\n\t\t\tgridEditor.repaint();\n\t\t\tsetTimeout(() => {\n\t\t\t\tgridEditor.takeFocus();\n\t\t\t}, 51);\n\t\t};\n\n\t\tconst handleResize = () => {\n\t\t\t// DAM-18842\n\t\t\tconst {sbHScroller, sbVScroller} = gridEditor;\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (sbHScroller) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: ACTIONS.SET_OVERFLOW_X,\n\t\t\t\t\t\toverflown: sbHScroller.contentSize > sbHScroller.containerSize,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (sbVScroller) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: ACTIONS.SET_OVERFLOW_Y,\n\t\t\t\t\t\toverflown: sbVScroller.contentSize > sbVScroller.containerSize,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 51);\n\t\t};\n\n\t\tgridEditor.addEventListener('fin-click', handleCellClicked);\n\t\tgridEditor.addEventListener(\n\t\t\t'fin-editor-data-change',\n\t\t\thandleCellEditorDataChange,\n\t\t);\n\t\tgridEditor.addEventListener('fin-grid-resized', handleResize);\n\n\t\treturn () => {\n\t\t\tgridEditor.removeEventListener('fin-click', handleCellClicked);\n\t\t\tgridEditor.removeEventListener(\n\t\t\t\t'fin-editor-data-change',\n\t\t\t\thandleCellEditorDataChange,\n\t\t\t);\n\t\t\tgridEditor.removeEventListener('fin-grid-resized', handleResize);\n\t\t};\n\t}, [gridEditor, getSelectedValues, resetStore]);\n\n\t// When selection updates\n\tuseEffect(() => {\n\t\tresetStore();\n\t}, [selectionStore.state.cells, selectionStore.state.inSingleColumn]);\n\n\t// Listen for clone\n\tuseEffect(() => {\n\t\tif (!gridEditor) return;\n\n\t\tconst listener = (assetIds: number[], fields: string[]) => {\n\t\t\tconst {inSingleRow} = selectionStoreRef.current.state;\n\t\t\tif (inSingleRow === false) return;\n\n\t\t\tconst indexes = getSortIndexesFromGrid(gridEditor);\n\t\t\tconst realIndex = indexes[inSingleRow];\n\n\t\t\tconst data = getDataFromGrid(gridEditor);\n\t\t\tconst cloneData = data[realIndex];\n\t\t\tclone(cloneData.assetId, assetIds, fields);\n\t\t};\n\t\tdispatcher.on('asset:tagPanel:grid:clone:submit:confirmed', listener);\n\t\treturn () => {\n\t\t\tdispatcher.off('asset:tagPanel:grid:clone:submit:confirmed', listener);\n\t\t};\n\t}, [gridEditor, clone]);\n\n\t// When cart updates\n\tuseWhenChangedEffect(\n\t\t[cart.assetCount, cart.hasAssets],\n\t\tuseCallback(\n\t\t\t([assetCount, hasAssets]) => {\n\t\t\t\tif (!gridEditor || !hasAssets) return;\n\n\t\t\t\tprogressStore.update(0);\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: ACTIONS.SET_LOADING,\n\t\t\t\t\tloading: true,\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tconst data = await getData();\n\t\t\t\t\trawDataRef.current = data;\n\t\t\t\t\tconst gridDetails = await getGridData(data);\n\t\t\t\t\tdataRef.current = JSON.parse(JSON.stringify(gridDetails.data));\n\t\t\t\t\tpermissionRef.current = gridDetails.permissions;\n\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: ACTIONS.SET_LOADING,\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t});\n\t\t\t\t}, 500);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tdataRef.current = [];\n\t\t\t\t\tpermissionRef.current = {};\n\t\t\t\t};\n\t\t\t},\n\t\t\t[gridEditor, progressStore.update, setData, getGridData],\n\t\t),\n\t\t{\n\t\t\texecuteAtMount: true,\n\t\t},\n\t);\n\n\tconst save = useCallback(async () => {\n\t\tif (!gridEditor) return;\n\n\t\tconst data = getDataFromGrid(gridEditor);\n\t\tconst columns = getColumnsFromGrid(gridEditor);\n\t\tconst columnsByName = getColumnsByName(columns);\n\n\t\tif (workerAbortRef.current) {\n\t\t\tworkerAbortRef.current();\n\t\t\tworkerAbortRef.current = undefined;\n\t\t}\n\n\t\tdispatch({\n\t\t\ttype: ACTIONS.SET_SAVING,\n\t\t\tsaving: true,\n\t\t});\n\n\t\tsetTimeout(async () => {\n\t\t\tconst updatedData: SetAssetAttributesSchema[] = [];\n\t\t\tconst changes = changeStoreRef.current.state.changes;\n\n\t\t\tconst assetIds = Object.keys(changes) as string[];\n\t\t\tconst size = assetIds.length;\n\n\t\t\tawait breakItUp(\n\t\t\t\t{\n\t\t\t\t\tsize,\n\t\t\t\t},\n\t\t\t\t(index) => {\n\t\t\t\t\tconst assetId = parseInt(assetIds[index] as any);\n\t\t\t\t\tconst attributes: SetAssetAttributesAttribute[] = [];\n\n\t\t\t\t\tconst rowData = data.find((d) => d.assetId === assetId);\n\t\t\t\t\tif (!rowData) return;\n\n\t\t\t\t\tchanges[assetId].forEach((field) => {\n\t\t\t\t\t\tconst column = columnsByName[field];\n\t\t\t\t\t\tif (!column) return;\n\n\t\t\t\t\t\tconst {properties} = column;\n\t\t\t\t\t\tconst value = properties.parseOutValue\n\t\t\t\t\t\t\t? properties.parseOutValue(rowData[field])\n\t\t\t\t\t\t\t: rowData[field];\n\n\t\t\t\t\t\tattributes.push({\n\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\ttemplateId: properties.id,\n\t\t\t\t\t\t\tvalues: Array.isArray(value) ? value : [value],\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tattributes.length &&\n\t\t\t\t\t\tupdatedData.push({\n\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tawait saveData(updatedData, progressStore);\n\t\t\tdispatcher.trigger('asset:editor:grid:edited');\n\n\t\t\t// Reflect on our stored raw data\n\t\t\tconst updatedDataSize = updatedData.length;\n\t\t\tawait breakItUp(\n\t\t\t\t{\n\t\t\t\t\tsize: updatedDataSize,\n\t\t\t\t},\n\t\t\t\t(index) => {\n\t\t\t\t\tconst item = updatedData[index];\n\t\t\t\t\tconst rawData = rawDataRef.current.find(\n\t\t\t\t\t\t(d) => d.assetId === item.assetId,\n\t\t\t\t\t);\n\t\t\t\t\tif (!rawData) return;\n\t\t\t\t\titem.attributes.forEach((attr) => {\n\t\t\t\t\t\tconst rawAttr = rawData.attributes.find(\n\t\t\t\t\t\t\t(rawAttr) => rawAttr.templateId === attr.templateId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!rawAttr) return;\n\t\t\t\t\t\trawAttr.values = attr.values;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t\t// Store\n\t\t\tdataRef.current = JSON.parse(JSON.stringify(data));\n\t\t\t// Reset\n\t\t\tselectionStoreRef.current.reset();\n\t\t\tchangeStoreRef.current.reset();\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.SET_SAVING,\n\t\t\t\tsaving: false,\n\t\t\t});\n\t\t}, 100);\n\t}, [gridEditor, progressStore.update]);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n","import React, {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseReducer,\n\tuseRef,\n} from 'react';\n\nimport {ACTIONS} from './constants';\n\nimport _ from 'underscore';\n\nimport reducer, {initialState} from './reducer';\n\ntype StoreContextType = {\n\tstate: typeof initialState;\n\n\tupdate(progress: number): void;\n};\n\nconst StoreContext = createContext({} as any);\n\nexport const useProgressStore = () =>\n\tuseContext(StoreContext);\n\nexport const ProgressStoreProvider = ({\n\tchildren,\n}: React.PropsWithChildren) => {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\tconst updateTimeoutRef = useRef();\n\tconst updateRequestedAtRef = useRef(0);\n\n\tconst update = useCallback((progress: number) => {\n\t\tupdateTimeoutRef.current && clearTimeout(updateTimeoutRef.current);\n\n\t\tconst now = Date.now();\n\t\tif (!updateRequestedAtRef.current) updateRequestedAtRef.current = now;\n\n\t\tif (now - updateRequestedAtRef.current > 20 || progress === 100) {\n\t\t\tdispatch({type: ACTIONS.UPDATE, progress});\n\t\t\tupdateTimeoutRef.current = setTimeout(() => {\n\t\t\t\tdispatch({type: ACTIONS.UPDATE, progress});\n\t\t\t}, 30);\n\t\t}\n\n\t\tif (progress === 100) {\n\t\t\tupdateRequestedAtRef.current = 0;\n\t\t}\n\n\t\treturn () => {\n\t\t\tupdateTimeoutRef.current && clearTimeout(updateTimeoutRef.current);\n\t\t};\n\t}, []);\n\n\tconst storeValue: StoreContextType = useMemo(\n\t\t() => ({\n\t\t\tstate,\n\t\t\tupdate,\n\t\t}),\n\t\t[state, update],\n\t);\n\n\treturn (\n\t\t{children}\n\t);\n};\n","import React, {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseReducer,\n} from 'react';\nimport equal from 'fast-deep-equal';\n\nimport {ACTIONS} from './constants';\nimport reducer, {initialState, Cells} from './reducer';\nimport {inSingleColumn, inSingleRow} from './utils';\nimport {HypergridCellEvent} from '../../types';\n\nimport PointsWebWorker from '@netx/core-grid/lib/webworkers/selection_points';\nimport {getInlineWorker} from '@netx/core/lib/underscore-netx';\n\nimport {getColumnsByName} from '../../utils';\n\ntype StoreContextType = {\n\t// dispatch: React.Dispatch;\n\tstate: typeof initialState;\n\n\tgetPoints(): Promise;\n\treset(): void;\n\tselectAll(): void;\n};\n\nconst StoreContext = createContext({} as any);\n\nexport const useSelectionStore = () =>\n\tuseContext(StoreContext);\n\nexport const SelectionStoreProvider = ({\n\tchildren,\n\tgridEditor,\n}: React.PropsWithChildren) => {\n\t// TODO: Ideally what we would do with all this data is start compressing selection down\n\t// as we check for loose cells - if someone loosely selects an entire column or row, remove\n\t// the selection from the loose data and add it it columns/rows as necessary\n\t// But hypergrid stores selections as custom rects that represent start.y, end.y, start.x, end.x\n\t// so we would need to tap deeper into hypergrid to recreate these rectangles as needed - ultimately\n\t// it proves to take a lot of work for something that may not happen and if it does, the chances\n\t// the user is dealing with a small data set is very high\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\tconst _inSingleColumn = inSingleColumn(gridEditor);\n\tconst _inSingleRow = inSingleRow(gridEditor);\n\n\tconst [progress, setProgress] = React.useState(null);\n\tconst timeoutRef = React.useRef();\n\n\tconst handleSelectionChangeCheck = useCallback(\n\t\t(event: HypergridCellEvent) => {\n\t\t\tif (gridEditor.selectionModel.allRowsSelected) {\n\t\t\t\tdispatch({type: ACTIONS.SET_ALL, all: true});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t[gridEditor],\n\t);\n\n\tconst handleColumnSelectionChange = useCallback(\n\t\tasync (event: HypergridCellEvent) => {\n\t\t\tif (!handleSelectionChangeCheck(event)) return;\n\n\t\t\tconst {detail} = event;\n\t\t\tconst {columns} = gridEditor.behavior;\n\n\t\t\t// No need to update (not sure why hypergrid doesn't check this)\n\t\t\tconst columnNames = detail.columns.map((column) => columns[column]?.name);\n\t\t\tif (\n\t\t\t\tcolumnNames.length === 1 &&\n\t\t\t\tstate.columns.length === 1 &&\n\t\t\t\tcolumnNames[0] === state.columns[0]\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.SET_COLUMNS,\n\t\t\t\tcolumns: columnNames,\n\t\t\t\thasRows: !!detail.rows.length,\n\t\t\t\thasSelections: !!detail.selections.length,\n\t\t\t});\n\t\t},\n\t\t[handleSelectionChangeCheck, state.columns],\n\t);\n\n\tconst handleRowSelectionChange = useCallback(\n\t\tasync (event: HypergridCellEvent) => {\n\t\t\tif (!handleSelectionChangeCheck(event)) return;\n\n\t\t\tconst {detail} = event;\n\n\t\t\t// No need to update (not sure why hypergrid doesn't check this)\n\t\t\tif (\n\t\t\t\tdetail.rows.length === 1 &&\n\t\t\t\tstate.rows.length === 1 &&\n\t\t\t\tdetail.rows[0] === state.rows[0]\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.SET_ROWS,\n\t\t\t\thasColumns: !!detail.columns.length,\n\t\t\t\thasSelections: !!detail.selections.length,\n\t\t\t\trows: detail.rows,\n\t\t\t});\n\t\t},\n\t\t[handleSelectionChangeCheck, state.rows],\n\t);\n\n\tconst handleSelectionChange = useCallback(\n\t\tasync (event: HypergridCellEvent) => {\n\t\t\tif (!handleSelectionChangeCheck(event)) return;\n\n\t\t\tconst {detail} = event;\n\n\t\t\tconst selections = gridEditor.getSelections();\n\t\t\tconst selectionCount = selections.length;\n\n\t\t\tconst cells: Cells = {};\n\n\t\t\t// No sense in doing any of this if the grid isn't even claiming a selection\n\t\t\tif (!selectionCount) {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: ACTIONS.SET_CELLS,\n\t\t\t\t\tcells,\n\t\t\t\t\thasRows: !!detail.rows.length,\n\t\t\t\t\thasColumns: !!detail.columns.length,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst columnCount = gridEditor.numColumns;\n\t\t\tconst rowCount = gridEditor.numRows;\n\n\t\t\t// Unfortuantely it will trigger this event for out of bound cells (cells that you may not think exist)\n\t\t\t// If I recall correctly this was on their radar but someone said that clicking in out of bound area\n\t\t\t// was to signify you want to add columns or rows - it would be nice if they just dispatched a different event\n\t\t\t// but such is life.\n\t\t\tfor (let i = 0; i < selectionCount; i++) {\n\t\t\t\tconst rect = selections[i];\n\t\t\t\tlet endX = rect.right;\n\t\t\t\tlet endY = rect.bottom;\n\t\t\t\tconst startX = rect.left;\n\t\t\t\tlet startY = rect.top;\n\t\t\t\tlet xSelected = 0;\n\t\t\t\tlet ySelected = 0;\n\n\t\t\t\t// Out of bounds - 0 cells are selected for this rect\n\t\t\t\tif (startX >= columnCount || endY < 0) return;\n\n\t\t\t\t//////////////////////////////\n\t\t\t\t// Y AXIS\n\t\t\t\t//////////////////////////////\n\t\t\t\t// If filters are on, this is absolutely necessary\n\t\t\t\t// The column header being clicked causes an entire column to be selected and a sepearate event\n\t\t\t\t// Adjust start y\n\t\t\t\tif (startY < 0) startY = 0;\n\t\t\t\t// Adjust end y\n\t\t\t\tif (endY >= rowCount) endY = rowCount - 1;\n\t\t\t\t// Our selection on the y axis\n\t\t\t\tySelected = endY - startY;\n\t\t\t\t// 0 cells selected for this rect\n\t\t\t\tif (ySelected < 0) return;\n\t\t\t\t//////////////////////////////\n\t\t\t\t// !Y AXIS\n\t\t\t\t//////////////////////////////\n\n\t\t\t\t//////////////////////////////\n\t\t\t\t// X AXIS\n\t\t\t\t//////////////////////////////\n\t\t\t\t// Clicking the row header (which would normally be out of bounds for the x axis)\n\t\t\t\t// causes an entire row selection and a spearate event - so we only need to worry about the right side bounds\n\t\t\t\t// Adjust end x\n\t\t\t\tif (endX >= columnCount) endX = columnCount - 1;\n\t\t\t\t// Our selection on the x axis\n\t\t\t\txSelected = endX - startX;\n\t\t\t\t// 0 cells selected for this rect\n\t\t\t\tif (xSelected < 0) return;\n\t\t\t\t//////////////////////////////\n\t\t\t\t// !X AXIS\n\t\t\t\t//////////////////////////////\n\n\t\t\t\t// DO NOT DO THIS- YOU HAVE NO IDEA THE SIZE OF AN ARRAY YOU MIGHT CREATE\n\t\t\t\t// Store points\n\t\t\t\t// for( var x = startX; x <= endX; x++ ) {\n\t\t\t\t// \tfor( var y = startY; y <= endY; y++ ) {\n\t\t\t\t// \t\tvar point = { x: x, y: y };\n\t\t\t\t// \t\tif( !_.findWhere( self.cells, point ) ) {\n\t\t\t\t// \t\t\tself.cells.push( point );\n\t\t\t\t// \t\t}\n\t\t\t\t// \t}\n\t\t\t\t// }\n\n\t\t\t\t// Instead- let's just track the rows and columns and not each individual point\n\t\t\t\t// TODO: what would be nice is if we could determine whole row / column selections, add them to the selectedRows / selectedColumns array and remove them from\n\t\t\t\t// the selection. Unfortunately hypergrid deals in rectangles with bounds - so it gets complicated - you would need to go through them\n\t\t\t\t// all, recreate the rectangle without the row / column. This would be preferred - but not something I want to spend the time on right now\n\t\t\t\t// as it could utlimately result in just as much (if not more) lag\n\t\t\t\t// The important thing here is that even though we are storing (potentially) a lot of data - the calculations to determine selections are better\n\t\t\t\t// and will not have to parse over each point (in most cases)\n\t\t\t\tfor (let y = startY; y <= endY; y++) {\n\t\t\t\t\tif (cells[y] === void 0) cells[y] = [];\n\t\t\t\t\tfor (let x = startX; x <= endX; x++) {\n\t\t\t\t\t\tif (cells[y].indexOf(x) < 0) cells[y].push(x);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (state.count === 1 && equal(cells, state.cells)) return;\n\n\t\t\tdispatch({\n\t\t\t\ttype: ACTIONS.SET_CELLS,\n\t\t\t\tcells,\n\t\t\t\thasRows: !!detail.rows.length,\n\t\t\t\thasColumns: !!detail.columns.length,\n\t\t\t});\n\t\t},\n\t\t[handleSelectionChangeCheck, state.count, state.cells],\n\t);\n\n\t// Hook up listeners\n\tuseEffect(() => {\n\t\tif (!gridEditor) return;\n\n\t\tgridEditor.addEventListener(\n\t\t\t'fin-column-selection-changed',\n\t\t\thandleColumnSelectionChange,\n\t\t);\n\t\tgridEditor.addEventListener('fin-selection-changed', handleSelectionChange);\n\t\tgridEditor.addEventListener(\n\t\t\t'fin-row-selection-changed',\n\t\t\thandleRowSelectionChange,\n\t\t);\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\tgridEditor.removeEventListener(\n\t\t\t\t\t'fin-column-selection-changed',\n\t\t\t\t\thandleColumnSelectionChange,\n\t\t\t\t);\n\t\t\t\tgridEditor.removeEventListener(\n\t\t\t\t\t'fin-selection-changed',\n\t\t\t\t\thandleSelectionChange,\n\t\t\t\t);\n\t\t\t\tgridEditor.removeEventListener(\n\t\t\t\t\t'fin-row-selection-changed',\n\t\t\t\t\thandleRowSelectionChange,\n\t\t\t\t);\n\t\t\t} catch (ex) {}\n\t\t};\n\t}, [\n\t\thandleColumnSelectionChange,\n\t\thandleSelectionChange,\n\t\thandleRowSelectionChange,\n\t]);\n\n\tuseEffect(() => {\n\t\ttimeoutRef.current && clearTimeout(timeoutRef.current);\n\n\t\tif (!gridEditor) return;\n\n\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\tconst singleColumn = _inSingleColumn(state);\n\t\t\tconst singleRow = _inSingleRow(state);\n\n\t\t\tconst columns = gridEditor.getColumns();\n\n\t\t\tconst {numColumns, numRows} = gridEditor;\n\n\t\t\tlet count = 0;\n\t\t\tif (state.all) {\n\t\t\t\tcount = numRows * numColumns;\n\t\t\t} else {\n\t\t\t\tconst cells = state.cells;\n\t\t\t\tlet cellCount = 0;\n\n\t\t\t\t// Do not include cells within selected columns/rows\n\t\t\t\tfor (const key in cells) {\n\t\t\t\t\tif (!cells.hasOwnProperty(key)) continue;\n\n\t\t\t\t\tconst row = parseInt(key);\n\t\t\t\t\tif (state.rows.includes(row)) continue;\n\n\t\t\t\t\tconst cols = cells[key];\n\t\t\t\t\tfor (let i = 0, c = cols.length; i < c; i++) {\n\t\t\t\t\t\tconst column = columns[cols[i]];\n\t\t\t\t\t\tif (!column || !state.columns.includes(column.name)) cellCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Total cells that will be collected\n\t\t\t\tcount =\n\t\t\t\t\tcellCount +\n\t\t\t\t\tstate.columnCount * numRows +\n\t\t\t\t\tstate.rowCount * numColumns -\n\t\t\t\t\tstate.columnCount * state.rowCount;\n\t\t\t}\n\n\t\t\tdispatch({type: ACTIONS.SET_COUNT, count, singleColumn, singleRow});\n\t\t}, 50);\n\t}, [state.all, state.cells, state.columns, state.rows, gridEditor]);\n\n\tconst reset = useCallback(() => {\n\t\tdispatch({type: ACTIONS.RESET});\n\t\tgridEditor.selectionModel.clear();\n\t\tgridEditor.repaint();\n\t}, [gridEditor]);\n\n\tconst selectAll = useCallback(() => {\n\t\tif (state.all) return;\n\t\tgridEditor.toggleSelectAllRows();\n\t}, [state.all, gridEditor]);\n\n\tconst getPoints = useCallback((): Promise => {\n\t\t// 10,000 rows at 1,000 columns (10,000,000 points) takes 56ms\n\t\t// Which is 3.5 times longer than the refresh rete (16ms)\n\t\t// Using a web worker increaes this delay to 200ms but does not cause any\n\t\t// hesitation in the browser\n\n\t\t// 30,000 rows at 250 columns (7,500,000 points) 298ms\n\t\t// 20,000 rows at 500 columns (10,000,000 points) 264ms\n\t\t// 15,000 rows at 1000 columns (15,000,000 points) 1.378s\n\n\t\tconst columnsByName = getColumnsByName(gridEditor.behavior.columns);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst worker = getInlineWorker(PointsWebWorker);\n\t\t\t// @ts-ignore\n\t\t\tworker.onmessage = _.throttle(\n\t\t\t\tfunction (e: any) {\n\t\t\t\t\tconst {data} = e;\n\t\t\t\t\tsetProgress(data.progress);\n\t\t\t\t\tif (data.progress === 100) {\n\t\t\t\t\t\tsetProgress(100);\n\t\t\t\t\t\tresolve(data.points);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t16,\n\t\t\t\t{trailing: true},\n\t\t\t);\n\n\t\t\tworker.postMessage({\n\t\t\t\tall: state.all,\n\t\t\t\tcells: state.cells,\n\t\t\t\tcolumns: state.columns.map(\n\t\t\t\t\t(columnName) => columnsByName[columnName]?._index,\n\t\t\t\t),\n\t\t\t\trows: state.rows,\n\t\t\t\ttotalColumns: gridEditor.numColumns,\n\t\t\t\ttotalRows: gridEditor.numRows,\n\t\t\t});\n\t\t});\n\t}, [state.all, state.cells, state.columns, state.rows, gridEditor]);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n"],"names":["withForm","_ref","onChange","form","props","_objectWithoutProperties","_excluded","useEffect","values","attrData","name","React","Theme","QueryClientProvider","client","queryClient","LegacyFormAttribute","_extends","limitHeightToContainer","matchContainerHeight","hideLabel","value","withStyles","theme","createStyles","iconWrapper","background","palette","warning","main","borderRadius","width","height","display","alignItems","justifyContent","color","default","classes","disabled","label","anchorEl","setAnchorEl","useState","open","setOpen","chipRef","changeStore","useChangeStore","selectionStore","useSelectionStore","gridStore","useGridStore","actions","useMemo","icon","MousePointerIcon","i18n","cb","resetSelectedChanges","enableTest","state","count","TimesIcon","resetAllChanges","filter","action","handleClose","useCallback","event","reason","handleExited","handleShowClick","stopPropagation","preventDefault","length","current","handleActionClick","Chip","avatar","Avatar","meshAvatar","variant","deleteIcon","className","FontAwesomeIcon","CaretDownIcon","onDelete","undefined","onClick","ref","Menu","onClose","TransitionProps","onExit","map","MenuItem","key","text","GridEditor","rootRef","useRef","editorOpen","setEditorOpen","confirm","useConfirmation","grid","selection","changes","progress","useProgressStore","hasChanges","singleRow","inSingleRow","disable","loading","saving","working","indeterminateProgress","useWhenChangedEffect","handleClone","dispatcher","getCloneData","message","then","handleEditClick","handleInputLineSubmit","async","data","updateData","handleSideEditorSubmit","_Header","Header","onClone","onEdit","_SideEditor","sideEditor","SideEditor","active","onSubmit","DrawerProps","onCollapseToggle","overflowParent","_SingleFieldEditor","SingleFieldEditor","Paper","clsx","root","overflownX","overflownY","wrapper","LinearProgress","Dialog","title","disableEscapeKeyDown","preventBackdropClose","DialogContentText","flex","minHeight","overflow","position","borderTop","custom","border","left","top","marginBottom","borderLeft","right","marginRight","paddingBottom","paper","_objectSpread","mixins","absoluteFill","mode","bottom","opacity","backgroundColor","pointerEvents","content","flexDirection","marginTop","zIndex","closedActions","loadingOverlay","loadingContainer","padding","spacing","MainHeader","hasSelection","controls","Selection","setSelection","counts","CountChip","onClear","reset","ChangesChip","Button","startIcon","PencilIcon","CloneIcon","save","IconButton","close","marginLeft","maxWidth","minWidth","StyledBulkEditorComponent","attributesWrapper","BulkEditorComponent","BulkEditorDrawer","withDrawer","setWorking","attributeProvider","useAttributeProvider","multipleValues","readOnlyValues","storedData","Object","keys","attr","find","attributeid","parseValue","type","readOnly","useForm","updatedValues","submitData","forEach","id","parseInt","toString","attributesSingleton","fieldAction","updateType","isEmptyValue","get","getSubmitData","updatedActions","inputForm","getInputFormObject","ids","lookup","lookupsAllowed","attributesWorking","useMetadataLookups","attributeTemplates","attributeIds","onLookup","attributeId","lookupValue","setValue","hasChanged","useUpdateEffect","originalValuesRef","multipleValuesRef","executeAtMount","setTimeout","appendable","clearable","errors","hideSetSelector","isLoading","limitToValues","originalValues","readOnlyAttributes","_ref2","_excluded2","editorAppend","setEditorAppend","setHasChanges","dataActive","setDataActive","getSelectedValues","resetStore","handleChange","handleEntered","appending","submitLabel","hideReadOnlyAttributes","cancelAsClose","headerActions","AppendAction","onToggle","on","keepMounted","onEntered","onExited","DrawerVariant","maxHeight","forceScrollable","paddingRight","inputWrapper","secondary","submit","InputLine","setAppending","canAppend","setCanAppend","selectedField","inSingleColumn","canSubmit","isValid","multipleFieldsSelected","isSubmitting","getByName","system","fieldLength","fieldName","actionsRef","_grid$state$storedDat","_grid$state$storedDat2","ATTRIBUTE_APPENDABLE_TYPES","permission","handleSubmit","field","_grid$state$storedDat3","_grid$state$storedDat4","Form","alignActions","enforceMandatory","originalValue","SubmitButton","Typography","messages","resetOnSubmit","Sorters","ClientSort","server","ServerSort","withErrorBoundary","elementRef","pluginRef","configurationRef","pluginReady","setPluginReady","schemaRef","columnsRef","defaultSelection","plugin","global","fin","Hypergrid","cellKeyboardNavigationHack","scrollHack","addProperties","properties","updateConfiguration","getDefaults","fixedColumnCount","setState","_columns","columns","themeListener","updateSchema","removeAllEventListeners","terminate","div","hasChildNodes","lastChild","removeChild","ex","handleSetData","schema","_columnsRef$current","setData","header","installPlugins","fireSyntheticGridResizedEvent","Event","AttributeProvider","AttributeSetsProvider","objectType","AttributeSetSelectionProvider","userPrefKey","ProgressStoreProvider","ChangeStoreProvider","gridEditor","SelectionStoreProvider","GridStoreProvider","onSetData","StoreContext","createContext","useContext","children","dispatch","useReducer","reducer","initialState","ACTIONS","primary","changed","includes","addFieldTimeout","addField","toAdd","clearTimeout","push","removeFieldTimeout","removeField","toRemove","Provider","add","remove","getData","useGetData","saveData","useSaveData","cart","useCurrentCart","dataRef","rawDataRef","permissionRef","progressStore","changeStoreRef","repaint","selectionStoreRef","attributeSetSelection","useAttributeSetSelectionProvider","getGridData","size","gridData","permissions","flat","breakItUp","amount","index","update","Math","round","datum","assetId","rowData","thumbUrl","attributes","record","templateId","writable","attributeTemplateIds","getSchema","concat","types","items","multiline","multivalue","required","mandatory","typeId","semanticTypeId","spec1","spec2","localizer","format","opts","attributeFormatters","parse","attributeParsers","invalid","valid","attributeValidators","Error","parseOutValue","attributeParsersOut","formatValue","parseInValue","pulldownOptions","getColumnPropsForAttribute","clone","cloneFromId","cloneToIds","fields","getDataFromGrid","cloneDataSource","d","totalItemsToCloneTo","getColumnsFromGrid","columnsByName","getColumnsByName","updatedData","cloneFromData","column","_cloneFromData","updateSpecificValues","y","realIndex","getSortIndexesFromGrid","cloneData","cloneTargets","splice","cloneFields","cloneSchema","workerAbortRef","worker","_getSelectedValues","ignoreParseOut","abort","job","resetAllValues","resetSelectedValues","JSON","stringify","resized","loadingData","details","updateSelectedValues","images","getCellEditor","permissionsRef","behavior","dataModel","getCell","getCellRenderer","config","declaredRendererName","point","dataCell","getColumn","x","cellConfig_setAlignment","isHandleColumn","halign","getType","cellConfig_setColor","isUserDataArea","columnProps","perms","cellReadOnlyColor","cellChangedColor","cellMandatoryColor","cellDefaultColor","sortIndex","rowImages","img","Image","onload","ratio","naturalWidth","naturalHeight","h","w","src","loadImage","cellRenderers","rowSelection","centerIcon","leftIcon","gridCell","getCellEditorAt","declaredEditorName","cellEvent","getColumnFromGrid","editorType","cellEditors","create","assign","handleCellClicked","detail","isGridRow","getDataPointFromCellEvent","handleCellEditorDataChange","_dataRef$current$find","input","checkEquality","newValue","takeFocus","handleResize","sbHScroller","sbVScroller","overflown","contentSize","containerSize","addEventListener","removeEventListener","cells","listener","assetIds","assetCount","hasAssets","gridDetails","Array","isArray","updatedDataSize","item","rawData","rawAttr","updateTimeoutRef","updateRequestedAtRef","now","Date","storeValue","_inSingleColumn","_inSingleRow","setProgress","timeoutRef","handleSelectionChangeCheck","selectionModel","allRowsSelected","all","handleColumnSelectionChange","columnNames","_columns$column","hasRows","rows","hasSelections","selections","handleRowSelectionChange","hasColumns","handleSelectionChange","getSelections","selectionCount","columnCount","numColumns","rowCount","numRows","i","rect","endX","endY","startX","startY","xSelected","ySelected","indexOf","equal","singleColumn","getColumns","cellCount","hasOwnProperty","row","cols","c","clear","selectAll","toggleSelectAllRows","getPoints","Promise","resolve","reject","getInlineWorker","PointsWebWorker","onmessage","_","throttle","e","points","trailing","postMessage","columnName","_columnsByName$column","_index","totalColumns","totalRows"],"sourceRoot":""}