diff --git a/src/app/datasets/dataset-table/dataset-table.component.ts b/src/app/datasets/dataset-table/dataset-table.component.ts
index 803f755282..787abda059 100644
--- a/src/app/datasets/dataset-table/dataset-table.component.ts
+++ b/src/app/datasets/dataset-table/dataset-table.component.ts
@@ -224,7 +224,7 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
this.store.dispatch(
updateUserSettingsAction({
property: {
- columns: columnsSetting,
+ fe_dataset_table_columns: columnsSetting,
},
}),
);
diff --git a/src/app/datasets/datasets-filter/datasets-filter.component.html b/src/app/datasets/datasets-filter/datasets-filter.component.html
index e919e6791f..0c2d352727 100644
--- a/src/app/datasets/datasets-filter/datasets-filter.component.html
+++ b/src/app/datasets/datasets-filter/datasets-filter.component.html
@@ -62,7 +62,7 @@
[metadataKeys]="metadataKeys$ | async"
[unitsEnabled]="appConfig.scienceSearchUnitsEnabled"
[showConditionToggle]="true"
- [conditionType]="'datasets'"
+ [conditionSettingsKey]="'fe_dataset_table_conditions'"
[addConditionAction]="addCondition"
[removeConditionAction]="removeCondition"
>
diff --git a/src/app/datasets/datasets-filter/datasets-filter.component.ts b/src/app/datasets/datasets-filter/datasets-filter.component.ts
index 334dbfdead..1056ffae1b 100644
--- a/src/app/datasets/datasets-filter/datasets-filter.component.ts
+++ b/src/app/datasets/datasets-filter/datasets-filter.component.ts
@@ -169,7 +169,7 @@ export class DatasetsFilterComponent implements OnInit, OnDestroy {
);
this.store.dispatch(
updateUserSettingsAction({
- property: { conditions: [] },
+ property: { fe_dataset_table_conditions: [] },
}),
);
@@ -208,7 +208,7 @@ export class DatasetsFilterComponent implements OnInit, OnDestroy {
if (filtersChanged) {
this.store.dispatch(
updateUserSettingsAction({
- property: { filters: result.filterConfigs },
+ property: { fe_dataset_table_filters: result.filterConfigs },
}),
);
diff --git a/src/app/files/files-dashboard/files-dashboard.component.ts b/src/app/files/files-dashboard/files-dashboard.component.ts
index 5473fc45e2..eabcde503a 100644
--- a/src/app/files/files-dashboard/files-dashboard.component.ts
+++ b/src/app/files/files-dashboard/files-dashboard.component.ts
@@ -250,23 +250,16 @@ export class FilesDashboardComponent implements OnInit, OnDestroy {
saveTableSettings(setting: ITableSetting) {
this.pending = true;
- const columnsSetting = setting.columnSetting.map((column) => {
- const { name, display, index, width } = column;
+ const columnsSetting = setting.columnSetting.map((column, index) => {
+ const { name, display, width } = column;
- return { name, display, index, width };
+ return { name, display, order: index, width };
});
- const tablesSettings = {
- ...this.tablesSettings,
- [setting.settingName || this.tableName]: {
- columns: columnsSetting,
- },
- };
-
this.store.dispatch(
updateUserSettingsAction({
property: {
- tablesSettings,
+ fe_file_table_columns: columnsSetting,
},
}),
);
diff --git a/src/app/instruments/instruments-dashboard/instruments-dashboard.component.ts b/src/app/instruments/instruments-dashboard/instruments-dashboard.component.ts
index 5c7c418e07..0a3a2543cc 100644
--- a/src/app/instruments/instruments-dashboard/instruments-dashboard.component.ts
+++ b/src/app/instruments/instruments-dashboard/instruments-dashboard.component.ts
@@ -195,23 +195,16 @@ export class InstrumentsDashboardComponent implements OnInit, OnDestroy {
saveTableSettings(setting: ITableSetting) {
this.pending = true;
- const columnsSetting = setting.columnSetting.map((column) => {
- const { name, display, index, width } = column;
+ const columnsSetting = setting.columnSetting.map((column, index) => {
+ const { name, display, width } = column;
- return { name, display, index, width };
+ return { name, display, order: index, width };
});
- const tablesSettings = {
- ...this.tablesSettings,
- [setting.settingName || this.tableName]: {
- columns: columnsSetting,
- },
- };
-
this.store.dispatch(
updateUserSettingsAction({
property: {
- tablesSettings,
+ fe_instrument_table_columns: columnsSetting,
},
}),
);
diff --git a/src/app/proposals/proposal-table/proposal-table.component.ts b/src/app/proposals/proposal-table/proposal-table.component.ts
index a2e2b3e5ad..9485c125fa 100644
--- a/src/app/proposals/proposal-table/proposal-table.component.ts
+++ b/src/app/proposals/proposal-table/proposal-table.component.ts
@@ -257,17 +257,10 @@ export class ProposalTableComponent implements OnInit, OnDestroy {
};
});
- const tablesSettings = {
- ...this.tablesSettings,
- [setting.settingName || this.tableName]: {
- columns: columnsSetting,
- },
- };
-
this.store.dispatch(
updateUserSettingsAction({
property: {
- tablesSettings,
+ fe_proposal_table_columns: columnsSetting,
},
}),
);
diff --git a/src/app/samples/sample-dashboard/sample-dashboard.component.html b/src/app/samples/sample-dashboard/sample-dashboard.component.html
index 3886684577..b23e4358ab 100644
--- a/src/app/samples/sample-dashboard/sample-dashboard.component.html
+++ b/src/app/samples/sample-dashboard/sample-dashboard.component.html
@@ -21,7 +21,6 @@
(search)="onTextSearchChange($event)"
>
-
diff --git a/src/app/samples/sample-dashboard/sample-dashboard.component.ts b/src/app/samples/sample-dashboard/sample-dashboard.component.ts
index a37d3caf5f..7f6f910fa9 100644
--- a/src/app/samples/sample-dashboard/sample-dashboard.component.ts
+++ b/src/app/samples/sample-dashboard/sample-dashboard.component.ts
@@ -329,23 +329,16 @@ export class SampleDashboardComponent implements OnInit, OnDestroy {
saveTableSettings(setting: ITableSetting) {
this.pending = true;
- const columnsSetting = setting.columnSetting.map((column) => {
- const { name, display, index, width } = column;
+ const columnsSetting = setting.columnSetting.map((column, index) => {
+ const { name, display, width } = column;
- return { name, display, index, width };
+ return { name, display, order: index, width };
});
- const tablesSettings = {
- ...this.tablesSettings,
- [setting.settingName || this.tableName]: {
- columns: columnsSetting,
- },
- };
-
this.store.dispatch(
updateUserSettingsAction({
property: {
- tablesSettings,
+ fe_sample_table_columns: columnsSetting,
},
}),
);
diff --git a/src/app/shared/modules/shared-condition/shared-condition.component.spec.ts b/src/app/shared/modules/shared-condition/shared-condition.component.spec.ts
index 89acd0994a..1af11dc97e 100644
--- a/src/app/shared/modules/shared-condition/shared-condition.component.spec.ts
+++ b/src/app/shared/modules/shared-condition/shared-condition.component.spec.ts
@@ -49,6 +49,7 @@ describe("SharedConditionComponent", () => {
fixture = TestBed.createComponent(SharedConditionComponent);
component = fixture.componentInstance;
+ component.conditionSettingsKey = "fe_dataset_table_conditions";
fixture.detectChanges();
});
diff --git a/src/app/shared/modules/shared-condition/shared-condition.component.ts b/src/app/shared/modules/shared-condition/shared-condition.component.ts
index 3d5fc022ac..43e59551d3 100644
--- a/src/app/shared/modules/shared-condition/shared-condition.component.ts
+++ b/src/app/shared/modules/shared-condition/shared-condition.component.ts
@@ -5,10 +5,13 @@ import {
Output,
OnDestroy,
} from "@angular/core";
-import { map, take } from "rxjs/operators";
+import { take } from "rxjs/operators";
import { ConditionConfig } from "state-management/state/user.store";
import { isEqual } from "lodash-es";
-import { ScientificCondition } from "state-management/models";
+import {
+ ScientificCondition,
+ ConditionSettingsKey,
+} from "state-management/models";
import { ConnectedPosition } from "@angular/cdk/overlay";
import { Store } from "@ngrx/store";
import { MatDialog } from "@angular/material/dialog";
@@ -24,8 +27,12 @@ import {
import {
updateConditionsConfigs,
updateUserSettingsAction,
+ updateSampleConditionsConfigs,
} from "state-management/actions/user.actions";
-import { selectConditions } from "state-management/selectors/user.selectors";
+import {
+ selectConditions,
+ selectSampleConditions,
+} from "state-management/selectors/user.selectors";
@Component({
selector: "shared-condition",
templateUrl: "./shared-condition.component.html",
@@ -39,18 +46,12 @@ export class SharedConditionComponent implements OnDestroy {
@Input() metadataKeys: string[] = [];
@Input() unitsEnabled = false;
@Input() showConditionToggle = false;
- @Input() conditionType: "datasets" | "samples" = "datasets";
+ @Input() conditionSettingsKey: ConditionSettingsKey;
@Input() addConditionAction: (condition: ScientificCondition) => void;
@Input() removeConditionAction: (condition: ScientificCondition) => void;
@Output() conditionsApplied = new EventEmitter();
- allConditions$ = this.store.select(selectConditions);
-
- conditionConfigs$ = this.allConditions$.pipe(
- map((configs) =>
- configs.filter((c) => c.conditionType === this.conditionType),
- ),
- );
+ conditionConfigs$ = this.store.select(selectConditions);
humanNameMap: { [key: string]: string } = {};
tempConditionValues: string[] = [];
@@ -82,6 +83,16 @@ export class SharedConditionComponent implements OnDestroy {
) {}
ngOnInit() {
+ switch (this.conditionSettingsKey) {
+ case "fe_dataset_table_conditions":
+ this.conditionConfigs$ = this.store.select(selectConditions);
+ break;
+ case "fe_sample_table_conditions":
+ this.conditionConfigs$ = this.store.select(selectSampleConditions);
+ break;
+ default:
+ throw new Error("Invalid conditionSettingsKey");
+ }
if (this.showConditions) {
this.buildMetadataMaps();
this.applyEnabledConditions();
@@ -92,11 +103,20 @@ export class SharedConditionComponent implements OnDestroy {
// Helper to get all conditions and update store
updateStore(updatedConditions: ConditionConfig[]) {
+ if (this.conditionSettingsKey === "fe_dataset_table_conditions") {
+ this.store.dispatch(
+ updateConditionsConfigs({ conditionConfigs: updatedConditions }),
+ );
+ } else if (this.conditionSettingsKey === "fe_sample_table_conditions") {
+ this.store.dispatch(
+ updateSampleConditionsConfigs({ conditionConfigs: updatedConditions }),
+ );
+ }
+
this.store.dispatch(
- updateConditionsConfigs({ conditionConfigs: updatedConditions }),
- );
- this.store.dispatch(
- updateUserSettingsAction({ property: { conditions: updatedConditions } }),
+ updateUserSettingsAction({
+ property: { [this.conditionSettingsKey]: updatedConditions },
+ }),
);
}
@@ -114,34 +134,14 @@ export class SharedConditionComponent implements OnDestroy {
applyEnabledConditions() {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const needsUpdate = allConditions.some((c) => !c.conditionType);
- if (needsUpdate && allConditions.length > 0) {
- const updatedConditions = allConditions.map((c) => ({
- ...c,
- conditionType: c.conditionType || this.conditionType,
- }));
- this.updateStore(updatedConditions);
-
- updatedConditions
- .filter((c) => c.conditionType === this.conditionType)
- .forEach((config) => {
- this.applyUnitsOptions(config.condition);
- });
- return;
- }
-
- const myConditions = allConditions.filter(
- (c) => !c.conditionType || c.conditionType === this.conditionType,
- );
-
- myConditions.forEach((config) => {
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ conditions.forEach((config) => {
if (config.condition.lhs) {
this.removeConditionAction?.(config.condition);
}
});
- myConditions.forEach((config) => {
+ conditions.forEach((config) => {
this.applyUnitsOptions(config.condition);
if (config.enabled && config.condition.lhs && config.condition.rhs) {
const condition = { ...config.condition };
@@ -244,11 +244,8 @@ export class SharedConditionComponent implements OnDestroy {
this.buildMetadataMaps();
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const myConditions = allConditions.filter(
- (c) => c.conditionType === this.conditionType,
- );
- const usedFields = myConditions.map((config) => config.condition.lhs);
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ const usedFields = conditions.map((config) => config.condition.lhs);
const availableKeys = this.metadataKeys.filter(
(key) => !usedFields.includes(key),
);
@@ -271,8 +268,8 @@ export class SharedConditionComponent implements OnDestroy {
if (res) {
const { data } = res;
- const existingConditionIndex = myConditions.findIndex(
- (config) => isEqual(config.condition.lhs, data.lhs),
+ const existingConditionIndex = conditions.findIndex((config) =>
+ isEqual(config.condition.lhs, data.lhs),
);
if (existingConditionIndex !== -1) {
@@ -290,10 +287,9 @@ export class SharedConditionComponent implements OnDestroy {
human_name: this.humanNameMap[data.lhs],
},
enabled: true,
- conditionType: this.conditionType,
};
- this.updateStore([...allConditions, newCondition]);
+ this.updateStore([...conditions, newCondition]);
this.snackBar.open("Condition added successfully", "Close", {
duration: 2000,
@@ -308,16 +304,14 @@ export class SharedConditionComponent implements OnDestroy {
removeCondition(condition: ConditionConfig, index: number) {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const actualIndex = allConditions.findIndex(
- (c) =>
- c.condition.lhs === condition.condition.lhs &&
- c.conditionType === this.conditionType,
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ const actualIndex = conditions.findIndex(
+ (c) => c.condition.lhs === condition.condition.lhs,
);
if (actualIndex === -1) return;
- const updatedConditions = [...allConditions];
+ const updatedConditions = [...conditions];
updatedConditions.splice(actualIndex, 1);
this.tempConditionValues.splice(index, 1);
@@ -336,22 +330,16 @@ export class SharedConditionComponent implements OnDestroy {
updateConditionField(index: number, updates: Partial) {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const myConditions = allConditions.filter(
- (c) => c.conditionType === this.conditionType,
- );
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ if (!conditions[index]) return;
- if (!myConditions[index]) return;
-
- const actualIndex = allConditions.findIndex(
- (c) =>
- c.condition.lhs === myConditions[index].condition.lhs &&
- c.conditionType === this.conditionType,
+ const actualIndex = conditions.findIndex(
+ (c) => c.condition.lhs === conditions[index].condition.lhs,
);
if (actualIndex === -1) return;
- const updatedConditions = [...allConditions];
+ const updatedConditions = [...conditions];
const conditionConfig = updatedConditions[actualIndex];
updatedConditions[actualIndex] = {
@@ -363,9 +351,17 @@ export class SharedConditionComponent implements OnDestroy {
},
};
- this.store.dispatch(
- updateConditionsConfigs({ conditionConfigs: updatedConditions }),
- );
+ if (this.conditionSettingsKey === "fe_dataset_table_conditions") {
+ this.store.dispatch(
+ updateConditionsConfigs({ conditionConfigs: updatedConditions }),
+ );
+ } else if (this.conditionSettingsKey === "fe_sample_table_conditions") {
+ this.store.dispatch(
+ updateSampleConditionsConfigs({
+ conditionConfigs: updatedConditions,
+ }),
+ );
+ }
}),
);
}
@@ -406,22 +402,16 @@ export class SharedConditionComponent implements OnDestroy {
toggleConditionEnabled(index: number, enabled: boolean) {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const myConditions = allConditions.filter(
- (c) => c.conditionType === this.conditionType,
- );
-
- if (!myConditions[index]) return;
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ if (!conditions[index]) return;
- const actualIndex = allConditions.findIndex(
- (c) =>
- c.condition.lhs === myConditions[index].condition.lhs &&
- c.conditionType === this.conditionType,
+ const actualIndex = conditions.findIndex(
+ (c) => c.condition.lhs === conditions[index].condition.lhs,
);
if (actualIndex === -1) return;
- const updatedConditions = [...allConditions];
+ const updatedConditions = [...conditions];
updatedConditions[actualIndex] = {
...updatedConditions[actualIndex],
enabled,
@@ -441,15 +431,8 @@ export class SharedConditionComponent implements OnDestroy {
applyConditions() {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const myConditions = allConditions.filter(
- (c) => c.conditionType === this.conditionType,
- );
- const otherConditions = allConditions.filter(
- (c) => c.conditionType !== this.conditionType,
- );
-
- const updatedMyConditions = myConditions.map((config, i) => {
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ const updatedMyConditions = conditions.map((config, i) => {
const lhs = config.condition.lhs;
const baseCondition = {
...config.condition,
@@ -490,10 +473,10 @@ export class SharedConditionComponent implements OnDestroy {
return { ...config, condition: baseCondition };
});
- // Removes old conditions for this type
- myConditions.forEach((c) => this.removeConditionAction?.(c.condition));
+ // Removes old conditions
+ conditions.forEach((c) => this.removeConditionAction?.(c.condition));
- // Adds updated conditions for this type
+ // Adds updated conditions
updatedMyConditions.forEach((config) => {
if (
config.enabled &&
@@ -505,8 +488,8 @@ export class SharedConditionComponent implements OnDestroy {
}
});
- // Merges other conditions with updated conditions for this type
- this.updateStore([...otherConditions, ...updatedMyConditions]);
+ // Merges other conditions with updated conditions
+ this.updateStore(updatedMyConditions);
this.tempConditionValues = [];
this.conditionsApplied.emit();
}),
@@ -515,19 +498,12 @@ export class SharedConditionComponent implements OnDestroy {
clearConditions() {
this.subscriptions.push(
- this.allConditions$.pipe(take(1)).subscribe((allConditions = []) => {
- const myConditions = allConditions.filter(
- (c) => c.conditionType === this.conditionType,
- );
-
- myConditions.forEach((config) =>
+ this.conditionConfigs$.pipe(take(1)).subscribe((conditions = []) => {
+ conditions.forEach((config) =>
this.removeConditionAction?.(config.condition),
);
- const updatedConditions = allConditions.filter(
- (c) => c.conditionType !== this.conditionType,
- );
- this.updateStore(updatedConditions);
+ this.updateStore([]);
}),
);
}
diff --git a/src/app/state-management/actions/user.actions.spec.ts b/src/app/state-management/actions/user.actions.spec.ts
index 925146fe21..50c695cc14 100644
--- a/src/app/state-management/actions/user.actions.spec.ts
+++ b/src/app/state-management/actions/user.actions.spec.ts
@@ -226,7 +226,7 @@ describe("User Actions", () => {
it("should create an action", () => {
const userSettings: UserSettings = {
externalSettings: {
- columns: [],
+ fe_dataset_table_columns: [],
},
datasetCount: 25,
jobCount: 25,
@@ -254,7 +254,7 @@ describe("User Actions", () => {
describe("updateUserSettingsAction", () => {
it("should create an action", () => {
- const property = { columns: [] };
+ const property = { fe_dataset_table_columns: [] };
const action = fromActions.updateUserSettingsAction({ property });
expect({ ...action }).toEqual({
type: "[User] Update User Settings",
@@ -267,7 +267,7 @@ describe("User Actions", () => {
it("should create an action", () => {
const userSettings: UserSettings = {
externalSettings: {
- columns: [],
+ fe_dataset_table_columns: [],
},
datasetCount: 25,
jobCount: 25,
diff --git a/src/app/state-management/actions/user.actions.ts b/src/app/state-management/actions/user.actions.ts
index bc1e9704ce..bf177ac825 100644
--- a/src/app/state-management/actions/user.actions.ts
+++ b/src/app/state-management/actions/user.actions.ts
@@ -188,6 +188,11 @@ export const updateConditionsConfigs = createAction(
props<{ conditionConfigs: ConditionConfig[] }>(),
);
+export const updateSampleConditionsConfigs = createAction(
+ "[User] Update Sample Conditions Configs",
+ props<{ conditionConfigs: ConditionConfig[] }>(),
+);
+
export const loadDefaultSettings = createAction(
"[User] Load Default Settings",
props<{ config: AppConfigInterface }>(),
diff --git a/src/app/state-management/effects/user.effects.spec.ts b/src/app/state-management/effects/user.effects.spec.ts
index 0fe902df8b..2ec184103f 100644
--- a/src/app/state-management/effects/user.effects.spec.ts
+++ b/src/app/state-management/effects/user.effects.spec.ts
@@ -55,6 +55,10 @@ class AppConfigServiceMock {
conditions: [],
filters: [],
},
+ defaultProposalsListSettings: {
+ columns: [],
+ filters: [],
+ },
};
}
}
@@ -597,15 +601,29 @@ describe("UserEffects", () => {
it("should result in a fetchUserSettingsCompleteAction", () => {
const userSettings = {
- columns: [],
datasetCount: 25,
jobCount: 25,
userId: "testId",
id: "testId",
} as unknown as UserSettings;
+
+ const normalizedUserSettings = {
+ ...userSettings,
+ externalSettings: {
+ fe_dataset_table_columns: [],
+ fe_dataset_table_conditions: [],
+ fe_dataset_table_filters: [],
+ fe_proposal_table_columns: [],
+ fe_proposal_table_filters: [],
+ fe_sample_table_columns: [],
+ fe_sample_table_conditions: [],
+ fe_instrument_table_columns: [],
+ fe_file_table_columns: [],
+ },
+ } as unknown as UserSettings;
const action = fromActions.fetchUserSettingsAction({ id });
const outcome = fromActions.fetchUserSettingsCompleteAction({
- userSettings,
+ userSettings: normalizedUserSettings,
});
actions = hot("-a", { a: action });
@@ -632,7 +650,6 @@ describe("UserEffects", () => {
describe("setLimitFilters$", () => {
it("should result in a setDatasetsLimitFilterAction and a setJobsLimitFilterAction", () => {
const userSettings = {
- columns: [],
datasetCount: 10,
jobCount: 10,
} as unknown as UserSettings;
@@ -668,7 +685,7 @@ describe("UserEffects", () => {
});
describe("updateUserColumns$", () => {
- const property = { columns: [] };
+ const property = { fe_dataset_table_columns: [] };
describe("ofType selectColumnAction", () => {
it("should dispatch an updateUserSettingsAction", () => {
const name = "test";
@@ -699,22 +716,19 @@ describe("UserEffects", () => {
});
describe("updateUserSettings$", () => {
- const property = { columns: [] };
+ const property = { fe_dataset_table_columns: [] };
it("should result in an updateUserSettingsCompleteAction", () => {
// TODO: try to fix the types here instead of using type casting and conversion
const userSettings = {
- columns: [],
- filters: [],
- conditions: [],
datasetCount: 25,
jobCount: 25,
userId: "testId",
id: "testId",
externalSettings: {
- columns: [],
- filters: [],
- conditions: [],
+ fe_dataset_table_columns: [],
+ fe_dataset_table_filters: [],
+ fe_dataset_table_conditions: [],
},
} as unknown as UserSettings;
@@ -724,9 +738,9 @@ describe("UserEffects", () => {
userId: "testId",
id: "testId",
externalSettings: {
- columns: [],
- filters: [],
- conditions: [],
+ fe_dataset_table_columns: [],
+ fe_dataset_table_filters: [],
+ fe_dataset_table_conditions: [],
},
};
const action = fromActions.updateUserSettingsAction({ property });
diff --git a/src/app/state-management/effects/user.effects.ts b/src/app/state-management/effects/user.effects.ts
index bf72045373..3e7547450c 100644
--- a/src/app/state-management/effects/user.effects.ts
+++ b/src/app/state-management/effects/user.effects.ts
@@ -325,28 +325,52 @@ export class UserEffects {
this.usersService.usersControllerGetSettingsV3(id, null).pipe(
map((userSettings: UserSettings) => {
const config = this.configService.getConfig();
- const externalSettings = userSettings.externalSettings || {};
-
- const settingsToCheck = ["columns", "conditions", "filters"];
+ const externalSettings = {
+ ...(userSettings.externalSettings || {}),
+ };
+
+ const settingsToCheck = [
+ "fe_dataset_table_columns",
+ "fe_dataset_table_conditions",
+ "fe_dataset_table_filters",
+ "fe_proposal_table_columns",
+ "fe_proposal_table_filters",
+ "fe_sample_table_columns",
+ "fe_sample_table_conditions",
+ "fe_instrument_table_columns",
+ "fe_file_table_columns",
+ ];
for (const setting of settingsToCheck) {
- let items = [];
-
- if (Array.isArray(externalSettings[setting])) {
- items = externalSettings[setting];
+ let items = externalSettings[setting];
+
+ if (!Array.isArray(items) || items.length < 1) {
+ if (setting.startsWith("fe_dataset_table_")) {
+ const key = setting.replace("fe_dataset_table_", "");
+ items =
+ config.defaultDatasetsListSettings?.[key] ||
+ initialUserState.settings[setting] ||
+ [];
+ } else if (setting.startsWith("fe_proposal_table_")) {
+ const key = setting.replace("fe_proposal_table_", "");
+ items =
+ config.defaultProposalsListSettings?.[key] ||
+ initialUserState.settings[setting] ||
+ [];
+ } else {
+ items = initialUserState.settings[setting] || [];
+ }
}
-
- if (items.length < 1) {
- items =
- config.defaultDatasetsListSettings[setting] ||
- initialUserState[setting];
- }
-
- userSettings[setting] = items;
+ externalSettings[setting] = items;
}
+ const normalizedUserSettings = {
+ ...userSettings,
+ externalSettings,
+ };
+
return fromActions.fetchUserSettingsCompleteAction({
- userSettings,
+ userSettings: normalizedUserSettings,
});
}),
catchError(() => of(fromActions.fetchUserSettingsFailedAction())),
@@ -370,7 +394,9 @@ export class UserEffects {
ofType(fromActions.fetchUserSettingsCompleteAction),
mergeMap(({ userSettings }) => [
fromActions.updateFilterConfigs({
- filterConfigs: (userSettings as any).filters,
+ filterConfigs:
+ (userSettings as any).externalSettings?.fe_dataset_table_filters ||
+ [],
}),
]),
);
@@ -379,27 +405,31 @@ export class UserEffects {
setConditions$ = createEffect(() => {
return this.actions$.pipe(
ofType(fromActions.fetchUserSettingsCompleteAction),
- mergeMap(({ userSettings }) => {
+ concatLatestFrom(() => this.store.select(selectConditions)),
+ mergeMap(([{ userSettings }, existingConditions]) => {
const actions = [];
+ const incomingConditions =
+ (userSettings as any).externalSettings?.fe_dataset_table_conditions ||
+ [];
+
+ const conditions =
+ incomingConditions.length > 0
+ ? incomingConditions
+ : existingConditions || [];
+
// TODO: Check with the types here. This is working better as it is now with the conditions and filters. We are leaving it for now as it was from before.
- (userSettings as any).conditions
+ conditions
.filter((condition) => condition.enabled)
.forEach((condition) => {
actions.push(
addScientificConditionAction({ condition: condition.condition }),
);
- actions.push(
- selectColumnAction({
- name: condition.condition.lhs,
- columnType: "custom",
- }),
- );
});
actions.push(
fromActions.updateConditionsConfigs({
- conditionConfigs: (userSettings as any).conditions,
+ conditionConfigs: conditions,
}),
);
@@ -428,7 +458,7 @@ export class UserEffects {
),
map((columns) =>
fromActions.updateUserSettingsAction({
- property: { columns },
+ property: { fe_dataset_table_columns: columns },
}),
),
);
@@ -441,10 +471,15 @@ export class UserEffects {
takeWhile(([action, user]) => !!user),
switchMap(([{ property }, user]) => {
const settingsToNest = [
- "columns",
- "conditions",
- "filters",
- "tablesSettings",
+ "fe_dataset_table_columns",
+ "fe_dataset_table_conditions",
+ "fe_dataset_table_filters",
+ "fe_proposal_table_columns",
+ "fe_proposal_table_filters",
+ "fe_sample_table_columns",
+ "fe_sample_table_conditions",
+ "fe_instrument_table_columns",
+ "fe_file_table_columns",
];
const propertyKeys = Object.keys(property);
const newProperty = {};
@@ -473,20 +508,12 @@ export class UserEffects {
JSON.stringify(newProperty) as any,
);
return apiCall$.pipe(
- map((userSettings: UserSettings) => {
- userSettings["conditions"] = (
- userSettings.externalSettings as any
- ).conditions;
- userSettings["filters"] = (
- userSettings.externalSettings as any
- ).filters;
- userSettings["columns"] = (
- userSettings.externalSettings as any
- ).columns;
- return fromActions.updateUserSettingsCompleteAction({
+ map((userSettings: UserSettings) =>
+ fromActions.updateUserSettingsCompleteAction({
userSettings,
- });
- }),
+ }),
+ ),
+
catchError(() => of(fromActions.updateUserSettingsFailedAction())),
);
}),
@@ -512,17 +539,17 @@ export class UserEffects {
map(([{ config }, existingConditions]) => {
const defaultFilters =
config.defaultDatasetsListSettings.filters ||
- initialUserState.filters;
+ initialUserState.settings.fe_dataset_table_filters;
const defaultConditions =
config.defaultDatasetsListSettings.conditions ||
- initialUserState.conditions;
+ initialUserState.settings.fe_dataset_table_conditions;
// NOTE: config.localColumns is for backward compatibility.
// it should be removed once no longer needed
const columns =
config.defaultDatasetsListSettings.columns ||
config.localColumns ||
- initialUserState.columns;
+ initialUserState.settings.fe_dataset_table_columns;
const isAuthenticated = this.authService.isAuthenticated();
const actions = [];
diff --git a/src/app/state-management/models/index.ts b/src/app/state-management/models/index.ts
index ba4927b45b..a8a8132ebb 100644
--- a/src/app/state-management/models/index.ts
+++ b/src/app/state-management/models/index.ts
@@ -9,6 +9,15 @@ export interface Settings {
datasetCount: number;
jobCount: number;
darkTheme: false;
+ fe_dataset_table_columns?: TableColumn[];
+ fe_dataset_table_filters?: FilterConfig[];
+ fe_dataset_table_conditions?: ConditionConfig[];
+ fe_proposal_table_columns?: TableColumn[];
+ fe_proposal_table_filters?: FilterConfig[];
+ fe_sample_table_columns?: TableColumn[];
+ fe_sample_table_conditions?: ConditionConfig[];
+ fe_instrument_table_columns?: TableColumn[];
+ fe_file_table_columns?: TableColumn[];
}
export interface TableColumn {
@@ -183,3 +192,7 @@ export interface LogbookFilters extends GenericFilters {
export interface JobFilters extends GenericFilters {
mode: Record | undefined;
}
+
+export type ConditionSettingsKey =
+ | "fe_dataset_table_conditions"
+ | "fe_sample_table_conditions";
diff --git a/src/app/state-management/reducers/user.reducer.spec.ts b/src/app/state-management/reducers/user.reducer.spec.ts
index 790f15f825..e70dbd6467 100644
--- a/src/app/state-management/reducers/user.reducer.spec.ts
+++ b/src/app/state-management/reducers/user.reducer.spec.ts
@@ -20,7 +20,7 @@ describe("UserReducer", () => {
});
const state = userReducer(initialUserState, action);
- expect(state.columns.length).toEqual(1);
+ expect(state.settings.fe_dataset_table_columns.length).toEqual(1);
});
});
@@ -117,12 +117,16 @@ describe("UserReducer", () => {
describe("on fetchUserSettingsCompleteAction", () => {
it("should set jobCount and datasetCount settings, and columns if not empty", () => {
+ const datasetColumns: TableColumn[] = [
+ { name: "test", order: 0, type: "standard", enabled: true },
+ ];
const userSettings = {
- columns: [{ name: "test", order: 0, type: "standard", enabled: true }],
datasetCount: 50,
jobCount: 50,
userId: "testId",
- externalSettings: {},
+ externalSettings: {
+ fe_dataset_table_columns: datasetColumns,
+ },
id: "testId",
};
const action = fromActions.fetchUserSettingsCompleteAction({
@@ -132,19 +136,20 @@ describe("UserReducer", () => {
expect(state.settings.datasetCount).toEqual(userSettings.datasetCount);
expect(state.settings.jobCount).toEqual(userSettings.jobCount);
- expect(state.columns).toEqual(
- (userSettings as { columns: TableColumn[] }).columns,
+ expect(state.settings.fe_dataset_table_columns).toEqual(
+ userSettings.externalSettings.fe_dataset_table_columns,
);
});
it("should set jobCount and datasetCount settings, and not columns if empty", () => {
const userSettings = {
- columns: [],
datasetCount: 50,
jobCount: 50,
userId: "testId",
id: "testId",
- externalSettings: {},
+ externalSettings: {
+ fe_dataset_table_columns: [],
+ },
};
const action = fromActions.fetchUserSettingsCompleteAction({
userSettings,
@@ -153,18 +158,24 @@ describe("UserReducer", () => {
expect(state.settings.datasetCount).toEqual(userSettings.datasetCount);
expect(state.settings.jobCount).toEqual(userSettings.jobCount);
- expect(state.columns).toEqual(initialUserState.columns);
+ expect(state.settings.fe_dataset_table_columns).toEqual(
+ initialUserState.settings.fe_dataset_table_columns,
+ );
});
});
describe("on updateUserSettingsCompleteAction", () => {
it("should set jobCount and datasetCount settings, and columns if not empty", () => {
+ const datasetColumns: TableColumn[] = [
+ { name: "test", order: 0, type: "standard", enabled: true },
+ ];
const userSettings = {
- columns: [{ name: "test", order: 0, type: "standard", enabled: true }],
datasetCount: 50,
jobCount: 50,
userId: "testId",
- externalSettings: {},
+ externalSettings: {
+ fe_dataset_table_columns: datasetColumns,
+ },
id: "testId",
};
const action = fromActions.updateUserSettingsCompleteAction({
@@ -174,18 +185,19 @@ describe("UserReducer", () => {
expect(state.settings.datasetCount).toEqual(userSettings.datasetCount);
expect(state.settings.jobCount).toEqual(userSettings.jobCount);
- expect(state.columns).toEqual(
- (userSettings as { columns: TableColumn[] }).columns,
+ expect(state.settings.fe_dataset_table_columns).toEqual(
+ userSettings.externalSettings.fe_dataset_table_columns,
);
});
it("should set jobCount and datasetCount settings, and not columns if empty", () => {
const userSettings = {
- columns: [],
datasetCount: 50,
jobCount: 50,
userId: "testId",
- externalSettings: {},
+ externalSettings: {
+ fe_dataset_table_columns: [],
+ },
id: "testId",
};
const action = fromActions.updateUserSettingsCompleteAction({
@@ -195,7 +207,9 @@ describe("UserReducer", () => {
expect(state.settings.datasetCount).toEqual(userSettings.datasetCount);
expect(state.settings.jobCount).toEqual(userSettings.jobCount);
- expect(state.columns).toEqual(initialUserState.columns);
+ expect(state.settings.fe_dataset_table_columns).toEqual(
+ initialUserState.settings.fe_dataset_table_columns,
+ );
});
});
@@ -237,11 +251,21 @@ describe("UserReducer", () => {
const action = fromActions.addCustomColumnsAction({ names });
const state = userReducer(initialUserState, action);
- expect(state.columns[state.columns.length - 1].name).toEqual("test");
- expect(state.columns[state.columns.length - 1].order).toEqual(
- state.columns.length - 1,
- );
- expect(state.columns[state.columns.length - 1].enabled).toEqual(false);
+ expect(
+ state.settings.fe_dataset_table_columns[
+ state.settings.fe_dataset_table_columns.length - 1
+ ].name,
+ ).toEqual("test");
+ expect(
+ state.settings.fe_dataset_table_columns[
+ state.settings.fe_dataset_table_columns.length - 1
+ ].order,
+ ).toEqual(state.settings.fe_dataset_table_columns.length - 1);
+ expect(
+ state.settings.fe_dataset_table_columns[
+ state.settings.fe_dataset_table_columns.length - 1
+ ].enabled,
+ ).toEqual(false);
});
});
@@ -253,7 +277,7 @@ describe("UserReducer", () => {
const action = fromActions.selectColumnAction({ name, columnType });
const state = userReducer(initialUserState, action);
- state.columns.forEach((column) => {
+ state.settings.fe_dataset_table_columns.forEach((column) => {
if (column.name === name && column.type === columnType) {
expect(column.enabled).toEqual(true);
}
@@ -269,7 +293,7 @@ describe("UserReducer", () => {
const action = fromActions.deselectColumnAction({ name, columnType });
const state = userReducer(initialUserState, action);
- state.columns.forEach((column) => {
+ state.settings.fe_dataset_table_columns.forEach((column) => {
if (column.name === name && column.type === columnType) {
expect(column.enabled).toEqual(false);
}
diff --git a/src/app/state-management/reducers/user.reducer.ts b/src/app/state-management/reducers/user.reducer.ts
index 9b8a41461f..b42063f385 100644
--- a/src/app/state-management/reducers/user.reducer.ts
+++ b/src/app/state-management/reducers/user.reducer.ts
@@ -9,7 +9,10 @@ const reducer = createReducer(
fromActions.setDatasetTableColumnsAction,
(state, { columns }): UserState => ({
...state,
- columns,
+ settings: {
+ ...state.settings,
+ fe_dataset_table_columns: columns,
+ },
}),
),
@@ -71,63 +74,34 @@ const reducer = createReducer(
on(
fromActions.fetchUserSettingsCompleteAction,
(state, { userSettings }): UserState => {
- const { datasetCount, jobCount, columns, externalSettings } =
- userSettings as any;
- const settings = {
- ...state.settings,
- datasetCount,
- jobCount,
+ const { datasetCount, jobCount, externalSettings } = userSettings as any;
+
+ return {
+ ...state,
+ settings: {
+ ...state.settings,
+ datasetCount,
+ jobCount,
+ ...externalSettings,
+ },
+ hasFetchedSettings: true,
};
- if (columns.length > 0) {
- return {
- ...state,
- settings,
- columns,
- tablesSettings: externalSettings?.tablesSettings,
- hasFetchedSettings: true,
- };
- } else {
- return {
- ...state,
- settings,
- tablesSettings: externalSettings?.tablesSettings,
- hasFetchedSettings: true,
- };
- }
},
),
on(
fromActions.updateUserSettingsCompleteAction,
(state, { userSettings }): UserState => {
- const {
- datasetCount,
- jobCount,
- columns = [],
- externalSettings,
- filters,
- conditions,
- } = userSettings as any;
- const settings = { ...state.settings, datasetCount, jobCount };
-
- if (columns.length > 0) {
- return {
- ...state,
- settings,
- columns,
- tablesSettings: externalSettings?.tablesSettings,
- filters: filters || state.filters,
- conditions: conditions || state.conditions,
- };
- } else {
- return {
- ...state,
- settings,
- tablesSettings: externalSettings?.tablesSettings,
- filters: filters || state.filters,
- conditions: conditions || state.conditions,
- };
- }
+ const { datasetCount, jobCount, externalSettings } = userSettings as any;
+ return {
+ ...state,
+ settings: {
+ ...state.settings,
+ datasetCount,
+ jobCount,
+ ...externalSettings,
+ },
+ };
},
),
@@ -154,7 +128,7 @@ const reducer = createReducer(
),
on(fromActions.addCustomColumnsAction, (state, { names }): UserState => {
- const existingColumns = [...state.columns];
+ const existingColumns = [...state.settings.fe_dataset_table_columns];
const standardColumns = existingColumns.filter(
(column) => column.type === "standard",
@@ -192,31 +166,40 @@ const reducer = createReducer(
.concat(enabledCustomColumns)
.concat(newColumns);
- return { ...state, columns };
+ return {
+ ...state,
+ settings: { ...state.settings, fe_dataset_table_columns: columns },
+ };
}),
on(
fromActions.selectColumnAction,
(state, { name, columnType }): UserState => {
- const columns = [...state.columns];
+ const columns = [...state.settings.fe_dataset_table_columns];
columns.forEach((item) => {
if (item.name === name && item.type === columnType) {
item.enabled = true;
}
});
- return { ...state, columns };
+ return {
+ ...state,
+ settings: { ...state.settings, fe_dataset_table_columns: columns },
+ };
},
),
on(
fromActions.deselectColumnAction,
(state, { name, columnType }): UserState => {
- const columns = [...state.columns];
+ const columns = [...state.settings.fe_dataset_table_columns];
columns.forEach((item) => {
if (item.name === name && item.type === columnType) {
item.enabled = false;
}
});
- return { ...state, columns };
+ return {
+ ...state,
+ settings: { ...state.settings, fe_dataset_table_columns: columns },
+ };
},
),
@@ -262,13 +245,30 @@ const reducer = createReducer(
(state, { filterConfigs }): UserState => ({
...state,
filters: filterConfigs,
+ settings: {
+ ...state.settings,
+ fe_dataset_table_filters: filterConfigs,
+ },
}),
),
on(
fromActions.updateConditionsConfigs,
(state, { conditionConfigs }): UserState => ({
...state,
- conditions: conditionConfigs,
+ settings: {
+ ...state.settings,
+ fe_dataset_table_conditions: conditionConfigs,
+ },
+ }),
+ ),
+ on(
+ fromActions.updateSampleConditionsConfigs,
+ (state, { conditionConfigs }): UserState => ({
+ ...state,
+ settings: {
+ ...state.settings,
+ fe_sample_table_conditions: conditionConfigs,
+ },
}),
),
);
diff --git a/src/app/state-management/selectors/datasets.selectors.spec.ts b/src/app/state-management/selectors/datasets.selectors.spec.ts
index a2db2f5737..340cbd0cb3 100644
--- a/src/app/state-management/selectors/datasets.selectors.spec.ts
+++ b/src/app/state-management/selectors/datasets.selectors.spec.ts
@@ -290,7 +290,7 @@ describe("test dataset selectors", () => {
it("should return the fullfacet params", () => {
const fullfacet = fromDatasetSelectors.selectFullfacetParams.projector(
initialDatasetState,
- initialUserState.filters,
+ initialUserState.settings.fe_dataset_table_filters,
);
const fullfacetKeys = Object.keys(fullfacet);
expect(fullfacet.facets).toEqual([
diff --git a/src/app/state-management/selectors/files.selectors.spec.ts b/src/app/state-management/selectors/files.selectors.spec.ts
index d391e6c966..3a2846251a 100644
--- a/src/app/state-management/selectors/files.selectors.spec.ts
+++ b/src/app/state-management/selectors/files.selectors.spec.ts
@@ -1,5 +1,5 @@
import * as fromSelectors from "./files.selectors";
-import { selectTablesSettings } from "./user.selectors";
+import { selectSettings } from "./user.selectors";
import { GenericFilters } from "state-management/models";
import { mockOrigDatablock as origDatablock } from "shared/MockStubs";
import { FilesState } from "state-management/state/files.store";
@@ -50,12 +50,16 @@ describe("Files Selectors", () => {
fromSelectors.selectFilesWithCountAndTableSettings.projector(
fromSelectors.selectAllOrigDatablocks.projector(initialFilesState),
fromSelectors.selectOrigDatablocksCount.projector(initialFilesState),
- selectTablesSettings.projector(initialUserState),
+ selectSettings.projector(initialUserState),
),
).toEqual({
origDatablocks: [],
count: 0,
- tablesSettings: {},
+ tablesSettings: {
+ filesTable: {
+ columns: initialUserState.settings.fe_file_table_columns,
+ },
+ },
});
});
});
diff --git a/src/app/state-management/selectors/files.selectors.ts b/src/app/state-management/selectors/files.selectors.ts
index 280563cace..b14ec2321f 100644
--- a/src/app/state-management/selectors/files.selectors.ts
+++ b/src/app/state-management/selectors/files.selectors.ts
@@ -1,6 +1,6 @@
import { createFeatureSelector, createSelector } from "@ngrx/store";
import { FilesState } from "state-management/state/files.store";
-import { selectTablesSettings } from "./user.selectors";
+import { selectSettings } from "./user.selectors";
const selectFilesState = createFeatureSelector("files");
@@ -22,10 +22,14 @@ export const selectOrigDatablocksCount = createSelector(
export const selectFilesWithCountAndTableSettings = createSelector(
selectAllOrigDatablocks,
selectOrigDatablocksCount,
- selectTablesSettings,
- (origDatablocks, count, tablesSettings) => ({
+ selectSettings,
+ (origDatablocks, count, settings) => ({
origDatablocks,
count,
- tablesSettings,
+ tablesSettings: {
+ filesTable: {
+ columns: settings.fe_file_table_columns,
+ },
+ },
}),
);
diff --git a/src/app/state-management/selectors/instruments.selectors.spec.ts b/src/app/state-management/selectors/instruments.selectors.spec.ts
index 13a9dd3e2a..f45b7f5861 100644
--- a/src/app/state-management/selectors/instruments.selectors.spec.ts
+++ b/src/app/state-management/selectors/instruments.selectors.spec.ts
@@ -81,12 +81,16 @@ describe("Instrument Selectors", () => {
fromSelectors.selectInstrumentsCount.projector(
initialInstrumentState,
),
- fromUserSelectors.selectTablesSettings.projector(initialUserState),
+ fromUserSelectors.selectSettings.projector(initialUserState),
),
).toEqual({
instruments: [],
count: 0,
- tablesSettings: {},
+ tablesSettings: {
+ instrumentsTable: {
+ columns: initialUserState.settings.fe_instrument_table_columns,
+ },
+ },
});
});
diff --git a/src/app/state-management/selectors/instruments.selectors.ts b/src/app/state-management/selectors/instruments.selectors.ts
index fb4ffb074c..88fc0423c6 100644
--- a/src/app/state-management/selectors/instruments.selectors.ts
+++ b/src/app/state-management/selectors/instruments.selectors.ts
@@ -1,6 +1,6 @@
import { createFeatureSelector, createSelector } from "@ngrx/store";
import { InstrumentState } from "state-management/state/instruments.store";
-import { selectTablesSettings } from "./user.selectors";
+import { selectSettings } from "./user.selectors";
const selectInstrumentState =
createFeatureSelector("instruments");
@@ -38,12 +38,16 @@ export const selectInstrumentsPerPage = createSelector(
export const selectInstrumentsWithCountAndTableSettings = createSelector(
selectInstruments,
selectInstrumentsCount,
- selectTablesSettings,
- (instruments, count, tablesSettings) => {
+ selectSettings,
+ (instruments, count, settings) => {
return {
instruments,
count,
- tablesSettings,
+ tablesSettings: {
+ instrumentsTable: {
+ columns: settings.fe_instrument_table_columns,
+ },
+ },
};
},
);
diff --git a/src/app/state-management/selectors/proposals.selectors.spec.ts b/src/app/state-management/selectors/proposals.selectors.spec.ts
index 9381c96d85..ae479b3c62 100644
--- a/src/app/state-management/selectors/proposals.selectors.spec.ts
+++ b/src/app/state-management/selectors/proposals.selectors.spec.ts
@@ -2,6 +2,7 @@ import * as fromSelectors from "./proposals.selectors";
import { ProposalsState } from "state-management/state/proposals.store";
import { createMock } from "shared/MockStubs";
import { ProposalClass } from "@scicatproject/scicat-sdk-ts-angular";
+import { TableColumn, Settings } from "state-management/models";
const proposal = createMock({
proposalId: "testId",
@@ -320,20 +321,36 @@ describe("Proposal Selectors", () => {
{ proposalId: "p1", instrumentIds: ["i1"] } as any,
];
const count = 1;
- const tablesSettings = { col: "v" };
+
+ const proposalColumns: TableColumn[] = [
+ { name: "proposalId", enabled: true, order: 0, type: "standard" },
+ ];
+
+ const settings: Settings = {
+ tapeCopies: "",
+ datasetCount: 25,
+ jobCount: 25,
+ darkTheme: false,
+ fe_proposal_table_columns: proposalColumns,
+ };
+
const hasFetchedSettings = true;
expect(
fromSelectors.selectProposalsWithCountAndTableSettings.projector(
proposalsSample,
count,
- tablesSettings,
hasFetchedSettings,
+ settings,
),
).toEqual({
proposals: proposalsSample,
count,
- tablesSettings,
+ tablesSettings: {
+ proposalsTable: {
+ columns: settings.fe_proposal_table_columns,
+ },
+ },
hasFetchedSettings,
});
});
diff --git a/src/app/state-management/selectors/proposals.selectors.ts b/src/app/state-management/selectors/proposals.selectors.ts
index b511b4bd8e..a30ae0318e 100644
--- a/src/app/state-management/selectors/proposals.selectors.ts
+++ b/src/app/state-management/selectors/proposals.selectors.ts
@@ -1,9 +1,6 @@
import { createSelector, createFeatureSelector } from "@ngrx/store";
import { ProposalsState } from "../state/proposals.store";
-import {
- selectHasFetchedSettings,
- selectTablesSettings,
-} from "./user.selectors";
+import { selectHasFetchedSettings, selectSettings } from "./user.selectors";
import { selectInstrumentWithIdAndLabel } from "./instruments.selectors";
const selectProposalsState = createFeatureSelector("proposals");
@@ -197,9 +194,15 @@ export const selectDatasetsQueryParams = createSelector(
export const selectProposalsWithCountAndTableSettings = createSelector(
selectEnrichedProposals,
selectProposalsCount,
- selectTablesSettings,
selectHasFetchedSettings,
- (proposals, count, tablesSettings, hasFetchedSettings) => {
+ selectSettings,
+ (proposals, count, hasFetchedSettings, settings) => {
+ const tablesSettings = {
+ proposalsTable: {
+ columns: settings.fe_proposal_table_columns,
+ },
+ };
+
return {
proposals,
count,
diff --git a/src/app/state-management/selectors/samples.selectors.spec.ts b/src/app/state-management/selectors/samples.selectors.spec.ts
index a8d00f426d..202418cc32 100644
--- a/src/app/state-management/selectors/samples.selectors.spec.ts
+++ b/src/app/state-management/selectors/samples.selectors.spec.ts
@@ -204,7 +204,7 @@ describe("Sample Selectors", () => {
initialSampleState.sampleFilters.text,
initialSampleState.metadataKeys,
initialSampleState.sampleFilters.characteristics,
- initialUserState.tablesSettings,
+ initialUserState.settings,
initialSampleState.samplesCount,
false, //hasAppliedFilters
),
@@ -220,7 +220,11 @@ describe("Sample Selectors", () => {
textFilter: "test",
metadataKeys: [],
characteristicsFilter: [],
- tableSettings: {},
+ tableSettings: {
+ samplesTable: {
+ columns: initialUserState.settings.fe_sample_table_columns,
+ },
+ },
count: 0,
hasAppliedFilters: false,
});
diff --git a/src/app/state-management/selectors/samples.selectors.ts b/src/app/state-management/selectors/samples.selectors.ts
index 909a2b2d80..a6adf42e6d 100644
--- a/src/app/state-management/selectors/samples.selectors.ts
+++ b/src/app/state-management/selectors/samples.selectors.ts
@@ -1,6 +1,6 @@
import { createFeatureSelector, createSelector } from "@ngrx/store";
import { SampleState } from "state-management/state/samples.store";
-import { selectCurrentUser, selectTablesSettings } from "./user.selectors";
+import { selectCurrentUser, selectSettings } from "./user.selectors";
const selectSampleState = createFeatureSelector("samples");
@@ -113,7 +113,7 @@ export const selectSampleDashboardPageViewModel = createSelector(
selectTextFilter,
selectMetadataKeys,
selectCharacteristicsFilter,
- selectTablesSettings,
+ selectSettings,
selectSamplesCount,
selectHasAppliedFilters,
(
@@ -124,7 +124,7 @@ export const selectSampleDashboardPageViewModel = createSelector(
textFilter,
metadataKeys,
characteristicsFilter,
- tableSettings,
+ settings,
count,
hasAppliedFilters,
) => ({
@@ -135,7 +135,11 @@ export const selectSampleDashboardPageViewModel = createSelector(
textFilter,
metadataKeys,
characteristicsFilter,
- tableSettings,
+ tableSettings: {
+ samplesTable: {
+ columns: settings.fe_sample_table_columns,
+ },
+ },
count,
hasAppliedFilters,
}),
diff --git a/src/app/state-management/selectors/user.selectors.spec.ts b/src/app/state-management/selectors/user.selectors.spec.ts
index 7c818c9a1a..98d5b01e4c 100644
--- a/src/app/state-management/selectors/user.selectors.spec.ts
+++ b/src/app/state-management/selectors/user.selectors.spec.ts
@@ -52,6 +52,54 @@ const settings: Settings = {
datasetCount: 25,
jobCount: 25,
darkTheme: false,
+ fe_dataset_table_columns: [
+ { name: "datasetName", order: 1, type: "standard", enabled: true },
+ ],
+ fe_dataset_table_filters: [
+ {
+ key: "creationLocation",
+ label: "Location",
+ type: "multiSelect",
+ description: "Filter by creation location on the dataset",
+ enabled: true,
+ },
+ {
+ key: "pid",
+ label: "Pid",
+ type: "text",
+ description: "Filter by dataset pid",
+ enabled: true,
+ },
+ {
+ key: "ownerGroup",
+ label: "Group",
+ type: "multiSelect",
+ description: "Filter by owner group of the dataset",
+ enabled: true,
+ },
+ {
+ key: "type",
+ label: "Type",
+ type: "multiSelect",
+ description: "Filter by dataset type",
+ enabled: true,
+ },
+ {
+ key: "keywords",
+ label: "Keyword",
+ type: "multiSelect",
+ description: "Filter by keywords in the dataset",
+ enabled: true,
+ },
+ {
+ key: "creationTime",
+ label: "Creation Time",
+ type: "dateRange",
+ description: "Filter by creation time of the dataset",
+ enabled: true,
+ },
+ ],
+ fe_dataset_table_conditions: [],
};
export const initialUserState: UserState = {
@@ -118,7 +166,6 @@ export const initialUserState: UserState = {
],
conditions: [],
- tablesSettings: {},
hasFetchedSettings: false,
};
@@ -243,9 +290,9 @@ describe("User Selectors", () => {
describe("selectColumns", () => {
it("should select columns", () => {
- expect(fromSelectors.selectColumns.projector(initialUserState)).toEqual([
- { name: "datasetName", order: 1, type: "standard", enabled: true },
- ]);
+ expect(fromSelectors.selectColumns.projector(initialUserState)).toEqual(
+ initialUserState.settings.fe_dataset_table_columns,
+ );
});
});
diff --git a/src/app/state-management/selectors/user.selectors.ts b/src/app/state-management/selectors/user.selectors.ts
index 34013309ae..334b6d4a2f 100644
--- a/src/app/state-management/selectors/user.selectors.ts
+++ b/src/app/state-management/selectors/user.selectors.ts
@@ -91,22 +91,22 @@ export const selectIsLoading = createSelector(
export const selectColumns = createSelector(
selectUserState,
- (state) => state.columns,
+ (state) => state.settings.fe_dataset_table_columns,
);
-export const selectTablesSettings = createSelector(
+export const selectFilters = createSelector(
selectUserState,
- (state) => state.tablesSettings,
+ (state) => state.settings.fe_dataset_table_filters,
);
-export const selectFilters = createSelector(
+export const selectConditions = createSelector(
selectUserState,
- (state) => state.filters,
+ (state) => state.settings.fe_dataset_table_conditions || [],
);
-export const selectConditions = createSelector(
+export const selectSampleConditions = createSelector(
selectUserState,
- (state) => state.conditions,
+ (state) => state.settings.fe_sample_table_conditions || [],
);
export const selectSampleDialogPageViewModel = createSelector(
@@ -153,7 +153,7 @@ export const selectHasFetchedSettings = createSelector(
export const selectColumnsWithHasFetchedSettings = createSelector(
selectUserState,
(state) => ({
- columns: state.columns,
+ columns: state.settings.fe_dataset_table_columns,
hasFetchedSettings: state.hasFetchedSettings,
}),
);
diff --git a/src/app/state-management/state/user.store.ts b/src/app/state-management/state/user.store.ts
index e7a910aff3..9e01a3c661 100644
--- a/src/app/state-management/state/user.store.ts
+++ b/src/app/state-management/state/user.store.ts
@@ -24,7 +24,6 @@ export interface FilterConfig {
export interface ConditionConfig {
condition: ScientificCondition;
enabled: boolean;
- conditionType?: "datasets" | "samples";
}
// NOTE It IS ok to make up a state of other sub states
@@ -48,8 +47,6 @@ export interface UserState {
columns: TableColumn[];
- tablesSettings: object;
-
filters: FilterConfig[];
conditions: ConditionConfig[];
@@ -73,6 +70,15 @@ export const initialUserState: UserState = {
datasetCount: 25,
jobCount: 25,
darkTheme: false,
+ fe_dataset_table_columns: [],
+ fe_dataset_table_filters: [],
+ fe_dataset_table_conditions: [],
+ fe_proposal_table_columns: [],
+ fe_proposal_table_filters: [],
+ fe_sample_table_columns: [],
+ fe_sample_table_conditions: [],
+ fe_instrument_table_columns: [],
+ fe_file_table_columns: [],
}, // TODO sync with server settings?
message: undefined,
@@ -132,6 +138,4 @@ export const initialUserState: UserState = {
],
conditions: [],
-
- tablesSettings: {},
};