fixes https://discord.com/channels/1130383047699738754/1326560179113955328/1326560179113955328
81 lines
3.0 KiB
TypeScript
81 lines
3.0 KiB
TypeScript
import { NavigationDrawerItemForObjectMetadataItem } from '@/object-metadata/components/NavigationDrawerItemForObjectMetadataItem';
|
|
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper';
|
|
import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSection';
|
|
import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle';
|
|
import { useNavigationSection } from '@/ui/navigation/navigation-drawer/hooks/useNavigationSection';
|
|
import { useRecoilValue } from 'recoil';
|
|
|
|
const ORDERED_STANDARD_OBJECTS = [
|
|
'person',
|
|
'company',
|
|
'opportunity',
|
|
'task',
|
|
'note',
|
|
];
|
|
|
|
export const NavigationDrawerSectionForObjectMetadataItems = ({
|
|
sectionTitle,
|
|
isRemote,
|
|
objectMetadataItems,
|
|
}: {
|
|
sectionTitle: string;
|
|
isRemote: boolean;
|
|
objectMetadataItems: ObjectMetadataItem[];
|
|
}) => {
|
|
const { toggleNavigationSection, isNavigationSectionOpenState } =
|
|
useNavigationSection('Objects' + (isRemote ? 'Remote' : 'Workspace'));
|
|
const isNavigationSectionOpen = useRecoilValue(isNavigationSectionOpenState);
|
|
|
|
const sortedStandardObjectMetadataItems = [...objectMetadataItems]
|
|
.filter((item) => ORDERED_STANDARD_OBJECTS.includes(item.nameSingular))
|
|
.sort((objectMetadataItemA, objectMetadataItemB) => {
|
|
const indexA = ORDERED_STANDARD_OBJECTS.indexOf(
|
|
objectMetadataItemA.nameSingular,
|
|
);
|
|
const indexB = ORDERED_STANDARD_OBJECTS.indexOf(
|
|
objectMetadataItemB.nameSingular,
|
|
);
|
|
if (indexA === -1 || indexB === -1) {
|
|
return objectMetadataItemA.nameSingular.localeCompare(
|
|
objectMetadataItemB.nameSingular,
|
|
);
|
|
}
|
|
return indexA - indexB;
|
|
});
|
|
|
|
const sortedCustomObjectMetadataItems = [...objectMetadataItems]
|
|
.filter((item) => !ORDERED_STANDARD_OBJECTS.includes(item.nameSingular))
|
|
.sort((objectMetadataItemA, objectMetadataItemB) => {
|
|
return new Date(objectMetadataItemA.createdAt) <
|
|
new Date(objectMetadataItemB.createdAt)
|
|
? 1
|
|
: -1;
|
|
});
|
|
|
|
const objectMetadataItemsForNavigationItems = [
|
|
...sortedStandardObjectMetadataItems,
|
|
...sortedCustomObjectMetadataItems,
|
|
];
|
|
|
|
return (
|
|
objectMetadataItems.length > 0 && (
|
|
<NavigationDrawerSection>
|
|
<NavigationDrawerAnimatedCollapseWrapper>
|
|
<NavigationDrawerSectionTitle
|
|
label={sectionTitle}
|
|
onClick={() => toggleNavigationSection()}
|
|
/>
|
|
</NavigationDrawerAnimatedCollapseWrapper>
|
|
{isNavigationSectionOpen &&
|
|
objectMetadataItemsForNavigationItems.map((objectMetadataItem) => (
|
|
<NavigationDrawerItemForObjectMetadataItem
|
|
key={`navigation-drawer-item-${objectMetadataItem.id}`}
|
|
objectMetadataItem={objectMetadataItem}
|
|
/>
|
|
))}
|
|
</NavigationDrawerSection>
|
|
)
|
|
);
|
|
};
|