import { ref, shallowRef } from "vue"; import type { TreeNode } from "@/types/database"; import type { PasteTableMode } from "@/lib/table/tableClipboard"; import { fallbackCreateDatabaseCharsetMetadata } from "@/lib/database/createDatabaseCharsetOptions"; import type { DatabaseUserIdentity } from "@/lib/database/databaseUserAdmin"; import type { AuthorizationPlan, AuthorizationStepResult } from "@/lib/database/databaseAuthorizationPlan"; import type { MongoCreateIndexForm, MongoIndexRow } from "@/lib/sidebar/mongoCollectionMutation"; import type { TableVGroupScope } from "@/lib/table/tableVGroup"; export type DuplicateStructureSource = TreeNode & { connectionId: string; database: string }; type ConnectionDeleteTarget = TreeNode & { connectionId: string }; type ConnectionGroupDeleteTarget = TreeNode & { type: "connection-group" }; export const fallbackCreateDatabaseCharset = fallbackCreateDatabaseCharsetMetadata(); export const sidebarTreeDialogOwner = shallowRef(null); export const sidebarDangerTarget = shallowRef(null); export const sidebarDangerRunningExecutionId = ref(""); export const sidebarDangerRunningCancel = ref<(() => void | Promise) | null>(null); export const sidebarFormTarget = shallowRef(null); export const connectionDeleteTargetSnapshot = ref([]); export const connectionGroupDeleteTargetSnapshot = ref([]); export const deleteConnectionsWithGroup = ref(false); export const showTableVGroupDialog = ref(false); export const tableVGroupName = ref(""); /** Scope snapshot + creation payload for the table vgroup naming dialog. */ export const tableVGroupDialogScope = shallowRef(null); export const tableVGroupDialogParentGroupId = ref(null); export const tableVGroupDialogTableNames = ref([]); export const showTableVGroupDeleteConfirm = ref(false); /** Scope + group snapshot for the table vgroup delete confirmation. */ export const tableVGroupDeleteTarget = shallowRef<{ scope: TableVGroupScope; groupId: string; name: string } | null>(null); export const showDeleteConfirm = ref(false); export const showDropTableConfirm = ref(false); export const showDropTableChildObjectConfirm = ref(false); export const showBatchDropConfirm = ref(false); export const showBatchEmptyConfirm = ref(false); export const showBatchTruncateConfirm = ref(false); export const showStructurePreviewDialog = ref(false); export const showStructureDocCopyDialog = ref(false); export const structurePreviewSql = ref(""); export const structurePreviewHasOceanBase = ref(false); export const structurePreviewTitle = ref(""); export const structurePreviewDefaultFileName = ref("structure.sql"); export const structurePreviewError = ref(""); export const structureDocCopyText = ref(""); export const structureDocCopyTitle = ref(""); export const isLoadingStructurePreview = ref(false); export const showEmptyTableConfirm = ref(false); export const showTruncateTableConfirm = ref(false); export const showVacuumTableConfirm = ref(false); export const showMysqlAutoIncrementConfirm = ref(false); export const showBatchMysqlAutoIncrementConfirm = ref(false); export const batchMysqlAutoIncrementTargets = ref([]); export const batchMysqlAutoIncrementPreviewSql = ref(""); export const showRenameObjectDialog = ref(false); export const renameObjectName = ref(""); export const renameObjectError = ref(""); export const renameObjectPreviewSql = ref(""); export const dropTablePreviewSql = ref(""); export const dropTableCascade = ref(false); export const batchDropCascade = ref(false); export const emptyTablePreviewSql = ref(""); export const truncateTablePreviewSql = ref(""); export const truncateTableCascade = ref(false); export const vacuumTableFull = ref(false); export const vacuumTableAnalyze = ref(false); export const vacuumTablePreviewSql = ref(""); export const vacuumTablePreviewKey = ref(""); export const vacuumTableExecuting = ref(false); export const mysqlAutoIncrementValue = ref("1"); export const mysqlAutoIncrementPreviewSql = ref(""); export const mysqlAutoIncrementPreviewKey = ref(""); export const dropObjectPreviewSql = ref(""); export const showDropObjectConfirm = ref(false); export const dropTableChildObjectPreviewSql = ref(""); export const batchDropPreviewSql = ref(""); export const batchEmptyPreviewSql = ref(""); export const batchEmptyTargets = ref([]); export const batchDropTargets = ref([]); export const batchTruncateTargets = ref([]); export const batchTruncatePreviewSql = ref(""); export const batchTruncateCascade = ref(false); export const dropDatabasePreviewSql = ref(""); export const dropSchemaPreviewSql = ref(""); export const showDuplicateDialog = ref(false); export const duplicateTableName = ref(""); export const duplicateStructureSource = ref(null); export const showPasteDialog = ref(false); export const pasteTableMode = ref("structure-and-data"); export const pasteTableEntries = ref>([]); export const showCreateDatabaseDialog = ref(false); export const createDatabaseName = ref(""); export const createDatabaseCharset = ref("utf8mb4"); export const createDatabaseCollation = ref("utf8mb4_unicode_ci"); export const createDatabaseUsers = ref([]); export const createDatabaseSelectedUsers = ref([]); export const createDatabaseUsersLoading = ref(false); export const showCreateDatabasePreviewDialog = ref(false); export const createDatabaseAuthorizationPlan = ref(); export const createDatabasePreviewSql = ref(""); export const createDatabaseAuthorizationResults = ref([]); export const createDatabaseAuthorizationApplying = ref(false); export const showCreateNacosNamespaceDialog = ref(false); export const createNacosNamespaceId = ref(""); export const createNacosNamespaceName = ref(""); export const createNacosNamespaceDesc = ref(""); export const createNacosNamespaceLoading = ref(false); export const showEditNacosNamespaceDialog = ref(false); export const editNacosNamespaceName = ref(""); export const editNacosNamespaceDesc = ref(""); export const editNacosNamespaceLoading = ref(false); export const showDeleteNacosNamespaceConfirm = ref(false); export const deleteNacosNamespaceLoading = ref(false); export const createDatabaseCharsetOptions = ref(fallbackCreateDatabaseCharset.charsets); export const createDatabaseCollationsByCharset = ref>(fallbackCreateDatabaseCharset.collationsByCharset); export const createDatabaseCharsetLoading = ref(false); export const showDropDatabaseConfirm = ref(false); export const dropDatabaseLoading = ref(false); export const showDropMongoCollectionConfirm = ref(false); export const dropMongoCollectionLoading = ref(false); export const showRenameMongoCollectionDialog = ref(false); export const renameMongoCollectionName = ref(""); export const renameMongoCollectionError = ref(""); export const renameMongoCollectionPreview = ref(""); export const renameMongoCollectionLoading = ref(false); export const showCloneMongoCollectionDialog = ref(false); export const cloneMongoCollectionName = ref(""); export const cloneMongoCollectionError = ref(""); export const cloneMongoCollectionLoading = ref(false); export const showDropMongoIndexConfirm = ref(false); export const dropMongoIndexLoading = ref(false); export const showDropAllMongoIndexesConfirm = ref(false); export const dropAllMongoIndexesLoading = ref(false); export const showCreateMongoIndexDialog = ref(false); function emptyMongoCreateIndexForm(): MongoCreateIndexForm { return { name: "", fields: [{ id: 1, path: "", type: "1" }], unique: false, sparse: false, expireAfterSeconds: "", partialFilterExpression: "", background: false, bucketSize: "", hidden: false, }; } export const mongoCreateIndexForm = ref(emptyMongoCreateIndexForm()); export const mongoCreateIndexFieldOptions = ref([]); export const mongoCreateIndexError = ref(""); export const mongoCreateIndexLoading = ref(false); export function resetMongoCreateIndexForm() { mongoCreateIndexForm.value = emptyMongoCreateIndexForm(); mongoCreateIndexFieldOptions.value = []; mongoCreateIndexError.value = ""; mongoCreateIndexLoading.value = false; } export const showMongoIndexManagerDialog = ref(false); export const mongoIndexManagerRows = ref([]); export const mongoIndexManagerLoading = ref(false); export const mongoIndexManagerError = ref(""); export const mongoIndexManagerSelectedName = ref(""); export const mongoIndexManagerMode = ref<"view" | "create" | "edit">("view"); /** Name of the index being edited, so the confirm step knows which one to drop. */ export const mongoEditIndexOriginalName = ref(""); export function resetMongoIndexManager() { mongoIndexManagerRows.value = []; mongoIndexManagerLoading.value = false; mongoIndexManagerError.value = ""; mongoIndexManagerSelectedName.value = ""; mongoIndexManagerMode.value = "view"; mongoEditIndexOriginalName.value = ""; } export const showClearElasticsearchIndexConfirm = ref(false); export const clearElasticsearchIndexLoading = ref(false); /** Name typed back by the operator before a wildcard index node may be cleared. */ export const clearElasticsearchIndexTypedName = ref(""); export const showFlushRedisDbConfirm = ref(false); export const showRedisDatabaseAliasDialog = ref(false); export const redisDatabaseAliasInput = ref(""); export const redisDatabaseAliasSaving = ref(false); export const showCreateSchemaDialog = ref(false); export const createSchemaName = ref(""); export const showDropSchemaConfirm = ref(false); export const showEditDatabasePropertiesDialog = ref(false); export const editDatabasePropertiesLoading = ref(false); export const editDatabasePropertiesPreviewSql = ref(""); export const editDatabaseCharset = ref("utf8mb4"); export const editDatabaseCollation = ref("utf8mb4_unicode_ci"); export const editDatabaseCommentText = ref(""); export const showEditSchemaCommentDialog = ref(false); export const showCompileErrorDialog = ref(false); export const compileErrorTitle = ref(""); export const compileErrorMessage = ref(""); export const schemaCommentText = ref(""); export const schemaCommentLoading = ref(false); export const schemaCommentPreviewSql = ref(""); export const showDeleteGroupConfirm = ref(false); export const showMoveToNewGroupDialog = ref(false); export const moveToNewGroupName = ref(""); const openFlags = [ showDeleteConfirm, showDropTableConfirm, showDropTableChildObjectConfirm, showBatchDropConfirm, showBatchEmptyConfirm, showBatchTruncateConfirm, showStructurePreviewDialog, showStructureDocCopyDialog, showEmptyTableConfirm, showTruncateTableConfirm, showVacuumTableConfirm, showMysqlAutoIncrementConfirm, showBatchMysqlAutoIncrementConfirm, showDropObjectConfirm, showRenameObjectDialog, showDuplicateDialog, showPasteDialog, showCreateDatabaseDialog, showCreateDatabasePreviewDialog, showCreateNacosNamespaceDialog, showEditNacosNamespaceDialog, showDropDatabaseConfirm, showDropMongoCollectionConfirm, showRenameMongoCollectionDialog, showCloneMongoCollectionDialog, showDropMongoIndexConfirm, showDropAllMongoIndexesConfirm, showCreateMongoIndexDialog, showMongoIndexManagerDialog, showClearElasticsearchIndexConfirm, showFlushRedisDbConfirm, showRedisDatabaseAliasDialog, showCreateSchemaDialog, showDropSchemaConfirm, showEditDatabasePropertiesDialog, showEditSchemaCommentDialog, showCompileErrorDialog, showDeleteGroupConfirm, showMoveToNewGroupDialog, showTableVGroupDialog, showTableVGroupDeleteConfirm, ]; export function resetSidebarTreeDialogState() { for (const flag of openFlags) flag.value = false; compileErrorTitle.value = ""; compileErrorMessage.value = ""; createDatabaseUsers.value = []; createDatabaseSelectedUsers.value = []; createDatabaseUsersLoading.value = false; createDatabaseAuthorizationPlan.value = undefined; createDatabasePreviewSql.value = ""; createDatabaseAuthorizationResults.value = []; createDatabaseAuthorizationApplying.value = false; clearElasticsearchIndexLoading.value = false; clearElasticsearchIndexTypedName.value = ""; redisDatabaseAliasInput.value = ""; redisDatabaseAliasSaving.value = false; cloneMongoCollectionName.value = ""; cloneMongoCollectionError.value = ""; cloneMongoCollectionLoading.value = false; resetMongoCreateIndexForm(); resetMongoIndexManager(); vacuumTableExecuting.value = false; sidebarTreeDialogOwner.value = null; sidebarDangerTarget.value = null; sidebarFormTarget.value = null; sidebarDangerRunningExecutionId.value = ""; sidebarDangerRunningCancel.value = null; connectionDeleteTargetSnapshot.value = []; connectionGroupDeleteTargetSnapshot.value = []; deleteConnectionsWithGroup.value = false; tableVGroupDialogScope.value = null; tableVGroupDialogParentGroupId.value = null; tableVGroupDialogTableNames.value = []; }