1
1
import { EditLaboratoryContext } from "@/context/laboratories/EditLaboratoryContext" ;
2
2
import { EditLaboratoryActionType } from "@/hooks/laboratories/editLaboratoryTypes" ;
3
- import { deleteMarkdownBlockService } from "@/services/blocks/delete-markdown-block.service" ;
4
3
import { swapBlocksIndexService } from "@/services/blocks/swap-blocks-index.service" ;
5
4
import { updateMarkdownBlockContentService } from "@/services/blocks/update-markdown-block-content.service" ;
6
5
import {
9
8
} from "@/types/entities/laboratory-entities" ;
10
9
import { useMutation , useQueryClient } from "@tanstack/react-query" ;
11
10
import { ArrowDown , ArrowUp , MoreVertical , Save , Trash2 } from "lucide-react" ;
12
- import { useContext } from "react" ;
11
+ import { useContext , useState } from "react" ;
13
12
import { toast } from "sonner" ;
14
13
15
14
import {
@@ -20,6 +19,7 @@ import {
20
19
DropdownMenuSeparator ,
21
20
DropdownMenuTrigger
22
21
} from "../../../../components/ui/dropdown-menu" ;
22
+ import { DeleteBlockDialog } from "../../dialogs/DeleteBlockDialog" ;
23
23
24
24
interface MarkdownBlockDropDown {
25
25
blockUUID : string ;
@@ -40,6 +40,9 @@ export const MarkdownBlockDropDown = ({
40
40
( b ) => b . uuid === blockUUID
41
41
) as MarkdownBlock ;
42
42
43
+ // Delete block dialog state
44
+ const [ isDeleteBlockDialogOpen , setIsDeleteBlockDialogOpen ] = useState ( false ) ;
45
+
43
46
// Update markdown block mutation
44
47
const queryClient = useQueryClient ( ) ;
45
48
const { mutate : updateMarkdownBlockMutation } = useMutation ( {
@@ -71,39 +74,8 @@ export const MarkdownBlockDropDown = ({
71
74
}
72
75
} ) ;
73
76
74
- // Delete markdown block mutation
75
- const { mutate : deleteMarkdownBlockMutation } = useMutation ( {
76
- mutationFn : deleteMarkdownBlockService ,
77
- onError : ( error ) => {
78
- toast . error ( error . message ) ;
79
- } ,
80
- onSuccess : ( ) => {
81
- // Update global state
82
- laboratoryStateDispatcher ( {
83
- type : EditLaboratoryActionType . DELETE_BLOCK ,
84
- payload : {
85
- uuid : blockUUID
86
- }
87
- } ) ;
88
-
89
- // Show a success message
90
- toast . success ( "The markdown block has been deleted successfully" ) ;
91
-
92
- // Update the laboratory query
93
- queryClient . setQueryData (
94
- [ "laboratory" , laboratory ! . uuid ] ,
95
- ( oldData : Laboratory ) => {
96
- return {
97
- ...oldData ,
98
- blocks : oldData . blocks . filter ( ( b ) => b . uuid !== blockUUID )
99
- } ;
100
- }
101
- ) ;
102
- }
103
- } ) ;
104
-
105
77
// Move markdown block up mutation
106
- const { mutate : moteTestBlockUpMutation } = useMutation ( {
78
+ const { mutate : moveTestBlockUpMutation } = useMutation ( {
107
79
mutationFn : swapBlocksIndexService ,
108
80
onError : ( error ) => {
109
81
toast . error ( error . message ) ;
@@ -142,7 +114,7 @@ export const MarkdownBlockDropDown = ({
142
114
} ) ;
143
115
144
116
// Move markdown block down mutation
145
- const { mutate : moteTestBlockDownMutation } = useMutation ( {
117
+ const { mutate : moveTestBlockDownMutation } = useMutation ( {
146
118
mutationFn : swapBlocksIndexService ,
147
119
onError : ( error ) => {
148
120
toast . error ( error . message ) ;
@@ -181,60 +153,66 @@ export const MarkdownBlockDropDown = ({
181
153
} ) ;
182
154
183
155
return (
184
- < DropdownMenu >
185
- < DropdownMenuTrigger asChild >
186
- < button
187
- className = "h-min px-2"
188
- aria-label = { `Toggle options for block number ${ blockIndex + 1 } ` }
189
- >
190
- < MoreVertical />
191
- </ button >
192
- </ DropdownMenuTrigger >
193
- < DropdownMenuContent >
194
- < DropdownMenuLabel > Block options</ DropdownMenuLabel >
195
- < DropdownMenuSeparator />
196
- < DropdownMenuItem
197
- disabled = { blockIndex === 0 }
198
- onClick = { ( ) =>
199
- moteTestBlockUpMutation ( {
200
- first_block_uuid : laboratory ! . blocks [ blockIndex - 1 ] . uuid ,
201
- second_block_uuid : blockUUID
202
- } )
203
- }
204
- >
205
- < ArrowUp className = "mr-2 aspect-square h-5" />
206
- Move up
207
- </ DropdownMenuItem >
208
- < DropdownMenuItem
209
- disabled = { blockIndex === laboratory ! . blocks . length - 1 }
210
- onClick = { ( ) =>
211
- moteTestBlockDownMutation ( {
212
- first_block_uuid : blockUUID ,
213
- second_block_uuid : laboratory ! . blocks [ blockIndex + 1 ] . uuid
214
- } )
215
- }
216
- >
217
- < ArrowDown className = "mr-2 aspect-square h-5" />
218
- Move down
219
- </ DropdownMenuItem >
220
- < DropdownMenuItem
221
- onClick = { ( ) =>
222
- updateMarkdownBlockMutation ( {
223
- markdownBlockUUID : blockUUID ,
224
- content : block . content
225
- } )
226
- }
227
- >
228
- < Save className = "mr-2 aspect-square h-5" />
229
- Save changes
230
- </ DropdownMenuItem >
231
- < DropdownMenuItem
232
- onClick = { ( ) => deleteMarkdownBlockMutation ( blockUUID ) }
233
- >
234
- < Trash2 className = "mr-2 aspect-square h-5" />
235
- Delete block
236
- </ DropdownMenuItem >
237
- </ DropdownMenuContent >
238
- </ DropdownMenu >
156
+ < >
157
+ < DropdownMenu >
158
+ < DropdownMenuTrigger asChild >
159
+ < button
160
+ className = "h-min px-2"
161
+ aria-label = { `Toggle options for block number ${ blockIndex + 1 } ` }
162
+ >
163
+ < MoreVertical />
164
+ </ button >
165
+ </ DropdownMenuTrigger >
166
+ < DropdownMenuContent >
167
+ < DropdownMenuLabel > Block options</ DropdownMenuLabel >
168
+ < DropdownMenuSeparator />
169
+ < DropdownMenuItem
170
+ disabled = { blockIndex === 0 }
171
+ onClick = { ( ) =>
172
+ moveTestBlockUpMutation ( {
173
+ first_block_uuid : laboratory ! . blocks [ blockIndex - 1 ] . uuid ,
174
+ second_block_uuid : blockUUID
175
+ } )
176
+ }
177
+ >
178
+ < ArrowUp className = "mr-2 aspect-square h-5" />
179
+ Move up
180
+ </ DropdownMenuItem >
181
+ < DropdownMenuItem
182
+ disabled = { blockIndex === laboratory ! . blocks . length - 1 }
183
+ onClick = { ( ) =>
184
+ moveTestBlockDownMutation ( {
185
+ first_block_uuid : blockUUID ,
186
+ second_block_uuid : laboratory ! . blocks [ blockIndex + 1 ] . uuid
187
+ } )
188
+ }
189
+ >
190
+ < ArrowDown className = "mr-2 aspect-square h-5" />
191
+ Move down
192
+ </ DropdownMenuItem >
193
+ < DropdownMenuItem
194
+ onClick = { ( ) =>
195
+ updateMarkdownBlockMutation ( {
196
+ markdownBlockUUID : blockUUID ,
197
+ content : block . content
198
+ } )
199
+ }
200
+ >
201
+ < Save className = "mr-2 aspect-square h-5" />
202
+ Save changes
203
+ </ DropdownMenuItem >
204
+ < DropdownMenuItem onClick = { ( ) => setIsDeleteBlockDialogOpen ( true ) } >
205
+ < Trash2 className = "mr-2 aspect-square h-5" />
206
+ Delete block
207
+ </ DropdownMenuItem >
208
+ </ DropdownMenuContent >
209
+ </ DropdownMenu >
210
+ < DeleteBlockDialog
211
+ blockType = "markdown"
212
+ blockUUID = { blockUUID }
213
+ isDialogOpen = { isDeleteBlockDialogOpen }
214
+ setIsDialogOpen = { setIsDeleteBlockDialogOpen }
215
+ />
216
+ </ >
239
217
) ;
240
218
} ;
0 commit comments