11'use client'
22
3- import { useMutation , useQuery } from '@apollo/client'
3+ import { useQuery } from '@apollo/client'
44import {
55 faCodeBranch ,
66 faLink ,
@@ -10,19 +10,12 @@ import {
1010 faXmark ,
1111} from '@fortawesome/free-solid-svg-icons'
1212import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
13- import { addToast } from '@heroui/toast '
13+ import { useIssueMutations } from 'hooks/useIssueMutations '
1414import Image from 'next/image'
1515import Link from 'next/link'
1616import { useParams } from 'next/navigation'
17- import { useState } from 'react'
1817import { ErrorDisplay } from 'app/global-error'
19- import {
20- ASSIGN_ISSUE_TO_USER ,
21- CLEAR_TASK_DEADLINE ,
22- GET_MODULE_ISSUE_VIEW ,
23- UNASSIGN_ISSUE_FROM_USER ,
24- SET_TASK_DEADLINE ,
25- } from 'server/queries/issueQueries'
18+ import { GET_MODULE_ISSUE_VIEW } from 'server/queries/issueQueries'
2619import ActionButton from 'components/ActionButton'
2720import AnchorTitle from 'components/AnchorTitle'
2821import LoadingSpinner from 'components/LoadingSpinner'
@@ -74,128 +67,23 @@ const ModuleIssueDetailsPage = () => {
7467 nextFetchPolicy : 'cache-and-network' ,
7568 } )
7669
77- const [ assignIssue , { loading : assigning } ] = useMutation ( ASSIGN_ISSUE_TO_USER , {
78- refetchQueries : [
79- {
80- query : GET_MODULE_ISSUE_VIEW ,
81- variables : { programKey, moduleKey, number : Number ( issueId ) } ,
82- } ,
83- ] ,
84- awaitRefetchQueries : true ,
85- onCompleted : ( ) => {
86- addToast ( {
87- title : 'Issue assigned successfully' ,
88- variant : 'solid' ,
89- color : 'success' ,
90- timeout : 3000 ,
91- shouldShowTimeoutProgress : true ,
92- } )
93- } ,
94- onError : ( error ) => {
95- addToast ( {
96- title : 'Failed to assign issue: ' + error . message ,
97- variant : 'solid' ,
98- color : 'danger' ,
99- timeout : 3000 ,
100- shouldShowTimeoutProgress : true ,
101- } )
102- } ,
103- } )
104- const [ unassignIssue , { loading : unassigning } ] = useMutation ( UNASSIGN_ISSUE_FROM_USER , {
105- refetchQueries : [
106- {
107- query : GET_MODULE_ISSUE_VIEW ,
108- variables : { programKey, moduleKey, number : Number ( issueId ) } ,
109- } ,
110- ] ,
111- awaitRefetchQueries : true ,
112- onCompleted : ( ) => {
113- addToast ( {
114- title : 'Issue unassigned successfully' ,
115- variant : 'solid' ,
116- color : 'success' ,
117- timeout : 3000 ,
118- shouldShowTimeoutProgress : true ,
119- } )
120- } ,
121- onError : ( error ) => {
122- addToast ( {
123- title : 'Failed to unassign issue: ' + error . message ,
124- variant : 'solid' ,
125- color : 'danger' ,
126- timeout : 3000 ,
127- shouldShowTimeoutProgress : true ,
128- } )
129- } ,
130- } )
131-
132- const [ setTaskDeadlineMutation , { loading : settingDeadline } ] = useMutation ( SET_TASK_DEADLINE , {
133- refetchQueries : [
134- {
135- query : GET_MODULE_ISSUE_VIEW ,
136- variables : { programKey, moduleKey, number : Number ( issueId ) } ,
137- } ,
138- ] ,
139- awaitRefetchQueries : true ,
140- onCompleted : ( ) => {
141- addToast ( {
142- title : 'Deadline updated' ,
143- variant : 'solid' ,
144- color : 'success' ,
145- timeout : 2500 ,
146- shouldShowTimeoutProgress : true ,
147- } )
148- setIsEditingDeadline ( false )
149- } ,
150- onError : ( err ) => {
151- addToast ( {
152- title : 'Failed to update deadline: ' + err . message ,
153- variant : 'solid' ,
154- color : 'danger' ,
155- timeout : 3500 ,
156- shouldShowTimeoutProgress : true ,
157- } )
158- } ,
159- } )
160-
161- const [ clearTaskDeadlineMutation , { loading : clearingDeadline } ] = useMutation (
162- CLEAR_TASK_DEADLINE ,
163- {
164- refetchQueries : [
165- {
166- query : GET_MODULE_ISSUE_VIEW ,
167- variables : { programKey, moduleKey, number : Number ( issueId ) } ,
168- } ,
169- ] ,
170- awaitRefetchQueries : true ,
171- onCompleted : ( ) => {
172- addToast ( {
173- title : 'Deadline cleared' ,
174- variant : 'solid' ,
175- color : 'success' ,
176- timeout : 2500 ,
177- shouldShowTimeoutProgress : true ,
178- } )
179- setIsEditingDeadline ( false )
180- } ,
181- onError : ( err ) => {
182- addToast ( {
183- title : 'Failed to clear deadline: ' + err . message ,
184- variant : 'solid' ,
185- color : 'danger' ,
186- timeout : 3500 ,
187- shouldShowTimeoutProgress : true ,
188- } )
189- } ,
190- }
191- )
70+ const {
71+ assignIssue,
72+ unassignIssue,
73+ setTaskDeadlineMutation,
74+ clearTaskDeadlineMutation,
75+ assigning,
76+ unassigning,
77+ settingDeadline,
78+ clearingDeadline,
79+ isEditingDeadline,
80+ setIsEditingDeadline,
81+ deadlineInput,
82+ setDeadlineInput,
83+ } = useIssueMutations ( { programKey, moduleKey, issueId } )
19284
19385 const issue = data ?. getModule ?. issueByNumber
19486 const taskDeadline = data ?. getModule ?. taskDeadline as string | undefined
195- const [ isEditingDeadline , setIsEditingDeadline ] = useState ( false )
196- const [ deadlineInput , setDeadlineInput ] = useState < string > (
197- taskDeadline ? new Date ( taskDeadline ) . toISOString ( ) . slice ( 0 , 10 ) : ''
198- )
19987
20088 const getButtonClassName = ( disabled : boolean ) =>
20189 `inline-flex items-center justify-center rounded-md border p-1.5 text-sm ${
0 commit comments