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
43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
|
|
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
|
|
import { useRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentState';
|
|
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
|
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
|
import { pageLayoutDraftComponentState } from '@/page-layout/states/pageLayoutDraftComponentState';
|
|
import { pageLayoutPersistedComponentState } from '@/page-layout/states/pageLayoutPersistedComponentState';
|
|
|
|
export const usePageLayoutDraftState = (pageLayoutIdFromProps?: string) => {
|
|
const pageLayoutId = useAvailableComponentInstanceIdOrThrow(
|
|
PageLayoutComponentInstanceContext,
|
|
pageLayoutIdFromProps,
|
|
);
|
|
|
|
const [pageLayoutDraft, setPageLayoutDraft] = useRecoilComponentState(
|
|
pageLayoutDraftComponentState,
|
|
pageLayoutId,
|
|
);
|
|
const pageLayoutPersisted = useRecoilComponentValue(
|
|
pageLayoutPersistedComponentState,
|
|
pageLayoutId,
|
|
);
|
|
|
|
const isDirty = pageLayoutPersisted
|
|
? !isDeeplyEqual(pageLayoutDraft, {
|
|
id: pageLayoutPersisted.id,
|
|
name: pageLayoutPersisted.name,
|
|
type: pageLayoutPersisted.type,
|
|
objectMetadataId: pageLayoutPersisted.objectMetadataId,
|
|
tabs: pageLayoutPersisted.tabs,
|
|
})
|
|
: pageLayoutDraft.name.trim().length > 0 || pageLayoutDraft.tabs.length > 0;
|
|
|
|
const canSave = pageLayoutDraft.name?.trim().length > 0;
|
|
|
|
return {
|
|
pageLayoutDraft,
|
|
setPageLayoutDraft,
|
|
isDirty,
|
|
canSave,
|
|
};
|
|
};
|