b27a97f2c5
## Summary This PR enforces the use of `@/` alias for imports instead of relative parent imports (`../`). ## Changes ### ESLint Configuration - Added `no-restricted-imports` pattern in `eslint.config.react.mjs` to block `../*` imports with the message "Relative parent imports are not allowed. Use @/ alias instead." - Removed the non-working `import/no-relative-parent-imports` rule (doesn't work properly in ESLint flat config) ### VS Code Settings - Added `javascript.preferences.importModuleSpecifier: non-relative` to `.vscode/settings.json` (TypeScript setting was already there) ### Code Fixes - Fixed **941 relative parent imports** across **706 files** in `packages/twenty-front` - All `../` imports converted to use `@/` alias ## Why - Consistent import style across the codebase - Easier to move files without breaking imports - Better IDE support for auto-imports - Clearer understanding of where imports come from
72 lines
2.8 KiB
TypeScript
72 lines
2.8 KiB
TypeScript
import { useNavigatePageLayoutCommandMenu } from '@/command-menu/pages/page-layout/hooks/useNavigatePageLayoutCommandMenu';
|
|
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
|
|
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
|
|
import { pageLayoutDraggedAreaComponentState } from '@/page-layout/states/pageLayoutDraggedAreaComponentState';
|
|
import { pageLayoutEditingWidgetIdComponentState } from '@/page-layout/states/pageLayoutEditingWidgetIdComponentState';
|
|
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 { pageLayoutSelectedCellsComponentState } from '@/page-layout/states/pageLayoutSelectedCellsComponentState';
|
|
import { calculateGridBoundsFromSelectedCells } from '@/page-layout/utils/calculateGridBoundsFromSelectedCells';
|
|
|
|
export const useEndPageLayoutDragSelection = (
|
|
pageLayoutIdFromProps?: string,
|
|
) => {
|
|
const pageLayoutId = useAvailableComponentInstanceIdOrThrow(
|
|
PageLayoutComponentInstanceContext,
|
|
pageLayoutIdFromProps,
|
|
);
|
|
|
|
const pageLayoutSelectedCellsState = useRecoilComponentCallbackState(
|
|
pageLayoutSelectedCellsComponentState,
|
|
pageLayoutId,
|
|
);
|
|
const pageLayoutDraggedAreaState = useRecoilComponentCallbackState(
|
|
pageLayoutDraggedAreaComponentState,
|
|
pageLayoutId,
|
|
);
|
|
|
|
const pageLayoutEditingWidgetIdState = useRecoilComponentCallbackState(
|
|
pageLayoutEditingWidgetIdComponentState,
|
|
pageLayoutId,
|
|
);
|
|
|
|
const { navigatePageLayoutCommandMenu } = useNavigatePageLayoutCommandMenu();
|
|
|
|
const endPageLayoutDragSelection = useRecoilCallback(
|
|
({ snapshot, set }) =>
|
|
() => {
|
|
const pageLayoutSelectedCells = snapshot
|
|
.getLoadable(pageLayoutSelectedCellsState)
|
|
.getValue();
|
|
|
|
if (pageLayoutSelectedCells.size > 0) {
|
|
const draggedBounds = calculateGridBoundsFromSelectedCells(
|
|
Array.from(pageLayoutSelectedCells),
|
|
);
|
|
|
|
if (isDefined(draggedBounds)) {
|
|
set(pageLayoutDraggedAreaState, draggedBounds);
|
|
set(pageLayoutEditingWidgetIdState, null);
|
|
|
|
navigatePageLayoutCommandMenu({
|
|
commandMenuPage: CommandMenuPages.PageLayoutWidgetTypeSelect,
|
|
resetNavigationStack: true,
|
|
});
|
|
}
|
|
}
|
|
|
|
set(pageLayoutSelectedCellsState, new Set());
|
|
},
|
|
[
|
|
navigatePageLayoutCommandMenu,
|
|
pageLayoutDraggedAreaState,
|
|
pageLayoutEditingWidgetIdState,
|
|
pageLayoutSelectedCellsState,
|
|
],
|
|
);
|
|
|
|
return { endPageLayoutDragSelection };
|
|
};
|