File tree Expand file tree Collapse file tree 4 files changed +76
-2
lines changed Expand file tree Collapse file tree 4 files changed +76
-2
lines changed Original file line number Diff line number Diff line change 2
2
import { Cog6ToothIcon } from ' @heroicons/vue/24/outline' ;
3
3
import { NormalizedModel } from ' ~~/types/models' ;
4
4
import useModel from ' ~~/stores/useModel' ;
5
+ import ModalConfirm from ' ~~/components/modal/confirm.vue' ;
5
6
6
7
const model = useModel ();
7
8
16
17
const handleSelectModel = (md : NormalizedModel ) => {
17
18
model .setTarget (md );
18
19
};
20
+
21
+ const deleteModelModal = useModal (ModalConfirm , {
22
+ id: ' confirm-delete-model' ,
23
+ onConfirm : async (closeModal ) => {
24
+ const deleteId = model .target ?.id ;
25
+
26
+ await model .delete (deleteId );
27
+
28
+ closeModal ();
29
+
30
+ model .unsetTarget ();
31
+ },
32
+ });
19
33
</script >
20
34
21
35
<template >
22
36
<section class =" flex gap-x-2 w-full" >
23
37
<slot />
24
38
<Dropdown
25
- :disabled =" !model.target"
39
+ :disabled =" model.isLoading || !model.target"
26
40
avatar
27
41
class =" rounded-lg"
28
42
color =" ghost"
33
47
</template >
34
48
<template #options >
35
49
<DropdownOption >Edit</DropdownOption >
36
- <DropdownOption >Delete</DropdownOption >
50
+ <DropdownOption @click =" deleteModelModal.open()" >
51
+ Delete
52
+ </DropdownOption >
37
53
</template >
38
54
</Dropdown >
39
55
<article
55
71
{{ md.name }}
56
72
</a >
57
73
</div >
74
+ <ClientOnly >
75
+ <component
76
+ :is =" deleteModelModal.component"
77
+ content =" Are you sure you want to delete this model?"
78
+ />
79
+ </ClientOnly >
58
80
</section >
59
81
<div v-if =" model.target" >
60
82
<ModelTable
Original file line number Diff line number Diff line change
1
+ import { ModelServices } from '~~/server/services' ;
2
+ import extractAppKey from '~~/server/lib/extractAppKey' ;
3
+
4
+ type QueryParams = {
5
+ apiKey : string ;
6
+ } ;
7
+
8
+ export default defineEventHandler ( async ( event ) => {
9
+ const query = getQuery ( event ) as QueryParams ;
10
+ const { appId } = await extractAppKey ( event , query . apiKey ) ;
11
+ const modelId = event . context . params ?. id ?? '' ;
12
+
13
+ const model = await new ModelServices ( event ) . delete ( {
14
+ id : modelId ,
15
+ appId,
16
+ } ) ;
17
+
18
+ return model ;
19
+ } ) ;
Original file line number Diff line number Diff line change @@ -22,6 +22,24 @@ export default class ModelServices extends SupabaseService {
22
22
return models . data [ 0 ] ;
23
23
}
24
24
25
+ async delete ( params : { id : string ; appId : string } ) {
26
+ const model = await this . client
27
+ . from ( 'models' )
28
+ . update ( {
29
+ deleted_at : new Date ( ) . toISOString ( ) ,
30
+ } )
31
+ . eq ( 'id' , params . id )
32
+ . eq ( 'app_id' , params . appId )
33
+ . eq ( 'user_id' , this . user . id )
34
+ . select ( '*' ) ;
35
+
36
+ if ( model . error !== null ) {
37
+ throw ErrorResponse . supabase ( model . error ) ;
38
+ }
39
+
40
+ return model . data [ 0 ] ;
41
+ }
42
+
25
43
async find ( id : string ) {
26
44
const models = await this . client
27
45
. from ( 'models' )
Original file line number Diff line number Diff line change @@ -58,6 +58,20 @@ export default defineStore('models', () => {
58
58
} ) ;
59
59
} ;
60
60
61
+ const del = async ( id : string ) : Promise < void > => {
62
+ await $fetch ( `/models/${ id } ` , {
63
+ method : 'DELETE' ,
64
+ query : { apiKey } ,
65
+ async onResponse ( { response } ) {
66
+ if ( response . status === 200 ) {
67
+ toast . success ( 'Deleted the model!' ) ;
68
+
69
+ await refresh ( ) ;
70
+ }
71
+ } ,
72
+ } ) ;
73
+ } ;
74
+
61
75
return {
62
76
/** PROPERTIES */
63
77
isDisabled,
@@ -68,6 +82,7 @@ export default defineStore('models', () => {
68
82
69
83
/** METHODS */
70
84
create,
85
+ delete : del ,
71
86
setTarget,
72
87
unsetTarget,
73
88
} ;
You can’t perform that action at this time.
0 commit comments