feat(grid): copy column names using comments
This commit is contained in:
parent
24691ccb1e
commit
c208fcdf60
|
|
@ -9658,7 +9658,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
|
|||
<DataGridBulkEditDialog v-if="bulkEditDialogMounted" v-model:open="bulkEditDialogOpen" v-model:value="bulkEditValue" :selected-cell-count="selectedCellCount" @apply="applyBulkEditValue" />
|
||||
|
||||
<DataGridExtractorDialog v-model:open="extractorConfigOpen" :extractor="selectedCopyExtractor" :options="settingsStore.editorSettings.dataGridExtractorOptions" :items="extractorMenuItems" :preview="previewWithExtractor" @save="saveExtractorConfiguration" />
|
||||
<DataGridCopyColumnNamesDialog v-if="copyColumnNamesDialogMounted" v-model:open="copyColumnNamesDialogOpen" :column-names="copyColumnNamesDialogColumns" :database-type="resolvedDatabaseType" @copy="copyText" />
|
||||
<DataGridCopyColumnNamesDialog v-if="copyColumnNamesDialogMounted" v-model:open="copyColumnNamesDialogOpen" :column-names="copyColumnNamesDialogColumns" :database-type="resolvedDatabaseType" :column-comments="columnCommentMap" @copy="copyText" />
|
||||
|
||||
<Dialog v-model:open="generateIncrementDialogOpen">
|
||||
<DialogContent class="sm:max-w-[380px]">
|
||||
|
|
|
|||
|
|
@ -11,22 +11,25 @@ import type { DatabaseType } from "@/types/database";
|
|||
|
||||
const { t } = useI18n();
|
||||
const open = defineModel<boolean>("open", { default: false });
|
||||
const props = defineProps<{ columnNames: string[]; databaseType?: DatabaseType }>();
|
||||
const props = defineProps<{ columnNames: string[]; databaseType?: DatabaseType; columnComments?: Map<string, string> }>();
|
||||
const emit = defineEmits<{ copy: [text: string] }>();
|
||||
|
||||
const separator = ref<ColumnNameCopySeparator>(loadColumnNameCopySeparator());
|
||||
const quote = ref(false);
|
||||
const showByComment = ref(false);
|
||||
|
||||
// 每次打开时重新读取上次分隔符选择;转义选项每次默认关闭
|
||||
watch(open, (value) => {
|
||||
if (!value) return;
|
||||
separator.value = loadColumnNameCopySeparator();
|
||||
quote.value = false;
|
||||
showByComment.value = false;
|
||||
});
|
||||
|
||||
const showQuoteOption = computed(() => supportsColumnNameQuoting(props.databaseType));
|
||||
const showCommentOption = computed(() => !!(props.columnComments && props.columnComments.size > 0));
|
||||
|
||||
const previewText = computed(() => formatColumnNamesForCopy(props.columnNames, { separator: separator.value, quote: quote.value, databaseType: props.databaseType }));
|
||||
const previewText = computed(() => formatColumnNamesForCopy(props.columnNames, { separator: separator.value, quote: quote.value, databaseType: props.databaseType, showByComment: showByComment.value, commentByColumn: props.columnComments }));
|
||||
|
||||
function onSeparatorChange(value: unknown) {
|
||||
if (isColumnNameCopySeparator(value)) separator.value = value;
|
||||
|
|
@ -61,6 +64,10 @@ function confirmCopy() {
|
|||
<Label class="shrink-0 text-sm" for="copy-column-names-quote">{{ t("grid.copyColumnNamesQuote") }}</Label>
|
||||
<Switch id="copy-column-names-quote" v-model="quote" />
|
||||
</div>
|
||||
<div v-if="showCommentOption" class="flex items-center justify-between gap-3">
|
||||
<Label class="shrink-0 text-sm" for="copy-column-names-comment">{{ t("grid.copyColumnNamesShowComment") }}</Label>
|
||||
<Switch id="copy-column-names-comment" v-model="showByComment" />
|
||||
</div>
|
||||
<div class="space-y-1.5">
|
||||
<Label class="text-sm">{{ t("grid.copyColumnNamesPreview") }}</Label>
|
||||
<pre class="dbx-data-grid-value-font max-h-40 min-h-16 w-full overflow-auto whitespace-pre-wrap break-all rounded-[6px] border border-input bg-muted/30 px-2.5 py-1.5 text-xs" data-copy-column-names-preview>{{ previewText }}</pre>
|
||||
|
|
|
|||
|
|
@ -1091,6 +1091,7 @@ export default {
|
|||
copyColumnNamesTitle: "Copy Column Names ({count})",
|
||||
copyColumnNamesSeparator: "Column Separator",
|
||||
copyColumnNamesQuote: "Quote Column Names",
|
||||
copyColumnNamesShowComment: "Show by Comment",
|
||||
copyColumnNamesPreview: "Preview",
|
||||
copyAll: "Copy All (TSV)",
|
||||
selectionSum: "SUM: {value}",
|
||||
|
|
|
|||
|
|
@ -1092,6 +1092,7 @@ export default withEnglishFallback({
|
|||
copyColumnNamesTitle: "复制列名({count} 列)",
|
||||
copyColumnNamesSeparator: "列分隔符",
|
||||
copyColumnNamesQuote: "转义列名",
|
||||
copyColumnNamesShowComment: "按注释显示",
|
||||
copyColumnNamesPreview: "预览",
|
||||
copyAll: "复制全部 (TSV)",
|
||||
selectionSum: "SUM: {value}",
|
||||
|
|
|
|||
|
|
@ -37,9 +37,10 @@ export function columnNamesForCopy(allColumnNames: readonly string[], visibleCol
|
|||
return [...(scope === "all" ? allColumnNames : visibleColumnNames)];
|
||||
}
|
||||
|
||||
export function formatColumnNamesForCopy(names: readonly string[], options: { separator: ColumnNameCopySeparator; quote?: boolean; databaseType?: DatabaseType }): string {
|
||||
export function formatColumnNamesForCopy(names: readonly string[], options: { separator: ColumnNameCopySeparator; quote?: boolean; databaseType?: DatabaseType; showByComment?: boolean; commentByColumn?: Map<string, string> }): string {
|
||||
const quote = !!options.quote && supportsColumnNameQuoting(options.databaseType);
|
||||
const parts = quote ? names.map((name) => quoteTableIdentifier(options.databaseType, name)) : [...names];
|
||||
const displayNames = options.showByComment && options.commentByColumn ? names.map((name) => options.commentByColumn!.get(name) || name) : [...names];
|
||||
const parts = quote ? displayNames.map((name) => quoteTableIdentifier(options.databaseType, name)) : displayNames;
|
||||
return parts.join(COLUMN_NAME_COPY_SEPARATOR_VALUES[options.separator]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue