Skip to content

Commit c80cd42

Browse files
committed
Add no partition column case
1 parent 4875616 commit c80cd42

4 files changed

Lines changed: 46 additions & 26 deletions

File tree

packages/dashboard-core-plugins/src/panels/IrisGridPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ type LoadedPanelState = PanelState & {
127127
partitions?: (string | null)[];
128128
partitionColumns?: ColumnName[];
129129
partition?: string | null;
130-
partitionColumn?: ColumnName;
130+
partitionColumn?: ColumnName | null;
131131
};
132132
};
133133

packages/iris-grid/src/IrisGridTestUtils.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,13 @@ class IrisGridTestUtils {
9292
makeTable({
9393
columns = this.makeColumns(),
9494
size = 1000000000,
95-
sort = [] as Sort[],
96-
layoutHints = {} as LayoutHints,
95+
sort = [],
96+
layoutHints = {},
97+
}: {
98+
columns?: Column[];
99+
size?: number;
100+
sort?: readonly Sort[];
101+
layoutHints?: LayoutHints;
97102
} = {}): Table {
98103
// eslint-disable-next-line @typescript-eslint/no-explicit-any
99104
const table = new (this.dh as any).Table({ columns, size, sort });

packages/iris-grid/src/IrisGridUtils.test.ts

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,12 @@ describe('dehydration methods', () => {
669669
});
670670

671671
describe('hydration methods', () => {
672+
const model = irisGridTestUtils.makeModel(
673+
irisGridTestUtils.makeTable({
674+
columns: irisGridTestUtils.makeColumns(5, 'name_'),
675+
})
676+
);
677+
672678
it.each([
673679
[
674680
'hydrateIrisGridPanelStateV1',
@@ -690,18 +696,20 @@ describe('hydration methods', () => {
690696
],
691697
])('%s invalid column error', (_label, panelState) => {
692698
expect(() =>
693-
IrisGridUtils.hydrateIrisGridPanelState(
694-
irisGridTestUtils.makeModel(
695-
irisGridTestUtils.makeTable({
696-
columns: irisGridTestUtils.makeColumns(5, 'name_'),
697-
})
698-
),
699-
panelState
700-
)
699+
IrisGridUtils.hydrateIrisGridPanelState(model, panelState)
701700
).toThrow('Invalid partition column INVALID');
702701
});
703702

704703
it.each([
704+
[
705+
'hydrateIrisGridPanelStateV1 null partition column',
706+
{
707+
isSelectingPartition: false,
708+
partition: null,
709+
partitionColumn: null,
710+
advancedSettings: [],
711+
},
712+
],
705713
[
706714
'hydrateIrisGridPanelStateV1 null partition',
707715
{
@@ -715,7 +723,7 @@ describe('hydration methods', () => {
715723
'hydrateIrisGridPanelStateV1 unselected partition',
716724
{
717725
isSelectingPartition: false,
718-
partition: '',
726+
partition: 'a',
719727
partitionColumn: 'name_0',
720728
advancedSettings: [],
721729
},
@@ -724,7 +732,7 @@ describe('hydration methods', () => {
724732
'hydrateIrisGridPanelStateV1 one selected partition',
725733
{
726734
isSelectingPartition: true,
727-
partition: '',
735+
partition: 'a',
728736
partitionColumn: 'name_0',
729737
advancedSettings: [],
730738
},
@@ -775,18 +783,17 @@ describe('hydration methods', () => {
775783
},
776784
],
777785
])('%s partitions and columns match', (_label, panelState) => {
778-
const result = IrisGridUtils.hydrateIrisGridPanelState(
779-
irisGridTestUtils.makeModel(
780-
irisGridTestUtils.makeTable({
781-
columns: irisGridTestUtils.makeColumns(5, 'name_'),
782-
})
783-
),
784-
panelState
785-
);
786+
const result = IrisGridUtils.hydrateIrisGridPanelState(model, panelState);
786787
expect(result.isSelectingPartition).toBe(panelState.isSelectingPartition);
787788
if (isPanelStateV1(panelState)) {
788789
expect(result.partitions).toEqual([panelState.partition]);
789-
expect(result.partitionColumns[0].name).toBe(panelState.partitionColumn);
790+
if (panelState.partitionColumn !== null) {
791+
expect(result.partitionColumns[0].name).toBe(
792+
panelState.partitionColumn
793+
);
794+
} else {
795+
expect(result.partitionColumns).toEqual([]);
796+
}
790797
} else {
791798
expect(result.partitions).toEqual(panelState.partitions);
792799
panelState.partitionColumns.forEach((partition, index) => {

packages/iris-grid/src/IrisGridUtils.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export interface DehydratedIrisGridState {
146146
export interface DehydratedIrisGridPanelStateV1 {
147147
isSelectingPartition: boolean;
148148
partition: string | null;
149-
partitionColumn: ColumnName;
149+
partitionColumn: ColumnName | null;
150150
advancedSettings: [AdvancedSettingsType, boolean][];
151151
}
152152

@@ -164,7 +164,9 @@ export type DehydratedIrisGridPanelState =
164164
export function isPanelStateV1(
165165
state: DehydratedIrisGridPanelState
166166
): state is DehydratedIrisGridPanelStateV1 {
167-
return (state as DehydratedIrisGridPanelStateV1).partitionColumn != null;
167+
return (
168+
(state as DehydratedIrisGridPanelStateV1).partitionColumn !== undefined
169+
);
168170
}
169171

170172
export function isPanelStateV2(
@@ -350,7 +352,10 @@ class IrisGridUtils {
350352
const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)
351353
? irisGridPanelState
352354
: {
353-
partitionColumns: [irisGridPanelState.partitionColumn],
355+
partitionColumns:
356+
irisGridPanelState.partitionColumn !== null
357+
? [irisGridPanelState.partitionColumn]
358+
: [],
354359
partitions: [irisGridPanelState.partition],
355360
};
356361

@@ -429,7 +434,10 @@ class IrisGridUtils {
429434
const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)
430435
? irisGridPanelState
431436
: {
432-
partitionColumns: [irisGridPanelState.partitionColumn],
437+
partitionColumns:
438+
irisGridPanelState.partitionColumn !== null
439+
? [irisGridPanelState.partitionColumn]
440+
: [],
433441
partitions: [irisGridPanelState.partition],
434442
};
435443
const { advancedFilters, quickFilters, sorts } = irisGridState;

0 commit comments

Comments
 (0)