@activecollab/components 1.0.166 → 1.0.167

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,7 +21,9 @@ var _SortIcon = _interopRequireDefault(require("../Icons/collection/SortIcon"));
21
21
 
22
22
  var _Styles = require("./Styles");
23
23
 
24
- var _excluded = ["header", "rows", "className", "sortBy", "sortDirection", "onSortCallback", "theadClass", "noResultsCallback", "groupBy", "groupHead", "isCollapsible", "emptyValue"];
24
+ var _Loaders = require("../Loaders");
25
+
26
+ var _excluded = ["header", "rows", "className", "sortBy", "sortDirection", "onSortCallback", "theadClass", "noResultsCallback", "groupBy", "groupHead", "isCollapsible", "emptyValue", "loading", "loadingRows"];
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
29
 
@@ -98,7 +100,8 @@ var initialCollapsed = function initialCollapsed(rows, groupBy) {
98
100
 
99
101
  var DataTable = function DataTable(_ref) {
100
102
  var header = _ref.header,
101
- rows = _ref.rows,
103
+ _ref$rows = _ref.rows,
104
+ rows = _ref$rows === void 0 ? [] : _ref$rows,
102
105
  className = _ref.className,
103
106
  sortBy = _ref.sortBy,
104
107
  _ref$sortDirection = _ref.sortDirection,
@@ -113,6 +116,9 @@ var DataTable = function DataTable(_ref) {
113
116
  } : _ref$groupHead,
114
117
  isCollapsible = _ref.isCollapsible,
115
118
  emptyValue = _ref.emptyValue,
119
+ loading = _ref.loading,
120
+ _ref$loadingRows = _ref.loadingRows,
121
+ loadingRows = _ref$loadingRows === void 0 ? 7 : _ref$loadingRows,
116
122
  args = _objectWithoutProperties(_ref, _excluded);
117
123
 
118
124
  var _useState = (0, _react.useState)(sortDirection),
@@ -320,6 +326,25 @@ var DataTable = function DataTable(_ref) {
320
326
  return newState;
321
327
  });
322
328
  }, []);
329
+ var renderPlaceholders = (0, _react.useMemo)(function () {
330
+ var placeholders = Array(loadingRows).fill({}).map(function (_, index) {
331
+ return /*#__PURE__*/_react.default.createElement("tr", {
332
+ key: index,
333
+ className: "c-table__row",
334
+ onMouseOver: cellMouseOver,
335
+ onMouseLeave: cellMouseOut
336
+ }, header.map(function (col, colIndex) {
337
+ return /*#__PURE__*/_react.default.createElement("td", {
338
+ key: colIndex,
339
+ className: (0, _classnames.default)("c-table__cell c-data-table__item", {
340
+ hovered: hovered === col.key
341
+ }),
342
+ "data-key": col.key
343
+ }, /*#__PURE__*/_react.default.createElement(_Loaders.LinearLoader, null));
344
+ }));
345
+ });
346
+ return /*#__PURE__*/_react.default.createElement(_Table.Tbody, null, placeholders);
347
+ }, [cellMouseOut, cellMouseOver, header, hovered, loadingRows]);
323
348
  var renderRows = (0, _react.useMemo)(function () {
324
349
  if (data && data instanceof Array && data.length > 0 || _typeof(data) === "object" && Object.keys(data).length > 0) {
325
350
  if (groupBy) {
@@ -447,7 +472,7 @@ var DataTable = function DataTable(_ref) {
447
472
  "c-table__icon--desc": columnDirection === SortDirection.Desc && h.key === active
448
473
  })
449
474
  })));
450
- }))), renderRows);
475
+ }))), loading ? renderPlaceholders : renderRows);
451
476
  };
452
477
 
453
478
  exports.DataTable = DataTable;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tables/DataTable.tsx"],"names":["SortDirection","groupByKey","items","key","Array","reduce","result","item","initialCollapsed","rows","groupBy","groupedData","keys","Object","collapsedKeys","forEach","DataTable","header","className","sortBy","sortDirection","None","onSortCallback","theadClass","noResultsCallback","groupHead","isCollapsible","emptyValue","args","columnDirection","setColumnDirection","active","setActive","hovered","setHovered","collapsed","setCollapsed","sort","sortByKey","direction","rowsData","a","b","Asc","first","toString","second","localeCompare","initialData","data","setData","getNextSortDirection","previousDirection","sameColumn","Desc","sortColumn","event","index","currentTarget","dataset","sortable","grouped","map","cellMouseOver","e","target","HTMLElement","cellMouseOut","renderNoResults","length","tableRef","overlayStyles","current","clientHeight","renderCell","h","row","colIndex","renderCallback","renderRow","rowIndex","style","toggleCollapse","collapseKey","groupkey","prevState","newState","renderRows","i","last","trim","hidden","allGroupsCollapsed","every","hasCollapsed","some","toggleAllCollapsed","Table","slice","hideCollapsed","height","label","displayName"],"mappings":"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","sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useMemo,\n Fragment,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { ITableProps, Table, Tbody, Thead } from \"./Table\";\nimport { ISyntheticEvent } from \"../../types\";\nimport CollapseExpandSingleIcon from \"../Icons/collection/CollapseExpandSingle\";\nimport ExpandAllIcon from \"../Icons/collection/ExpandAll\";\nimport CollapseAllIcon from \"../Icons/collection/CollapseAll\";\nimport SortIcon from \"../Icons/collection/SortIcon\";\nimport { StyledDataTable } from \"./Styles\";\n\nexport enum SortDirection {\n None = \"none\",\n Asc = \"asc\",\n Desc = \"desc\",\n}\n\ninterface IHeaderDefinition {\n key: string;\n label?: string;\n sortable?: boolean;\n renderCallback?: (row: object, key?: string, index?: number) => ReactNode;\n style?: object;\n hideCollapsed?: boolean;\n}\n\ninterface IDataTableProps extends ITableProps {\n /** Object of header name, sort and style. */\n header: IHeaderDefinition[];\n /** Object of rows. */\n rows: object[];\n /** CSS classes. */\n className?: string;\n /** Name of row by which we are sorting. */\n sortBy?: string;\n /** Direction by which we are sorting. */\n sortDirection?: SortDirection;\n /** Callback for sorting. */\n onSortCallback?: (sortKey: string, sortDirection: SortDirection) => void;\n /** Switch for column highlighting. */\n columnHighlight?: boolean;\n /** CSS classes for thead. */\n theadClass?: string;\n /** Column by which is data-table grouped. */\n groupBy?: string;\n /** No results Callback. */\n noResultsCallback?: () => ReactNode;\n /** Header of grouped list in data-table. */\n groupHead?: (row: object, index: string | null) => ReactNode;\n /** Grouped rows can be collapsed */\n isCollapsible?: boolean;\n /** Value to replace when column is empty */\n emptyValue?: object;\n}\n\nconst groupByKey = (items: object[], key: string): object => {\n if (items[0] instanceof Array) {\n items = items[0];\n }\n return items.reduce((result: object, item: object) => {\n return {\n ...result,\n [item[key] !== null ? \" \" + item[key] : item[key]]: [\n ...(result[item[key] !== null ? \" \" + item[key] : item[key]] || []),\n item,\n ],\n };\n }, {});\n};\n\nconst initialCollapsed = (rows: object[], groupBy?: string): object => {\n if (groupBy) {\n const groupedData = groupByKey(rows, groupBy);\n const keys = Object.keys(groupedData);\n const collapsedKeys = {};\n keys.forEach((key) => {\n collapsedKeys[key] = true;\n });\n return collapsedKeys;\n }\n return {};\n};\n\nexport const DataTable: FC<IDataTableProps> = ({\n header,\n rows,\n className,\n sortBy,\n sortDirection = SortDirection.None,\n onSortCallback,\n theadClass,\n noResultsCallback,\n groupBy,\n groupHead = (): null => null,\n isCollapsible,\n emptyValue,\n ...args\n}) => {\n const [columnDirection, setColumnDirection] = useState(sortDirection);\n const [active, setActive] = useState(sortBy);\n const [hovered, setHovered] = useState<string | null>();\n const [collapsed, setCollapsed] = useState(() => {\n return initialCollapsed(rows, groupBy);\n });\n const sort = (\n sortByKey: string,\n direction: SortDirection,\n rowsData: Record<string, string>[] | object\n ): object => {\n if (direction === SortDirection.None) {\n return rowsData;\n }\n\n if (rowsData instanceof Array)\n return rowsData.sort((a: object, b: object) => {\n if (direction === SortDirection.Asc) {\n if (a[sortByKey] === null) {\n return 1;\n }\n if (b[sortByKey] === null) {\n return -1;\n }\n }\n if (a[sortByKey] === null) {\n return -1;\n }\n if (b[sortByKey] === null) {\n return 1;\n }\n if (typeof a[sortByKey] === \"number\") {\n if (direction === SortDirection.Asc) {\n return a[sortByKey] - b[sortByKey];\n }\n return b[sortByKey] - a[sortByKey];\n }\n\n const first = a[sortByKey].toString();\n const second = b[sortByKey].toString();\n\n if (direction === SortDirection.Asc) {\n return first.localeCompare(second);\n }\n\n return second.localeCompare(first);\n });\n return {};\n };\n\n const initialData = useCallback(() => {\n if (sortBy && !groupBy) {\n return sort(sortBy, sortDirection, rows);\n }\n if (sortBy && groupBy) {\n sort(sortBy, sortDirection, rows);\n return groupByKey(rows, groupBy);\n }\n if (!sortBy && groupBy) {\n return groupByKey(rows, groupBy);\n }\n return rows;\n }, [groupBy, rows, sortBy, sortDirection]);\n\n const [data, setData] = useState<Record<string, string> | object>(\n initialData\n );\n\n const getNextSortDirection = (\n previousDirection: SortDirection,\n sameColumn: boolean\n ): SortDirection => {\n if (!sameColumn) {\n return SortDirection.Asc;\n }\n if (previousDirection === SortDirection.Asc) {\n return SortDirection.Desc;\n }\n return SortDirection.Asc;\n };\n\n const sortColumn = useCallback(\n (event: ISyntheticEvent) => {\n const index = event.currentTarget.dataset.index;\n if (index && header[index] && header[index].sortable) {\n const direction = getNextSortDirection(\n columnDirection,\n header[index].key === active\n );\n setActive(header[index].key);\n setColumnDirection(direction);\n if (groupBy) {\n let grouped: object = {\n ...data,\n };\n\n if (groupBy !== header[index].key) {\n Object.keys(grouped).map((key: string) => {\n grouped[key] = sort(header[index].key, direction, grouped[key]);\n });\n } else {\n if (rows instanceof Object) {\n grouped = sort(header[index].key, direction, rows);\n grouped = groupByKey([grouped], groupBy);\n }\n }\n setData(grouped);\n } else {\n setData(sort(header[index].key, direction, data));\n }\n if (onSortCallback) {\n onSortCallback(header[index].key, direction);\n }\n }\n\n return null;\n },\n [\n setData,\n data,\n columnDirection,\n setColumnDirection,\n header,\n active,\n setActive,\n onSortCallback,\n groupBy,\n rows,\n ]\n );\n\n const cellMouseOver = useCallback((e: ISyntheticEvent) => {\n if (e.target instanceof HTMLElement) {\n if (e.target.dataset.key) {\n setHovered(e.target.dataset.key);\n }\n }\n }, []);\n\n const cellMouseOut = useCallback(() => {\n setHovered(null);\n }, []);\n\n useEffect(() => {\n setData(initialData());\n setCollapsed(initialCollapsed(rows, groupBy));\n }, [rows, groupBy, initialData]);\n\n const renderNoResults = useCallback(() => {\n return (\n <tr>\n <td\n colSpan={header.length}\n className={classNames({ \"text-center\": !noResultsCallback })}\n >\n {noResultsCallback ? noResultsCallback() : \"There is no data.\"}\n </td>\n </tr>\n );\n }, [header, noResultsCallback]);\n\n const tableRef = useRef<HTMLTableElement>(null);\n\n const overlayStyles = (): number | undefined => {\n if (tableRef.current) {\n return tableRef.current.clientHeight + 5;\n }\n };\n\n const renderCell = useCallback(\n (h: IHeaderDefinition, row: object, colIndex: number) => {\n if (h.renderCallback) {\n return h.renderCallback(row, h.key, colIndex);\n }\n if (row[h.key] === null && emptyValue) {\n return <i className=\"opacity-75\">{emptyValue[h.key]}</i>;\n }\n return row[h.key];\n },\n [emptyValue]\n );\n\n const renderRow = useCallback(\n (row: object, rowIndex: number) => {\n return (\n <tr\n key={rowIndex}\n data-index={rowIndex}\n data-direction=\"asc\"\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((h: IHeaderDefinition, colIndex: number) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === h.key,\n })}\n data-key={h.key}\n style={header[colIndex].style ? header[colIndex].style : {}}\n >\n {renderCell(h, row, colIndex)}\n </td>\n );\n })}\n </tr>\n );\n },\n [cellMouseOut, cellMouseOver, header, hovered, renderCell]\n );\n\n const toggleCollapse = useCallback((event) => {\n const collapseKey = event.currentTarget.dataset.groupkey;\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n newState[collapseKey] = !prevState[collapseKey];\n return newState;\n });\n }, []);\n\n const renderRows = useMemo(() => {\n if (\n (data && data instanceof Array && data.length > 0) ||\n (typeof data === \"object\" && Object.keys(data).length > 0)\n ) {\n if (groupBy) {\n const keys = Object.keys(data);\n return keys.map((key: string, i: number) => {\n return (\n <Fragment key={key}>\n {isCollapsible && (\n <Tbody className=\"c-table__collapse_body\">\n <tr>\n <td\n data-groupkey={key}\n onClick={toggleCollapse}\n className=\"c-table__body__icon c-table--toggle-collapsed\"\n >\n <CollapseExpandSingleIcon\n className={classNames({\n \"c-table__collapse_icon--expanded\": !collapsed[key],\n \"c-table__collapse_icon--collapsed\": collapsed[key],\n })}\n />\n </td>\n </tr>\n </Tbody>\n )}\n <Tbody\n className={classNames(\"c-table__grouped__head\", `head_${i}`, {\n \"c-table__grouped__head--expanded\":\n isCollapsible && !collapsed[key],\n \"c-table__grouped__head--collapsed\":\n isCollapsible && collapsed[key],\n last: i === keys.length - 1,\n first: i === 0,\n })}\n >\n {groupHead(\n data[key],\n keys[i] !== \"null\" ? keys[i].trim() : null\n )}\n </Tbody>\n <Tbody\n className={classNames(`c-table__group c-table_group_${i}`, {\n hidden: collapsed[key],\n })}\n >\n {data[key].map((row: object, index: number) => {\n return renderRow(row, index);\n })}\n </Tbody>\n </Fragment>\n );\n });\n }\n return (\n <Tbody>\n {data instanceof Array &&\n data.map((row: object, rowIndex: number) => {\n return renderRow(row, rowIndex);\n })}\n </Tbody>\n );\n }\n return renderNoResults();\n }, [\n data,\n groupBy,\n renderRow,\n groupHead,\n collapsed,\n isCollapsible,\n renderNoResults,\n toggleCollapse,\n ]);\n\n const allGroupsCollapsed = useMemo(() => {\n return Object.keys(collapsed).every((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const hasCollapsed = useMemo(() => {\n return Object.keys(collapsed).some((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const toggleAllCollapsed = useCallback(() => {\n if (hasCollapsed) {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = false;\n });\n return newState;\n });\n } else {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = true;\n });\n return newState;\n });\n }\n }, [hasCollapsed]);\n\n return (\n <StyledDataTable\n as={Table}\n innerRef={tableRef}\n className={classNames(\"c-data-table\", className, {\n \"c-table__grouped\": groupBy,\n \"c-table__collapsible\": isCollapsible,\n \"padding-b-0\": groupBy && collapsed[Object.keys(data).slice(-1)[0]],\n })}\n {...args}\n >\n <Thead className={theadClass}>\n {header.length > 0 && (\n <tr className=\"c-table__row\">\n {header.map((h: IHeaderDefinition, index: number) => {\n return (\n <th\n key={h.key}\n className={classNames(`c-table__cell`, {\n \"c-table__cell--hovered\": hovered === h.key,\n \"c-table__head--hidden\":\n groupBy && allGroupsCollapsed && h.hideCollapsed,\n })}\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n data-key={h.key}\n style={h.style}\n >\n {isCollapsible && groupBy && index === 0 && (\n <span\n className=\"c-table__head__icon-wrapper\"\n onClick={toggleAllCollapsed}\n data-test=\"toggle-collapse\"\n >\n {hasCollapsed ? (\n <ExpandAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n ) : (\n <CollapseAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n )}\n </span>\n )}\n {hovered === h.key && (\n <div\n className=\"c-table__overlay\"\n style={{ height: overlayStyles() + `px` }}\n />\n )}\n <div\n onClick={sortColumn}\n data-index={index}\n className={classNames(\"c-table__icon-wrapper\", {\n \"cursor-pointer\": h.sortable === true,\n })}\n >\n <span className=\"c-table__label\">{h.label}</span>\n {h.sortable && (\n <SortIcon\n width=\"10px\"\n height=\"10px\"\n className={classNames(\"c-table__icon\", {\n \"c-table__icon--inactive\": h.key !== active,\n \"c-table__icon--active\": h.key === active,\n \"c-table__icon--asc\":\n columnDirection === SortDirection.Asc &&\n h.key === active,\n \"c-table__icon--desc\":\n columnDirection === SortDirection.Desc &&\n h.key === active,\n })}\n />\n )}\n </div>\n </th>\n );\n })}\n </tr>\n )}\n </Thead>\n\n {renderRows}\n </StyledDataTable>\n );\n};\n\nDataTable.displayName = \"DataTable\";\n"],"file":"DataTable.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tables/DataTable.tsx"],"names":["SortDirection","groupByKey","items","key","Array","reduce","result","item","initialCollapsed","rows","groupBy","groupedData","keys","Object","collapsedKeys","forEach","DataTable","header","className","sortBy","sortDirection","None","onSortCallback","theadClass","noResultsCallback","groupHead","isCollapsible","emptyValue","loading","loadingRows","args","columnDirection","setColumnDirection","active","setActive","hovered","setHovered","collapsed","setCollapsed","sort","sortByKey","direction","rowsData","a","b","Asc","first","toString","second","localeCompare","initialData","data","setData","getNextSortDirection","previousDirection","sameColumn","Desc","sortColumn","event","index","currentTarget","dataset","sortable","grouped","map","cellMouseOver","e","target","HTMLElement","cellMouseOut","renderNoResults","length","tableRef","overlayStyles","current","clientHeight","renderCell","h","row","colIndex","renderCallback","renderRow","rowIndex","style","toggleCollapse","collapseKey","groupkey","prevState","newState","renderPlaceholders","placeholders","fill","_","col","renderRows","i","last","trim","hidden","allGroupsCollapsed","every","hasCollapsed","some","toggleAllCollapsed","Table","slice","hideCollapsed","height","label","displayName"],"mappings":"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","sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useMemo,\n Fragment,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { ITableProps, Table, Tbody, Thead } from \"./Table\";\nimport { ISyntheticEvent } from \"../../types\";\nimport CollapseExpandSingleIcon from \"../Icons/collection/CollapseExpandSingle\";\nimport ExpandAllIcon from \"../Icons/collection/ExpandAll\";\nimport CollapseAllIcon from \"../Icons/collection/CollapseAll\";\nimport SortIcon from \"../Icons/collection/SortIcon\";\nimport { StyledDataTable } from \"./Styles\";\nimport { LinearLoader } from \"../Loaders\";\n\nexport enum SortDirection {\n None = \"none\",\n Asc = \"asc\",\n Desc = \"desc\",\n}\n\ninterface IHeaderDefinition {\n key: string;\n label?: string;\n sortable?: boolean;\n renderCallback?: (row: object, key?: string, index?: number) => ReactNode;\n style?: object;\n hideCollapsed?: boolean;\n}\n\nexport interface IDataTableProps extends ITableProps {\n /** Object of header name, sort and style. */\n header: IHeaderDefinition[];\n /** Object of rows. */\n rows?: object[];\n /** CSS classes. */\n className?: string;\n /** Name of row by which we are sorting. */\n sortBy?: string;\n /** Direction by which we are sorting. */\n sortDirection?: SortDirection;\n /** Callback for sorting. */\n onSortCallback?: (sortKey: string, sortDirection: SortDirection) => void;\n /** Switch for column highlighting. */\n columnHighlight?: boolean;\n /** CSS classes for thead. */\n theadClass?: string;\n /** Column by which is data-table grouped. */\n groupBy?: string;\n /** No results Callback. */\n noResultsCallback?: () => ReactNode;\n /** Header of grouped list in data-table. */\n groupHead?: (row: object, index: string | null) => ReactNode;\n /** Grouped rows can be collapsed */\n isCollapsible?: boolean;\n /** Value to replace when column is empty */\n emptyValue?: object;\n /** loading indicator */\n loading?: boolean;\n /** loading rows */\n loadingRows?: number;\n}\n\nconst groupByKey = (items: object[], key: string): object => {\n if (items[0] instanceof Array) {\n items = items[0];\n }\n return items.reduce((result: object, item: object) => {\n return {\n ...result,\n [item[key] !== null ? \" \" + item[key] : item[key]]: [\n ...(result[item[key] !== null ? \" \" + item[key] : item[key]] || []),\n item,\n ],\n };\n }, {});\n};\n\nconst initialCollapsed = (rows: object[], groupBy?: string): object => {\n if (groupBy) {\n const groupedData = groupByKey(rows, groupBy);\n const keys = Object.keys(groupedData);\n const collapsedKeys = {};\n keys.forEach((key) => {\n collapsedKeys[key] = true;\n });\n return collapsedKeys;\n }\n return {};\n};\n\nexport const DataTable: FC<IDataTableProps> = ({\n header,\n rows = [],\n className,\n sortBy,\n sortDirection = SortDirection.None,\n onSortCallback,\n theadClass,\n noResultsCallback,\n groupBy,\n groupHead = (): null => null,\n isCollapsible,\n emptyValue,\n loading,\n loadingRows = 7,\n ...args\n}) => {\n const [columnDirection, setColumnDirection] = useState(sortDirection);\n const [active, setActive] = useState(sortBy);\n const [hovered, setHovered] = useState<string | null>();\n const [collapsed, setCollapsed] = useState(() => {\n return initialCollapsed(rows, groupBy);\n });\n const sort = (\n sortByKey: string,\n direction: SortDirection,\n rowsData: Record<string, string>[] | object\n ): object => {\n if (direction === SortDirection.None) {\n return rowsData;\n }\n\n if (rowsData instanceof Array)\n return rowsData.sort((a: object, b: object) => {\n if (direction === SortDirection.Asc) {\n if (a[sortByKey] === null) {\n return 1;\n }\n if (b[sortByKey] === null) {\n return -1;\n }\n }\n if (a[sortByKey] === null) {\n return -1;\n }\n if (b[sortByKey] === null) {\n return 1;\n }\n if (typeof a[sortByKey] === \"number\") {\n if (direction === SortDirection.Asc) {\n return a[sortByKey] - b[sortByKey];\n }\n return b[sortByKey] - a[sortByKey];\n }\n\n const first = a[sortByKey].toString();\n const second = b[sortByKey].toString();\n\n if (direction === SortDirection.Asc) {\n return first.localeCompare(second);\n }\n\n return second.localeCompare(first);\n });\n return {};\n };\n\n const initialData = useCallback(() => {\n if (sortBy && !groupBy) {\n return sort(sortBy, sortDirection, rows);\n }\n if (sortBy && groupBy) {\n sort(sortBy, sortDirection, rows);\n return groupByKey(rows, groupBy);\n }\n if (!sortBy && groupBy) {\n return groupByKey(rows, groupBy);\n }\n return rows;\n }, [groupBy, rows, sortBy, sortDirection]);\n\n const [data, setData] = useState<Record<string, string> | object>(\n initialData\n );\n\n const getNextSortDirection = (\n previousDirection: SortDirection,\n sameColumn: boolean\n ): SortDirection => {\n if (!sameColumn) {\n return SortDirection.Asc;\n }\n if (previousDirection === SortDirection.Asc) {\n return SortDirection.Desc;\n }\n return SortDirection.Asc;\n };\n\n const sortColumn = useCallback(\n (event: ISyntheticEvent) => {\n const index = event.currentTarget.dataset.index;\n if (index && header[index] && header[index].sortable) {\n const direction = getNextSortDirection(\n columnDirection,\n header[index].key === active\n );\n setActive(header[index].key);\n setColumnDirection(direction);\n if (groupBy) {\n let grouped: object = {\n ...data,\n };\n\n if (groupBy !== header[index].key) {\n Object.keys(grouped).map((key: string) => {\n grouped[key] = sort(header[index].key, direction, grouped[key]);\n });\n } else {\n if (rows instanceof Object) {\n grouped = sort(header[index].key, direction, rows);\n grouped = groupByKey([grouped], groupBy);\n }\n }\n setData(grouped);\n } else {\n setData(sort(header[index].key, direction, data));\n }\n if (onSortCallback) {\n onSortCallback(header[index].key, direction);\n }\n }\n\n return null;\n },\n [\n setData,\n data,\n columnDirection,\n setColumnDirection,\n header,\n active,\n setActive,\n onSortCallback,\n groupBy,\n rows,\n ]\n );\n\n const cellMouseOver = useCallback((e: ISyntheticEvent) => {\n if (e.target instanceof HTMLElement) {\n if (e.target.dataset.key) {\n setHovered(e.target.dataset.key);\n }\n }\n }, []);\n\n const cellMouseOut = useCallback(() => {\n setHovered(null);\n }, []);\n\n useEffect(() => {\n setData(initialData());\n setCollapsed(initialCollapsed(rows, groupBy));\n }, [rows, groupBy, initialData]);\n\n const renderNoResults = useCallback(() => {\n return (\n <tr>\n <td\n colSpan={header.length}\n className={classNames({ \"text-center\": !noResultsCallback })}\n >\n {noResultsCallback ? noResultsCallback() : \"There is no data.\"}\n </td>\n </tr>\n );\n }, [header, noResultsCallback]);\n\n const tableRef = useRef<HTMLTableElement>(null);\n\n const overlayStyles = (): number | undefined => {\n if (tableRef.current) {\n return tableRef.current.clientHeight + 5;\n }\n };\n\n const renderCell = useCallback(\n (h: IHeaderDefinition, row: object, colIndex: number) => {\n if (h.renderCallback) {\n return h.renderCallback(row, h.key, colIndex);\n }\n if (row[h.key] === null && emptyValue) {\n return <i className=\"opacity-75\">{emptyValue[h.key]}</i>;\n }\n return row[h.key];\n },\n [emptyValue]\n );\n\n const renderRow = useCallback(\n (row: object, rowIndex: number) => {\n return (\n <tr\n key={rowIndex}\n data-index={rowIndex}\n data-direction=\"asc\"\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((h: IHeaderDefinition, colIndex: number) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === h.key,\n })}\n data-key={h.key}\n style={header[colIndex].style ? header[colIndex].style : {}}\n >\n {renderCell(h, row, colIndex)}\n </td>\n );\n })}\n </tr>\n );\n },\n [cellMouseOut, cellMouseOver, header, hovered, renderCell]\n );\n\n const toggleCollapse = useCallback((event) => {\n const collapseKey = event.currentTarget.dataset.groupkey;\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n newState[collapseKey] = !prevState[collapseKey];\n return newState;\n });\n }, []);\n\n const renderPlaceholders = useMemo(() => {\n const placeholders = Array(loadingRows)\n .fill({})\n .map((_, index) => {\n return (\n <tr\n key={index}\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((col, colIndex) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === col.key,\n })}\n data-key={col.key}\n >\n <LinearLoader />\n </td>\n );\n })}\n </tr>\n );\n });\n\n return <Tbody>{placeholders}</Tbody>;\n }, [cellMouseOut, cellMouseOver, header, hovered, loadingRows]);\n\n const renderRows = useMemo(() => {\n if (\n (data && data instanceof Array && data.length > 0) ||\n (typeof data === \"object\" && Object.keys(data).length > 0)\n ) {\n if (groupBy) {\n const keys = Object.keys(data);\n return keys.map((key: string, i: number) => {\n return (\n <Fragment key={key}>\n {isCollapsible && (\n <Tbody className=\"c-table__collapse_body\">\n <tr>\n <td\n data-groupkey={key}\n onClick={toggleCollapse}\n className=\"c-table__body__icon c-table--toggle-collapsed\"\n >\n <CollapseExpandSingleIcon\n className={classNames({\n \"c-table__collapse_icon--expanded\": !collapsed[key],\n \"c-table__collapse_icon--collapsed\": collapsed[key],\n })}\n />\n </td>\n </tr>\n </Tbody>\n )}\n <Tbody\n className={classNames(\"c-table__grouped__head\", `head_${i}`, {\n \"c-table__grouped__head--expanded\":\n isCollapsible && !collapsed[key],\n \"c-table__grouped__head--collapsed\":\n isCollapsible && collapsed[key],\n last: i === keys.length - 1,\n first: i === 0,\n })}\n >\n {groupHead(\n data[key],\n keys[i] !== \"null\" ? keys[i].trim() : null\n )}\n </Tbody>\n <Tbody\n className={classNames(`c-table__group c-table_group_${i}`, {\n hidden: collapsed[key],\n })}\n >\n {data[key].map((row: object, index: number) => {\n return renderRow(row, index);\n })}\n </Tbody>\n </Fragment>\n );\n });\n }\n return (\n <Tbody>\n {data instanceof Array &&\n data.map((row: object, rowIndex: number) => {\n return renderRow(row, rowIndex);\n })}\n </Tbody>\n );\n }\n return renderNoResults();\n }, [\n data,\n groupBy,\n renderRow,\n groupHead,\n collapsed,\n isCollapsible,\n renderNoResults,\n toggleCollapse,\n ]);\n\n const allGroupsCollapsed = useMemo(() => {\n return Object.keys(collapsed).every((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const hasCollapsed = useMemo(() => {\n return Object.keys(collapsed).some((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const toggleAllCollapsed = useCallback(() => {\n if (hasCollapsed) {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = false;\n });\n return newState;\n });\n } else {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = true;\n });\n return newState;\n });\n }\n }, [hasCollapsed]);\n\n return (\n <StyledDataTable\n as={Table}\n innerRef={tableRef}\n className={classNames(\"c-data-table\", className, {\n \"c-table__grouped\": groupBy,\n \"c-table__collapsible\": isCollapsible,\n \"padding-b-0\": groupBy && collapsed[Object.keys(data).slice(-1)[0]],\n })}\n {...args}\n >\n <Thead className={theadClass}>\n {header.length > 0 && (\n <tr className=\"c-table__row\">\n {header.map((h: IHeaderDefinition, index: number) => {\n return (\n <th\n key={h.key}\n className={classNames(`c-table__cell`, {\n \"c-table__cell--hovered\": hovered === h.key,\n \"c-table__head--hidden\":\n groupBy && allGroupsCollapsed && h.hideCollapsed,\n })}\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n data-key={h.key}\n style={h.style}\n >\n {isCollapsible && groupBy && index === 0 && (\n <span\n className=\"c-table__head__icon-wrapper\"\n onClick={toggleAllCollapsed}\n data-test=\"toggle-collapse\"\n >\n {hasCollapsed ? (\n <ExpandAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n ) : (\n <CollapseAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n )}\n </span>\n )}\n {hovered === h.key && (\n <div\n className=\"c-table__overlay\"\n style={{ height: overlayStyles() + `px` }}\n />\n )}\n <div\n onClick={sortColumn}\n data-index={index}\n className={classNames(\"c-table__icon-wrapper\", {\n \"cursor-pointer\": h.sortable === true,\n })}\n >\n <span className=\"c-table__label\">{h.label}</span>\n {h.sortable && (\n <SortIcon\n width=\"10px\"\n height=\"10px\"\n className={classNames(\"c-table__icon\", {\n \"c-table__icon--inactive\": h.key !== active,\n \"c-table__icon--active\": h.key === active,\n \"c-table__icon--asc\":\n columnDirection === SortDirection.Asc &&\n h.key === active,\n \"c-table__icon--desc\":\n columnDirection === SortDirection.Desc &&\n h.key === active,\n })}\n />\n )}\n </div>\n </th>\n );\n })}\n </tr>\n )}\n </Thead>\n\n {loading ? renderPlaceholders : renderRows}\n </StyledDataTable>\n );\n};\n\nDataTable.displayName = \"DataTable\";\n"],"file":"DataTable.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tables/Table.tsx"],"names":["Table","children","className","striped","innerRef","displayName","Thead","Tbody"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAuBO,IAAMA,KAA2C,GAAG,SAA9CA,KAA8C,OAKrD;AAAA,MAJJC,QAII,QAJJA,QAII;AAAA,MAHJC,SAGI,QAHJA,SAGI;AAAA,0BAFJC,OAEI;AAAA,MAFJA,OAEI,6BAFM,KAEN;AAAA,MADJC,QACI,QADJA,QACI;AACJ,sBACE,6BAAC,0BAAD;AAAoB,IAAA,SAAS,EAAC;AAA9B,kBACE,6BAAC,mBAAD;AACE,IAAA,GAAG,EAAEA,QADP;AAEE,IAAA,SAAS,EAAE,yBAAW,SAAX,EAAsBF,SAAtB,CAFb;AAGE,IAAA,QAAQ,EAAEC;AAHZ,KAKGF,QALH,CADF,CADF;AAWD,CAjBM;;;AAmBPD,KAAK,CAACK,WAAN,GAAoB,OAApB;;AAEO,IAAMC,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGL,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,6BAAC,uBAAD;AAAiB,IAAA,SAAS,EAAE,yBAAW,eAAX,EAA4BA,SAA5B;AAA5B,KACGD,QADH,CAD2C;AAAA,CAAtC;;;AAMPK,KAAK,CAACD,WAAN,GAAoB,OAApB;;AAEO,IAAME,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGN,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,6BAAC,uBAAD;AAAiB,IAAA,SAAS,EAAE,yBAAW,eAAX,EAA4BA,SAA5B;AAA5B,KACGD,QADH,CAD2C;AAAA,CAAtC;;;AAMPM,KAAK,CAACF,WAAN,GAAoB,OAApB","sourcesContent":["import React, { ReactNode, FC, RefObject } from \"react\";\nimport classNames from \"classnames\";\nimport {\n StyledTableWrapper,\n StyledTable,\n StyledTableBody,\n StyledTableHead,\n} from \"./Styles\";\n\ninterface ITableWithChildren {\n /** Children prop can be ReactNode. */\n children: ReactNode;\n /** Classname prop for custom styling. */\n className?: string;\n}\n\nexport interface ITableProps {\n /** Darker color on odd column. */\n striped?: boolean;\n /** CSS classes. */\n className?: string;\n /** Ref object for table. */\n innerRef?: RefObject<HTMLTableElement>;\n}\n\nexport const Table: FC<ITableProps & ITableWithChildren> = ({\n children,\n className,\n striped = false,\n innerRef,\n}) => {\n return (\n <StyledTableWrapper className=\"c-table__wrap\">\n <StyledTable\n ref={innerRef}\n className={classNames(\"c-table\", className)}\n $striped={striped}\n >\n {children}\n </StyledTable>\n </StyledTableWrapper>\n );\n};\n\nTable.displayName = \"Table\";\n\nexport const Thead: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableHead className={classNames(\"c-table__head\", className)}>\n {children}\n </StyledTableHead>\n);\n\nThead.displayName = \"Thead\";\n\nexport const Tbody: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableBody className={classNames(\"c-table__body\", className)}>\n {children}\n </StyledTableBody>\n);\n\nTbody.displayName = \"Tbody\";\n"],"file":"Table.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tables/Table.tsx"],"names":["Table","children","className","striped","innerRef","displayName","Thead","Tbody"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAuBO,IAAMA,KAA2C,GAAG,SAA9CA,KAA8C,OAKrD;AAAA,MAJJC,QAII,QAJJA,QAII;AAAA,MAHJC,SAGI,QAHJA,SAGI;AAAA,0BAFJC,OAEI;AAAA,MAFJA,OAEI,6BAFM,KAEN;AAAA,MADJC,QACI,QADJA,QACI;AACJ,sBACE,6BAAC,0BAAD;AAAoB,IAAA,SAAS,EAAC;AAA9B,kBACE,6BAAC,mBAAD;AACE,IAAA,GAAG,EAAEA,QADP;AAEE,IAAA,SAAS,EAAE,yBAAW,SAAX,EAAsBF,SAAtB,CAFb;AAGE,IAAA,QAAQ,EAAEC;AAHZ,KAKGF,QALH,CADF,CADF;AAWD,CAjBM;;;AAmBPD,KAAK,CAACK,WAAN,GAAoB,OAApB;;AAEO,IAAMC,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGL,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,6BAAC,uBAAD;AAAiB,IAAA,SAAS,EAAE,yBAAW,eAAX,EAA4BA,SAA5B;AAA5B,KACGD,QADH,CAD2C;AAAA,CAAtC;;;AAMPK,KAAK,CAACD,WAAN,GAAoB,OAApB;;AAEO,IAAME,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGN,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,6BAAC,uBAAD;AAAiB,IAAA,SAAS,EAAE,yBAAW,eAAX,EAA4BA,SAA5B;AAA5B,KACGD,QADH,CAD2C;AAAA,CAAtC;;;AAMPM,KAAK,CAACF,WAAN,GAAoB,OAApB","sourcesContent":["import React, { ReactNode, FC, RefObject } from \"react\";\nimport classNames from \"classnames\";\nimport {\n StyledTableWrapper,\n StyledTable,\n StyledTableBody,\n StyledTableHead,\n} from \"./Styles\";\n\nexport interface ITableWithChildren {\n /** Children prop can be ReactNode. */\n children: ReactNode;\n /** Classname prop for custom styling. */\n className?: string;\n}\n\nexport interface ITableProps {\n /** Darker color on odd column. */\n striped?: boolean;\n /** CSS classes. */\n className?: string;\n /** Ref object for table. */\n innerRef?: RefObject<HTMLTableElement>;\n}\n\nexport const Table: FC<ITableProps & ITableWithChildren> = ({\n children,\n className,\n striped = false,\n innerRef,\n}) => {\n return (\n <StyledTableWrapper className=\"c-table__wrap\">\n <StyledTable\n ref={innerRef}\n className={classNames(\"c-table\", className)}\n $striped={striped}\n >\n {children}\n </StyledTable>\n </StyledTableWrapper>\n );\n};\n\nTable.displayName = \"Table\";\n\nexport const Thead: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableHead className={classNames(\"c-table__head\", className)}>\n {children}\n </StyledTableHead>\n);\n\nThead.displayName = \"Thead\";\n\nexport const Tbody: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableBody className={classNames(\"c-table__body\", className)}>\n {children}\n </StyledTableBody>\n);\n\nTbody.displayName = \"Tbody\";\n"],"file":"Table.js"}
@@ -13,9 +13,9 @@ interface IHeaderDefinition {
13
13
  style?: object;
14
14
  hideCollapsed?: boolean;
15
15
  }
16
- interface IDataTableProps extends ITableProps {
16
+ export interface IDataTableProps extends ITableProps {
17
17
  header: IHeaderDefinition[];
18
- rows: object[];
18
+ rows?: object[];
19
19
  className?: string;
20
20
  sortBy?: string;
21
21
  sortDirection?: SortDirection;
@@ -27,6 +27,8 @@ interface IDataTableProps extends ITableProps {
27
27
  groupHead?: (row: object, index: string | null) => ReactNode;
28
28
  isCollapsible?: boolean;
29
29
  emptyValue?: object;
30
+ loading?: boolean;
31
+ loadingRows?: number;
30
32
  }
31
33
  export declare const DataTable: FC<IDataTableProps>;
32
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/Tables/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,EAAE,EAGF,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAQ3D,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,eAAgB,SAAQ,WAAW;IAE3C,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE5B,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IAEzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iBAAiB,CAAC,EAAE,MAAM,SAAS,CAAC;IAEpC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IAE7D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8BD,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,eAAe,CA4azC,CAAC"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/Tables/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,EAAE,EAGF,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAS3D,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAElD,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IAEzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iBAAiB,CAAC,EAAE,MAAM,SAAS,CAAC;IAEpC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IAE7D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8BD,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,eAAe,CA6czC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- var _excluded = ["header", "rows", "className", "sortBy", "sortDirection", "onSortCallback", "theadClass", "noResultsCallback", "groupBy", "groupHead", "isCollapsible", "emptyValue"];
3
+ var _excluded = ["header", "rows", "className", "sortBy", "sortDirection", "onSortCallback", "theadClass", "noResultsCallback", "groupBy", "groupHead", "isCollapsible", "emptyValue", "loading", "loadingRows"];
4
4
  import React, { useCallback, useState, useEffect, useRef, useMemo, Fragment } from "react";
5
5
  import classNames from "classnames";
6
6
  import { Table, Tbody, Thead } from "./Table";
@@ -9,6 +9,7 @@ import ExpandAllIcon from "../Icons/collection/ExpandAll";
9
9
  import CollapseAllIcon from "../Icons/collection/CollapseAll";
10
10
  import SortIcon from "../Icons/collection/SortIcon";
11
11
  import { StyledDataTable } from "./Styles";
12
+ import { LinearLoader } from "../Loaders";
12
13
  export var SortDirection;
13
14
 
14
15
  (function (SortDirection) {
@@ -45,7 +46,8 @@ var initialCollapsed = function initialCollapsed(rows, groupBy) {
45
46
 
46
47
  export var DataTable = function DataTable(_ref) {
47
48
  var header = _ref.header,
48
- rows = _ref.rows,
49
+ _ref$rows = _ref.rows,
50
+ rows = _ref$rows === void 0 ? [] : _ref$rows,
49
51
  className = _ref.className,
50
52
  sortBy = _ref.sortBy,
51
53
  _ref$sortDirection = _ref.sortDirection,
@@ -60,6 +62,9 @@ export var DataTable = function DataTable(_ref) {
60
62
  } : _ref$groupHead,
61
63
  isCollapsible = _ref.isCollapsible,
62
64
  emptyValue = _ref.emptyValue,
65
+ loading = _ref.loading,
66
+ _ref$loadingRows = _ref.loadingRows,
67
+ loadingRows = _ref$loadingRows === void 0 ? 7 : _ref$loadingRows,
63
68
  args = _objectWithoutPropertiesLoose(_ref, _excluded);
64
69
 
65
70
  var _useState = useState(sortDirection),
@@ -262,6 +267,25 @@ export var DataTable = function DataTable(_ref) {
262
267
  return newState;
263
268
  });
264
269
  }, []);
270
+ var renderPlaceholders = useMemo(function () {
271
+ var placeholders = Array(loadingRows).fill({}).map(function (_, index) {
272
+ return /*#__PURE__*/React.createElement("tr", {
273
+ key: index,
274
+ className: "c-table__row",
275
+ onMouseOver: cellMouseOver,
276
+ onMouseLeave: cellMouseOut
277
+ }, header.map(function (col, colIndex) {
278
+ return /*#__PURE__*/React.createElement("td", {
279
+ key: colIndex,
280
+ className: classNames("c-table__cell c-data-table__item", {
281
+ hovered: hovered === col.key
282
+ }),
283
+ "data-key": col.key
284
+ }, /*#__PURE__*/React.createElement(LinearLoader, null));
285
+ }));
286
+ });
287
+ return /*#__PURE__*/React.createElement(Tbody, null, placeholders);
288
+ }, [cellMouseOut, cellMouseOver, header, hovered, loadingRows]);
265
289
  var renderRows = useMemo(function () {
266
290
  if (data && data instanceof Array && data.length > 0 || typeof data === "object" && Object.keys(data).length > 0) {
267
291
  if (groupBy) {
@@ -389,7 +413,7 @@ export var DataTable = function DataTable(_ref) {
389
413
  "c-table__icon--desc": columnDirection === SortDirection.Desc && h.key === active
390
414
  })
391
415
  })));
392
- }))), renderRows);
416
+ }))), loading ? renderPlaceholders : renderRows);
393
417
  };
394
418
  DataTable.displayName = "DataTable";
395
419
  //# sourceMappingURL=DataTable.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tables/DataTable.tsx"],"names":["React","useCallback","useState","useEffect","useRef","useMemo","Fragment","classNames","Table","Tbody","Thead","CollapseExpandSingleIcon","ExpandAllIcon","CollapseAllIcon","SortIcon","StyledDataTable","SortDirection","groupByKey","items","key","Array","reduce","result","item","initialCollapsed","rows","groupBy","groupedData","keys","Object","collapsedKeys","forEach","DataTable","header","className","sortBy","sortDirection","None","onSortCallback","theadClass","noResultsCallback","groupHead","isCollapsible","emptyValue","args","columnDirection","setColumnDirection","active","setActive","hovered","setHovered","collapsed","setCollapsed","sort","sortByKey","direction","rowsData","a","b","Asc","first","toString","second","localeCompare","initialData","data","setData","getNextSortDirection","previousDirection","sameColumn","Desc","sortColumn","event","index","currentTarget","dataset","sortable","grouped","map","cellMouseOver","e","target","HTMLElement","cellMouseOut","renderNoResults","length","tableRef","overlayStyles","current","clientHeight","renderCell","h","row","colIndex","renderCallback","renderRow","rowIndex","style","toggleCollapse","collapseKey","groupkey","prevState","newState","renderRows","i","last","trim","hidden","allGroupsCollapsed","every","hasCollapsed","some","toggleAllCollapsed","slice","hideCollapsed","height","label","displayName"],"mappings":";;;AAAA,OAAOA,KAAP,IAEEC,WAFF,EAGEC,QAHF,EAKEC,SALF,EAMEC,MANF,EAOEC,OAPF,EAQEC,QARF,QASO,OATP;AAUA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAAsBC,KAAtB,EAA6BC,KAA7B,EAAoCC,KAApC,QAAiD,SAAjD;AAEA,OAAOC,wBAAP,MAAqC,0CAArC;AACA,OAAOC,aAAP,MAA0B,+BAA1B;AACA,OAAOC,eAAP,MAA4B,iCAA5B;AACA,OAAOC,QAAP,MAAqB,8BAArB;AACA,SAASC,eAAT,QAAgC,UAAhC;AAEA,WAAYC,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a;;AA4CZ,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,KAAD,EAAkBC,GAAlB,EAA0C;AAC3D,MAAID,KAAK,CAAC,CAAD,CAAL,YAAoBE,KAAxB,EAA+B;AAC7BF,IAAAA,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAb;AACD;;AACD,SAAOA,KAAK,CAACG,MAAN,CAAa,UAACC,MAAD,EAAiBC,IAAjB,EAAkC;AAAA;;AACpD,wBACKD,MADL,6BAEGC,IAAI,CAACJ,GAAD,CAAJ,KAAc,IAAd,GAAqB,MAAMI,IAAI,CAACJ,GAAD,CAA/B,GAAuCI,IAAI,CAACJ,GAAD,CAF9C,cAGQG,MAAM,CAACC,IAAI,CAACJ,GAAD,CAAJ,KAAc,IAAd,GAAqB,MAAMI,IAAI,CAACJ,GAAD,CAA/B,GAAuCI,IAAI,CAACJ,GAAD,CAA5C,CAAN,IAA4D,EAHpE,GAIII,IAJJ;AAOD,GARM,EAQJ,EARI,CAAP;AASD,CAbD;;AAeA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,IAAD,EAAiBC,OAAjB,EAA8C;AACrE,MAAIA,OAAJ,EAAa;AACX,QAAMC,WAAW,GAAGV,UAAU,CAACQ,IAAD,EAAOC,OAAP,CAA9B;AACA,QAAME,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAYD,WAAZ,CAAb;AACA,QAAMG,aAAa,GAAG,EAAtB;AACAF,IAAAA,IAAI,CAACG,OAAL,CAAa,UAACZ,GAAD,EAAS;AACpBW,MAAAA,aAAa,CAACX,GAAD,CAAb,GAAqB,IAArB;AACD,KAFD;AAGA,WAAOW,aAAP;AACD;;AACD,SAAO,EAAP;AACD,CAXD;;AAaA,OAAO,IAAME,SAA8B,GAAG,SAAjCA,SAAiC,OAcxC;AAAA,MAbJC,MAaI,QAbJA,MAaI;AAAA,MAZJR,IAYI,QAZJA,IAYI;AAAA,MAXJS,SAWI,QAXJA,SAWI;AAAA,MAVJC,MAUI,QAVJA,MAUI;AAAA,gCATJC,aASI;AAAA,MATJA,aASI,mCATYpB,aAAa,CAACqB,IAS1B;AAAA,MARJC,cAQI,QARJA,cAQI;AAAA,MAPJC,UAOI,QAPJA,UAOI;AAAA,MANJC,iBAMI,QANJA,iBAMI;AAAA,MALJd,OAKI,QALJA,OAKI;AAAA,4BAJJe,SAII;AAAA,MAJJA,SAII,+BAJQ;AAAA,WAAY,IAAZ;AAAA,GAIR;AAAA,MAHJC,aAGI,QAHJA,aAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADDC,IACC;;AACJ,kBAA8C1C,QAAQ,CAACkC,aAAD,CAAtD;AAAA,MAAOS,eAAP;AAAA,MAAwBC,kBAAxB;;AACA,mBAA4B5C,QAAQ,CAACiC,MAAD,CAApC;AAAA,MAAOY,MAAP;AAAA,MAAeC,SAAf;;AACA,mBAA8B9C,QAAQ,EAAtC;AAAA,MAAO+C,OAAP;AAAA,MAAgBC,UAAhB;;AACA,mBAAkChD,QAAQ,CAAC,YAAM;AAC/C,WAAOsB,gBAAgB,CAACC,IAAD,EAAOC,OAAP,CAAvB;AACD,GAFyC,CAA1C;AAAA,MAAOyB,SAAP;AAAA,MAAkBC,YAAlB;;AAGA,MAAMC,IAAI,GAAG,SAAPA,IAAO,CACXC,SADW,EAEXC,SAFW,EAGXC,QAHW,EAIA;AACX,QAAID,SAAS,KAAKvC,aAAa,CAACqB,IAAhC,EAAsC;AACpC,aAAOmB,QAAP;AACD;;AAED,QAAIA,QAAQ,YAAYpC,KAAxB,EACE,OAAOoC,QAAQ,CAACH,IAAT,CAAc,UAACI,CAAD,EAAYC,CAAZ,EAA0B;AAC7C,UAAIH,SAAS,KAAKvC,aAAa,CAAC2C,GAAhC,EAAqC;AACnC,YAAIF,CAAC,CAACH,SAAD,CAAD,KAAiB,IAArB,EAA2B;AACzB,iBAAO,CAAP;AACD;;AACD,YAAII,CAAC,CAACJ,SAAD,CAAD,KAAiB,IAArB,EAA2B;AACzB,iBAAO,CAAC,CAAR;AACD;AACF;;AACD,UAAIG,CAAC,CAACH,SAAD,CAAD,KAAiB,IAArB,EAA2B;AACzB,eAAO,CAAC,CAAR;AACD;;AACD,UAAII,CAAC,CAACJ,SAAD,CAAD,KAAiB,IAArB,EAA2B;AACzB,eAAO,CAAP;AACD;;AACD,UAAI,OAAOG,CAAC,CAACH,SAAD,CAAR,KAAwB,QAA5B,EAAsC;AACpC,YAAIC,SAAS,KAAKvC,aAAa,CAAC2C,GAAhC,EAAqC;AACnC,iBAAOF,CAAC,CAACH,SAAD,CAAD,GAAeI,CAAC,CAACJ,SAAD,CAAvB;AACD;;AACD,eAAOI,CAAC,CAACJ,SAAD,CAAD,GAAeG,CAAC,CAACH,SAAD,CAAvB;AACD;;AAED,UAAMM,KAAK,GAAGH,CAAC,CAACH,SAAD,CAAD,CAAaO,QAAb,EAAd;AACA,UAAMC,MAAM,GAAGJ,CAAC,CAACJ,SAAD,CAAD,CAAaO,QAAb,EAAf;;AAEA,UAAIN,SAAS,KAAKvC,aAAa,CAAC2C,GAAhC,EAAqC;AACnC,eAAOC,KAAK,CAACG,aAAN,CAAoBD,MAApB,CAAP;AACD;;AAED,aAAOA,MAAM,CAACC,aAAP,CAAqBH,KAArB,CAAP;AACD,KA9BM,CAAP;AA+BF,WAAO,EAAP;AACD,GA1CD;;AA4CA,MAAMI,WAAW,GAAG/D,WAAW,CAAC,YAAM;AACpC,QAAIkC,MAAM,IAAI,CAACT,OAAf,EAAwB;AACtB,aAAO2B,IAAI,CAAClB,MAAD,EAASC,aAAT,EAAwBX,IAAxB,CAAX;AACD;;AACD,QAAIU,MAAM,IAAIT,OAAd,EAAuB;AACrB2B,MAAAA,IAAI,CAAClB,MAAD,EAASC,aAAT,EAAwBX,IAAxB,CAAJ;AACA,aAAOR,UAAU,CAACQ,IAAD,EAAOC,OAAP,CAAjB;AACD;;AACD,QAAI,CAACS,MAAD,IAAWT,OAAf,EAAwB;AACtB,aAAOT,UAAU,CAACQ,IAAD,EAAOC,OAAP,CAAjB;AACD;;AACD,WAAOD,IAAP;AACD,GAZ8B,EAY5B,CAACC,OAAD,EAAUD,IAAV,EAAgBU,MAAhB,EAAwBC,aAAxB,CAZ4B,CAA/B;;AAcA,mBAAwBlC,QAAQ,CAC9B8D,WAD8B,CAAhC;AAAA,MAAOC,IAAP;AAAA,MAAaC,OAAb;;AAIA,MAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAC3BC,iBAD2B,EAE3BC,UAF2B,EAGT;AAClB,QAAI,CAACA,UAAL,EAAiB;AACf,aAAOrD,aAAa,CAAC2C,GAArB;AACD;;AACD,QAAIS,iBAAiB,KAAKpD,aAAa,CAAC2C,GAAxC,EAA6C;AAC3C,aAAO3C,aAAa,CAACsD,IAArB;AACD;;AACD,WAAOtD,aAAa,CAAC2C,GAArB;AACD,GAXD;;AAaA,MAAMY,UAAU,GAAGtE,WAAW,CAC5B,UAACuE,KAAD,EAA4B;AAC1B,QAAMC,KAAK,GAAGD,KAAK,CAACE,aAAN,CAAoBC,OAApB,CAA4BF,KAA1C;;AACA,QAAIA,KAAK,IAAIxC,MAAM,CAACwC,KAAD,CAAf,IAA0BxC,MAAM,CAACwC,KAAD,CAAN,CAAcG,QAA5C,EAAsD;AACpD,UAAMrB,SAAS,GAAGY,oBAAoB,CACpCtB,eADoC,EAEpCZ,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAd,KAAsB4B,MAFc,CAAtC;AAIAC,MAAAA,SAAS,CAACf,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAf,CAAT;AACA2B,MAAAA,kBAAkB,CAACS,SAAD,CAAlB;;AACA,UAAI7B,OAAJ,EAAa;AACX,YAAImD,OAAe,gBACdZ,IADc,CAAnB;;AAIA,YAAIvC,OAAO,KAAKO,MAAM,CAACwC,KAAD,CAAN,CAActD,GAA9B,EAAmC;AACjCU,UAAAA,MAAM,CAACD,IAAP,CAAYiD,OAAZ,EAAqBC,GAArB,CAAyB,UAAC3D,GAAD,EAAiB;AACxC0D,YAAAA,OAAO,CAAC1D,GAAD,CAAP,GAAekC,IAAI,CAACpB,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAf,EAAoBoC,SAApB,EAA+BsB,OAAO,CAAC1D,GAAD,CAAtC,CAAnB;AACD,WAFD;AAGD,SAJD,MAIO;AACL,cAAIM,IAAI,YAAYI,MAApB,EAA4B;AAC1BgD,YAAAA,OAAO,GAAGxB,IAAI,CAACpB,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAf,EAAoBoC,SAApB,EAA+B9B,IAA/B,CAAd;AACAoD,YAAAA,OAAO,GAAG5D,UAAU,CAAC,CAAC4D,OAAD,CAAD,EAAYnD,OAAZ,CAApB;AACD;AACF;;AACDwC,QAAAA,OAAO,CAACW,OAAD,CAAP;AACD,OAhBD,MAgBO;AACLX,QAAAA,OAAO,CAACb,IAAI,CAACpB,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAf,EAAoBoC,SAApB,EAA+BU,IAA/B,CAAL,CAAP;AACD;;AACD,UAAI3B,cAAJ,EAAoB;AAClBA,QAAAA,cAAc,CAACL,MAAM,CAACwC,KAAD,CAAN,CAActD,GAAf,EAAoBoC,SAApB,CAAd;AACD;AACF;;AAED,WAAO,IAAP;AACD,GAnC2B,EAoC5B,CACEW,OADF,EAEED,IAFF,EAGEpB,eAHF,EAIEC,kBAJF,EAKEb,MALF,EAMEc,MANF,EAOEC,SAPF,EAQEV,cARF,EASEZ,OATF,EAUED,IAVF,CApC4B,CAA9B;AAkDA,MAAMsD,aAAa,GAAG9E,WAAW,CAAC,UAAC+E,CAAD,EAAwB;AACxD,QAAIA,CAAC,CAACC,MAAF,YAAoBC,WAAxB,EAAqC;AACnC,UAAIF,CAAC,CAACC,MAAF,CAASN,OAAT,CAAiBxD,GAArB,EAA0B;AACxB+B,QAAAA,UAAU,CAAC8B,CAAC,CAACC,MAAF,CAASN,OAAT,CAAiBxD,GAAlB,CAAV;AACD;AACF;AACF,GANgC,EAM9B,EAN8B,CAAjC;AAQA,MAAMgE,YAAY,GAAGlF,WAAW,CAAC,YAAM;AACrCiD,IAAAA,UAAU,CAAC,IAAD,CAAV;AACD,GAF+B,EAE7B,EAF6B,CAAhC;AAIA/C,EAAAA,SAAS,CAAC,YAAM;AACd+D,IAAAA,OAAO,CAACF,WAAW,EAAZ,CAAP;AACAZ,IAAAA,YAAY,CAAC5B,gBAAgB,CAACC,IAAD,EAAOC,OAAP,CAAjB,CAAZ;AACD,GAHQ,EAGN,CAACD,IAAD,EAAOC,OAAP,EAAgBsC,WAAhB,CAHM,CAAT;AAKA,MAAMoB,eAAe,GAAGnF,WAAW,CAAC,YAAM;AACxC,wBACE,6CACE;AACE,MAAA,OAAO,EAAEgC,MAAM,CAACoD,MADlB;AAEE,MAAA,SAAS,EAAE9E,UAAU,CAAC;AAAE,uBAAe,CAACiC;AAAlB,OAAD;AAFvB,OAIGA,iBAAiB,GAAGA,iBAAiB,EAApB,GAAyB,mBAJ7C,CADF,CADF;AAUD,GAXkC,EAWhC,CAACP,MAAD,EAASO,iBAAT,CAXgC,CAAnC;AAaA,MAAM8C,QAAQ,GAAGlF,MAAM,CAAmB,IAAnB,CAAvB;;AAEA,MAAMmF,aAAa,GAAG,SAAhBA,aAAgB,GAA0B;AAC9C,QAAID,QAAQ,CAACE,OAAb,EAAsB;AACpB,aAAOF,QAAQ,CAACE,OAAT,CAAiBC,YAAjB,GAAgC,CAAvC;AACD;AACF,GAJD;;AAMA,MAAMC,UAAU,GAAGzF,WAAW,CAC5B,UAAC0F,CAAD,EAAuBC,GAAvB,EAAoCC,QAApC,EAAyD;AACvD,QAAIF,CAAC,CAACG,cAAN,EAAsB;AACpB,aAAOH,CAAC,CAACG,cAAF,CAAiBF,GAAjB,EAAsBD,CAAC,CAACxE,GAAxB,EAA6B0E,QAA7B,CAAP;AACD;;AACD,QAAID,GAAG,CAACD,CAAC,CAACxE,GAAH,CAAH,KAAe,IAAf,IAAuBwB,UAA3B,EAAuC;AACrC,0BAAO;AAAG,QAAA,SAAS,EAAC;AAAb,SAA2BA,UAAU,CAACgD,CAAC,CAACxE,GAAH,CAArC,CAAP;AACD;;AACD,WAAOyE,GAAG,CAACD,CAAC,CAACxE,GAAH,CAAV;AACD,GAT2B,EAU5B,CAACwB,UAAD,CAV4B,CAA9B;AAaA,MAAMoD,SAAS,GAAG9F,WAAW,CAC3B,UAAC2F,GAAD,EAAcI,QAAd,EAAmC;AACjC,wBACE;AACE,MAAA,GAAG,EAAEA,QADP;AAEE,oBAAYA,QAFd;AAGE,wBAAe,KAHjB;AAIE,MAAA,SAAS,EAAC,cAJZ;AAKE,MAAA,WAAW,EAAEjB,aALf;AAME,MAAA,YAAY,EAAEI;AANhB,OAQGlD,MAAM,CAAC6C,GAAP,CAAW,UAACa,CAAD,EAAuBE,QAAvB,EAA4C;AACtD,0BACE;AACE,QAAA,GAAG,EAAEA,QADP;AAEE,QAAA,SAAS,EAAEtF,UAAU,qCAAqC;AACxD0C,UAAAA,OAAO,EAAEA,OAAO,KAAK0C,CAAC,CAACxE;AADiC,SAArC,CAFvB;AAKE,oBAAUwE,CAAC,CAACxE,GALd;AAME,QAAA,KAAK,EAAEc,MAAM,CAAC4D,QAAD,CAAN,CAAiBI,KAAjB,GAAyBhE,MAAM,CAAC4D,QAAD,CAAN,CAAiBI,KAA1C,GAAkD;AAN3D,SAQGP,UAAU,CAACC,CAAD,EAAIC,GAAJ,EAASC,QAAT,CARb,CADF;AAYD,KAbA,CARH,CADF;AAyBD,GA3B0B,EA4B3B,CAACV,YAAD,EAAeJ,aAAf,EAA8B9C,MAA9B,EAAsCgB,OAAtC,EAA+CyC,UAA/C,CA5B2B,CAA7B;AA+BA,MAAMQ,cAAc,GAAGjG,WAAW,CAAC,UAACuE,KAAD,EAAW;AAC5C,QAAM2B,WAAW,GAAG3B,KAAK,CAACE,aAAN,CAAoBC,OAApB,CAA4ByB,QAAhD;AACAhD,IAAAA,YAAY,CAAC,UAACiD,SAAD,EAAe;AAC1B,UAAMC,QAAQ,gBAAQD,SAAR,CAAd;;AACAC,MAAAA,QAAQ,CAACH,WAAD,CAAR,GAAwB,CAACE,SAAS,CAACF,WAAD,CAAlC;AACA,aAAOG,QAAP;AACD,KAJW,CAAZ;AAKD,GAPiC,EAO/B,EAP+B,CAAlC;AASA,MAAMC,UAAU,GAAGlG,OAAO,CAAC,YAAM;AAC/B,QACG4D,IAAI,IAAIA,IAAI,YAAY7C,KAAxB,IAAiC6C,IAAI,CAACoB,MAAL,GAAc,CAAhD,IACC,OAAOpB,IAAP,KAAgB,QAAhB,IAA4BpC,MAAM,CAACD,IAAP,CAAYqC,IAAZ,EAAkBoB,MAAlB,GAA2B,CAF1D,EAGE;AACA,UAAI3D,OAAJ,EAAa;AACX,YAAME,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAYqC,IAAZ,CAAb;AACA,eAAOrC,IAAI,CAACkD,GAAL,CAAS,UAAC3D,GAAD,EAAcqF,CAAd,EAA4B;AAC1C,8BACE,oBAAC,QAAD;AAAU,YAAA,GAAG,EAAErF;AAAf,aACGuB,aAAa,iBACZ,oBAAC,KAAD;AAAO,YAAA,SAAS,EAAC;AAAjB,0BACE,6CACE;AACE,6BAAevB,GADjB;AAEE,YAAA,OAAO,EAAE+E,cAFX;AAGE,YAAA,SAAS,EAAC;AAHZ,0BAKE,oBAAC,wBAAD;AACE,YAAA,SAAS,EAAE3F,UAAU,CAAC;AACpB,kDAAoC,CAAC4C,SAAS,CAAChC,GAAD,CAD1B;AAEpB,mDAAqCgC,SAAS,CAAChC,GAAD;AAF1B,aAAD;AADvB,YALF,CADF,CADF,CAFJ,eAmBE,oBAAC,KAAD;AACE,YAAA,SAAS,EAAEZ,UAAU,CAAC,wBAAD,YAAmCiG,CAAnC,EAAwC;AAC3D,kDACE9D,aAAa,IAAI,CAACS,SAAS,CAAChC,GAAD,CAF8B;AAG3D,mDACEuB,aAAa,IAAIS,SAAS,CAAChC,GAAD,CAJ+B;AAK3DsF,cAAAA,IAAI,EAAED,CAAC,KAAK5E,IAAI,CAACyD,MAAL,GAAc,CALiC;AAM3DzB,cAAAA,KAAK,EAAE4C,CAAC,KAAK;AAN8C,aAAxC;AADvB,aAUG/D,SAAS,CACRwB,IAAI,CAAC9C,GAAD,CADI,EAERS,IAAI,CAAC4E,CAAD,CAAJ,KAAY,MAAZ,GAAqB5E,IAAI,CAAC4E,CAAD,CAAJ,CAAQE,IAAR,EAArB,GAAsC,IAF9B,CAVZ,CAnBF,eAkCE,oBAAC,KAAD;AACE,YAAA,SAAS,EAAEnG,UAAU,mCAAiCiG,CAAjC,EAAsC;AACzDG,cAAAA,MAAM,EAAExD,SAAS,CAAChC,GAAD;AADwC,aAAtC;AADvB,aAKG8C,IAAI,CAAC9C,GAAD,CAAJ,CAAU2D,GAAV,CAAc,UAACc,GAAD,EAAcnB,KAAd,EAAgC;AAC7C,mBAAOsB,SAAS,CAACH,GAAD,EAAMnB,KAAN,CAAhB;AACD,WAFA,CALH,CAlCF,CADF;AA8CD,SA/CM,CAAP;AAgDD;;AACD,0BACE,oBAAC,KAAD,QACGR,IAAI,YAAY7C,KAAhB,IACC6C,IAAI,CAACa,GAAL,CAAS,UAACc,GAAD,EAAcI,QAAd,EAAmC;AAC1C,eAAOD,SAAS,CAACH,GAAD,EAAMI,QAAN,CAAhB;AACD,OAFD,CAFJ,CADF;AAQD;;AACD,WAAOZ,eAAe,EAAtB;AACD,GAlEyB,EAkEvB,CACDnB,IADC,EAEDvC,OAFC,EAGDqE,SAHC,EAIDtD,SAJC,EAKDU,SALC,EAMDT,aANC,EAOD0C,eAPC,EAQDc,cARC,CAlEuB,CAA1B;AA6EA,MAAMU,kBAAkB,GAAGvG,OAAO,CAAC,YAAM;AACvC,WAAOwB,MAAM,CAACD,IAAP,CAAYuB,SAAZ,EAAuB0D,KAAvB,CAA6B,UAAC1F,GAAD,EAAS;AAC3C,aAAOgC,SAAS,CAAChC,GAAD,CAAhB;AACD,KAFM,CAAP;AAGD,GAJiC,EAI/B,CAACgC,SAAD,CAJ+B,CAAlC;AAMA,MAAM2D,YAAY,GAAGzG,OAAO,CAAC,YAAM;AACjC,WAAOwB,MAAM,CAACD,IAAP,CAAYuB,SAAZ,EAAuB4D,IAAvB,CAA4B,UAAC5F,GAAD,EAAS;AAC1C,aAAOgC,SAAS,CAAChC,GAAD,CAAhB;AACD,KAFM,CAAP;AAGD,GAJ2B,EAIzB,CAACgC,SAAD,CAJyB,CAA5B;AAMA,MAAM6D,kBAAkB,GAAG/G,WAAW,CAAC,YAAM;AAC3C,QAAI6G,YAAJ,EAAkB;AAChB1D,MAAAA,YAAY,CAAC,UAACiD,SAAD,EAAe;AAC1B,YAAMC,QAAQ,gBAAQD,SAAR,CAAd;;AACAxE,QAAAA,MAAM,CAACD,IAAP,CAAY0E,QAAZ,EAAsBvE,OAAtB,CAA8B,UAACZ,GAAD,EAAS;AACrCmF,UAAAA,QAAQ,CAACnF,GAAD,CAAR,GAAgB,KAAhB;AACD,SAFD;AAGA,eAAOmF,QAAP;AACD,OANW,CAAZ;AAOD,KARD,MAQO;AACLlD,MAAAA,YAAY,CAAC,UAACiD,SAAD,EAAe;AAC1B,YAAMC,QAAQ,gBAAQD,SAAR,CAAd;;AACAxE,QAAAA,MAAM,CAACD,IAAP,CAAY0E,QAAZ,EAAsBvE,OAAtB,CAA8B,UAACZ,GAAD,EAAS;AACrCmF,UAAAA,QAAQ,CAACnF,GAAD,CAAR,GAAgB,IAAhB;AACD,SAFD;AAGA,eAAOmF,QAAP;AACD,OANW,CAAZ;AAOD;AACF,GAlBqC,EAkBnC,CAACQ,YAAD,CAlBmC,CAAtC;AAoBA,sBACE,oBAAC,eAAD;AACE,IAAA,EAAE,EAAEtG,KADN;AAEE,IAAA,QAAQ,EAAE8E,QAFZ;AAGE,IAAA,SAAS,EAAE/E,UAAU,CAAC,cAAD,EAAiB2B,SAAjB,EAA4B;AAC/C,0BAAoBR,OAD2B;AAE/C,8BAAwBgB,aAFuB;AAG/C,qBAAehB,OAAO,IAAIyB,SAAS,CAACtB,MAAM,CAACD,IAAP,CAAYqC,IAAZ,EAAkBgD,KAAlB,CAAwB,CAAC,CAAzB,EAA4B,CAA5B,CAAD;AAHY,KAA5B;AAHvB,KAQMrE,IARN,gBAUE,oBAAC,KAAD;AAAO,IAAA,SAAS,EAAEL;AAAlB,KACGN,MAAM,CAACoD,MAAP,GAAgB,CAAhB,iBACC;AAAI,IAAA,SAAS,EAAC;AAAd,KACGpD,MAAM,CAAC6C,GAAP,CAAW,UAACa,CAAD,EAAuBlB,KAAvB,EAAyC;AACnD,wBACE;AACE,MAAA,GAAG,EAAEkB,CAAC,CAACxE,GADT;AAEE,MAAA,SAAS,EAAEZ,UAAU,kBAAkB;AACrC,kCAA0B0C,OAAO,KAAK0C,CAAC,CAACxE,GADH;AAErC,iCACEO,OAAO,IAAIkF,kBAAX,IAAiCjB,CAAC,CAACuB;AAHA,OAAlB,CAFvB;AAOE,MAAA,WAAW,EAAEnC,aAPf;AAQE,MAAA,YAAY,EAAEI,YARhB;AASE,kBAAUQ,CAAC,CAACxE,GATd;AAUE,MAAA,KAAK,EAAEwE,CAAC,CAACM;AAVX,OAYGvD,aAAa,IAAIhB,OAAjB,IAA4B+C,KAAK,KAAK,CAAtC,iBACC;AACE,MAAA,SAAS,EAAC,6BADZ;AAEE,MAAA,OAAO,EAAEuC,kBAFX;AAGE,mBAAU;AAHZ,OAKGF,YAAY,gBACX,oBAAC,aAAD;AAAe,MAAA,SAAS,EAAC;AAAzB,MADW,gBAGX,oBAAC,eAAD;AAAiB,MAAA,SAAS,EAAC;AAA3B,MARJ,CAbJ,EAyBG7D,OAAO,KAAK0C,CAAC,CAACxE,GAAd,iBACC;AACE,MAAA,SAAS,EAAC,kBADZ;AAEE,MAAA,KAAK,EAAE;AAAEgG,QAAAA,MAAM,EAAE5B,aAAa;AAAvB;AAFT,MA1BJ,eA+BE;AACE,MAAA,OAAO,EAAEhB,UADX;AAEE,oBAAYE,KAFd;AAGE,MAAA,SAAS,EAAElE,UAAU,CAAC,uBAAD,EAA0B;AAC7C,0BAAkBoF,CAAC,CAACf,QAAF,KAAe;AADY,OAA1B;AAHvB,oBAOE;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAkCe,CAAC,CAACyB,KAApC,CAPF,EAQGzB,CAAC,CAACf,QAAF,iBACC,oBAAC,QAAD;AACE,MAAA,KAAK,EAAC,MADR;AAEE,MAAA,MAAM,EAAC,MAFT;AAGE,MAAA,SAAS,EAAErE,UAAU,CAAC,eAAD,EAAkB;AACrC,mCAA2BoF,CAAC,CAACxE,GAAF,KAAU4B,MADA;AAErC,iCAAyB4C,CAAC,CAACxE,GAAF,KAAU4B,MAFE;AAGrC,8BACEF,eAAe,KAAK7B,aAAa,CAAC2C,GAAlC,IACAgC,CAAC,CAACxE,GAAF,KAAU4B,MALyB;AAMrC,+BACEF,eAAe,KAAK7B,aAAa,CAACsD,IAAlC,IACAqB,CAAC,CAACxE,GAAF,KAAU4B;AARyB,OAAlB;AAHvB,MATJ,CA/BF,CADF;AA2DD,GA5DA,CADH,CAFJ,CAVF,EA8EGwD,UA9EH,CADF;AAkFD,CA5aM;AA8aPvE,SAAS,CAACqF,WAAV,GAAwB,WAAxB","sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useMemo,\n Fragment,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { ITableProps, Table, Tbody, Thead } from \"./Table\";\nimport { ISyntheticEvent } from \"../../types\";\nimport CollapseExpandSingleIcon from \"../Icons/collection/CollapseExpandSingle\";\nimport ExpandAllIcon from \"../Icons/collection/ExpandAll\";\nimport CollapseAllIcon from \"../Icons/collection/CollapseAll\";\nimport SortIcon from \"../Icons/collection/SortIcon\";\nimport { StyledDataTable } from \"./Styles\";\n\nexport enum SortDirection {\n None = \"none\",\n Asc = \"asc\",\n Desc = \"desc\",\n}\n\ninterface IHeaderDefinition {\n key: string;\n label?: string;\n sortable?: boolean;\n renderCallback?: (row: object, key?: string, index?: number) => ReactNode;\n style?: object;\n hideCollapsed?: boolean;\n}\n\ninterface IDataTableProps extends ITableProps {\n /** Object of header name, sort and style. */\n header: IHeaderDefinition[];\n /** Object of rows. */\n rows: object[];\n /** CSS classes. */\n className?: string;\n /** Name of row by which we are sorting. */\n sortBy?: string;\n /** Direction by which we are sorting. */\n sortDirection?: SortDirection;\n /** Callback for sorting. */\n onSortCallback?: (sortKey: string, sortDirection: SortDirection) => void;\n /** Switch for column highlighting. */\n columnHighlight?: boolean;\n /** CSS classes for thead. */\n theadClass?: string;\n /** Column by which is data-table grouped. */\n groupBy?: string;\n /** No results Callback. */\n noResultsCallback?: () => ReactNode;\n /** Header of grouped list in data-table. */\n groupHead?: (row: object, index: string | null) => ReactNode;\n /** Grouped rows can be collapsed */\n isCollapsible?: boolean;\n /** Value to replace when column is empty */\n emptyValue?: object;\n}\n\nconst groupByKey = (items: object[], key: string): object => {\n if (items[0] instanceof Array) {\n items = items[0];\n }\n return items.reduce((result: object, item: object) => {\n return {\n ...result,\n [item[key] !== null ? \" \" + item[key] : item[key]]: [\n ...(result[item[key] !== null ? \" \" + item[key] : item[key]] || []),\n item,\n ],\n };\n }, {});\n};\n\nconst initialCollapsed = (rows: object[], groupBy?: string): object => {\n if (groupBy) {\n const groupedData = groupByKey(rows, groupBy);\n const keys = Object.keys(groupedData);\n const collapsedKeys = {};\n keys.forEach((key) => {\n collapsedKeys[key] = true;\n });\n return collapsedKeys;\n }\n return {};\n};\n\nexport const DataTable: FC<IDataTableProps> = ({\n header,\n rows,\n className,\n sortBy,\n sortDirection = SortDirection.None,\n onSortCallback,\n theadClass,\n noResultsCallback,\n groupBy,\n groupHead = (): null => null,\n isCollapsible,\n emptyValue,\n ...args\n}) => {\n const [columnDirection, setColumnDirection] = useState(sortDirection);\n const [active, setActive] = useState(sortBy);\n const [hovered, setHovered] = useState<string | null>();\n const [collapsed, setCollapsed] = useState(() => {\n return initialCollapsed(rows, groupBy);\n });\n const sort = (\n sortByKey: string,\n direction: SortDirection,\n rowsData: Record<string, string>[] | object\n ): object => {\n if (direction === SortDirection.None) {\n return rowsData;\n }\n\n if (rowsData instanceof Array)\n return rowsData.sort((a: object, b: object) => {\n if (direction === SortDirection.Asc) {\n if (a[sortByKey] === null) {\n return 1;\n }\n if (b[sortByKey] === null) {\n return -1;\n }\n }\n if (a[sortByKey] === null) {\n return -1;\n }\n if (b[sortByKey] === null) {\n return 1;\n }\n if (typeof a[sortByKey] === \"number\") {\n if (direction === SortDirection.Asc) {\n return a[sortByKey] - b[sortByKey];\n }\n return b[sortByKey] - a[sortByKey];\n }\n\n const first = a[sortByKey].toString();\n const second = b[sortByKey].toString();\n\n if (direction === SortDirection.Asc) {\n return first.localeCompare(second);\n }\n\n return second.localeCompare(first);\n });\n return {};\n };\n\n const initialData = useCallback(() => {\n if (sortBy && !groupBy) {\n return sort(sortBy, sortDirection, rows);\n }\n if (sortBy && groupBy) {\n sort(sortBy, sortDirection, rows);\n return groupByKey(rows, groupBy);\n }\n if (!sortBy && groupBy) {\n return groupByKey(rows, groupBy);\n }\n return rows;\n }, [groupBy, rows, sortBy, sortDirection]);\n\n const [data, setData] = useState<Record<string, string> | object>(\n initialData\n );\n\n const getNextSortDirection = (\n previousDirection: SortDirection,\n sameColumn: boolean\n ): SortDirection => {\n if (!sameColumn) {\n return SortDirection.Asc;\n }\n if (previousDirection === SortDirection.Asc) {\n return SortDirection.Desc;\n }\n return SortDirection.Asc;\n };\n\n const sortColumn = useCallback(\n (event: ISyntheticEvent) => {\n const index = event.currentTarget.dataset.index;\n if (index && header[index] && header[index].sortable) {\n const direction = getNextSortDirection(\n columnDirection,\n header[index].key === active\n );\n setActive(header[index].key);\n setColumnDirection(direction);\n if (groupBy) {\n let grouped: object = {\n ...data,\n };\n\n if (groupBy !== header[index].key) {\n Object.keys(grouped).map((key: string) => {\n grouped[key] = sort(header[index].key, direction, grouped[key]);\n });\n } else {\n if (rows instanceof Object) {\n grouped = sort(header[index].key, direction, rows);\n grouped = groupByKey([grouped], groupBy);\n }\n }\n setData(grouped);\n } else {\n setData(sort(header[index].key, direction, data));\n }\n if (onSortCallback) {\n onSortCallback(header[index].key, direction);\n }\n }\n\n return null;\n },\n [\n setData,\n data,\n columnDirection,\n setColumnDirection,\n header,\n active,\n setActive,\n onSortCallback,\n groupBy,\n rows,\n ]\n );\n\n const cellMouseOver = useCallback((e: ISyntheticEvent) => {\n if (e.target instanceof HTMLElement) {\n if (e.target.dataset.key) {\n setHovered(e.target.dataset.key);\n }\n }\n }, []);\n\n const cellMouseOut = useCallback(() => {\n setHovered(null);\n }, []);\n\n useEffect(() => {\n setData(initialData());\n setCollapsed(initialCollapsed(rows, groupBy));\n }, [rows, groupBy, initialData]);\n\n const renderNoResults = useCallback(() => {\n return (\n <tr>\n <td\n colSpan={header.length}\n className={classNames({ \"text-center\": !noResultsCallback })}\n >\n {noResultsCallback ? noResultsCallback() : \"There is no data.\"}\n </td>\n </tr>\n );\n }, [header, noResultsCallback]);\n\n const tableRef = useRef<HTMLTableElement>(null);\n\n const overlayStyles = (): number | undefined => {\n if (tableRef.current) {\n return tableRef.current.clientHeight + 5;\n }\n };\n\n const renderCell = useCallback(\n (h: IHeaderDefinition, row: object, colIndex: number) => {\n if (h.renderCallback) {\n return h.renderCallback(row, h.key, colIndex);\n }\n if (row[h.key] === null && emptyValue) {\n return <i className=\"opacity-75\">{emptyValue[h.key]}</i>;\n }\n return row[h.key];\n },\n [emptyValue]\n );\n\n const renderRow = useCallback(\n (row: object, rowIndex: number) => {\n return (\n <tr\n key={rowIndex}\n data-index={rowIndex}\n data-direction=\"asc\"\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((h: IHeaderDefinition, colIndex: number) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === h.key,\n })}\n data-key={h.key}\n style={header[colIndex].style ? header[colIndex].style : {}}\n >\n {renderCell(h, row, colIndex)}\n </td>\n );\n })}\n </tr>\n );\n },\n [cellMouseOut, cellMouseOver, header, hovered, renderCell]\n );\n\n const toggleCollapse = useCallback((event) => {\n const collapseKey = event.currentTarget.dataset.groupkey;\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n newState[collapseKey] = !prevState[collapseKey];\n return newState;\n });\n }, []);\n\n const renderRows = useMemo(() => {\n if (\n (data && data instanceof Array && data.length > 0) ||\n (typeof data === \"object\" && Object.keys(data).length > 0)\n ) {\n if (groupBy) {\n const keys = Object.keys(data);\n return keys.map((key: string, i: number) => {\n return (\n <Fragment key={key}>\n {isCollapsible && (\n <Tbody className=\"c-table__collapse_body\">\n <tr>\n <td\n data-groupkey={key}\n onClick={toggleCollapse}\n className=\"c-table__body__icon c-table--toggle-collapsed\"\n >\n <CollapseExpandSingleIcon\n className={classNames({\n \"c-table__collapse_icon--expanded\": !collapsed[key],\n \"c-table__collapse_icon--collapsed\": collapsed[key],\n })}\n />\n </td>\n </tr>\n </Tbody>\n )}\n <Tbody\n className={classNames(\"c-table__grouped__head\", `head_${i}`, {\n \"c-table__grouped__head--expanded\":\n isCollapsible && !collapsed[key],\n \"c-table__grouped__head--collapsed\":\n isCollapsible && collapsed[key],\n last: i === keys.length - 1,\n first: i === 0,\n })}\n >\n {groupHead(\n data[key],\n keys[i] !== \"null\" ? keys[i].trim() : null\n )}\n </Tbody>\n <Tbody\n className={classNames(`c-table__group c-table_group_${i}`, {\n hidden: collapsed[key],\n })}\n >\n {data[key].map((row: object, index: number) => {\n return renderRow(row, index);\n })}\n </Tbody>\n </Fragment>\n );\n });\n }\n return (\n <Tbody>\n {data instanceof Array &&\n data.map((row: object, rowIndex: number) => {\n return renderRow(row, rowIndex);\n })}\n </Tbody>\n );\n }\n return renderNoResults();\n }, [\n data,\n groupBy,\n renderRow,\n groupHead,\n collapsed,\n isCollapsible,\n renderNoResults,\n toggleCollapse,\n ]);\n\n const allGroupsCollapsed = useMemo(() => {\n return Object.keys(collapsed).every((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const hasCollapsed = useMemo(() => {\n return Object.keys(collapsed).some((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const toggleAllCollapsed = useCallback(() => {\n if (hasCollapsed) {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = false;\n });\n return newState;\n });\n } else {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = true;\n });\n return newState;\n });\n }\n }, [hasCollapsed]);\n\n return (\n <StyledDataTable\n as={Table}\n innerRef={tableRef}\n className={classNames(\"c-data-table\", className, {\n \"c-table__grouped\": groupBy,\n \"c-table__collapsible\": isCollapsible,\n \"padding-b-0\": groupBy && collapsed[Object.keys(data).slice(-1)[0]],\n })}\n {...args}\n >\n <Thead className={theadClass}>\n {header.length > 0 && (\n <tr className=\"c-table__row\">\n {header.map((h: IHeaderDefinition, index: number) => {\n return (\n <th\n key={h.key}\n className={classNames(`c-table__cell`, {\n \"c-table__cell--hovered\": hovered === h.key,\n \"c-table__head--hidden\":\n groupBy && allGroupsCollapsed && h.hideCollapsed,\n })}\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n data-key={h.key}\n style={h.style}\n >\n {isCollapsible && groupBy && index === 0 && (\n <span\n className=\"c-table__head__icon-wrapper\"\n onClick={toggleAllCollapsed}\n data-test=\"toggle-collapse\"\n >\n {hasCollapsed ? (\n <ExpandAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n ) : (\n <CollapseAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n )}\n </span>\n )}\n {hovered === h.key && (\n <div\n className=\"c-table__overlay\"\n style={{ height: overlayStyles() + `px` }}\n />\n )}\n <div\n onClick={sortColumn}\n data-index={index}\n className={classNames(\"c-table__icon-wrapper\", {\n \"cursor-pointer\": h.sortable === true,\n })}\n >\n <span className=\"c-table__label\">{h.label}</span>\n {h.sortable && (\n <SortIcon\n width=\"10px\"\n height=\"10px\"\n className={classNames(\"c-table__icon\", {\n \"c-table__icon--inactive\": h.key !== active,\n \"c-table__icon--active\": h.key === active,\n \"c-table__icon--asc\":\n columnDirection === SortDirection.Asc &&\n h.key === active,\n \"c-table__icon--desc\":\n columnDirection === SortDirection.Desc &&\n h.key === active,\n })}\n />\n )}\n </div>\n </th>\n );\n })}\n </tr>\n )}\n </Thead>\n\n {renderRows}\n </StyledDataTable>\n );\n};\n\nDataTable.displayName = \"DataTable\";\n"],"file":"DataTable.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tables/DataTable.tsx"],"names":["React","useCallback","useState","useEffect","useRef","useMemo","Fragment","classNames","Table","Tbody","Thead","CollapseExpandSingleIcon","ExpandAllIcon","CollapseAllIcon","SortIcon","StyledDataTable","LinearLoader","SortDirection","groupByKey","items","key","Array","reduce","result","item","initialCollapsed","rows","groupBy","groupedData","keys","Object","collapsedKeys","forEach","DataTable","header","className","sortBy","sortDirection","None","onSortCallback","theadClass","noResultsCallback","groupHead","isCollapsible","emptyValue","loading","loadingRows","args","columnDirection","setColumnDirection","active","setActive","hovered","setHovered","collapsed","setCollapsed","sort","sortByKey","direction","rowsData","a","b","Asc","first","toString","second","localeCompare","initialData","data","setData","getNextSortDirection","previousDirection","sameColumn","Desc","sortColumn","event","index","currentTarget","dataset","sortable","grouped","map","cellMouseOver","e","target","HTMLElement","cellMouseOut","renderNoResults","length","tableRef","overlayStyles","current","clientHeight","renderCell","h","row","colIndex","renderCallback","renderRow","rowIndex","style","toggleCollapse","collapseKey","groupkey","prevState","newState","renderPlaceholders","placeholders","fill","_","col","renderRows","i","last","trim","hidden","allGroupsCollapsed","every","hasCollapsed","some","toggleAllCollapsed","slice","hideCollapsed","height","label","displayName"],"mappings":"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","sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useMemo,\n Fragment,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { ITableProps, Table, Tbody, Thead } from \"./Table\";\nimport { ISyntheticEvent } from \"../../types\";\nimport CollapseExpandSingleIcon from \"../Icons/collection/CollapseExpandSingle\";\nimport ExpandAllIcon from \"../Icons/collection/ExpandAll\";\nimport CollapseAllIcon from \"../Icons/collection/CollapseAll\";\nimport SortIcon from \"../Icons/collection/SortIcon\";\nimport { StyledDataTable } from \"./Styles\";\nimport { LinearLoader } from \"../Loaders\";\n\nexport enum SortDirection {\n None = \"none\",\n Asc = \"asc\",\n Desc = \"desc\",\n}\n\ninterface IHeaderDefinition {\n key: string;\n label?: string;\n sortable?: boolean;\n renderCallback?: (row: object, key?: string, index?: number) => ReactNode;\n style?: object;\n hideCollapsed?: boolean;\n}\n\nexport interface IDataTableProps extends ITableProps {\n /** Object of header name, sort and style. */\n header: IHeaderDefinition[];\n /** Object of rows. */\n rows?: object[];\n /** CSS classes. */\n className?: string;\n /** Name of row by which we are sorting. */\n sortBy?: string;\n /** Direction by which we are sorting. */\n sortDirection?: SortDirection;\n /** Callback for sorting. */\n onSortCallback?: (sortKey: string, sortDirection: SortDirection) => void;\n /** Switch for column highlighting. */\n columnHighlight?: boolean;\n /** CSS classes for thead. */\n theadClass?: string;\n /** Column by which is data-table grouped. */\n groupBy?: string;\n /** No results Callback. */\n noResultsCallback?: () => ReactNode;\n /** Header of grouped list in data-table. */\n groupHead?: (row: object, index: string | null) => ReactNode;\n /** Grouped rows can be collapsed */\n isCollapsible?: boolean;\n /** Value to replace when column is empty */\n emptyValue?: object;\n /** loading indicator */\n loading?: boolean;\n /** loading rows */\n loadingRows?: number;\n}\n\nconst groupByKey = (items: object[], key: string): object => {\n if (items[0] instanceof Array) {\n items = items[0];\n }\n return items.reduce((result: object, item: object) => {\n return {\n ...result,\n [item[key] !== null ? \" \" + item[key] : item[key]]: [\n ...(result[item[key] !== null ? \" \" + item[key] : item[key]] || []),\n item,\n ],\n };\n }, {});\n};\n\nconst initialCollapsed = (rows: object[], groupBy?: string): object => {\n if (groupBy) {\n const groupedData = groupByKey(rows, groupBy);\n const keys = Object.keys(groupedData);\n const collapsedKeys = {};\n keys.forEach((key) => {\n collapsedKeys[key] = true;\n });\n return collapsedKeys;\n }\n return {};\n};\n\nexport const DataTable: FC<IDataTableProps> = ({\n header,\n rows = [],\n className,\n sortBy,\n sortDirection = SortDirection.None,\n onSortCallback,\n theadClass,\n noResultsCallback,\n groupBy,\n groupHead = (): null => null,\n isCollapsible,\n emptyValue,\n loading,\n loadingRows = 7,\n ...args\n}) => {\n const [columnDirection, setColumnDirection] = useState(sortDirection);\n const [active, setActive] = useState(sortBy);\n const [hovered, setHovered] = useState<string | null>();\n const [collapsed, setCollapsed] = useState(() => {\n return initialCollapsed(rows, groupBy);\n });\n const sort = (\n sortByKey: string,\n direction: SortDirection,\n rowsData: Record<string, string>[] | object\n ): object => {\n if (direction === SortDirection.None) {\n return rowsData;\n }\n\n if (rowsData instanceof Array)\n return rowsData.sort((a: object, b: object) => {\n if (direction === SortDirection.Asc) {\n if (a[sortByKey] === null) {\n return 1;\n }\n if (b[sortByKey] === null) {\n return -1;\n }\n }\n if (a[sortByKey] === null) {\n return -1;\n }\n if (b[sortByKey] === null) {\n return 1;\n }\n if (typeof a[sortByKey] === \"number\") {\n if (direction === SortDirection.Asc) {\n return a[sortByKey] - b[sortByKey];\n }\n return b[sortByKey] - a[sortByKey];\n }\n\n const first = a[sortByKey].toString();\n const second = b[sortByKey].toString();\n\n if (direction === SortDirection.Asc) {\n return first.localeCompare(second);\n }\n\n return second.localeCompare(first);\n });\n return {};\n };\n\n const initialData = useCallback(() => {\n if (sortBy && !groupBy) {\n return sort(sortBy, sortDirection, rows);\n }\n if (sortBy && groupBy) {\n sort(sortBy, sortDirection, rows);\n return groupByKey(rows, groupBy);\n }\n if (!sortBy && groupBy) {\n return groupByKey(rows, groupBy);\n }\n return rows;\n }, [groupBy, rows, sortBy, sortDirection]);\n\n const [data, setData] = useState<Record<string, string> | object>(\n initialData\n );\n\n const getNextSortDirection = (\n previousDirection: SortDirection,\n sameColumn: boolean\n ): SortDirection => {\n if (!sameColumn) {\n return SortDirection.Asc;\n }\n if (previousDirection === SortDirection.Asc) {\n return SortDirection.Desc;\n }\n return SortDirection.Asc;\n };\n\n const sortColumn = useCallback(\n (event: ISyntheticEvent) => {\n const index = event.currentTarget.dataset.index;\n if (index && header[index] && header[index].sortable) {\n const direction = getNextSortDirection(\n columnDirection,\n header[index].key === active\n );\n setActive(header[index].key);\n setColumnDirection(direction);\n if (groupBy) {\n let grouped: object = {\n ...data,\n };\n\n if (groupBy !== header[index].key) {\n Object.keys(grouped).map((key: string) => {\n grouped[key] = sort(header[index].key, direction, grouped[key]);\n });\n } else {\n if (rows instanceof Object) {\n grouped = sort(header[index].key, direction, rows);\n grouped = groupByKey([grouped], groupBy);\n }\n }\n setData(grouped);\n } else {\n setData(sort(header[index].key, direction, data));\n }\n if (onSortCallback) {\n onSortCallback(header[index].key, direction);\n }\n }\n\n return null;\n },\n [\n setData,\n data,\n columnDirection,\n setColumnDirection,\n header,\n active,\n setActive,\n onSortCallback,\n groupBy,\n rows,\n ]\n );\n\n const cellMouseOver = useCallback((e: ISyntheticEvent) => {\n if (e.target instanceof HTMLElement) {\n if (e.target.dataset.key) {\n setHovered(e.target.dataset.key);\n }\n }\n }, []);\n\n const cellMouseOut = useCallback(() => {\n setHovered(null);\n }, []);\n\n useEffect(() => {\n setData(initialData());\n setCollapsed(initialCollapsed(rows, groupBy));\n }, [rows, groupBy, initialData]);\n\n const renderNoResults = useCallback(() => {\n return (\n <tr>\n <td\n colSpan={header.length}\n className={classNames({ \"text-center\": !noResultsCallback })}\n >\n {noResultsCallback ? noResultsCallback() : \"There is no data.\"}\n </td>\n </tr>\n );\n }, [header, noResultsCallback]);\n\n const tableRef = useRef<HTMLTableElement>(null);\n\n const overlayStyles = (): number | undefined => {\n if (tableRef.current) {\n return tableRef.current.clientHeight + 5;\n }\n };\n\n const renderCell = useCallback(\n (h: IHeaderDefinition, row: object, colIndex: number) => {\n if (h.renderCallback) {\n return h.renderCallback(row, h.key, colIndex);\n }\n if (row[h.key] === null && emptyValue) {\n return <i className=\"opacity-75\">{emptyValue[h.key]}</i>;\n }\n return row[h.key];\n },\n [emptyValue]\n );\n\n const renderRow = useCallback(\n (row: object, rowIndex: number) => {\n return (\n <tr\n key={rowIndex}\n data-index={rowIndex}\n data-direction=\"asc\"\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((h: IHeaderDefinition, colIndex: number) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === h.key,\n })}\n data-key={h.key}\n style={header[colIndex].style ? header[colIndex].style : {}}\n >\n {renderCell(h, row, colIndex)}\n </td>\n );\n })}\n </tr>\n );\n },\n [cellMouseOut, cellMouseOver, header, hovered, renderCell]\n );\n\n const toggleCollapse = useCallback((event) => {\n const collapseKey = event.currentTarget.dataset.groupkey;\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n newState[collapseKey] = !prevState[collapseKey];\n return newState;\n });\n }, []);\n\n const renderPlaceholders = useMemo(() => {\n const placeholders = Array(loadingRows)\n .fill({})\n .map((_, index) => {\n return (\n <tr\n key={index}\n className=\"c-table__row\"\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n >\n {header.map((col, colIndex) => {\n return (\n <td\n key={colIndex}\n className={classNames(`c-table__cell c-data-table__item`, {\n hovered: hovered === col.key,\n })}\n data-key={col.key}\n >\n <LinearLoader />\n </td>\n );\n })}\n </tr>\n );\n });\n\n return <Tbody>{placeholders}</Tbody>;\n }, [cellMouseOut, cellMouseOver, header, hovered, loadingRows]);\n\n const renderRows = useMemo(() => {\n if (\n (data && data instanceof Array && data.length > 0) ||\n (typeof data === \"object\" && Object.keys(data).length > 0)\n ) {\n if (groupBy) {\n const keys = Object.keys(data);\n return keys.map((key: string, i: number) => {\n return (\n <Fragment key={key}>\n {isCollapsible && (\n <Tbody className=\"c-table__collapse_body\">\n <tr>\n <td\n data-groupkey={key}\n onClick={toggleCollapse}\n className=\"c-table__body__icon c-table--toggle-collapsed\"\n >\n <CollapseExpandSingleIcon\n className={classNames({\n \"c-table__collapse_icon--expanded\": !collapsed[key],\n \"c-table__collapse_icon--collapsed\": collapsed[key],\n })}\n />\n </td>\n </tr>\n </Tbody>\n )}\n <Tbody\n className={classNames(\"c-table__grouped__head\", `head_${i}`, {\n \"c-table__grouped__head--expanded\":\n isCollapsible && !collapsed[key],\n \"c-table__grouped__head--collapsed\":\n isCollapsible && collapsed[key],\n last: i === keys.length - 1,\n first: i === 0,\n })}\n >\n {groupHead(\n data[key],\n keys[i] !== \"null\" ? keys[i].trim() : null\n )}\n </Tbody>\n <Tbody\n className={classNames(`c-table__group c-table_group_${i}`, {\n hidden: collapsed[key],\n })}\n >\n {data[key].map((row: object, index: number) => {\n return renderRow(row, index);\n })}\n </Tbody>\n </Fragment>\n );\n });\n }\n return (\n <Tbody>\n {data instanceof Array &&\n data.map((row: object, rowIndex: number) => {\n return renderRow(row, rowIndex);\n })}\n </Tbody>\n );\n }\n return renderNoResults();\n }, [\n data,\n groupBy,\n renderRow,\n groupHead,\n collapsed,\n isCollapsible,\n renderNoResults,\n toggleCollapse,\n ]);\n\n const allGroupsCollapsed = useMemo(() => {\n return Object.keys(collapsed).every((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const hasCollapsed = useMemo(() => {\n return Object.keys(collapsed).some((key) => {\n return collapsed[key];\n });\n }, [collapsed]);\n\n const toggleAllCollapsed = useCallback(() => {\n if (hasCollapsed) {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = false;\n });\n return newState;\n });\n } else {\n setCollapsed((prevState) => {\n const newState = { ...prevState };\n Object.keys(newState).forEach((key) => {\n newState[key] = true;\n });\n return newState;\n });\n }\n }, [hasCollapsed]);\n\n return (\n <StyledDataTable\n as={Table}\n innerRef={tableRef}\n className={classNames(\"c-data-table\", className, {\n \"c-table__grouped\": groupBy,\n \"c-table__collapsible\": isCollapsible,\n \"padding-b-0\": groupBy && collapsed[Object.keys(data).slice(-1)[0]],\n })}\n {...args}\n >\n <Thead className={theadClass}>\n {header.length > 0 && (\n <tr className=\"c-table__row\">\n {header.map((h: IHeaderDefinition, index: number) => {\n return (\n <th\n key={h.key}\n className={classNames(`c-table__cell`, {\n \"c-table__cell--hovered\": hovered === h.key,\n \"c-table__head--hidden\":\n groupBy && allGroupsCollapsed && h.hideCollapsed,\n })}\n onMouseOver={cellMouseOver}\n onMouseLeave={cellMouseOut}\n data-key={h.key}\n style={h.style}\n >\n {isCollapsible && groupBy && index === 0 && (\n <span\n className=\"c-table__head__icon-wrapper\"\n onClick={toggleAllCollapsed}\n data-test=\"toggle-collapse\"\n >\n {hasCollapsed ? (\n <ExpandAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n ) : (\n <CollapseAllIcon className=\"c-table__head__icon-wrapper__icon\" />\n )}\n </span>\n )}\n {hovered === h.key && (\n <div\n className=\"c-table__overlay\"\n style={{ height: overlayStyles() + `px` }}\n />\n )}\n <div\n onClick={sortColumn}\n data-index={index}\n className={classNames(\"c-table__icon-wrapper\", {\n \"cursor-pointer\": h.sortable === true,\n })}\n >\n <span className=\"c-table__label\">{h.label}</span>\n {h.sortable && (\n <SortIcon\n width=\"10px\"\n height=\"10px\"\n className={classNames(\"c-table__icon\", {\n \"c-table__icon--inactive\": h.key !== active,\n \"c-table__icon--active\": h.key === active,\n \"c-table__icon--asc\":\n columnDirection === SortDirection.Asc &&\n h.key === active,\n \"c-table__icon--desc\":\n columnDirection === SortDirection.Desc &&\n h.key === active,\n })}\n />\n )}\n </div>\n </th>\n );\n })}\n </tr>\n )}\n </Thead>\n\n {loading ? renderPlaceholders : renderRows}\n </StyledDataTable>\n );\n};\n\nDataTable.displayName = \"DataTable\";\n"],"file":"DataTable.js"}
@@ -1,5 +1,5 @@
1
1
  import { ReactNode, FC, RefObject } from "react";
2
- interface ITableWithChildren {
2
+ export interface ITableWithChildren {
3
3
  children: ReactNode;
4
4
  className?: string;
5
5
  }
@@ -11,5 +11,4 @@ export interface ITableProps {
11
11
  export declare const Table: FC<ITableProps & ITableWithChildren>;
12
12
  export declare const Thead: FC<ITableWithChildren>;
13
13
  export declare const Tbody: FC<ITableWithChildren>;
14
- export {};
15
14
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/components/Tables/Table.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASxD,UAAU,kBAAkB;IAE1B,QAAQ,EAAE,SAAS,CAAC;IAEpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAE1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAiBtD,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAIxC,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAIxC,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/components/Tables/Table.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASxD,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,EAAE,SAAS,CAAC;IAEpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAE1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAiBtD,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAIxC,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAIxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tables/Table.tsx"],"names":["React","classNames","StyledTableWrapper","StyledTable","StyledTableBody","StyledTableHead","Table","children","className","striped","innerRef","displayName","Thead","Tbody"],"mappings":"AAAA,OAAOA,KAAP,MAAgD,OAAhD;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SACEC,kBADF,EAEEC,WAFF,EAGEC,eAHF,EAIEC,eAJF,QAKO,UALP;AAuBA,OAAO,IAAMC,KAA2C,GAAG,SAA9CA,KAA8C,OAKrD;AAAA,MAJJC,QAII,QAJJA,QAII;AAAA,MAHJC,SAGI,QAHJA,SAGI;AAAA,0BAFJC,OAEI;AAAA,MAFJA,OAEI,6BAFM,KAEN;AAAA,MADJC,QACI,QADJA,QACI;AACJ,sBACE,oBAAC,kBAAD;AAAoB,IAAA,SAAS,EAAC;AAA9B,kBACE,oBAAC,WAAD;AACE,IAAA,GAAG,EAAEA,QADP;AAEE,IAAA,SAAS,EAAET,UAAU,CAAC,SAAD,EAAYO,SAAZ,CAFvB;AAGE,IAAA,QAAQ,EAAEC;AAHZ,KAKGF,QALH,CADF,CADF;AAWD,CAjBM;AAmBPD,KAAK,CAACK,WAAN,GAAoB,OAApB;AAEA,OAAO,IAAMC,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGL,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,oBAAC,eAAD;AAAiB,IAAA,SAAS,EAAEP,UAAU,CAAC,eAAD,EAAkBO,SAAlB;AAAtC,KACGD,QADH,CAD2C;AAAA,CAAtC;AAMPK,KAAK,CAACD,WAAN,GAAoB,OAApB;AAEA,OAAO,IAAME,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGN,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,oBAAC,eAAD;AAAiB,IAAA,SAAS,EAAEP,UAAU,CAAC,eAAD,EAAkBO,SAAlB;AAAtC,KACGD,QADH,CAD2C;AAAA,CAAtC;AAMPM,KAAK,CAACF,WAAN,GAAoB,OAApB","sourcesContent":["import React, { ReactNode, FC, RefObject } from \"react\";\nimport classNames from \"classnames\";\nimport {\n StyledTableWrapper,\n StyledTable,\n StyledTableBody,\n StyledTableHead,\n} from \"./Styles\";\n\ninterface ITableWithChildren {\n /** Children prop can be ReactNode. */\n children: ReactNode;\n /** Classname prop for custom styling. */\n className?: string;\n}\n\nexport interface ITableProps {\n /** Darker color on odd column. */\n striped?: boolean;\n /** CSS classes. */\n className?: string;\n /** Ref object for table. */\n innerRef?: RefObject<HTMLTableElement>;\n}\n\nexport const Table: FC<ITableProps & ITableWithChildren> = ({\n children,\n className,\n striped = false,\n innerRef,\n}) => {\n return (\n <StyledTableWrapper className=\"c-table__wrap\">\n <StyledTable\n ref={innerRef}\n className={classNames(\"c-table\", className)}\n $striped={striped}\n >\n {children}\n </StyledTable>\n </StyledTableWrapper>\n );\n};\n\nTable.displayName = \"Table\";\n\nexport const Thead: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableHead className={classNames(\"c-table__head\", className)}>\n {children}\n </StyledTableHead>\n);\n\nThead.displayName = \"Thead\";\n\nexport const Tbody: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableBody className={classNames(\"c-table__body\", className)}>\n {children}\n </StyledTableBody>\n);\n\nTbody.displayName = \"Tbody\";\n"],"file":"Table.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tables/Table.tsx"],"names":["React","classNames","StyledTableWrapper","StyledTable","StyledTableBody","StyledTableHead","Table","children","className","striped","innerRef","displayName","Thead","Tbody"],"mappings":"AAAA,OAAOA,KAAP,MAAgD,OAAhD;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SACEC,kBADF,EAEEC,WAFF,EAGEC,eAHF,EAIEC,eAJF,QAKO,UALP;AAuBA,OAAO,IAAMC,KAA2C,GAAG,SAA9CA,KAA8C,OAKrD;AAAA,MAJJC,QAII,QAJJA,QAII;AAAA,MAHJC,SAGI,QAHJA,SAGI;AAAA,0BAFJC,OAEI;AAAA,MAFJA,OAEI,6BAFM,KAEN;AAAA,MADJC,QACI,QADJA,QACI;AACJ,sBACE,oBAAC,kBAAD;AAAoB,IAAA,SAAS,EAAC;AAA9B,kBACE,oBAAC,WAAD;AACE,IAAA,GAAG,EAAEA,QADP;AAEE,IAAA,SAAS,EAAET,UAAU,CAAC,SAAD,EAAYO,SAAZ,CAFvB;AAGE,IAAA,QAAQ,EAAEC;AAHZ,KAKGF,QALH,CADF,CADF;AAWD,CAjBM;AAmBPD,KAAK,CAACK,WAAN,GAAoB,OAApB;AAEA,OAAO,IAAMC,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGL,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,oBAAC,eAAD;AAAiB,IAAA,SAAS,EAAEP,UAAU,CAAC,eAAD,EAAkBO,SAAlB;AAAtC,KACGD,QADH,CAD2C;AAAA,CAAtC;AAMPK,KAAK,CAACD,WAAN,GAAoB,OAApB;AAEA,OAAO,IAAME,KAA6B,GAAG,SAAhCA,KAAgC;AAAA,MAAGN,QAAH,SAAGA,QAAH;AAAA,MAAaC,SAAb,SAAaA,SAAb;AAAA,sBAC3C,oBAAC,eAAD;AAAiB,IAAA,SAAS,EAAEP,UAAU,CAAC,eAAD,EAAkBO,SAAlB;AAAtC,KACGD,QADH,CAD2C;AAAA,CAAtC;AAMPM,KAAK,CAACF,WAAN,GAAoB,OAApB","sourcesContent":["import React, { ReactNode, FC, RefObject } from \"react\";\nimport classNames from \"classnames\";\nimport {\n StyledTableWrapper,\n StyledTable,\n StyledTableBody,\n StyledTableHead,\n} from \"./Styles\";\n\nexport interface ITableWithChildren {\n /** Children prop can be ReactNode. */\n children: ReactNode;\n /** Classname prop for custom styling. */\n className?: string;\n}\n\nexport interface ITableProps {\n /** Darker color on odd column. */\n striped?: boolean;\n /** CSS classes. */\n className?: string;\n /** Ref object for table. */\n innerRef?: RefObject<HTMLTableElement>;\n}\n\nexport const Table: FC<ITableProps & ITableWithChildren> = ({\n children,\n className,\n striped = false,\n innerRef,\n}) => {\n return (\n <StyledTableWrapper className=\"c-table__wrap\">\n <StyledTable\n ref={innerRef}\n className={classNames(\"c-table\", className)}\n $striped={striped}\n >\n {children}\n </StyledTable>\n </StyledTableWrapper>\n );\n};\n\nTable.displayName = \"Table\";\n\nexport const Thead: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableHead className={classNames(\"c-table__head\", className)}>\n {children}\n </StyledTableHead>\n);\n\nThead.displayName = \"Thead\";\n\nexport const Tbody: FC<ITableWithChildren> = ({ children, className }) => (\n <StyledTableBody className={classNames(\"c-table__body\", className)}>\n {children}\n </StyledTableBody>\n);\n\nTbody.displayName = \"Tbody\";\n"],"file":"Table.js"}