-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
UserOverlaysGroup.component.tsx 2.45 KiB
import {
Accordion,
AccordionItem,
AccordionItemButton,
AccordionItemHeading,
AccordionItemPanel,
} from '@/shared/Accordion';
import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';
import { MapOverlay } from '@/types/models';
import React from 'react';
import { ZERO } from '@/constants/common';
import { UserOverlayListItem } from './UserOverlayListItem';
import { useUserOverlays } from './hooks/useUserOverlays';
type OverlayGroupProps = {
groupId: number | null;
groupName: string;
overlays: MapOverlay[];
};
export const UserOverlaysGroup = ({
overlays,
groupName,
groupId,
}: OverlayGroupProps): React.ReactNode => {
const { moveUserOverlayListItem, updateUserOverlaysOrder, isPending, userOverlaysList } =
useUserOverlays(overlays, groupId);
const nullOverlay: MapOverlay = {
id: groupId ? -groupId : ZERO,
group: groupId,
publicOverlay: false,
creator: '',
type: '',
description: '',
name: '',
genomeType: '',
genomeVersion: '',
order: 0,
};
return (
<DndProvider backend={HTML5Backend}>
<div className="mt-2.5">
<Accordion allowZeroExpanded>
<AccordionItem className="border-b-0">
<AccordionItemHeading>
<AccordionItemButton className="px-6 text-sm font-semibold">
{groupName}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{isPending ? (
<span className="py-4 pl-10 pr-5">Loading...</span>
) : (
<ul>
{userOverlaysList?.map((userOverlay, index) => (
<UserOverlayListItem
moveUserOverlay={moveUserOverlayListItem}
key={userOverlay.id}
index={index}
userOverlay={userOverlay}
updateUserOverlaysOrder={updateUserOverlaysOrder}
/>
))}
<UserOverlayListItem
moveUserOverlay={moveUserOverlayListItem}
key={nullOverlay.id}
index={0}
userOverlay={nullOverlay}
updateUserOverlaysOrder={updateUserOverlaysOrder}
/>
</ul>
)}
</AccordionItemPanel>
</AccordionItem>
</Accordion>
</div>
</DndProvider>
);
};