@elliemae/ds-data-table 3.35.0 → 3.36.0-next.1
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.
- package/dist/cjs/addons/Columns/ColumnDragHandle/ColumnDragHandle.js +1 -2
- package/dist/cjs/addons/Columns/ColumnDragHandle/ColumnDragHandle.js.map +1 -1
- package/dist/cjs/addons/Columns/ColumnExpand/ColumnExpand.js +6 -12
- package/dist/cjs/addons/Columns/ColumnExpand/ColumnExpand.js.map +1 -1
- package/dist/cjs/addons/Columns/ColumnSelectMultiple/ColumnSelectMultiple.js +3 -6
- package/dist/cjs/addons/Columns/ColumnSelectMultiple/ColumnSelectMultiple.js.map +1 -1
- package/dist/cjs/addons/Editables/TextEditableCell/TextEditableCell.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/CurrencyRangeFilter/index.js +1 -2
- package/dist/cjs/addons/Filters/Components/CurrencyRangeFilter/index.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/DateRangeFilter/index.js +1 -2
- package/dist/cjs/addons/Filters/Components/DateRangeFilter/index.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/DateSwitcherFilter/index.js +1 -2
- package/dist/cjs/addons/Filters/Components/DateSwitcherFilter/index.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/NumberRangeFilter/index.js +1 -2
- package/dist/cjs/addons/Filters/Components/NumberRangeFilter/index.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +1 -2
- package/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilter.js.map +1 -1
- package/dist/cjs/addons/Filters/Components/SingleDateFilter/index.js +2 -4
- package/dist/cjs/addons/Filters/Components/SingleDateFilter/index.js.map +1 -1
- package/dist/cjs/addons/Pagination/Pagination.js +1 -2
- package/dist/cjs/addons/Pagination/Pagination.js.map +1 -1
- package/dist/cjs/configs/usePaginationConfig.js +2 -4
- package/dist/cjs/configs/usePaginationConfig.js.map +1 -1
- package/dist/cjs/configs/useRowFlattenization.js.map +1 -1
- package/dist/cjs/configs/useTableColsWithAddons.js +10 -20
- package/dist/cjs/configs/useTableColsWithAddons.js.map +1 -1
- package/dist/cjs/configs/useTableResizeCb.js +1 -2
- package/dist/cjs/configs/useTableResizeCb.js.map +1 -1
- package/dist/cjs/exported-related/EditableCell.js.map +1 -1
- package/dist/cjs/exported-related/FilterBar/FilterBarDropdownMenu.js +2 -4
- package/dist/cjs/exported-related/FilterBar/FilterBarDropdownMenu.js.map +1 -1
- package/dist/cjs/exported-related/FilterPopover/index.js.map +1 -1
- package/dist/cjs/exported-related/FilterPopover/useGetFilterHandlers.js +3 -6
- package/dist/cjs/exported-related/FilterPopover/useGetFilterHandlers.js.map +1 -1
- package/dist/cjs/exported-related/Filters/currencyRangeFilterFn.js +10 -20
- package/dist/cjs/exported-related/Filters/currencyRangeFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/dateRangeFilterFn.js +6 -12
- package/dist/cjs/exported-related/Filters/dateRangeFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/dateSwitcherFilterFn.js +6 -12
- package/dist/cjs/exported-related/Filters/dateSwitcherFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/multiSelectFilterFn.js +3 -6
- package/dist/cjs/exported-related/Filters/multiSelectFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/numberRangeFilterFn.js +4 -8
- package/dist/cjs/exported-related/Filters/numberRangeFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/singleDateFilterFn.js +1 -2
- package/dist/cjs/exported-related/Filters/singleDateFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/singleSelectFilterFn.js +6 -12
- package/dist/cjs/exported-related/Filters/singleSelectFilterFn.js.map +1 -1
- package/dist/cjs/exported-related/Filters/utilities.js +2 -4
- package/dist/cjs/exported-related/Filters/utilities.js.map +1 -1
- package/dist/cjs/exported-related/RowRenderer/DefaultRowContentRenderer.js.map +1 -1
- package/dist/cjs/exported-related/RowRenderer/useRowRendererHandlers.js +4 -8
- package/dist/cjs/exported-related/RowRenderer/useRowRendererHandlers.js.map +1 -1
- package/dist/cjs/exported-related/RowRenderer/useRowRendererProperties.js +1 -2
- package/dist/cjs/exported-related/RowRenderer/useRowRendererProperties.js.map +1 -1
- package/dist/cjs/exported-related/Skeleton/SkeletonCell.js.map +1 -1
- package/dist/cjs/exported-related/Toolbar/Toolbar.js.map +1 -1
- package/dist/cjs/exported-related/groupBy.js +1 -2
- package/dist/cjs/exported-related/groupBy.js.map +1 -1
- package/dist/cjs/helpers/addCellData.js +3 -6
- package/dist/cjs/helpers/addCellData.js.map +1 -1
- package/dist/cjs/helpers/cellPadding.js +1 -2
- package/dist/cjs/helpers/cellPadding.js.map +1 -1
- package/dist/cjs/helpers/columnsToGrid.js +2 -4
- package/dist/cjs/helpers/columnsToGrid.js.map +1 -1
- package/dist/cjs/helpers/gridLayoutHelpers.js +7 -14
- package/dist/cjs/helpers/gridLayoutHelpers.js.map +1 -1
- package/dist/cjs/helpers/sizeToCss.js.map +1 -1
- package/dist/cjs/parts/Cells/Cell.js +1 -2
- package/dist/cjs/parts/Cells/Cell.js.map +1 -1
- package/dist/cjs/parts/Cells/CellFactory.js +8 -14
- package/dist/cjs/parts/Cells/CellFactory.js.map +2 -2
- package/dist/cjs/parts/Cells/index.js +19 -7
- package/dist/cjs/parts/Cells/index.js.map +2 -2
- package/dist/cjs/parts/Cells/useCellStyle.js +5 -3
- package/dist/cjs/parts/Cells/useCellStyle.js.map +2 -2
- package/dist/cjs/parts/DnDHandle.js +2 -4
- package/dist/cjs/parts/DnDHandle.js.map +1 -1
- package/dist/cjs/parts/DropIndicator.js.map +1 -1
- package/dist/cjs/parts/EmptyContent.js.map +1 -1
- package/dist/cjs/parts/FilterBar/DeprecatedDropdown.js +1 -2
- package/dist/cjs/parts/FilterBar/DeprecatedDropdown.js.map +1 -1
- package/dist/cjs/parts/FilterBar/FiltersBar.js +2 -4
- package/dist/cjs/parts/FilterBar/FiltersBar.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/DateRangePill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/DateRangePill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/DateSwitcherPill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/DateSwitcherPill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/MultiSelectPill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/MultiSelectPill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/NumberRangePill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/NumberRangePill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/SelectPill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/SelectPill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/components/SingleDatePill.js +2 -4
- package/dist/cjs/parts/FilterBar/components/SingleDatePill.js.map +1 -1
- package/dist/cjs/parts/FilterBar/styled.js.map +1 -1
- package/dist/cjs/parts/Filters/index.js.map +1 -1
- package/dist/cjs/parts/Headers/EmptyChildrenGroup.js.map +1 -1
- package/dist/cjs/parts/Headers/HeaderCell.js +2 -4
- package/dist/cjs/parts/Headers/HeaderCell.js.map +1 -1
- package/dist/cjs/parts/Headers/HeaderCellGroup.js.map +1 -1
- package/dist/cjs/parts/Headers/HeaderResizer.js +2 -4
- package/dist/cjs/parts/Headers/HeaderResizer.js.map +1 -1
- package/dist/cjs/parts/Headers/useHeaderCellConfig.js +2 -4
- package/dist/cjs/parts/Headers/useHeaderCellConfig.js.map +1 -1
- package/dist/cjs/parts/Headers/useHeaderCellHandlers.js +6 -12
- package/dist/cjs/parts/Headers/useHeaderCellHandlers.js.map +1 -1
- package/dist/cjs/parts/Headers/useHeaderResizer.js +5 -10
- package/dist/cjs/parts/Headers/useHeaderResizer.js.map +1 -1
- package/dist/cjs/parts/HoC/withConditionalDnDColumnContext.js +3 -6
- package/dist/cjs/parts/HoC/withConditionalDnDColumnContext.js.map +1 -1
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js +5 -10
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js.map +1 -1
- package/dist/cjs/parts/HoC/withDnDSortableColumnContext.js +1 -2
- package/dist/cjs/parts/HoC/withDnDSortableColumnContext.js.map +1 -1
- package/dist/cjs/parts/HoC/withDnDSortableRowContext.js +1 -2
- package/dist/cjs/parts/HoC/withDnDSortableRowContext.js.map +1 -1
- package/dist/cjs/parts/Row.js.map +1 -1
- package/dist/cjs/parts/RowVariants/index.js.map +1 -1
- package/dist/cjs/parts/Rows.js +1 -2
- package/dist/cjs/parts/Rows.js.map +1 -1
- package/dist/cjs/parts/SortableHeaderCell.js.map +1 -1
- package/dist/cjs/react-desc-prop-types.js.map +2 -2
- package/dist/cjs/styled.js +1 -2
- package/dist/cjs/styled.js.map +1 -1
- package/dist/cjs/tests/utils/index.js +1 -2
- package/dist/cjs/tests/utils/index.js.map +1 -1
- package/dist/esm/addons/Columns/ColumnDragHandle/ColumnDragHandle.js +1 -2
- package/dist/esm/addons/Columns/ColumnDragHandle/ColumnDragHandle.js.map +1 -1
- package/dist/esm/addons/Columns/ColumnExpand/ColumnExpand.js +6 -12
- package/dist/esm/addons/Columns/ColumnExpand/ColumnExpand.js.map +1 -1
- package/dist/esm/addons/Columns/ColumnSelectMultiple/ColumnSelectMultiple.js +3 -6
- package/dist/esm/addons/Columns/ColumnSelectMultiple/ColumnSelectMultiple.js.map +1 -1
- package/dist/esm/addons/Editables/TextEditableCell/TextEditableCell.js.map +1 -1
- package/dist/esm/addons/Filters/Components/CurrencyRangeFilter/index.js +1 -2
- package/dist/esm/addons/Filters/Components/CurrencyRangeFilter/index.js.map +1 -1
- package/dist/esm/addons/Filters/Components/DateRangeFilter/index.js +1 -2
- package/dist/esm/addons/Filters/Components/DateRangeFilter/index.js.map +1 -1
- package/dist/esm/addons/Filters/Components/DateSwitcherFilter/index.js +1 -2
- package/dist/esm/addons/Filters/Components/DateSwitcherFilter/index.js.map +1 -1
- package/dist/esm/addons/Filters/Components/NumberRangeFilter/index.js +1 -2
- package/dist/esm/addons/Filters/Components/NumberRangeFilter/index.js.map +1 -1
- package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +1 -2
- package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilter.js.map +1 -1
- package/dist/esm/addons/Filters/Components/SingleDateFilter/index.js +2 -4
- package/dist/esm/addons/Filters/Components/SingleDateFilter/index.js.map +1 -1
- package/dist/esm/addons/Pagination/Pagination.js +1 -2
- package/dist/esm/addons/Pagination/Pagination.js.map +1 -1
- package/dist/esm/configs/usePaginationConfig.js +2 -4
- package/dist/esm/configs/usePaginationConfig.js.map +1 -1
- package/dist/esm/configs/useRowFlattenization.js.map +1 -1
- package/dist/esm/configs/useTableColsWithAddons.js +10 -20
- package/dist/esm/configs/useTableColsWithAddons.js.map +1 -1
- package/dist/esm/configs/useTableResizeCb.js +1 -2
- package/dist/esm/configs/useTableResizeCb.js.map +1 -1
- package/dist/esm/exported-related/EditableCell.js.map +1 -1
- package/dist/esm/exported-related/FilterBar/FilterBarDropdownMenu.js +2 -4
- package/dist/esm/exported-related/FilterBar/FilterBarDropdownMenu.js.map +1 -1
- package/dist/esm/exported-related/FilterPopover/index.js.map +1 -1
- package/dist/esm/exported-related/FilterPopover/useGetFilterHandlers.js +3 -6
- package/dist/esm/exported-related/FilterPopover/useGetFilterHandlers.js.map +1 -1
- package/dist/esm/exported-related/Filters/currencyRangeFilterFn.js +10 -20
- package/dist/esm/exported-related/Filters/currencyRangeFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/dateRangeFilterFn.js +6 -12
- package/dist/esm/exported-related/Filters/dateRangeFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/dateSwitcherFilterFn.js +6 -12
- package/dist/esm/exported-related/Filters/dateSwitcherFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/multiSelectFilterFn.js +3 -6
- package/dist/esm/exported-related/Filters/multiSelectFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/numberRangeFilterFn.js +4 -8
- package/dist/esm/exported-related/Filters/numberRangeFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/singleDateFilterFn.js +1 -2
- package/dist/esm/exported-related/Filters/singleDateFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/singleSelectFilterFn.js +6 -12
- package/dist/esm/exported-related/Filters/singleSelectFilterFn.js.map +1 -1
- package/dist/esm/exported-related/Filters/utilities.js +2 -4
- package/dist/esm/exported-related/Filters/utilities.js.map +1 -1
- package/dist/esm/exported-related/RowRenderer/DefaultRowContentRenderer.js.map +1 -1
- package/dist/esm/exported-related/RowRenderer/useRowRendererHandlers.js +4 -8
- package/dist/esm/exported-related/RowRenderer/useRowRendererHandlers.js.map +1 -1
- package/dist/esm/exported-related/RowRenderer/useRowRendererProperties.js +1 -2
- package/dist/esm/exported-related/RowRenderer/useRowRendererProperties.js.map +1 -1
- package/dist/esm/exported-related/Skeleton/SkeletonCell.js.map +1 -1
- package/dist/esm/exported-related/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/exported-related/groupBy.js +1 -2
- package/dist/esm/exported-related/groupBy.js.map +1 -1
- package/dist/esm/helpers/addCellData.js +3 -6
- package/dist/esm/helpers/addCellData.js.map +1 -1
- package/dist/esm/helpers/cellPadding.js +1 -2
- package/dist/esm/helpers/cellPadding.js.map +1 -1
- package/dist/esm/helpers/columnsToGrid.js +2 -4
- package/dist/esm/helpers/columnsToGrid.js.map +1 -1
- package/dist/esm/helpers/gridLayoutHelpers.js +7 -14
- package/dist/esm/helpers/gridLayoutHelpers.js.map +1 -1
- package/dist/esm/helpers/sizeToCss.js.map +1 -1
- package/dist/esm/parts/Cells/Cell.js +1 -2
- package/dist/esm/parts/Cells/Cell.js.map +1 -1
- package/dist/esm/parts/Cells/CellFactory.js +9 -15
- package/dist/esm/parts/Cells/CellFactory.js.map +2 -2
- package/dist/esm/parts/Cells/index.js +19 -7
- package/dist/esm/parts/Cells/index.js.map +2 -2
- package/dist/esm/parts/Cells/useCellStyle.js +5 -3
- package/dist/esm/parts/Cells/useCellStyle.js.map +2 -2
- package/dist/esm/parts/DnDHandle.js +2 -4
- package/dist/esm/parts/DnDHandle.js.map +1 -1
- package/dist/esm/parts/DropIndicator.js.map +1 -1
- package/dist/esm/parts/EmptyContent.js.map +1 -1
- package/dist/esm/parts/FilterBar/DeprecatedDropdown.js +1 -2
- package/dist/esm/parts/FilterBar/DeprecatedDropdown.js.map +1 -1
- package/dist/esm/parts/FilterBar/FiltersBar.js +2 -4
- package/dist/esm/parts/FilterBar/FiltersBar.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/DateRangePill.js +2 -4
- package/dist/esm/parts/FilterBar/components/DateRangePill.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/DateSwitcherPill.js +2 -4
- package/dist/esm/parts/FilterBar/components/DateSwitcherPill.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/MultiSelectPill.js +2 -4
- package/dist/esm/parts/FilterBar/components/MultiSelectPill.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/NumberRangePill.js +2 -4
- package/dist/esm/parts/FilterBar/components/NumberRangePill.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/SelectPill.js +2 -4
- package/dist/esm/parts/FilterBar/components/SelectPill.js.map +1 -1
- package/dist/esm/parts/FilterBar/components/SingleDatePill.js +2 -4
- package/dist/esm/parts/FilterBar/components/SingleDatePill.js.map +1 -1
- package/dist/esm/parts/FilterBar/styled.js.map +1 -1
- package/dist/esm/parts/Filters/index.js.map +1 -1
- package/dist/esm/parts/Headers/EmptyChildrenGroup.js.map +1 -1
- package/dist/esm/parts/Headers/HeaderCell.js +2 -4
- package/dist/esm/parts/Headers/HeaderCell.js.map +1 -1
- package/dist/esm/parts/Headers/HeaderCellGroup.js.map +1 -1
- package/dist/esm/parts/Headers/HeaderResizer.js +2 -4
- package/dist/esm/parts/Headers/HeaderResizer.js.map +1 -1
- package/dist/esm/parts/Headers/useHeaderCellConfig.js +2 -4
- package/dist/esm/parts/Headers/useHeaderCellConfig.js.map +1 -1
- package/dist/esm/parts/Headers/useHeaderCellHandlers.js +6 -12
- package/dist/esm/parts/Headers/useHeaderCellHandlers.js.map +1 -1
- package/dist/esm/parts/Headers/useHeaderResizer.js +5 -10
- package/dist/esm/parts/Headers/useHeaderResizer.js.map +1 -1
- package/dist/esm/parts/HoC/withConditionalDnDColumnContext.js +3 -6
- package/dist/esm/parts/HoC/withConditionalDnDColumnContext.js.map +1 -1
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +5 -10
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +1 -1
- package/dist/esm/parts/HoC/withDnDSortableColumnContext.js +1 -2
- package/dist/esm/parts/HoC/withDnDSortableColumnContext.js.map +1 -1
- package/dist/esm/parts/HoC/withDnDSortableRowContext.js +1 -2
- package/dist/esm/parts/HoC/withDnDSortableRowContext.js.map +1 -1
- package/dist/esm/parts/Row.js.map +1 -1
- package/dist/esm/parts/RowVariants/index.js.map +1 -1
- package/dist/esm/parts/Rows.js +1 -2
- package/dist/esm/parts/Rows.js.map +1 -1
- package/dist/esm/parts/SortableHeaderCell.js.map +1 -1
- package/dist/esm/react-desc-prop-types.js.map +2 -2
- package/dist/esm/styled.js +1 -2
- package/dist/esm/styled.js.map +1 -1
- package/dist/esm/tests/utils/index.js +1 -2
- package/dist/esm/tests/utils/index.js.map +1 -1
- package/dist/types/exported-related/RowRenderer/useRowRendererProperties.d.ts +1 -6
- package/dist/types/helpers/cellPadding.d.ts +1 -1
- package/dist/types/parts/Cells/CellFactory.d.ts +1 -0
- package/dist/types/parts/Cells/useCellStyle.d.ts +1 -1
- package/dist/types/parts/SortableHeaderCell.d.ts +3 -3
- package/dist/types/react-desc-prop-types.d.ts +1 -0
- package/dist/types/tests/a11y/number-of-cells-and-columnheader.test.d.ts +1 -0
- package/package.json +29 -29
|
@@ -26,10 +26,8 @@ const usePaginationConfig = (props, flattenedData) => {
|
|
|
26
26
|
pageDetailsTitle = ""
|
|
27
27
|
} = pagination || noPagination;
|
|
28
28
|
const page = useMemo(() => {
|
|
29
|
-
if (!hasPagination || !pagination)
|
|
30
|
-
|
|
31
|
-
if (dataIsPage)
|
|
32
|
-
return flattenedData;
|
|
29
|
+
if (!hasPagination || !pagination) return null;
|
|
30
|
+
if (dataIsPage) return flattenedData;
|
|
33
31
|
return flattenedData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize);
|
|
34
32
|
}, [hasPagination, pagination, dataIsPage, flattenedData, pageIndex, pageSize]);
|
|
35
33
|
const paginationHelpers = useMemo(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/configs/usePaginationConfig.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useMemo } from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst noPagination: Record<string, never> = {};\n\nconst emptyFunc = () => null;\n\nexport const usePaginationConfig = (\n props: DSDataTableT.InternalProps,\n flattenedData: DSDataTableT.InternalRow[],\n): [DSDataTableT.InternalRow[] | null, DSDataTableT.Pagination] => {\n const { pagination, Pagination } = props;\n\n const hasPagination = Boolean(pagination || Pagination);\n\n // Set default values\n const {\n pageIndex = 1,\n canPreviousPage = true,\n canNextPage = true,\n pageSize = 10,\n perPageOptions = [10],\n onPageSizeChange = emptyFunc,\n onPreviousPage = emptyFunc,\n onNextPage = emptyFunc,\n onPageChange = emptyFunc,\n pageCount = Math.ceil(flattenedData.length / pageSize),\n isLoadingPageCount = false,\n dataIsPage = false,\n perPageStep = 5,\n minPerPage = 0,\n maxPerPage = 100,\n showPerPageSelector = true,\n pageDetails = [],\n pageDetailsTitle = '',\n } = pagination || noPagination; // pagination can be false\n\n // Get the needed page\n const page = useMemo(() => {\n if (!hasPagination || !pagination) return null;\n if (dataIsPage) return flattenedData;\n return flattenedData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize);\n }, [hasPagination, pagination, dataIsPage, flattenedData, pageIndex, pageSize]);\n\n const paginationHelpers = useMemo(\n () => ({\n hasPagination,\n pageIndex,\n canPreviousPage,\n canNextPage,\n pageSize,\n perPageOptions,\n onPageSizeChange,\n onPreviousPage,\n onNextPage,\n onPageChange,\n pageCount,\n isLoadingPageCount: isLoadingPageCount,\n perPageStep,\n minPerPage,\n maxPerPage,\n showPerPageSelector,\n pageDetails,\n pageDetailsTitle,\n }),\n [\n hasPagination,\n pageIndex,\n canPreviousPage,\n canNextPage,\n pageSize,\n perPageOptions,\n onPageSizeChange,\n onPreviousPage,\n onNextPage,\n onPageChange,\n pageCount,\n isLoadingPageCount,\n perPageStep,\n minPerPage,\n maxPerPage,\n showPerPageSelector,\n pageDetails,\n pageDetailsTitle,\n ],\n );\n return [page, paginationHelpers];\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,eAAe;AAGxB,MAAM,eAAsC,CAAC;AAE7C,MAAM,YAAY,MAAM;AAEjB,MAAM,sBAAsB,CACjC,OACA,kBACiE;AACjE,QAAM,EAAE,YAAY,WAAW,IAAI;AAEnC,QAAM,gBAAgB,QAAQ,cAAc,UAAU;AAGtD,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,iBAAiB,CAAC,EAAE;AAAA,IACpB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY,KAAK,KAAK,cAAc,SAAS,QAAQ;AAAA,IACrD,qBAAqB;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,cAAc,CAAC;AAAA,IACf,mBAAmB;AAAA,EACrB,IAAI,cAAc;AAGlB,QAAM,OAAO,QAAQ,MAAM;AACzB,QAAI,CAAC,iBAAiB,CAAC
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,eAAe;AAGxB,MAAM,eAAsC,CAAC;AAE7C,MAAM,YAAY,MAAM;AAEjB,MAAM,sBAAsB,CACjC,OACA,kBACiE;AACjE,QAAM,EAAE,YAAY,WAAW,IAAI;AAEnC,QAAM,gBAAgB,QAAQ,cAAc,UAAU;AAGtD,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,iBAAiB,CAAC,EAAE;AAAA,IACpB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY,KAAK,KAAK,cAAc,SAAS,QAAQ;AAAA,IACrD,qBAAqB;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,cAAc,CAAC;AAAA,IACf,mBAAmB;AAAA,EACrB,IAAI,cAAc;AAGlB,QAAM,OAAO,QAAQ,MAAM;AACzB,QAAI,CAAC,iBAAiB,CAAC,WAAY,QAAO;AAC1C,QAAI,WAAY,QAAO;AACvB,WAAO,cAAc,OAAO,YAAY,KAAK,UAAU,YAAY,QAAQ;AAAA,EAC7E,GAAG,CAAC,eAAe,YAAY,YAAY,eAAe,WAAW,QAAQ,CAAC;AAE9E,QAAM,oBAAoB;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,MAAM,iBAAiB;AACjC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/configs/useRowFlattenization.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nimport { cloneDeep } from 'lodash';\nimport { useMemo } from 'react';\nimport { getIdFromUniqueRowAccessor } from '../helpers/getIdFromUniqueRowAccessor.js';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst emptyObject = {};\n\nconst trueReturner = new Proxy(\n {},\n {\n get: () => true,\n },\n);\n\nconst flatten = (\n data: DSDataTableT.Row[],\n expandedRows: Record<string, boolean>,\n uniqueRowAccessor: DSDataTableT.UniqueRowAccessorType,\n maxDepth: number,\n shouldContinueWalking: Record<string, boolean>,\n): DSDataTableT.InternalRow[] => {\n const result: DSDataTableT.InternalRow[] = [];\n const doit = (\n row: DSDataTableT.Row,\n index = 0,\n parent: DSDataTableT.InternalRow | null = null,\n parentId: string | null = null,\n parentIndex: number | null = null,\n depth = 0,\n ) => {\n const id = (parentId !== null ? `${parentId}.` : '') + index.toString();\n\n const uid = getIdFromUniqueRowAccessor(uniqueRowAccessor, {\n id,\n original: row ?? {},\n });\n\n const isExpanded = expandedRows[uid];\n\n const rowToPush: DSDataTableT.InternalRow = {\n id,\n uid,\n index,\n realIndex: result.length,\n parent,\n parentId,\n parentIndex,\n depth,\n isExpanded,\n subRows: row?.subRows ?? [],\n childrenCount: row?.subRows?.length ?? 0,\n original: row ?? {},\n cells: [],\n };\n\n result.push(rowToPush);\n\n // If we have subrows and we are expanded\n if (row?.subRows && shouldContinueWalking[uid] && depth <= maxDepth) {\n row.subRows.forEach((subRow: DSDataTableT.Row, i: number) =>\n doit(subRow, i, rowToPush, uid, rowToPush.realIndex, depth + 1),\n );\n }\n };\n\n data.forEach((row, i) => doit(row, i));\n return result;\n};\n\nexport const useRowFlattenization = (\n props: DSDataTableT.InternalProps,\n): [DSDataTableT.InternalRow[], DSDataTableT.InternalRow[]] => {\n const { data } = props;\n\n const clonnedData = useMemo(() => cloneDeep(data), [data]);\n\n const expandedRows = props.isExpandable ? props.expandedRows ?? emptyObject : emptyObject;\n\n const flattenedData = useMemo(\n () => flatten(clonnedData, expandedRows, props.uniqueRowAccessor, 0, expandedRows),\n [clonnedData, expandedRows, props.uniqueRowAccessor],\n );\n\n const allDataFlattened = useMemo(\n () => flatten(clonnedData, expandedRows, props.uniqueRowAccessor, Infinity, trueReturner),\n [clonnedData, expandedRows, props.uniqueRowAccessor],\n );\n\n return [flattenedData, allDataFlattened];\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,kCAAkC;AAG3C,MAAM,cAAc,CAAC;AAErB,MAAM,eAAe,IAAI;AAAA,EACvB,CAAC;AAAA,EACD;AAAA,IACE,KAAK,MAAM;AAAA,EACb;AACF;AAEA,MAAM,UAAU,CACd,MACA,cACA,mBACA,UACA,0BAC+B;AAC/B,QAAM,SAAqC,CAAC;AAC5C,QAAM,OAAO,CACX,KACA,QAAQ,GACR,SAA0C,MAC1C,WAA0B,MAC1B,cAA6B,MAC7B,QAAQ,MACL;AACH,UAAM,MAAM,aAAa,OAAO,GAAG,
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,kCAAkC;AAG3C,MAAM,cAAc,CAAC;AAErB,MAAM,eAAe,IAAI;AAAA,EACvB,CAAC;AAAA,EACD;AAAA,IACE,KAAK,MAAM;AAAA,EACb;AACF;AAEA,MAAM,UAAU,CACd,MACA,cACA,mBACA,UACA,0BAC+B;AAC/B,QAAM,SAAqC,CAAC;AAC5C,QAAM,OAAO,CACX,KACA,QAAQ,GACR,SAA0C,MAC1C,WAA0B,MAC1B,cAA6B,MAC7B,QAAQ,MACL;AACH,UAAM,MAAM,aAAa,OAAO,GAAG,QAAQ,MAAM,MAAM,MAAM,SAAS;AAEtE,UAAM,MAAM,2BAA2B,mBAAmB;AAAA,MACxD;AAAA,MACA,UAAU,OAAO,CAAC;AAAA,IACpB,CAAC;AAED,UAAM,aAAa,aAAa,GAAG;AAEnC,UAAM,YAAsC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,KAAK,WAAW,CAAC;AAAA,MAC1B,eAAe,KAAK,SAAS,UAAU;AAAA,MACvC,UAAU,OAAO,CAAC;AAAA,MAClB,OAAO,CAAC;AAAA,IACV;AAEA,WAAO,KAAK,SAAS;AAGrB,QAAI,KAAK,WAAW,sBAAsB,GAAG,KAAK,SAAS,UAAU;AACnE,UAAI,QAAQ;AAAA,QAAQ,CAAC,QAA0B,MAC7C,KAAK,QAAQ,GAAG,WAAW,KAAK,UAAU,WAAW,QAAQ,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAEA,OAAK,QAAQ,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC;AACrC,SAAO;AACT;AAEO,MAAM,uBAAuB,CAClC,UAC6D;AAC7D,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc,QAAQ,MAAM,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC;AAEzD,QAAM,eAAe,MAAM,eAAe,MAAM,gBAAgB,cAAc;AAE9E,QAAM,gBAAgB;AAAA,IACpB,MAAM,QAAQ,aAAa,cAAc,MAAM,mBAAmB,GAAG,YAAY;AAAA,IACjF,CAAC,aAAa,cAAc,MAAM,iBAAiB;AAAA,EACrD;AAEA,QAAM,mBAAmB;AAAA,IACvB,MAAM,QAAQ,aAAa,cAAc,MAAM,mBAAmB,UAAU,YAAY;AAAA,IACxF,CAAC,aAAa,cAAc,MAAM,iBAAiB;AAAA,EACrD;AAEA,SAAO,CAAC,eAAe,gBAAgB;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,10 +10,8 @@ import {
|
|
|
10
10
|
const augmentColumns = (columns) => {
|
|
11
11
|
const augmentColumn = (column, index, parentId = null, depth = 0) => {
|
|
12
12
|
let id = `column${index}`;
|
|
13
|
-
if (typeof column.Header === "string")
|
|
14
|
-
|
|
15
|
-
if (typeof column.accessor === "string")
|
|
16
|
-
id = column.accessor;
|
|
13
|
+
if (typeof column.Header === "string") id = column.Header;
|
|
14
|
+
if (typeof column.accessor === "string") id = column.accessor;
|
|
17
15
|
const { columns: childColumns, ...restOfColumn } = column;
|
|
18
16
|
const newCol = {
|
|
19
17
|
id,
|
|
@@ -22,8 +20,7 @@ const augmentColumns = (columns) => {
|
|
|
22
20
|
...restOfColumn,
|
|
23
21
|
ref: createRef()
|
|
24
22
|
};
|
|
25
|
-
if (childColumns)
|
|
26
|
-
newCol.columns = childColumns.map((col, i) => augmentColumn(col, i, id, depth + 1));
|
|
23
|
+
if (childColumns) newCol.columns = childColumns.map((col, i) => augmentColumn(col, i, id, depth + 1));
|
|
27
24
|
return newCol;
|
|
28
25
|
};
|
|
29
26
|
return columns.map((col, index) => augmentColumn(col, index));
|
|
@@ -43,25 +40,18 @@ const useTableColsWithAddons = ({
|
|
|
43
40
|
const columnsWithAddons = [...augmentColumns(columns)];
|
|
44
41
|
const colsToPrepend = [];
|
|
45
42
|
const colsToAppend = [];
|
|
46
|
-
if (isExpandable)
|
|
47
|
-
colsToPrepend.push(expandRowColumn);
|
|
43
|
+
if (isExpandable) colsToPrepend.push(expandRowColumn);
|
|
48
44
|
if (withSelection && !noSelectionColumn) {
|
|
49
|
-
if (selectSingle)
|
|
50
|
-
|
|
51
|
-
else
|
|
52
|
-
colsToPrepend.push(multiSelectColumn);
|
|
45
|
+
if (selectSingle) colsToPrepend.push(singleSelectColumn);
|
|
46
|
+
else colsToPrepend.push(multiSelectColumn);
|
|
53
47
|
}
|
|
54
|
-
if (dragAndDropRows)
|
|
55
|
-
|
|
56
|
-
if (renderRowActions)
|
|
57
|
-
colsToAppend.push(actionColumn(renderRowActions));
|
|
48
|
+
if (dragAndDropRows) colsToPrepend.push(dragHandleColumn);
|
|
49
|
+
if (renderRowActions) colsToAppend.push(actionColumn(renderRowActions));
|
|
58
50
|
colsToPrepend.forEach((col) => {
|
|
59
|
-
if (!isColumnInArrayOfColumns(columnsWithAddons, col))
|
|
60
|
-
columnsWithAddons.unshift(col);
|
|
51
|
+
if (!isColumnInArrayOfColumns(columnsWithAddons, col)) columnsWithAddons.unshift(col);
|
|
61
52
|
});
|
|
62
53
|
colsToAppend.forEach((col) => {
|
|
63
|
-
if (!isColumnInArrayOfColumns(columnsWithAddons, col))
|
|
64
|
-
columnsWithAddons.push(col);
|
|
54
|
+
if (!isColumnInArrayOfColumns(columnsWithAddons, col)) columnsWithAddons.push(col);
|
|
65
55
|
});
|
|
66
56
|
return columnsWithAddons;
|
|
67
57
|
}, [columns, isExpandable, withSelection, noSelectionColumn, dragAndDropRows, renderRowActions, selectSingle]);
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/configs/useTableColsWithAddons.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nimport { createRef, useMemo } from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\nimport {\n dragHandleColumn,\n expandRowColumn,\n actionColumn,\n singleSelectColumn,\n multiSelectColumn,\n} from '../addons/Columns/index.js';\n\ntype UseTableColsWithAddonsType = (config: DSDataTableT.InternalProps) => DSDataTableT.InternalColumn[];\n\nconst augmentColumns = (columns: DSDataTableT.Column[]): DSDataTableT.InternalColumn[] => {\n const augmentColumn = (\n column: DSDataTableT.Column,\n index: number,\n parentId: string | null = null,\n depth = 0,\n ): DSDataTableT.InternalColumn => {\n let id = `column${index}`;\n if (typeof column.Header === 'string') id = column.Header;\n if (typeof column.accessor === 'string') id = column.accessor;\n const { columns: childColumns, ...restOfColumn } = column;\n const newCol: DSDataTableT.InternalColumn = {\n id,\n parentId,\n depth,\n ...restOfColumn,\n ref: createRef<HTMLTableColElement>() as React.MutableRefObject<HTMLTableColElement>,\n };\n if (childColumns) newCol.columns = childColumns.map((col, i) => augmentColumn(col, i, id, depth + 1));\n return newCol;\n };\n return columns.map((col, index) => augmentColumn(col, index));\n};\n\nconst isColumnInArrayOfColumns = (columns: DSDataTableT.Column[], col: DSDataTableT.Column) =>\n columns.some((column) => column.id === col.id);\n\nconst useTableColsWithAddons: UseTableColsWithAddonsType = ({\n columns,\n renderRowActions,\n isExpandable,\n selectSingle,\n selection,\n dragAndDropRows,\n noSelectionColumn,\n}) => {\n const withSelection = Boolean(selection);\n\n return useMemo(() => {\n const columnsWithAddons = [...augmentColumns(columns)];\n\n // Columns to be prepended\n const colsToPrepend: DSDataTableT.InternalColumn[] = [];\n // Columns to be appended\n const colsToAppend: DSDataTableT.InternalColumn[] = [];\n\n if (isExpandable) colsToPrepend.push(expandRowColumn);\n if (withSelection && !noSelectionColumn) {\n if (selectSingle) colsToPrepend.push(singleSelectColumn as unknown as DSDataTableT.InternalColumn);\n else colsToPrepend.push(multiSelectColumn as unknown as DSDataTableT.InternalColumn);\n }\n if (dragAndDropRows) colsToPrepend.push(dragHandleColumn as unknown as DSDataTableT.InternalColumn);\n if (renderRowActions) colsToAppend.push(actionColumn(renderRowActions));\n\n // Prepend or append all the columns that were not extended by the user\n colsToPrepend.forEach((col) => {\n if (!isColumnInArrayOfColumns(columnsWithAddons, col)) columnsWithAddons.unshift(col);\n });\n colsToAppend.forEach((col) => {\n if (!isColumnInArrayOfColumns(columnsWithAddons, col)) columnsWithAddons.push(col);\n });\n\n return columnsWithAddons;\n }, [columns, isExpandable, withSelection, noSelectionColumn, dragAndDropRows, renderRowActions, selectSingle]);\n};\n\nexport { useTableColsWithAddons };\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,WAAW,eAAe;AAEnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,MAAM,iBAAiB,CAAC,YAAkE;AACxF,QAAM,gBAAgB,CACpB,QACA,OACA,WAA0B,MAC1B,QAAQ,MACwB;AAChC,QAAI,KAAK,SAAS;
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,WAAW,eAAe;AAEnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,MAAM,iBAAiB,CAAC,YAAkE;AACxF,QAAM,gBAAgB,CACpB,QACA,OACA,WAA0B,MAC1B,QAAQ,MACwB;AAChC,QAAI,KAAK,SAAS,KAAK;AACvB,QAAI,OAAO,OAAO,WAAW,SAAU,MAAK,OAAO;AACnD,QAAI,OAAO,OAAO,aAAa,SAAU,MAAK,OAAO;AACrD,UAAM,EAAE,SAAS,cAAc,GAAG,aAAa,IAAI;AACnD,UAAM,SAAsC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH,KAAK,UAA+B;AAAA,IACtC;AACA,QAAI,aAAc,QAAO,UAAU,aAAa,IAAI,CAAC,KAAK,MAAM,cAAc,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC;AACpG,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,IAAI,CAAC,KAAK,UAAU,cAAc,KAAK,KAAK,CAAC;AAC9D;AAEA,MAAM,2BAA2B,CAAC,SAAgC,QAChE,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,IAAI,EAAE;AAE/C,MAAM,yBAAqD,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,gBAAgB,QAAQ,SAAS;AAEvC,SAAO,QAAQ,MAAM;AACnB,UAAM,oBAAoB,CAAC,GAAG,eAAe,OAAO,CAAC;AAGrD,UAAM,gBAA+C,CAAC;AAEtD,UAAM,eAA8C,CAAC;AAErD,QAAI,aAAc,eAAc,KAAK,eAAe;AACpD,QAAI,iBAAiB,CAAC,mBAAmB;AACvC,UAAI,aAAc,eAAc,KAAK,kBAA4D;AAAA,UAC5F,eAAc,KAAK,iBAA2D;AAAA,IACrF;AACA,QAAI,gBAAiB,eAAc,KAAK,gBAA0D;AAClG,QAAI,iBAAkB,cAAa,KAAK,aAAa,gBAAgB,CAAC;AAGtE,kBAAc,QAAQ,CAAC,QAAQ;AAC7B,UAAI,CAAC,yBAAyB,mBAAmB,GAAG,EAAG,mBAAkB,QAAQ,GAAG;AAAA,IACtF,CAAC;AACD,iBAAa,QAAQ,CAAC,QAAQ;AAC5B,UAAI,CAAC,yBAAyB,mBAAmB,GAAG,EAAG,mBAAkB,KAAK,GAAG;AAAA,IACnF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,cAAc,eAAe,mBAAmB,iBAAiB,kBAAkB,YAAY,CAAC;AAC/G;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/configs/useTableResizeCb.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { useNativeResizeObserver } from '@elliemae/ds-utilities';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\n// type for the second parameter of useNativeResizeObserver\ntype NativeResizeObserverCB = Parameters<typeof useNativeResizeObserver>[1];\n\n// type declaration for the custom hook\nexport type UseTableResizeCb = (config: {\n virtualListRef: React.RefObject<HTMLElement>;\n propsWithDefault: DSDataTableT.InternalProps;\n}) => void;\n\nexport const useTableResizeCb: UseTableResizeCb = (config) => {\n const { virtualListRef, propsWithDefault } = config;\n const { onTableResize } = propsWithDefault;\n\n const handleResize: NativeResizeObserverCB = React.useCallback(\n (entry) => {\n if (onTableResize) onTableResize(entry);\n },\n [onTableResize],\n );\n\n useNativeResizeObserver(virtualListRef.current, handleResize);\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAClB,SAAS,+BAA+B;AAYjC,MAAM,mBAAqC,CAAC,WAAW;AAC5D,QAAM,EAAE,gBAAgB,iBAAiB,IAAI;AAC7C,QAAM,EAAE,cAAc,IAAI;AAE1B,QAAM,eAAuCA,OAAM;AAAA,IACjD,CAAC,UAAU;AACT,UAAI
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAClB,SAAS,+BAA+B;AAYjC,MAAM,mBAAqC,CAAC,WAAW;AAC5D,QAAM,EAAE,gBAAgB,iBAAiB,IAAI;AAC7C,QAAM,EAAE,cAAc,IAAI;AAE1B,QAAM,eAAuCA,OAAM;AAAA,IACjD,CAAC,UAAU;AACT,UAAI,cAAe,eAAc,KAAK;AAAA,IACxC;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,0BAAwB,eAAe,SAAS,YAAY;AAC9D;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/exported-related/EditableCell.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useCallback, useLayoutEffect } from 'react';\nimport { StyledPencilIcon, StyledEditableContainer } from '../styled.js';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\nimport { usePropsStore } from '../configs/useStore/useStore.js';\n\nexport const EditableCell: React.ComponentType<{\n StandardRender: JSX.Element;\n EditableRenderer: JSX.Element;\n cell: DSDataTableT.Cell<HTMLDivElement>;\n isRowSelected?: boolean;\n}> = (props) => {\n const { StandardRender, EditableRenderer, cell, isRowSelected } = props;\n const domIdAffix = usePropsStore((state) => state.domIdAffix);\n const virtualListHelpers = usePropsStore((state) => state.virtualListHelpers);\n const getOwnerProps = usePropsStore((store) => store.get);\n\n const [isEditing, setIsEditing] = useState(false);\n const [lastIsEditing, setLastIsEditing] = useState(false);\n // When an editable cell is switched on-off, we recalculate the height of the rows\n useLayoutEffect(() => {\n if (isEditing !== lastIsEditing) {\n virtualListHelpers.measure();\n setLastIsEditing(isEditing);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditing]);\n\n const handleCellClick = useCallback(\n (e: React.MouseEvent | React.KeyboardEvent) => {\n if (!isEditing) {\n e.stopPropagation();\n setIsEditing(true);\n }\n },\n [isEditing],\n );\n\n const handleOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (isEditing) {\n e.stopPropagation();\n if (['Enter', 'Escape'].includes(e.code)) {\n setIsEditing(false);\n }\n } else if (['Enter', 'Space'].includes(e.code)) {\n handleCellClick(e);\n }\n },\n [isEditing, handleCellClick, setIsEditing],\n );\n\n const handleOnBlur = useCallback(\n (event: React.FocusEvent) => {\n if (isEditing && !event.currentTarget?.contains(event.relatedTarget)) {\n // Not triggered when swapping focus between children\n setIsEditing(false);\n }\n },\n [isEditing],\n );\n const cols = !isEditing ? ['auto', 'min-content'] : ['auto'];\n return (\n <StyledEditableContainer\n cols={cols}\n tabIndex={isRowSelected && !isEditing ? 0 : -1}\n innerRef={cell.ref}\n onClick={handleCellClick}\n onKeyDown={handleOnKeyDown}\n onBlur={handleOnBlur}\n shouldDisplayEditIcon={cell.column.alwaysDisplayEditIcon}\n role=\"group\"\n aria-labelledby={isEditing ? undefined : cell.id}\n getOwnerProps={getOwnerProps}\n >\n {!isEditing ? StandardRender : EditableRenderer}\n {!isEditing && <StyledPencilIcon />}\n <span id={`editable-cell-${cell.id}-${domIdAffix}`} style={{ display: 'none' }} aria-hidden=\"true\">\n {cell.value as string}, editable cell. To edit the content's of this cell, press the Enter key\n </span>\n </StyledEditableContainer>\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;AC2EF,cACf,YADe;AA3ErB,SAAgB,UAAU,aAAa,uBAAuB;AAC9D,SAAS,kBAAkB,+BAA+B;AAE1D,SAAS,qBAAqB;AAEvB,MAAM,eAKR,CAAC,UAAU;AACd,QAAM,EAAE,gBAAgB,kBAAkB,MAAM,cAAc,IAAI;AAClE,QAAM,aAAa,cAAc,CAAC,UAAU,MAAM,UAAU;AAC5D,QAAM,qBAAqB,cAAc,CAAC,UAAU,MAAM,kBAAkB;AAC5E,QAAM,gBAAgB,cAAc,CAAC,UAAU,MAAM,GAAG;AAExD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AAExD,kBAAgB,MAAM;AACpB,QAAI,cAAc,eAAe;AAC/B,yBAAmB,QAAQ;AAC3B,uBAAiB,SAAS;AAAA,IAC5B;AAAA,EAEF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA8C;AAC7C,UAAI,CAAC,WAAW;AACd,UAAE,gBAAgB;AAClB,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2B;AAC1B,UAAI,WAAW;AACb,UAAE,gBAAgB;AAClB,YAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,EAAE,IAAI,GAAG;AACxC,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF,WAAW,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG;AAC9C,wBAAgB,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,WAAW,iBAAiB,YAAY;AAAA,EAC3C;AAEA,QAAM,eAAe;AAAA,IACnB,CAAC,UAA4B;AAC3B,UAAI,aAAa,CAAC,MAAM,eAAe,SAAS,MAAM,aAAa,GAAG;AAEpE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AACA,QAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,aAAa,IAAI,CAAC,MAAM;AAC3D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,iBAAiB,CAAC,YAAY,IAAI;AAAA,MAC5C,UAAU,KAAK;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,uBAAuB,KAAK,OAAO;AAAA,MACnC,MAAK;AAAA,MACL,mBAAiB,YAAY,SAAY,KAAK;AAAA,MAC9C;AAAA,MAEC;AAAA,SAAC,YAAY,iBAAiB;AAAA,QAC9B,CAAC,aAAa,oBAAC,oBAAiB;AAAA,QACjC,qBAAC,UAAK,IAAI,iBAAiB,KAAK,
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC2EF,cACf,YADe;AA3ErB,SAAgB,UAAU,aAAa,uBAAuB;AAC9D,SAAS,kBAAkB,+BAA+B;AAE1D,SAAS,qBAAqB;AAEvB,MAAM,eAKR,CAAC,UAAU;AACd,QAAM,EAAE,gBAAgB,kBAAkB,MAAM,cAAc,IAAI;AAClE,QAAM,aAAa,cAAc,CAAC,UAAU,MAAM,UAAU;AAC5D,QAAM,qBAAqB,cAAc,CAAC,UAAU,MAAM,kBAAkB;AAC5E,QAAM,gBAAgB,cAAc,CAAC,UAAU,MAAM,GAAG;AAExD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AAExD,kBAAgB,MAAM;AACpB,QAAI,cAAc,eAAe;AAC/B,yBAAmB,QAAQ;AAC3B,uBAAiB,SAAS;AAAA,IAC5B;AAAA,EAEF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA8C;AAC7C,UAAI,CAAC,WAAW;AACd,UAAE,gBAAgB;AAClB,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2B;AAC1B,UAAI,WAAW;AACb,UAAE,gBAAgB;AAClB,YAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,EAAE,IAAI,GAAG;AACxC,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF,WAAW,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG;AAC9C,wBAAgB,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,WAAW,iBAAiB,YAAY;AAAA,EAC3C;AAEA,QAAM,eAAe;AAAA,IACnB,CAAC,UAA4B;AAC3B,UAAI,aAAa,CAAC,MAAM,eAAe,SAAS,MAAM,aAAa,GAAG;AAEpE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AACA,QAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,aAAa,IAAI,CAAC,MAAM;AAC3D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,iBAAiB,CAAC,YAAY,IAAI;AAAA,MAC5C,UAAU,KAAK;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,uBAAuB,KAAK,OAAO;AAAA,MACnC,MAAK;AAAA,MACL,mBAAiB,YAAY,SAAY,KAAK;AAAA,MAC9C;AAAA,MAEC;AAAA,SAAC,YAAY,iBAAiB;AAAA,QAC9B,CAAC,aAAa,oBAAC,oBAAiB;AAAA,QACjC,qBAAC,UAAK,IAAI,iBAAiB,KAAK,EAAE,IAAI,UAAU,IAAI,OAAO,EAAE,SAAS,OAAO,GAAG,eAAY,QACzF;AAAA,eAAK;AAAA,UAAgB;AAAA,WACxB;AAAA;AAAA;AAAA,EACF;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -24,8 +24,7 @@ const FilterBarDropdownMenu = (props) => {
|
|
|
24
24
|
type: "action",
|
|
25
25
|
onClick: removeFilters,
|
|
26
26
|
onKeyDown: (e) => {
|
|
27
|
-
if (["Enter", "Space"].includes(e.code))
|
|
28
|
-
removeFilters(e);
|
|
27
|
+
if (["Enter", "Space"].includes(e.code)) removeFilters(e);
|
|
29
28
|
}
|
|
30
29
|
},
|
|
31
30
|
...extraOptions
|
|
@@ -42,8 +41,7 @@ const FilterBarDropdownMenu = (props) => {
|
|
|
42
41
|
setIsOpened(false);
|
|
43
42
|
},
|
|
44
43
|
onKeyDown: (e) => {
|
|
45
|
-
if (e.code === "Escape")
|
|
46
|
-
innerRef?.current?.focus?.();
|
|
44
|
+
if (e.code === "Escape") innerRef?.current?.focus?.();
|
|
47
45
|
},
|
|
48
46
|
children: /* @__PURE__ */ jsx(
|
|
49
47
|
DSButtonV2,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/FilterBar/FilterBarDropdownMenu.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useCallback, useMemo } from 'react';\nimport { DSDropdownMenuV2, type DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\nimport { DSButtonV2, BUTTON_TYPES } from '@elliemae/ds-button-v2';\nimport { MoreOptionsVert } from '@elliemae/ds-icons';\nimport { DATA_TESTID } from '../../configs/index.js';\nimport { usePropsStore } from '../../configs/useStore/useStore.js';\n\ninterface FilterBarDropdownMenuProps {\n options?: DSDropdownMenuT.Props['options'];\n innerRef?: React.RefObject<HTMLButtonElement>;\n}\n\nexport const FilterBarDropdownMenu: React.ComponentType<FilterBarDropdownMenuProps> = (props) => {\n const onFiltersChange = usePropsStore((state) => state.onFiltersChange);\n const [isOpened, setIsOpened] = useState(false);\n\n const { options: extraOptions = [], innerRef, ...restProps } = props;\n const removeFilters: React.MouseEventHandler & React.KeyboardEventHandler = useCallback(() => {\n onFiltersChange([]);\n setIsOpened(false);\n innerRef?.current?.focus?.();\n }, [innerRef, onFiltersChange]);\n\n const options: DSDropdownMenuT.Item[] = useMemo(\n () => [\n {\n dsId: '__internal__option__clear__filters',\n label: 'Clear Filters',\n value: 'clear',\n type: 'action',\n onClick: removeFilters,\n onKeyDown: (e: React.KeyboardEvent) => {\n if (['Enter', 'Space'].includes(e.code)) removeFilters(e);\n },\n } as unknown as DSDropdownMenuT.Item,\n ...extraOptions,\n ],\n [extraOptions, removeFilters],\n );\n\n return (\n <div style={{ marginLeft: 'auto' }}>\n <DSDropdownMenuV2\n isOpened={isOpened}\n startPlacementPreference=\"bottom-end\"\n options={options}\n onClickOutside={() => {\n setIsOpened(false);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.code === 'Escape') innerRef?.current?.focus?.();\n }}\n >\n <DSButtonV2\n buttonType={BUTTON_TYPES.ICON}\n onClick={() => setIsOpened((prevOpened) => !prevOpened)}\n innerRef={innerRef}\n aria-label=\"Filter bar addon\"\n data-testid={DATA_TESTID.DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON}\n {...restProps}\n >\n <MoreOptionsVert />\n </DSButtonV2>\n </DSDropdownMenuV2>\n </div>\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;AC6Db;AA7DV,SAAgB,UAAU,aAAa,eAAe;AACtD,SAAS,wBAA8C;AACvD,SAAS,YAAY,oBAAoB;AACzC,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAOvB,MAAM,wBAAyE,CAAC,UAAU;AAC/F,QAAM,kBAAkB,cAAc,CAAC,UAAU,MAAM,eAAe;AACtE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAE9C,QAAM,EAAE,SAAS,eAAe,CAAC,GAAG,UAAU,GAAG,UAAU,IAAI;AAC/D,QAAM,gBAAsE,YAAY,MAAM;AAC5F,oBAAgB,CAAC,CAAC;AAClB,gBAAY,KAAK;AACjB,cAAU,SAAS,QAAQ;AAAA,EAC7B,GAAG,CAAC,UAAU,eAAe,CAAC;AAE9B,QAAM,UAAkC;AAAA,IACtC,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW,CAAC,MAA2B;AACrC,cAAI,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,IAAI
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC6Db;AA7DV,SAAgB,UAAU,aAAa,eAAe;AACtD,SAAS,wBAA8C;AACvD,SAAS,YAAY,oBAAoB;AACzC,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAOvB,MAAM,wBAAyE,CAAC,UAAU;AAC/F,QAAM,kBAAkB,cAAc,CAAC,UAAU,MAAM,eAAe;AACtE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAE9C,QAAM,EAAE,SAAS,eAAe,CAAC,GAAG,UAAU,GAAG,UAAU,IAAI;AAC/D,QAAM,gBAAsE,YAAY,MAAM;AAC5F,oBAAgB,CAAC,CAAC;AAClB,gBAAY,KAAK;AACjB,cAAU,SAAS,QAAQ;AAAA,EAC7B,GAAG,CAAC,UAAU,eAAe,CAAC;AAE9B,QAAM,UAAkC;AAAA,IACtC,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW,CAAC,MAA2B;AACrC,cAAI,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,IAAI,EAAG,eAAc,CAAC;AAAA,QAC1D;AAAA,MACF;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA,CAAC,cAAc,aAAa;AAAA,EAC9B;AAEA,SACE,oBAAC,SAAI,OAAO,EAAE,YAAY,OAAO,GAC/B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,0BAAyB;AAAA,MACzB;AAAA,MACA,gBAAgB,MAAM;AACpB,oBAAY,KAAK;AAAA,MACnB;AAAA,MACA,WAAW,CAAC,MAA2B;AACrC,YAAI,EAAE,SAAS,SAAU,WAAU,SAAS,QAAQ;AAAA,MACtD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,YAAY,aAAa;AAAA,UACzB,SAAS,MAAM,YAAY,CAAC,eAAe,CAAC,UAAU;AAAA,UACtD;AAAA,UACA,cAAW;AAAA,UACX,eAAa,YAAY;AAAA,UACxB,GAAG;AAAA,UAEJ,8BAAC,mBAAgB;AAAA;AAAA,MACnB;AAAA;AAAA,EACF,GACF;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/FilterPopover/index.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { DSButtonV2 } from '@elliemae/ds-button-v2';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport type { DSPopperJST } from '@elliemae/ds-popperjs';\nimport { styled } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { DATA_TESTID } from '../../configs/constants.js';\nimport { useGetFilterVisibility } from './useGetFilterVisibility.js';\nimport type { FilterPopoverProps } from './types.js';\nimport { useGetFilterHandlers } from './useGetFilterHandlers.js';\nimport { useInternalStore, usePropsStore } from '../../configs/useStore/useStore.js';\nimport { DSDataTableName, DSDataTableSlots } from '../../DSDataTableDefinitions.js';\n\nconst FilterButton = styled('span', { name: DSDataTableName, slot: DSDataTableSlots.FILTER_POPOVER_BUTTON })<{\n hide: boolean;\n}>`\n display: inline-grid;\n ${(props) => (props.hide ? 'opacity: 0; display: none; width: 0;' : '')}\n`;\n\nconst PopperContent = styled('div', { name: DSDataTableName, slot: DSDataTableSlots.FILTER_POPOVER_CONTENT })`\n background-color: #fff;\n`;\n\nconst ButtonTrap = ({ cb }: { cb: () => void }) => (\n <span\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n onFocus={(e: React.FocusEvent) => {\n e.stopPropagation();\n cb();\n }}\n />\n);\n\nexport const FilterPopover: React.ComponentType<FilterPopoverProps> = (props: FilterPopoverProps) => {\n const { column, customStyles, reduxHeader, menuContent, columnId, ariaLabel, triggerIcon, innerRef } = props;\n\n const filters = usePropsStore((state) => state.filters);\n const getOwnerProps = usePropsStore((store) => store.get);\n\n const patchHeader = useInternalStore((state) => state.patchHeader);\n\n const { isIconVisible, isMenuOpen } = useGetFilterVisibility(reduxHeader);\n\n const [buttonReference, setButtonReference] = useState<HTMLButtonElement | null>(null);\n\n const [isButtonFocused, setIsButtonFocused] = useState(false);\n\n const { handleTriggerClick, handleClickOutsideMenu, handleMenuOnKeyDown, handleTriggerOnFocus, handleTriggerOnBlur } =\n useGetFilterHandlers(props, isMenuOpen, buttonReference, setIsButtonFocused);\n\n const buttonTrapCallback = useCallback(() => {\n patchHeader(columnId, { hideFilterMenu: true, hideFilterButton: false });\n buttonReference?.focus();\n }, [columnId, patchHeader, buttonReference]);\n\n const actionRef: Required<DSPopperJST.Props>['actionRef'] = useRef({\n update: null,\n });\n\n useEffect(() => {\n // When the filters change, we need to update the popper position,\n // because the filter bar might push the datatable up or down, causing the popper to be misaligned\n void actionRef.current.update?.();\n }, [filters]);\n\n return (\n <div\n // This is here to prevent propagation, and not trigger the sort functionality\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleMenuOnKeyDown}\n >\n <FilterButton\n hide={!isIconVisible}\n data-testid={DATA_TESTID.DATA_TABLE_FILTER_BUTTON}\n getOwnerProps={getOwnerProps}\n >\n <DSButtonV2\n buttonType=\"icon\"\n size=\"s\"\n onClick={handleTriggerClick}\n onFocus={handleTriggerOnFocus}\n onBlur={handleTriggerOnBlur}\n innerRef={mergeRefs(isIconVisible && setButtonReference, innerRef)}\n tabIndex={reduxHeader?.withTabStops ? 0 : -1}\n aria-label={ariaLabel}\n aria-hidden={!isButtonFocused}\n >\n {triggerIcon}\n </DSButtonV2>\n </FilterButton>\n {buttonReference && (\n <DSPopperJS\n actionRef={actionRef}\n referenceElement={buttonReference}\n showPopover={isMenuOpen}\n closeContextMenu={handleClickOutsideMenu}\n data-testid={DATA_TESTID.DATA_TABLE_FILTER_MENU_CONTENT}\n startPlacementPreference=\"bottom-end\"\n customOffset={[5, 4]}\n withoutArrow\n withoutAnimation\n extraPopperStyles={{\n ...customStyles,\n minWidth: column.ref?.current?.offsetWidth ?? '0px',\n }}\n placementOrderPreference={['bottom-end', 'top-end']}\n >\n <PopperContent getOwnerProps={getOwnerProps}>\n <ButtonTrap cb={buttonTrapCallback} />\n {menuContent}\n <ButtonTrap cb={buttonTrapCallback} />\n </PopperContent>\n </DSPopperJS>\n )}\n </div>\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;AC0BrB,cAoFQ,YApFR;AAzBF,SAAgB,aAAa,WAAW,QAAQ,gBAAgB;AAChE,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB;AAE3B,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AAEvC,SAAS,4BAA4B;AACrC,SAAS,kBAAkB,qBAAqB;AAChD,SAAS,iBAAiB,wBAAwB;AAElD,MAAM,eAAe,OAAO,QAAQ,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,sBAAsB,CAAC;AAAA;AAAA,IAIvG,CAAC,UAAW,MAAM,OAAO,yCAAyC;AAAA;
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC0BrB,cAoFQ,YApFR;AAzBF,SAAgB,aAAa,WAAW,QAAQ,gBAAgB;AAChE,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB;AAE3B,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AAEvC,SAAS,4BAA4B;AACrC,SAAS,kBAAkB,qBAAqB;AAChD,SAAS,iBAAiB,wBAAwB;AAElD,MAAM,eAAe,OAAO,QAAQ,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,sBAAsB,CAAC;AAAA;AAAA,IAIvG,CAAC,UAAW,MAAM,OAAO,yCAAyC,EAAG;AAAA;AAGzE,MAAM,gBAAgB,OAAO,OAAO,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,uBAAuB,CAAC;AAAA;AAAA;AAI5G,MAAM,aAAa,CAAC,EAAE,GAAG,MACvB;AAAA,EAAC;AAAA;AAAA,IAEC,UAAU;AAAA,IACV,SAAS,CAAC,MAAwB;AAChC,QAAE,gBAAgB;AAClB,SAAG;AAAA,IACL;AAAA;AACF;AAGK,MAAM,gBAAyD,CAAC,UAA8B;AACnG,QAAM,EAAE,QAAQ,cAAc,aAAa,aAAa,UAAU,WAAW,aAAa,SAAS,IAAI;AAEvG,QAAM,UAAU,cAAc,CAAC,UAAU,MAAM,OAAO;AACtD,QAAM,gBAAgB,cAAc,CAAC,UAAU,MAAM,GAAG;AAExD,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,WAAW;AAEjE,QAAM,EAAE,eAAe,WAAW,IAAI,uBAAuB,WAAW;AAExE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAmC,IAAI;AAErF,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAE5D,QAAM,EAAE,oBAAoB,wBAAwB,qBAAqB,sBAAsB,oBAAoB,IACjH,qBAAqB,OAAO,YAAY,iBAAiB,kBAAkB;AAE7E,QAAM,qBAAqB,YAAY,MAAM;AAC3C,gBAAY,UAAU,EAAE,gBAAgB,MAAM,kBAAkB,MAAM,CAAC;AACvE,qBAAiB,MAAM;AAAA,EACzB,GAAG,CAAC,UAAU,aAAa,eAAe,CAAC;AAE3C,QAAM,YAAsD,OAAO;AAAA,IACjE,QAAQ;AAAA,EACV,CAAC;AAED,YAAU,MAAM;AAGd,SAAK,UAAU,QAAQ,SAAS;AAAA,EAClC,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE;AAAA,IAAC;AAAA;AAAA,MAEC,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAClC,WAAW;AAAA,MAEX;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,CAAC;AAAA,YACP,eAAa,YAAY;AAAA,YACzB;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACC,YAAW;AAAA,gBACX,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,QAAQ;AAAA,gBACR,UAAU,UAAU,iBAAiB,oBAAoB,QAAQ;AAAA,gBACjE,UAAU,aAAa,eAAe,IAAI;AAAA,gBAC1C,cAAY;AAAA,gBACZ,eAAa,CAAC;AAAA,gBAEb;AAAA;AAAA,YACH;AAAA;AAAA,QACF;AAAA,QACC,mBACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,kBAAkB;AAAA,YAClB,aAAa;AAAA,YACb,kBAAkB;AAAA,YAClB,eAAa,YAAY;AAAA,YACzB,0BAAyB;AAAA,YACzB,cAAc,CAAC,GAAG,CAAC;AAAA,YACnB,cAAY;AAAA,YACZ,kBAAgB;AAAA,YAChB,mBAAmB;AAAA,cACjB,GAAG;AAAA,cACH,UAAU,OAAO,KAAK,SAAS,eAAe;AAAA,YAChD;AAAA,YACA,0BAA0B,CAAC,cAAc,SAAS;AAAA,YAElD,+BAAC,iBAAc,eACb;AAAA,kCAAC,cAAW,IAAI,oBAAoB;AAAA,cACnC;AAAA,cACD,oBAAC,cAAW,IAAI,oBAAoB;AAAA,eACtC;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -15,10 +15,8 @@ const useIframeClickCloseWorkaround = ({
|
|
|
15
15
|
const handleBlur = () => {
|
|
16
16
|
patchRef.current(columnId, true);
|
|
17
17
|
};
|
|
18
|
-
if (isMenuOpen)
|
|
19
|
-
|
|
20
|
-
else
|
|
21
|
-
window.removeEventListener("blur", handleBlur);
|
|
18
|
+
if (isMenuOpen) window.addEventListener("blur", handleBlur);
|
|
19
|
+
else window.removeEventListener("blur", handleBlur);
|
|
22
20
|
return () => {
|
|
23
21
|
window.removeEventListener("blur", handleBlur);
|
|
24
22
|
};
|
|
@@ -41,8 +39,7 @@ const useGetFilterHandlers = (props, isMenuOpen, buttonReference, setIsButtonFoc
|
|
|
41
39
|
const handleTriggerOnBlur = useCallback(() => setIsButtonFocused(false), [setIsButtonFocused]);
|
|
42
40
|
const handleClickOutsideMenu = useCallback(() => {
|
|
43
41
|
onClickOutsideMenu(columnId);
|
|
44
|
-
if (isMenuOpen)
|
|
45
|
-
patchHeaderFilterButtonAndMenu(columnId, true);
|
|
42
|
+
if (isMenuOpen) patchHeaderFilterButtonAndMenu(columnId, true);
|
|
46
43
|
}, [columnId, isMenuOpen, onClickOutsideMenu, patchHeaderFilterButtonAndMenu]);
|
|
47
44
|
const handleMenuOnKeyDown = useCallback(
|
|
48
45
|
(e) => {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/FilterPopover/useGetFilterHandlers.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nimport type React from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { FilterPopoverProps } from './types.js';\nimport { useInternalStore } from '../../configs/useStore/useStore.js';\n\nconst emptyFunc = () => null;\n\n// https://jira.elliemae.io/browse/PUI-12457\nconst useIframeClickCloseWorkaround = ({\n columnId,\n isMenuOpen,\n}: {\n columnId: FilterPopoverProps['columnId'];\n isMenuOpen: boolean;\n}) => {\n // due to how browser handle events when iframes are involved we can only listen to window \"blur\" event to understand if the user clicked on any iframe\n // out of the box the filter are supposed to close when the user clicks outside of the filter contextual region\n // this helper ensure that the filter will close even if the user clicks on an iframe.\n // since we must do vanilla javascript we need to handle this with extreme care and ensure we optimize as much as possible.\n // we want to attach/detach the event listener only when the filter is open and we want to detach it as soon as the filter is closed.\n // this is to ensure that no matter how many columns have filter functionality we only pay the performance cost for the filter that would do anything with it.\n const patchHeaderFilterButtonAndMenu = useInternalStore((state) => state.patchHeaderFilterButtonAndMenu);\n\n // we only care to invoke the latest version of patchHeaderFilterButtonAndMenu\n // we do not need to reattach the event listener if pathHeaderFilterButtonAndMenu changes\n // event attachment/detachment is more expensive than a simple ref update performance wise.\n const patchRef = useRef(patchHeaderFilterButtonAndMenu);\n useEffect(() => {\n patchRef.current = patchHeaderFilterButtonAndMenu;\n }, [patchHeaderFilterButtonAndMenu]);\n\n // extremely optimized event listener attachment/detachment\n // we run this side effect strictly when required to ensure the best performance possible.\n // it's strictly required when:\n // - the filter is open ( so clicking an iframe will close it )\n // - the columnId changes ( so we close the correct filter )\n // if patchHeaderFilterButtonAndMenu changes we do not care to reattach the event listener\n // as long as the .current ref is updated in time before the close event is triggered.\n // which is guaranteed by:\n // - the fact that we update the ref in the useEffect above\n // - the fact that we invoke patchRef.current as a consquence of the user \"clicking\" on the filter button (which happens after the previous useEffect)\n useEffect(() => {\n // we declare the function locally in the closure to ensure we can detach it later\n // useEffect is run after render, useCallBack is run before render,\n // which means that using useCallback here could potentially cause a memory-leak/dangling reference/attached event listener that is never detached\n const handleBlur = () => {\n patchRef.current(columnId, true);\n };\n\n if (isMenuOpen) window.addEventListener('blur', handleBlur);\n else window.removeEventListener('blur', handleBlur);\n\n return () => {\n window.removeEventListener('blur', handleBlur);\n };\n }, [columnId, isMenuOpen]);\n};\n\nexport const useGetFilterHandlers = (\n props: FilterPopoverProps,\n isMenuOpen: boolean,\n buttonReference: HTMLButtonElement | null,\n setIsButtonFocused: React.Dispatch<React.SetStateAction<boolean>>,\n) => {\n const { columnId, onTriggerClick = emptyFunc, onClickOutsideMenu = emptyFunc } = props;\n useIframeClickCloseWorkaround({ columnId, isMenuOpen });\n\n const patchHeaderFilterButtonAndMenu = useInternalStore((state) => state.patchHeaderFilterButtonAndMenu);\n const patchHeader = useInternalStore((state) => state.patchHeader);\n\n const handleTriggerClick = useCallback(\n (e: React.MouseEvent | React.KeyboardEvent) => {\n onTriggerClick(columnId, e);\n patchHeader(columnId, { hideFilterMenu: isMenuOpen, hideFilterButton: false });\n e.stopPropagation();\n },\n [columnId, isMenuOpen, onTriggerClick, patchHeader],\n );\n\n const handleTriggerOnFocus = useCallback(() => setIsButtonFocused(true), [setIsButtonFocused]);\n const handleTriggerOnBlur = useCallback(() => setIsButtonFocused(false), [setIsButtonFocused]);\n\n const handleClickOutsideMenu = useCallback(() => {\n onClickOutsideMenu(columnId);\n if (isMenuOpen) patchHeaderFilterButtonAndMenu(columnId, true);\n }, [columnId, isMenuOpen, onClickOutsideMenu, patchHeaderFilterButtonAndMenu]);\n\n const handleMenuOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n e.stopPropagation();\n if (e.code === 'Escape') {\n patchHeader(columnId, { hideFilterMenu: true, hideFilterButton: false });\n buttonReference?.focus();\n }\n // Stop propagation for some reason is not enough to prevent scrolling of the datatable\n // so we just prevent default behaviour in this case\n if (['ArrowUp', 'ArrowDown'].includes(e.code)) {\n e.preventDefault();\n }\n },\n [buttonReference, columnId, patchHeader],\n );\n\n return { handleTriggerClick, handleClickOutsideMenu, handleMenuOnKeyDown, handleTriggerOnFocus, handleTriggerOnBlur };\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACEvB,SAAS,aAAa,WAAW,cAAc;AAE/C,SAAS,wBAAwB;AAEjC,MAAM,YAAY,MAAM;AAGxB,MAAM,gCAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AACF,MAGM;AAOJ,QAAM,iCAAiC,iBAAiB,CAAC,UAAU,MAAM,8BAA8B;AAKvG,QAAM,WAAW,OAAO,8BAA8B;AACtD,YAAU,MAAM;AACd,aAAS,UAAU;AAAA,EACrB,GAAG,CAAC,8BAA8B,CAAC;AAYnC,YAAU,MAAM;AAId,UAAM,aAAa,MAAM;AACvB,eAAS,QAAQ,UAAU,IAAI;AAAA,IACjC;AAEA,QAAI
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACEvB,SAAS,aAAa,WAAW,cAAc;AAE/C,SAAS,wBAAwB;AAEjC,MAAM,YAAY,MAAM;AAGxB,MAAM,gCAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AACF,MAGM;AAOJ,QAAM,iCAAiC,iBAAiB,CAAC,UAAU,MAAM,8BAA8B;AAKvG,QAAM,WAAW,OAAO,8BAA8B;AACtD,YAAU,MAAM;AACd,aAAS,UAAU;AAAA,EACrB,GAAG,CAAC,8BAA8B,CAAC;AAYnC,YAAU,MAAM;AAId,UAAM,aAAa,MAAM;AACvB,eAAS,QAAQ,UAAU,IAAI;AAAA,IACjC;AAEA,QAAI,WAAY,QAAO,iBAAiB,QAAQ,UAAU;AAAA,QACrD,QAAO,oBAAoB,QAAQ,UAAU;AAElD,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ,UAAU;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAC3B;AAEO,MAAM,uBAAuB,CAClC,OACA,YACA,iBACA,uBACG;AACH,QAAM,EAAE,UAAU,iBAAiB,WAAW,qBAAqB,UAAU,IAAI;AACjF,gCAA8B,EAAE,UAAU,WAAW,CAAC;AAEtD,QAAM,iCAAiC,iBAAiB,CAAC,UAAU,MAAM,8BAA8B;AACvG,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,WAAW;AAEjE,QAAM,qBAAqB;AAAA,IACzB,CAAC,MAA8C;AAC7C,qBAAe,UAAU,CAAC;AAC1B,kBAAY,UAAU,EAAE,gBAAgB,YAAY,kBAAkB,MAAM,CAAC;AAC7E,QAAE,gBAAgB;AAAA,IACpB;AAAA,IACA,CAAC,UAAU,YAAY,gBAAgB,WAAW;AAAA,EACpD;AAEA,QAAM,uBAAuB,YAAY,MAAM,mBAAmB,IAAI,GAAG,CAAC,kBAAkB,CAAC;AAC7F,QAAM,sBAAsB,YAAY,MAAM,mBAAmB,KAAK,GAAG,CAAC,kBAAkB,CAAC;AAE7F,QAAM,yBAAyB,YAAY,MAAM;AAC/C,uBAAmB,QAAQ;AAC3B,QAAI,WAAY,gCAA+B,UAAU,IAAI;AAAA,EAC/D,GAAG,CAAC,UAAU,YAAY,oBAAoB,8BAA8B,CAAC;AAE7E,QAAM,sBAAsB;AAAA,IAC1B,CAAC,MAA2B;AAC1B,QAAE,gBAAgB;AAClB,UAAI,EAAE,SAAS,UAAU;AACvB,oBAAY,UAAU,EAAE,gBAAgB,MAAM,kBAAkB,MAAM,CAAC;AACvE,yBAAiB,MAAM;AAAA,MACzB;AAGA,UAAI,CAAC,WAAW,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG;AAC7C,UAAE,eAAe;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,UAAU,WAAW;AAAA,EACzC;AAEA,SAAO,EAAE,oBAAoB,wBAAwB,qBAAqB,sBAAsB,oBAAoB;AACtH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
const getNumber = (str) => {
|
|
3
|
-
if (str === null)
|
|
4
|
-
|
|
5
|
-
if (typeof str
|
|
6
|
-
return str;
|
|
7
|
-
if (typeof str !== "string")
|
|
8
|
-
return null;
|
|
3
|
+
if (str === null) return null;
|
|
4
|
+
if (typeof str === "number") return str;
|
|
5
|
+
if (typeof str !== "string") return null;
|
|
9
6
|
return Number.parseFloat(
|
|
10
7
|
str.split("").filter((x) => ![",", "$"].includes(x)).join("")
|
|
11
8
|
);
|
|
12
9
|
};
|
|
13
10
|
const isEmpty = (number) => Number.isNaN(number) || number === null || number === void 0;
|
|
14
11
|
const isFilterValueValidForCurrencyRange = (value) => {
|
|
15
|
-
if (typeof value !== "object")
|
|
16
|
-
|
|
17
|
-
if (value
|
|
18
|
-
return false;
|
|
19
|
-
if (Array.isArray(value))
|
|
20
|
-
return false;
|
|
12
|
+
if (typeof value !== "object") return false;
|
|
13
|
+
if (value === null) return false;
|
|
14
|
+
if (Array.isArray(value)) return false;
|
|
21
15
|
if (typeof value.from !== "string" && typeof value.from !== "number")
|
|
22
16
|
return false;
|
|
23
17
|
if (typeof value.to !== "string" && typeof value.to !== "number")
|
|
@@ -25,14 +19,11 @@ const isFilterValueValidForCurrencyRange = (value) => {
|
|
|
25
19
|
return true;
|
|
26
20
|
};
|
|
27
21
|
const currencyRangeFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
28
|
-
if (!filterValue)
|
|
29
|
-
return unfilteredData;
|
|
22
|
+
if (!filterValue) return unfilteredData;
|
|
30
23
|
const fromNumber = getNumber(filterValue.from);
|
|
31
24
|
const toNumber = getNumber(filterValue.to);
|
|
32
|
-
if (isEmpty(fromNumber))
|
|
33
|
-
|
|
34
|
-
if (isEmpty(toNumber))
|
|
35
|
-
return unfilteredData;
|
|
25
|
+
if (isEmpty(fromNumber)) return unfilteredData;
|
|
26
|
+
if (isEmpty(toNumber)) return unfilteredData;
|
|
36
27
|
if (!isFilterValueValidForCurrencyRange(filterValue))
|
|
37
28
|
throw new Error(
|
|
38
29
|
`Invalid filter value for currency range filter, expected { from: string | number, to: string | number } received: ${JSON.stringify(
|
|
@@ -41,8 +32,7 @@ const currencyRangeFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
|
41
32
|
);
|
|
42
33
|
return unfilteredData.filter((datum) => {
|
|
43
34
|
const datumAsNumber = getNumber(datum[filterKey]);
|
|
44
|
-
if (isEmpty(datumAsNumber))
|
|
45
|
-
return false;
|
|
35
|
+
if (isEmpty(datumAsNumber)) return false;
|
|
46
36
|
return datumAsNumber >= fromNumber && datumAsNumber <= toNumber;
|
|
47
37
|
});
|
|
48
38
|
};
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/currencyRangeFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSDataTableT } from '../../react-desc-prop-types.js';\n\nconst getNumber = (str: string | null | number) => {\n if (str === null) return null;\n if (typeof str === 'number') return str;\n if (typeof str !== 'string') return null;\n return Number.parseFloat(\n str\n .split('')\n .filter((x) => ![',', '$'].includes(x))\n .join(''),\n );\n};\n\nconst isEmpty = (number: number | null): number is null =>\n Number.isNaN(number) || number === null || number === undefined;\n\nexport const isFilterValueValidForCurrencyRange = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxCurrencyRange>[2] => {\n if (typeof value !== 'object') return false;\n if (value === null) return false;\n if (Array.isArray(value)) return false;\n if (\n typeof (value as { from: string | number }).from !== 'string' &&\n typeof (value as { from: string | number }).from !== 'number'\n )\n return false;\n if (\n typeof (value as { to: string | number }).to !== 'string' &&\n typeof (value as { to: string | number }).to !== 'number'\n )\n return false;\n return true;\n};\n\nexport const currencyRangeFilterFn: DSDataTableT.FilterFnOutOfTheBoxCurrencyRange = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n const fromNumber = getNumber(filterValue.from);\n const toNumber = getNumber(filterValue.to);\n if (isEmpty(fromNumber)) return unfilteredData;\n if (isEmpty(toNumber)) return unfilteredData;\n\n if (!isFilterValueValidForCurrencyRange(filterValue))\n throw new Error(\n `Invalid filter value for currency range filter, expected { from: string | number, to: string | number } received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n\n return unfilteredData.filter((datum) => {\n const datumAsNumber = getNumber(datum[filterKey] as string | null | number);\n if (isEmpty(datumAsNumber)) return false;\n return datumAsNumber >= fromNumber && datumAsNumber <= toNumber;\n });\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACEvB,MAAM,YAAY,CAAC,QAAgC;AACjD,MAAI,QAAQ
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACEvB,MAAM,YAAY,CAAC,QAAgC;AACjD,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,SAAO,OAAO;AAAA,IACZ,IACG,MAAM,EAAE,EACR,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,EAAE,SAAS,CAAC,CAAC,EACrC,KAAK,EAAE;AAAA,EACZ;AACF;AAEA,MAAM,UAAU,CAAC,WACf,OAAO,MAAM,MAAM,KAAK,WAAW,QAAQ,WAAW;AAEjD,MAAM,qCAAqC,CAChD,UAC0E;AAC1E,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MACE,OAAQ,MAAoC,SAAS,YACrD,OAAQ,MAAoC,SAAS;AAErD,WAAO;AACT,MACE,OAAQ,MAAkC,OAAO,YACjD,OAAQ,MAAkC,OAAO;AAEjD,WAAO;AACT,SAAO;AACT;AAEO,MAAM,wBAAuE,CAClF,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,aAAa,UAAU,YAAY,IAAI;AAC7C,QAAM,WAAW,UAAU,YAAY,EAAE;AACzC,MAAI,QAAQ,UAAU,EAAG,QAAO;AAChC,MAAI,QAAQ,QAAQ,EAAG,QAAO;AAE9B,MAAI,CAAC,mCAAmC,WAAW;AACjD,UAAM,IAAI;AAAA,MACR,qHAAqH,KAAK;AAAA,QACxH;AAAA,MACF,CAAC;AAAA,IACH;AAEF,SAAO,eAAe,OAAO,CAAC,UAAU;AACtC,UAAM,gBAAgB,UAAU,MAAM,SAAS,CAA2B;AAC1E,QAAI,QAAQ,aAAa,EAAG,QAAO;AACnC,WAAO,iBAAiB,cAAc,iBAAiB;AAAA,EACzD,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { isSameOrAfter, isSameOrBefore } from "./utilities.js";
|
|
3
3
|
const isFilterValueValidForDateRange = (value) => {
|
|
4
|
-
if (typeof value !== "object")
|
|
5
|
-
|
|
6
|
-
if (value
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
return false;
|
|
10
|
-
if (typeof value.startDate !== "string")
|
|
11
|
-
return false;
|
|
12
|
-
if (typeof value.endDate !== "string")
|
|
13
|
-
return false;
|
|
4
|
+
if (typeof value !== "object") return false;
|
|
5
|
+
if (value === null) return false;
|
|
6
|
+
if (Array.isArray(value)) return false;
|
|
7
|
+
if (typeof value.startDate !== "string") return false;
|
|
8
|
+
if (typeof value.endDate !== "string") return false;
|
|
14
9
|
return true;
|
|
15
10
|
};
|
|
16
11
|
const dateRangeFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
17
|
-
if (!filterValue)
|
|
18
|
-
return unfilteredData;
|
|
12
|
+
if (!filterValue) return unfilteredData;
|
|
19
13
|
if (!isFilterValueValidForDateRange(filterValue))
|
|
20
14
|
throw new Error(
|
|
21
15
|
`Invalid filter value for date range filter, expected { startDate: string, endDate: string } received: ${JSON.stringify(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/dateRangeFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSDataTableT } from '../../react-desc-prop-types.js';\nimport { isSameOrAfter, isSameOrBefore } from './utilities.js';\n\nconst isFilterValueValidForDateRange = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxDateRange>[2] => {\n if (typeof value !== 'object') return false;\n if (value === null) return false;\n if (Array.isArray(value)) return false;\n if (typeof (value as { startDate: string }).startDate !== 'string') return false;\n if (typeof (value as { endDate: string }).endDate !== 'string') return false;\n return true;\n};\n\nexport const dateRangeFilterFn: DSDataTableT.FilterFnOutOfTheBoxDateRange = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isFilterValueValidForDateRange(filterValue))\n throw new Error(\n `Invalid filter value for date range filter, expected { startDate: string, endDate: string } received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n\n return unfilteredData.filter(\n (datum) =>\n !(filterValue?.startDate && filterValue?.endDate) ||\n (isSameOrBefore(filterValue?.startDate, datum[filterKey] as string) &&\n isSameOrAfter(filterValue?.endDate, datum[filterKey] as string)),\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,eAAe,sBAAsB;AAE9C,MAAM,iCAAiC,CACrC,UACsE;AACtE,MAAI,OAAO,UAAU
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,eAAe,sBAAsB;AAE9C,MAAM,iCAAiC,CACrC,UACsE;AACtE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MAAI,OAAQ,MAAgC,cAAc,SAAU,QAAO;AAC3E,MAAI,OAAQ,MAA8B,YAAY,SAAU,QAAO;AACvE,SAAO;AACT;AAEO,MAAM,oBAA+D,CAC1E,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,+BAA+B,WAAW;AAC7C,UAAM,IAAI;AAAA,MACR,yGAAyG,KAAK;AAAA,QAC5G;AAAA,MACF,CAAC;AAAA,IACH;AAEF,SAAO,eAAe;AAAA,IACpB,CAAC,UACC,EAAE,aAAa,aAAa,aAAa,YACxC,eAAe,aAAa,WAAW,MAAM,SAAS,CAAW,KAChE,cAAc,aAAa,SAAS,MAAM,SAAS,CAAW;AAAA,EACpE;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,21 +2,15 @@ import * as React from "react";
|
|
|
2
2
|
import { dateRangeFilterFn } from "./dateRangeFilterFn.js";
|
|
3
3
|
import { singleDateFilterFn } from "./singleDateFilterFn.js";
|
|
4
4
|
const isFilterValueValidForDateSwitcher = (value) => {
|
|
5
|
-
if (typeof value !== "object")
|
|
6
|
-
|
|
7
|
-
if (value
|
|
8
|
-
|
|
9
|
-
if (
|
|
10
|
-
return false;
|
|
11
|
-
if (typeof value.startDate !== "string")
|
|
12
|
-
return false;
|
|
13
|
-
if (typeof value.isDateRange !== "boolean")
|
|
14
|
-
return false;
|
|
5
|
+
if (typeof value !== "object") return false;
|
|
6
|
+
if (value === null) return false;
|
|
7
|
+
if (Array.isArray(value)) return false;
|
|
8
|
+
if (typeof value.startDate !== "string") return false;
|
|
9
|
+
if (typeof value.isDateRange !== "boolean") return false;
|
|
15
10
|
return true;
|
|
16
11
|
};
|
|
17
12
|
const dateSwitcherFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
18
|
-
if (!filterValue)
|
|
19
|
-
return unfilteredData;
|
|
13
|
+
if (!filterValue) return unfilteredData;
|
|
20
14
|
if (!isFilterValueValidForDateSwitcher(filterValue))
|
|
21
15
|
throw new Error(
|
|
22
16
|
`Invalid filter value for date switcher filter, expected { startDate: string, isDateRange: boolean } received: ${JSON.stringify(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/dateSwitcherFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { dateRangeFilterFn } from './dateRangeFilterFn.js';\nimport { singleDateFilterFn } from './singleDateFilterFn.js';\nimport type { DSDataTableT } from '../../react-desc-prop-types.js';\n\nexport const isFilterValueValidForDateSwitcher = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxDateSwitcher>[2] => {\n if (typeof value !== 'object') return false;\n if (value === null) return false;\n if (Array.isArray(value)) return false;\n if (typeof (value as { startDate: string }).startDate !== 'string') return false;\n if (typeof (value as { isDateRange: boolean }).isDateRange !== 'boolean') return false;\n return true;\n};\n\nexport const dateSwitcherFilterFn: DSDataTableT.FilterFnOutOfTheBoxDateSwitcher = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isFilterValueValidForDateSwitcher(filterValue))\n throw new Error(\n `Invalid filter value for date switcher filter, expected { startDate: string, isDateRange: boolean } received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n return filterValue.isDateRange\n ? dateRangeFilterFn(unfilteredData, filterKey, filterValue)\n : singleDateFilterFn(unfilteredData, filterKey, filterValue.startDate);\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAG5B,MAAM,oCAAoC,CAC/C,UACyE;AACzE,MAAI,OAAO,UAAU
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAG5B,MAAM,oCAAoC,CAC/C,UACyE;AACzE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MAAI,OAAQ,MAAgC,cAAc,SAAU,QAAO;AAC3E,MAAI,OAAQ,MAAmC,gBAAgB,UAAW,QAAO;AACjF,SAAO;AACT;AAEO,MAAM,uBAAqE,CAChF,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,kCAAkC,WAAW;AAChD,UAAM,IAAI;AAAA,MACR,iHAAiH,KAAK;AAAA,QACpH;AAAA,MACF,CAAC;AAAA,IACH;AACF,SAAO,YAAY,cACf,kBAAkB,gBAAgB,WAAW,WAAW,IACxD,mBAAmB,gBAAgB,WAAW,YAAY,SAAS;AACzE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { EMPTY_FILTER } from "../../configs/constants.js";
|
|
3
3
|
const isFilterValueValidForMultiSelect = (value) => {
|
|
4
|
-
if (!Array.isArray(value))
|
|
5
|
-
|
|
6
|
-
if (value.length === 0)
|
|
7
|
-
return true;
|
|
4
|
+
if (!Array.isArray(value)) return false;
|
|
5
|
+
if (value.length === 0) return true;
|
|
8
6
|
return value.every((item) => typeof item === "object" && "label" in item && "value" in item);
|
|
9
7
|
};
|
|
10
8
|
const multiSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
11
|
-
if (!filterValue)
|
|
12
|
-
return unfilteredData;
|
|
9
|
+
if (!filterValue) return unfilteredData;
|
|
13
10
|
if (!isFilterValueValidForMultiSelect(filterValue))
|
|
14
11
|
throw new Error(
|
|
15
12
|
`Invalid filter value for multi select filter, expected { label: string, value: string }[] received: ${JSON.stringify(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/multiSelectFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { EMPTY_FILTER } from '../../configs/constants.js';\nimport type { DSDataTableT } from '../../react-desc-prop-types.js';\n\nexport const isFilterValueValidForMultiSelect = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxMultiSelect>[2] => {\n if (!Array.isArray(value)) return false;\n if (value.length === 0) return true;\n return value.every((item) => typeof item === 'object' && 'label' in item && 'value' in item);\n};\n\nexport const multiSelectFilterFn: DSDataTableT.FilterFnOutOfTheBoxMultiSelect = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isFilterValueValidForMultiSelect(filterValue))\n throw new Error(\n `Invalid filter value for multi select filter, expected { label: string, value: string }[] received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n\n return unfilteredData.filter((datum) =>\n filterValue.some((item) => {\n if (item.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return item.label === String(datum[filterKey]);\n }),\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,oBAAoB;AAGtB,MAAM,mCAAmC,CAC9C,UACwE;AACxE,MAAI,CAAC,MAAM,QAAQ,KAAK
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,oBAAoB;AAGtB,MAAM,mCAAmC,CAC9C,UACwE;AACxE,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM,MAAM,CAAC,SAAS,OAAO,SAAS,YAAY,WAAW,QAAQ,WAAW,IAAI;AAC7F;AAEO,MAAM,sBAAmE,CAC9E,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,iCAAiC,WAAW;AAC/C,UAAM,IAAI;AAAA,MACR,uGAAuG,KAAK;AAAA,QAC1G;AAAA,MACF,CAAC;AAAA,IACH;AAEF,SAAO,eAAe;AAAA,IAAO,CAAC,UAC5B,YAAY,KAAK,CAAC,SAAS;AACzB,UAAI,KAAK,UAAU,cAAc;AAC/B,eAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,MAC7F;AACA,aAAO,KAAK,UAAU,OAAO,MAAM,SAAS,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
const isEmpty = (number) => number === null || number === void 0;
|
|
3
3
|
const isFilterValueValidForNumberRange = (value) => {
|
|
4
|
-
if (typeof value !== "object")
|
|
5
|
-
|
|
6
|
-
if (value
|
|
7
|
-
return false;
|
|
8
|
-
if (Array.isArray(value))
|
|
9
|
-
return false;
|
|
4
|
+
if (typeof value !== "object") return false;
|
|
5
|
+
if (value === null) return false;
|
|
6
|
+
if (Array.isArray(value)) return false;
|
|
10
7
|
if (typeof value.from !== "number" && value.from !== null && value.from !== void 0)
|
|
11
8
|
return false;
|
|
12
9
|
if (typeof value.to !== "number" && value.to !== null && value.to !== void 0)
|
|
@@ -14,8 +11,7 @@ const isFilterValueValidForNumberRange = (value) => {
|
|
|
14
11
|
return true;
|
|
15
12
|
};
|
|
16
13
|
const numberRangeFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
17
|
-
if (!filterValue)
|
|
18
|
-
return unfilteredData;
|
|
14
|
+
if (!filterValue) return unfilteredData;
|
|
19
15
|
if (!isFilterValueValidForNumberRange(filterValue))
|
|
20
16
|
throw new Error(
|
|
21
17
|
`Invalid filter value for number range filter, expected { from: number | null | undefined, to: number | null | undefined } received: ${JSON.stringify(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/numberRangeFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSDataTableT } from '../../react-desc-prop-types.js';\n\nconst isEmpty = (number: number | null | undefined): number is null | undefined =>\n number === null || number === undefined;\n\ntype PossibleFrom = { from?: number | null };\ntype PossibleTo = { to?: number | null };\n\nexport const isFilterValueValidForNumberRange = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxNumberRange>[2] => {\n if (typeof value !== 'object') return false;\n if (value === null) return false;\n if (Array.isArray(value)) return false;\n if (\n typeof (value as PossibleFrom).from !== 'number' &&\n (value as PossibleFrom).from !== null &&\n (value as PossibleFrom).from !== undefined\n )\n return false;\n if (\n typeof (value as PossibleTo).to !== 'number' &&\n (value as PossibleTo).to !== null &&\n (value as PossibleTo).to !== undefined\n )\n return false;\n return true;\n};\n\nexport const numberRangeFilterFn: DSDataTableT.FilterFnOutOfTheBoxNumberRange = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isFilterValueValidForNumberRange(filterValue))\n throw new Error(\n `Invalid filter value for number range filter, expected { from: number | null | undefined, to: number | null | undefined } received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n return unfilteredData.filter(\n (datum) =>\n isEmpty(filterValue.from) ||\n isEmpty(filterValue?.to) ||\n ((datum[filterKey] as number) >= filterValue.from && (datum[filterKey] as number) <= filterValue.to),\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACEvB,MAAM,UAAU,CAAC,WACf,WAAW,QAAQ,WAAW;AAKzB,MAAM,mCAAmC,CAC9C,UACwE;AACxE,MAAI,OAAO,UAAU
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACEvB,MAAM,UAAU,CAAC,WACf,WAAW,QAAQ,WAAW;AAKzB,MAAM,mCAAmC,CAC9C,UACwE;AACxE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MACE,OAAQ,MAAuB,SAAS,YACvC,MAAuB,SAAS,QAChC,MAAuB,SAAS;AAEjC,WAAO;AACT,MACE,OAAQ,MAAqB,OAAO,YACnC,MAAqB,OAAO,QAC5B,MAAqB,OAAO;AAE7B,WAAO;AACT,SAAO;AACT;AAEO,MAAM,sBAAmE,CAC9E,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,iCAAiC,WAAW;AAC/C,UAAM,IAAI;AAAA,MACR,uIAAuI,KAAK;AAAA,QAC1I;AAAA,MACF,CAAC;AAAA,IACH;AACF,SAAO,eAAe;AAAA,IACpB,CAAC,UACC,QAAQ,YAAY,IAAI,KACxB,QAAQ,aAAa,EAAE,KACrB,MAAM,SAAS,KAAgB,YAAY,QAAS,MAAM,SAAS,KAAgB,YAAY;AAAA,EACrG;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,8 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import { isSame } from "./utilities.js";
|
|
3
3
|
const isValidFilterValueForSingleDate = (value) => typeof value === "string" && value.length === 10 && value[2] === "/" && value[5] === "/";
|
|
4
4
|
const singleDateFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
5
|
-
if (!filterValue)
|
|
6
|
-
return unfilteredData;
|
|
5
|
+
if (!filterValue) return unfilteredData;
|
|
7
6
|
if (!isValidFilterValueForSingleDate(filterValue))
|
|
8
7
|
throw new Error(
|
|
9
8
|
`Invalid filter value for single date filter, expected 'mm/dd/yyyy' received: ${JSON.stringify(filterValue)}`
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/singleDateFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSDataTableT } from '../../react-desc-prop-types.js';\nimport { isSame } from './utilities.js';\n\n// value is a string in the format 'mm/dd/yyyy'\n// when filling the value partially, we use the _ placeholder e.g. 'mm/dd/____' | '__/__/____' | '01/1_/____'\n\nexport const isValidFilterValueForSingleDate = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxSingleDate>[2] =>\n typeof value === 'string' && value.length === 10 && value[2] === '/' && value[5] === '/';\n\nexport const singleDateFilterFn: DSDataTableT.FilterFnOutOfTheBoxSingleDate = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isValidFilterValueForSingleDate(filterValue))\n throw new Error(\n `Invalid filter value for single date filter, expected 'mm/dd/yyyy' received: ${JSON.stringify(filterValue)}`,\n );\n return unfilteredData.filter((datum) => isSame(filterValue, datum[filterKey] as string));\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,cAAc;AAKhB,MAAM,kCAAkC,CAC7C,UAEA,OAAO,UAAU,YAAY,MAAM,WAAW,MAAM,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM;AAEhF,MAAM,qBAAiE,CAC5E,gBACA,WACA,gBACG;AACH,MAAI,CAAC
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,cAAc;AAKhB,MAAM,kCAAkC,CAC7C,UAEA,OAAO,UAAU,YAAY,MAAM,WAAW,MAAM,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM;AAEhF,MAAM,qBAAiE,CAC5E,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,gCAAgC,WAAW;AAC9C,UAAM,IAAI;AAAA,MACR,gFAAgF,KAAK,UAAU,WAAW,CAAC;AAAA,IAC7G;AACF,SAAO,eAAe,OAAO,CAAC,UAAU,OAAO,aAAa,MAAM,SAAS,CAAW,CAAC;AACzF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { EMPTY_FILTER } from "../../configs/constants.js";
|
|
3
3
|
const isValueValidForSingleSelect = (value) => {
|
|
4
|
-
if (typeof value !== "object")
|
|
5
|
-
|
|
6
|
-
if (value
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
return false;
|
|
10
|
-
if (typeof value.label !== "string")
|
|
11
|
-
return false;
|
|
12
|
-
if (typeof value.value !== "string")
|
|
13
|
-
return false;
|
|
4
|
+
if (typeof value !== "object") return false;
|
|
5
|
+
if (value === null) return false;
|
|
6
|
+
if (Array.isArray(value)) return false;
|
|
7
|
+
if (typeof value.label !== "string") return false;
|
|
8
|
+
if (typeof value.value !== "string") return false;
|
|
14
9
|
return true;
|
|
15
10
|
};
|
|
16
11
|
const singleSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
17
|
-
if (!filterValue)
|
|
18
|
-
return unfilteredData;
|
|
12
|
+
if (!filterValue) return unfilteredData;
|
|
19
13
|
if (!isValueValidForSingleSelect(filterValue))
|
|
20
14
|
throw new Error(
|
|
21
15
|
`Invalid filter value for single select filter, expected { label: string, value: string } received: ${JSON.stringify(
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/singleSelectFilterFn.tsx"],
|
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSDataTableT } from '../../react-desc-prop-types.js';\nimport { EMPTY_FILTER } from '../../configs/constants.js';\n\nexport const isValueValidForSingleSelect = (\n value: unknown,\n): value is Parameters<DSDataTableT.FilterFnOutOfTheBoxSingleSelect>[2] => {\n if (typeof value !== 'object') return false;\n if (value === null) return false;\n if (Array.isArray(value)) return false;\n if (typeof (value as { label: string }).label !== 'string') return false;\n if (typeof (value as { value: string }).value !== 'string') return false;\n return true;\n};\n\nexport const singleSelectFilterFn: DSDataTableT.FilterFnOutOfTheBoxSingleSelect = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (!filterValue) return unfilteredData;\n if (!isValueValidForSingleSelect(filterValue))\n throw new Error(\n `Invalid filter value for single select filter, expected { label: string, value: string } received: ${JSON.stringify(\n filterValue,\n )}`,\n );\n return unfilteredData.filter((datum) => {\n if (filterValue.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return String(datum[filterKey]) === filterValue.label;\n });\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,oBAAoB;AAEtB,MAAM,8BAA8B,CACzC,UACyE;AACzE,MAAI,OAAO,UAAU
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,oBAAoB;AAEtB,MAAM,8BAA8B,CACzC,UACyE;AACzE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MAAI,OAAQ,MAA4B,UAAU,SAAU,QAAO;AACnE,MAAI,OAAQ,MAA4B,UAAU,SAAU,QAAO;AACnE,SAAO;AACT;AAEO,MAAM,uBAAqE,CAChF,gBACA,WACA,gBACG;AACH,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,4BAA4B,WAAW;AAC1C,UAAM,IAAI;AAAA,MACR,sGAAsG,KAAK;AAAA,QACzG;AAAA,MACF,CAAC;AAAA,IACH;AACF,SAAO,eAAe,OAAO,CAAC,UAAU;AACtC,QAAI,YAAY,UAAU,cAAc;AACtC,aAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,IAC7F;AACA,WAAO,OAAO,MAAM,SAAS,CAAC,MAAM,YAAY;AAAA,EAClD,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|