UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

144 lines (132 loc) 3.69 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.useTable = useTable; var _react = require("react"); var _Table = require("./Table.utils"); var _Table2 = require("./Table.actionTypes"); var _Table3 = _interopRequireDefault(require("./Table.reducer")); function useTable(data, maxRowsToDisplay, columns) { if (data === void 0) { data = []; } if (maxRowsToDisplay === void 0) { maxRowsToDisplay = null; } if (columns === void 0) { columns = []; } var initialDisplayTableData = (0, _react.useMemo)(function () { return (0, _Table.getDisplayTableData)({ data: data, rowsToDisplay: maxRowsToDisplay }); }, [data, maxRowsToDisplay]); var _useReducer = (0, _react.useReducer)(_Table3.default, { selectedRows: [], currentTableData: initialDisplayTableData, columns: [].concat(columns) }), state = _useReducer[0], dispatch = _useReducer[1]; var updateTableData = (0, _react.useCallback)(function (data, rowsToDisplay) { dispatch({ type: _Table2.UPDATE_TABLE_DATA, payload: { data: data, rowsToDisplay: rowsToDisplay } }); }, [dispatch]); var expandTable = (0, _react.useCallback)(function (data) { dispatch({ type: _Table2.EXPAND_TABLE, payload: { data: data, rowsToDisplay: data.length } }); }, [dispatch]); var updateColumns = (0, _react.useCallback)(function (columns, clickedColumn) { dispatch({ type: _Table2.UPDATE_COLUMNS, payload: { columns: columns, clickedColumn: clickedColumn } }); }, [dispatch]); var resetColumns = (0, _react.useCallback)(function (columns) { dispatch({ type: _Table2.RESET_COLUMNS, payload: { columns: columns } }); }, [dispatch]); var collapseTable = (0, _react.useCallback)(function (data, rowsToDisplay) { dispatch({ type: _Table2.COLLAPSE_TABLE, payload: { data: data, rowsToDisplay: rowsToDisplay } }); }, [dispatch]); var selectAllRows = (0, _react.useCallback)(function (data, selectionKey, sideEffect) { dispatch({ type: _Table2.SELECT_ALL_ROWS, payload: { data: data, selectionKey: selectionKey }, opts: { sideEffect: sideEffect } }); }, [dispatch]); var deselectAllRows = (0, _react.useCallback)(function (sideEffect) { dispatch({ type: _Table2.DESELECT_ALL_ROWS, opts: { sideEffect: sideEffect } }); }, [dispatch]); var selectRow = (0, _react.useCallback)(function (value, sideEffect) { dispatch({ type: _Table2.SELECT_ROW, payload: { value: value }, opts: { sideEffect: sideEffect } }); }, [dispatch]); var deselectRow = (0, _react.useCallback)(function (value, sideEffect) { dispatch({ type: _Table2.DESELECT_ROW, payload: { value: value }, opts: { sideEffect: sideEffect } }); }, [dispatch]); var actions = (0, _react.useMemo)(function () { return { updateTableData: updateTableData, expandTable: expandTable, collapseTable: collapseTable, selectAllRows: selectAllRows, deselectAllRows: deselectAllRows, selectRow: selectRow, deselectRow: deselectRow, updateColumns: updateColumns, resetColumns: resetColumns }; }, [updateTableData, expandTable, collapseTable, selectAllRows, deselectAllRows, selectRow, deselectRow, updateColumns, resetColumns]); return [state, actions]; }