@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
|
@@ -8,9 +8,8 @@ import {
|
|
|
8
8
|
} from "@phosphor-icons/react";
|
|
9
9
|
import { formatAbsoluteDate, parseCalendarDate, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
10
10
|
import React, { useState, useMemo } from "react";
|
|
11
|
-
import { Button, DatePicker } from "@multiplatform.one/forms";
|
|
11
|
+
import { Button, DatePicker, FloatingPanel } from "@multiplatform.one/forms";
|
|
12
12
|
import {
|
|
13
|
-
Popover,
|
|
14
13
|
ScrollView,
|
|
15
14
|
Separator,
|
|
16
15
|
Text,
|
|
@@ -311,194 +310,166 @@ export function DataTableDateFilter({
|
|
|
311
310
|
}
|
|
312
311
|
};
|
|
313
312
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
offset={4}
|
|
322
|
-
stayInFrame
|
|
323
|
-
allowFlip
|
|
324
|
-
resize
|
|
313
|
+
const trigger = (
|
|
314
|
+
<Button
|
|
315
|
+
size={knobProps.sizeToken}
|
|
316
|
+
disabled={disabled}
|
|
317
|
+
icon={<CalendarIcon size={iconPx} />}
|
|
318
|
+
justifyContent="flex-start"
|
|
319
|
+
minWidth={triggerMinWidth}
|
|
325
320
|
>
|
|
326
|
-
<
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
<Text
|
|
335
|
-
flex={1}
|
|
336
|
-
textAlign="left"
|
|
337
|
-
// LC-40: while disabled, the placeholder tier ($color10) drops
|
|
338
|
-
// below AA on the washed chrome — pin to the lowest AA step.
|
|
339
|
-
color={disabled ? "$color11" : value ? undefined : "$color10"}
|
|
340
|
-
fontSize="$3"
|
|
341
|
-
numberOfLines={1}
|
|
342
|
-
>
|
|
343
|
-
{getDisplayValue()}
|
|
344
|
-
</Text>
|
|
345
|
-
<CaretDownIcon size={iconPx} />
|
|
346
|
-
</Button>
|
|
347
|
-
</Popover.Trigger>
|
|
348
|
-
|
|
349
|
-
{/* Overlay contract: elevatedSurface + transition-paired enter/exit
|
|
350
|
-
motion (LC-24) — same fragments as the shared components
|
|
351
|
-
PopoverContent. The popper resize middleware caps the height to
|
|
352
|
-
the viewport; the ScrollView keeps every section reachable
|
|
353
|
-
instead of painting past the frame (LC-10). */}
|
|
354
|
-
<Popover.Content
|
|
355
|
-
{...knobProps.elevatedSurface}
|
|
356
|
-
transition={knobProps.transition}
|
|
357
|
-
enterStyle={{ opacity: 0, y: -4, scale: 0.97 }}
|
|
358
|
-
exitStyle={{ opacity: 0, y: -4, scale: 0.97 }}
|
|
359
|
-
minWidth={popoverMinWidth}
|
|
360
|
-
padding={0}
|
|
361
|
-
overflow="hidden"
|
|
321
|
+
<Text
|
|
322
|
+
flex={1}
|
|
323
|
+
textAlign="left"
|
|
324
|
+
// LC-40: while disabled, the placeholder tier ($color10) drops
|
|
325
|
+
// below AA on the washed chrome — pin to the lowest AA step.
|
|
326
|
+
color={disabled ? "$color11" : value ? undefined : "$color10"}
|
|
327
|
+
fontSize="$3"
|
|
328
|
+
numberOfLines={1}
|
|
362
329
|
>
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
</Text>
|
|
369
|
-
{value && (
|
|
370
|
-
<Button
|
|
371
|
-
size={knobProps.sizeToken}
|
|
372
|
-
onPress={handleClear}
|
|
373
|
-
icon={<XIcon size={iconPx} />}
|
|
374
|
-
>
|
|
375
|
-
{t("Clear")}
|
|
376
|
-
</Button>
|
|
377
|
-
)}
|
|
378
|
-
</XStack>
|
|
330
|
+
{getDisplayValue()}
|
|
331
|
+
</Text>
|
|
332
|
+
<CaretDownIcon size={iconPx} />
|
|
333
|
+
</Button>
|
|
334
|
+
);
|
|
379
335
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
<Separator />
|
|
407
|
-
|
|
408
|
-
{/* Custom Date Selection */}
|
|
409
|
-
<YStack {...knobProps.gap}>
|
|
410
|
-
<Text {...knobProps.label} fontWeight="400">
|
|
411
|
-
{t("Custom Date")}
|
|
412
|
-
</Text>
|
|
413
|
-
|
|
414
|
-
<XStack gap="$2">
|
|
415
|
-
<Button
|
|
416
|
-
flex={1}
|
|
417
|
-
size={knobProps.sizeToken}
|
|
418
|
-
onPress={() => handleCustomDateSelect(new Date().toISOString(), "is")}
|
|
419
|
-
>
|
|
420
|
-
{t("Today")}
|
|
421
|
-
</Button>
|
|
422
|
-
<Button
|
|
423
|
-
flex={1}
|
|
424
|
-
size={knobProps.sizeToken}
|
|
425
|
-
onPress={() =>
|
|
426
|
-
handleCustomDateSelect(
|
|
427
|
-
new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
|
|
428
|
-
"is",
|
|
429
|
-
)
|
|
430
|
-
}
|
|
431
|
-
>
|
|
432
|
-
{t("Yesterday")}
|
|
433
|
-
</Button>
|
|
434
|
-
</XStack>
|
|
435
|
-
|
|
436
|
-
{/* Date Range */}
|
|
437
|
-
<YStack gap="$2">
|
|
438
|
-
<Text {...knobProps.label} fontWeight="400">
|
|
439
|
-
{t("Date Range")}
|
|
440
|
-
</Text>
|
|
441
|
-
<XStack gap="$2">
|
|
442
|
-
<Button
|
|
443
|
-
flex={1}
|
|
444
|
-
size={knobProps.sizeToken}
|
|
445
|
-
onPress={() =>
|
|
446
|
-
handleDateRangeSelect(
|
|
447
|
-
new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
448
|
-
new Date().toISOString(),
|
|
449
|
-
)
|
|
450
|
-
}
|
|
451
|
-
>
|
|
452
|
-
{t("Last 7 days")}
|
|
453
|
-
</Button>
|
|
336
|
+
return (
|
|
337
|
+
// LC-06: anchored editor. FloatingPanel attaches flush to the trigger
|
|
338
|
+
// (MPO-38 cover contract), clamps inside the viewport and becomes a sheet
|
|
339
|
+
// at 640 and below.
|
|
340
|
+
<FloatingPanel open={isOpen} onOpenChange={setIsOpen} trigger={trigger} scrollable>
|
|
341
|
+
<YStack {...knobProps.gapLg} minWidth={popoverMinWidth} data-dismiss-class="compose">
|
|
342
|
+
<XStack justifyContent="space-between" alignItems="center">
|
|
343
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
344
|
+
{t("Date Filter")}
|
|
345
|
+
</Text>
|
|
346
|
+
{value && (
|
|
347
|
+
<Button size={knobProps.sizeToken} onPress={handleClear} icon={<XIcon size={iconPx} />}>
|
|
348
|
+
{t("Clear")}
|
|
349
|
+
</Button>
|
|
350
|
+
)}
|
|
351
|
+
</XStack>
|
|
352
|
+
|
|
353
|
+
{/* Quick Presets */}
|
|
354
|
+
{showPresets && (
|
|
355
|
+
<YStack gap="$2">
|
|
356
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
357
|
+
{t("Quick Filters")}
|
|
358
|
+
</Text>
|
|
359
|
+
<ScrollView maxHeight={presetListMaxHeight}>
|
|
360
|
+
<YStack gap={PRESET_ROW_GAP_TOKEN}>
|
|
361
|
+
{allPresets.map((preset) => (
|
|
454
362
|
<Button
|
|
455
|
-
|
|
363
|
+
key={preset.id}
|
|
456
364
|
size={knobProps.sizeToken}
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
)
|
|
462
|
-
}
|
|
365
|
+
justifyContent="flex-start"
|
|
366
|
+
onPress={() => handlePresetSelect(preset)}
|
|
367
|
+
{...(activePresetId === preset.id
|
|
368
|
+
? { theme: "accent" as any, backgroundColor: "$background" }
|
|
369
|
+
: undefined)}
|
|
463
370
|
>
|
|
464
|
-
|
|
371
|
+
<Text fontSize="$3">{preset.label}</Text>
|
|
465
372
|
</Button>
|
|
466
|
-
|
|
373
|
+
))}
|
|
467
374
|
</YStack>
|
|
375
|
+
</ScrollView>
|
|
376
|
+
</YStack>
|
|
377
|
+
)}
|
|
468
378
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
379
|
+
<Separator />
|
|
380
|
+
|
|
381
|
+
{/* Custom Date Selection */}
|
|
382
|
+
<YStack {...knobProps.gap}>
|
|
383
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
384
|
+
{t("Custom Date")}
|
|
385
|
+
</Text>
|
|
386
|
+
|
|
387
|
+
<XStack gap="$2">
|
|
388
|
+
<Button
|
|
389
|
+
flex={1}
|
|
390
|
+
size={knobProps.sizeToken}
|
|
391
|
+
onPress={() => handleCustomDateSelect(new Date().toISOString(), "is")}
|
|
392
|
+
>
|
|
393
|
+
{t("Today")}
|
|
394
|
+
</Button>
|
|
395
|
+
<Button
|
|
396
|
+
flex={1}
|
|
397
|
+
size={knobProps.sizeToken}
|
|
398
|
+
onPress={() =>
|
|
399
|
+
handleCustomDateSelect(
|
|
400
|
+
new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
|
|
401
|
+
"is",
|
|
402
|
+
)
|
|
403
|
+
}
|
|
404
|
+
>
|
|
405
|
+
{t("Yesterday")}
|
|
406
|
+
</Button>
|
|
407
|
+
</XStack>
|
|
408
|
+
|
|
409
|
+
{/* Date Range */}
|
|
410
|
+
<YStack gap="$2">
|
|
411
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
412
|
+
{t("Date Range")}
|
|
413
|
+
</Text>
|
|
414
|
+
<XStack gap="$2">
|
|
415
|
+
<Button
|
|
416
|
+
flex={1}
|
|
417
|
+
size={knobProps.sizeToken}
|
|
418
|
+
onPress={() =>
|
|
419
|
+
handleDateRangeSelect(
|
|
420
|
+
new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
421
|
+
new Date().toISOString(),
|
|
422
|
+
)
|
|
423
|
+
}
|
|
424
|
+
>
|
|
425
|
+
{t("Last 7 days")}
|
|
426
|
+
</Button>
|
|
427
|
+
<Button
|
|
428
|
+
flex={1}
|
|
429
|
+
size={knobProps.sizeToken}
|
|
430
|
+
onPress={() =>
|
|
431
|
+
handleDateRangeSelect(
|
|
432
|
+
new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
|
|
433
|
+
new Date().toISOString(),
|
|
434
|
+
)
|
|
435
|
+
}
|
|
436
|
+
>
|
|
437
|
+
{t("Last 30 days")}
|
|
438
|
+
</Button>
|
|
439
|
+
</XStack>
|
|
440
|
+
</YStack>
|
|
441
|
+
|
|
442
|
+
{/* DatePicker-based Custom Range Selection */}
|
|
443
|
+
<YStack gap="$2">
|
|
444
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
445
|
+
{t("Custom Range")}
|
|
446
|
+
</Text>
|
|
447
|
+
<XStack gap="$2">
|
|
448
|
+
<View flex={1} data-testid="start-date-picker">
|
|
449
|
+
<DatePicker
|
|
450
|
+
placeholder={t("Start date")}
|
|
451
|
+
label={t("From")}
|
|
452
|
+
minDate={minDate}
|
|
453
|
+
maxDate={maxDate}
|
|
454
|
+
value={pickerRange.start ?? null}
|
|
455
|
+
onChange={handleStartDatePick}
|
|
456
|
+
/>
|
|
457
|
+
</View>
|
|
458
|
+
<View flex={1} data-testid="end-date-picker">
|
|
459
|
+
<DatePicker
|
|
460
|
+
placeholder={t("End date")}
|
|
461
|
+
label={t("To")}
|
|
462
|
+
minDate={minDate}
|
|
463
|
+
maxDate={maxDate}
|
|
464
|
+
value={pickerRange.end ?? null}
|
|
465
|
+
onChange={handleEndDatePick}
|
|
466
|
+
/>
|
|
467
|
+
</View>
|
|
468
|
+
</XStack>
|
|
498
469
|
</YStack>
|
|
499
|
-
</
|
|
500
|
-
</
|
|
501
|
-
</
|
|
470
|
+
</YStack>
|
|
471
|
+
</YStack>
|
|
472
|
+
</FloatingPanel>
|
|
502
473
|
);
|
|
503
474
|
}
|
|
504
475
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fireEvent, screen, waitFor } from "@testing-library/react";
|
|
1
|
+
import { act, fireEvent, screen, waitFor } from "@testing-library/react";
|
|
2
2
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
3
3
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
4
4
|
import { DataTable } from "../DataTable";
|
|
@@ -203,16 +203,30 @@ describe("DataTableExport", () => {
|
|
|
203
203
|
});
|
|
204
204
|
|
|
205
205
|
it("shows loading state when export is in progress", async () => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
let finishExport!: () => void;
|
|
207
|
+
const pending = new Promise<void>((resolve) => {
|
|
208
|
+
finishExport = resolve;
|
|
209
|
+
});
|
|
210
|
+
const mockOnExport = vi.fn(() => pending) as unknown as ReturnType<typeof vi.fn> &
|
|
211
|
+
((options: ExportOptions) => Promise<void>);
|
|
209
212
|
|
|
210
213
|
renderWithProviders(
|
|
211
214
|
<DataTableExport data={mockData} columns={mockColumns} onExport={mockOnExport} />,
|
|
212
215
|
);
|
|
213
216
|
|
|
214
|
-
|
|
215
|
-
|
|
217
|
+
const exportButton = screen.getByRole("button", { name: /Export as CSV/i });
|
|
218
|
+
try {
|
|
219
|
+
fireEvent.click(exportButton);
|
|
220
|
+
expect(screen.getByText("...")).toBeInTheDocument();
|
|
221
|
+
expect(exportButton).toHaveAttribute("aria-disabled", "true");
|
|
222
|
+
} finally {
|
|
223
|
+
await act(async () => {
|
|
224
|
+
finishExport();
|
|
225
|
+
await pending;
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
expect(exportButton).toHaveTextContent("CSV");
|
|
229
|
+
expect(exportButton).not.toHaveAttribute("aria-disabled", "true");
|
|
216
230
|
});
|
|
217
231
|
|
|
218
232
|
it("disables buttons when disabled prop is true", () => {
|
|
@@ -599,9 +613,12 @@ describe("DataTableExport", () => {
|
|
|
599
613
|
});
|
|
600
614
|
|
|
601
615
|
it("prevents multiple simultaneous exports", async () => {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
616
|
+
let finishExport!: () => void;
|
|
617
|
+
const pending = new Promise<void>((resolve) => {
|
|
618
|
+
finishExport = resolve;
|
|
619
|
+
});
|
|
620
|
+
const mockOnExport = vi.fn(() => pending) as unknown as ReturnType<typeof vi.fn> &
|
|
621
|
+
((options: ExportOptions) => Promise<void>);
|
|
605
622
|
|
|
606
623
|
renderWithProviders(
|
|
607
624
|
<DataTableExport data={mockData} columns={mockColumns} onExport={mockOnExport} />,
|
|
@@ -609,13 +626,22 @@ describe("DataTableExport", () => {
|
|
|
609
626
|
|
|
610
627
|
// Click export twice quickly - button shows "..." when loading
|
|
611
628
|
const exportButton = screen.getByRole("button", { name: /Export as CSV/i });
|
|
612
|
-
|
|
613
|
-
|
|
629
|
+
try {
|
|
630
|
+
fireEvent.click(exportButton);
|
|
631
|
+
fireEvent.click(exportButton);
|
|
614
632
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
633
|
+
// Should only call once
|
|
634
|
+
await waitFor(() => {
|
|
635
|
+
expect(mockOnExport).toHaveBeenCalledTimes(1);
|
|
636
|
+
});
|
|
637
|
+
} finally {
|
|
638
|
+
await act(async () => {
|
|
639
|
+
finishExport();
|
|
640
|
+
await pending;
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
expect(exportButton).toHaveTextContent("CSV");
|
|
644
|
+
expect(exportButton).not.toHaveAttribute("aria-disabled", "true");
|
|
619
645
|
});
|
|
620
646
|
|
|
621
647
|
it("surfaces an inline error when Blob URLs are unavailable", async () => {
|
|
@@ -629,9 +655,7 @@ describe("DataTableExport", () => {
|
|
|
629
655
|
renderWithProviders(<DataTableExport data={mockData} columns={mockColumns} />);
|
|
630
656
|
fireEvent.click(screen.getByRole("button", { name: /Export as CSV/i }));
|
|
631
657
|
await waitFor(() => {
|
|
632
|
-
expect(screen.getByRole("alert").textContent).toMatch(
|
|
633
|
-
/not available on this platform/i,
|
|
634
|
-
);
|
|
658
|
+
expect(screen.getByRole("alert").textContent).toMatch(/not available on this platform/i);
|
|
635
659
|
});
|
|
636
660
|
expect(mockCreateObjectURL).not.toHaveBeenCalled();
|
|
637
661
|
} finally {
|