## Why When opening **Merge records** repeatedly, morph items for the same command-menu page were appended instead of replaced. This could produce duplicated IDs (e.g. `[A,B,B,A]`) in the merge flow and extra duplicate tabs in the UI. ## What - Update `useCommandMenuUpdateNavigationMorphItemsByPage` to replace page morph items instead of appending existing ones. - Add regression tests covering: - replacing existing morph items for the same page - keeping only the latest payload when called twice for the same page ## Notes I could not run the full workspace tests locally in this environment because of existing test/build setup issues unrelated to this change (missing `packages/twenty-front/tsconfig.spec.json` and `temporal-polyfill` resolution in dependent tasks). Co-authored-by: remi <[email protected]>
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { commandMenuNavigationMorphItemsByPageState } from '@/command-menu/states/commandMenuNavigationMorphItemsByPageState';
|
|
import { useRecoilCallback } from 'recoil';
|
|
|
|
type UpdateNavigationMorphItemsByPageParams = {
|
|
pageId: string;
|
|
objectMetadataId: string;
|
|
objectRecordIds: string[];
|
|
};
|
|
|
|
export const useCommandMenuUpdateNavigationMorphItemsByPage = () => {
|
|
const updateCommandMenuNavigationMorphItemsByPage = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
async ({
|
|
pageId,
|
|
objectMetadataId,
|
|
objectRecordIds,
|
|
}: UpdateNavigationMorphItemsByPageParams) => {
|
|
const currentMorphItems = snapshot
|
|
.getLoadable(commandMenuNavigationMorphItemsByPageState)
|
|
.getValue();
|
|
|
|
const newMorphItems = objectRecordIds.map((recordId) => ({
|
|
objectMetadataId,
|
|
recordId,
|
|
}));
|
|
|
|
const newMorphItemsMap = new Map(currentMorphItems);
|
|
newMorphItemsMap.set(pageId, newMorphItems);
|
|
set(commandMenuNavigationMorphItemsByPageState, newMorphItemsMap);
|
|
},
|
|
[],
|
|
);
|
|
|
|
return {
|
|
updateCommandMenuNavigationMorphItemsByPage,
|
|
};
|
|
};
|