Skip to content

Commit 756cd65

Browse files
committed
review
1 parent d3f1888 commit 756cd65

11 files changed

Lines changed: 84 additions & 196 deletions

File tree

webapp/public/locales/en/main.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -720,14 +720,14 @@
720720
"study.modeling.bindingConst.duplicate": "Duplicate Binding Constraint",
721721
"study.modeling.bindingConst.notFound": "No binding constraint found with ID: {{id}}",
722722
"study.tableModes": "Table Modes",
723-
"study.tableModes.empty": "No table mode available",
724-
"study.tableModes.dialog.add.title": "Add table mode",
725-
"study.tableModes.dialog.edit.title": "Edit table mode",
726-
"study.tableModes.dialog.delete.text": "Are you sure you want to delete the table mode: {{name}}?",
727-
"study.tableModes.detail.notFound": "No table mode found with ID: {{id}}",
728-
"study.tableModes.create.error": "Failed to create the table mode: {{name}}",
729-
"study.tableModes.update.error": "Failed to update the table mode: {{name}}",
730-
"study.tableModes.delete.error": "Failed to delete the table mode: {{name}}",
723+
"study.tableModes.empty": "No table available",
724+
"study.tableModes.dialog.add.title": "Add table",
725+
"study.tableModes.dialog.edit.title": "Edit table",
726+
"study.tableModes.dialog.delete.text": "Are you sure you want to delete the table: {{name}}?",
727+
"study.tableModes.detail.notFound": "No table found with ID: {{id}}",
728+
"study.tableModes.create.error": "Failed to create the table: {{name}}",
729+
"study.tableModes.update.error": "Failed to update the table: {{name}}",
730+
"study.tableModes.delete.error": "Failed to delete the table: {{name}}",
731731
"study.outputs": "Outputs",
732732
"study.outputs.mc": "Monte-Carlo",
733733
"study.outputs.monteCarlo": "Monte-Carlo",

webapp/public/locales/fr/main.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -720,14 +720,14 @@
720720
"study.modeling.bindingConst.duplicate": "Dupliquer la contrainte couplante",
721721
"study.modeling.bindingConst.notFound": "Aucune contrainte couplante trouvée avec l'ID : {{id}}",
722722
"study.tableModes": "Table Modes",
723-
"study.tableModes.empty": "Aucun table mode disponible",
724-
"study.tableModes.dialog.add.title": "Ajouter une table mode",
725-
"study.tableModes.dialog.edit.title": "Modifier une table mode",
726-
"study.tableModes.dialog.delete.text": "Êtes-vous sûr de vouloir supprimer la table mode : {{name}}?",
727-
"study.tableModes.detail.notFound": "Aucune table mode trouvée avec l'ID : {{id}}",
728-
"study.tableModes.create.error": "Échec de la création de la table mode : {{name}}",
729-
"study.tableModes.update.error": "Échec de la mise à jour de la table mode : {{name}}",
730-
"study.tableModes.delete.error": "Échec de la suppression de la table mode : {{name}}",
723+
"study.tableModes.empty": "Aucune table disponible",
724+
"study.tableModes.dialog.add.title": "Ajouter une table",
725+
"study.tableModes.dialog.edit.title": "Modifier une table",
726+
"study.tableModes.dialog.delete.text": "Êtes-vous sûr de vouloir supprimer la table : {{name}}?",
727+
"study.tableModes.detail.notFound": "Aucune table trouvée avec l'ID : {{id}}",
728+
"study.tableModes.create.error": "Échec de la création de la table : {{name}}",
729+
"study.tableModes.update.error": "Échec de la mise à jour de la table : {{name}}",
730+
"study.tableModes.delete.error": "Échec de la suppression de la table : {{name}}",
731731
"study.outputs": "Sorties",
732732
"study.outputs.mc": "Monte-Carlo",
733733
"study.outputs.monteCarlo": "Monte-Carlo",

webapp/src/components/TableModeDataForm.tsx

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import type { GridColumn } from "@glideapps/glide-data-grid";
2222
import GridOffIcon from "@mui/icons-material/GridOff";
2323
import { Box, Typography } from "@mui/material";
2424
import startCase from "lodash/startCase";
25-
import { useEffect, useState } from "react";
25+
import { useMemo } from "react";
2626
import { useTranslation } from "react-i18next";
2727
import DataGridForm, { type DataGridFormProps } from "./DataGridForm";
2828
import type { SubmitHandlerPlus } from "./Form/types";
@@ -45,7 +45,6 @@ function TableModeDataForm<T extends TableModeType>({
4545
extraActions,
4646
}: TableModeDataFormProps<T>) {
4747
const { t } = useTranslation();
48-
const [gridColumns, setGridColumns] = useState<DataGridFormProps<TableModeData>["columns"]>([]);
4948
const columnsDep = columns.join(",");
5049

5150
const res = usePromise(
@@ -55,28 +54,20 @@ function TableModeDataForm<T extends TableModeType>({
5554

5655
// Filter columns based on the data received, because the API may return
5756
// fewer columns than requested depending on the study root
58-
useEffect(() => {
57+
const gridColumns = useMemo<DataGridFormProps<TableModeData>["columns"]>(() => {
5958
const data = res.data || {};
6059
const rowNames = Object.keys(data);
6160

6261
if (rowNames.length === 0) {
63-
setGridColumns([]);
64-
return;
62+
return [];
6563
}
6664

6765
const columnNames = Object.keys(data[rowNames[0]]);
6866

69-
setGridColumns(
70-
columns
71-
.filter((col) => columnNames.includes(col))
72-
.map((col) => {
73-
const title = startCase(col);
74-
return {
75-
title,
76-
id: col,
77-
} satisfies GridColumn;
78-
}),
79-
);
67+
return columns
68+
.filter((col) => columnNames.includes(col))
69+
.map((col) => ({ title: startCase(col), id: col }) satisfies GridColumn);
70+
// eslint-disable-next-line react-hooks/exhaustive-deps
8071
}, [res.data, columnsDep]);
8172

8273
////////////////////////////////////////////////////////////////

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/$tableModeId/-components/AddTableModeDialog.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type { TableMode } from "@/services/api/tablemode/types";
1717
import AddCircleIcon from "@mui/icons-material/AddCircle";
1818
import { useTranslation } from "react-i18next";
1919
import useCreateTableMode from "../../-hooks/useCreateTableMode";
20-
import TableModeFormDialog from "./BaseTableModeDialog";
20+
import BaseTableModeDialog from "./BaseTableModeDialog";
2121

2222
interface Props {
2323
onCancel: VoidFunction;
@@ -32,15 +32,16 @@ function AddTableModeDialog({ onCancel }: Props) {
3232
////////////////////////////////////////////////////////////////
3333

3434
const handleSubmit = ({ values }: SubmitHandlerPlus<TableMode>) => {
35-
createTableMode.mutate(values);
35+
const { id, ...rest } = values;
36+
createTableMode.mutate(rest);
3637
};
3738

3839
////////////////////////////////////////////////////////////////
3940
// JSX
4041
////////////////////////////////////////////////////////////////
4142

4243
return (
43-
<TableModeFormDialog
44+
<BaseTableModeDialog
4445
title={t("study.tableModes.dialog.add.title")}
4546
titleIcon={AddCircleIcon}
4647
defaultValues={{

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/$tableModeId/-components/BaseTableModeDialog.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ import startCase from "lodash/startCase";
2727
import { useTranslation } from "react-i18next";
2828
import { getTableColumnsForType, tableModeTypeOptions } from "./utils";
2929

30-
export interface TableModeFormDialogProps
30+
export interface BaseTableModeDialogProps
3131
extends Pick<
3232
FormDialogProps<TableMode>,
3333
"title" | "titleIcon" | "onCancel" | "onSubmit" | "onSubmitSuccessful"
3434
> {
3535
defaultValues: TableMode;
3636
}
3737

38-
function TableModeFormDialog(props: TableModeFormDialogProps) {
38+
function BaseTableModeDialog(props: BaseTableModeDialogProps) {
3939
const { title, titleIcon, defaultValues, onSubmit, onCancel } = props;
4040
const { t } = useTranslation();
4141

@@ -96,4 +96,4 @@ function TableModeFormDialog(props: TableModeFormDialogProps) {
9696
);
9797
}
9898

99-
export default TableModeFormDialog;
99+
export default BaseTableModeDialog;

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/$tableModeId/-components/UpdateTableModeDialog.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type { TableMode } from "@/services/api/tablemode/types";
1717
import EditIcon from "@mui/icons-material/Edit";
1818
import { useTranslation } from "react-i18next";
1919
import useUpdateTableMode from "../../-hooks/useUpdateTableMode";
20-
import TableModeFormDialog from "./BaseTableModeDialog";
20+
import BaseTableModeDialog from "./BaseTableModeDialog";
2121

2222
interface Props {
2323
tableMode: TableMode;
@@ -33,16 +33,16 @@ function UpdateTableModeDialog({ tableMode, onCancel }: Props) {
3333
////////////////////////////////////////////////////////////////
3434

3535
const handleSubmit = ({ values }: SubmitHandlerPlus<TableMode>) => {
36-
const { id, ...update } = values;
37-
updateTableMode.mutate({ tableId: id, ...update });
36+
const { id, ...rest } = values;
37+
updateTableMode.mutate({ tableId: id, ...rest });
3838
};
3939

4040
////////////////////////////////////////////////////////////////
4141
// JSX
4242
////////////////////////////////////////////////////////////////
4343

4444
return (
45-
<TableModeFormDialog
45+
<BaseTableModeDialog
4646
title={t("study.tableModes.dialog.edit.title")}
4747
titleIcon={EditIcon}
4848
defaultValues={tableMode}

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/$tableModeId/-components/utils.ts

Lines changed: 31 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -13,148 +13,40 @@
1313
*/
1414

1515
import type { Options } from "@/components/fieldEditors/SelectFE";
16-
import type { TableModeColumnsForType, TableModeType } from "@/services/api/tablemode/types";
17-
18-
////////////////////////////////////////////////////////////////
19-
// Types
20-
////////////////////////////////////////////////////////////////
21-
22-
type TableModeColumnsByType = {
23-
[K in TableModeType]: TableModeColumnsForType<K>;
24-
};
25-
26-
////////////////////////////////////////////////////////////////
27-
// Constants
28-
////////////////////////////////////////////////////////////////
29-
30-
const TABLE_MODE_TYPES = [
31-
"areas",
32-
"links",
33-
"thermals",
34-
"renewables",
35-
"st-storages",
36-
"binding-constraints",
37-
"st-storages-additional-constraints",
38-
] as const satisfies TableModeType[];
39-
40-
const TABLE_MODE_COLUMNS_BY_TYPE = {
41-
areas: [
42-
"nonDispatchPower",
43-
"dispatchHydroPower",
44-
"otherDispatchPower",
45-
"energyCostUnsupplied",
46-
"spreadUnsuppliedEnergyCost",
47-
"energyCostSpilled",
48-
"spreadSpilledEnergyCost",
49-
"filterSynthesis",
50-
"filterByYear",
51-
// Since v8.3
52-
"adequacyPatchMode",
53-
],
54-
links: [
55-
"hurdlesCost",
56-
"loopFlow",
57-
"usePhaseShifter",
58-
"transmissionCapacities",
59-
"assetType",
60-
"linkStyle",
61-
"linkWidth",
62-
"comments",
63-
"displayComments",
64-
"filterSynthesis",
65-
"filterYearByYear",
66-
],
67-
thermals: [
68-
"group",
69-
"enabled",
70-
"unitCount",
71-
"nominalCapacity",
72-
"genTs",
73-
"minStablePower",
74-
"minUpTime",
75-
"minDownTime",
76-
"mustRun",
77-
"spinning",
78-
"volatilityForced",
79-
"volatilityPlanned",
80-
"lawForced",
81-
"lawPlanned",
82-
"marginalCost",
83-
"spreadCost",
84-
"fixedCost",
85-
"startupCost",
86-
"marketBidCost",
87-
"co2",
88-
// Since v8.6
89-
"nh3",
90-
"so2",
91-
"nox",
92-
"pm25",
93-
"pm5",
94-
"pm10",
95-
"nmvoc",
96-
"op1",
97-
"op2",
98-
"op3",
99-
"op4",
100-
"op5",
101-
// Since v8.7
102-
"costGeneration",
103-
"efficiency",
104-
"variableOMCost",
105-
],
106-
renewables: [
107-
// Since v8.1
108-
"group",
109-
"enabled",
110-
"tsInterpretation",
111-
"unitCount",
112-
"nominalCapacity",
113-
],
114-
"st-storages": [
115-
// Since v8.6
116-
"group",
117-
"injectionNominalCapacity",
118-
"withdrawalNominalCapacity",
119-
"reservoirCapacity",
120-
"efficiency",
121-
"initialLevel",
122-
"initialLevelOptim",
123-
// Since v8.8
124-
"enabled",
125-
// Since v9.2
126-
"efficiencyWithdrawal",
127-
"penalizeVariationInjection",
128-
"penalizeVariationWithdrawal",
129-
],
130-
"binding-constraints": [
131-
"enabled",
132-
"timeStep",
133-
"operator",
134-
"comments",
135-
// Since v8.3
136-
"filterSynthesis",
137-
"filterYearByYear",
138-
// Since v8.7
139-
"group",
140-
],
141-
"st-storages-additional-constraints": [
142-
// Since v9.2
143-
"variable",
144-
"operator",
145-
"enabled",
146-
],
147-
} as const satisfies TableModeColumnsByType;
148-
149-
export const tableModeTypeOptions = TABLE_MODE_TYPES.map((type) => ({
16+
import {
17+
areaColumnsSchema,
18+
bindingConstraintColumnsSchema,
19+
linkColumnsSchema,
20+
renewableColumnsSchema,
21+
stStorageAdditionalConstraintColumnsSchema,
22+
stStorageColumnsSchema,
23+
tableModeTypeSchema,
24+
thermalColumnsSchema,
25+
} from "@/services/api/tablemode/schemas";
26+
import type { TableModeType } from "@/services/api/tablemode/types";
27+
28+
export const tableModeTypeOptions = tableModeTypeSchema.options.map((type) => ({
15029
value: type,
15130
label: (t) => t(`tableMode.type.${type}`),
15231
})) satisfies Options<TableModeType>;
15332

154-
////////////////////////////////////////////////////////////////
155-
// Functions
156-
////////////////////////////////////////////////////////////////
157-
15833
export function getTableColumnsForType<T extends TableModeType>(type: T) {
159-
return TABLE_MODE_COLUMNS_BY_TYPE[type];
34+
switch (type) {
35+
case "areas":
36+
return areaColumnsSchema.element.options;
37+
case "links":
38+
return linkColumnsSchema.element.options;
39+
case "thermals":
40+
return thermalColumnsSchema.element.options;
41+
case "renewables":
42+
return renewableColumnsSchema.element.options;
43+
case "st-storages":
44+
return stStorageColumnsSchema.element.options;
45+
case "binding-constraints":
46+
return bindingConstraintColumnsSchema.element.options;
47+
case "st-storages-additional-constraints":
48+
return stStorageAdditionalConstraintColumnsSchema.element.options;
49+
default:
50+
return [];
51+
}
16052
}

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/-hooks/useUpdateTableMode.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ function useUpdateTableMode() {
6868
}
6969
},
7070
onSuccess: (updatedTableMode) => {
71-
const { queryKey: queryListKey } = tableModeQueries.list();
72-
7371
queryClient.setQueryData(queryListKey, (old = []) => {
7472
return old.map((tableMode) =>
7573
tableMode.id === updatedTableMode.id ? updatedTableMode : tableMode,

webapp/src/routes/_authenticated/studies/$studyId/explore/table-modes/-utils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ import { linkOptions } from "@tanstack/react-router";
1919
import { sortByProp } from "ramda-adjunct";
2020

2121
export function tableModesToList(tableModes: TableMode[]): RouterListViewItem[] {
22-
const list = tableModes.map((tm) => ({
23-
id: tm.id,
24-
label: tm.name,
22+
const list = tableModes.map((tableMode) => ({
23+
id: tableMode.id,
24+
label: tableMode.name,
2525
linkOptions: linkOptions({
2626
to: ".",
27-
params: { tableModeId: tm.id },
27+
params: { tableModeId: tableMode.id },
2828
}),
29-
loading: isQueryListItemOptimistic(tm),
29+
loading: isQueryListItemOptimistic(tableMode),
3030
}));
3131

3232
return sortByProp("label", list);

0 commit comments

Comments
 (0)