Feat/metadata add update and delete on frontend (#2102)

* Reworked metadata creation

* Wip

* Fix from PR

* Removed consolelog

* Post merge

* Fixed seeds
This commit is contained in:
Lucas Bordeau
2023-10-18 16:48:11 +02:00
committed by GitHub
parent 21c2834f52
commit 547a17b145
23 changed files with 482 additions and 77 deletions

View File

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