@multiplatform.one/table 7.10.0 → 7.15.0
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/README.md +61 -1
- package/dist/cjs/components/ChildTable/index.cjs +8 -2
- package/dist/cjs/components/ChildTable/index.native.js +8 -2
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.cjs +77 -111
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +89 -129
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableCardControls.cjs +90 -54
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js +93 -56
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +68 -9
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +78 -11
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +72 -70
- package/dist/cjs/components/DataTableCell/index.cjs +2 -2
- package/dist/cjs/components/DataTableCell/index.native.js +2 -11
- package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.cjs +135 -158
- package/dist/cjs/components/DataTableDateFilter/index.native.js +153 -183
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.cjs +122 -139
- package/dist/cjs/components/DataTableExport/index.native.js +135 -157
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterButton/index.cjs +14 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js +15 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.cjs +192 -212
- package/dist/cjs/components/DataTableGrouping/index.native.js +209 -230
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.cjs +103 -115
- package/dist/cjs/components/DataTableSearch/index.native.js +111 -123
- package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.cjs +161 -101
- package/dist/cjs/components/DataTableToolbar/index.native.js +168 -109
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.cjs +38 -54
- package/dist/cjs/components/DataTableViewOptions/index.native.js +40 -56
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/FilterOperatorValueEditor/index.cjs +3 -11
- package/dist/cjs/components/FilterOperatorValueEditor/index.native.js +3 -11
- package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.cjs +2 -6
- package/dist/cjs/components/SimpleTable/index.native.js +2 -6
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/RowDetailEditor.cjs +190 -0
- package/dist/cjs/components/TableInput/RowDetailEditor.native.js +172 -0
- package/dist/cjs/components/TableInput/RowDetailEditor.native.js.map +1 -0
- package/dist/cjs/components/TableInput/index.cjs +42 -5
- package/dist/cjs/components/TableInput/index.native.js +64 -1
- package/dist/cjs/components/TableInput/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/shared.cjs +8 -0
- package/dist/cjs/components/TableInput/shared.native.js +10 -0
- package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTable.cjs +43 -2
- package/dist/cjs/hooks/useDataTable.native.js +49 -3
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/utils/rowPress.cjs +4 -1
- package/dist/cjs/utils/rowPress.native.js +4 -1
- package/dist/cjs/utils/rowPress.native.js.map +1 -1
- package/dist/esm/components/ChildTable/index.mjs +8 -2
- package/dist/esm/components/ChildTable/index.mjs.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js +8 -2
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.mjs +80 -114
- package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js +92 -132
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.mjs +89 -54
- package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.native.js +92 -56
- package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +70 -11
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +80 -13
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs +76 -74
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/index.mjs +3 -3
- package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/index.native.js +3 -12
- package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.mjs +137 -160
- package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js +155 -185
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.mjs +124 -141
- package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js +137 -159
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.mjs +14 -1
- package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js +15 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.mjs +194 -214
- package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js +211 -232
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.mjs +105 -117
- package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/esm/components/DataTableSearch/index.native.js +113 -125
- package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.mjs +165 -106
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +172 -114
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.mjs +40 -56
- package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js +42 -58
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/FilterOperatorValueEditor/index.mjs +3 -11
- package/dist/esm/components/FilterOperatorValueEditor/index.mjs.map +1 -1
- package/dist/esm/components/FilterOperatorValueEditor/index.native.js +3 -11
- package/dist/esm/components/FilterOperatorValueEditor/index.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.mjs +3 -7
- package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js +3 -7
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/RowDetailEditor.mjs +165 -0
- package/dist/esm/components/TableInput/RowDetailEditor.mjs.map +1 -0
- package/dist/esm/components/TableInput/RowDetailEditor.native.js +144 -0
- package/dist/esm/components/TableInput/RowDetailEditor.native.js.map +1 -0
- package/dist/esm/components/TableInput/index.mjs +42 -5
- package/dist/esm/components/TableInput/index.mjs.map +1 -1
- package/dist/esm/components/TableInput/index.native.js +64 -1
- package/dist/esm/components/TableInput/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/shared.mjs +7 -1
- package/dist/esm/components/TableInput/shared.mjs.map +1 -1
- package/dist/esm/components/TableInput/shared.native.js +9 -1
- package/dist/esm/components/TableInput/shared.native.js.map +1 -1
- package/dist/esm/hooks/useDataTable.mjs +43 -2
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +49 -3
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/utils/rowPress.mjs +4 -1
- package/dist/esm/utils/rowPress.mjs.map +1 -1
- package/dist/esm/utils/rowPress.native.js +4 -1
- package/dist/esm/utils/rowPress.native.js.map +1 -1
- package/dist/jsx/components/ChildTable/index.mjs +8 -2
- package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
- package/dist/jsx/components/ChildTable/index.native.js +8 -2
- package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs +80 -114
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js +89 -129
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs +89 -54
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js +93 -56
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +70 -11
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +78 -11
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +76 -74
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/index.mjs +3 -3
- package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/index.native.js +2 -11
- package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.mjs +137 -160
- package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.native.js +153 -183
- package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableExport/index.mjs +124 -141
- package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableExport/index.native.js +135 -157
- package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.mjs +14 -1
- package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.native.js +15 -0
- package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.mjs +194 -214
- package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.native.js +209 -230
- package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.mjs +105 -117
- package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.native.js +111 -123
- package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.mjs +165 -106
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +168 -109
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.mjs +40 -56
- package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.native.js +40 -56
- package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/jsx/components/FilterOperatorValueEditor/index.mjs +3 -11
- package/dist/jsx/components/FilterOperatorValueEditor/index.mjs.map +1 -1
- package/dist/jsx/components/FilterOperatorValueEditor/index.native.js +3 -11
- package/dist/jsx/components/FilterOperatorValueEditor/index.native.js.map +1 -1
- package/dist/jsx/components/SimpleTable/index.mjs +3 -7
- package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
- package/dist/jsx/components/SimpleTable/index.native.js +2 -6
- package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/RowDetailEditor.mjs +165 -0
- package/dist/jsx/components/TableInput/RowDetailEditor.mjs.map +1 -0
- package/dist/jsx/components/TableInput/RowDetailEditor.native.js +172 -0
- package/dist/jsx/components/TableInput/RowDetailEditor.native.js.map +1 -0
- package/dist/jsx/components/TableInput/index.mjs +42 -5
- package/dist/jsx/components/TableInput/index.mjs.map +1 -1
- package/dist/jsx/components/TableInput/index.native.js +64 -1
- package/dist/jsx/components/TableInput/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/shared.mjs +7 -1
- package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
- package/dist/jsx/components/TableInput/shared.native.js +10 -0
- package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
- package/dist/jsx/hooks/useDataTable.mjs +43 -2
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +49 -3
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/utils/rowPress.mjs +4 -1
- package/dist/jsx/utils/rowPress.mjs.map +1 -1
- package/dist/jsx/utils/rowPress.native.js +4 -1
- package/dist/jsx/utils/rowPress.native.js.map +1 -1
- package/package.json +16 -16
- package/src/components/ChildTable/childTable.cellHidden.spec.tsx +57 -0
- package/src/components/ChildTable/childTable.rowDetail.spec.tsx +120 -0
- package/src/components/ChildTable/index.tsx +16 -0
- package/src/components/ColumnHeaderFilter/index.tsx +89 -116
- package/src/components/DataTable/DataTable.stories.tsx +130 -6
- package/src/components/DataTable/DataTableCardControls.stories.tsx +61 -2
- package/src/components/DataTable/DataTableCardControls.tsx +92 -66
- package/src/components/DataTable/DataTableRoot.tsx +109 -18
- package/src/components/DataTable/cardLayout.spec.tsx +4 -3
- package/src/components/DataTable/cardToolbar.spec.tsx +238 -0
- package/src/components/DataTable/chromeInterplay.spec.tsx +7 -5
- package/src/components/DataTable/columnWidthLayout.spec.tsx +189 -0
- package/src/components/DataTable/dataTableCardControls.spec.tsx +3 -2
- package/src/components/DataTable/dataTableMobileCards.spec.tsx +1 -4
- package/src/components/DataTable/footerLayout.spec.tsx +250 -0
- package/src/components/DataTable/headerContainment.spec.tsx +91 -0
- package/src/components/DataTable/pinningGeometry.spec.tsx +66 -1
- package/src/components/DataTable/rowPress.spec.tsx +2 -6
- package/src/components/DataTableBulkActions/DataTableBulkActions.stories.tsx +5 -4
- package/src/components/DataTableCell/CellModalEditor.tsx +95 -75
- package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +12 -2
- package/src/components/DataTableCell/cellModalEditor.spec.tsx +75 -49
- package/src/components/DataTableCell/dataTableCell.spec.tsx +31 -14
- package/src/components/DataTableCell/index.tsx +3 -2
- package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +6 -3
- package/src/components/DataTableDateFilter/index.tsx +151 -180
- package/src/components/DataTableExport/DataTableExport.spec.tsx +42 -18
- package/src/components/DataTableExport/index.tsx +135 -142
- package/src/components/DataTableFilterButton/index.tsx +9 -0
- package/src/components/DataTableGrouping/index.tsx +193 -195
- package/src/components/DataTableSearch/index.tsx +111 -109
- package/src/components/DataTableToolbar/index.tsx +179 -107
- package/src/components/DataTableViewOptions/DataTableViewOptions.stories.tsx +52 -0
- package/src/components/DataTableViewOptions/index.tsx +32 -40
- package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.spec.tsx +64 -2
- package/src/components/FilterOperatorValueEditor/index.tsx +0 -8
- package/src/components/SimpleTable/index.tsx +3 -2
- package/src/components/SimpleTable/simpleTable.spec.tsx +15 -0
- package/src/components/Table/accessibility.spec.tsx +7 -19
- package/src/components/TableInput/RowDetailEditor.native.tsx +134 -0
- package/src/components/TableInput/RowDetailEditor.tsx +173 -0
- package/src/components/TableInput/index.native.tsx +49 -1
- package/src/components/TableInput/index.tsx +65 -10
- package/src/components/TableInput/shared.ts +29 -0
- package/src/components/tableDropdowns.spec.tsx +172 -0
- package/src/hooks/useDataTable.spec.ts +153 -0
- package/src/hooks/useDataTable.ts +38 -2
- package/src/index.ts +1 -0
- package/src/types.ts +14 -12
- package/src/utils/rowPress.ts +3 -0
- package/types/components/ChildTable/index.d.ts +10 -0
- package/types/components/ChildTable/index.d.ts.map +1 -1
- package/types/components/ColumnHeaderFilter/index.d.ts +1 -1
- package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
- package/types/components/DataTable/DataTableCardControls.d.ts +3 -0
- package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTableCell/CellModalEditor.d.ts +10 -7
- package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/index.d.ts.map +1 -1
- package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
- package/types/components/DataTableFilterButton/index.d.ts +2 -1
- package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
- package/types/components/DataTableGrouping/index.d.ts.map +1 -1
- package/types/components/DataTableSearch/index.d.ts.map +1 -1
- package/types/components/DataTableToolbar/index.d.ts +1 -0
- package/types/components/DataTableToolbar/index.d.ts.map +1 -1
- package/types/components/FilterOperatorValueEditor/index.d.ts.map +1 -1
- package/types/components/SimpleTable/index.d.ts.map +1 -1
- package/types/components/TableInput/RowDetailEditor.d.ts +24 -0
- package/types/components/TableInput/RowDetailEditor.d.ts.map +1 -0
- package/types/components/TableInput/RowDetailEditor.native.d.ts +11 -0
- package/types/components/TableInput/RowDetailEditor.native.d.ts.map +1 -0
- package/types/components/TableInput/index.d.ts +11 -2
- package/types/components/TableInput/index.d.ts.map +1 -1
- package/types/components/TableInput/index.native.d.ts +8 -1
- package/types/components/TableInput/index.native.d.ts.map +1 -1
- package/types/components/TableInput/shared.d.ts +11 -0
- package/types/components/TableInput/shared.d.ts.map +1 -1
- package/types/hooks/useDataTable.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/types.d.ts +14 -12
- package/types/types.d.ts.map +1 -1
- package/types/utils/rowPress.d.ts.map +1 -1
|
@@ -2,9 +2,14 @@ import { SlidersHorizontalIcon } from "@phosphor-icons/react";
|
|
|
2
2
|
import { sizeRecipeForToken, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
3
|
import type React from "react";
|
|
4
4
|
import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
Button,
|
|
7
|
+
Checkbox,
|
|
8
|
+
FloatingPanel,
|
|
9
|
+
SearchInput,
|
|
10
|
+
formCommonColors,
|
|
11
|
+
} from "@multiplatform.one/forms";
|
|
12
|
+
import { Separator, Text, View, XStack, YStack, isWeb } from "tamagui";
|
|
8
13
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
9
14
|
import { t } from "../../shared/t";
|
|
10
15
|
import { bidiIsolate } from "../../utils/withInterp";
|
|
@@ -165,7 +170,7 @@ export function DataTableSearch<T = any>(props: DataTableSearchProps<T>) {
|
|
|
165
170
|
</View>
|
|
166
171
|
|
|
167
172
|
{showAdvancedOptions && (
|
|
168
|
-
<
|
|
173
|
+
<SearchOptionsPanel
|
|
169
174
|
searchOptions={searchOptions}
|
|
170
175
|
onOptionsChange={handleOptionsChange}
|
|
171
176
|
columns={searchableColumns}
|
|
@@ -201,7 +206,7 @@ export function DataTableSearch<T = any>(props: DataTableSearchProps<T>) {
|
|
|
201
206
|
);
|
|
202
207
|
}
|
|
203
208
|
|
|
204
|
-
interface
|
|
209
|
+
interface SearchOptionsPanelProps {
|
|
205
210
|
searchOptions: SearchOptions;
|
|
206
211
|
onOptionsChange: (options: Partial<SearchOptions>) => void;
|
|
207
212
|
columns: Array<{
|
|
@@ -217,7 +222,7 @@ interface SearchOptionsPopoverProps {
|
|
|
217
222
|
optionsActive: boolean;
|
|
218
223
|
}
|
|
219
224
|
|
|
220
|
-
function
|
|
225
|
+
function SearchOptionsPanel({
|
|
221
226
|
searchOptions,
|
|
222
227
|
onOptionsChange,
|
|
223
228
|
columns,
|
|
@@ -226,7 +231,7 @@ function SearchOptionsPopover({
|
|
|
226
231
|
disabled,
|
|
227
232
|
iconPx,
|
|
228
233
|
optionsActive,
|
|
229
|
-
}:
|
|
234
|
+
}: SearchOptionsPanelProps) {
|
|
230
235
|
const { knobProps } = useResolvedKnobs();
|
|
231
236
|
const [open, setOpen] = useState(false);
|
|
232
237
|
|
|
@@ -245,113 +250,110 @@ function SearchOptionsPopover({
|
|
|
245
250
|
onOptionsChange({ columns: [] });
|
|
246
251
|
};
|
|
247
252
|
|
|
248
|
-
const
|
|
249
|
-
|
|
253
|
+
const trigger = (
|
|
254
|
+
<Button
|
|
255
|
+
size={knobProps.sizeToken}
|
|
256
|
+
accent={optionsActive}
|
|
257
|
+
icon={<SlidersHorizontalIcon size={iconPx} weight={optionsActive ? "fill" : "regular"} />}
|
|
258
|
+
disabled={disabled}
|
|
259
|
+
aria-label={t("Search options")}
|
|
260
|
+
aria-expanded={open}
|
|
261
|
+
aria-haspopup="dialog"
|
|
262
|
+
/>
|
|
263
|
+
);
|
|
250
264
|
|
|
251
265
|
return (
|
|
252
|
-
<
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
266
|
+
<FloatingPanel
|
|
267
|
+
open={open}
|
|
268
|
+
onOpenChange={setOpen}
|
|
269
|
+
trigger={trigger}
|
|
270
|
+
triggerSizing="content"
|
|
271
|
+
widthMode="fit-content"
|
|
272
|
+
disabled={disabled}
|
|
273
|
+
scrollable
|
|
274
|
+
>
|
|
275
|
+
<YStack {...knobProps.gapLg} minWidth={280} data-dismiss-class="compose">
|
|
276
|
+
<Text {...knobProps.heading} {...knobProps.label} fontWeight="400">
|
|
277
|
+
{t("Search Options")}
|
|
278
|
+
</Text>
|
|
264
279
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
280
|
+
<YStack {...knobProps.gap}>
|
|
281
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
282
|
+
{t("Search Settings")}
|
|
283
|
+
</Text>
|
|
284
|
+
|
|
285
|
+
<Checkbox
|
|
286
|
+
compact
|
|
287
|
+
label={t("Case sensitive")}
|
|
288
|
+
checked={searchOptions.caseSensitive}
|
|
289
|
+
onCheckedChange={(checked) => onOptionsChange({ caseSensitive: checked as boolean })}
|
|
290
|
+
/>
|
|
291
|
+
|
|
292
|
+
<Checkbox
|
|
293
|
+
compact
|
|
294
|
+
label={t("Whole word only")}
|
|
295
|
+
checked={searchOptions.wholeWord}
|
|
296
|
+
onCheckedChange={(checked) => onOptionsChange({ wholeWord: checked as boolean })}
|
|
297
|
+
/>
|
|
298
|
+
|
|
299
|
+
<Checkbox
|
|
300
|
+
compact
|
|
301
|
+
label={t("Use regex")}
|
|
302
|
+
checked={searchOptions.regex}
|
|
303
|
+
onCheckedChange={(checked) => onOptionsChange({ regex: checked as boolean })}
|
|
304
|
+
/>
|
|
305
|
+
|
|
306
|
+
<Checkbox
|
|
307
|
+
compact
|
|
308
|
+
label={t("Highlight results")}
|
|
309
|
+
checked={searchOptions.highlightResults}
|
|
310
|
+
onCheckedChange={(checked) => onOptionsChange({ highlightResults: checked as boolean })}
|
|
311
|
+
/>
|
|
312
|
+
</YStack>
|
|
313
|
+
|
|
314
|
+
<Separator />
|
|
315
|
+
|
|
316
|
+
<YStack {...knobProps.gap}>
|
|
317
|
+
<XStack justifyContent="space-between" alignItems="center">
|
|
318
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
319
|
+
{t("Search Columns")}
|
|
270
320
|
</Text>
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
checked={searchOptions.highlightResults}
|
|
304
|
-
onCheckedChange={(checked) =>
|
|
305
|
-
onOptionsChange({ highlightResults: checked as boolean })
|
|
306
|
-
}
|
|
307
|
-
/>
|
|
308
|
-
</YStack>
|
|
309
|
-
|
|
310
|
-
<Separator />
|
|
311
|
-
|
|
312
|
-
<YStack {...knobProps.gap}>
|
|
313
|
-
<XStack justifyContent="space-between" alignItems="center">
|
|
314
|
-
<Text {...knobProps.label} fontWeight="400">
|
|
315
|
-
{t("Search Columns")}
|
|
316
|
-
</Text>
|
|
317
|
-
<Text {...knobProps.label} color={formCommonColors.muted}>
|
|
318
|
-
{bidiIsolate(
|
|
319
|
-
t("{{selected}} of {{total}}", {
|
|
320
|
-
selected: selectedColumnCount,
|
|
321
|
-
total: totalColumnCount,
|
|
322
|
-
}),
|
|
323
|
-
)}
|
|
324
|
-
</Text>
|
|
325
|
-
</XStack>
|
|
326
|
-
|
|
327
|
-
<XStack {...knobProps.gap}>
|
|
328
|
-
<Button size="$2" compact onPress={handleSelectAllColumns}>
|
|
329
|
-
{t("All")}
|
|
330
|
-
</Button>
|
|
331
|
-
<Button size="$2" compact onPress={handleSelectNoColumns}>
|
|
332
|
-
{t("None")}
|
|
333
|
-
</Button>
|
|
334
|
-
</XStack>
|
|
335
|
-
|
|
336
|
-
<YStack gap="$1">
|
|
337
|
-
{columns.map((col) => {
|
|
338
|
-
const key = col.accessorKey || col.id || "";
|
|
339
|
-
return (
|
|
340
|
-
<Checkbox
|
|
341
|
-
key={key}
|
|
342
|
-
compact
|
|
343
|
-
label={col.header || key}
|
|
344
|
-
checked={searchOptions.columns.includes(key)}
|
|
345
|
-
onCheckedChange={(checked) => handleColumnToggle(key, checked as boolean)}
|
|
346
|
-
/>
|
|
347
|
-
);
|
|
348
|
-
})}
|
|
349
|
-
</YStack>
|
|
350
|
-
</YStack>
|
|
321
|
+
<Text {...knobProps.label} color={formCommonColors.muted}>
|
|
322
|
+
{bidiIsolate(
|
|
323
|
+
t("{{selected}} of {{total}}", {
|
|
324
|
+
selected: selectedColumnCount,
|
|
325
|
+
total: totalColumnCount,
|
|
326
|
+
}),
|
|
327
|
+
)}
|
|
328
|
+
</Text>
|
|
329
|
+
</XStack>
|
|
330
|
+
|
|
331
|
+
<XStack {...knobProps.gap}>
|
|
332
|
+
<Button size="$2" compact onPress={handleSelectAllColumns}>
|
|
333
|
+
{t("All")}
|
|
334
|
+
</Button>
|
|
335
|
+
<Button size="$2" compact onPress={handleSelectNoColumns}>
|
|
336
|
+
{t("None")}
|
|
337
|
+
</Button>
|
|
338
|
+
</XStack>
|
|
339
|
+
|
|
340
|
+
<YStack gap="$1">
|
|
341
|
+
{columns.map((col) => {
|
|
342
|
+
const key = col.accessorKey || col.id || "";
|
|
343
|
+
return (
|
|
344
|
+
<Checkbox
|
|
345
|
+
key={key}
|
|
346
|
+
compact
|
|
347
|
+
label={col.header || key}
|
|
348
|
+
checked={searchOptions.columns.includes(key)}
|
|
349
|
+
onCheckedChange={(checked) => handleColumnToggle(key, checked as boolean)}
|
|
350
|
+
/>
|
|
351
|
+
);
|
|
352
|
+
})}
|
|
351
353
|
</YStack>
|
|
352
|
-
</
|
|
353
|
-
</
|
|
354
|
-
</
|
|
354
|
+
</YStack>
|
|
355
|
+
</YStack>
|
|
356
|
+
</FloatingPanel>
|
|
355
357
|
);
|
|
356
358
|
}
|
|
357
359
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { CaretDownIcon, FloppyDiskIcon } from "@phosphor-icons/react";
|
|
2
2
|
import { DropdownMenu } from "@multiplatform.one/components";
|
|
3
|
-
import { Button, Input, SearchInput, Spinner } from "@multiplatform.one/forms";
|
|
3
|
+
import { Button, FloatingPanel, Input, SearchInput, Spinner } from "@multiplatform.one/forms";
|
|
4
4
|
import { hairline, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
5
5
|
import { RovingFocusGroup } from "@tamagui/roving-focus";
|
|
6
6
|
import type React from "react";
|
|
7
7
|
import { useState } from "react";
|
|
8
|
-
import {
|
|
8
|
+
import { XStack, YStack } from "tamagui";
|
|
9
9
|
import { t } from "../../shared/t";
|
|
10
10
|
import type { TableView } from "../../types";
|
|
11
11
|
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
12
12
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
13
13
|
import { DataTableExport } from "../DataTableExport";
|
|
14
|
-
import { DataTableFilterButton } from "../DataTableFilterButton";
|
|
14
|
+
import { DataTableCardFilterButton, DataTableFilterButton } from "../DataTableFilterButton";
|
|
15
15
|
|
|
16
16
|
export interface DataTableToolbarProps {
|
|
17
17
|
// Search
|
|
@@ -49,6 +49,17 @@ export interface DataTableToolbarProps {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
52
|
+
return <ToolbarLayout {...props} />;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function DataTableCardToolbar(props: DataTableToolbarProps) {
|
|
56
|
+
return <ToolbarLayout {...props} cardLayout />;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function ToolbarLayout({
|
|
60
|
+
cardLayout = false,
|
|
61
|
+
...props
|
|
62
|
+
}: DataTableToolbarProps & { cardLayout?: boolean }) {
|
|
52
63
|
const ctx = useDataTableState();
|
|
53
64
|
|
|
54
65
|
const globalFilter = props.globalFilter ?? ctx?.state.globalFilter ?? "";
|
|
@@ -108,9 +119,98 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
108
119
|
);
|
|
109
120
|
const hasTrailing = showActionCluster || isFetching;
|
|
110
121
|
|
|
122
|
+
const viewPickerContent = showViewPicker && (
|
|
123
|
+
<DropdownMenu closeOnSelect placement="bottom-end">
|
|
124
|
+
<DropdownMenu.Trigger asChild>
|
|
125
|
+
<RovingFocusGroup.Item focusable asChild>
|
|
126
|
+
<Button
|
|
127
|
+
chromeless
|
|
128
|
+
size={controlSize}
|
|
129
|
+
iconAfter={<CaretDownIcon size={iconPx} />}
|
|
130
|
+
aria-label={t("Saved views")}
|
|
131
|
+
{...(cardLayout ? { minWidth: 0, maxWidth: "100%" as const } : {})}
|
|
132
|
+
aria-haspopup="menu"
|
|
133
|
+
>
|
|
134
|
+
{activeView?.name ?? t("Views")}
|
|
135
|
+
</Button>
|
|
136
|
+
</RovingFocusGroup.Item>
|
|
137
|
+
</DropdownMenu.Trigger>
|
|
138
|
+
<DropdownMenu.Content>
|
|
139
|
+
{views.map((view) => (
|
|
140
|
+
<DropdownMenu.CheckboxItem
|
|
141
|
+
key={view.id}
|
|
142
|
+
checked={view.id === activeViewId}
|
|
143
|
+
closeOnSelect
|
|
144
|
+
onSelect={() => onLoadView(view.id)}
|
|
145
|
+
>
|
|
146
|
+
{view.name}
|
|
147
|
+
</DropdownMenu.CheckboxItem>
|
|
148
|
+
))}
|
|
149
|
+
</DropdownMenu.Content>
|
|
150
|
+
</DropdownMenu>
|
|
151
|
+
);
|
|
152
|
+
const viewPicker =
|
|
153
|
+
cardLayout && showViewPicker ? (
|
|
154
|
+
<XStack minWidth={0} maxWidth="100%" flexBasis="auto" flexGrow={0} flexShrink={1}>
|
|
155
|
+
{viewPickerContent}
|
|
156
|
+
</XStack>
|
|
157
|
+
) : (
|
|
158
|
+
viewPickerContent
|
|
159
|
+
);
|
|
160
|
+
const saveView = showSave && (
|
|
161
|
+
<FloatingPanel
|
|
162
|
+
open={showSaveViewDialog}
|
|
163
|
+
onOpenChange={setShowSaveViewDialog}
|
|
164
|
+
triggerSizing="content"
|
|
165
|
+
widthMode="fit-content"
|
|
166
|
+
trigger={
|
|
167
|
+
<RovingFocusGroup.Item focusable asChild>
|
|
168
|
+
<Button
|
|
169
|
+
chromeless
|
|
170
|
+
size={controlSize}
|
|
171
|
+
icon={<FloppyDiskIcon size={iconPx} />}
|
|
172
|
+
aria-label={t("Save view")}
|
|
173
|
+
/>
|
|
174
|
+
</RovingFocusGroup.Item>
|
|
175
|
+
}
|
|
176
|
+
>
|
|
177
|
+
<YStack {...knobProps.gap} minWidth={240} data-dismiss-class="compose">
|
|
178
|
+
<Input
|
|
179
|
+
placeholder={t("View name")}
|
|
180
|
+
value={newViewName}
|
|
181
|
+
onChangeText={setNewViewName}
|
|
182
|
+
size={searchSize}
|
|
183
|
+
{...(compact === undefined ? {} : { compact })}
|
|
184
|
+
inputProps={{
|
|
185
|
+
"aria-label": t("View name"),
|
|
186
|
+
onKeyDown: (e: React.KeyboardEvent) => {
|
|
187
|
+
if (e.key === "Enter") handleSaveView();
|
|
188
|
+
},
|
|
189
|
+
}}
|
|
190
|
+
/>
|
|
191
|
+
<XStack {...knobProps.gap} justifyContent="flex-end">
|
|
192
|
+
<Button size={controlSize} onPress={() => setShowSaveViewDialog(false)}>
|
|
193
|
+
{t("Cancel")}
|
|
194
|
+
</Button>
|
|
195
|
+
<Button
|
|
196
|
+
size={controlSize}
|
|
197
|
+
onPress={handleSaveView}
|
|
198
|
+
disabled={!newViewName.trim()}
|
|
199
|
+
disabledReason={t("Enter a view name")}
|
|
200
|
+
>
|
|
201
|
+
{t("Save")}
|
|
202
|
+
</Button>
|
|
203
|
+
</XStack>
|
|
204
|
+
</YStack>
|
|
205
|
+
</FloatingPanel>
|
|
206
|
+
);
|
|
207
|
+
const showSecondary = showViewPicker || showSave || enableExport || isFetching;
|
|
208
|
+
|
|
111
209
|
return (
|
|
112
210
|
<XStack
|
|
113
|
-
alignItems="center"
|
|
211
|
+
alignItems={cardLayout ? "stretch" : "center"}
|
|
212
|
+
flexDirection={cardLayout ? "column" : "row"}
|
|
213
|
+
{...(cardLayout ? { width: "100%" as const, minWidth: 0 } : {})}
|
|
114
214
|
// LC-39: flush band — no painted panel, so no horizontal inset.
|
|
115
215
|
paddingVertical={knobProps.panelPadding.padding}
|
|
116
216
|
paddingHorizontal={0}
|
|
@@ -124,7 +224,12 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
124
224
|
aria-busy={isFetching || undefined}
|
|
125
225
|
>
|
|
126
226
|
{enableGlobalSearch && (
|
|
127
|
-
<XStack
|
|
227
|
+
<XStack
|
|
228
|
+
flex={cardLayout ? undefined : 1}
|
|
229
|
+
minWidth={cardLayout ? 0 : 160}
|
|
230
|
+
maxWidth={cardLayout ? undefined : searchMaxWidth}
|
|
231
|
+
flexShrink={1}
|
|
232
|
+
>
|
|
128
233
|
<SearchInput
|
|
129
234
|
value={globalFilter}
|
|
130
235
|
onChange={onGlobalFilterChange}
|
|
@@ -144,116 +249,83 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
144
249
|
</XStack>
|
|
145
250
|
)}
|
|
146
251
|
|
|
147
|
-
{
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{...knobProps.gap}
|
|
151
|
-
flexShrink={0}
|
|
152
|
-
marginInlineStart={enableGlobalSearch ? "auto" : 0}
|
|
153
|
-
>
|
|
154
|
-
{showActionCluster && (
|
|
252
|
+
{cardLayout ? (
|
|
253
|
+
<>
|
|
254
|
+
{(showFilterButton || customActions) && (
|
|
155
255
|
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
156
|
-
<XStack
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
{
|
|
160
|
-
|
|
256
|
+
<XStack
|
|
257
|
+
data-table-card-primary=""
|
|
258
|
+
width="100%"
|
|
259
|
+
minWidth={0}
|
|
260
|
+
alignItems="center"
|
|
261
|
+
flexWrap="nowrap"
|
|
262
|
+
{...knobProps.gap}
|
|
263
|
+
>
|
|
264
|
+
{showFilterButton && (
|
|
265
|
+
<XStack flexShrink={0}>
|
|
266
|
+
<DataTableCardFilterButton />
|
|
267
|
+
</XStack>
|
|
268
|
+
)}
|
|
161
269
|
{customActions}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
{views.map((view) => (
|
|
180
|
-
<DropdownMenu.CheckboxItem
|
|
181
|
-
key={view.id}
|
|
182
|
-
checked={view.id === activeViewId}
|
|
183
|
-
closeOnSelect
|
|
184
|
-
onSelect={() => onLoadView(view.id)}
|
|
185
|
-
>
|
|
186
|
-
{view.name}
|
|
187
|
-
</DropdownMenu.CheckboxItem>
|
|
188
|
-
))}
|
|
189
|
-
</DropdownMenu.Content>
|
|
190
|
-
</DropdownMenu>
|
|
270
|
+
</XStack>
|
|
271
|
+
</RovingFocusGroup>
|
|
272
|
+
)}
|
|
273
|
+
{showSecondary && (
|
|
274
|
+
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
275
|
+
<XStack
|
|
276
|
+
data-table-card-secondary=""
|
|
277
|
+
width="100%"
|
|
278
|
+
minWidth={0}
|
|
279
|
+
flexWrap="wrap"
|
|
280
|
+
alignItems="center"
|
|
281
|
+
{...knobProps.gap}
|
|
282
|
+
>
|
|
283
|
+
{enableExport && (
|
|
284
|
+
<XStack maxWidth="100%" minWidth={0}>
|
|
285
|
+
<DataTableExport />
|
|
286
|
+
</XStack>
|
|
191
287
|
)}
|
|
192
|
-
|
|
193
|
-
{
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
chromeless
|
|
199
|
-
size={controlSize}
|
|
200
|
-
icon={<FloppyDiskIcon size={iconPx} />}
|
|
201
|
-
aria-label={t("Save view")}
|
|
202
|
-
/>
|
|
203
|
-
</RovingFocusGroup.Item>
|
|
204
|
-
</Popover.Trigger>
|
|
205
|
-
<Popover.Content
|
|
206
|
-
{...knobProps.elevatedSurface}
|
|
207
|
-
{...knobProps.borderRadius}
|
|
208
|
-
borderColor="$color6"
|
|
209
|
-
// LC-24: enter/exitStyle need a `transition` driver on the
|
|
210
|
-
// same element ({...string} spread set nothing).
|
|
211
|
-
transition={knobProps.transition}
|
|
212
|
-
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
213
|
-
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
214
|
-
data-dismiss-class="compose"
|
|
215
|
-
>
|
|
216
|
-
<YStack {...knobProps.gap} {...knobProps.panelPadding} minWidth={240}>
|
|
217
|
-
<Input
|
|
218
|
-
placeholder={t("View name")}
|
|
219
|
-
value={newViewName}
|
|
220
|
-
onChangeText={setNewViewName}
|
|
221
|
-
size={searchSize}
|
|
222
|
-
{...(compact === undefined ? {} : { compact })}
|
|
223
|
-
inputProps={{
|
|
224
|
-
"aria-label": t("View name"),
|
|
225
|
-
onKeyDown: (e: React.KeyboardEvent) => {
|
|
226
|
-
if (e.key === "Enter") handleSaveView();
|
|
227
|
-
},
|
|
228
|
-
}}
|
|
229
|
-
/>
|
|
230
|
-
<XStack {...knobProps.gap} justifyContent="flex-end">
|
|
231
|
-
<Button size={controlSize} onPress={() => setShowSaveViewDialog(false)}>
|
|
232
|
-
{t("Cancel")}
|
|
233
|
-
</Button>
|
|
234
|
-
<Button
|
|
235
|
-
size={controlSize}
|
|
236
|
-
onPress={handleSaveView}
|
|
237
|
-
disabled={!newViewName.trim()}
|
|
238
|
-
disabledReason={t("Enter a view name")}
|
|
239
|
-
>
|
|
240
|
-
{t("Save")}
|
|
241
|
-
</Button>
|
|
242
|
-
</XStack>
|
|
243
|
-
</YStack>
|
|
244
|
-
</Popover.Content>
|
|
245
|
-
</Popover>
|
|
288
|
+
{viewPicker}
|
|
289
|
+
{saveView}
|
|
290
|
+
{isFetching && (
|
|
291
|
+
<XStack alignItems="center" aria-live="polite" data-table-fetching="true">
|
|
292
|
+
<Spinner size="small" />
|
|
293
|
+
</XStack>
|
|
246
294
|
)}
|
|
247
295
|
</XStack>
|
|
248
296
|
</RovingFocusGroup>
|
|
249
297
|
)}
|
|
298
|
+
</>
|
|
299
|
+
) : (
|
|
300
|
+
hasTrailing && (
|
|
301
|
+
<XStack
|
|
302
|
+
alignItems="center"
|
|
303
|
+
{...knobProps.gap}
|
|
304
|
+
flexShrink={0}
|
|
305
|
+
marginInlineStart={enableGlobalSearch ? "auto" : 0}
|
|
306
|
+
>
|
|
307
|
+
{showActionCluster && (
|
|
308
|
+
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
309
|
+
<XStack alignItems="center" {...knobProps.gap}>
|
|
310
|
+
{showFilterButton && <DataTableFilterButton />}
|
|
250
311
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
312
|
+
{enableExport && <DataTableExport />}
|
|
313
|
+
|
|
314
|
+
{customActions}
|
|
315
|
+
|
|
316
|
+
{viewPicker}
|
|
317
|
+
{saveView}
|
|
318
|
+
</XStack>
|
|
319
|
+
</RovingFocusGroup>
|
|
320
|
+
)}
|
|
321
|
+
|
|
322
|
+
{isFetching && (
|
|
323
|
+
<XStack alignItems="center" aria-live="polite" data-table-fetching="true">
|
|
324
|
+
<Spinner size="small" />
|
|
325
|
+
</XStack>
|
|
326
|
+
)}
|
|
327
|
+
</XStack>
|
|
328
|
+
)
|
|
257
329
|
)}
|
|
258
330
|
</XStack>
|
|
259
331
|
);
|
|
@@ -2,6 +2,7 @@ import { action } from "@multiplatform.one/storybook";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { formatAbsoluteDate } from "@multiplatform.one/theme";
|
|
4
4
|
import { Card, Text, View, XStack, YStack } from "tamagui";
|
|
5
|
+
import type { TableView } from "../../types";
|
|
5
6
|
import { DataTableViewOptions } from "./index";
|
|
6
7
|
|
|
7
8
|
// Columns definition
|
|
@@ -420,3 +421,54 @@ export const AllOptionsCombined = () => {
|
|
|
420
421
|
</YStack>
|
|
421
422
|
);
|
|
422
423
|
};
|
|
424
|
+
|
|
425
|
+
const savedViews: TableView[] = [
|
|
426
|
+
{
|
|
427
|
+
id: "all",
|
|
428
|
+
name: "All products",
|
|
429
|
+
columns: {},
|
|
430
|
+
filters: [],
|
|
431
|
+
sorting: [],
|
|
432
|
+
pagination: { pageIndex: 0, pageSize: 10 },
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
id: "in-stock",
|
|
436
|
+
name: "In stock",
|
|
437
|
+
columns: {},
|
|
438
|
+
filters: [],
|
|
439
|
+
sorting: [],
|
|
440
|
+
pagination: { pageIndex: 0, pageSize: 10 },
|
|
441
|
+
},
|
|
442
|
+
];
|
|
443
|
+
|
|
444
|
+
export const WithSavedViews = () => {
|
|
445
|
+
const [views, setViews] = React.useState<TableView[]>(savedViews);
|
|
446
|
+
const [activeViewId, setActiveViewId] = React.useState("all");
|
|
447
|
+
|
|
448
|
+
return (
|
|
449
|
+
<YStack gap="$4" padding="$4">
|
|
450
|
+
<Text fontSize="$4" fontWeight="600">
|
|
451
|
+
Saved Views
|
|
452
|
+
</Text>
|
|
453
|
+
|
|
454
|
+
<DataTableViewOptions
|
|
455
|
+
columns={transformedColumns}
|
|
456
|
+
onColumnVisibilityChange={() => {}}
|
|
457
|
+
views={views}
|
|
458
|
+
activeViewId={activeViewId}
|
|
459
|
+
showViewManagement
|
|
460
|
+
onSaveView={(name) => {
|
|
461
|
+
const id = name.toLowerCase().replace(/\s+/g, "-");
|
|
462
|
+
setViews((prev) => [...prev, { ...savedViews[0], id, name }]);
|
|
463
|
+
setActiveViewId(id);
|
|
464
|
+
action("save-view")(name);
|
|
465
|
+
}}
|
|
466
|
+
onLoadView={(viewId) => {
|
|
467
|
+
setActiveViewId(viewId);
|
|
468
|
+
action("load-view")(viewId);
|
|
469
|
+
}}
|
|
470
|
+
onResetToDefault={() => {}}
|
|
471
|
+
/>
|
|
472
|
+
</YStack>
|
|
473
|
+
);
|
|
474
|
+
};
|