feat(structure): show comments and defaults in copy-fields dialog

This commit is contained in:
zipg authored and GitHub committed 2026-09-20 18:25:31 +08:00
1 parent dc399624c3
commit 1ef865008a
6 files changed
+99 -8

No files matched your search

@@ -109,6 +109,8 @@ import {
structureColumnNamesForCopy,
tableStructureIdentifierComparisonKey,
toColumnNames,
copySourceColumnDetails,
matchesCopySourceColumnSearch,
} from "@/lib/table/tableStructureEditorState";
import { CREATE_DATABASE_CHARSET_OPTIONS, createDatabaseCollationOptionsForCharset, fallbackCreateDatabaseCharsetMetadata, normalizeCreateDatabaseCharsetKey, parseCreateDatabaseCharsetMetadata } from "@/lib/database/createDatabaseCharsetOptions";
import type { CreateDatabaseCharsetMetadata } from "@/lib/database/createDatabaseCharsetOptions";
@@ -2501,14 +2503,14 @@ const copyableSourceColumns = computed(() => {
const existingNames = new Set(columns.value.filter((column) => !column.markedForDrop).map((column) => tableStructureIdentifierComparisonKey(column.name, databaseType.value, databaseInfo)));
return copySourceColumns.value.map((column) => ({
column,
details: copySourceColumnDetails(column, databaseType.value),
alreadyExists: existingNames.has(tableStructureIdentifierComparisonKey(column.name, databaseType.value, databaseInfo)),
}));
});
const filteredCopyableSourceColumns = computed(() => {
const search = normalizedColumnSearch(copySourceColumnSearch.value);
if (!search) return copyableSourceColumns.value;
return copyableSourceColumns.value.filter(({ column }) => [column.name, column.data_type, column.comment ?? ""].some((value) => normalizedColumnSearch(value).includes(search)));
if (!normalizedColumnSearch(copySourceColumnSearch.value)) return copyableSourceColumns.value;
return copyableSourceColumns.value.filter(({ column }) => matchesCopySourceColumnSearch(column, copySourceColumnSearch.value, databaseType.value));
});
const copyableSourceColumnNames = computed(() => copyableSourceColumns.value.filter(({ alreadyExists }) => !alreadyExists).map(({ column }) => column.name));
@@ -5441,10 +5443,18 @@ watch(
{{ t("structureEditor.copyColumnsNoMatchingFields") }}
</div>
<div v-else class="max-h-72 overflow-y-auto rounded-md border">
<label v-for="{ column, alreadyExists } in filteredCopyableSourceColumns" :key="column.name" class="flex cursor-pointer items-center gap-2 border-b px-3 py-2 last:border-b-0 hover:bg-muted/50" :class="alreadyExists ? 'cursor-not-allowed opacity-60' : ''">
<input v-model="selectedCopySourceColumnNames" type="checkbox" :value="column.name" :disabled="alreadyExists" class="size-4 rounded border-input" />
<span class="min-w-0 flex-1 truncate font-mono text-sm">{{ column.name }}</span>
<span class="shrink-0 text-xs text-muted-foreground">{{ column.data_type }}</span>
<label v-for="{ column, details, alreadyExists } in filteredCopyableSourceColumns" :key="column.name" class="flex cursor-pointer items-start gap-2 border-b px-3 py-2 last:border-b-0 hover:bg-muted/50" :class="alreadyExists ? 'cursor-not-allowed opacity-60' : ''">
<input v-model="selectedCopySourceColumnNames" type="checkbox" :value="column.name" :disabled="alreadyExists" class="mt-0.5 size-4 shrink-0 rounded border-input" />
<span class="min-w-0 flex-1">
<span class="flex min-w-0 items-center gap-2">
<span class="min-w-0 flex-1 truncate font-mono text-sm">{{ column.name }}</span>
<span class="shrink-0 text-xs text-muted-foreground">{{ column.data_type }}</span>
</span>
<span v-if="(columnEditorControls.defaultValue && details.defaultValue) || (columnEditorControls.comment && details.comment)" class="mt-0.5 flex min-w-0 items-center gap-3 text-xs text-muted-foreground">
<span v-if="columnEditorControls.defaultValue && details.defaultValue" class="min-w-0 truncate" :title="`${t('structureEditor.defaultValue')}: ${details.defaultValue}`">{{ t("structureEditor.defaultValue") }}: {{ details.defaultValue }}</span>
<span v-if="columnEditorControls.comment && details.comment" class="min-w-0 truncate" :title="`${t('structureEditor.comment')}: ${details.comment}`">{{ t("structureEditor.comment") }}: {{ details.comment }}</span>
</span>
</span>
<Badge v-if="alreadyExists" variant="secondary" class="shrink-0 text-[10px]">{{ t("structureEditor.copyColumnsAlreadyExists") }}</Badge>
</label>
</div>