@@ -4,39 +4,15 @@ import { Dispatch, SetStateAction, useCallback, useMemo } from "react";
44import { Button , buttonVariants } from "../../ui/button" ;
55import SchemaEditorColumnList from "./schema-editor-column-list" ;
66import { Input } from "../../ui/input" ;
7- import generateSqlSchemaChange , {
8- checkSchemaChange ,
9- } from "@/components/lib/sql-generate.schema" ;
10- import {
11- DatabaseTableColumn ,
12- DatabaseTableColumnConstraint ,
13- } from "@/drivers/base-driver" ;
7+ import { checkSchemaChange } from "@/components/lib/sql-generate.schema" ;
148import SchemaEditorConstraintList from "./schema-editor-constraint-list" ;
159import { ColumnsProvider } from "./column-provider" ;
1610import { Popover , PopoverContent , PopoverTrigger } from "../../ui/popover" ;
1711import CodePreview from "../code-preview" ;
1812import { toast } from "sonner" ;
19-
20- export interface DatabaseTableColumnChange {
21- old : DatabaseTableColumn | null ;
22- new : DatabaseTableColumn | null ;
23- }
24-
25- export interface DatabaseTableConstraintChange {
26- id : string ;
27- old : DatabaseTableColumnConstraint | null ;
28- new : DatabaseTableColumnConstraint | null ;
29- }
30-
31- export interface DatabaseTableSchemaChange {
32- name : {
33- old ?: string ;
34- new ?: string ;
35- } ;
36- columns : DatabaseTableColumnChange [ ] ;
37- constraints : DatabaseTableConstraintChange [ ] ;
38- createScript ?: string ;
39- }
13+ import { DatabaseTableSchemaChange } from "@/drivers/base-driver" ;
14+ import { useDatabaseDriver } from "@/context/driver-provider" ;
15+ import SchemaNameSelect from "./schema-name-select" ;
4016
4117interface Props {
4218 onSave : ( ) => void ;
@@ -51,6 +27,7 @@ export default function SchemaEditor({
5127 onSave,
5228 onDiscard,
5329} : Readonly < Props > ) {
30+ const { databaseDriver } = useDatabaseDriver ( ) ;
5431 const isCreateScript = value . name . old === "" ;
5532
5633 const onAddColumn = useCallback ( ( ) => {
@@ -84,8 +61,8 @@ export default function SchemaEditor({
8461 const hasChange = checkSchemaChange ( value ) ;
8562
8663 const previewScript = useMemo ( ( ) => {
87- return generateSqlSchemaChange ( value ) . join ( "\n" ) ;
88- } , [ value ] ) ;
64+ return databaseDriver . createUpdateTableSchema ( value ) . join ( "\n" ) ;
65+ } , [ value , databaseDriver ] ) ;
8966
9067 return (
9168 < div className = "w-full h-full flex flex-col" >
@@ -94,7 +71,7 @@ export default function SchemaEditor({
9471 < Button
9572 variant = "ghost"
9673 onClick = { onSave }
97- disabled = { ! hasChange || ! value . name ?. new }
74+ disabled = { ! hasChange || ! value . name ?. new || ! value . schemaName }
9875 size = { "sm" }
9976 >
10077 < LucideSave className = "w-4 h-4 mr-2" />
@@ -173,22 +150,34 @@ export default function SchemaEditor({
173150 ) }
174151 </ div >
175152
176- < div className = "flex items-center mx-3 mt-1 mb-2 ml-5 gap-2" >
177- < div className = "text-xs flex items-center justify-center" > Name</ div >
178- < Input
179- placeholder = "Table Name"
180- value = { value . name . new ?? value . name . old ?? "" }
181- onChange = { ( e ) => {
182- onChange ( {
183- ...value ,
184- name : {
185- ...value . name ,
186- new : e . currentTarget . value ,
187- } ,
188- } ) ;
189- } }
190- className = "w-[200px]"
191- />
153+ < div className = "flex items-center mx-3 mt-3 mb-4 ml-5 gap-2" >
154+ < div >
155+ < div className = "text-xs font-medium mb-1" > Table Name</ div >
156+ < Input
157+ placeholder = "Table Name"
158+ value = { value . name . new ?? value . name . old ?? "" }
159+ onChange = { ( e ) => {
160+ onChange ( {
161+ ...value ,
162+ name : {
163+ ...value . name ,
164+ new : e . currentTarget . value ,
165+ } ,
166+ } ) ;
167+ } }
168+ className = "w-[200px]"
169+ />
170+ </ div >
171+ < div >
172+ < div className = "text-xs font-medium mb-1" > Schema</ div >
173+ < SchemaNameSelect
174+ readonly = { ! isCreateScript }
175+ value = { value . schemaName }
176+ onChange = { ( selectedSchema ) => {
177+ onChange ( { ...value , schemaName : selectedSchema } ) ;
178+ } }
179+ />
180+ </ div >
192181 </ div >
193182 < Separator />
194183 </ div >
@@ -197,9 +186,11 @@ export default function SchemaEditor({
197186 columns = { value . columns }
198187 onChange = { onChange }
199188 onAddColumn = { onAddColumn }
189+ schemaName = { value . schemaName }
200190 />
201191 < ColumnsProvider value = { value . columns } >
202192 < SchemaEditorConstraintList
193+ schemaName = { value . schemaName }
203194 constraints = { value . constraints }
204195 onChange = { onChange }
205196 disabled = { ! isCreateScript }
0 commit comments