feat: Revamp navigation bar (#6031)
closes: #4428 Testing for fetchMoreRecords is pending, along with component tests --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -1,11 +1,10 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import React from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/ObjectMetadataItemsLoadEffect';
|
||||
import { PreComputedChipGeneratorsContext } from '@/object-metadata/context/PreComputedChipGeneratorsContext';
|
||||
import { PreComputedChipGeneratorsProvider } from '@/object-metadata/components/PreComputedChipGeneratorsProvider';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { RelationPickerScope } from '@/object-record/relation-picker/scopes/RelationPickerScope';
|
||||
import { getRecordChipGeneratorPerObjectPerField } from '@/object-record/utils/getRecordChipGeneratorPerObjectPerField';
|
||||
import { UserOrMetadataLoader } from '~/loading/components/UserOrMetadataLoader';
|
||||
|
||||
export const ObjectMetadataItemsProvider = ({
|
||||
@ -15,23 +14,15 @@ export const ObjectMetadataItemsProvider = ({
|
||||
|
||||
const shouldDisplayChildren = objectMetadataItems.length > 0;
|
||||
|
||||
const chipGeneratorPerObjectPerField = useMemo(() => {
|
||||
return getRecordChipGeneratorPerObjectPerField(objectMetadataItems);
|
||||
}, [objectMetadataItems]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<ObjectMetadataItemsLoadEffect />
|
||||
{shouldDisplayChildren ? (
|
||||
<PreComputedChipGeneratorsContext.Provider
|
||||
value={{
|
||||
chipGeneratorPerObjectPerField,
|
||||
}}
|
||||
>
|
||||
<PreComputedChipGeneratorsProvider>
|
||||
<RelationPickerScope relationPickerScopeId="relation-picker">
|
||||
{children}
|
||||
</RelationPickerScope>
|
||||
</PreComputedChipGeneratorsContext.Provider>
|
||||
</PreComputedChipGeneratorsProvider>
|
||||
) : (
|
||||
<UserOrMetadataLoader />
|
||||
)}
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { PreComputedChipGeneratorsContext } from '@/object-metadata/context/PreComputedChipGeneratorsContext';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { getRecordChipGenerators } from '@/object-record/utils/getRecordChipGenerators';
|
||||
|
||||
export const PreComputedChipGeneratorsProvider = ({
|
||||
children,
|
||||
}: React.PropsWithChildren) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||
|
||||
const { chipGeneratorPerObjectPerField, identifierChipGeneratorPerObject } =
|
||||
useMemo(() => {
|
||||
return getRecordChipGenerators(objectMetadataItems);
|
||||
}, [objectMetadataItems]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<PreComputedChipGeneratorsContext.Provider
|
||||
value={{
|
||||
chipGeneratorPerObjectPerField,
|
||||
identifierChipGeneratorPerObject,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</PreComputedChipGeneratorsContext.Provider>
|
||||
</>
|
||||
);
|
||||
};
|
||||
@ -3,13 +3,19 @@ import { createContext } from 'react';
|
||||
import { RecordChipData } from '@/object-record/record-field/types/RecordChipData';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
|
||||
export type ChipGeneratorPerObjectPerField = Record<
|
||||
export type ChipGeneratorPerObjectNameSingularPerFieldName = Record<
|
||||
string,
|
||||
Record<string, (record: ObjectRecord) => RecordChipData>
|
||||
>;
|
||||
|
||||
export type IdentifierChipGeneratorPerObject = Record<
|
||||
string,
|
||||
(record: ObjectRecord) => RecordChipData
|
||||
>;
|
||||
|
||||
export type PreComputedChipGeneratorsContextProps = {
|
||||
chipGeneratorPerObjectPerField: ChipGeneratorPerObjectPerField;
|
||||
chipGeneratorPerObjectPerField: ChipGeneratorPerObjectNameSingularPerFieldName;
|
||||
identifierChipGeneratorPerObject: IdentifierChipGeneratorPerObject;
|
||||
};
|
||||
|
||||
export const PreComputedChipGeneratorsContext =
|
||||
|
||||
@ -8,7 +8,7 @@ export const getLabelIdentifierFieldValue = (
|
||||
record: ObjectRecord,
|
||||
labelIdentifierFieldMetadataItem: FieldMetadataItem | undefined,
|
||||
objectNameSingular: string,
|
||||
) => {
|
||||
): string => {
|
||||
if (
|
||||
objectNameSingular === CoreObjectNameSingular.WorkspaceMember ||
|
||||
labelIdentifierFieldMetadataItem?.type === FieldMetadataType.FullName
|
||||
@ -17,7 +17,7 @@ export const getLabelIdentifierFieldValue = (
|
||||
}
|
||||
|
||||
if (isDefined(labelIdentifierFieldMetadataItem?.name)) {
|
||||
return record[labelIdentifierFieldMetadataItem.name] as string | number;
|
||||
return String(record[labelIdentifierFieldMetadataItem.name]);
|
||||
}
|
||||
|
||||
return '';
|
||||
|
||||
@ -4,7 +4,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
|
||||
export const getLinkToShowPage = (
|
||||
objectNameSingular: string,
|
||||
record: ObjectRecord,
|
||||
record: Pick<ObjectRecord, 'id'>,
|
||||
) => {
|
||||
const basePathToShowPage = getBasePathToShowPage({
|
||||
objectNameSingular,
|
||||
|
||||
Reference in New Issue
Block a user