Skip to content

Commit 7daf494

Browse files
authored
Some minor improvements regarding stored data and avoidance of updates in dependencies (#905)
1 parent bc880d0 commit 7daf494

File tree

14 files changed

+198
-186
lines changed

14 files changed

+198
-186
lines changed

frontend/src/modules/2DViewer/LayerFramework/customLayerImplementations/RealizationGridLayer.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ export class RealizationGridLayer
5959

6060
makeValueRange({
6161
getData,
62-
}: DataLayerInformationAccessors<RealizationGridSettings, RealizationGridData>): [number, number] | null {
62+
}: DataLayerInformationAccessors<RealizationGridSettings, RealizationGridData, StoredData>):
63+
| [number, number]
64+
| null {
6365
const data = getData();
6466
if (!data) {
6567
return null;
@@ -157,7 +159,7 @@ export class RealizationGridLayer
157159

158160
areCurrentSettingsValid({
159161
getSetting,
160-
}: DataLayerInformationAccessors<RealizationGridSettings, RealizationGridData>): boolean {
162+
}: DataLayerInformationAccessors<RealizationGridSettings, RealizationGridData, StoredData>): boolean {
161163
return (
162164
getSetting(Setting.ENSEMBLE) !== null &&
163165
getSetting(Setting.REALIZATION) !== null &&
@@ -281,8 +283,8 @@ export class RealizationGridLayer
281283
new Set(
282284
gridAttributeArr
283285
.filter((attr) => attr.property_name === gridAttribute)
284-
.map((gridAttribute) => gridAttribute.iso_date_or_interval ?? "NO_TIME")
285-
)
286+
.map((gridAttribute) => gridAttribute.iso_date_or_interval ?? "NO_TIME"),
287+
),
286288
),
287289
];
288290

frontend/src/modules/2DViewer/view/components/LayersWrapper.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ export function LayersWrapper(props: LayersWrapperProps): React.ReactNode {
157157
<div className="">{view.name}</div>
158158
</div>
159159
</div>
160-
</DeckGlView>
160+
</DeckGlView>,
161161
);
162162
}
163163

frontend/src/modules/_shared/LayerFramework/delegates/SettingsContextDelegate.ts

+26-20
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ export enum SettingsContextStatus {
2626

2727
export enum SettingsContextDelegateTopic {
2828
SETTINGS_CHANGED = "SETTINGS_CHANGED",
29+
STORED_DATA_CHANGED = "STORED_DATA_CHANGED",
2930
STATUS = "LOADING_STATE_CHANGED",
3031
}
3132

3233
export type SettingsContextDelegatePayloads = {
3334
[SettingsContextDelegateTopic.SETTINGS_CHANGED]: void;
35+
[SettingsContextDelegateTopic.STORED_DATA_CHANGED]: void;
3436
[SettingsContextDelegateTopic.STATUS]: SettingsContextStatus;
3537
};
3638

@@ -56,7 +58,7 @@ export class SettingsContextDelegate<
5658
TSettingTypes extends MakeSettingTypesMap<TSettings> = MakeSettingTypesMap<TSettings>,
5759
TStoredData extends StoredData = Record<string, never>,
5860
TSettingKey extends SettingsKeysFromTuple<TSettings> = SettingsKeysFromTuple<TSettings>,
59-
TStoredDataKey extends keyof TStoredData = keyof TStoredData
61+
TStoredDataKey extends keyof TStoredData = keyof TStoredData,
6062
> implements PublishSubscribe<SettingsContextDelegatePayloads>
6163
{
6264
private _owner: DataLayer<TSettings, any, TStoredData, TSettingTypes, TSettingKey>;
@@ -86,7 +88,7 @@ export class SettingsContextDelegate<
8688
TStoredDataKey
8789
>,
8890
layerManager: DataLayerManager,
89-
settings: { [K in TSettingKey]: SettingManager<K> }
91+
settings: { [K in TSettingKey]: SettingManager<K> },
9092
) {
9193
this._owner = owner;
9294
this._customSettingsHandler = customSettingsHandler;
@@ -97,28 +99,28 @@ export class SettingsContextDelegate<
9799
"settings",
98100
settings[key].getPublishSubscribeDelegate().makeSubscriberFunction(SettingTopic.VALUE)(() => {
99101
this.handleSettingChanged();
100-
})
102+
}),
101103
);
102104
this._unsubscribeHandler.registerUnsubscribeFunction(
103105
"settings",
104106
settings[key].getPublishSubscribeDelegate().makeSubscriberFunction(SettingTopic.IS_LOADING)(() => {
105107
this.handleSettingsLoadingStateChanged();
106-
})
108+
}),
107109
);
108110
this._unsubscribeHandler.registerUnsubscribeFunction(
109111
"layer-manager",
110112
layerManager
111113
.getPublishSubscribeDelegate()
112114
.makeSubscriberFunction(LayerManagerTopic.SHARED_SETTINGS_CHANGED)(() => {
113115
this.handleSharedSettingsChanged();
114-
})
116+
}),
115117
);
116118

117119
this._unsubscribeHandler.registerUnsubscribeFunction(
118120
"layer-manager",
119121
layerManager.getPublishSubscribeDelegate().makeSubscriberFunction(LayerManagerTopic.ITEMS)(() => {
120122
this.handleSharedSettingsChanged();
121-
})
123+
}),
122124
);
123125
}
124126

@@ -157,11 +159,11 @@ export class SettingsContextDelegate<
157159
}
158160

159161
const sharedSettingsProviders: SharedSettingsProvider[] = parentGroup.getAncestorAndSiblingItems(
160-
(item) => item instanceof SharedSetting
162+
(item) => item instanceof SharedSetting,
161163
) as unknown as SharedSettingsProvider[];
162164

163165
const ancestorGroups: SharedSettingsProvider[] = parentGroup.getAncestors(
164-
(item) => item instanceof Group && instanceofSharedSettingsProvider(item)
166+
(item) => item instanceof Group && instanceofSharedSettingsProvider(item),
165167
) as unknown as SharedSettingsProvider[];
166168
sharedSettingsProviders.push(...ancestorGroups);
167169

@@ -235,6 +237,7 @@ export class SettingsContextDelegate<
235237

236238
setStoredData<K extends keyof TStoredData>(key: K, data: TStoredData[K] | null): void {
237239
this._storedData[key] = data;
240+
this._publishSubscribeDelegate.notifySubscribers(SettingsContextDelegateTopic.STORED_DATA_CHANGED);
238241
}
239242

240243
getSettings() {
@@ -250,6 +253,9 @@ export class SettingsContextDelegate<
250253
if (topic === SettingsContextDelegateTopic.SETTINGS_CHANGED) {
251254
return;
252255
}
256+
if (topic === SettingsContextDelegateTopic.STORED_DATA_CHANGED) {
257+
return;
258+
}
253259
if (topic === SettingsContextDelegateTopic.STATUS) {
254260
return this._status;
255261
}
@@ -296,23 +302,23 @@ export class SettingsContextDelegate<
296302
this._unsubscribeHandler.registerUnsubscribeFunction(
297303
"dependencies",
298304
this._settings[key].getPublishSubscribeDelegate().makeSubscriberFunction(SettingTopic.VALUE)(
299-
handleChange
300-
)
305+
handleChange,
306+
),
301307
);
302308

303309
this._unsubscribeHandler.registerUnsubscribeFunction(
304310
"dependencies",
305311
this._settings[key].getPublishSubscribeDelegate().makeSubscriberFunction(SettingTopic.IS_PERSISTED)(
306-
handleChange
307-
)
312+
handleChange,
313+
),
308314
);
309315

310316
return handleChange;
311317
};
312318

313319
const makeGlobalSettingGetter = <K extends keyof GlobalSettings>(
314320
key: K,
315-
handler: (value: GlobalSettings[K]) => void
321+
handler: (value: GlobalSettings[K]) => void,
316322
) => {
317323
const handleChange = (): void => {
318324
handler(this.getLayerManager.bind(this)().getGlobalSetting(key));
@@ -321,21 +327,21 @@ export class SettingsContextDelegate<
321327
"dependencies",
322328
this.getLayerManager()
323329
.getPublishSubscribeDelegate()
324-
.makeSubscriberFunction(LayerManagerTopic.GLOBAL_SETTINGS)(handleChange)
330+
.makeSubscriberFunction(LayerManagerTopic.GLOBAL_SETTINGS)(handleChange),
325331
);
326332

327333
return handleChange;
328334
};
329335

330336
const availableSettingsUpdater = <K extends TSettingKey>(
331337
settingKey: K,
332-
updateFunc: UpdateFunc<AvailableValuesType<K>, TSettings, TSettingTypes, TSettingKey>
338+
updateFunc: UpdateFunc<AvailableValuesType<K>, TSettings, TSettingTypes, TSettingKey>,
333339
): Dependency<AvailableValuesType<K>, TSettings, TSettingTypes, TSettingKey> => {
334340
const dependency = new Dependency<AvailableValuesType<K>, TSettings, TSettingTypes, TSettingKey>(
335341
this,
336342
updateFunc,
337343
makeLocalSettingGetter,
338-
makeGlobalSettingGetter
344+
makeGlobalSettingGetter,
339345
);
340346
dependencies.push(dependency);
341347

@@ -364,7 +370,7 @@ export class SettingsContextDelegate<
364370

365371
const storedDataUpdater = <K extends TStoredDataKey>(
366372
key: K,
367-
updateFunc: UpdateFunc<NullableStoredData<TStoredData>[K], TSettings, TSettingTypes, TSettingKey>
373+
updateFunc: UpdateFunc<NullableStoredData<TStoredData>[K], TSettings, TSettingTypes, TSettingKey>,
368374
): Dependency<NullableStoredData<TStoredData>[K], TSettings, TSettingTypes, TSettingKey> => {
369375
const dependency = new Dependency<
370376
NullableStoredData<TStoredData>[K],
@@ -388,16 +394,16 @@ export class SettingsContextDelegate<
388394
getLocalSetting: <T extends TSettingKey>(settingName: T) => TSettingTypes[T];
389395
getGlobalSetting: <T extends keyof GlobalSettings>(settingName: T) => GlobalSettings[T];
390396
getHelperDependency: <TDep>(
391-
dep: Dependency<TDep, TSettings, TSettingTypes, TSettingKey>
397+
dep: Dependency<TDep, TSettings, TSettingTypes, TSettingKey>,
392398
) => TDep | null;
393399
abortSignal: AbortSignal;
394-
}) => T
400+
}) => T,
395401
) => {
396402
const dependency = new Dependency<T, TSettings, TSettingTypes, TSettingKey>(
397403
this,
398404
update,
399405
makeLocalSettingGetter,
400-
makeGlobalSettingGetter
406+
makeGlobalSettingGetter,
401407
);
402408
dependencies.push(dependency);
403409

frontend/src/modules/_shared/LayerFramework/delegates/_utils/Dependency.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { isEqual } from "lodash";
44

55
import type { GlobalSettings } from "../../framework/DataLayerManager/DataLayerManager";
66
import { SettingTopic } from "../../framework/SettingManager/SettingManager";
7+
import { CancelUpdate } from "../../interfacesAndTypes/customSettingsHandler";
78
import type { UpdateFunc } from "../../interfacesAndTypes/customSettingsHandler";
89
import type { SettingsKeysFromTuple } from "../../interfacesAndTypes/utils";
910
import type { MakeSettingTypesMap, Settings } from "../../settings/settingsDefinitions";
@@ -24,7 +25,7 @@ export class Dependency<
2425
TReturnValue,
2526
TSettings extends Settings,
2627
TSettingTypes extends MakeSettingTypesMap<TSettings>,
27-
TKey extends SettingsKeysFromTuple<TSettings>
28+
TKey extends SettingsKeysFromTuple<TSettings>,
2829
> {
2930
private _updateFunc: UpdateFunc<TReturnValue, TSettings, TSettingTypes, TKey>;
3031
private _dependencies: Set<(value: Awaited<TReturnValue> | null) => void> = new Set();
@@ -36,7 +37,7 @@ export class Dependency<
3637
private _makeLocalSettingGetter: <K extends TKey>(key: K, handler: (value: TSettingTypes[K]) => void) => void;
3738
private _makeGlobalSettingGetter: <K extends keyof GlobalSettings>(
3839
key: K,
39-
handler: (value: GlobalSettings[K]) => void
40+
handler: (value: GlobalSettings[K]) => void,
4041
) => void;
4142
private _cachedSettingsMap: Map<string, any> = new Map();
4243
private _cachedGlobalSettingsMap: Map<string, any> = new Map();
@@ -53,8 +54,8 @@ export class Dependency<
5354
makeLocalSettingGetter: <K extends TKey>(key: K, handler: (value: TSettingTypes[K]) => void) => void,
5455
makeGlobalSettingGetter: <K extends keyof GlobalSettings>(
5556
key: K,
56-
handler: (value: GlobalSettings[K]) => void
57-
) => void
57+
handler: (value: GlobalSettings[K]) => void,
58+
) => void,
5859
) {
5960
this._contextDelegate = contextDelegate;
6061
this._updateFunc = updateFunc;
@@ -157,7 +158,7 @@ export class Dependency<
157158

158159
this._cachedGlobalSettingsMap.set(
159160
settingName as string,
160-
this._contextDelegate.getLayerManager().getGlobalSetting(settingName)
161+
this._contextDelegate.getLayerManager().getGlobalSetting(settingName),
161162
);
162163
return this._cachedGlobalSettingsMap.get(settingName as string);
163164
}
@@ -220,7 +221,7 @@ export class Dependency<
220221

221222
this.setLoadingState(true);
222223

223-
let newValue: Awaited<TReturnValue> | null = null;
224+
let newValue: Awaited<TReturnValue> | null | typeof CancelUpdate = null;
224225
try {
225226
newValue = await this._updateFunc({
226227
getLocalSetting: this.getLocalSetting,
@@ -236,6 +237,10 @@ export class Dependency<
236237
return;
237238
}
238239

240+
if (newValue === CancelUpdate) {
241+
return;
242+
}
243+
239244
this.applyNewValue(newValue);
240245
}
241246

frontend/src/modules/_shared/LayerFramework/framework/DataLayer/DataLayer.ts

+9
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,15 @@ export class DataLayer<
133133
}),
134134
);
135135

136+
this._unsubscribeHandler.registerUnsubscribeFunction(
137+
"settings-context",
138+
this._settingsContextDelegate
139+
.getPublishSubscribeDelegate()
140+
.makeSubscriberFunction(SettingsContextDelegateTopic.STORED_DATA_CHANGED)(() => {
141+
this.handleSettingsChange();
142+
}),
143+
);
144+
136145
this._unsubscribeHandler.registerUnsubscribeFunction(
137146
"settings-context",
138147
this._settingsContextDelegate

frontend/src/modules/_shared/LayerFramework/framework/utils/DeserializationFactory.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import type {
55
SerializedItem,
66
SerializedLayer,
77
SerializedSettingsGroup,
8-
SerializedSharedSetting} from "../../interfacesAndTypes/serialization";
9-
import {
10-
SerializedType,
8+
SerializedSharedSetting,
119
} from "../../interfacesAndTypes/serialization";
10+
import { SerializedType } from "../../interfacesAndTypes/serialization";
1211
import { LayerRegistry } from "../../layers/LayerRegistry";
1312
import type { DataLayerManager } from "../DataLayerManager/DataLayerManager";
1413
import { SettingsGroup } from "../SettingsGroup/SettingsGroup";
@@ -38,10 +37,10 @@ export class DeserializationFactory {
3837
}
3938

4039
if (serialized.type === SerializedType.GROUP) {
41-
const serializedView = serialized as SerializedGroup;
42-
const view = GroupRegistry.makeGroup(serializedView.groupType, this._layerManager);
43-
view.deserializeState(serializedView);
44-
return view;
40+
const serializedGroup = serialized as SerializedGroup;
41+
const group = GroupRegistry.makeGroup(serializedGroup.groupType, this._layerManager);
42+
group.deserializeState(serializedGroup);
43+
return group;
4544
}
4645

4746
if (serialized.type === SerializedType.SETTINGS_GROUP) {
@@ -56,7 +55,7 @@ export class DeserializationFactory {
5655
const setting = new SharedSetting(
5756
serializedSharedSetting.wrappedSettingType,
5857
serializedSharedSetting.value,
59-
this._layerManager
58+
this._layerManager,
6059
);
6160
setting.deserializeState(serializedSharedSetting);
6261
return setting;

frontend/src/modules/_shared/LayerFramework/interfacesAndTypes/customDataLayerImplementation.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import type { MakeSettingTypesMap, Settings } from "../settings/settingsDefiniti
1616
export type DataLayerInformationAccessors<
1717
TSettings extends Settings,
1818
TData,
19-
TStoredData extends StoredData = Record<string, unknown>,
19+
TStoredData extends StoredData = Record<string, never>,
2020
TSettingKey extends SettingsKeysFromTuple<TSettings> = SettingsKeysFromTuple<TSettings>,
21-
TSettingTypes extends MakeSettingTypesMap<TSettings> = MakeSettingTypesMap<TSettings>
21+
TSettingTypes extends MakeSettingTypesMap<TSettings> = MakeSettingTypesMap<TSettings>,
2222
> = {
2323
/**
2424
* Access the data that the layer is currently storing.
@@ -96,7 +96,7 @@ export type DataLayerInformationAccessors<
9696
export type FetchDataParams<
9797
TSettings extends Settings,
9898
TData,
99-
TStoredData extends StoredData = Record<string, unknown>
99+
TStoredData extends StoredData = Record<string, never>,
100100
> = {
101101
queryClient: QueryClient;
102102
registerQueryKey: (key: unknown[]) => void;
@@ -108,7 +108,7 @@ export interface CustomDataLayerImplementation<
108108
TStoredData extends StoredData = Record<string, never>,
109109
TSettingTypes extends MakeSettingTypesMap<TSettings> = MakeSettingTypesMap<TSettings>,
110110
TSettingKey extends SettingsKeysFromTuple<TSettings> = SettingsKeysFromTuple<TSettings>,
111-
TStoredDataKey extends keyof TStoredData = keyof TStoredData
111+
TStoredDataKey extends keyof TStoredData = keyof TStoredData,
112112
> extends CustomSettingsHandler<TSettings, TStoredData, TSettingTypes, TSettingKey, TStoredDataKey> {
113113
/**
114114
* The default name of a layer of this type.
@@ -126,7 +126,7 @@ export interface CustomDataLayerImplementation<
126126
doSettingsChangesRequireDataRefetch(
127127
prevSettings: TSettingTypes | null,
128128
newSettings: TSettingTypes,
129-
accessors: DataLayerInformationAccessors<TSettings, TData, TStoredData>
129+
accessors: DataLayerInformationAccessors<TSettings, TData, TStoredData>,
130130
): boolean;
131131

132132
/**

0 commit comments

Comments
 (0)