feat(meilisearch): add index creation

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-09-20 01:18:26 +08:00
1 parent 28cc1b9768
commit 5b937388e5
18 files changed
+304 -4

No files matched your search

@@ -36,6 +36,7 @@ import { elasticsearchClearIndexPreview, isElasticsearchProtocolIndex, isPartial
import { supportsMongoAllDriverMutations, supportsMongoIndexMutations, supportsNativeMongoDriverMutations } from "@/lib/mongo/mongoCapabilities";
import { runMongoSidebarMutation } from "@/lib/sidebar/runMongoSidebarMutation";
import { executeWithProductionContextGuard } from "@/lib/database/productionExecutionGuard";
import { connectionIsEffectivelyReadOnly } from "@/lib/database/readOnlyWriteAccess";
import { uuid } from "@/lib/common/utils";
import { refreshLoadedMongoIndexes } from "@/lib/mongo/mongoIndexMetadata";
import type { NacosAdminConfig } from "@/types/nacos";
@@ -77,6 +78,11 @@ import {
cloneMongoCollectionError,
cloneMongoCollectionLoading,
showCreateMongoIndexDialog,
showCreateMeilisearchIndexDialog,
meilisearchCreateIndexUid,
meilisearchCreateIndexPrimaryKey,
meilisearchCreateIndexError,
meilisearchCreateIndexLoading,
mongoCreateIndexForm,
mongoCreateIndexFieldOptions,
mongoCreateIndexError,
@@ -368,6 +374,48 @@ export function useSidebarDatabaseSpecificMutationRuntime(options: SidebarDataba
});
}
const canCreateMeilisearchIndex = computed(() => {
const node = activeNode.value;
const config = node.connectionId ? connectionStore.getConfig(node.connectionId) : undefined;
return node.type === "connection" && config?.db_type === "meilisearch" && !connectionIsEffectivelyReadOnly(config);
});
function prepareCreateMeilisearchIndexDialog() {
if (!canCreateMeilisearchIndex.value) return;
meilisearchCreateIndexUid.value = "";
meilisearchCreateIndexPrimaryKey.value = "";
meilisearchCreateIndexError.value = "";
meilisearchCreateIndexLoading.value = false;
showCreateMeilisearchIndexDialog.value = true;
}
async function confirmCreateMeilisearchIndex() {
const node = sidebarFormTarget.value ?? activeNode.value;
const connectionId = node.connectionId;
const uid = meilisearchCreateIndexUid.value.trim();
if (!canCreateMeilisearchIndex.value || node.type !== "connection" || !connectionId) return;
if (!uid) {
meilisearchCreateIndexError.value = t("meilisearch.createIndexUidRequired");
return;
}
meilisearchCreateIndexLoading.value = true;
meilisearchCreateIndexError.value = "";
try {
await connectionStore.ensureConnected(connectionId);
await api.meilisearchCreateIndex(connectionId, {
uid,
primaryKey: meilisearchCreateIndexPrimaryKey.value.trim() || undefined,
});
showCreateMeilisearchIndexDialog.value = false;
toast(t("meilisearch.indexCreated"), 3000);
await connectionStore.loadElasticsearchIndices(connectionId);
} catch (error) {
meilisearchCreateIndexError.value = translateBackendError(t, errorMessage(error));
} finally {
meilisearchCreateIndexLoading.value = false;
}
}
async function loadMongoIndexManagerRows() {
const node = sidebarFormTarget.value ?? activeNode.value;
const connectionId = node.connectionId;
@@ -1219,6 +1267,9 @@ export function useSidebarDatabaseSpecificMutationRuntime(options: SidebarDataba
mongoCreateIndexCanSubmit,
mongoCreateIndexCanAddField,
prepareCreateMongoIndexDialog,
canCreateMeilisearchIndex,
prepareCreateMeilisearchIndexDialog,
confirmCreateMeilisearchIndex,
addMongoCreateIndexField,
removeMongoCreateIndexField,
confirmCreateMongoIndex,