Skip to content

Commit 9610545

Browse files
committed
Add legacy format for dehydrated state
1 parent c8b5b1f commit 9610545

4 files changed

Lines changed: 59 additions & 39 deletions

File tree

packages/code-studio/src/styleguide/MockIrisGridTreeModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ class MockIrisGridTreeModel
321321
throw new Error('Not defined in mock');
322322
}
323323

324-
valuesTable(columns: Column[]): Promise<never> {
324+
valuesTable(columns: Column | Column[]): Promise<never> {
325325
throw new Error('Not defined in mock');
326326
}
327327

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
IrisGridState,
4040
ChartBuilderSettings,
4141
DehydratedIrisGridState,
42+
DehydratedIrisGridPanelState,
4243
ColumnHeaderGroup,
4344
IrisGridContextMenuData,
4445
IrisGridTableModel,
@@ -114,23 +115,20 @@ export interface PanelState {
114115
movedRows: MoveOperation[];
115116
};
116117
irisGridState: DehydratedIrisGridState;
117-
irisGridPanelState: {
118-
partitionColumns: ColumnName[];
119-
partitions: (string | null)[];
120-
isSelectingPartition: boolean;
121-
advancedSettings: [AdvancedSettingsType, boolean][];
122-
};
118+
irisGridPanelState: DehydratedIrisGridPanelState;
123119
pluginState: unknown;
124120
}
125121

126122
// Some of the properties in the loaded panel state may be omitted
127123
// even though they can't be undefined in the dehydrated state.
128124
// This can happen when loading the state saved before the properties were added.
129125
type LoadedPanelState = PanelState & {
130-
irisGridPanelState: PanelState['irisGridPanelState'] &
131-
Partial<
132-
Pick<PanelState['irisGridPanelState'], 'partitions' | 'partitionColumns'>
133-
>;
126+
irisGridPanelState: PanelState['irisGridPanelState'] & {
127+
partitions?: (string | null)[];
128+
partitionColumns?: ColumnName[];
129+
partition?: string | null;
130+
partitionColumn?: ColumnName;
131+
};
134132
};
135133

136134
export interface IrisGridPanelProps extends DashboardPanelProps {

packages/iris-grid/src/IrisGridPartitionSelector.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,7 @@ class IrisGridPartitionSelector<T> extends Component<
140140
}
141141

142142
const newPartitions = [...partitions];
143-
newPartitions[index] =
144-
TableUtils.isCharType(columns[index].type) && partition.length > 0
145-
? partition.charCodeAt(0).toString()
146-
: partition;
143+
newPartitions[index] = partition;
147144
if (partitionTables) {
148145
this.updatePartitionFilters(newPartitions, partitionTables);
149146
}

packages/iris-grid/src/IrisGridUtils.ts

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,38 @@ export interface DehydratedIrisGridState {
143143
columnHeaderGroups?: readonly ColumnGroup[];
144144
}
145145

146+
export interface DehydratedIrisGridPanelStateV1 {
147+
isSelectingPartition: boolean;
148+
partition: string | null;
149+
partitionColumn: ColumnName;
150+
advancedSettings: [AdvancedSettingsType, boolean][];
151+
}
152+
153+
export interface DehydratedIrisGridPanelStateV2 {
154+
isSelectingPartition: boolean;
155+
partitions: (string | null)[];
156+
partitionColumns: ColumnName[];
157+
advancedSettings: [AdvancedSettingsType, boolean][];
158+
}
159+
160+
export type DehydratedIrisGridPanelState =
161+
| DehydratedIrisGridPanelStateV1
162+
| DehydratedIrisGridPanelStateV2;
163+
164+
export function isPanelStateV1(
165+
state: DehydratedIrisGridPanelState
166+
): state is DehydratedIrisGridPanelStateV1 {
167+
return (state as DehydratedIrisGridPanelStateV1).partitionColumn != null;
168+
}
169+
170+
export function isPanelStateV2(
171+
state: DehydratedIrisGridPanelState
172+
): state is DehydratedIrisGridPanelStateV2 {
173+
return Array.isArray(
174+
(state as DehydratedIrisGridPanelStateV2).partitionColumns
175+
);
176+
}
177+
146178
/**
147179
* Checks if an index is valid for the given array
148180
* @param x The index to check
@@ -279,12 +311,7 @@ class IrisGridUtils {
279311
partitionColumns: Column[];
280312
advancedSettings: Map<AdvancedSettingsType, boolean>;
281313
}
282-
): {
283-
isSelectingPartition: boolean;
284-
partitions: (string | null)[];
285-
partitionColumns: ColumnName[];
286-
advancedSettings: [AdvancedSettingsType, boolean][];
287-
} {
314+
): DehydratedIrisGridPanelState {
288315
const {
289316
isSelectingPartition,
290317
partitions,
@@ -311,25 +338,21 @@ class IrisGridUtils {
311338
*/
312339
static hydrateIrisGridPanelState(
313340
model: IrisGridModel,
314-
irisGridPanelState: {
315-
// This needs to be changed after IrisGridPanel is done
316-
isSelectingPartition: boolean;
317-
partitions: (string | null)[];
318-
partitionColumns: ColumnName[];
319-
advancedSettings: [AdvancedSettingsType, boolean][];
320-
}
341+
irisGridPanelState: DehydratedIrisGridPanelState
321342
): {
322343
isSelectingPartition: boolean;
323344
partitions: (string | null)[];
324345
partitionColumns: Column[];
325346
advancedSettings: Map<AdvancedSettingsType, boolean>;
326347
} {
327-
const {
328-
isSelectingPartition,
329-
partitions,
330-
partitionColumns,
331-
advancedSettings,
332-
} = irisGridPanelState;
348+
const { isSelectingPartition, advancedSettings } = irisGridPanelState;
349+
350+
const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)
351+
? irisGridPanelState
352+
: {
353+
partitionColumns: [irisGridPanelState.partitionColumn],
354+
partitions: [irisGridPanelState.partition],
355+
};
333356

334357
const { columns } = model;
335358
return {
@@ -391,10 +414,7 @@ class IrisGridUtils {
391414
static extractTableSettings<AF, QF, S>(
392415
panelState: {
393416
irisGridState: { advancedFilters: AF; quickFilters: QF; sorts: S };
394-
irisGridPanelState: {
395-
partitionColumns: ColumnName[];
396-
partitions: unknown[];
397-
};
417+
irisGridPanelState: DehydratedIrisGridPanelState;
398418
},
399419
inputFilters: InputFilter[] = []
400420
): {
@@ -406,7 +426,12 @@ class IrisGridUtils {
406426
sorts: S;
407427
} {
408428
const { irisGridPanelState, irisGridState } = panelState;
409-
const { partitionColumns, partitions } = irisGridPanelState;
429+
const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)
430+
? irisGridPanelState
431+
: {
432+
partitionColumns: [irisGridPanelState.partitionColumn],
433+
partitions: [irisGridPanelState.partition],
434+
};
410435
const { advancedFilters, quickFilters, sorts } = irisGridState;
411436

412437
return {

0 commit comments

Comments
 (0)