diff --git a/src/actions.js b/src/actions.js index c3b8b30..2168420 100755 --- a/src/actions.js +++ b/src/actions.js @@ -1,11 +1,18 @@ const actions = {} -const types = new Set() -export { actions, types } +export { actions } -export const addActions = acts => { - Object.keys(acts).forEach(key => { - types.add(acts[key]) - actions[key] = acts[key] +export const addActions = (...acts) => { + acts.forEach(action => { + if (actions[action]) { + throw new Error( + `An React Table action type called ${action} has already been registered!` + ) + } + // Action values are formatted this way to discourage + // you (the dev) from interacting with them in any way + // other than importing `{ actions } from 'react-table'` + // and referencing an action via `actions[actionName]` + actions[action] = `React Table Action: ${action}` }) } diff --git a/src/hooks/useTableState.js b/src/hooks/useTableState.js index 9e33c0c..4c0d3e1 100755 --- a/src/hooks/useTableState.js +++ b/src/hooks/useTableState.js @@ -1,6 +1,6 @@ import React from 'react' // -import { types } from '../actions' +import { actions } from '../actions' export const defaultState = {} @@ -32,11 +32,12 @@ export const useTableState = ( const reducedSetState = React.useCallback( (updater, type) => { return setState(old => { - if (!types.has(type)) { + if (!actions[type]) { console.info({ + currentState: old, stateUpdaterFn: updater, actionType: type, - currentState: old, + supportedActions: actions, }) throw new Error('Detected an unknown table action! (Details Above)') } diff --git a/src/index.js b/src/index.js index e6c6fd4..3dc2797 100755 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ -import * as utils from './utils'; -export { utils }; +import * as utils from './utils' +export { utils } export { useTable } from './hooks/useTable' export { useColumns } from './hooks/useColumns' export { useRows } from './hooks/useRows' diff --git a/src/plugin-hooks/useExpanded.js b/src/plugin-hooks/useExpanded.js index f26e9f6..8fa8e0e 100755 --- a/src/plugin-hooks/useExpanded.js +++ b/src/plugin-hooks/useExpanded.js @@ -7,10 +7,7 @@ import { defaultState } from '../hooks/useTableState' defaultState.expanded = {} -addActions({ - toggleExpanded: '__toggleExpanded__', - useExpanded: '__useExpanded__', -}) +addActions('toggleExpanded', 'useExpanded') const propTypes = { manualExpandedKey: PropTypes.string, diff --git a/src/plugin-hooks/useFilters.js b/src/plugin-hooks/useFilters.js index e197884..7bd492c 100755 --- a/src/plugin-hooks/useFilters.js +++ b/src/plugin-hooks/useFilters.js @@ -7,10 +7,7 @@ import { addActions, actions } from '../actions' import { defaultState } from '../hooks/useTableState' defaultState.filters = {} -addActions({ - setFilter: '__setFilter__', - setAllFilters: '__setAllFilters__', -}) +addActions('setFilter', 'setAllFilters') const propTypes = { // General diff --git a/src/plugin-hooks/useGroupBy.js b/src/plugin-hooks/useGroupBy.js index 487ab7f..5db93b5 100755 --- a/src/plugin-hooks/useGroupBy.js +++ b/src/plugin-hooks/useGroupBy.js @@ -13,9 +13,7 @@ import { defaultState.groupBy = [] -addActions({ - toggleGroupBy: '__toggleGroupBy__', -}) +addActions('toggleGroupBy') const propTypes = { // General diff --git a/src/plugin-hooks/usePagination.js b/src/plugin-hooks/usePagination.js index fc5c233..16f9e7d 100755 --- a/src/plugin-hooks/usePagination.js +++ b/src/plugin-hooks/usePagination.js @@ -8,10 +8,7 @@ import { defaultState } from '../hooks/useTableState' defaultState.pageSize = 10 defaultState.pageIndex = 0 -addActions({ - pageChange: '__pageChange__', - pageSizeChange: '__pageSizeChange__', -}) +addActions('pageChange', 'pageSizeChange') const propTypes = { // General diff --git a/src/plugin-hooks/useSortBy.js b/src/plugin-hooks/useSortBy.js index 8f0b10c..0b46078 100755 --- a/src/plugin-hooks/useSortBy.js +++ b/src/plugin-hooks/useSortBy.js @@ -14,9 +14,7 @@ import { defaultState.sortBy = [] -addActions({ - sortByChange: '__sortByChange__', -}) +addActions('sortByChange') const propTypes = { // General