1
1
import { Button } from "@/components/ui/button" ;
2
2
import { Input } from "@/components/ui/input" ;
3
+ import { useStudioContext } from "@/context/driver-provider" ;
3
4
import { useSchema } from "@/context/schema-provider" ;
5
+ import { DatabaseSchemaChange } from "@/drivers/base-driver" ;
4
6
import { LucideAlertCircle , LucideLoader , LucideSave } from "lucide-react" ;
5
7
import { useCallback , useMemo , useState } from "react" ;
6
- import { useDatabaseDriver } from "@/context/driver-provider" ;
7
- import { DatabaseSchemaChange } from "@/drivers/base-driver" ;
8
8
9
- export function SchemaDatabaseCreateForm ( { schemaName, onClose } : { schemaName ?: string ; onClose : ( ) => void ; } ) {
10
- const { databaseDriver } = useDatabaseDriver ( ) ;
9
+ export function SchemaDatabaseCreateForm ( {
10
+ schemaName,
11
+ onClose,
12
+ } : {
13
+ schemaName ?: string ;
14
+ onClose : ( ) => void ;
15
+ } ) {
16
+ const { databaseDriver } = useStudioContext ( ) ;
11
17
const { schema, refresh : refreshSchema } = useSchema ( ) ;
12
18
const [ isExecuting , setIsExecuting ] = useState ( false ) ;
13
19
const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
14
20
const [ value , setValue ] = useState < DatabaseSchemaChange > ( {
15
21
name : {
16
- new : '' ,
17
- old : ''
22
+ new : "" ,
23
+ old : "" ,
18
24
} ,
19
- createScript : '' ,
20
- collate : ''
25
+ createScript : "" ,
26
+ collate : "" ,
21
27
} ) ;
22
28
23
29
const previewScript = useMemo ( ( ) => {
@@ -27,68 +33,76 @@ export function SchemaDatabaseCreateForm({ schemaName, onClose }: { schemaName?:
27
33
const onSave = useCallback ( ( ) => {
28
34
{
29
35
setIsExecuting ( true ) ;
30
- databaseDriver . transaction ( [ previewScript ] ) . then ( ( ) => {
31
- refreshSchema ( ) ;
32
- onClose ( ) ;
33
- } ) . catch ( ( err ) => setErrorMessage ( ( err as Error ) . message ) ) . finally ( ( ) => {
34
- setIsExecuting ( false ) ;
35
- } )
36
+ databaseDriver
37
+ . transaction ( [ previewScript ] )
38
+ . then ( ( ) => {
39
+ refreshSchema ( ) ;
40
+ onClose ( ) ;
41
+ } )
42
+ . catch ( ( err ) => setErrorMessage ( ( err as Error ) . message ) )
43
+ . finally ( ( ) => {
44
+ setIsExecuting ( false ) ;
45
+ } ) ;
36
46
}
37
- } , [ databaseDriver , onClose , previewScript , refreshSchema ] )
47
+ } , [ databaseDriver , onClose , previewScript , refreshSchema ] ) ;
38
48
39
- const schemaNames = Object . keys ( schema ) . filter ( s => s !== schemaName ) . map ( s => s ) ;
40
- const schemaNameExists = schemaNames . includes ( value . name . new || '' ) ;
49
+ const schemaNames = Object . keys ( schema )
50
+ . filter ( ( s ) => s !== schemaName )
51
+ . map ( ( s ) => s ) ;
52
+ const schemaNameExists = schemaNames . includes ( value . name . new || "" ) ;
41
53
42
54
return (
43
- < div className = "flex h-full flex-col overflow-hidden relative " >
55
+ < div className = "relative flex h-full flex-col overflow-hidden" >
44
56
{ errorMessage && (
45
- < div className = "text-sm text-red-500 font-mono flex gap-4 justify-end items-end " >
46
- < LucideAlertCircle className = "w -12 h -12" />
57
+ < div className = "flex items-end justify-end gap-4 font-mono text-sm text-red-500 " >
58
+ < LucideAlertCircle className = "h -12 w -12" />
47
59
< p > { errorMessage } </ p >
48
60
</ div >
49
61
) }
50
- < div className = "flex gap-2 shrink-0 grow-0 py-4 px-1 border-neutral-200 dark:border-neutral-800" >
62
+ < div className = "flex shrink-0 grow-0 gap-2 border-neutral-200 px-1 py-4 dark:border-neutral-800" >
51
63
< div className = "w-full" >
52
- < div className = "text-xs font-medium mb-1 " > Schema Name</ div >
64
+ < div className = "mb-1 text-xs font-medium" > Schema Name</ div >
53
65
< Input
54
66
placeholder = "Schema Name"
55
- value = { value . name . new || value . name . old || '' }
67
+ value = { value . name . new || value . name . old || "" }
56
68
onChange = { ( e ) => {
57
69
setValue ( {
58
70
...value ,
59
71
name : {
60
72
...value . name ,
61
- new : e . currentTarget . value
62
- }
63
- } )
73
+ new : e . currentTarget . value ,
74
+ } ,
75
+ } ) ;
64
76
} }
65
77
disabled = { ! ! schemaName }
66
- className = { `w-full ${ schemaNameExists ? ' border-red-600' : '' } ` }
78
+ className = { `w-full ${ schemaNameExists ? " border-red-600" : "" } ` }
67
79
/>
68
- {
69
- schemaNameExists && < small className = "text-xs text-red-500" > The schema name `{ value . name . new } ` already exists.</ small >
70
- }
80
+ { schemaNameExists && (
81
+ < small className = "text-xs text-red-500" >
82
+ The schema name `{ value . name . new } ` already exists.
83
+ </ small >
84
+ ) }
71
85
</ div >
72
86
</ div >
73
- < div className = "w-full flex flex-col pt-3" >
74
- < div className = "grow -0 shrink -0" >
75
- < div className = "p-1 flex gap-2 justify-end " >
87
+ < div className = "flex w-full flex-col pt-3" >
88
+ < div className = "shrink -0 grow -0" >
89
+ < div className = "flex justify-end gap-2 p-1 " >
76
90
< Button
77
91
variant = "ghost"
78
92
disabled = { ! ! schemaNameExists }
79
93
size = { "sm" }
80
94
onClick = { onSave }
81
95
>
82
96
{ isExecuting ? (
83
- < LucideLoader className = "w-4 h-4 mr-2 animate-spin" />
97
+ < LucideLoader className = "mr-2 h-4 w-4 animate-spin" />
84
98
) : (
85
- < LucideSave className = "w-4 h-4 mr-2 " />
99
+ < LucideSave className = "mr-2 h-4 w-4 " />
86
100
) }
87
101
Save
88
102
</ Button >
89
103
</ div >
90
104
</ div >
91
105
</ div >
92
106
</ div >
93
- )
94
- }
107
+ ) ;
108
+ }
0 commit comments