{"version":3,"file":"Table.mjs","sources":["../../../../../../../../../web/src/adminPortal/shared/components/Table.tsx"],"sourcesContent":["import ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport {\n  Collapse,\n  IconButton,\n  styled,\n  SxProps,\n  Table as MUITable,\n  TableBody,\n  TableCell as MUITableCell,\n  TableCellProps,\n  TableContainer,\n  TableHead,\n  TableRow as MUITableRow,\n  Theme,\n} from '@mui/material';\nimport React, { ComponentType, FC, MouseEventHandler, useEffect, useState } from 'react';\n\nimport { useUniqueId } from '../../../utils/uniqueId';\nimport { mergeSx } from '../utils/mergeSx';\nimport { getTableCellValue, validateRowKey } from '../utils/tableUtils';\nimport { InjectedComponents } from './componentInjection';\nimport { TABLE_ACTIONS_HEADER, TableActionCoreProps } from './TableActions';\nimport { TableItemRenderer } from './types';\n\nconst TABLE_CONTAINER_ID = 'table-container';\nconst EXPANDED_CONTENT_CLASSNAME = 'expanded-content';\n\n// Keep the expanded content left aligned while the table is scrolled horizontally.\n// We want to be able to scroll the table horizontally while making it appear like the expanded content is\n// is not scrolling. To do this, we need to adjust the margin-left of the expanded content to match the\n// scrollLeft of the table container.\nconst leftAlignExpandedContent = (containerId: string) => {\n  const container = document.getElementById(containerId);\n  const expandedContentDivs = document.querySelectorAll<HTMLElement>(`#${containerId} .${EXPANDED_CONTENT_CLASSNAME}`);\n  expandedContentDivs.forEach((expandedContent) => {\n    expandedContent.style.marginLeft = container?.scrollLeft + 'px';\n  });\n};\n\nconst StyledTable = styled(MUITable)<{ hasActions: boolean; hasExpandedContent: boolean }>(\n  ({ hasActions, hasExpandedContent, theme }) => [\n    hasActions && {\n      // For some reason with position sticky, the table is 2px wider than the container\n      width: 'calc(100% - 2px)',\n    },\n    hasExpandedContent && {\n      // Remove spacing between expand more icon and first column\n      '& tr td:nth-of-type(2), & tr th:nth-of-type(2)': {\n        paddingLeft: theme.spacing(0),\n      },\n    },\n  ],\n);\n\nconst StyledTableRow = styled(MUITableRow)<{ expanded: boolean; clickable: boolean }>(({ clickable }) => [\n  {\n    width: 'fit-content',\n  },\n  clickable && {\n    cursor: 'pointer',\n  },\n]);\n\nconst StyledTableCell = styled(MUITableCell)<{ isTableActionsCell?: boolean }>(({ theme, isTableActionsCell }) => [\n  {\n    padding: theme.spacing(0.5, 1),\n    minWidth: 80,\n    whiteSpace: 'nowrap',\n  },\n  isTableActionsCell && {\n    position: 'sticky',\n    right: 0,\n    width: '1%',\n  },\n]);\n\nconst TableCell: FC<TableCellProps & InjectedComponents<'Typography'>> = ({\n  children,\n  className,\n  TypographyComponent: Typography,\n  ...props\n}) => {\n  const value = getTableCellValue(children);\n\n  return (\n    <StyledTableCell className={className} {...props}>\n      {typeof value === 'string' ? <Typography variant=\"body2\">{value}</Typography> : children}\n    </StyledTableCell>\n  );\n};\n\nconst ExpandMoreCell = styled(MUITableCell)<{ hasExpandedContent: boolean }>(({ theme, hasExpandedContent }) => [\n  {\n    padding: theme.spacing(1),\n    minWidth: 'unset',\n  },\n  hasExpandedContent && {\n    borderBottom: 'none',\n  },\n]);\n\nconst ExpandedContentCell = styled(TableCell)({\n  padding: 0,\n});\n\nconst ExpandedContentContainer = styled('div')<{ width?: number }>(({ width, theme }) => ({\n  padding: theme.spacing(0.5, 2, 1),\n  width,\n}));\n\nconst ChevronIcon = styled(ChevronRightIcon)<{ open: boolean }>(({ open }) => ({\n  transform: open ? 'rotate(90deg)' : 'rotate(0deg)',\n}));\n\nconst TableHeaderCell = styled(MUITableCell)<{\n  isExpandedContentHeader?: boolean;\n  isActionsHeader?: boolean;\n  width?: number;\n}>(({ isActionsHeader, isExpandedContentHeader, width, theme }) => [\n  {\n    padding: theme.spacing(1.25, 1),\n    width,\n    minWidth: width,\n  },\n  isActionsHeader && {\n    minWidth: 80,\n    position: 'sticky',\n    right: 0,\n    width: width ?? '1%',\n  },\n  isExpandedContentHeader && {\n    padding: theme.spacing(0, 0, 0, 1),\n    width: theme.spacing(4.5),\n    minWidth: 'unset',\n  },\n]);\n\ntype TableRowProps<T> = {\n  id: string;\n  ExpandedContent?: ComponentType<{ data: T }>;\n  item: T;\n  itemRenderer: TableItemRenderer<T>[];\n  onRowClick?(id: string): void;\n  tableWidth?: number;\n  tableContainerId: string;\n  getItemActionProps?: (item: T) => TableActionCoreProps;\n  disableBottomBorder?: boolean;\n  isOpen?: boolean;\n  onOpenChange?: (event: { id: string; open: boolean }) => void;\n  tableCellSx?: SxProps<Theme>;\n  tableActionsCellSx?: SxProps<Theme>;\n  tableRowSx?: SxProps<Theme>;\n  expandMoreCellSx?: SxProps<Theme>;\n  expandedContentContainerSx?: SxProps<Theme>;\n};\n\nconst TableRow = <T extends object>({\n  id,\n  ExpandedContent,\n  item,\n  itemRenderer,\n  onRowClick,\n  tableWidth,\n  tableContainerId,\n  getItemActionProps,\n  TableActionsComponent: TableActions,\n  TypographyComponent: Typography,\n  isOpen: isOpenProp,\n  onOpenChange,\n  tableCellSx,\n  tableActionsCellSx,\n  tableRowSx,\n  expandMoreCellSx,\n  expandedContentContainerSx,\n}: TableRowProps<T> & InjectedComponents<'TableActions' | 'Typography'>): JSX.Element => {\n  const isOpenControlled = isOpenProp !== undefined;\n  const [openState, setOpenState] = useState(false);\n  const open = isOpenControlled ? isOpenProp : openState;\n\n  useEffect(() => {\n    if (open) {\n      leftAlignExpandedContent(tableContainerId);\n    }\n  }, [open, tableContainerId]);\n  const toggleOpen: MouseEventHandler = (e) => {\n    e.stopPropagation();\n    if (isOpenControlled) {\n      onOpenChange?.({ id, open: !open });\n    } else {\n      setOpenState((prev) => !prev);\n    }\n  };\n\n  const handleRowClick: MouseEventHandler = (e) => {\n    if (onRowClick) {\n      onRowClick(id);\n    } else if (ExpandedContent) {\n      toggleOpen(e);\n    }\n  };\n  const stopEventPropagation: MouseEventHandler = (e) => (onRowClick ? e.stopPropagation() : null);\n\n  return (\n    <>\n      <StyledTableRow clickable={!!onRowClick} expanded={open} onClick={handleRowClick} sx={tableRowSx}>\n        {ExpandedContent && (\n          <ExpandMoreCell hasExpandedContent={!!ExpandedContent} sx={mergeSx(tableCellSx, expandMoreCellSx)}>\n            <IconButton aria-label=\"expand row\" onClick={toggleOpen} size=\"small\">\n              {ExpandedContent && <ChevronIcon open={open} />}\n            </IconButton>\n          </ExpandMoreCell>\n        )}\n        {itemRenderer.map((column) => (\n          <ExpandMoreCell\n            sx={tableCellSx}\n            hasExpandedContent={!!ExpandedContent}\n            key={`row-${id}-col-${String(column.title)}`}\n          >\n            {column.getValue(item)}\n          </ExpandMoreCell>\n        ))}\n        {getItemActionProps && (\n          <StyledTableCell\n            isTableActionsCell\n            onClick={stopEventPropagation}\n            sx={mergeSx(tableCellSx, tableActionsCellSx)}\n          >\n            <TableActions {...getItemActionProps(item)} />\n          </StyledTableCell>\n        )}\n      </StyledTableRow>\n      {ExpandedContent && (\n        <MUITableRow>\n          <ExpandedContentCell TypographyComponent={Typography} colSpan={itemRenderer.length + 1}>\n            <Collapse in={open} timeout=\"auto\" unmountOnExit>\n              <ExpandedContentContainer\n                className={EXPANDED_CONTENT_CLASSNAME}\n                width={tableWidth}\n                sx={expandedContentContainerSx}\n              >\n                <ExpandedContent data={item} />\n              </ExpandedContentContainer>\n            </Collapse>\n          </ExpandedContentCell>\n        </MUITableRow>\n      )}\n    </>\n  );\n};\n\nexport type TableCoreProps<T> = {\n  ExpandedContent?: ComponentType<{ data: T }>;\n  itemRenderer: TableItemRenderer<T>[];\n  items: T[];\n  rowKeyExtractor?(item: T): string;\n  onRowClick?(id: string): void;\n  getItemActionProps?: (item: T) => TableActionCoreProps;\n  disableBottomBorder?: boolean;\n  titleVariant?: 'h4' | 'body2' | 'caption';\n  onOpenChange?: (event: { id: string; open: boolean }) => void;\n  openIds?: Set<string>;\n  tableCellSx?: SxProps<Theme>;\n  tableActionsCellSx?: SxProps<Theme>;\n  tableRowSx?: SxProps<Theme>;\n  expandMoreCellSx?: SxProps<Theme>;\n  expandedContentContainerSx?: SxProps<Theme>;\n};\n\nexport const TableCore = <T extends { id?: string }>({\n  ExpandedContent,\n  itemRenderer,\n  items,\n  rowKeyExtractor,\n  onRowClick,\n  getItemActionProps,\n  TableActionsComponent: TableActions,\n  TypographyComponent: Typography,\n  disableBottomBorder,\n  titleVariant = 'body2',\n  onOpenChange,\n  openIds,\n  tableCellSx,\n  tableActionsCellSx,\n  tableRowSx,\n  expandMoreCellSx,\n  expandedContentContainerSx,\n}: TableCoreProps<T> & InjectedComponents<'TableActions' | 'Typography'>): JSX.Element => {\n  const containerId = useUniqueId(TABLE_CONTAINER_ID);\n  const [, setTableWidth] = useState<number>();\n\n  // This useEffect is used to keep the expanded content left aligned while the table is scrolled horizontally.\n  useEffect(() => {\n    const container = document.getElementById(containerId);\n    const originalTableWidth = document.querySelector(`#${containerId} thead`)?.getBoundingClientRect().width;\n\n    // On scroll, adjust the position of the expanded content to keep it in view.\n    function handleScroll() {\n      if (!originalTableWidth || !container) return;\n      const tableWidth = container.getBoundingClientRect().width;\n      // If the table is scrolled all the way to the right, then we no longer need to adjust.\n      if (originalTableWidth - container.scrollLeft + 16 >= tableWidth) {\n        leftAlignExpandedContent(containerId);\n      }\n    }\n\n    // on window resize, get the table width so we can set the width of the expanded content.\n    function handleResize() {\n      setTableWidth(container?.getBoundingClientRect().width ?? 0);\n      handleScroll();\n    }\n\n    handleResize();\n    window.addEventListener('resize', handleResize);\n    container?.addEventListener('scroll', handleScroll);\n    return () => {\n      container?.removeEventListener('scroll', handleScroll);\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [containerId]);\n\n  validateRowKey(items, rowKeyExtractor);\n\n  return (\n    <TableContainer id={containerId}>\n      <StyledTable hasActions={!!getItemActionProps} hasExpandedContent={!!ExpandedContent}>\n        <TableHead>\n          <MUITableRow>\n            {ExpandedContent && (\n              <TableHeaderCell isExpandedContentHeader sx={expandMoreCellSx}>\n                {/* Render nothing */}\n                <></>\n              </TableHeaderCell>\n            )}\n            {itemRenderer.map((column) => {\n              const renderTitle = column.renderTitle ?? (() => column.title);\n              const width = column.width;\n              return (\n                <TableHeaderCell key={`col-header-${String(column.title)}`} width={width}>\n                  <Typography variant={titleVariant} color={titleVariant === 'h4' ? 'primary' : 'secondary'}>\n                    {renderTitle()}\n                  </Typography>\n                </TableHeaderCell>\n              );\n            })}\n            {getItemActionProps && (\n              <TableHeaderCell isActionsHeader sx={mergeSx(tableCellSx, tableActionsCellSx)}>\n                <Typography variant={titleVariant} color={titleVariant === 'h4' ? 'primary' : 'secondary'}>\n                  {TABLE_ACTIONS_HEADER}\n                </Typography>\n              </TableHeaderCell>\n            )}\n          </MUITableRow>\n        </TableHead>\n        <TableBody>\n          {items.map((item) => {\n            const id = rowKeyExtractor ? rowKeyExtractor(item) : (item.id as string);\n            const isOpen = openIds?.has(id);\n            return (\n              <TableRow\n                ExpandedContent={ExpandedContent}\n                TableActionsComponent={TableActions}\n                TypographyComponent={Typography}\n                getItemActionProps={getItemActionProps}\n                id={id}\n                item={item}\n                itemRenderer={itemRenderer}\n                key={id}\n                onRowClick={onRowClick}\n                tableContainerId={containerId}\n                disableBottomBorder={disableBottomBorder}\n                isOpen={isOpen}\n                onOpenChange={onOpenChange}\n                tableCellSx={tableCellSx}\n                tableActionsCellSx={tableActionsCellSx}\n                tableRowSx={tableRowSx}\n                expandMoreCellSx={expandMoreCellSx}\n                expandedContentContainerSx={expandedContentContainerSx}\n              />\n            );\n          })}\n        </TableBody>\n      </StyledTable>\n    </TableContainer>\n  );\n};\n"],"names":["TABLE_CONTAINER_ID","EXPANDED_CONTENT_CLASSNAME","leftAlignExpandedContent","containerId","container","document","getElementById","expandedContentDivs","querySelectorAll","forEach","expandedContent","style","marginLeft","scrollLeft","StyledTable","styled","MUITable","hasActions","hasExpandedContent","theme","width","paddingLeft","spacing","StyledTableRow","MUITableRow","clickable","cursor","StyledTableCell","MUITableCell","isTableActionsCell","padding","minWidth","whiteSpace","position","right","TableCell","children","className","TypographyComponent","Typography","props","value","getTableCellValue","React","variant","ExpandMoreCell","borderBottom","ExpandedContentCell","ExpandedContentContainer","ChevronIcon","ChevronRightIcon","open","transform","TableHeaderCell","isActionsHeader","isExpandedContentHeader","TableRow","id","ExpandedContent","item","itemRenderer","onRowClick","tableWidth","tableContainerId","getItemActionProps","TableActionsComponent","TableActions","isOpen","isOpenProp","onOpenChange","tableCellSx","tableActionsCellSx","tableRowSx","expandMoreCellSx","expandedContentContainerSx","isOpenControlled","undefined","openState","setOpenState","useState","useEffect","toggleOpen","e","stopPropagation","prev","handleRowClick","stopEventPropagation","expanded","onClick","sx","mergeSx","IconButton","aria-label","size","map","column","key","String","title","getValue","colSpan","length","Collapse","in","timeout","unmountOnExit","data","TableCore","items","rowKeyExtractor","disableBottomBorder","titleVariant","openIds","useUniqueId","setTableWidth","originalTableWidth","querySelector","getBoundingClientRect","handleScroll","handleResize","window","addEventListener","removeEventListener","validateRowKey","TableContainer","TableHead","renderTitle","color","TABLE_ACTIONS_HEADER","TableBody","has"],"mappings":"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"}