Skip to content

Commit 19b61e3

Browse files
committed
feat: add dg config
1 parent ba454b4 commit 19b61e3

File tree

2 files changed

+47
-18
lines changed

2 files changed

+47
-18
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { generateUUID } from "@mendix/widget-plugin-platform/framework/generate-uuid";
2+
import { DatagridContainerProps } from "../typings/DatagridProps";
3+
4+
/** Config for static values that don't change at runtime. */
5+
export interface DatagridConfig {
6+
id: string;
7+
name: string;
8+
checkboxColumnVisible: boolean;
9+
enableSelectAllCheckbox: boolean;
10+
enableSettingsStorage: boolean;
11+
refreshIntervalMs: number;
12+
filtersChannelName: string;
13+
}
14+
15+
export function datagridConfig(props: DatagridContainerProps): DatagridConfig {
16+
const id = `${props.name}:Datagrid@${generateUUID()}`;
17+
18+
return Object.freeze({
19+
id,
20+
name: props.name,
21+
filtersChannelName: `${id}:filtersChannel`,
22+
checkboxColumnVisible: checkboxColumnVisible(props),
23+
enableSelectAllCheckbox: props.showSelectAllToggle,
24+
enableSettingsStorage: isSettingsStorageEnabled(props),
25+
refreshIntervalMs: props.refreshInterval * 1000
26+
});
27+
}
28+
29+
function checkboxColumnVisible(props: DatagridContainerProps): boolean {
30+
if (!props.itemSelection) return false;
31+
return props.itemSelectionMethod === "checkbox";
32+
}
33+
34+
function isSettingsStorageEnabled(props: DatagridContainerProps): boolean {
35+
if (props.configurationStorageType === "localStorage") return true;
36+
if (props.configurationStorageType === "attribute" && props.configurationAttribute) return true;
37+
return false;
38+
}

packages/pluggableWidgets/datagrid-web/src/Datagrid.depsContainer.ts

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,18 @@ import { GateProvider } from "@mendix/widget-plugin-mobx-kit/GateProvider";
1414
import { DerivedPropsGate, SetupComponentHost } from "@mendix/widget-plugin-mobx-kit/main";
1515
import { useConst } from "@mendix/widget-plugin-mobx-kit/react/useConst";
1616
import { useSetup } from "@mendix/widget-plugin-mobx-kit/react/useSetup";
17-
1817
import { generateUUID } from "@mendix/widget-plugin-platform/framework/generate-uuid";
1918
import { Container, injected, token } from "brandi";
2019
import { useEffect } from "react";
2120
import { DatagridContainerProps, SelectionCounterPositionEnum } from "../typings/DatagridProps";
2221
import { DatasourceParamsController } from "./controllers/DatasourceParamsController";
2322
import { DerivedLoaderController, DerivedLoaderControllerConfig } from "./controllers/DerivedLoaderController";
2423
import { PaginationConfig, PaginationController } from "./controllers/PaginationController";
24+
import { datagridConfig, DatagridConfig } from "./Datagrid.config";
2525
import { ColumnGroupStore } from "./helpers/state/ColumnGroupStore";
2626
import { GridBasicData } from "./helpers/state/GridBasicData";
2727
import { GridPersonalizationStore } from "./helpers/state/GridPersonalizationStore";
2828
import { DatagridSetupService } from "./services/DatagridSetupService";
29-
import { StaticInfo } from "./typings/static-info";
3029
import { SelectAllBarViewModel } from "./view-models/SelectAllBarViewModel";
3130
import { SelectionProgressDialogViewModel } from "./view-models/SelectionProgressDialogViewModel";
3231

@@ -61,6 +60,7 @@ type MainGateProps = Pick<
6160
/** Tokens to resolve dependencies from the container. */
6261
export const TOKENS = {
6362
basicDate: token<GridBasicData>("GridBasicData"),
63+
config: token<DatagridConfig>("DatagridConfig"),
6464
columnsStore: token<ColumnGroupStore>("ColumnGroupStore"),
6565
combinedFilter: token<CombinedFilter>("CombinedFilter"),
6666
combinedFilterConfig: token<CombinedFilterConfig>("CombinedFilterKey"),
@@ -81,7 +81,6 @@ export const TOKENS = {
8181
selectionCounter: token<SelectionCounterViewModel>("SelectionCounterViewModel"),
8282
selectionCounterPosition: token<SelectionCounterPositionEnum>("SelectionCounterPositionEnum"),
8383
setupService: token<SetupComponentHost>("DatagridSetupHost"),
84-
staticInfo: token<StaticInfo>("StaticInfo"),
8584
enableSelectAll: token<boolean>("enableSelectAll"),
8685
selectAllProgressService: token<TaskProgressService>("SelectAllProgressService"),
8786
selectAllGate: token<DerivedPropsGate<SelectAllGateProps>>("SelectAllGateForProps"),
@@ -91,7 +90,7 @@ export const TOKENS = {
9190
};
9291

9392
/** Deps injections */
94-
injected(ColumnGroupStore, TOKENS.setupService, TOKENS.mainGate, TOKENS.staticInfo, TOKENS.filterHost);
93+
injected(ColumnGroupStore, TOKENS.setupService, TOKENS.mainGate, TOKENS.config, TOKENS.filterHost);
9594
injected(GridBasicData, TOKENS.mainGate);
9695
injected(CombinedFilter, TOKENS.setupService, TOKENS.combinedFilterConfig);
9796
injected(WidgetFilterAPI, TOKENS.parentChannelName, TOKENS.filterHost);
@@ -138,7 +137,7 @@ class DatagridContainer extends Container {
138137
* Setup container bindings.
139138
* @remark Make sure not to bind things that already exist in root container.
140139
*/
141-
init(props: MainGateProps, root: RootContainer, selectAllModule: Container): DatagridContainer {
140+
init(props: DatagridContainerProps, root: RootContainer, selectAllModule: Container): DatagridContainer {
142141
this.extend(root);
143142

144143
// Connect select all module
@@ -161,6 +160,10 @@ class DatagridContainer extends Container {
161160
this.bind(TOKENS.mainGate).toConstant(gateProvider.gate);
162161
this.bind(TOKENS.queryGate).toConstant(gateProvider.gate);
163162

163+
// Bind config
164+
const config = datagridConfig(props);
165+
this.bind(TOKENS.config).toConstant(config);
166+
164167
// Columns store
165168
this.bind(TOKENS.columnsStore).toInstance(ColumnGroupStore).inSingletonScope();
166169

@@ -208,12 +211,6 @@ class DatagridContainer extends Container {
208211
// Selection progress dialog view model
209212
this.bind(TOKENS.selectionDialogViewModel).toInstance(SelectionProgressDialogViewModel).inSingletonScope();
210213

211-
// Bind static info
212-
this.bind(TOKENS.staticInfo).toConstant({
213-
name: props.name,
214-
filtersChannelName: this.get(TOKENS.parentChannelName)
215-
});
216-
217214
// Bind refresh interval
218215
this.bind(TOKENS.refreshInterval).toConstant(props.refreshInterval * 1000);
219216

@@ -246,7 +243,7 @@ class DatagridContainer extends Container {
246243
// Make sure essential services are created upfront
247244
this.get(TOKENS.paramsService);
248245
this.get(TOKENS.paginationService);
249-
if (this.isSettingsStorageEnabled(props)) {
246+
if (config.enableSettingsStorage) {
250247
this.get(TOKENS.personalizationService);
251248
}
252249

@@ -256,12 +253,6 @@ class DatagridContainer extends Container {
256253
return this;
257254
}
258255

259-
private isSettingsStorageEnabled(props: MainGateProps): boolean {
260-
if (props.configurationStorageType === "localStorage") return true;
261-
if (props.configurationStorageType === "attribute" && props.configurationAttribute) return true;
262-
return false;
263-
}
264-
265256
setProps = (_props: MainGateProps): void => {
266257
throw new Error(`${this.id} is not initialized yet`);
267258
};

0 commit comments

Comments
 (0)