@multiplatform.one/table 7.11.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 +1 -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/DataTableRoot.cjs +17 -1
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +25 -2
- 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/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 +44 -61
- package/dist/cjs/components/DataTableToolbar/index.native.js +46 -65
- 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 +11 -1
- package/dist/cjs/hooks/useDataTable.native.js +12 -2
- 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/DataTableRoot.mjs +17 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +25 -2
- 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/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 +46 -63
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +48 -67
- 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 +11 -1
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +12 -2
- 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/DataTableRoot.mjs +17 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +25 -2
- 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/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 +46 -63
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +46 -65
- 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 +11 -1
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +12 -2
- 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 +14 -14
- 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 +71 -6
- package/src/components/DataTable/DataTableRoot.tsx +27 -4
- package/src/components/DataTable/dataTableMobileCards.spec.tsx +1 -4
- package/src/components/DataTable/headerContainment.spec.tsx +91 -0
- 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/index.tsx +135 -142
- package/src/components/DataTableGrouping/index.tsx +193 -195
- package/src/components/DataTableSearch/index.tsx +111 -109
- package/src/components/DataTableToolbar/index.tsx +39 -46
- 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 +39 -0
- package/src/hooks/useDataTable.ts +15 -1
- package/src/index.ts +1 -0
- 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/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/DataTableGrouping/index.d.ts.map +1 -1
- package/types/components/DataTableSearch/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/utils/rowPress.d.ts.map +1 -1
|
@@ -24,8 +24,8 @@ import {
|
|
|
24
24
|
type GroupPosition,
|
|
25
25
|
} from "@multiplatform.one/theme";
|
|
26
26
|
import { useCallback, useMemo, useState } from "react";
|
|
27
|
-
import { Button, Select } from "@multiplatform.one/forms";
|
|
28
|
-
import {
|
|
27
|
+
import { Button, FloatingPanel, Select } from "@multiplatform.one/forms";
|
|
28
|
+
import { Separator, Text, View, XStack, YStack, isWeb } from "tamagui";
|
|
29
29
|
import { getViewLeafRows } from "../../utils/viewData";
|
|
30
30
|
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
31
31
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
@@ -629,211 +629,209 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
629
629
|
const iconSize = groupIconSize(String(sz));
|
|
630
630
|
const radius = knobProps.borderRadius.borderRadius;
|
|
631
631
|
|
|
632
|
+
const trigger = (
|
|
633
|
+
<Button
|
|
634
|
+
size={knobProps.sizeToken}
|
|
635
|
+
icon={<GearIcon size={iconSize} />}
|
|
636
|
+
disabled={disabled}
|
|
637
|
+
aria-label="Grouping configuration"
|
|
638
|
+
>
|
|
639
|
+
<XStack alignItems="center" gap="$2">
|
|
640
|
+
<ChartBarIcon size={iconSize} />
|
|
641
|
+
<Text>Group & Aggregate</Text>
|
|
642
|
+
{(currentConfig.columns.length > 0 || currentConfig.aggregations.length > 0) && (
|
|
643
|
+
<View
|
|
644
|
+
backgroundColor="$color6"
|
|
645
|
+
borderRadius={1000}
|
|
646
|
+
paddingHorizontal="$1"
|
|
647
|
+
paddingVertical={2}
|
|
648
|
+
minWidth={20}
|
|
649
|
+
alignItems="center"
|
|
650
|
+
>
|
|
651
|
+
<Text {...knobProps.label} fontWeight="400" color="$color12">
|
|
652
|
+
{currentConfig.columns.length + currentConfig.aggregations.length}
|
|
653
|
+
</Text>
|
|
654
|
+
</View>
|
|
655
|
+
)}
|
|
656
|
+
</XStack>
|
|
657
|
+
</Button>
|
|
658
|
+
);
|
|
659
|
+
|
|
632
660
|
return (
|
|
633
|
-
// LC-06/LC-10:
|
|
634
|
-
//
|
|
635
|
-
//
|
|
636
|
-
<
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
<Text>Group & Aggregate</Text>
|
|
647
|
-
{(currentConfig.columns.length > 0 || currentConfig.aggregations.length > 0) && (
|
|
648
|
-
<View
|
|
649
|
-
backgroundColor="$color6"
|
|
650
|
-
borderRadius={1000}
|
|
651
|
-
paddingHorizontal="$1"
|
|
652
|
-
paddingVertical={2}
|
|
653
|
-
minWidth={20}
|
|
654
|
-
alignItems="center"
|
|
655
|
-
>
|
|
656
|
-
<Text {...knobProps.label} fontWeight="400" color="$color12">
|
|
657
|
-
{currentConfig.columns.length + currentConfig.aggregations.length}
|
|
658
|
-
</Text>
|
|
659
|
-
</View>
|
|
660
|
-
)}
|
|
661
|
-
</XStack>
|
|
662
|
-
</Button>
|
|
663
|
-
</Popover.Trigger>
|
|
664
|
-
|
|
665
|
-
<Popover.Content
|
|
666
|
-
{...knobProps.elevatedSurface}
|
|
667
|
-
// LC-24: enter/exit styles are dead code without a resolved token
|
|
668
|
-
transition={knobProps.transition}
|
|
669
|
-
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
670
|
-
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
661
|
+
// LC-06/LC-10: the config list grows with every group-by/aggregation
|
|
662
|
+
// added. FloatingPanel clamps and scrolls it inside the viewport instead
|
|
663
|
+
// of painting rows past the fold.
|
|
664
|
+
<FloatingPanel
|
|
665
|
+
open={isOpen}
|
|
666
|
+
onOpenChange={setIsOpen}
|
|
667
|
+
trigger={trigger}
|
|
668
|
+
triggerSizing="content"
|
|
669
|
+
disabled={disabled}
|
|
670
|
+
scrollable
|
|
671
|
+
>
|
|
672
|
+
<YStack
|
|
673
|
+
gap="$4"
|
|
671
674
|
minWidth={popoverMinWidth}
|
|
672
675
|
maxWidth={popoverMaxWidth}
|
|
673
|
-
|
|
674
|
-
overflow="hidden"
|
|
676
|
+
data-dismiss-class="compose"
|
|
675
677
|
>
|
|
676
|
-
<
|
|
677
|
-
|
|
678
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
679
|
+
Grouping & Aggregation
|
|
680
|
+
</Text>
|
|
681
|
+
|
|
682
|
+
{/* Group By Section */}
|
|
683
|
+
<YStack gap="$3">
|
|
684
|
+
<XStack justifyContent="space-between" alignItems="center">
|
|
678
685
|
<Text {...knobProps.label} fontWeight="400">
|
|
679
|
-
|
|
686
|
+
Group By
|
|
687
|
+
</Text>
|
|
688
|
+
<Text fontSize="$2" color="$color10">
|
|
689
|
+
{currentConfig.columns.length} selected
|
|
680
690
|
</Text>
|
|
691
|
+
</XStack>
|
|
681
692
|
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
693
|
+
{/* Current Group By Columns */}
|
|
694
|
+
<YStack>
|
|
695
|
+
{currentConfig.columns.map((columnKey, index) => {
|
|
696
|
+
const column = columns.find((col) => (col.accessorKey || col.id) === columnKey);
|
|
697
|
+
const position = getGroupPosition(index, currentConfig.columns.length);
|
|
698
|
+
const corners = stackRadiusProps(position, radius);
|
|
699
|
+
const label = String(column?.header || columnKey);
|
|
700
|
+
return (
|
|
701
|
+
<YStack key={columnKey}>
|
|
702
|
+
{index > 0 ? <View {...hairline.line} /> : null}
|
|
703
|
+
<XStack
|
|
704
|
+
alignItems="center"
|
|
705
|
+
gap="$2"
|
|
706
|
+
padding="$2"
|
|
707
|
+
overflow="hidden"
|
|
708
|
+
backgroundColor="$color2"
|
|
709
|
+
{...corners}
|
|
710
|
+
hoverStyle={{ backgroundColor: "$backgroundHover", ...corners }}
|
|
711
|
+
{...({ "data-group-position": position } as any)}
|
|
712
|
+
>
|
|
713
|
+
<Text fontSize="$3" flex={1} numberOfLines={1}>
|
|
714
|
+
{`${label} · ${index + 1}`}
|
|
715
|
+
</Text>
|
|
716
|
+
<Button
|
|
717
|
+
size={knobProps.sizeToken}
|
|
718
|
+
icon={<ArrowUpIcon size={iconSize} />}
|
|
719
|
+
disabled={disabled || index === 0}
|
|
720
|
+
onPress={() => handleMoveGroupBy(index, -1)}
|
|
721
|
+
aria-label={`Move ${label} up`}
|
|
722
|
+
/>
|
|
723
|
+
<Button
|
|
724
|
+
size={knobProps.sizeToken}
|
|
725
|
+
icon={<ArrowDownIcon size={iconSize} />}
|
|
726
|
+
disabled={disabled || index === currentConfig.columns.length - 1}
|
|
727
|
+
onPress={() => handleMoveGroupBy(index, 1)}
|
|
728
|
+
aria-label={`Move ${label} down`}
|
|
729
|
+
/>
|
|
730
|
+
<Button
|
|
731
|
+
size={knobProps.sizeToken}
|
|
732
|
+
icon={<MinusIcon size={iconSize} />}
|
|
733
|
+
disabled={disabled}
|
|
734
|
+
onPress={() => handleRemoveGroupBy(columnKey)}
|
|
735
|
+
aria-label={`Remove grouping by ${label}`}
|
|
736
|
+
/>
|
|
737
|
+
</XStack>
|
|
738
|
+
</YStack>
|
|
739
|
+
);
|
|
740
|
+
})}
|
|
741
|
+
</YStack>
|
|
692
742
|
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
{`${label} · ${index + 1}`}
|
|
715
|
-
</Text>
|
|
716
|
-
<Button
|
|
717
|
-
size={knobProps.sizeToken}
|
|
718
|
-
icon={<ArrowUpIcon size={iconSize} />}
|
|
719
|
-
disabled={disabled || index === 0}
|
|
720
|
-
onPress={() => handleMoveGroupBy(index, -1)}
|
|
721
|
-
aria-label={`Move ${label} up`}
|
|
722
|
-
/>
|
|
723
|
-
<Button
|
|
724
|
-
size={knobProps.sizeToken}
|
|
725
|
-
icon={<ArrowDownIcon size={iconSize} />}
|
|
726
|
-
disabled={disabled || index === currentConfig.columns.length - 1}
|
|
727
|
-
onPress={() => handleMoveGroupBy(index, 1)}
|
|
728
|
-
aria-label={`Move ${label} down`}
|
|
729
|
-
/>
|
|
730
|
-
<Button
|
|
731
|
-
size={knobProps.sizeToken}
|
|
732
|
-
icon={<MinusIcon size={iconSize} />}
|
|
733
|
-
disabled={disabled}
|
|
734
|
-
onPress={() => handleRemoveGroupBy(columnKey)}
|
|
735
|
-
aria-label={`Remove grouping by ${label}`}
|
|
736
|
-
/>
|
|
737
|
-
</XStack>
|
|
738
|
-
</YStack>
|
|
739
|
-
);
|
|
740
|
-
})}
|
|
741
|
-
</YStack>
|
|
742
|
-
|
|
743
|
-
{/* Add Group By Column */}
|
|
744
|
-
{availableColumns.length > 0 && (
|
|
745
|
-
<XStack gap="$2">
|
|
746
|
-
<Text fontSize="$3" color="$color10">
|
|
747
|
-
Add:
|
|
748
|
-
</Text>
|
|
749
|
-
{availableColumns.slice(0, 3).map((column) => {
|
|
750
|
-
const key = column.accessorKey || column.id || "";
|
|
751
|
-
return (
|
|
752
|
-
<Button
|
|
753
|
-
key={key}
|
|
754
|
-
size={knobProps.sizeToken}
|
|
755
|
-
onPress={() => handleAddGroupBy(key)}
|
|
756
|
-
>
|
|
757
|
-
{column.header || key}
|
|
758
|
-
</Button>
|
|
759
|
-
);
|
|
760
|
-
})}
|
|
761
|
-
</XStack>
|
|
762
|
-
)}
|
|
763
|
-
</YStack>
|
|
743
|
+
{/* Add Group By Column */}
|
|
744
|
+
{availableColumns.length > 0 && (
|
|
745
|
+
<XStack gap="$2">
|
|
746
|
+
<Text fontSize="$3" color="$color10">
|
|
747
|
+
Add:
|
|
748
|
+
</Text>
|
|
749
|
+
{availableColumns.slice(0, 3).map((column) => {
|
|
750
|
+
const key = column.accessorKey || column.id || "";
|
|
751
|
+
return (
|
|
752
|
+
<Button
|
|
753
|
+
key={key}
|
|
754
|
+
size={knobProps.sizeToken}
|
|
755
|
+
onPress={() => handleAddGroupBy(key)}
|
|
756
|
+
>
|
|
757
|
+
{column.header || key}
|
|
758
|
+
</Button>
|
|
759
|
+
);
|
|
760
|
+
})}
|
|
761
|
+
</XStack>
|
|
762
|
+
)}
|
|
763
|
+
</YStack>
|
|
764
764
|
|
|
765
|
-
|
|
765
|
+
<Separator />
|
|
766
766
|
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
767
|
+
{/* Aggregation Section */}
|
|
768
|
+
<YStack gap="$3">
|
|
769
|
+
<XStack justifyContent="space-between" alignItems="center">
|
|
770
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
771
|
+
Aggregations
|
|
772
|
+
</Text>
|
|
773
|
+
<Text fontSize="$2" color="$color10">
|
|
774
|
+
{currentConfig.aggregations.length} configured
|
|
775
|
+
</Text>
|
|
776
|
+
</XStack>
|
|
777
777
|
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
</YStack>
|
|
811
|
-
|
|
812
|
-
{/* Add Aggregation */}
|
|
813
|
-
<AggregationSelector
|
|
814
|
-
columns={aggregatableColumns}
|
|
815
|
-
onAddAggregation={handleAddAggregation}
|
|
816
|
-
/>
|
|
817
|
-
</YStack>
|
|
818
|
-
|
|
819
|
-
{/* Clear All */}
|
|
820
|
-
{(currentConfig.columns.length > 0 || currentConfig.aggregations.length > 0) && (
|
|
821
|
-
<>
|
|
822
|
-
<Separator />
|
|
823
|
-
<Button
|
|
824
|
-
size={knobProps.sizeToken}
|
|
825
|
-
error
|
|
826
|
-
onPress={() => onConfigChange({ columns: [], aggregations: [] })}
|
|
827
|
-
aria-label="Clear all grouping and aggregation"
|
|
828
|
-
>
|
|
829
|
-
Clear All Grouping
|
|
830
|
-
</Button>
|
|
831
|
-
</>
|
|
832
|
-
)}
|
|
778
|
+
{/* Current Aggregations */}
|
|
779
|
+
<YStack>
|
|
780
|
+
{currentConfig.aggregations.map((agg, index) => {
|
|
781
|
+
const position = getGroupPosition(index, currentConfig.aggregations.length);
|
|
782
|
+
const corners = stackRadiusProps(position, radius);
|
|
783
|
+
return (
|
|
784
|
+
<YStack key={`${agg.function}-${agg.column}-${index}`}>
|
|
785
|
+
{index > 0 ? <View {...hairline.line} /> : null}
|
|
786
|
+
<XStack
|
|
787
|
+
alignItems="center"
|
|
788
|
+
gap="$2"
|
|
789
|
+
padding="$2"
|
|
790
|
+
overflow="hidden"
|
|
791
|
+
backgroundColor="$color2"
|
|
792
|
+
{...corners}
|
|
793
|
+
hoverStyle={{ backgroundColor: "$backgroundHover", ...corners }}
|
|
794
|
+
{...({ "data-group-position": position } as any)}
|
|
795
|
+
>
|
|
796
|
+
<Text fontSize="$3" flex={1} numberOfLines={1}>
|
|
797
|
+
{agg.function}({agg.column}){agg.label && ` as "${agg.label}"`}
|
|
798
|
+
</Text>
|
|
799
|
+
<Button
|
|
800
|
+
size={knobProps.sizeToken}
|
|
801
|
+
icon={<MinusIcon size={iconSize} />}
|
|
802
|
+
disabled={disabled}
|
|
803
|
+
onPress={() => handleRemoveAggregation(index)}
|
|
804
|
+
aria-label={`Remove ${agg.function} aggregation on ${agg.column}`}
|
|
805
|
+
/>
|
|
806
|
+
</XStack>
|
|
807
|
+
</YStack>
|
|
808
|
+
);
|
|
809
|
+
})}
|
|
833
810
|
</YStack>
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
811
|
+
|
|
812
|
+
{/* Add Aggregation */}
|
|
813
|
+
<AggregationSelector
|
|
814
|
+
columns={aggregatableColumns}
|
|
815
|
+
onAddAggregation={handleAddAggregation}
|
|
816
|
+
/>
|
|
817
|
+
</YStack>
|
|
818
|
+
|
|
819
|
+
{/* Clear All */}
|
|
820
|
+
{(currentConfig.columns.length > 0 || currentConfig.aggregations.length > 0) && (
|
|
821
|
+
<>
|
|
822
|
+
<Separator />
|
|
823
|
+
<Button
|
|
824
|
+
size={knobProps.sizeToken}
|
|
825
|
+
error
|
|
826
|
+
onPress={() => onConfigChange({ columns: [], aggregations: [] })}
|
|
827
|
+
aria-label="Clear all grouping and aggregation"
|
|
828
|
+
>
|
|
829
|
+
Clear All Grouping
|
|
830
|
+
</Button>
|
|
831
|
+
</>
|
|
832
|
+
)}
|
|
833
|
+
</YStack>
|
|
834
|
+
</FloatingPanel>
|
|
837
835
|
);
|
|
838
836
|
}
|
|
839
837
|
|