Skip to content

Commit

Permalink
Add status select in epic detail view (#83)
Browse files Browse the repository at this point in the history
Co-authored-by: Julian Rupprecht <rupprecht.julian@web.de>
  • Loading branch information
maximilianruesch and JulianRupprecht authored Dec 20, 2023
1 parent 280e759 commit 58d6bbc
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 4 deletions.
2 changes: 2 additions & 0 deletions electron/providers/jira-cloud-provider/JiraCloudProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -868,6 +868,8 @@ export class JiraCloudProvider implements IProvider {
summary: element.fields.summary,
epic: element.fields.epic,
labels: element.fields.labels,
status: element.fields.status.name,
type: element.fields.issuetype.name,
description: element.fields.description.content[0]?.content[0]?.text,
assignee: {
displayName: element.fields.assignee?.displayName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,9 @@ export class JiraServerProvider implements IProvider {
issueKey: element.key,
summary: element.fields.summary,
labels: element.fields.labels,
projectId: element.fields.project.id,
status: element.fields.status.name,
type: element.fields.issuetype.name,
created: element.fields.created,
updated: element.fields.updated,
description: element.fields.description.content,
Expand All @@ -603,7 +606,6 @@ export class JiraServerProvider implements IProvider {
updated: commentElement.updated,
})),
},
projectId: element.fields.project.id,
sprint: element.fields.sprint,
attachments: element.fields.attachment,
}))
Expand Down
74 changes: 71 additions & 3 deletions src/components/EpicDetailView/EpicDetailView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ import {
Stack,
Text,
Title,
Menu,
Button,
createStyles,
} from "@mantine/core"
import { IconCaretDown } from "@tabler/icons"
import { Issue, User } from "types"
import { useQuery, useQueryClient } from "@tanstack/react-query"
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import { useEffect, useState } from "react"
import { AssigneeMenu } from "../DetailView/Components/AssigneeMenu"
import { Description } from "../DetailView/Components/Description"
Expand All @@ -34,6 +38,7 @@ import {
} from "./helpers/storyPointsHelper"
import { StoryPointsHoverCard } from "./Components/StoryPointsHoverCard";
import { CommentSection } from "../DetailView/Components/CommentSection";
import { getIssueTypes, setStatus } from "../CreateIssue/queryFunctions";

export function EpicDetailView({
issueKey,
Expand All @@ -44,7 +49,10 @@ export function EpicDetailView({
created,
updated,
comment,
status,
closeModal,
projectId,
type,
}: {
issueKey: string
summary: string
Expand All @@ -64,10 +72,39 @@ export function EpicDetailView({
}
]
}
status: string
projectId: string
type: string
closeModal: () => void
}) {
const queryClient = useQueryClient()
const reloadEpics = () => queryClient.invalidateQueries({ queryKey: ["epics"] })
const reloadEpics = () => {
queryClient.invalidateQueries({ queryKey: ["issues"] })
queryClient.invalidateQueries({ queryKey: ["epics"] })
};

const [defaultStatus, setDefaultStatus] = useState(status)
const statusMutation = useMutation({
mutationFn: (targetStatus: string) => setStatus(issueKey, targetStatus),
onSuccess: reloadEpics,
})

const { data: issueTypes } = useQuery({
queryKey: ["issueTypes", projectId],
queryFn: () => getIssueTypes(projectId),
enabled: !!projectId,
})

const useStyles = createStyles(
(theme, { isOpened }: { isOpened: boolean }) => ({
icon: {
transition: "transform 150ms ease",
transform: isOpened ? "rotate(180deg)" : "rotate(0deg)",
},
})
)
const [opened, setOpened] = useState(false)
const { classes } = useStyles({ isOpened: opened })

const dateFormat = new Intl.DateTimeFormat("en-GB", {
dateStyle: "full",
Expand Down Expand Up @@ -222,7 +259,38 @@ export function EpicDetailView({
sx={{ minWidth: "260px", flex: 10 }}
>
<Box>
<Group position="right" mb="sm">
<Group position="apart" mb="sm">
<Menu
shadow="md"
onOpen={() => setOpened(true)}
onClose={() => setOpened(false)}
>
<Menu.Target>
<Button
rightIcon={<IconCaretDown className={classes.icon} />}
>
{defaultStatus}
</Button>
</Menu.Target>

<Menu.Dropdown>
<Menu.Label>Status</Menu.Label>
{issueTypes &&
issueTypes
.find((issueType) => issueType.name === type)
?.statuses?.map((issueStatus) => (
<Menu.Item
key={issueStatus.id}
onClick={() => {
statusMutation.mutate(issueStatus.name)
setDefaultStatus(issueStatus.name)
}}
>
{issueStatus.name}
</Menu.Item>
))}
</Menu.Dropdown>
</Menu>
<DeleteIssue issueKey={issueKey} closeModal={closeModal} />
</Group>
<Accordion variant="contained" defaultValue="Details" mb={20}>
Expand Down
3 changes: 3 additions & 0 deletions src/components/EpicView/EpicCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ export function EpicCard ({
issueKey={issueKey}
summary={summary}
labels={labels}
status={status}
type={type}
projectId={projectId}
assignee={assignee}
closeModal={() => setOpened(false)}
{...props}
Expand Down

0 comments on commit 58d6bbc

Please sign in to comment.