@@ -5,9 +5,6 @@ import { useRouter } from "next/router";
55
66import  useSWR ,  {  mutate  }  from  "swr" ; 
77
8- // react-datepicker 
9- import  DatePicker  from  "react-datepicker" ; 
10- import  "react-datepicker/dist/react-datepicker.css" ; 
118// services 
129import  issuesService  from  "services/issues.service" ; 
1310import  workspaceService  from  "services/workspace.service" ; 
@@ -18,13 +15,19 @@ import { Listbox, Transition } from "@headlessui/react";
1815import  {  CustomMenu ,  CustomSelect ,  AssigneesList ,  Avatar ,  CustomDatePicker  }  from  "components/ui" ; 
1916// components 
2017import  ConfirmIssueDeletion  from  "components/project/issues/confirm-issue-deletion" ; 
21- // icons 
22- import  {  CalendarDaysIcon  }  from  "@heroicons/react/24/outline" ; 
2318// helpers 
2419import  {  renderShortNumericDateFormat ,  findHowManyDaysLeft  }  from  "helpers/date-time.helper" ; 
2520import  {  addSpaceIfCamelCase  }  from  "helpers/string.helper" ; 
2621// types 
27- import  {  IIssue ,  IWorkspaceMember ,  Properties ,  UserAuth  }  from  "types" ; 
22+ import  { 
23+   CycleIssueResponse , 
24+   IIssue , 
25+   IssueResponse , 
26+   IWorkspaceMember , 
27+   ModuleIssueResponse , 
28+   Properties , 
29+   UserAuth , 
30+ }  from  "types" ; 
2831// fetch-keys 
2932import  { 
3033  CYCLE_ISSUES , 
@@ -76,6 +79,60 @@ const SingleListIssue: React.FC<Props> = ({
7679  const  partialUpdateIssue  =  ( formData : Partial < IIssue > )  =>  { 
7780    if  ( ! workspaceSlug  ||  ! projectId )  return ; 
7881
82+     if  ( typeId )  { 
83+       mutate < CycleIssueResponse [ ] > ( 
84+         CYCLE_ISSUES ( typeId  ??  "" ) , 
85+         ( prevData )  =>  { 
86+           const  updatedIssues  =  ( prevData  ??  [ ] ) . map ( ( p )  =>  { 
87+             if  ( p . issue_detail . id  ===  issue . id )  { 
88+               return  { 
89+                 ...p , 
90+                 issue_detail : { 
91+                   ...p . issue_detail , 
92+                   ...formData , 
93+                 } , 
94+               } ; 
95+             } 
96+             return  p ; 
97+           } ) ; 
98+           return  [ ...updatedIssues ] ; 
99+         } , 
100+         false 
101+       ) ; 
102+ 
103+       mutate < ModuleIssueResponse [ ] > ( 
104+         MODULE_ISSUES ( typeId  ??  "" ) , 
105+         ( prevData )  =>  { 
106+           const  updatedIssues  =  ( prevData  ??  [ ] ) . map ( ( p )  =>  { 
107+             if  ( p . issue_detail . id  ===  issue . id )  { 
108+               return  { 
109+                 ...p , 
110+                 issue_detail : { 
111+                   ...p . issue_detail , 
112+                   ...formData , 
113+                 } , 
114+               } ; 
115+             } 
116+             return  p ; 
117+           } ) ; 
118+           return  [ ...updatedIssues ] ; 
119+         } , 
120+         false 
121+       ) ; 
122+     } 
123+ 
124+     mutate < IssueResponse > ( 
125+       PROJECT_ISSUES_LIST ( workspaceSlug  as  string ,  projectId  as  string ) , 
126+       ( prevData )  =>  ( { 
127+         ...( prevData  as  IssueResponse ) , 
128+         results : ( prevData ?. results  ??  [ ] ) . map ( ( p )  =>  { 
129+           if  ( p . id  ===  issue . id )  return  {  ...p ,  ...formData  } ; 
130+           return  p ; 
131+         } ) , 
132+       } ) , 
133+       false 
134+     ) ; 
135+ 
79136    issuesService 
80137      . patchIssue ( workspaceSlug  as  string ,  projectId  as  string ,  issue . id ,  formData ) 
81138      . then ( ( res )  =>  { 
@@ -255,44 +312,24 @@ const SingleListIssue: React.FC<Props> = ({
255312              < CustomDatePicker 
256313                placeholder = "N/A" 
257314                value = { issue ?. target_date } 
258-                 onChange = { ( val :  Date )  =>   { 
315+                 onChange = { ( val )  => 
259316                  partialUpdateIssue ( { 
260-                     target_date : val 
261-                       ? `${ val . getFullYear ( ) } ${ val . getMonth ( )  +  1 } ${ val . getDate ( ) }  
262-                       : null , 
263-                   } ) ; 
264-                 } } 
317+                     target_date : val , 
318+                   } ) 
319+                 } 
265320                className = { issue ?. target_date  ? "w-[6.5rem]"  : "w-[3rem] text-center" } 
266321              /> 
267-               { /* <DatePicker 
268-                 placeholderText="N/A" 
269-                 value={ 
270-                   issue?.target_date ? `${renderShortNumericDateFormat(issue.target_date)}` : "N/A" 
271-                 } 
272-                 selected={issue?.target_date ? new Date(issue.target_date) : null} 
273-                 onChange={(val: Date) => { 
274-                   partialUpdateIssue({ 
275-                     target_date: val 
276-                       ? `${val.getFullYear()}-${val.getMonth() + 1}-${val.getDate()}` 
277-                       : null, 
278-                   }); 
279-                 }} 
280-                 dateFormat="dd-MM-yyyy" 
281-                 className={`cursor-pointer rounded-md border px-2 py-[3px] text-xs shadow-sm duration-300 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 ${ 
282-                   issue?.target_date ? "w-[4.5rem]" : "w-[3rem] text-center" 
283-                 }`} 
284-                 isClearable 
285-               /> */ } 
286322              < div  className = "absolute bottom-full right-0 z-10 mb-2 hidden whitespace-nowrap rounded-md bg-white p-2 shadow-md group-hover:block" > 
287323                < h5  className = "mb-1 font-medium text-gray-900" > Due date</ h5 > 
288324                < div > { renderShortNumericDateFormat ( issue . target_date  ??  "" ) } </ div > 
289325                < div > 
290-                   { issue . target_date   && 
291-                     ( issue . target_date  <  new  Date ( ) . toISOString ( ) 
326+                   { issue . target_date 
327+                     ?  issue . target_date  <  new  Date ( ) . toISOString ( ) 
292328                      ? `Due date has passed by ${ findHowManyDaysLeft ( issue . target_date ) }  
293329                      : findHowManyDaysLeft ( issue . target_date )  <=  3 
294330                      ? `Due date is in ${ findHowManyDaysLeft ( issue . target_date ) }  
295-                       : "Due date" ) } 
331+                       : "Due date" 
332+                     : "N/A" } 
296333                </ div > 
297334              </ div > 
298335            </ div > 
0 commit comments