3b868c3d2a
In this PR: - Refactored the page layout renderer - Converted all the states to component states - Removed the page layout edition in settings TODOs in next PRs: - Fix bug with the drag selector not taking the scroll into account to display the dragged area - Readd the tab edition in edit mode
61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
|
|
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
|
|
import { useRecoilComponentCallbackState } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackState';
|
|
import { useRecoilCallback } from 'recoil';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import { pageLayoutCurrentLayoutsComponentState } from '../states/pageLayoutCurrentLayoutsComponentState';
|
|
import { pageLayoutDraftComponentState } from '../states/pageLayoutDraftComponentState';
|
|
import { removeWidgetFromTab } from '../utils/removeWidgetFromTab';
|
|
import { removeWidgetLayoutFromTab } from '../utils/removeWidgetLayoutFromTab';
|
|
|
|
export const useDeletePageLayoutWidget = (pageLayoutIdFromProps?: string) => {
|
|
const pageLayoutId = useAvailableComponentInstanceIdOrThrow(
|
|
PageLayoutComponentInstanceContext,
|
|
pageLayoutIdFromProps,
|
|
);
|
|
|
|
const pageLayoutDraftState = useRecoilComponentCallbackState(
|
|
pageLayoutDraftComponentState,
|
|
pageLayoutId,
|
|
);
|
|
|
|
const pageLayoutCurrentLayoutsState = useRecoilComponentCallbackState(
|
|
pageLayoutCurrentLayoutsComponentState,
|
|
pageLayoutId,
|
|
);
|
|
|
|
const deletePageLayoutWidget = useRecoilCallback(
|
|
({ snapshot, set }) =>
|
|
(widgetId: string) => {
|
|
const pageLayoutDraft = snapshot
|
|
.getLoadable(pageLayoutDraftState)
|
|
.getValue();
|
|
const allTabLayouts = snapshot
|
|
.getLoadable(pageLayoutCurrentLayoutsState)
|
|
.getValue();
|
|
|
|
const tabWithWidget = pageLayoutDraft.tabs.find((tab) =>
|
|
tab.widgets.some((w) => w.id === widgetId),
|
|
);
|
|
const tabId = tabWithWidget?.id;
|
|
|
|
if (isDefined(tabId)) {
|
|
const updatedLayouts = removeWidgetLayoutFromTab(
|
|
allTabLayouts,
|
|
tabId,
|
|
widgetId,
|
|
);
|
|
set(pageLayoutCurrentLayoutsState, updatedLayouts);
|
|
|
|
set(pageLayoutDraftState, (prev) => ({
|
|
...prev,
|
|
tabs: removeWidgetFromTab(prev.tabs, tabId, widgetId),
|
|
}));
|
|
}
|
|
},
|
|
[pageLayoutCurrentLayoutsState, pageLayoutDraftState],
|
|
);
|
|
|
|
return { deletePageLayoutWidget };
|
|
};
|