fix: ignore no-op map field edits
This commit is contained in:
parent
2fb7bc6d45
commit
dcafea4a95
@ -97,6 +97,8 @@ export default function useLocationMapObjectActions({
|
|||||||
|
|
||||||
const handleObjectField = useCallback((field, value) => {
|
const handleObjectField = useCallback((field, value) => {
|
||||||
if (!selectedObject) return;
|
if (!selectedObject) return;
|
||||||
|
if (selectedObject[field] === value) return;
|
||||||
|
|
||||||
remember();
|
remember();
|
||||||
updateObjects((currentObjects) =>
|
updateObjects((currentObjects) =>
|
||||||
currentObjects.map((object) => (
|
currentObjects.map((object) => (
|
||||||
@ -106,16 +108,28 @@ export default function useLocationMapObjectActions({
|
|||||||
}, [remember, selectedObject, updateObjects]);
|
}, [remember, selectedObject, updateObjects]);
|
||||||
|
|
||||||
const handleZoneLinkChange = useCallback((zoneId) => {
|
const handleZoneLinkChange = useCallback((zoneId) => {
|
||||||
|
if (!selectedObject) return;
|
||||||
const zone = zones.find((candidate) => String(candidate.id) === String(zoneId));
|
const zone = zones.find((candidate) => String(candidate.id) === String(zoneId));
|
||||||
handleObjectField("zone_id", zone?.id || null);
|
const nextZoneId = zone?.id || null;
|
||||||
setObjects((currentObjects) =>
|
const nextZoneName = zone?.name || null;
|
||||||
|
const nextLabel = selectedObject.label ?? zone?.name ?? "";
|
||||||
|
if (
|
||||||
|
(selectedObject.zone_id || null) === nextZoneId &&
|
||||||
|
(selectedObject.zone_name || null) === nextZoneName &&
|
||||||
|
selectedObject.label === nextLabel
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
remember();
|
||||||
|
updateObjects((currentObjects) =>
|
||||||
currentObjects.map((object) => (
|
currentObjects.map((object) => (
|
||||||
getObjectKey(object) === selectedObjectKey
|
getObjectKey(object) === selectedObjectKey
|
||||||
? { ...object, zone_name: zone?.name || null, label: object.label ?? zone?.name ?? "" }
|
? { ...object, zone_id: nextZoneId, zone_name: nextZoneName, label: object.label ?? zone?.name ?? "" }
|
||||||
: object
|
: object
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
}, [handleObjectField, selectedObjectKey, setObjects, zones]);
|
}, [remember, selectedObject, selectedObjectKey, updateObjects, zones]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
handleAddObject,
|
handleAddObject,
|
||||||
|
|||||||
@ -1721,6 +1721,12 @@ test("admin selecting an object does not mark a draft dirty until it changes", a
|
|||||||
await expect(page.getByRole("button", { name: "Save Draft" })).toHaveCount(0);
|
await expect(page.getByRole("button", { name: "Save Draft" })).toHaveCount(0);
|
||||||
await expect(page.getByRole("button", { name: "Undo" })).toBeDisabled();
|
await expect(page.getByRole("button", { name: "Undo" })).toBeDisabled();
|
||||||
|
|
||||||
|
await page.getByRole("textbox", { name: "Label" }).fill("Bakery");
|
||||||
|
await page.getByLabel("Linked zone").selectOption("501");
|
||||||
|
await expect(page.locator(".location-map-status")).toHaveText("Draft");
|
||||||
|
await expect(page.getByRole("button", { name: "Save Draft" })).toHaveCount(0);
|
||||||
|
await expect(page.getByRole("button", { name: "Undo" })).toBeDisabled();
|
||||||
|
|
||||||
const objectBox = await bakeryObject.boundingBox();
|
const objectBox = await bakeryObject.boundingBox();
|
||||||
expect(objectBox).not.toBeNull();
|
expect(objectBox).not.toBeNull();
|
||||||
if (!objectBox) throw new Error("Bakery map object was not measurable");
|
if (!objectBox) throw new Error("Bakery map object was not measurable");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user