From 6cac510085e6aedd147667c865834435b87f0dbd Mon Sep 17 00:00:00 2001 From: 0xzion <0xyz.penx@gmail.com> Date: Sat, 16 Dec 2023 20:46:27 +0800 Subject: [PATCH] feat: can delete view --- .../database/src/ui/DatabaseContext.tsx | 28 ++++++++++++------- .../database/src/ui/ViewNav/AddViewBtn.tsx | 1 + .../database/src/ui/ViewNav/ViewMenu.tsx | 6 ++-- packages/local-db/src/db.ts | 4 +++ 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/extensions/database/src/ui/DatabaseContext.tsx b/extensions/database/src/ui/DatabaseContext.tsx index 8165fc5a..39c62f98 100644 --- a/extensions/database/src/ui/DatabaseContext.tsx +++ b/extensions/database/src/ui/DatabaseContext.tsx @@ -34,6 +34,9 @@ export interface IDatabaseContext { setViewIndex: Dispatch> addView(viewType: ViewType): Promise + updateView(viewId: string, props: Partial): Promise + deleteView(viewId: string): Promise + addRow(): Promise addColumn(fieldType: FieldType): Promise deleteColumn(columnId: string): Promise @@ -41,7 +44,6 @@ export interface IDatabaseContext { updateColumnName(columnId: string, name: string): Promise addOption(columnId: string, name: string): Promise deleteCellOption(cellId: string, optionId: string): Promise - updateView(viewId: string, props: Partial): Promise } export const databaseContext = createContext( @@ -70,6 +72,19 @@ export const DatabaseProvider = ({ reloadNodes() } + async function updateView( + viewId: string, + props: Partial, + ) { + await db.updateView(viewId, props) + reloadNodes() + } + + async function deleteView(viewId: string) { + await db.deleteView(viewId) + reloadNodes() + } + async function addRow() { await db.addRow(databaseId) reloadNodes() @@ -107,14 +122,6 @@ export const DatabaseProvider = ({ reloadNodes() } - async function updateView( - viewId: string, - props: Partial, - ) { - await db.updateView(viewId, props) - reloadNodes() - } - return ( {children} diff --git a/extensions/database/src/ui/ViewNav/AddViewBtn.tsx b/extensions/database/src/ui/ViewNav/AddViewBtn.tsx index ef765b0b..758a9941 100644 --- a/extensions/database/src/ui/ViewNav/AddViewBtn.tsx +++ b/extensions/database/src/ui/ViewNav/AddViewBtn.tsx @@ -21,6 +21,7 @@ function Item({ children, viewType, ...rest }: ItemProps) { const ctx = useDatabaseContext() async function addColumn() { await ctx.addView(viewType) + ctx.setViewIndex(ctx.views.length) close() } diff --git a/extensions/database/src/ui/ViewNav/ViewMenu.tsx b/extensions/database/src/ui/ViewNav/ViewMenu.tsx index 79e0ec93..dc29a21b 100644 --- a/extensions/database/src/ui/ViewNav/ViewMenu.tsx +++ b/extensions/database/src/ui/ViewNav/ViewMenu.tsx @@ -37,7 +37,7 @@ export const ViewMenu = ({ view, index }: ViewMenuProps) => { function Content({ view, index }: ViewMenuProps) { const { close } = usePopoverContext() - const { updateView } = useDatabaseContext() + const { updateView, deleteView, setViewIndex } = useDatabaseContext() const [name, setName] = useState(view.props.name) return ( @@ -78,8 +78,10 @@ function Content({ view, index }: ViewMenuProps) { { + onClick={async () => { if (index === 0) return + await deleteView(view.id) + setViewIndex(0) close() }} > diff --git a/packages/local-db/src/db.ts b/packages/local-db/src/db.ts index f9475dba..4d28d8b1 100644 --- a/packages/local-db/src/db.ts +++ b/packages/local-db/src/db.ts @@ -935,6 +935,10 @@ class DB { }) } + deleteView = async (viewId: string) => { + await this.deleteNode(viewId) + } + updateView = async (viewId: string, props: Partial) => { const view = await this.getNode(viewId) await this.updateNode(viewId, {