Feat/metadata with datatable v2 (#2110)

* Reworked metadata creation

* Wip

* Fix from PR

* Removed consolelog

* Post merge

* Fixed seeds

* Wip

* Added dynamic routing

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Lucas Bordeau
2023-10-18 19:41:02 +02:00
committed by GitHub
parent 830dfc4d99
commit c590300bf1
14 changed files with 189 additions and 75 deletions

View File

@ -1,19 +1,17 @@
import { gql, useMutation } from '@apollo/client';
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { generateCreateOneObjectMutation } from '../utils/generateCreateOneObjectMutation';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useCreateOneObject = ({
objectNamePlural,
}: {
objectNamePlural: string;
}) => {
const { metadataObjects } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural,
);
}: MetadataObjectIdentifier) => {
const { foundMetadataObject, objectNotFoundInMetadata } =
useFindOneMetadataObject({
objectNamePlural,
});
const generatedMutation = foundMetadataObject
? generateCreateOneObjectMutation({
@ -25,6 +23,7 @@ export const useCreateOneObject = ({
}
`;
// TODO: type this with a minimal type at least with Record<string, any>
const [mutate] = useMutation(generatedMutation);
const createOneObject = foundMetadataObject
@ -39,9 +38,6 @@ export const useCreateOneObject = ({
}
: undefined;
const objectNotFoundInMetadata =
metadataObjects.length > 0 && !foundMetadataObject;
return {
createOneObject,
objectNotFoundInMetadata,

View File

@ -1,11 +1,12 @@
import { useMemo } from 'react';
import { gql, useQuery } from '@apollo/client';
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { PaginatedObjectType } from '../types/PaginatedObjectType';
import { formatPagedObjectsToObjects } from '../utils/formatPagedObjectsToObjects';
import { generateFindManyCustomObjectsQuery } from '../utils/generateFindManyCustomObjectsQuery';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
import { useFindOneMetadataObject } from './useFindOneMetadataObject';
// TODO: test with a wrong name
// TODO: add zod to validate that we have at least id on each object
@ -13,14 +14,11 @@ export const useFindManyObjects = <
ObjectType extends { id: string } & Record<string, any>,
>({
objectNamePlural,
}: {
objectNamePlural: string;
}) => {
const { metadataObjects } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural,
);
}: MetadataObjectIdentifier) => {
const { foundMetadataObject, objectNotFoundInMetadata } =
useFindOneMetadataObject({
objectNamePlural,
});
const generatedQuery = foundMetadataObject
? generateFindManyCustomObjectsQuery({
@ -48,9 +46,6 @@ export const useFindManyObjects = <
[data, objectNamePlural],
);
const objectNotFoundInMetadata =
metadataObjects.length > 0 && !foundMetadataObject;
return {
objects,
loading,

View File

@ -0,0 +1,21 @@
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
export const useFindOneMetadataObject = ({
objectNamePlural,
}: MetadataObjectIdentifier) => {
const { metadataObjects } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural,
);
const objectNotFoundInMetadata =
metadataObjects.length > 0 && !foundMetadataObject;
return {
foundMetadataObject,
objectNotFoundInMetadata,
};
};

View File

@ -16,8 +16,7 @@ import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
export const useUpdateOneMetadataObject = () => {
const apolloClientMetadata = useApolloMetadataClient();
const { getMetadataObjectsFromCache: queryMetadataObjects } =
useFindManyMetadataObjects();
const { getMetadataObjectsFromCache } = useFindManyMetadataObjects();
const [mutate] = useMutation<
UpdateOneMetadataObjectMutation,
@ -38,7 +37,7 @@ export const useUpdateOneMetadataObject = () => {
>
>;
}) => {
const metadataObjects = queryMetadataObjects();
const metadataObjects = getMetadataObjectsFromCache();
const foundMetadataObject = metadataObjects.find(
(metadataObject) => metadataObject.id === idToUpdate,

View File

@ -0,0 +1,52 @@
import { gql, useMutation } from '@apollo/client';
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { generateUpdateOneObjectMutation } from '../utils/generateUpdateOneObjectMutation';
import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useUpdateOneObject = ({
objectNamePlural,
}: MetadataObjectIdentifier) => {
const { foundMetadataObject, objectNotFoundInMetadata } =
useFindOneMetadataObject({
objectNamePlural,
});
const generatedMutation = foundMetadataObject
? generateUpdateOneObjectMutation({
metadataObject: foundMetadataObject,
})
: gql`
mutation EmptyMutation {
empty
}
`;
// TODO: type this with a minimal type at least with Record<string, any>
const [mutate] = useMutation(generatedMutation);
const updateOneObject = foundMetadataObject
? ({
idToUpdate,
input,
}: {
idToUpdate: string;
input: Record<string, any>;
}) => {
return mutate({
variables: {
idToUpdate: idToUpdate,
input: {
...input,
},
},
});
}
: undefined;
return {
updateOneObject,
objectNotFoundInMetadata,
};
};