diff --git a/packages/frontend/src/components/issue-modal.tsx b/packages/frontend/src/components/issue-modal.tsx new file mode 100644 index 0000000..d829768 --- /dev/null +++ b/packages/frontend/src/components/issue-modal.tsx @@ -0,0 +1,55 @@ +import type { IssueResponse } from "@sprint/shared"; +import { type ReactNode, useMemo } from "react"; +import { IssueDetails } from "@/components/issue-details"; +import { Dialog, DialogContent, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { + useOrganisationMembers, + useSelectedOrganisation, + useSelectedProject, + useSprints, +} from "@/lib/query/hooks"; +import { issueID } from "@/lib/utils"; + +export function IssueModal({ + issueData, + open, + onOpenChange, + trigger, +}: { + issueData: IssueResponse | null; + open: boolean; + onOpenChange: (open: boolean) => void; + trigger: ReactNode; +}) { + const selectedOrganisation = useSelectedOrganisation(); + const selectedProject = useSelectedProject(); + const { data: sprints = [] } = useSprints(selectedProject?.Project.id); + const { data: membersData = [] } = useOrganisationMembers(selectedOrganisation?.Organisation.id); + + const members = useMemo(() => membersData.map((member) => member.User), [membersData]); + const statuses = selectedOrganisation?.Organisation.statuses ?? {}; + + if (!issueData || !selectedProject || !selectedOrganisation) { + return null; + } + + return ( + + {trigger} + + + {issueID(selectedProject.Project.key, issueData.Issue.number)} + + onOpenChange(false)} + onDelete={() => onOpenChange(false)} + /> + + + ); +}