| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import {
- Button,
- KeyboardShortcut,
- Sheet,
- SheetContent,
- SheetDescription,
- SheetFooter,
- SheetHeader,
- SheetSection,
- SheetTitle,
- } from 'ui'
- import { OperationList } from './OperationList'
- import { useOperationQueueActions } from '@/components/grid/hooks/useOperationQueueActions'
- import { DiscardChangesConfirmationDialog } from '@/components/ui-patterns/Dialogs/DiscardChangesConfirmationDialog'
- import { useConfirmOnClose } from '@/hooks/ui/useConfirmOnClose'
- import { useTableEditorStateSnapshot } from '@/state/table-editor'
- import { QueuedOperation } from '@/state/table-editor-operation-queue.types'
- export const OperationQueueSidePanel = () => {
- const snap = useTableEditorStateSnapshot()
- const visible = snap.sidePanel?.type === 'operation-queue'
- const operations = snap.operationQueue.operations as readonly QueuedOperation[]
- const { handleSave, handleCancel, isSaving } = useOperationQueueActions({
- onSaveSuccess: snap.closeSidePanel,
- onCancelSuccess: snap.closeSidePanel,
- })
- const { confirmOnClose, modalProps: closeConfirmationModalProps } = useConfirmOnClose({
- checkIsDirty: () => true,
- onClose: () => handleCancel(),
- })
- return (
- <>
- <Sheet open={visible} onOpenChange={(open) => !open && snap.closeSidePanel()}>
- <SheetContent
- className="flex flex-col gap-y-0"
- onOpenAutoFocus={(event) => event.preventDefault()}
- >
- <SheetHeader>
- <SheetTitle>Pending changes</SheetTitle>
- <SheetDescription>
- {operations.length} operation{operations.length !== 1 ? 's' : ''}
- </SheetDescription>
- </SheetHeader>
- <SheetSection className="overflow-auto grow p-0">
- <OperationList operations={operations} />
- </SheetSection>
- <SheetFooter className="justify-between!">
- <Button
- type="default"
- onClick={snap.closeSidePanel}
- iconRight={<KeyboardShortcut keys={['Meta', '.']} variant="inline" />}
- >
- Close
- </Button>
- <div className="flex space-x-3">
- <Button
- type="default"
- onClick={confirmOnClose}
- disabled={isSaving || operations.length === 0}
- >
- Discard
- </Button>
- <Button
- onClick={handleSave}
- disabled={isSaving || operations.length === 0}
- loading={isSaving}
- iconRight={
- isSaving ? undefined : <KeyboardShortcut keys={['Meta', 's']} variant="inline" />
- }
- >
- Save
- </Button>
- </div>
- </SheetFooter>
- </SheetContent>
- </Sheet>
- <DiscardChangesConfirmationDialog {...closeConfirmationModalProps} />
- </>
- )
- }
|