11import { Button } from "@/components/ui/button" ;
22import { Input } from "@/components/ui/input" ;
3+ import { useStudioContext } from "@/context/driver-provider" ;
34import { useSchema } from "@/context/schema-provider" ;
5+ import { DatabaseSchemaChange } from "@/drivers/base-driver" ;
46import { LucideAlertCircle , LucideLoader , LucideSave } from "lucide-react" ;
57import { useCallback , useMemo , useState } from "react" ;
6- import { useDatabaseDriver } from "@/context/driver-provider" ;
7- import { DatabaseSchemaChange } from "@/drivers/base-driver" ;
88
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 ( ) ;
1117 const { schema, refresh : refreshSchema } = useSchema ( ) ;
1218 const [ isExecuting , setIsExecuting ] = useState ( false ) ;
1319 const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
1420 const [ value , setValue ] = useState < DatabaseSchemaChange > ( {
1521 name : {
16- new : '' ,
17- old : ''
22+ new : "" ,
23+ old : "" ,
1824 } ,
19- createScript : '' ,
20- collate : ''
25+ createScript : "" ,
26+ collate : "" ,
2127 } ) ;
2228
2329 const previewScript = useMemo ( ( ) => {
@@ -27,68 +33,76 @@ export function SchemaDatabaseCreateForm({ schemaName, onClose }: { schemaName?:
2733 const onSave = useCallback ( ( ) => {
2834 {
2935 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+ } ) ;
3646 }
37- } , [ databaseDriver , onClose , previewScript , refreshSchema ] )
47+ } , [ databaseDriver , onClose , previewScript , refreshSchema ] ) ;
3848
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 || "" ) ;
4153
4254 return (
43- < div className = "flex h-full flex-col overflow-hidden relative " >
55+ < div className = "relative flex h-full flex-col overflow-hidden" >
4456 { 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" />
4759 < p > { errorMessage } </ p >
4860 </ div >
4961 ) }
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" >
5163 < 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 >
5365 < Input
5466 placeholder = "Schema Name"
55- value = { value . name . new || value . name . old || '' }
67+ value = { value . name . new || value . name . old || "" }
5668 onChange = { ( e ) => {
5769 setValue ( {
5870 ...value ,
5971 name : {
6072 ...value . name ,
61- new : e . currentTarget . value
62- }
63- } )
73+ new : e . currentTarget . value ,
74+ } ,
75+ } ) ;
6476 } }
6577 disabled = { ! ! schemaName }
66- className = { `w-full ${ schemaNameExists ? ' border-red-600' : '' } ` }
78+ className = { `w-full ${ schemaNameExists ? " border-red-600" : "" } ` }
6779 />
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+ ) }
7185 </ div >
7286 </ 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 " >
7690 < Button
7791 variant = "ghost"
7892 disabled = { ! ! schemaNameExists }
7993 size = { "sm" }
8094 onClick = { onSave }
8195 >
8296 { isExecuting ? (
83- < LucideLoader className = "w-4 h-4 mr-2 animate-spin" />
97+ < LucideLoader className = "mr-2 h-4 w-4 animate-spin" />
8498 ) : (
85- < LucideSave className = "w-4 h-4 mr-2 " />
99+ < LucideSave className = "mr-2 h-4 w-4 " />
86100 ) }
87101 Save
88102 </ Button >
89103 </ div >
90104 </ div >
91105 </ div >
92106 </ div >
93- )
94- }
107+ ) ;
108+ }
0 commit comments