{"version":3,"file":"TableList.mjs","sources":["../../../../admin/src/components/TableList/TableList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n  Checkbox,\n  IconButton,\n  Table,\n  Th,\n  Thead,\n  Tooltip,\n  Tr,\n  Typography,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { tableHeaders } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nimport type { File } from '../../../../shared/contracts/files';\nimport type { Folder } from '../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nexport interface FileRow extends File {\n  folderURL?: string;\n  isSelectable?: boolean;\n  type?: string;\n}\n\nexport interface FolderRow extends Folder {\n  folderURL?: string;\n  isSelectable?: boolean;\n  type?: string;\n}\n\nexport interface TableListProps {\n  isFolderSelectionAllowed?: boolean;\n  allowedTypes?: AllowedTypes[];\n  assetCount?: number;\n  folderCount?: number;\n  indeterminate?: boolean;\n  onChangeSort?: ((sortQuery: string) => void) | null;\n  onChangeFolder?: ((folderId: number, folderPath?: string) => void) | null;\n  onEditAsset?: ((asset: FileRow) => void) | null;\n  onEditFolder?: ((folder: FolderRow) => void) | null;\n  onSelectAll: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n  onSelectOne: (element: FileRow | FolderRow) => void;\n  rows?: FileRow[] | FolderRow[];\n  selected?: FileRow[] | FolderRow[];\n  shouldDisableBulkSelect?: boolean;\n  sortQuery?: string;\n}\n\nexport const TableList = ({\n  assetCount = 0,\n  folderCount = 0,\n  indeterminate = false,\n  onChangeSort = null,\n  onChangeFolder = null,\n  onEditAsset = null,\n  onEditFolder = null,\n  onSelectAll,\n  onSelectOne,\n  rows = [],\n  selected = [],\n  shouldDisableBulkSelect = false,\n  sortQuery = '',\n}: TableListProps) => {\n  const { formatMessage } = useIntl();\n  const [sortBy, sortOrder] = sortQuery.split(':');\n\n  const handleClickSort = (isSorted: boolean, name: string) => {\n    const nextSortOrder = isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC';\n    const nextSort = `${name}:${nextSortOrder}`;\n\n    onChangeSort && onChangeSort(nextSort);\n  };\n\n  return (\n    <Table colCount={tableHeaders.length + 2} rowCount={assetCount + folderCount + 1}>\n      <Thead>\n        <Tr>\n          <Th>\n            <Checkbox\n              aria-label={formatMessage({\n                id: getTrad('bulk.select.label'),\n                defaultMessage: 'Select all folders & assets',\n              })}\n              disabled={shouldDisableBulkSelect}\n              onCheckedChange={(checked) => onSelectAll(checked, rows)}\n              checked={\n                indeterminate && !shouldDisableBulkSelect\n                  ? 'indeterminate'\n                  : (assetCount > 0 || folderCount > 0) &&\n                    selected.length === assetCount + folderCount\n              }\n            />\n          </Th>\n          {tableHeaders.map(({ metadatas: { label, isSortable }, name, key }) => {\n            const isSorted = sortBy === name;\n            const isUp = sortOrder === 'ASC';\n            const tableHeaderLabel = formatMessage(label);\n            const sortLabel = formatMessage(\n              { id: 'list.table.header.sort', defaultMessage: 'Sort on {label}' },\n              { label: tableHeaderLabel }\n            );\n\n            return (\n              <Th\n                action={\n                  isSorted && (\n                    <IconButton\n                      label={sortLabel}\n                      onClick={() => handleClickSort(isSorted, name)}\n                      variant=\"ghost\"\n                    >\n                      {isUp ? <CaretUp /> : <CaretDown />}\n                    </IconButton>\n                  )\n                }\n                key={key}\n              >\n                <Tooltip label={isSortable ? sortLabel : tableHeaderLabel}>\n                  {isSortable ? (\n                    <Typography\n                      onClick={() => handleClickSort(isSorted, name)}\n                      tag={isSorted ? 'span' : 'button'}\n                      textColor=\"neutral600\"\n                      variant=\"sigma\"\n                    >\n                      {tableHeaderLabel}\n                    </Typography>\n                  ) : (\n                    <Typography textColor=\"neutral600\" variant=\"sigma\">\n                      {tableHeaderLabel}\n                    </Typography>\n                  )}\n                </Tooltip>\n              </Th>\n            );\n          })}\n          <Th>\n            <VisuallyHidden>\n              {formatMessage({\n                id: getTrad('list.table.header.actions'),\n                defaultMessage: 'actions',\n              })}\n            </VisuallyHidden>\n          </Th>\n        </Tr>\n      </Thead>\n      <TableRows\n        onChangeFolder={onChangeFolder}\n        onEditAsset={onEditAsset!}\n        onEditFolder={onEditFolder!}\n        rows={rows}\n        onSelectOne={onSelectOne}\n        selected={selected}\n      />\n    </Table>\n  );\n};\n"],"names":["TableList","assetCount","folderCount","indeterminate","onChangeSort","onChangeFolder","onEditAsset","onEditFolder","onSelectAll","onSelectOne","rows","selected","shouldDisableBulkSelect","sortQuery","formatMessage","useIntl","sortBy","sortOrder","split","handleClickSort","isSorted","name","nextSortOrder","nextSort","_jsxs","Table","colCount","tableHeaders","length","rowCount","_jsx","Thead","Tr","Th","Checkbox","aria-label","id","getTrad","defaultMessage","disabled","onCheckedChange","checked","map","metadatas","label","isSortable","key","isUp","tableHeaderLabel","sortLabel","action","IconButton","onClick","variant","CaretUp","CaretDown","Tooltip","Typography","tag","textColor","VisuallyHidden","TableRows"],"mappings":"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"}