feat: enforce @/ alias for imports and fix all relative parent imports (#16787)
## 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
This commit is contained in:
+2
-2
@@ -8,7 +8,7 @@ import {
|
||||
query,
|
||||
responseData,
|
||||
variables,
|
||||
} from '../__mocks__/useCreateOneObjectMetadataItem';
|
||||
} from '@/object-metadata/hooks/__mocks__/useCreateOneObjectMetadataItem';
|
||||
|
||||
import { jestExpectSuccessfulMetadataRequestResult } from '@/object-metadata/hooks/__tests__/utils/jest-expect-metadata-request-status.util';
|
||||
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
|
||||
@@ -16,7 +16,7 @@ import { mockedUserData } from '~/testing/mock-data/users';
|
||||
import {
|
||||
query as findManyObjectMetadataItemsQuery,
|
||||
responseData as findManyObjectMetadataItemsResponseData,
|
||||
} from '../__mocks__/useFindManyObjectMetadataItems';
|
||||
} from '@/object-metadata/hooks/__mocks__/useFindManyObjectMetadataItems';
|
||||
|
||||
const mocks = [
|
||||
{
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import {
|
||||
query,
|
||||
responseData,
|
||||
variables,
|
||||
} from '../__mocks__/useDeleteOneObjectMetadataItem';
|
||||
} from '@/object-metadata/hooks/__mocks__/useDeleteOneObjectMetadataItem';
|
||||
|
||||
import { jestExpectSuccessfulMetadataRequestResult } from '@/object-metadata/hooks/__tests__/utils/jest-expect-metadata-request-status.util';
|
||||
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
|
||||
@@ -17,7 +17,7 @@ import { mockedCoreViewsData } from '~/testing/mock-data/views';
|
||||
import {
|
||||
query as findManyObjectMetadataItemsQuery,
|
||||
responseData as findManyObjectMetadataItemsResponseData,
|
||||
} from '../__mocks__/useFindManyObjectMetadataItems';
|
||||
} from '@/object-metadata/hooks/__mocks__/useFindManyObjectMetadataItems';
|
||||
|
||||
const mocks = [
|
||||
{
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import {
|
||||
queries,
|
||||
responseData,
|
||||
variables,
|
||||
} from '../__mocks__/useFieldMetadataItem';
|
||||
} from '@/object-metadata/hooks/__mocks__/useFieldMetadataItem';
|
||||
|
||||
import { jestExpectSuccessfulMetadataRequestResult } from '@/object-metadata/hooks/__tests__/utils/jest-expect-metadata-request-status.util';
|
||||
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
|
||||
@@ -21,7 +21,7 @@ import { mockedUserData } from '~/testing/mock-data/users';
|
||||
import {
|
||||
query as findManyObjectMetadataItemsQuery,
|
||||
responseData as findManyObjectMetadataItemsResponseData,
|
||||
} from '../__mocks__/useFindManyObjectMetadataItems';
|
||||
} from '@/object-metadata/hooks/__mocks__/useFindManyObjectMetadataItems';
|
||||
|
||||
jest.mock('@/object-metadata/hooks/useUpdateOneFieldMetadataItem', () => ({
|
||||
useUpdateOneFieldMetadataItem: () => ({
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import { SnackBarComponentInstanceContext } from '@/ui/feedback/snack-bar-manage
|
||||
import {
|
||||
query,
|
||||
responseData,
|
||||
} from '../__mocks__/useFindManyObjectMetadataItems';
|
||||
} from '@/object-metadata/hooks/__mocks__/useFindManyObjectMetadataItems';
|
||||
|
||||
const mocks = [
|
||||
{
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import { renderHook } from '@testing-library/react';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
|
||||
import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter';
|
||||
import { useObjectNamePluralFromSingular } from '../useObjectNamePluralFromSingular';
|
||||
import { useObjectNamePluralFromSingular } from '@/object-metadata/hooks/useObjectNamePluralFromSingular';
|
||||
|
||||
describe('useObjectNamePluralFromSingular', () => {
|
||||
it('should work as expected', async () => {
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import { renderHook } from '@testing-library/react';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
|
||||
import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter';
|
||||
import { useObjectNameSingularFromPlural } from '../useObjectNameSingularFromPlural';
|
||||
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
|
||||
|
||||
describe('useObjectNameSingularFromPlural', () => {
|
||||
it('should work as expected', async () => {
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import { filterAvailableTableColumns } from '@/object-record/utils/filterAvailab
|
||||
import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector';
|
||||
import { availableFieldMetadataItemsForSortFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForSortFamilySelector';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { formatFieldMetadataItemAsColumnDefinition } from '../utils/formatFieldMetadataItemAsColumnDefinition';
|
||||
import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition';
|
||||
|
||||
export const useColumnDefinitionsFromObjectMetadata = (
|
||||
objectMetadataItem: ObjectMetadataItem,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { type Field } from '~/generated-metadata/graphql';
|
||||
|
||||
import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput';
|
||||
import { formatFieldMetadataItemInput } from '@/object-metadata/utils/formatFieldMetadataItemInput';
|
||||
|
||||
import { type RelationCreationPayload } from 'twenty-shared/types';
|
||||
import { useCreateOneFieldMetadataItem } from './useCreateOneFieldMetadataItem';
|
||||
|
||||
+2
-2
@@ -10,8 +10,8 @@ import { logError } from '~/utils/logError';
|
||||
|
||||
import { enrichObjectMetadataItemsWithPermissions } from '@/object-metadata/utils/enrichObjectMetadataItemsWithPermissions';
|
||||
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
|
||||
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries';
|
||||
import { mapPaginatedObjectMetadataItemsToObjectMetadataItems } from '../utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems';
|
||||
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '@/object-metadata/graphql/queries';
|
||||
import { mapPaginatedObjectMetadataItemsToObjectMetadataItems } from '@/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems';
|
||||
|
||||
export const useFindManyObjectMetadataItems = ({
|
||||
skip,
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useRecoilCallback } from 'recoil';
|
||||
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
|
||||
import { type FieldMetadataItem } from '../types/FieldMetadataItem';
|
||||
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
|
||||
export const useGetRelationMetadata = () =>
|
||||
useRecoilCallback(
|
||||
|
||||
@@ -5,7 +5,7 @@ import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objec
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier';
|
||||
import { type ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier';
|
||||
|
||||
export const useObjectMetadataItem = ({
|
||||
objectNameSingular,
|
||||
|
||||
Reference in New Issue
Block a user