feat: can delete view

This commit is contained in:
0xzion
2023-12-16 20:46:27 +08:00
parent 35c979ff12
commit 6cac510085
4 changed files with 27 additions and 12 deletions

View File

@@ -34,6 +34,9 @@ export interface IDatabaseContext {
setViewIndex: Dispatch<SetStateAction<number>>
addView(viewType: ViewType): Promise<void>
updateView(viewId: string, props: Partial<IViewNode['props']>): Promise<void>
deleteView(viewId: string): Promise<void>
addRow(): Promise<void>
addColumn(fieldType: FieldType): Promise<void>
deleteColumn(columnId: string): Promise<void>
@@ -41,7 +44,6 @@ export interface IDatabaseContext {
updateColumnName(columnId: string, name: string): Promise<void>
addOption(columnId: string, name: string): Promise<IOptionNode>
deleteCellOption(cellId: string, optionId: string): Promise<void>
updateView(viewId: string, props: Partial<IViewNode['props']>): Promise<void>
}
export const databaseContext = createContext<IDatabaseContext>(
@@ -70,6 +72,19 @@ export const DatabaseProvider = ({
reloadNodes()
}
async function updateView(
viewId: string,
props: Partial<IViewNode['props']>,
) {
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<IViewNode['props']>,
) {
await db.updateView(viewId, props)
reloadNodes()
}
return (
<Provider
value={{
@@ -123,6 +130,8 @@ export const DatabaseProvider = ({
currentView: database.views[viewIndex] as IViewNode,
setViewIndex,
addView,
deleteView,
updateView,
addRow,
addColumn,
deleteColumn,
@@ -130,7 +139,6 @@ export const DatabaseProvider = ({
updateColumnName,
addOption,
deleteCellOption,
updateView,
}}
>
{children}

View File

@@ -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()
}

View File

@@ -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) {
<MenuItem
disabled={index === 0}
gap2
onClick={() => {
onClick={async () => {
if (index === 0) return
await deleteView(view.id)
setViewIndex(0)
close()
}}
>

View File

@@ -935,6 +935,10 @@ class DB {
})
}
deleteView = async (viewId: string) => {
await this.deleteNode(viewId)
}
updateView = async (viewId: string, props: Partial<IViewNode['props']>) => {
const view = await this.getNode(viewId)
await this.updateNode(viewId, {