All files / app/src/entities/change-log/ui/change-log-table change-log-table.tsx

100% Statements 54/54
20% Branches 1/5
100% Functions 1/1
100% Lines 54/54

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 751x                           1x 4x 4x   4x 4x   4x 4x 4x 4x 4x 4x 4x   4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x   4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x     4x 4x 4x 4x 4x 4x 4x 4x 4x 4x   4x  
import { DefaultRecordType } from 'rc-table/lib/interface'
import { FCWithClassName, Table } from '@tmk/ui-kit'
import { TableProps } from 'rc-table/lib/Table'
import { useTranslate } from '@/shared/lib'
import { ChangeLogItem, changeLogSortAtom, getChangeLogTableColumns } from '@/entities/change-log'
import { useAtom } from 'jotai'
import { useFilesCollection } from '@/entities/files'
import { useDocumentsCollection } from '@/entities/documents'
import { getFieldIdsFromCollection } from '@/shared/helpers'
 
export interface ChangeLogTableProps extends TableProps<DefaultRecordType> {
  data?: ChangeLogItem[]
  isLoading?: boolean
}
export const ChangeLogTable: FCWithClassName<ChangeLogTableProps> = ({ data, isLoading, ...rest }) => {
  const { t } = useTranslate(['common', 'accounting-object'])
  const [sortChangeLog, setSortChangeLog] = useAtom(changeLogSortAtom)
 
  const changeLogDataNew = data?.map(item => item?.data)
  const changeLogDataOld = data?.map(item => item?.lastData)
 
  const { data: documents, isLoading: isLoadingDocuments } = useDocumentsCollection({
    enabled: !!data,
    filters: {
      id: getFieldIdsFromCollection('documents', changeLogDataNew),
    },
    key: ['change-log-collection-documents'],
  })
 
  const { data: files, isLoading: isFilesLoading } = useFilesCollection({
    enabled: !!data,
    filters: {
      id: [
        ...getFieldIdsFromCollection('file', changeLogDataNew),
        ...getFieldIdsFromCollection('file', changeLogDataOld),
        ...getFieldIdsFromCollection('mediaFiles', changeLogDataNew),
        ...getFieldIdsFromCollection('mediaFiles', changeLogDataOld),
      ],
    },
    key: ['change-log-collection-files'],
  })
 
  return (
    <Table
      {...rest}
      t={t}
      caption={false}
      rowClassName='text-min bg-white hover:bg-gray-secondary'
      tableClassname={{
        body: {
          cell: 'border-b border-border first:text-center !py-0 h-14 !text-black align-middle !px-0',
          row: 'contents ',
        },
        header: { cell: '!pb-0 h-[50px] !text-black !px-0' },
        table: 'rounded-base overflow-hidden',
      }}
      isLoading={isLoading}
      data={data}
      emptyText={
        <p className='text-main-regular text-text-secondary'>{t('accounting-object:The_list_of_changes_is_empty')}</p>
      }
    >
      {getChangeLogTableColumns({
        t: t,
        sort: sortChangeLog,
        setSort: setSortChangeLog,
        files: files?.['hydra:member'],
        isFilesLoading,
        documents: documents?.['hydra:member'],
        isLoadingDocuments,
      })}
    </Table>
  )
}