{"version":3,"file":"Attachments.mocks.jsx","sourceRoot":"","sources":["../../../src/work/CaseView/Attachments.mocks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useCallback, useContext, useEffect, useRef, useMemo, forwardRef } from 'react';\nimport type { FormEvent, Ref, ChangeEvent, PropsWithoutRef } from 'react';\n\nimport {\n  Button,\n  FileInput,\n  FileVisual,\n  Progress,\n  Modal,\n  Text,\n  SummaryList,\n  ViewAll,\n  getKindFromMimeType,\n  getMimeTypeFromFile,\n  Flex,\n  Input,\n  ComboBox,\n  createUID,\n  useModalManager,\n  useModalContext,\n  useToaster,\n  DateTimeDisplay,\n  MetaList,\n  FormDialog\n} from '@pega/cosmos-react-core';\nimport type { Action, SummaryListItem, FormDialogProps } from '@pega/cosmos-react-core';\n\nimport { loadingTimeoutMS } from '../../core/Progress/Progress.mocks';\nimport {\n  FileServiceContext,\n  mockAttachmentListRequest,\n  mockCategories\n} from '../../core/File/FileService.mock';\nimport type {\n  FileServiceContextValue,\n  MockFileAttachmentResource,\n  MockFileUploadItem,\n  MockFileItem\n} from '../../core/File/FileService.mock';\n\n// ---------------------------------------------------------------------------------------------------------------------\n// getSummaryListItemProps\n// ---------------------------------------------------------------------------------------------------------------------\nconst getSummaryListItemProps = ({\n  ref,\n  file,\n  editFile,\n  cancelFile,\n  deleteFile\n}: {\n  ref: Ref<HTMLLIElement>;\n  file: MockFileAttachmentResource | MockFileUploadItem;\n  editFile?: (file: MockFileAttachmentResource) => void;\n  cancelFile: FileServiceContextValue['cancelFile'];\n  deleteFile: FileServiceContextValue['deleteFile'];\n}): SummaryListItem => {\n  let actions: Action[];\n  let visual: JSX.Element;\n\n  if ('progress' in file && typeof file.progress === 'number' && file.progress < 100) {\n    visual = <Progress value={file.progress} placement='inline' variant='ring' />;\n    actions = [\n      {\n        id: 'Cancel',\n        text: 'Cancel',\n        icon: 'times',\n        onClick: () => {\n          cancelFile(file.id);\n        }\n      }\n    ];\n  } else {\n    visual = (\n      <FileVisual\n        type={getKindFromMimeType(getMimeTypeFromFile(file.name) ?? '')}\n        thumbnail={(file as MockFileAttachmentResource).thumbnail}\n      />\n    );\n    actions = [\n      {\n        id: 'Edit',\n        text: 'Edit',\n        icon: 'pencil',\n        onClick: () => {\n          editFile?.(file);\n        }\n      },\n      {\n        id: 'Download',\n        text: 'Download',\n        icon: 'download',\n        onClick: () => {}\n      },\n      {\n        id: 'Delete',\n        text: 'Delete',\n        icon: 'trash',\n        onClick: () => {\n          deleteFile(file.id);\n        }\n      }\n    ];\n  }\n\n  return {\n    ref,\n    id: file.id,\n    visual,\n    primary: file.name,\n    contextualLabel: file.name,\n    secondary: (\n      <Text variant='secondary'>\n        {'progress' in file && typeof file.progress === 'number' && file.progress < 100 ? (\n          `Uploading…${Math.floor(file.progress)}%`\n        ) : (\n          <MetaList\n            items={[\n              file.category,\n              <>\n                Uploaded{' '}\n                <DateTimeDisplay\n                  variant='relative'\n                  value={(file as MockFileAttachmentResource).createDate}\n                />\n              </>\n            ]}\n          />\n        )}\n      </Text>\n    ),\n    actions\n  };\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n// Attachment edit Dialog\n// ---------------------------------------------------------------------------------------------------------------------\ninterface EditDialogProps {\n  file: MockFileAttachmentResource;\n  target: FormDialogProps['target'];\n  onSubmit: (fields: { name: string; category: string }) => void;\n  onCancel: () => void;\n  ref: Ref<HTMLDivElement>;\n}\n\nconst EditDialog = forwardRef(function EditDialog(\n  { file, target, onSubmit, onCancel }: PropsWithoutRef<EditDialogProps>,\n  ref: EditDialogProps['ref']\n) {\n  const [name, setName] = useState(file.name);\n  const [error, setError] = useState('');\n  const [loading, setLoading] = useState(false);\n\n  const [categories, setCategories] = useState(() => {\n    return [\n      { id: createUID(), primary: 'No category', selected: false },\n      ...mockCategories.map(category => {\n        return {\n          id: createUID(),\n          primary: category,\n          selected: file.category === category\n        };\n      })\n    ];\n  });\n\n  const selectedCategory = useMemo(() => {\n    const sc = categories.find(c => c.selected);\n    return sc\n      ? {\n          items: {\n            id: sc.id,\n            text: sc.primary\n          }\n        }\n      : undefined;\n  }, [categories]);\n\n  return (\n    <FormDialog\n      ref={ref}\n      heading='Edit attachment'\n      target={target}\n      progress={loading ? 'Updating attachment...' : undefined}\n      placement='bottom-start'\n      onCancel={onCancel}\n      onSubmit={() => {\n        if (error) return;\n        setLoading(true);\n        setTimeout(() => {\n          onSubmit({\n            name,\n            category:\n              !selectedCategory || selectedCategory.items.text === 'No category'\n                ? ''\n                : selectedCategory.items.text\n          });\n          setLoading(false);\n        }, loadingTimeoutMS);\n      }}\n    >\n      <Flex container={{ direction: 'column', gap: 2 }}>\n        <Input\n          label='Name'\n          placeholder='Enter name…'\n          value={name}\n          info={error}\n          status={error ? 'error' : undefined}\n          autoFocus\n          required\n          onChange={(e: ChangeEvent<HTMLInputElement>) => {\n            setName(e.target.value);\n            if (error && e.target.value) {\n              setError('');\n            }\n          }}\n          onBlur={() => {\n            if (!name) {\n              setError('Name is required.');\n            }\n          }}\n        />\n        <ComboBox\n          label='Category'\n          placeholder='Choose…'\n          selected={selectedCategory}\n          menu={{\n            mode: 'single-select',\n            items: categories,\n            onItemClick: id => {\n              setCategories(cur => {\n                return cur.map(category => {\n                  return {\n                    ...category,\n                    selected: category.id === id\n                  };\n                });\n              });\n            }\n          }}\n        />\n      </Flex>\n    </FormDialog>\n  );\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n// AttachmentsModal\n// ---------------------------------------------------------------------------------------------------------------------\ninterface AttachmentsModalProps {\n  defaultMode: 'viewAll' | 'addNew';\n}\n\nconst AttachmentsModal = ({ defaultMode }: AttachmentsModalProps) => {\n  const [mode, setMode] = useState(defaultMode);\n\n  const { push: pushToaster } = useToaster();\n  const { dismiss } = useModalContext();\n  const { files, setFiles, cancelFile, attachFile, deleteFile } = useContext(FileServiceContext);\n\n  const [search, setSearch] = useState('');\n  const [viewAllLoading, setViewAllLoading] = useState(true);\n  const [addNewLoading, setAddNewLoading] = useState(false);\n  const [newFiles, setNewFiles] = useState<MockFileItem[]>([]);\n\n  const attachSelected = useCallback(() => {\n    newFiles.forEach(attachFile);\n    dismiss();\n  }, [newFiles, attachFile]);\n\n  const listItemEls = useRef<HTMLLIElement[]>([]);\n  const [editFileIndex, setEditFileIndex] = useState<number>(-1);\n\n  const editDialogTargetLi = useMemo(() => {\n    return editFileIndex !== undefined ? listItemEls.current[editFileIndex] : undefined;\n  }, [editFileIndex, listItemEls]);\n\n  const menuButton = useMemo(\n    () =>\n      editDialogTargetLi\n        ? editDialogTargetLi.querySelector<HTMLButtonElement>('button[aria-haspopup=\"menu\"]')\n        : null,\n    [editDialogTargetLi]\n  );\n\n  const handleDialogClose = useCallback(() => {\n    if (!editDialogTargetLi) return;\n    setEditFileIndex(-1);\n    menuButton?.focus();\n  }, [menuButton, editDialogTargetLi]);\n\n  const handleKeydown = useCallback((e: KeyboardEvent) => {\n    if (e.key === 'Escape') {\n      setEditFileIndex(-1);\n    }\n  }, []);\n\n  const editDialogRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (mode === 'viewAll') {\n      const timeout = setTimeout(() => {\n        setViewAllLoading(false);\n      }, 1000);\n\n      return () => {\n        clearTimeout(timeout);\n      };\n    }\n  }, [mode]);\n\n  useEffect(() => {\n    if (!editDialogTargetLi) return;\n    document.addEventListener('keydown', handleKeydown);\n    return () => {\n      document.removeEventListener('keydown', handleKeydown);\n    };\n  }, [editDialogTargetLi]);\n\n  useEffect(() => {\n    // Since the component is performing double duty we need to empty out ref elements from a prior render mode.\n    listItemEls.current = [];\n  }, [mode]);\n\n  const onFilesAdded = useCallback(\n    (newlyAddedFiles: File[]) => {\n      setNewFiles(current => [\n        ...newlyAddedFiles.map((file, i) => {\n          const id = createUID();\n          return {\n            id,\n            name: file.name,\n            format: file.name.split('.').pop(),\n            category: '',\n            File: file,\n            onEdit: () => {\n              setEditFileIndex(i);\n            },\n            onCancel: () => {\n              setNewFiles(c => c.filter(f => f.id !== id));\n            }\n          };\n        }),\n        ...current\n      ]);\n    },\n    [files]\n  );\n\n  // Actions for the modal\n  const actions =\n    mode === 'addNew' ? (\n      <>\n        <Button onClick={dismiss} disabled={addNewLoading}>\n          Cancel\n        </Button>\n        <Button\n          type='submit'\n          variant='primary'\n          // Normally this would trigger a submit event but we are preventing that in the Modal's onSubmit.\n          onClick={() => {\n            setAddNewLoading(true);\n            setTimeout(() => {\n              attachSelected();\n              setAddNewLoading(false);\n            }, loadingTimeoutMS);\n          }}\n          disabled={newFiles.length === 0 || addNewLoading}\n        >\n          Upload files\n        </Button>\n      </>\n    ) : null;\n\n  // Content for the modal\n  const content =\n    mode === 'addNew' ? (\n      <FileInput\n        multiple\n        label='Select files to upload'\n        onFilesAdded={onFilesAdded}\n        files={newFiles.map(f => ({ ...f, meta: f.category || undefined }))}\n      />\n    ) : (\n      <ViewAll\n        loading={viewAllLoading}\n        items={(search ? files.filter(f => f.name.includes(search)) : files).map((file, i) => {\n          return getSummaryListItemProps({\n            ref: (el: HTMLLIElement) => {\n              listItemEls.current[i] = el;\n            },\n            file,\n            editFile: () => {\n              setEditFileIndex(i);\n            },\n            cancelFile: id => {\n              const canceledFile = files.find(f => f.id === id) as MockFileUploadItem;\n              cancelFile(id);\n              pushToaster({ content: `Cancelled uploading ${canceledFile.name}` });\n            },\n            deleteFile: async id => {\n              const deletedFile = files.find(f => f.id === id) as MockFileAttachmentResource;\n              await deleteFile(id);\n              pushToaster({ content: `${deletedFile.name} deleted` });\n            }\n          });\n        })}\n        actions={[\n          {\n            id: 'addNewFile',\n            text: 'Add files',\n            onClick: () => {\n              setMode('addNew');\n            }\n          },\n          {\n            id: 'addNewLink',\n            text: 'Add links',\n            onClick: () => {\n              setMode('addNew');\n            }\n          }\n        ]}\n        searchInputProps={{ onSearchChange: value => setSearch(value) }}\n      />\n    );\n\n  return (\n    <Modal\n      as={mode === 'addNew' ? 'form' : undefined}\n      heading={mode === 'addNew' ? 'Add attachments' : 'Attachments'}\n      actions={actions}\n      progress={addNewLoading ? { message: 'Adding attachments...' } : undefined}\n      onRequestDismiss={() => {\n        return !editDialogTargetLi;\n      }}\n      onSubmit={\n        mode === 'addNew'\n          ? (e: FormEvent) => {\n              e.preventDefault();\n            }\n          : undefined\n      }\n    >\n      <>\n        {content}\n        {editDialogTargetLi && menuButton && (\n          <EditDialog\n            ref={editDialogRef}\n            target={menuButton}\n            file={mode === 'addNew' ? newFiles[editFileIndex] : files[editFileIndex]}\n            onCancel={handleDialogClose}\n            onSubmit={({ name, category }) => {\n              handleDialogClose();\n\n              // TS kept from easily consolidating like:\n              // const setter = mode === 'addNew' ? setNewFiles : setFiles;\n              // Could not avoid map's file param as \"any\".\n              if (mode === 'addNew') {\n                setNewFiles(cur => {\n                  return cur.map((file, i) => {\n                    if (i === editFileIndex) {\n                      return {\n                        ...file,\n                        name,\n                        category\n                      };\n                    }\n\n                    return file;\n                  });\n                });\n              } else {\n                setFiles(cur =>\n                  cur.map((file, i) => {\n                    if (i === editFileIndex) {\n                      return {\n                        ...file,\n                        name,\n                        category\n                      };\n                    }\n\n                    return file;\n                  })\n                );\n              }\n            }}\n          />\n        )}\n      </>\n    </Modal>\n  );\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n// Attachments mock\n// ---------------------------------------------------------------------------------------------------------------------\nexport const AttachmentsMock = () => {\n  const { push: pushToaster } = useToaster();\n  const { create: createModal } = useModalManager();\n  const [loading, setLoading] = useState(true);\n  const { files, setFiles, cancelFile, deleteFile } = useContext(FileServiceContext);\n\n  const listItemEls = useRef<HTMLLIElement[]>([]);\n  const [editFileIndex, setEditFileIndex] = useState<number>(-1);\n\n  const editDialogTargetLi = useMemo(() => {\n    return editFileIndex !== undefined ? listItemEls.current[editFileIndex] : undefined;\n  }, [editFileIndex, listItemEls]);\n\n  const menuButton = useMemo(\n    () =>\n      editDialogTargetLi\n        ? editDialogTargetLi.querySelector<HTMLButtonElement>('button[aria-haspopup=\"menu\"]')\n        : null,\n    [editDialogTargetLi]\n  );\n\n  const handleDialogClose = useCallback(() => {\n    if (!editDialogTargetLi) return;\n    setEditFileIndex(-1);\n    menuButton?.focus();\n  }, [menuButton, editDialogTargetLi]);\n\n  const handleKeydown = useCallback((e: KeyboardEvent) => {\n    if (e.key === 'Escape') {\n      setEditFileIndex(-1);\n    }\n  }, []);\n\n  const editDialogRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    let mounted = true;\n\n    (async () => {\n      const attachments = await mockAttachmentListRequest();\n\n      // Avoids: Warning: Can't perform a React state update on an unmounted component.\n      if (mounted) {\n        setLoading(false);\n        setFiles(attachments);\n      }\n    })();\n\n    return () => {\n      mounted = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!editDialogTargetLi) return;\n    document.addEventListener('keydown', handleKeydown);\n    return () => {\n      document.removeEventListener('keydown', handleKeydown);\n    };\n  }, [editDialogTargetLi]);\n\n  return (\n    <>\n      <SummaryList\n        icon='paper-clip'\n        name='Attachments'\n        headingTag='h3'\n        loading={loading}\n        count={!loading && Array.isArray(files) ? files.length : undefined}\n        actions={[\n          {\n            text: 'Add',\n            id: 'addNew',\n            icon: 'plus',\n            onClick() {\n              createModal(AttachmentsModal, { defaultMode: 'addNew' as const });\n            }\n          }\n        ]}\n        items={files.slice(0, 3).map((file, i) => {\n          return getSummaryListItemProps({\n            ref: (el: HTMLLIElement) => {\n              listItemEls.current[i] = el;\n            },\n            file,\n            editFile: () => {\n              setEditFileIndex(i);\n            },\n            cancelFile: id => {\n              const canceledFile = files.find(f => f.id === id) as MockFileUploadItem;\n              cancelFile(id);\n              pushToaster({ content: `Cancelled uploading ${canceledFile.name}` });\n            },\n            deleteFile: async id => {\n              const deletedFile = files.find(f => f.id === id) as MockFileAttachmentResource;\n              await deleteFile(id);\n              pushToaster({ content: `${deletedFile.name} deleted` });\n            }\n          });\n        })}\n        onViewAll={() => {\n          createModal(AttachmentsModal, { defaultMode: 'viewAll' as const });\n        }}\n      />\n      {editDialogTargetLi && menuButton && (\n        <EditDialog\n          ref={editDialogRef}\n          target={menuButton}\n          file={files[editFileIndex]}\n          onCancel={handleDialogClose}\n          onSubmit={({ name, category }) => {\n            handleDialogClose();\n            setFiles(cur =>\n              cur.map((file, i) => {\n                if (i === editFileIndex) {\n                  return {\n                    ...file,\n                    name,\n                    category\n                  };\n                }\n\n                return file;\n              })\n            );\n          }}\n        />\n      )}\n    </>\n  );\n};\n"]}