@apia/table 2.0.7 → 2.0.8

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.
Files changed (41) hide show
  1. package/dist/Cell.js.map +1 -1
  2. package/dist/FilterCell.js.map +1 -1
  3. package/dist/Header.js.map +1 -1
  4. package/dist/HeaderCell.js.map +1 -1
  5. package/dist/KeyHandler.js.map +1 -1
  6. package/dist/ResponsiveTable.js.map +1 -1
  7. package/dist/ResponsiveTableContext.js +3 -0
  8. package/dist/ResponsiveTableContext.js.map +1 -1
  9. package/dist/Row.js.map +1 -1
  10. package/dist/SeparatorCell.js.map +1 -1
  11. package/dist/StateCell.js.map +1 -1
  12. package/dist/filters/RangeFilter.js.map +1 -1
  13. package/dist/renderers/AccordionCell.js.map +1 -1
  14. package/dist/renderers/AccordionDocNameCellRenderer.js.map +1 -1
  15. package/dist/renderers/AccordionElement.js.map +1 -1
  16. package/dist/renderers/AccordionHTMLCellRenderer.js.map +1 -1
  17. package/dist/renderers/AccordionRenderer.js.map +1 -1
  18. package/dist/renderers/AdditionalColumnDefaultRenderer.js.map +1 -1
  19. package/dist/renderers/DefaultCellRenderer.js.map +1 -1
  20. package/dist/renderers/DefaultRowRenderer.js.map +1 -1
  21. package/dist/renderers/DocNameCellRenderer.js.map +1 -1
  22. package/dist/renderers/HTMLCellRenderer.js.map +1 -1
  23. package/dist/renderers/IsLoadingRenderer.js.map +1 -1
  24. package/dist/renderers/NoRegistersRenderer.js.map +1 -1
  25. package/dist/renderers/PriorityAccordionRenderer.js.map +1 -1
  26. package/dist/renderers/PriorityRenderer.js.map +1 -1
  27. package/dist/renderers/RowStatesRenderer.js.map +1 -1
  28. package/dist/renderers/StatusAccordionRenderer.js.map +1 -1
  29. package/dist/renderers/StatusRenderer.js.map +1 -1
  30. package/dist/renderers/TableRenderer.js.map +1 -1
  31. package/dist/renderers/makeAccordionAsyncRenderer.js.map +1 -1
  32. package/dist/renderers/makeAsyncRenderer.js.map +1 -1
  33. package/dist/store/index.js.map +1 -1
  34. package/dist/store/selection/getInitialState.js.map +1 -1
  35. package/dist/store/selection/getReduxActions.js.map +1 -1
  36. package/dist/store/selection/handleKey.js.map +1 -1
  37. package/dist/store/selection/makeKeyHandler.js.map +1 -1
  38. package/dist/store/selection/setNewFocused.js.map +1 -1
  39. package/dist/store/selection/useDomProps.js.map +1 -1
  40. package/dist/types.js.map +1 -1
  41. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"useDomProps.js","sources":["../../../src/store/selection/useDomProps.ts"],"sourcesContent":["import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { addBoundary } from '@apia/util';\nimport { TDomProps, IRequiredDomProps, TUseDomProps } from './types';\nimport { useResponsiveTable } from '..';\n\n/**\n * Este hook extrae según el estado de la tabla actual\n * y el nombre del elemento al que se le desean calcular\n * los atributos que deben mostrarse en el dom para\n * cumplir con las reglas de accesibilidad.\n *\n * @param element Es el nombre del elemento\n *\n * @param elementProps Las propiedades necesarias que se\n * deben suministrar para lograr un cálculo apropiado de\n * las propiedades que deben mostrarse.\n *\n * @param stateSelector Es una función que acepta el estado\n * global de la aplicación y devuelve el estado de la tabla\n * actual. Este método es necesario ya que el useDomProps\n * no sabe contra qué slice va a trabajar.\n *\n * @returns un objeto que contiene las propiedades\n * del DOM que deben destructurarse en el elemento html.\n */\nexport function useDomProps<ElementType extends keyof IRequiredDomProps>(\n element: ElementType,\n elementProps: IRequiredDomProps[typeof element],\n stateSelector: TUseDomProps,\n): TDomProps {\n const state = useResponsiveTable((globalState) => {\n const tableState = stateSelector(globalState);\n const hasNonAdditionalFilters = tableState?.hasNonAdditionalFilters;\n const startDataRowIndex = hasNonAdditionalFilters ? 2 : 1;\n\n const statesColumns = tableState?.statesColumns ?? 0;\n\n let expandedBeforeThisRow = 0;\n\n if (element === 'tr')\n expandedBeforeThisRow = tableState?.expandedRows.filter(\n (current) =>\n current < (elementProps as IRequiredDomProps['td']).rowIndex,\n ).length;\n\n let isFocused = false;\n let isSelected = false;\n switch (element) {\n case 'filterTd': {\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\n isFocused =\n tableState?.focusedRow === 1 - startDataRowIndex &&\n addBoundary(tableState?.focusedColumn ?? 0, 0) - statesColumns ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'tr': {\n const castedProps = elementProps as IRequiredDomProps['tr'];\n isFocused = !tableState\n ? false\n : (tableState.focusedRow === castedProps.rowIndex &&\n tableState?.focusedColumn === 0) ||\n (Math.floor(tableState?.focusedRow) === castedProps.rowIndex &&\n Math.round(tableState?.focusedRow) - tableState.focusedRow !==\n 0 &&\n !!castedProps.isTheExpandedRow);\n isSelected =\n !castedProps.isTheExpandedRow &&\n tableState?.selectedRows.includes(castedProps.rowIndex);\n break;\n }\n case 'stateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'additionalTd': {\n const castedProps = elementProps as IRequiredDomProps['additionalTd'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) === 1;\n break;\n }\n case 'td': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) - statesColumns ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'headerStateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow ===\n castedProps.rowIndex - 1 - startDataRowIndex &&\n addBoundary(tableState?.focusedColumn, 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'th': {\n const castedProps = elementProps as IRequiredDomProps['th'];\n isFocused =\n tableState?.focusedRow === 0 - startDataRowIndex &&\n addBoundary((tableState?.focusedColumn ?? 0) - statesColumns, 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'separator': {\n const castedProps = elementProps as IRequiredDomProps['separator'];\n isFocused = !tableState\n ? false\n : tableState.focusedRow === castedProps.rowIndex;\n break;\n }\n default:\n break;\n }\n\n return {\n columns: tableState?.columns ?? [],\n expandedBeforeThisRow,\n isEditionMode: tableState?.isEditionMode,\n hasNonAdditionalFilters,\n rowsLength: element === 'table' ? tableState?.rows.length : '',\n isSelected,\n isFocused,\n startDataRowIndex,\n statesColumns: tableState?.statesColumns,\n };\n }, shallowEqual);\n\n let returnObject: Omit<TDomProps, 'ref'> = React.useMemo(() => ({}), []);\n\n switch (element) {\n case 'filterTd': {\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': 2,\n };\n break;\n }\n case 'separator': {\n const castedProps = elementProps as IRequiredDomProps['separator'];\n returnObject = {\n 'aria-rowindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n state.expandedBeforeThisRow,\n 'data-focusindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n 'aria-selected': state.isSelected,\n 'data-focused': state.isFocused,\n 'aria-expanded': false,\n };\n break;\n }\n case 'table': {\n returnObject = {\n role: 'treegrid',\n 'aria-colcount': state.columns.length,\n 'aria-rowcount': state.rowsLength,\n };\n break;\n }\n case 'tr': {\n const castedProps = elementProps as IRequiredDomProps['tr'];\n returnObject = {\n 'aria-rowindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n state.expandedBeforeThisRow +\n (castedProps.isTheExpandedRow ? 1 : 0),\n 'data-focusindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n (castedProps.isTheExpandedRow ? 0.5 : 0),\n 'aria-selected': state.isSelected,\n 'data-focused': state.isFocused,\n 'aria-expanded': castedProps.isThisRowExpanded,\n tabIndex: state.isFocused ? 0 : -1,\n };\n break;\n }\n case 'td': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'additionalTd': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex': 1,\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'stateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'headerStateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex,\n };\n break;\n }\n case 'th': {\n const castedProps = elementProps as IRequiredDomProps['th'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'aria-sort': ['ascending', 'descending', undefined][\n ['Asc', 'Desc', null].findIndex(\n (current) =>\n current === state.columns[castedProps.columnIndex].currentSorting,\n )\n ] as 'none' | 'ascending' | 'descending' | 'other' | undefined,\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': 1,\n };\n break;\n }\n default:\n break;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useMemo(() => returnObject, Object.values(returnObject));\n}\n"],"names":[],"mappings":";;;;;AA0BgB,SAAA,WAAA,CACd,OACA,EAAA,YAAA,EACA,aACW,EAAA;AACX,EAAM,MAAA,KAAA,GAAQ,kBAAmB,CAAA,CAAC,WAAgB,KAAA;AAChD,IAAM,MAAA,UAAA,GAAa,cAAc,WAAW,CAAA,CAAA;AAC5C,IAAA,MAAM,0BAA0B,UAAY,EAAA,uBAAA,CAAA;AAC5C,IAAM,MAAA,iBAAA,GAAoB,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAExD,IAAM,MAAA,aAAA,GAAgB,YAAY,aAAiB,IAAA,CAAA,CAAA;AAEnD,IAAA,IAAI,qBAAwB,GAAA,CAAA,CAAA;AAE5B,IAAA,IAAI,OAAY,KAAA,IAAA;AACd,MAAA,qBAAA,GAAwB,YAAY,YAAa,CAAA,MAAA;AAAA,QAC/C,CAAC,OACC,KAAA,OAAA,GAAW,YAAyC,CAAA,QAAA;AAAA,OACtD,CAAA,MAAA,CAAA;AAEJ,IAAA,IAAI,SAAY,GAAA,KAAA,CAAA;AAChB,IAAA,IAAI,UAAa,GAAA,KAAA,CAAA;AACjB,IAAA,QAAQ,OAAS;AAAA,MACf,KAAK,UAAY,EAAA;AACf,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GACE,UAAY,EAAA,UAAA,KAAe,CAAI,GAAA,iBAAA,IAC/B,YAAY,UAAY,EAAA,aAAA,IAAiB,CAAG,EAAA,CAAC,IAAI,aAC/C,KAAA,WAAA,CAAY,WAAc,GAAA,CAAA,IAAK,0BAA0B,CAAI,GAAA,CAAA,CAAA,CAAA;AACjE,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,IAAM,EAAA;AACT,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAY,SAAA,GAAA,CAAC,UACT,GAAA,KAAA,GACC,UAAW,CAAA,UAAA,KAAe,WAAY,CAAA,QAAA,IACrC,UAAY,EAAA,aAAA,KAAkB,CAC/B,IAAA,IAAA,CAAK,KAAM,CAAA,UAAA,EAAY,UAAU,CAAA,KAAM,WAAY,CAAA,QAAA,IAClD,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,UAAU,CAAI,GAAA,UAAA,CAAW,UAC9C,KAAA,CAAA,IACF,CAAC,CAAC,WAAY,CAAA,gBAAA,CAAA;AACpB,QAAA,UAAA,GACE,CAAC,WAAY,CAAA,gBAAA,IACb,YAAY,YAAa,CAAA,QAAA,CAAS,YAAY,QAAQ,CAAA,CAAA;AACxD,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QACE,SAAA,GAAA,UAAA,EAAY,UAAe,KAAA,WAAA,CAAY,QACtC,IAAA,CAAA,UAAA,EAAY,aAAiB,IAAA,CAAA,MAC5B,WAAY,CAAA,WAAA,GAAc,CAAK,IAAA,uBAAA,GAA0B,CAAI,GAAA,CAAA,CAAA,CAAA;AACjE,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,cAAgB,EAAA;AACnB,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GACE,YAAY,UAAe,KAAA,WAAA,CAAY,QACtC,IAAA,CAAA,UAAA,EAAY,iBAAiB,CAAO,MAAA,CAAA,CAAA;AACvC,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,IAAM,EAAA;AACT,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GACE,UAAY,EAAA,UAAA,KAAe,WAAY,CAAA,QAAA,IAAA,CACtC,UAAY,EAAA,aAAA,IAAiB,CAAK,IAAA,aAAA,KACjC,WAAY,CAAA,WAAA,GAAc,CAAK,IAAA,uBAAA,GAA0B,CAAI,GAAA,CAAA,CAAA,CAAA;AACjE,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,iBAAmB,EAAA;AACtB,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GACE,UAAY,EAAA,UAAA,KACV,WAAY,CAAA,QAAA,GAAW,IAAI,iBAC7B,IAAA,WAAA,CAAY,UAAY,EAAA,aAAA,EAAe,CAAC,CACtC,KAAA,WAAA,CAAY,WAAc,GAAA,CAAA,IAAK,0BAA0B,CAAI,GAAA,CAAA,CAAA,CAAA;AACjE,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,IAAM,EAAA;AACT,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GACE,UAAY,EAAA,UAAA,KAAe,CAAI,GAAA,iBAAA,IAC/B,aAAa,UAAY,EAAA,aAAA,IAAiB,CAAK,IAAA,aAAA,EAAe,CAAC,CAC7D,KAAA,WAAA,CAAY,WAAc,GAAA,CAAA,IAAK,0BAA0B,CAAI,GAAA,CAAA,CAAA,CAAA;AACjE,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,QAAA,SAAA,GAAY,CAAC,UAAA,GACT,KACA,GAAA,UAAA,CAAW,eAAe,WAAY,CAAA,QAAA,CAAA;AAC1C,QAAA,MAAA;AAAA,OACF;AAEE,KACJ;AAEA,IAAO,OAAA;AAAA,MACL,OAAA,EAAS,UAAY,EAAA,OAAA,IAAW,EAAC;AAAA,MACjC,qBAAA;AAAA,MACA,eAAe,UAAY,EAAA,aAAA;AAAA,MAC3B,uBAAA;AAAA,MACA,UAAY,EAAA,OAAA,KAAY,OAAU,GAAA,UAAA,EAAY,KAAK,MAAS,GAAA,EAAA;AAAA,MAC5D,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAe,UAAY,EAAA,aAAA;AAAA,KAC7B,CAAA;AAAA,KACC,YAAY,CAAA,CAAA;AAEf,EAAA,IAAI,eAAuC,KAAM,CAAA,OAAA,CAAQ,OAAO,EAAC,CAAA,EAAI,EAAE,CAAA,CAAA;AAEvE,EAAA,QAAQ,OAAS;AAAA,IACf,KAAK,UAAY,EAAA;AACf,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,eAAA,EACE,YAAY,WACZ,GAAA,CAAA,GACA,MAAM,aACL,IAAA,KAAA,CAAM,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAAA,QACvC,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,eAAiB,EAAA,CAAA;AAAA,OACnB,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,WAAa,EAAA;AAChB,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,iBACE,WAAY,CAAA,QAAA,GACZ,KAAM,CAAA,iBAAA,GACN,IACA,KAAM,CAAA,qBAAA;AAAA,QACR,iBAAmB,EAAA,WAAA,CAAY,QAAW,GAAA,KAAA,CAAM,iBAAoB,GAAA,CAAA;AAAA,QACpE,iBAAiB,KAAM,CAAA,UAAA;AAAA,QACvB,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,eAAiB,EAAA,KAAA;AAAA,OACnB,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,OAAS,EAAA;AACZ,MAAe,YAAA,GAAA;AAAA,QACb,IAAM,EAAA,UAAA;AAAA,QACN,eAAA,EAAiB,MAAM,OAAQ,CAAA,MAAA;AAAA,QAC/B,iBAAiB,KAAM,CAAA,UAAA;AAAA,OACzB,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,eAAA,EACE,WAAY,CAAA,QAAA,GACZ,KAAM,CAAA,iBAAA,GACN,IACA,KAAM,CAAA,qBAAA,IACL,WAAY,CAAA,gBAAA,GAAmB,CAAI,GAAA,CAAA,CAAA;AAAA,QACtC,iBAAA,EACE,YAAY,QACZ,GAAA,KAAA,CAAM,oBACN,CACC,IAAA,WAAA,CAAY,mBAAmB,GAAM,GAAA,CAAA,CAAA;AAAA,QACxC,iBAAiB,KAAM,CAAA,UAAA;AAAA,QACvB,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,iBAAiB,WAAY,CAAA,iBAAA;AAAA,QAC7B,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAClC,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,eAAA,EACE,YAAY,WACZ,GAAA,CAAA,GACA,MAAM,aACL,IAAA,KAAA,CAAM,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAAA,QACvC,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,eAAiB,EAAA,WAAA,CAAY,QAAW,GAAA,KAAA,CAAM,iBAAoB,GAAA,CAAA;AAAA,OACpE,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,cAAgB,EAAA;AACnB,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,eAAiB,EAAA,CAAA;AAAA,QACjB,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,eAAiB,EAAA,WAAA,CAAY,QAAW,GAAA,KAAA,CAAM,iBAAoB,GAAA,CAAA;AAAA,OACpE,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,WAAa,EAAA;AAChB,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,iBACE,WAAY,CAAA,WAAA,GAAc,CAAK,IAAA,KAAA,CAAM,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAAA,QACrE,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,eAAiB,EAAA,WAAA,CAAY,QAAW,GAAA,KAAA,CAAM,iBAAoB,GAAA,CAAA;AAAA,OACpE,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,iBAAmB,EAAA;AACtB,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,iBACE,WAAY,CAAA,WAAA,GAAc,CAAK,IAAA,KAAA,CAAM,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAAA,QACrE,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,iBAAiB,WAAY,CAAA,QAAA;AAAA,OAC/B,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,MAAM,WAAc,GAAA,YAAA,CAAA;AACpB,MAAe,YAAA,GAAA;AAAA,QACb,eAAA,EACE,YAAY,WACZ,GAAA,CAAA,GACA,MAAM,aACL,IAAA,KAAA,CAAM,0BAA0B,CAAI,GAAA,CAAA,CAAA;AAAA,QACvC,WAAA,EAAa,CAAC,WAAA,EAAa,YAAc,EAAA,KAAA,CAAS,EAChD,CAAC,KAAA,EAAO,MAAQ,EAAA,IAAI,CAAE,CAAA,SAAA;AAAA,UACpB,CAAC,OACC,KAAA,OAAA,KAAY,MAAM,OAAQ,CAAA,WAAA,CAAY,WAAW,CAAE,CAAA,cAAA;AAAA,SAEzD,CAAA;AAAA,QACA,kBAAA,EAAoB,KAAM,CAAA,aAAA,IAAiB,KAAM,CAAA,SAAA;AAAA,QACjD,gBAAgB,KAAM,CAAA,SAAA;AAAA,QACtB,QAAA,EAAU,KAAM,CAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,QAChC,eAAiB,EAAA,CAAA;AAAA,OACnB,CAAA;AACA,MAAA,MAAA;AAAA,KACF;AAEE,GACJ;AAGA,EAAA,OAAO,MAAM,OAAQ,CAAA,MAAM,cAAc,MAAO,CAAA,MAAA,CAAO,YAAY,CAAC,CAAA,CAAA;AACtE;;;;"}
1
+ {"version":3,"file":"useDomProps.js","sources":["../../../src/store/selection/useDomProps.ts"],"sourcesContent":["import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { addBoundary } from '@apia/util';\r\nimport { TDomProps, IRequiredDomProps, TUseDomProps } from './types';\r\nimport { useResponsiveTable } from '..';\r\n\r\n/**\r\n * Este hook extrae según el estado de la tabla actual\r\n * y el nombre del elemento al que se le desean calcular\r\n * los atributos que deben mostrarse en el dom para\r\n * cumplir con las reglas de accesibilidad.\r\n *\r\n * @param element Es el nombre del elemento\r\n *\r\n * @param elementProps Las propiedades necesarias que se\r\n * deben suministrar para lograr un cálculo apropiado de\r\n * las propiedades que deben mostrarse.\r\n *\r\n * @param stateSelector Es una función que acepta el estado\r\n * global de la aplicación y devuelve el estado de la tabla\r\n * actual. Este método es necesario ya que el useDomProps\r\n * no sabe contra qué slice va a trabajar.\r\n *\r\n * @returns un objeto que contiene las propiedades\r\n * del DOM que deben destructurarse en el elemento html.\r\n */\r\nexport function useDomProps<ElementType extends keyof IRequiredDomProps>(\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n stateSelector: TUseDomProps,\r\n): TDomProps {\r\n const state = useResponsiveTable((globalState) => {\r\n const tableState = stateSelector(globalState);\r\n const hasNonAdditionalFilters = tableState?.hasNonAdditionalFilters;\r\n const startDataRowIndex = hasNonAdditionalFilters ? 2 : 1;\r\n\r\n const statesColumns = tableState?.statesColumns ?? 0;\r\n\r\n let expandedBeforeThisRow = 0;\r\n\r\n if (element === 'tr')\r\n expandedBeforeThisRow = tableState?.expandedRows.filter(\r\n (current) =>\r\n current < (elementProps as IRequiredDomProps['td']).rowIndex,\r\n ).length;\r\n\r\n let isFocused = false;\r\n let isSelected = false;\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n isFocused =\r\n tableState?.focusedRow === 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn ?? 0, 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n isFocused = !tableState\r\n ? false\r\n : (tableState.focusedRow === castedProps.rowIndex &&\r\n tableState?.focusedColumn === 0) ||\r\n (Math.floor(tableState?.focusedRow) === castedProps.rowIndex &&\r\n Math.round(tableState?.focusedRow) - tableState.focusedRow !==\r\n 0 &&\r\n !!castedProps.isTheExpandedRow);\r\n isSelected =\r\n !castedProps.isTheExpandedRow &&\r\n tableState?.selectedRows.includes(castedProps.rowIndex);\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['additionalTd'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) === 1;\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow ===\r\n castedProps.rowIndex - 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n isFocused =\r\n tableState?.focusedRow === 0 - startDataRowIndex &&\r\n addBoundary((tableState?.focusedColumn ?? 0) - statesColumns, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n isFocused = !tableState\r\n ? false\r\n : tableState.focusedRow === castedProps.rowIndex;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return {\r\n columns: tableState?.columns ?? [],\r\n expandedBeforeThisRow,\r\n isEditionMode: tableState?.isEditionMode,\r\n hasNonAdditionalFilters,\r\n rowsLength: element === 'table' ? tableState?.rows.length : '',\r\n isSelected,\r\n isFocused,\r\n startDataRowIndex,\r\n statesColumns: tableState?.statesColumns,\r\n };\r\n }, shallowEqual);\r\n\r\n let returnObject: Omit<TDomProps, 'ref'> = React.useMemo(() => ({}), []);\r\n\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n state.statesColumns +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 2,\r\n };\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow,\r\n 'data-focusindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': false,\r\n };\r\n break;\r\n }\r\n case 'table': {\r\n returnObject = {\r\n role: 'treegrid',\r\n 'aria-colcount': state.columns.length,\r\n 'aria-rowcount': state.rowsLength,\r\n };\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow +\r\n (castedProps.isTheExpandedRow ? 1 : 0),\r\n 'data-focusindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n (castedProps.isTheExpandedRow ? 0.5 : 0),\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': castedProps.isThisRowExpanded,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n };\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n state.statesColumns +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex': 1,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex,\r\n };\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n state.statesColumns +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'aria-sort': ['ascending', 'descending', undefined][\r\n ['Asc', 'Desc', null].findIndex(\r\n (current) =>\r\n current === state.columns[castedProps.columnIndex].currentSorting,\r\n )\r\n ] as 'none' | 'ascending' | 'descending' | 'other' | undefined,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 1,\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return React.useMemo(() => returnObject, Object.values(returnObject));\r\n}\r\n"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import { IconType } from '@meronex/icons';\nimport React from 'react';\nimport { TApiaFilter, TModify } from '@apia/util';\nimport { TAccordionCellRenderer } from './renderers/AccordionCell';\nimport { ISelectableState, TBasicRow } from './store/selection/types';\n\nexport type TColoredElement = {\n background?: string;\n color?: string;\n};\n\n/**\n * Se encontró en algunos casos particulares que\n * el servidor devuelve Up y Down para referirse\n * al orden actual de una columna.\n */\nexport type TResponsiveTableSortValue = null | 'A' | 'D' | 'Down' | 'Up';\n\n/**\n * Cada vez que se hace click en el botón del\n * cabezal de una columna, si la columna tiene\n * habilitado el ordenamiento, se emite un\n * evento de este tipo, informando cuál columna\n * emitió el evento, y cuál es el nuevo sortValue.\n */\nexport type TResponsiveTableSortChangeEvent = {\n name: string;\n column: TResponsiveTableColumn;\n columnIndex: number;\n /**\n * Es el orden que la columna debería tener\n * si no hay ningún motivo para evitar que\n * la acción de ordenamiento se lleve a cabo.\n *\n * Es importante notar que el componente\n * responsiveTable no realiza ninguna acción\n * de ordenamiento por defecto, sino que es\n * quien la usa, quien debe realizar las\n * acciones correspondientes e informarlo a\n * la tabla actualizando los registros y el\n * estado de la columna correspondiente.\n */\n sortValue: TResponsiveTableSortValue;\n};\n\n/**\n * Cada celda admite un renderer, que recibe\n * propiedades personalizadas. Este tipo define\n * cuál es la forma de esas propiedades.\n */\nexport type TResponsiveTableCellRendererProps<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n HTML = HTMLTableCellElement,\n> = {\n cell: TResponsiveTableCell<RendererPropsType>;\n column: TResponsiveTableColumn;\n row: TResponsiveTableRow;\n} & React.AllHTMLAttributes<HTML>;\n\nexport type TResponsiveTableCellRenderer<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = React.FunctionComponent<\n TResponsiveTableCellRendererProps<RendererPropsType>\n>;\n\n/**\n * Algunos elementos de la tabla admiten un\n * Renderer personalizado. Dichos elementos\n * extienden este tipo.\n */\nexport type TResponsiveTableWithRendererElement<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n /**\n * Si se desea, el elemento admite un componente\n * personalizado para encargarse del renderizado\n * del mismo en el modo responsivo. De esta forma, se puede proveer\n * de comportamiento específico a cualquier\n * elemento de la tabla.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AccordionRenderer?: TAccordionCellRenderer<any>;\n /**\n * Son las propiedades que se desean pasar al\n * componente de renderizado personalizado que\n * se haya establecido.\n *\n * Estas props serán obviadas en caso de que\n * no haya componente de renderizado personalizado.\n */\n rendererProps?: RendererPropsType;\n /**\n * Si se desea, el elemento admite un componente\n * personalizado para encargarse del renderizado\n * del mismo. De esta forma, se puede proveer\n * de comportamiento específico a cualquier\n * elemento de la tabla.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Renderer?: TResponsiveTableCellRenderer<any>;\n};\n\nexport type TResponsiveTableCell<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n children?: number | string;\n} & TResponsiveTableWithRendererElement<RendererPropsType> &\n Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'className' | 'colSpan' | 'id' | 'rowSpan' | 'title'\n >\n > &\n TColoredElement;\n\n/**\n * Cada celda admite un renderer, que recibe\n * propiedades personalizadas. Este tipo define\n * cuál es la forma de esas propiedades.\n */\nexport type TResponsiveTableRowRendererProps<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n row: TResponsiveTableRow<RendererPropsType>;\n rowIndex: number;\n} & React.AllHTMLAttributes<HTMLTableRowElement>;\n\nexport type TResponsiveTableRowRenderer<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = React.FunctionComponent<\n TResponsiveTableRowRendererProps<RendererPropsType>\n>;\n\nexport type TResponsiveTableRow<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = TBasicRow &\n TColoredElement & {\n accordionButtonProps?: {\n rightButtons?: React.ReactNode;\n onUserPressEnter?: (ev: React.KeyboardEvent) => unknown;\n };\n cells: TResponsiveTableCell[];\n /**\n * Si se pasa en true, la fila se mostrará como un separador\n */\n separator?: boolean;\n initiallySelected?: boolean;\n\n renderer?: TResponsiveTableRowRenderer<RendererPropsType>;\n rendererProps?: RendererPropsType;\n /**\n * Permite pasar propiedades arbitrarias a un row y recuperarlas en los\n * eventos de onClick por ejemplo.\n */\n rowProps?: RendererPropsType;\n isHidden?: boolean;\n /**\n * Los estados de la fila agregan un ícono en la columna\n * especial que es la que se muestra a la izquierda y\n * contiene, cuando existe, el botón de más información.\n */\n states?: TResponsiveTableRowState[];\n } & Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'colSpan' | 'className' | 'rowSpan' | 'title'\n >\n >;\n\nexport type TResponsiveTableRowState = {\n /**\n * Es un className que se agregará al elemento <tr>\n */\n className?: string;\n Icon: IconType;\n color?: string;\n tooltip: string;\n};\n\nexport type TResponsiveTableColumn = TResponsiveTableWithRendererElement & {\n /** Con esta propiedad se puede pasar parámetros opcionales */\n additionalData?: Record<string, unknown>;\n /**\n * Determina si la columna admite ordenamiento.\n */\n allowSorting?: boolean;\n children?: React.ReactNode;\n /**\n * Cuando la columna admite ordenamiento, muestra\n * una flecha indicando el orden actual. Esta\n * propiedad establece si la flecha apunta hacia\n * arriba, abajo, o si la flecha es un guión.\n */\n currentSorting?: TResponsiveTableSortValue;\n /** *\n * Valor para decirle al server cuál columna se está ordenando\n */\n dataSortBy?: string;\n hidden?: boolean;\n /**\n * Normalmente, todas las columnas se van a mostrar\n * como renglones en el acordión, cuando este es\n * expandido.\n *\n * Si este flag es pasado en true, la columna\n * correspondiente no se va a mostrar en modo\n * responsivo.\n */\n hideFromAccordion?: boolean;\n /**\n * Elemento id del dom.\n */\n id?: string;\n /**\n * Es el texto que se mostrará en el cabezal.\n */\n label: string;\n maxWidth?: number | string;\n minWidth?: number | string;\n /**\n * El nombre de la columna debe ser único, se utiliza\n * para realizar la asosiación entre las columnas\n * y los filtros, así como con los eventos de orden.\n */\n name: string;\n /**\n * Si se pasa required: true, se pone un asterisco\n * rojo en el cabezal de la columna para señalar que\n * la columna es requerida.\n */\n required?: boolean;\n /**\n * Algunas columnas podrán mostrarse mediante un botón\n * \"mostrar más\", para ello deberán ser marcadas con\n * esta prop en true.\n */\n showAsAdditional?: boolean;\n /**\n * Cuando no se pasa esta propiedad en ninguna columna,\n * la aplicación encuentra la primera fila sin celdas\n * vacías y la utiliza como título.\n *\n * En cambio, si al menos una columna tiene este flag\n * en true, el título de cada fila del acordión estará\n * compuesto por los valores de estas columnas.\n */\n showInAccordionTitle?: boolean;\n /**\n * Elemento title de html (El tooltip).\n */\n title?: string;\n width?: number | string;\n} & Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'className' | 'colSpan' | 'rowSpan'\n >\n >;\n\nexport type TResponsiveTableStoreProps = {\n /**\n * Habla sobre el orden de las filas en función de\n * las columnas. Esta propiedad habilita/deshabilita\n * el ordenado de las columnas al hacer click en los\n * cabezales.\n *\n * La tabla admite ordenamiento por defecto, a menos\n * que esta prop venga en false. En caso de que se\n * pase false no importa qué digan las columnas,\n * el ordenamiento no estará habilitado.\n */\n allowSorting?: boolean;\n\n // Composition\n columns: TResponsiveTableColumn[];\n filters?: TApiaFilter[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: TResponsiveTableRow<any>[];\n\n /**\n * Por defecto, la tabla permitirá seleccionar\n * múltiples valores, a menos que esta prop venga\n * en false.\n */\n isMultiple?: boolean;\n\n label?: string;\n\n /**\n * Es normal que una tabla tenga paginación y que en cada página haya una\n * cantidad distinta de estados. Si se quiere mantener consistencia en el\n * tamaño de las páginas, es posible reservar un tamaño para una cantidad\n * definida de estados con este parámetro.\n */\n reserveColumnsForStates?: number;\n};\n\nexport type TResponsiveTableRowsSelectionEvent = {\n index: number;\n row: TResponsiveTableRow;\n}[];\n\nexport type TResponsiveTableContextProps = TResponsiveTableStoreProps &\n Pick<\n ISelectableState,\n 'allowRowsKeyboardSorting' | 'allowEdition' | 'allowSelection'\n > & {\n /**\n * Cuando se actualiza el array de rows de la tabla\n * desde las props del ResponsiveTableContext, se\n * reinicia el estado de selección de acuerdo a cómo\n * viene definido en el prop. **Si esta prop se pasa\n * en true**, este comportamiento es deshabilitado.\n */\n avoidReparseSelectionOnRowChange?: boolean;\n children?: React.ReactNode;\n className?: string;\n /**\n * Permite redefinir el comportamiento de los breakpoints pasando un índice\n * personalizado. Cuando es pasado, deja de prestar atención al breakpoint\n * de la pantalla y comienza a prestar atención a este índice.\n */\n currentBreakPoint?: number;\n customLabels?: typeof defaultLabels;\n /**\n * Se puede utilizar este booleano para que la tabla\n * deshabilite las opciones de filtrado y ordenado mientras\n * se está ejecutando una acción ajax.\n */\n isLoading?: boolean;\n /**\n * La tabla debe tener un nombre único que será usado para\n * acceder a las propiedades de la misma en el store. En caso\n * de que no se pase ninguno, la tabla lo generará\n * automaticamente.\n */\n name?: string;\n\n // Filtering\n onFilterChange?: (ev: TApiaFilter) => void | Promise<boolean>;\n onFilterBlur?: (ev: TApiaFilter) => unknown;\n onFilterPressEnter?: (ev: TApiaFilter) => unknown;\n\n // Selection\n onChangeSelection?: (ev: TResponsiveTableRowsSelectionEvent) => unknown;\n /**\n * Este evento será llamado cada vez que el usuario esté\n * haciendo foco en la tabla, tenga una selección de\n * filas no vacía y presione la tecla Enter.\n */\n onSelectRows?: (\n ev: TResponsiveTableRowsSelectionEvent,\n focusedRowIndex: number,\n ) => unknown;\n\n // Sorting\n /**\n * Es llamado cada vez que el usuario hace click en el botón\n * del cabezal de la columna. **Importante:** la tabla no\n * realizará ninguna acción de ordenamiento, sino solamente\n * avisar de que el usuario desea que las filas sean ordenadas\n * por alguna columna en particular.\n */\n onSortChange?: (ev: TResponsiveTableSortChangeEvent) => unknown;\n variant?: string;\n };\n\n/**\n * Los callbacks del responsiveTable estarán\n * disponibles a través de un contexto, de\n * forma que cualquier elemento activo que\n * desee informar de un evento en particular\n * pueda hacerlo en forma sencilla.\n */\nexport type TResponsiveTableContext = TModify<\n Pick<\n TResponsiveTableContextProps,\n | 'currentBreakPoint'\n | 'name'\n | 'onChangeSelection'\n | 'onFilterBlur'\n | 'onFilterChange'\n | 'onFilterPressEnter'\n | 'onSelectRows'\n | 'onSortChange'\n | 'label'\n >,\n { labels: typeof defaultLabels; name: string }\n>;\n\ndeclare global {\n interface Window {\n FINDER_NO_DATA: string;\n }\n}\n\nexport const defaultLabels = {\n noRegisters: window.FINDER_NO_DATA,\n};\n"],"names":[],"mappings":"AA0ZO,MAAM,aAAgB,GAAA;AAAA,EAC3B,aAAa,MAAO,CAAA,cAAA;AACtB;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import { IconType } from '@meronex/icons';\r\nimport React from 'react';\r\nimport { TApiaFilter, TModify } from '@apia/util';\r\nimport { TAccordionCellRenderer } from './renderers/AccordionCell';\r\nimport { ISelectableState, TBasicRow } from './store/selection/types';\r\n\r\nexport type TColoredElement = {\r\n background?: string;\r\n color?: string;\r\n};\r\n\r\n/**\r\n * Se encontró en algunos casos particulares que\r\n * el servidor devuelve Up y Down para referirse\r\n * al orden actual de una columna.\r\n */\r\nexport type TResponsiveTableSortValue = null | 'A' | 'D' | 'Down' | 'Up';\r\n\r\n/**\r\n * Cada vez que se hace click en el botón del\r\n * cabezal de una columna, si la columna tiene\r\n * habilitado el ordenamiento, se emite un\r\n * evento de este tipo, informando cuál columna\r\n * emitió el evento, y cuál es el nuevo sortValue.\r\n */\r\nexport type TResponsiveTableSortChangeEvent = {\r\n name: string;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n /**\r\n * Es el orden que la columna debería tener\r\n * si no hay ningún motivo para evitar que\r\n * la acción de ordenamiento se lleve a cabo.\r\n *\r\n * Es importante notar que el componente\r\n * responsiveTable no realiza ninguna acción\r\n * de ordenamiento por defecto, sino que es\r\n * quien la usa, quien debe realizar las\r\n * acciones correspondientes e informarlo a\r\n * la tabla actualizando los registros y el\r\n * estado de la columna correspondiente.\r\n */\r\n sortValue: TResponsiveTableSortValue;\r\n};\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableCellRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n HTML = HTMLTableCellElement,\r\n> = {\r\n cell: TResponsiveTableCell<RendererPropsType>;\r\n column: TResponsiveTableColumn;\r\n row: TResponsiveTableRow;\r\n} & React.AllHTMLAttributes<HTML>;\r\n\r\nexport type TResponsiveTableCellRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableCellRendererProps<RendererPropsType>\r\n>;\r\n\r\n/**\r\n * Algunos elementos de la tabla admiten un\r\n * Renderer personalizado. Dichos elementos\r\n * extienden este tipo.\r\n */\r\nexport type TResponsiveTableWithRendererElement<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo en el modo responsivo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n AccordionRenderer?: TAccordionCellRenderer<any>;\r\n /**\r\n * Son las propiedades que se desean pasar al\r\n * componente de renderizado personalizado que\r\n * se haya establecido.\r\n *\r\n * Estas props serán obviadas en caso de que\r\n * no haya componente de renderizado personalizado.\r\n */\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Renderer?: TResponsiveTableCellRenderer<any>;\r\n};\r\n\r\nexport type TResponsiveTableCell<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n children?: number | string;\r\n} & TResponsiveTableWithRendererElement<RendererPropsType> &\r\n Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'id' | 'rowSpan' | 'title'\r\n >\r\n > &\r\n TColoredElement;\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableRowRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n row: TResponsiveTableRow<RendererPropsType>;\r\n rowIndex: number;\r\n} & React.AllHTMLAttributes<HTMLTableRowElement>;\r\n\r\nexport type TResponsiveTableRowRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableRowRendererProps<RendererPropsType>\r\n>;\r\n\r\nexport type TResponsiveTableRow<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = TBasicRow &\r\n TColoredElement & {\r\n accordionButtonProps?: {\r\n rightButtons?: React.ReactNode;\r\n onUserPressEnter?: (ev: React.KeyboardEvent) => unknown;\r\n };\r\n cells: TResponsiveTableCell[];\r\n /**\r\n * Si se pasa en true, la fila se mostrará como un separador\r\n */\r\n separator?: boolean;\r\n initiallySelected?: boolean;\r\n\r\n renderer?: TResponsiveTableRowRenderer<RendererPropsType>;\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Permite pasar propiedades arbitrarias a un row y recuperarlas en los\r\n * eventos de onClick por ejemplo.\r\n */\r\n rowProps?: RendererPropsType;\r\n isHidden?: boolean;\r\n /**\r\n * Los estados de la fila agregan un ícono en la columna\r\n * especial que es la que se muestra a la izquierda y\r\n * contiene, cuando existe, el botón de más información.\r\n */\r\n states?: TResponsiveTableRowState[];\r\n } & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'colSpan' | 'className' | 'rowSpan' | 'title'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableRowState = {\r\n /**\r\n * Es un className que se agregará al elemento <tr>\r\n */\r\n className?: string;\r\n Icon: IconType;\r\n color?: string;\r\n tooltip: string;\r\n};\r\n\r\nexport type TResponsiveTableColumn = TResponsiveTableWithRendererElement & {\r\n /** Con esta propiedad se puede pasar parámetros opcionales */\r\n additionalData?: Record<string, unknown>;\r\n /**\r\n * Determina si la columna admite ordenamiento.\r\n */\r\n allowSorting?: boolean;\r\n children?: React.ReactNode;\r\n /**\r\n * Cuando la columna admite ordenamiento, muestra\r\n * una flecha indicando el orden actual. Esta\r\n * propiedad establece si la flecha apunta hacia\r\n * arriba, abajo, o si la flecha es un guión.\r\n */\r\n currentSorting?: TResponsiveTableSortValue;\r\n /** *\r\n * Valor para decirle al server cuál columna se está ordenando\r\n */\r\n dataSortBy?: string;\r\n hidden?: boolean;\r\n /**\r\n * Normalmente, todas las columnas se van a mostrar\r\n * como renglones en el acordión, cuando este es\r\n * expandido.\r\n *\r\n * Si este flag es pasado en true, la columna\r\n * correspondiente no se va a mostrar en modo\r\n * responsivo.\r\n */\r\n hideFromAccordion?: boolean;\r\n /**\r\n * Elemento id del dom.\r\n */\r\n id?: string;\r\n /**\r\n * Es el texto que se mostrará en el cabezal.\r\n */\r\n label: string;\r\n maxWidth?: number | string;\r\n minWidth?: number | string;\r\n /**\r\n * El nombre de la columna debe ser único, se utiliza\r\n * para realizar la asosiación entre las columnas\r\n * y los filtros, así como con los eventos de orden.\r\n */\r\n name: string;\r\n /**\r\n * Si se pasa required: true, se pone un asterisco\r\n * rojo en el cabezal de la columna para señalar que\r\n * la columna es requerida.\r\n */\r\n required?: boolean;\r\n /**\r\n * Algunas columnas podrán mostrarse mediante un botón\r\n * \"mostrar más\", para ello deberán ser marcadas con\r\n * esta prop en true.\r\n */\r\n showAsAdditional?: boolean;\r\n /**\r\n * Cuando no se pasa esta propiedad en ninguna columna,\r\n * la aplicación encuentra la primera fila sin celdas\r\n * vacías y la utiliza como título.\r\n *\r\n * En cambio, si al menos una columna tiene este flag\r\n * en true, el título de cada fila del acordión estará\r\n * compuesto por los valores de estas columnas.\r\n */\r\n showInAccordionTitle?: boolean;\r\n /**\r\n * Elemento title de html (El tooltip).\r\n */\r\n title?: string;\r\n width?: number | string;\r\n} & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'rowSpan'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableStoreProps = {\r\n /**\r\n * Habla sobre el orden de las filas en función de\r\n * las columnas. Esta propiedad habilita/deshabilita\r\n * el ordenado de las columnas al hacer click en los\r\n * cabezales.\r\n *\r\n * La tabla admite ordenamiento por defecto, a menos\r\n * que esta prop venga en false. En caso de que se\r\n * pase false no importa qué digan las columnas,\r\n * el ordenamiento no estará habilitado.\r\n */\r\n allowSorting?: boolean;\r\n\r\n // Composition\r\n columns: TResponsiveTableColumn[];\r\n filters?: TApiaFilter[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rows: TResponsiveTableRow<any>[];\r\n\r\n /**\r\n * Por defecto, la tabla permitirá seleccionar\r\n * múltiples valores, a menos que esta prop venga\r\n * en false.\r\n */\r\n isMultiple?: boolean;\r\n\r\n label?: string;\r\n\r\n /**\r\n * Es normal que una tabla tenga paginación y que en cada página haya una\r\n * cantidad distinta de estados. Si se quiere mantener consistencia en el\r\n * tamaño de las páginas, es posible reservar un tamaño para una cantidad\r\n * definida de estados con este parámetro.\r\n */\r\n reserveColumnsForStates?: number;\r\n};\r\n\r\nexport type TResponsiveTableRowsSelectionEvent = {\r\n index: number;\r\n row: TResponsiveTableRow;\r\n}[];\r\n\r\nexport type TResponsiveTableContextProps = TResponsiveTableStoreProps &\r\n Pick<\r\n ISelectableState,\r\n 'allowRowsKeyboardSorting' | 'allowEdition' | 'allowSelection'\r\n > & {\r\n /**\r\n * Cuando se actualiza el array de rows de la tabla\r\n * desde las props del ResponsiveTableContext, se\r\n * reinicia el estado de selección de acuerdo a cómo\r\n * viene definido en el prop. **Si esta prop se pasa\r\n * en true**, este comportamiento es deshabilitado.\r\n */\r\n avoidReparseSelectionOnRowChange?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n /**\r\n * Permite redefinir el comportamiento de los breakpoints pasando un índice\r\n * personalizado. Cuando es pasado, deja de prestar atención al breakpoint\r\n * de la pantalla y comienza a prestar atención a este índice.\r\n */\r\n currentBreakPoint?: number;\r\n customLabels?: typeof defaultLabels;\r\n /**\r\n * Se puede utilizar este booleano para que la tabla\r\n * deshabilite las opciones de filtrado y ordenado mientras\r\n * se está ejecutando una acción ajax.\r\n */\r\n isLoading?: boolean;\r\n /**\r\n * La tabla debe tener un nombre único que será usado para\r\n * acceder a las propiedades de la misma en el store. En caso\r\n * de que no se pase ninguno, la tabla lo generará\r\n * automaticamente.\r\n */\r\n name?: string;\r\n\r\n // Filtering\r\n onFilterChange?: (ev: TApiaFilter) => void | Promise<boolean>;\r\n onFilterBlur?: (ev: TApiaFilter) => unknown;\r\n onFilterPressEnter?: (ev: TApiaFilter) => unknown;\r\n\r\n // Selection\r\n onChangeSelection?: (ev: TResponsiveTableRowsSelectionEvent) => unknown;\r\n /**\r\n * Este evento será llamado cada vez que el usuario esté\r\n * haciendo foco en la tabla, tenga una selección de\r\n * filas no vacía y presione la tecla Enter.\r\n */\r\n onSelectRows?: (\r\n ev: TResponsiveTableRowsSelectionEvent,\r\n focusedRowIndex: number,\r\n ) => unknown;\r\n\r\n // Sorting\r\n /**\r\n * Es llamado cada vez que el usuario hace click en el botón\r\n * del cabezal de la columna. **Importante:** la tabla no\r\n * realizará ninguna acción de ordenamiento, sino solamente\r\n * avisar de que el usuario desea que las filas sean ordenadas\r\n * por alguna columna en particular.\r\n */\r\n onSortChange?: (ev: TResponsiveTableSortChangeEvent) => unknown;\r\n variant?: string;\r\n };\r\n\r\n/**\r\n * Los callbacks del responsiveTable estarán\r\n * disponibles a través de un contexto, de\r\n * forma que cualquier elemento activo que\r\n * desee informar de un evento en particular\r\n * pueda hacerlo en forma sencilla.\r\n */\r\nexport type TResponsiveTableContext = TModify<\r\n Pick<\r\n TResponsiveTableContextProps,\r\n | 'currentBreakPoint'\r\n | 'name'\r\n | 'onChangeSelection'\r\n | 'onFilterBlur'\r\n | 'onFilterChange'\r\n | 'onFilterPressEnter'\r\n | 'onSelectRows'\r\n | 'onSortChange'\r\n | 'label'\r\n >,\r\n { labels: typeof defaultLabels; name: string }\r\n>;\r\n\r\ndeclare global {\r\n interface Window {\r\n FINDER_NO_DATA: string;\r\n }\r\n}\r\n\r\nexport const defaultLabels = {\r\n noRegisters: window.FINDER_NO_DATA,\r\n};\r\n"],"names":[],"mappings":"AA0ZO,MAAM,aAAgB,GAAA;AAAA,EAC3B,aAAa,MAAO,CAAA,cAAA;AACtB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/table",
3
- "version": "2.0.7",
3
+ "version": "2.0.8",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -13,11 +13,11 @@
13
13
  "libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true"
14
14
  },
15
15
  "dependencies": {
16
- "@apia/components": "^2.0.7",
17
- "@apia/icons": "^2.0.7",
18
- "@apia/store": "^2.0.7",
19
- "@apia/theme": "^2.0.7",
20
- "@apia/util": "^2.0.7"
16
+ "@apia/components": "^2.0.8",
17
+ "@apia/icons": "^2.0.8",
18
+ "@apia/store": "^2.0.8",
19
+ "@apia/theme": "^2.0.8",
20
+ "@apia/util": "^2.0.8"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/react": "^18.2.43",
@@ -34,5 +34,5 @@
34
34
  "access": "public",
35
35
  "registry": "https://registry.npmjs.org/"
36
36
  },
37
- "gitHead": "5ea5635f0ee4f38d2623fefd12210fe991ad80dc"
37
+ "gitHead": "7081b9e9d30efe218f23e835d29737aab3c89824"
38
38
  }