- Fix fragments - Add id to create inputs - Refresh core views - Fix kanban loading - Fix core views creation from current view --------- Co-authored-by: Charles Bochet <charles@twenty.com>
98 lines
3.7 KiB
TypeScript
98 lines
3.7 KiB
TypeScript
import { NavigationDrawerItemForObjectMetadataItem } from '@/object-metadata/components/NavigationDrawerItemForObjectMetadataItem';
|
|
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject';
|
|
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
|
|
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',
|
|
];
|
|
|
|
type NavigationDrawerSectionForObjectMetadataItemsProps = {
|
|
sectionTitle: string;
|
|
isRemote: boolean;
|
|
objectMetadataItems: ObjectMetadataItem[];
|
|
};
|
|
|
|
export const NavigationDrawerSectionForObjectMetadataItems = ({
|
|
sectionTitle,
|
|
isRemote,
|
|
objectMetadataItems,
|
|
}: NavigationDrawerSectionForObjectMetadataItemsProps) => {
|
|
const { toggleNavigationSection, isNavigationSectionOpenState } =
|
|
useNavigationSection('Objects' + (isRemote ? 'Remote' : 'Workspace'));
|
|
const isNavigationSectionOpen = useRecoilValue(isNavigationSectionOpenState);
|
|
|
|
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
|
|
|
|
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,
|
|
];
|
|
|
|
const objectMetadataItemsForNavigationItemsWithReadPermission =
|
|
objectMetadataItemsForNavigationItems.filter(
|
|
(objectMetadataItem) =>
|
|
getObjectPermissionsForObject(
|
|
objectPermissionsByObjectMetadataId,
|
|
objectMetadataItem.id,
|
|
).canReadObjectRecords,
|
|
);
|
|
|
|
return (
|
|
objectMetadataItems.length > 0 && (
|
|
<NavigationDrawerSection>
|
|
<NavigationDrawerAnimatedCollapseWrapper>
|
|
<NavigationDrawerSectionTitle
|
|
label={sectionTitle}
|
|
onClick={() => toggleNavigationSection()}
|
|
/>
|
|
</NavigationDrawerAnimatedCollapseWrapper>
|
|
{isNavigationSectionOpen &&
|
|
objectMetadataItemsForNavigationItemsWithReadPermission.map(
|
|
(objectMetadataItem) => (
|
|
<NavigationDrawerItemForObjectMetadataItem
|
|
key={`navigation-drawer-item-${objectMetadataItem.id}`}
|
|
objectMetadataItem={objectMetadataItem}
|
|
/>
|
|
),
|
|
)}
|
|
</NavigationDrawerSection>
|
|
)
|
|
);
|
|
};
|