Feat/show page metadata (#2234)

* Fix view fetch bug

* Finished types

* Removed console.log

* Fixed todo

* Working Object Show Page

* Minor fixes

* Fix custom object requests pending (#2240)

* Fix custom object requests pending

* fix typo

* Fix various bugs

* Typo

* Fix

* Fix

* Fix

---------

Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
Lucas Bordeau
2023-10-27 11:06:07 +02:00
committed by GitHub
parent 5ba68e997d
commit 3f2e1b622e
28 changed files with 335 additions and 33 deletions
@@ -169,8 +169,8 @@ export const useCreateNewTempsCustomObject = () => {
});
const createdFields = [
emailFieldData,
nameFieldData,
emailFieldData,
cityFieldData,
phoneFieldData,
twitterFieldData,
@@ -7,7 +7,7 @@ import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useCreateOneObject = ({
objectNamePlural,
}: MetadataObjectIdentifier) => {
}: Pick<MetadataObjectIdentifier, 'objectNamePlural'>) => {
const {
foundMetadataObject,
objectNotFoundInMetadata,
@@ -7,7 +7,7 @@ import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useDeleteOneObject = ({
objectNamePlural,
}: MetadataObjectIdentifier) => {
}: Pick<MetadataObjectIdentifier, 'objectNamePlural'>) => {
const {
foundMetadataObject,
objectNotFoundInMetadata,
@@ -13,7 +13,7 @@ export const useFindManyObjects = <
ObjectType extends { id: string } & Record<string, any>,
>({
objectNamePlural,
}: MetadataObjectIdentifier) => {
}: Pick<MetadataObjectIdentifier, 'objectNamePlural'>) => {
const { foundMetadataObject, objectNotFoundInMetadata, findManyQuery } =
useFindOneMetadataObject({
objectNamePlural,
@@ -28,10 +28,12 @@ export const useFindManyObjects = <
const objects = useMemo(
() =>
formatPagedObjectsToObjects({
pagedObjects: data,
objectNamePlural,
}),
objectNamePlural
? formatPagedObjectsToObjects({
pagedObjects: data,
objectNamePlural,
})
: [],
[data, objectNamePlural],
);
@@ -7,16 +7,20 @@ import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { formatMetadataFieldAsColumnDefinition } from '../utils/formatMetadataFieldAsColumnDefinition';
import { generateCreateOneObjectMutation } from '../utils/generateCreateOneObjectMutation';
import { generateFindManyCustomObjectsQuery } from '../utils/generateFindManyCustomObjectsQuery';
import { generateFindOneCustomObjectQuery } from '../utils/generateFindOneCustomObjectQuery';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
export const useFindOneMetadataObject = ({
objectNamePlural,
objectNameSingular,
}: MetadataObjectIdentifier) => {
const { metadataObjects, loading } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural,
(object) =>
object.namePlural === objectNamePlural ||
object.nameSingular === objectNameSingular,
);
const objectNotFoundInMetadata =
@@ -28,6 +32,7 @@ export const useFindOneMetadataObject = ({
formatMetadataFieldAsColumnDefinition({
index,
field,
metadataObject: foundMetadataObject,
}),
) ?? [];
@@ -41,6 +46,16 @@ export const useFindOneMetadataObject = ({
}
`;
const findOneQuery = foundMetadataObject
? generateFindOneCustomObjectQuery({
metadataObject: foundMetadataObject,
})
: gql`
query EmptyQuery {
empty
}
`;
const createOneMutation = foundMetadataObject
? generateCreateOneObjectMutation({
metadataObject: foundMetadataObject,
@@ -67,6 +82,7 @@ export const useFindOneMetadataObject = ({
objectNotFoundInMetadata,
columnDefinitions,
findManyQuery,
findOneQuery,
createOneMutation,
deleteOneMutation,
loading,
@@ -0,0 +1,46 @@
import { useQuery } from '@apollo/client';
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useFindOneObject = <
ObjectType extends { id: string } & Record<string, any>,
>({
objectNameSingular,
objectId,
onCompleted,
}: Pick<MetadataObjectIdentifier, 'objectNameSingular'> & {
objectId: string | undefined;
onCompleted?: (data: ObjectType) => void;
}) => {
const { foundMetadataObject, objectNotFoundInMetadata, findOneQuery } =
useFindOneMetadataObject({
objectNameSingular,
});
const { data, loading, error } = useQuery<
{ [nameSingular: string]: ObjectType },
{ objectId: string }
>(findOneQuery, {
skip: !foundMetadataObject || !objectId,
variables: {
objectId: objectId ?? '',
},
onCompleted: (data) => {
if (onCompleted && objectNameSingular) {
onCompleted(data[objectNameSingular]);
}
},
});
const object =
objectNameSingular && data ? data[objectNameSingular] : undefined;
return {
object,
loading,
error,
objectNotFoundInMetadata,
};
};
@@ -1,4 +1,5 @@
import { gql, useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
import { generateUpdateOneObjectMutation } from '../utils/generateUpdateOneObjectMutation';
@@ -7,10 +8,12 @@ import { useFindOneMetadataObject } from './useFindOneMetadataObject';
export const useUpdateOneObject = ({
objectNamePlural,
objectNameSingular,
}: MetadataObjectIdentifier) => {
const { foundMetadataObject, objectNotFoundInMetadata } =
const { foundMetadataObject, objectNotFoundInMetadata, findManyQuery } =
useFindOneMetadataObject({
objectNamePlural,
objectNameSingular,
});
const generatedMutation = foundMetadataObject
@@ -24,7 +27,9 @@ export const useUpdateOneObject = ({
`;
// TODO: type this with a minimal type at least with Record<string, any>
const [mutate] = useMutation(generatedMutation);
const [mutate] = useMutation(generatedMutation, {
refetchQueries: [getOperationName(findManyQuery) ?? ''],
});
const updateOneObject = foundMetadataObject
? ({