Introduce ComponentState (#4386)

* Proof of concept ComponentState

* Migrate to createState and createFamilyState

* Refactor

* Fix

* Fix tests

* Fix lint

* Fix tests

* Re-enable coverage
This commit is contained in:
Charles Bochet
2024-03-09 11:31:00 +01:00
committed by GitHub
parent 17511be0cf
commit 86c0f311f5
451 changed files with 1718 additions and 2557 deletions

View File

@ -13,7 +13,7 @@ export const ApolloMetadataClientProvider = ({
}: {
children: React.ReactNode;
}) => {
const [tokenPair] = useRecoilState(tokenPairState);
const [tokenPair] = useRecoilState(tokenPairState());
const apolloMetadataClient = useMemo(() => {
if (isNonEmptyString(tokenPair?.accessToken.token)) {
return new ApolloClient({

View File

@ -10,7 +10,7 @@ export const ObjectMetadataItemsLoadEffect = () => {
useFindManyObjectMetadataItems();
const [objectMetadataItems, setObjectMetadataItems] = useRecoilState(
objectMetadataItemsState,
objectMetadataItemsState(),
);
useEffect(() => {

View File

@ -9,8 +9,8 @@ import { RelationPickerScope } from '@/object-record/relation-picker/scopes/Rela
export const ObjectMetadataItemsProvider = ({
children,
}: React.PropsWithChildren) => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState());
const shouldDisplayChildren = () => {
if (objectMetadataItems.length > 0) {
return true;

View File

@ -12,7 +12,7 @@ describe('useFilterOutUnexistingObjectMetadataItems', () => {
it('should work as expected', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems.slice(1));
return useFilterOutUnexistingObjectMetadataItems();

View File

@ -17,7 +17,7 @@ describe('useGetObjectRecordIdentifierByNameSingular', () => {
record: any;
objectNameSingular: string;
}) => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems);

View File

@ -31,7 +31,7 @@ describe('useGetRelationMetadata', () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
useEffect(() => {
setMetadataItems(objectMetadataItems);

View File

@ -127,7 +127,7 @@ describe('useMapFieldMetadataToGraphQLQuery', () => {
it('should work as expected', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems);
return {

View File

@ -44,7 +44,7 @@ describe('useObjectMetadataItemForSettings', () => {
it('should findActiveObjectMetadataItemBySlug', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems);
return useObjectMetadataItemForSettings();
@ -64,7 +64,7 @@ describe('useObjectMetadataItemForSettings', () => {
it('should findObjectMetadataItemById', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems);
return useObjectMetadataItemForSettings();
@ -86,7 +86,7 @@ describe('useObjectMetadataItemForSettings', () => {
it('should findObjectMetadataItemByNamePlural', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState());
setMetadataItems(mockObjectMetadataItems);
return useObjectMetadataItemForSettings();

View File

@ -5,7 +5,7 @@ import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectReco
import { ObjectRecordIdentifier } from '@/object-record/types/ObjectRecordIdentifier';
export const useGetObjectRecordIdentifierByNameSingular = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
return (record: any, objectNameSingular: string): ObjectRecordIdentifier => {
const objectMetadataItem = objectMetadataItems.find(

View File

@ -6,7 +6,7 @@ import { FieldType } from '@/object-record/record-field/types/FieldType';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
export const useMapFieldMetadataToGraphQLQuery = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
const mapFieldMetadataToGraphQLQuery = ({
field,

View File

@ -41,7 +41,7 @@ export const useObjectMetadataItem = (
{ objectNameSingular }: ObjectMetadataItemIdentifier,
depth?: number,
) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const currentWorkspace = useRecoilValue(currentWorkspaceState());
const mockObjectMetadataItems = getObjectMetadataItemsMock();
@ -52,7 +52,7 @@ export const useObjectMetadataItem = (
}),
);
let objectMetadataItems = useRecoilValue(objectMetadataItemsState);
let objectMetadataItems = useRecoilValue(objectMetadataItemsState());
if (currentWorkspace?.activationStatus !== 'active') {
objectMetadataItem =

View File

@ -5,7 +5,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
import { getObjectSlug } from '../utils/getObjectSlug';
export const useObjectMetadataItemForSettings = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
const activeObjectMetadataItems = objectMetadataItems.filter(
({ isActive, isSystem }) => isActive && !isSystem,

View File

@ -12,7 +12,7 @@ import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentif
export const useObjectMetadataItemOnly = ({
objectNameSingular,
}: ObjectMetadataItemIdentifier) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const currentWorkspace = useRecoilValue(currentWorkspaceState());
const mockObjectMetadataItems = getObjectMetadataItemsMock();
@ -23,7 +23,7 @@ export const useObjectMetadataItemOnly = ({
}),
);
let objectMetadataItems = useRecoilValue(objectMetadataItemsState);
let objectMetadataItems = useRecoilValue(objectMetadataItemsState());
if (currentWorkspace?.activationStatus !== 'active') {
objectMetadataItem =

View File

@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
export const useObjectMetadataItems = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
return {
objectMetadataItems,

View File

@ -10,7 +10,7 @@ export const useObjectNamePluralFromSingular = ({
}: {
objectNameSingular: string;
}) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const currentWorkspace = useRecoilValue(currentWorkspaceState());
const mockObjectMetadataItems = getObjectMetadataItemsMock();
let objectMetadataItem = useRecoilValue(

View File

@ -10,7 +10,7 @@ export const useObjectNameSingularFromPlural = ({
}: {
objectNamePlural: string;
}) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const currentWorkspace = useRecoilValue(currentWorkspaceState());
const mockObjectMetadataItems = getObjectMetadataItemsMock();

View File

@ -16,7 +16,7 @@ export const objectMetadataItemFamilySelector = selectorFamily<
get:
({ objectNameType, objectName }: ObjectMetadataItemSelector) =>
({ get }) => {
const objectMetadataItems = get(objectMetadataItemsState);
const objectMetadataItems = get(objectMetadataItemsState());
if (objectNameType === 'singular') {
return (

View File

@ -8,7 +8,7 @@ export const objectMetadataItemsByNamePluralMapSelector = selector<
>({
key: 'objectMetadataItemsByNamePluralMapSelector',
get: ({ get }) => {
const objectMetadataItems = get(objectMetadataItemsState);
const objectMetadataItems = get(objectMetadataItemsState());
return new Map(
objectMetadataItems.map((objectMetadataItem) => [

View File

@ -8,7 +8,7 @@ export const objectMetadataItemsByNameSingularMapSelector = selector<
>({
key: 'objectMetadataItemsByNameSingularMapSelector',
get: ({ get }) => {
const objectMetadataItems = get(objectMetadataItemsState);
const objectMetadataItems = get(objectMetadataItemsState());
return new Map(
objectMetadataItems.map((objectMetadataItem) => [

View File

@ -1,8 +1,7 @@
import { atom } from 'recoil';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { createState } from '@/ui/utilities/state/utils/createState';
export const objectMetadataItemsState = atom<ObjectMetadataItem[]>({
export const objectMetadataItemsState = createState<ObjectMetadataItem[]>({
key: 'objectMetadataItemsState',
default: [],
defaultValue: [],
});