feat: activate standard objects in New Object page (#2232)
* feat: activate standard objects in New Object page Closes #2010, Closes #2173 * Pagination limit = 1000 * Various fixes --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -2,7 +2,7 @@ import { gql } from '@apollo/client';
|
||||
|
||||
export const FIND_MANY_METADATA_OBJECTS = gql`
|
||||
query MetadataObjects {
|
||||
objects(paging: { first: 100 }) {
|
||||
objects(paging: { first: 1000 }) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@ -17,7 +17,7 @@ export const FIND_MANY_METADATA_OBJECTS = gql`
|
||||
isActive
|
||||
createdAt
|
||||
updatedAt
|
||||
fields(paging: { first: 100 }) {
|
||||
fields(paging: { first: 1000 }) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { useMemo } from 'react';
|
||||
import { useQuery } from '@apollo/client';
|
||||
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar/hooks/useSnackBar';
|
||||
import {
|
||||
MetadataObjectsQuery,
|
||||
MetadataObjectsQueryVariables,
|
||||
@ -15,15 +16,28 @@ import { useApolloMetadataClient } from './useApolloMetadataClient';
|
||||
export const useFindManyMetadataObjects = () => {
|
||||
const apolloMetadataClient = useApolloMetadataClient();
|
||||
|
||||
const { enqueueSnackBar } = useSnackBar();
|
||||
|
||||
const {
|
||||
data,
|
||||
fetchMore: fetchMoreInternal,
|
||||
loading,
|
||||
error,
|
||||
} = useQuery<MetadataObjectsQuery, MetadataObjectsQueryVariables>(
|
||||
FIND_MANY_METADATA_OBJECTS,
|
||||
{
|
||||
client: apolloMetadataClient ?? undefined,
|
||||
skip: !apolloMetadataClient,
|
||||
onError: (error) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error('useFindManyMetadataObjects error : ', error);
|
||||
enqueueSnackBar(
|
||||
`Error during useFindManyMetadataObjects, ${error.message}`,
|
||||
{
|
||||
variant: 'error',
|
||||
},
|
||||
);
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
@ -47,5 +61,6 @@ export const useFindManyMetadataObjects = () => {
|
||||
hasMore,
|
||||
fetchMore,
|
||||
loading,
|
||||
error,
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { useMemo } from 'react';
|
||||
import { useQuery } from '@apollo/client';
|
||||
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar/hooks/useSnackBar';
|
||||
|
||||
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
|
||||
import { PaginatedObjectType } from '../types/PaginatedObjectType';
|
||||
import { formatPagedObjectsToObjects } from '../utils/formatPagedObjectsToObjects';
|
||||
@ -19,10 +21,25 @@ export const useFindManyObjects = <
|
||||
objectNamePlural,
|
||||
});
|
||||
|
||||
const { enqueueSnackBar } = useSnackBar();
|
||||
|
||||
const { data, loading, error } = useQuery<PaginatedObjectType<ObjectType>>(
|
||||
findManyQuery,
|
||||
{
|
||||
skip: !foundMetadataObject,
|
||||
onError: (error) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(
|
||||
`useFindManyObjects for "${objectNamePlural}" error : `,
|
||||
error,
|
||||
);
|
||||
enqueueSnackBar(
|
||||
`Error during useFindManyObjects for "${objectNamePlural}", ${error.message}`,
|
||||
{
|
||||
variant: 'error',
|
||||
},
|
||||
);
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { ObjectFieldDataType } from '@/settings/data-model/types/ObjectFieldDataType';
|
||||
import { MetadataFieldDataType } from '@/settings/data-model/types/ObjectFieldDataType';
|
||||
import { Field } from '~/generated/graphql';
|
||||
|
||||
import { formatMetadataFieldInput } from '../utils/formatMetadataFieldInput';
|
||||
@ -7,15 +7,15 @@ import { useCreateOneMetadataField } from './useCreateOneMetadataField';
|
||||
import { useDeleteOneMetadataField } from './useDeleteOneMetadataField';
|
||||
import { useUpdateOneMetadataField } from './useUpdateOneMetadataField';
|
||||
|
||||
export const useFieldMetadata = () => {
|
||||
export const useMetadataField = () => {
|
||||
const { createOneMetadataField } = useCreateOneMetadataField();
|
||||
const { updateOneMetadataField } = useUpdateOneMetadataField();
|
||||
const { deleteOneMetadataField } = useDeleteOneMetadataField();
|
||||
|
||||
const createField = (
|
||||
const createMetadataField = (
|
||||
input: Pick<Field, 'label' | 'icon' | 'description'> & {
|
||||
objectId: string;
|
||||
type: ObjectFieldDataType;
|
||||
type: MetadataFieldDataType;
|
||||
},
|
||||
) =>
|
||||
createOneMetadataField({
|
||||
@ -23,25 +23,25 @@ export const useFieldMetadata = () => {
|
||||
objectId: input.objectId,
|
||||
});
|
||||
|
||||
const activateField = (metadataField: Field) =>
|
||||
const activateMetadataField = (metadataField: Field) =>
|
||||
updateOneMetadataField({
|
||||
fieldIdToUpdate: metadataField.id,
|
||||
updatePayload: { isActive: true },
|
||||
});
|
||||
|
||||
const disableField = (metadataField: Field) =>
|
||||
const disableMetadataField = (metadataField: Field) =>
|
||||
updateOneMetadataField({
|
||||
fieldIdToUpdate: metadataField.id,
|
||||
updatePayload: { isActive: false },
|
||||
});
|
||||
|
||||
const eraseField = (metadataField: Field) =>
|
||||
const eraseMetadataField = (metadataField: Field) =>
|
||||
deleteOneMetadataField(metadataField.id);
|
||||
|
||||
return {
|
||||
activateField,
|
||||
createField,
|
||||
disableField,
|
||||
eraseField,
|
||||
activateMetadataField,
|
||||
createMetadataField,
|
||||
disableMetadataField,
|
||||
eraseMetadataField,
|
||||
};
|
||||
};
|
||||
@ -7,7 +7,7 @@ import { useDeleteOneMetadataObject } from './useDeleteOneMetadataObject';
|
||||
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
|
||||
import { useUpdateOneMetadataObject } from './useUpdateOneMetadataObject';
|
||||
|
||||
export const useObjectMetadata = () => {
|
||||
export const useMetadataObjectForSettings = () => {
|
||||
const { metadataObjects, loading } = useFindManyMetadataObjects();
|
||||
|
||||
const activeMetadataObjects = metadataObjects.filter(
|
||||
@ -17,23 +17,23 @@ export const useObjectMetadata = () => {
|
||||
({ isActive }) => !isActive,
|
||||
);
|
||||
|
||||
const findActiveObjectBySlug = (slug: string) =>
|
||||
const findActiveMetadataObjectBySlug = (slug: string) =>
|
||||
activeMetadataObjects.find(
|
||||
(activeObject) => getObjectSlug(activeObject) === slug,
|
||||
(activeMetadataObject) => getObjectSlug(activeMetadataObject) === slug,
|
||||
);
|
||||
|
||||
const { createOneMetadataObject } = useCreateOneMetadataObject();
|
||||
const { updateOneMetadataObject } = useUpdateOneMetadataObject();
|
||||
const { deleteOneMetadataObject } = useDeleteOneMetadataObject();
|
||||
|
||||
const createObject = (
|
||||
const createMetadataObject = (
|
||||
input: Pick<
|
||||
MetadataObject,
|
||||
'labelPlural' | 'labelSingular' | 'icon' | 'description'
|
||||
>,
|
||||
) => createOneMetadataObject(formatMetadataObjectInput(input));
|
||||
|
||||
const editObject = (
|
||||
const editMetadataObject = (
|
||||
input: Pick<
|
||||
MetadataObject,
|
||||
'id' | 'labelPlural' | 'labelSingular' | 'icon' | 'description'
|
||||
@ -44,30 +44,30 @@ export const useObjectMetadata = () => {
|
||||
updatePayload: formatMetadataObjectInput(input),
|
||||
});
|
||||
|
||||
const activateObject = (metadataObject: MetadataObject) =>
|
||||
const activateMetadataObject = (metadataObject: Pick<MetadataObject, 'id'>) =>
|
||||
updateOneMetadataObject({
|
||||
idToUpdate: metadataObject.id,
|
||||
updatePayload: { isActive: true },
|
||||
});
|
||||
|
||||
const disableObject = (metadataObject: MetadataObject) =>
|
||||
const disableMetadataObject = (metadataObject: Pick<MetadataObject, 'id'>) =>
|
||||
updateOneMetadataObject({
|
||||
idToUpdate: metadataObject.id,
|
||||
updatePayload: { isActive: false },
|
||||
});
|
||||
|
||||
const eraseObject = (metadataObject: Pick<MetadataObject, 'id'>) =>
|
||||
const eraseMetadataObject = (metadataObject: Pick<MetadataObject, 'id'>) =>
|
||||
deleteOneMetadataObject(metadataObject.id);
|
||||
|
||||
return {
|
||||
activateObject,
|
||||
activeObjects: activeMetadataObjects,
|
||||
createObject,
|
||||
disabledObjects: disabledMetadataObjects,
|
||||
disableObject,
|
||||
editObject,
|
||||
eraseObject,
|
||||
findActiveObjectBySlug,
|
||||
activateMetadataObject,
|
||||
activeMetadataObjects,
|
||||
createMetadataObject,
|
||||
disabledMetadataObjects,
|
||||
disableMetadataObject,
|
||||
editMetadataObject,
|
||||
eraseMetadataObject,
|
||||
findActiveMetadataObjectBySlug,
|
||||
loading,
|
||||
};
|
||||
};
|
||||
@ -1,11 +1,11 @@
|
||||
import toCamelCase from 'lodash.camelcase';
|
||||
|
||||
import { ObjectFieldDataType } from '@/settings/data-model/types/ObjectFieldDataType';
|
||||
import { MetadataFieldDataType } from '@/settings/data-model/types/ObjectFieldDataType';
|
||||
import { Field } from '~/generated-metadata/graphql';
|
||||
|
||||
export const formatMetadataFieldInput = (
|
||||
input: Pick<Field, 'label' | 'icon' | 'description'> & {
|
||||
type: ObjectFieldDataType;
|
||||
type: MetadataFieldDataType;
|
||||
},
|
||||
) => ({
|
||||
description: input.description?.trim() ?? null,
|
||||
|
||||
Reference in New Issue
Block a user