Files
stackrender/src/components/layout/menu/data/menu-data.tsx
T

172 lines
6.6 KiB
TypeScript

import { useTranslation } from "react-i18next"
import { MenuItem } from "../../types";
import { useMemo } from "react";
import { Modals } from "@/providers/modal-provider/modal-contxet";
import { useDatabaseHistory } from "@/providers/database-history/database-history-provider";
import { useDatabase, useDatabaseOperations } from "@/providers/database-provider/database-provider";
import { useModal } from "@/providers/modal-provider/modal-provider";
import { useDiagramOps } from "@/providers/diagram-provider/diagram-provider";
import { TableType } from "@/lib/schemas/table-schema";
import { CardinalityStyle } from "@/lib/database";
import { useTheme } from "@/providers/theme-provider/theme-provider";
export const useMenuData = () => {
const { t } = useTranslation();
const { setTheme, theme } = useTheme()
const { open } = useModal();
const { canRedo, canUndo, undo, redo } = useDatabaseHistory();
const { deleteMultiTables } = useDatabaseOperations();
const { database } = useDatabase();
const { openController, showController, cardinalityStyle, changeCardinalityStyle } = useDiagramOps();
const menuData: MenuItem[] = useMemo(() => [
{
id: "menu.file",
title: t("menu.file"),
children: [
{
id: "menu.new",
title: t("menu.new"),
clickHandler: () => {
open(Modals.CREATE_DATABASE)
}
},
{
id: "menu.open",
title: t("menu.open"), shortcut: "Ctnl + O", clickHandler: () => {
open(Modals.OPEN_DATABASE)
}
},
{
id: "menu.import",
title: t("menu.import"),
divide: true,
clickHandler: () => {
open(Modals.IMPORT_DATABASE)
}
},
{
id: "menu.export_sql",
title: t("menu.export_sql"),
clickHandler: () => {
open(Modals.EXPORT_SQL)
}
},
//{ title: t("menu.export_orm_models"), divide: true },
{
id: "menu.delete_project",
title: t("menu.delete_project"), theme: "destructive", clickHandler: () => {
open(Modals.DELETE_DATABASE)
}
},
],
},
{
id: "menu.edit",
title: t("menu.edit"),
children: [
{ id: "menu.undo", title: t("menu.undo"), isDisabled: !canUndo, clickHandler: undo },
{ id: "menu.redo", title: t("menu.redo"), isDisabled: !canRedo, clickHandler: redo },
{
id: "menu.clear",
title: t("menu.clear"), clickHandler: () => {
const tables = database ? database.tables : [];
deleteMultiTables(tables.map((table: TableType) => table.id))
}
},
],
},
{
id: "menu.view",
title: t("menu.view"),
children: [
{
id: "menu.cardinality_style",
title: t("menu.cardinality_style"),
divide: true,
children: [
{
id: "menu.symbolic",
selected: cardinalityStyle == CardinalityStyle.SYMBOLIC,
title: t("menu.symbolic"), clickHandler: () => {
changeCardinalityStyle(CardinalityStyle.SYMBOLIC)
}
},
{
id: "menu.numeric",
selected: cardinalityStyle == CardinalityStyle.NUMERIC,
title: t("menu.numeric"), clickHandler: () => {
changeCardinalityStyle(CardinalityStyle.NUMERIC)
}
},
{
id: "menu.hidden",
selected: cardinalityStyle == CardinalityStyle.HIDDEN,
title: t("menu.hidden"), clickHandler: () => {
changeCardinalityStyle(CardinalityStyle.HIDDEN)
}
},
],
},
{
id: "menu.controller_visibility",
title: showController ? t("menu.hide_controller") : t("menu.show_controller"), shortcut: "Ctnl + B", divide: true, clickHandler: () => {
openController(!showController)
}
},
{
id: "menu.theme",
title: t("menu.theme"),
children: [
{
id: "light",
title: t("menu.light"),
clickHandler: () => setTheme("light"),
selected: theme != "dark",
},
{
id: "dark",
title: t("menu.dark"),
clickHandler: () => setTheme("dark"),
selected: theme == "dark"
},
],
},
],
},
{
id: "menu.help",
title: t("menu.help"),
children: [
{
id: "menu.documentation", title: t("sidebar.documentation"),
clickHandler: () => {
window.open("https://www.stackrender.io/docs", "_blank")
}
},
{
id: "menu.join_discord", title: t("menu.join_discord"),
clickHandler: () => {
window.open("https://discord.gg/4dv26jR4Pj", "_blank")
}
},
],
},
], [t, canRedo, canUndo, undo, redo , deleteMultiTables, database, showController, openController, changeCardinalityStyle, cardinalityStyle, theme]);
return menuData ;
}