Skip to content

Commit e5390a5

Browse files
committed
front: editor: fixes #6439
Details: - Adds the required attribute to the composition code input so that it is red when empty - Adds a canSave optional function to rangeEdition/tool-factory, to allow disabling the save button when state is not correct - Uses the new canSave function in SpeedEditionTool to disable the save button when there are empty composition codes
1 parent 8349da9 commit e5390a5

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

front/src/applications/editor/tools/rangeEdition/speedSection/SpeedSectionMetadataForm.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ const SpeedSectionMetadataForm: FC = () => {
7878
<div key={key} className="form-group field field-string">
7979
<div className="d-flex flex-row align-items-center">
8080
<input
81+
required
8182
className="form-control flex-grow-2 flex-shrink-1 mr-2 px-2"
8283
placeholder=""
8384
type="text"

front/src/applications/editor/tools/rangeEdition/tool-factory.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ interface RangeEditionToolParams<T extends EditorRange> {
4848
messagesComponent: ComponentType;
4949
layersComponent: ComponentType<{ map: Map }>;
5050
leftPanelComponent: ComponentType;
51+
canSave?: (state: RangeEditionState<T>) => boolean;
5152
}
5253

5354
function getRangeEditionTool<T extends EditorRange>({
@@ -57,6 +58,7 @@ function getRangeEditionTool<T extends EditorRange>({
5758
messagesComponent,
5859
layersComponent,
5960
leftPanelComponent,
61+
canSave,
6062
}: RangeEditionToolParams<T>): Tool<RangeEditionState<T>> {
6163
const layersEntity = getNewEntity();
6264
function getInitialState(): RangeEditionState<T> {
@@ -91,8 +93,10 @@ function getRangeEditionTool<T extends EditorRange>({
9193
id: `save-${objectTypeAction}`,
9294
icon: AiFillSave,
9395
labelTranslationKey: `Editor.tools.${objectTypeEdition}-edition.actions.save-${objectTypeAction}`,
94-
isDisabled({ isLoading }) {
95-
return isLoading || false;
96+
isDisabled({ isLoading, state }) {
97+
if (isLoading) return true;
98+
if (canSave) return !canSave(state);
99+
return false;
96100
},
97101
async onClick({ state, setState, dispatch, infraID }) {
98102
const { initialEntity, entity } = state;

front/src/applications/editor/tools/rangeEdition/tools.ts

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ export const SpeedEditionTool = getRangeEditionTool<SpeedSectionEntity | SpeedSe
2020
messagesComponent: SpeedSectionMessages,
2121
layersComponent: SpeedSectionEditionLayers,
2222
leftPanelComponent: RangeEditionLeftPanel,
23+
canSave(state) {
24+
const records = state.entity.properties.speed_limit_by_tag || {};
25+
const compositionCodes = Object.keys(records);
26+
return compositionCodes.every((code) => !!code);
27+
},
2328
});
2429

2530
export const ElectrificationEditionTool = getRangeEditionTool<ElectrificationEntity>({

0 commit comments

Comments
 (0)