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
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import { type IndexFieldMetadataItem } from '@/object-metadata/types/IndexFieldMetadataItem';
|
|
import { type IndexMetadataItem } from '@/object-metadata/types/IndexMetadataItem';
|
|
import { objectMetadataItemSchema } from '@/object-metadata/validation-schemas/objectMetadataItemSchema';
|
|
import { type ObjectMetadataItemsQuery } from '~/generated-metadata/graphql';
|
|
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
|
|
type mapPaginatedObjectMetadataItemsToObjectMetadataItemsArgs = {
|
|
pagedObjectMetadataItems: ObjectMetadataItemsQuery | undefined;
|
|
};
|
|
|
|
export const mapPaginatedObjectMetadataItemsToObjectMetadataItems = ({
|
|
pagedObjectMetadataItems,
|
|
}: mapPaginatedObjectMetadataItemsToObjectMetadataItemsArgs) => {
|
|
const formattedObjects: Omit<
|
|
ObjectMetadataItem,
|
|
'readableFields' | 'updatableFields'
|
|
>[] =
|
|
pagedObjectMetadataItems?.objects.edges.map((object) => {
|
|
const labelIdentifierFieldMetadataId =
|
|
objectMetadataItemSchema.shape.labelIdentifierFieldMetadataId.parse(
|
|
object.node.labelIdentifierFieldMetadataId,
|
|
);
|
|
|
|
const { fieldsList, indexMetadataList, ...objectWithoutFieldsList } =
|
|
object.node;
|
|
|
|
return {
|
|
...objectWithoutFieldsList,
|
|
fields: fieldsList,
|
|
labelIdentifierFieldMetadataId,
|
|
indexMetadatas: indexMetadataList.map(
|
|
(index) =>
|
|
({
|
|
...index,
|
|
indexFieldMetadatas: index.indexFieldMetadataList.map(
|
|
(indexFieldMetadata) =>
|
|
({
|
|
...indexFieldMetadata,
|
|
}) satisfies IndexFieldMetadataItem,
|
|
),
|
|
}) satisfies IndexMetadataItem,
|
|
),
|
|
} satisfies Omit<
|
|
ObjectMetadataItem,
|
|
'readableFields' | 'updatableFields'
|
|
>;
|
|
}) ?? [];
|
|
|
|
return formattedObjects;
|
|
};
|