Skip to content

Commit 2cb664c

Browse files
authored
[CORE-514] Delete compact data tables setting and feature flag (#5445)
1 parent 1df334b commit 2cb664c

File tree

7 files changed

+1
-277
lines changed

7 files changed

+1
-277
lines changed

src/libs/ajax/workspaces/workspace-models.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export type WorkspaceSetting =
3737
| SoftDeleteSetting
3838
| RequesterPaysSetting
3939
| SeparateSubmissionFinalOutputsSetting
40-
| ImprovedDataTablesSetting
4140
| WorkspaceAnalysisLogRetentionSetting;
4241

4342
export interface BucketLifecycleSetting {
@@ -55,11 +54,6 @@ export interface RequesterPaysSetting {
5554
config: { enabled: boolean };
5655
}
5756

58-
export interface ImprovedDataTablesSetting {
59-
settingType: 'CompactDataTables';
60-
config: { enabled: boolean };
61-
}
62-
6357
export interface WorkspaceAnalysisLogRetentionSetting {
6458
settingType: 'GcpLogBucketRetention';
6559
config: { retentionDurationInDays: number };

src/libs/events.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ const eventsList = {
198198
workspaceSettingsBucketLifecycle: 'workspace:settings:bucketLifecycle',
199199
workspaceSettingsSoftDelete: 'workspace:settings:softDelete',
200200
workspaceSettingsRequesterPays: 'workspace:settings:requesterPays',
201-
workspaceSettingsImprovedDataTables: 'workspace:settings:improvedDataTables',
202201
workspaceSettingsLogRetention: 'workspace:settings:logRetention',
203202
workspaceSettingsMenuTab: 'workspace:settings:menuTab',
204203
workspaceShare: 'workspace:share',

src/libs/feature-previews-config.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export const JUPYTERLAB_GCP_FEATURE_ID = 'jupyterlab-gcp';
22
export const ENABLE_JUPYTERLAB_ID = 'enableJupyterLabGCP';
33
export const COHORT_BUILDER_CARD = 'cohortBuilderCard';
44
export const RAS_PROVIDER = 'rasProvider';
5-
export const IMPROVED_DATA_TABLES = 'improvedDataTables';
65
export const WORKFLOW_RETRY_WITH_MORE_MEMORY = 'retryWithMoreMemory';
76

87
// If the groups option is defined for a FeaturePreview, it must contain at least one group.
@@ -75,16 +74,6 @@ const featurePreviewsConfig: readonly FeaturePreview[] = [
7574
feedbackUrl: 'https://support.terra.bio/hc/en-us/articles/32634034451099',
7675
lastUpdated: '6/26/2025',
7776
},
78-
{
79-
id: IMPROVED_DATA_TABLES,
80-
title: 'Improved Data Table Performance',
81-
description: 'Opt-in to enable a workspace setting that will migrate your data tables for improved performance.',
82-
groups: ['preview-improved-data-tables'],
83-
feedbackUrl: `mailto:[email protected]?subject=${encodeURIComponent(
84-
'Support for Improved Data Table Performance'
85-
)}`,
86-
lastUpdated: '7/10/2025',
87-
},
8877
{
8978
id: WORKFLOW_RETRY_WITH_MORE_MEMORY,
9079
title: 'Retry Workflow Tasks with More Memory',

src/workspaces/SettingsModal/ImprovedDataTables.tsx

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/workspaces/SettingsModal/SettingsModal.test.tsx

Lines changed: 0 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import React from 'react';
66
import { Metrics, MetricsContract } from 'src/libs/ajax/Metrics';
77
import { SamResources, SamResourcesContract } from 'src/libs/ajax/SamResources';
88
import {
9-
ImprovedDataTablesSetting,
109
SeparateSubmissionFinalOutputsSetting,
1110
WorkspaceAnalysisLogRetentionSetting,
1211
} from 'src/libs/ajax/workspaces/workspace-models';
1312
import { Workspaces, WorkspacesAjaxContract, WorkspaceV2Contract } from 'src/libs/ajax/workspaces/Workspaces';
1413
import Events, { extractWorkspaceDetails } from 'src/libs/events';
15-
import { isFeaturePreviewEnabled } from 'src/libs/feature-previews';
1614
import { asMockedFn, partial, renderWithAppContexts as render, SelectHelper } from 'src/testing/test-utils';
1715
import { defaultGoogleWorkspace, makeGoogleWorkspace } from 'src/testing/workspace-fixtures';
1816
import SettingsModal from 'src/workspaces/SettingsModal/SettingsModal';
@@ -133,16 +131,6 @@ describe('SettingsModal', () => {
133131
config: { enabled: false },
134132
};
135133

136-
const improvedDataTablesEnabledSetting: ImprovedDataTablesSetting = {
137-
settingType: 'CompactDataTables',
138-
config: { enabled: true },
139-
};
140-
141-
const improvedDataTablesDisabledSetting: ImprovedDataTablesSetting = {
142-
settingType: 'CompactDataTables',
143-
config: { enabled: false },
144-
};
145-
146134
const separateSubmissionOutputsDisabledSetting: SeparateSubmissionFinalOutputsSetting = {
147135
settingType: 'SeparateSubmissionFinalOutputs',
148136
config: { enabled: false },
@@ -189,10 +177,6 @@ describe('SettingsModal', () => {
189177
asMockedFn(isWorkspaceOwner).mockReturnValue(false);
190178
};
191179

192-
const enableFeaturePreview = () => {
193-
asMockedFn(isFeaturePreviewEnabled).mockReturnValue(true); // Mock IMPROVED_DATA_TABLES as enabled
194-
};
195-
196180
it('has no accessibility errors', async () => {
197181
// Arrange
198182
setup([twoRules], jest.fn());
@@ -926,129 +910,6 @@ describe('SettingsModal', () => {
926910
});
927911
});
928912

929-
describe('Improved DataTables Settings', () => {
930-
const getImprovedDataTablesToggle = () => screen.getByLabelText('Improved Data Tables:');
931-
932-
it('renders the option as disabled if the user is not an owner', async () => {
933-
// Arrange
934-
setup([], jest.fn());
935-
mockNotOwner();
936-
enableFeaturePreview();
937-
938-
// Act
939-
await act(async () => {
940-
render(<SettingsModal workspace={makeGoogleWorkspace({ accessLevel: 'READER' })} onDismiss={jest.fn()} />);
941-
});
942-
943-
// Assert
944-
expect(getImprovedDataTablesToggle()).toBeDisabled();
945-
});
946-
947-
it('renders the option as off if no settings exist', async () => {
948-
// Arrange
949-
setup([], jest.fn());
950-
mockNotOwner();
951-
enableFeaturePreview();
952-
953-
// Act
954-
await act(async () => {
955-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
956-
});
957-
958-
// Assert
959-
expect(getImprovedDataTablesToggle()).not.toBeChecked();
960-
});
961-
962-
it('renders the option as off if improved data tables is disabled', async () => {
963-
// Arrange
964-
setup([improvedDataTablesDisabledSetting], jest.fn());
965-
enableFeaturePreview();
966-
967-
// Act
968-
await act(async () => {
969-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
970-
});
971-
972-
// Assert
973-
expect(getImprovedDataTablesToggle()).not.toBeChecked();
974-
});
975-
976-
it('renders the option as on but disabled if improved data tables is enabled', async () => {
977-
// Arrange
978-
setup([improvedDataTablesEnabledSetting], jest.fn());
979-
enableFeaturePreview();
980-
981-
// Act
982-
await act(async () => {
983-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
984-
});
985-
986-
// Assert
987-
expect(getImprovedDataTablesToggle()).toBeChecked();
988-
expect(getImprovedDataTablesToggle()).toBeDisabled();
989-
});
990-
991-
it('does not support disabling improved data tables', async () => {
992-
// Arrange
993-
const updateSettingsMock = jest.fn();
994-
setup([improvedDataTablesEnabledSetting], updateSettingsMock);
995-
enableFeaturePreview();
996-
997-
// Act
998-
await act(async () => {
999-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
1000-
});
1001-
1002-
const toggle = getImprovedDataTablesToggle();
1003-
expect(toggle).toBeDisabled();
1004-
});
1005-
1006-
it('supports enabling improved data tables', async () => {
1007-
// Arrange
1008-
const user = userEvent.setup();
1009-
const updateSettingsMock = jest.fn();
1010-
setup([], updateSettingsMock);
1011-
enableFeaturePreview();
1012-
1013-
// Act
1014-
await act(async () => {
1015-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
1016-
});
1017-
1018-
const toggle = getImprovedDataTablesToggle();
1019-
expect(toggle).not.toBeChecked();
1020-
await user.click(toggle);
1021-
expect(toggle).toBeChecked();
1022-
1023-
await user.click(screen.getByRole('button', { name: 'Save' }));
1024-
1025-
// Assert
1026-
expect(updateSettingsMock).toHaveBeenCalledWith([improvedDataTablesEnabledSetting, defaultSoftDeleteSetting]);
1027-
expect(captureEvent).toHaveBeenCalledWith(Events.workspaceSettingsImprovedDataTables, {
1028-
enabled: true,
1029-
...extractWorkspaceDetails(defaultGoogleWorkspace),
1030-
});
1031-
});
1032-
1033-
it('does not event if improved data tables did not change', async () => {
1034-
// Arrange
1035-
const updateSettingsMock = jest.fn();
1036-
setup([improvedDataTablesEnabledSetting], updateSettingsMock);
1037-
enableFeaturePreview();
1038-
1039-
// Act
1040-
await act(async () => {
1041-
render(<SettingsModal workspace={defaultGoogleWorkspace} onDismiss={jest.fn()} />);
1042-
});
1043-
const toggle = getImprovedDataTablesToggle();
1044-
expect(toggle).toBeDisabled();
1045-
1046-
// Assert
1047-
expect(updateSettingsMock).not.toHaveBeenCalledWith([improvedDataTablesEnabledSetting, defaultSoftDeleteSetting]);
1048-
expect(captureEvent).not.toHaveBeenCalledWith();
1049-
});
1050-
});
1051-
1052913
describe('Workspace Analysis Log Retention Settings', () => {
1053914
const getRetentionDaysElement = () => screen.getAllByLabelText('Days to retain:')[1];
1054915

src/workspaces/SettingsModal/SettingsModal.tsx

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,26 @@ import _ from 'lodash/fp';
33
import React, { ReactNode, useEffect, useState } from 'react';
44
import { Metrics } from 'src/libs/ajax/Metrics';
55
import { SamResources } from 'src/libs/ajax/SamResources';
6-
import {
7-
ImprovedDataTablesSetting,
8-
WorkspaceAnalysisLogRetentionSetting,
9-
} from 'src/libs/ajax/workspaces/workspace-models';
6+
import { WorkspaceAnalysisLogRetentionSetting } from 'src/libs/ajax/workspaces/workspace-models';
107
import { Workspaces } from 'src/libs/ajax/workspaces/Workspaces';
118
import colors from 'src/libs/colors';
129
import { withErrorReporting } from 'src/libs/error';
1310
import Events, { extractWorkspaceDetails } from 'src/libs/events';
14-
import { isFeaturePreviewEnabled } from 'src/libs/feature-previews';
15-
import { IMPROVED_DATA_TABLES } from 'src/libs/feature-previews-config';
1611
import { useCancellation } from 'src/libs/react-utils';
1712
import * as Utils from 'src/libs/utils';
1813
import BucketLifecycleSettings from 'src/workspaces/SettingsModal/BucketLifecycleSettings';
19-
import ImprovedDataTables from 'src/workspaces/SettingsModal/ImprovedDataTables';
2014
import RequesterPays from 'src/workspaces/SettingsModal/RequesterPays';
2115
import SoftDelete from 'src/workspaces/SettingsModal/SoftDelete';
2216
import {
2317
BucketLifecycleSetting,
2418
DeleteBucketLifecycleRule,
2519
isBucketLifecycleSetting,
2620
isDeleteBucketLifecycleRule,
27-
isImprovedDataTablesSetting,
2821
isLogRetentionSetting,
2922
isRequesterPaysSetting,
3023
isSoftDeleteSetting,
3124
modifyFirstBucketDeletionRule,
3225
modifyFirstSoftDeleteSetting,
33-
modifyImprovedDataTablesSetting,
3426
modifyLogRetentionSetting,
3527
modifyRequesterPaysSetting,
3628
removeFirstBucketDeletionRule,
@@ -65,9 +57,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
6557

6658
const [requesterPaysEnabled, setRequesterPaysEnabled] = useState(false);
6759

68-
const [originalImprovedDataTablesSetting, setOriginalImprovedDataTablesSetting] = useState(false);
69-
const [improvedDataTablesEnabled, setImprovedDataTablesEnabled] = useState(false);
70-
7160
// initial is null so that the input is empty when the modal opens
7261
const [logRetention, setLogRetention] = useState<number | null>(null);
7362

@@ -149,12 +138,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
149138
return settings.find((setting: WorkspaceSetting) => isRequesterPaysSetting(setting)) as RequesterPaysSetting;
150139
};
151140

152-
const getImproveDataTableSetting = (settings: WorkspaceSetting[]): ImprovedDataTablesSetting | undefined => {
153-
return settings.find((setting: WorkspaceSetting) =>
154-
isImprovedDataTablesSetting(setting)
155-
) as ImprovedDataTablesSetting;
156-
};
157-
158141
const getLogRetentionSetting = (settings: WorkspaceSetting[]): WorkspaceAnalysisLogRetentionSetting | undefined => {
159142
return settings.find((setting: WorkspaceSetting) =>
160143
isLogRetentionSetting(setting)
@@ -198,11 +181,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
198181
const requesterPaysEnabled = requesterPays === undefined ? false : requesterPays.config.enabled;
199182
setRequesterPaysEnabled(requesterPaysEnabled);
200183

201-
const improvedDataTables = getImproveDataTableSetting(settings);
202-
const improvedDataTablesEnabled = improvedDataTables ? improvedDataTables.config.enabled : false;
203-
setOriginalImprovedDataTablesSetting(improvedDataTablesEnabled);
204-
setImprovedDataTablesEnabled(improvedDataTablesEnabled);
205-
206184
// if GcpLogBucketRetention setting doesn't exist, default to 30 days
207185
const logRetentionSetting = getLogRetentionSetting(settings);
208186
const logRetentionDays = logRetentionSetting ? logRetentionSetting.config.retentionDurationInDays : 30;
@@ -230,9 +208,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
230208
const logRetentionInDays = logRetention ? logRetention! : 30; // default to 30 days if null
231209
newSettings = modifyLogRetentionSetting(newSettings, logRetentionInDays);
232210

233-
if (isFeaturePreviewEnabled(IMPROVED_DATA_TABLES) && improvedDataTablesEnabled) {
234-
newSettings = modifyImprovedDataTablesSetting(newSettings, improvedDataTablesEnabled);
235-
}
236211
await Workspaces().workspaceV2(namespace, name).updateSettings(newSettings);
237212

238213
props.onDismiss();
@@ -297,19 +272,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
297272
});
298273
}
299274

300-
// Event about improved data tables setting only if something actually changed.
301-
const originalImprovedDataTablesSetting = getImproveDataTableSetting(workspaceSettings || []);
302-
const newImprovedDataTablesSetting = getImproveDataTableSetting(newSettings);
303-
if (originalImprovedDataTablesSetting === undefined && !newImprovedDataTablesSetting?.config.enabled) {
304-
// If the workspace had no improved data tables setting before, and the current one is disabled, don't event.
305-
} else if (!_.isEqual(originalImprovedDataTablesSetting, newImprovedDataTablesSetting)) {
306-
// Event if the setting changed.
307-
void Metrics().captureEvent(Events.workspaceSettingsImprovedDataTables, {
308-
enabled: improvedDataTablesEnabled,
309-
...extractWorkspaceDetails(props.workspace),
310-
});
311-
}
312-
313275
// Event about log bucket retention setting only if something actually changed
314276
const originalLogRetentionSetting = getLogRetentionSetting(workspaceSettings || []);
315277
const newLogRetentionSetting = getLogRetentionSetting(newSettings);
@@ -377,14 +339,6 @@ const SettingsModal = (props: SettingsModalProps): ReactNode => {
377339
isOwner={isOwner}
378340
/>
379341
</div>
380-
{isFeaturePreviewEnabled(IMPROVED_DATA_TABLES) && (
381-
<ImprovedDataTables
382-
originalImprovedDataTablesEnabled={originalImprovedDataTablesSetting}
383-
improvedDataTablesEnabled={improvedDataTablesEnabled}
384-
setImprovedDataTablesEnabled={setImprovedDataTablesEnabled}
385-
isOwner={isOwner}
386-
/>
387-
)}
388342
<div style={{ paddingBottom: '1.0rem', borderBottom: `1px solid ${colors.accent()}` }}>
389343
<WorkspaceAnalysisLogRetention
390344
retentionPeriodInDays={logRetention}

0 commit comments

Comments
 (0)