feat(data-grid): show column comments in lookup
This commit is contained in:
12 files changed
+137
-23
No files matched your search
@@ -128,6 +128,7 @@ import { appendColumnValueFilterCondition, buildColumnValueFilterCondition, buil
|
||||
import { clampSearchSplitWidth } from "@/lib/dataGrid/dataGridSearchSplit";
|
||||
import { MAX_RESULT_PAGE_SIZE, MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize";
|
||||
import { allNullColumnIndexes, filterColumnVisibilityOptions, hiddenColumnIndexesWithAllNullColumns, invertedHiddenColumnIndexes, nextHiddenColumnIndexes, removeAutoHiddenColumnIndexes, visibleColumnIndexesForFilter } from "@/lib/dataGrid/dataGridColumnVisibility";
|
||||
import { buildDataGridColumnLookupItems, filterDataGridColumnLookupItems } from "@/lib/dataGrid/dataGridColumnLookup";
|
||||
import { columnOrderKeysForIndexes, isDefaultColumnOrder, moveVisibleColumnIndex, orderedColumnIndexes, uniqueDataGridColumnOrderKeys } from "@/lib/dataGrid/dataGridColumnOrder";
|
||||
import { dataGridColumnLayoutScopeKey, loadDataGridColumnOrder, removeDataGridColumnOrder, saveDataGridColumnOrder } from "@/lib/dataGrid/dataGridColumnLayoutStorage";
|
||||
import { parseClipboardTable, summarizeSelection } from "@/lib/dataGrid/gridSelection";
|
||||
@@ -2497,16 +2498,15 @@ const displayableColumnIndexes = computed(() =>
|
||||
.map(({ index }) => index),
|
||||
);
|
||||
const goToColumnItems = computed(() =>
|
||||
displayableColumnIndexes.value.map((index) => ({
|
||||
index,
|
||||
name: props.result.columns[index] ?? `#${index + 1}`,
|
||||
sourceName: props.sourceColumns?.[index],
|
||||
})),
|
||||
buildDataGridColumnLookupItems({
|
||||
columns: props.result.columns,
|
||||
sourceColumns: props.sourceColumns,
|
||||
displayableIndexes: displayableColumnIndexes.value,
|
||||
commentByColumn: columnCommentMap.value,
|
||||
}),
|
||||
);
|
||||
const filteredGoToColumns = computed(() => {
|
||||
const query = goToColumnSearch.value.trim().toLocaleLowerCase();
|
||||
if (!query) return goToColumnItems.value;
|
||||
return goToColumnItems.value.filter((column) => column.name.toLocaleLowerCase().includes(query) || column.sourceName?.toLocaleLowerCase().includes(query));
|
||||
return filterDataGridColumnLookupItems(goToColumnItems.value, goToColumnSearch.value);
|
||||
});
|
||||
const orderedDisplayableColumnIndexes = computed(() =>
|
||||
orderedColumnIndexes({
|
||||
@@ -2550,7 +2550,7 @@ const allNullColumnCount = computed(() => allNullColumnIndexesForResult.value.le
|
||||
const canToggleAllNullColumns = computed(() => nullColumnsHidden.value || (allNullColumnCount.value > 0 && displayableColumnCount.value > 1));
|
||||
function filteredColumnVisibilityOptions(query: string) {
|
||||
const displayable = new Set(displayableColumnIndexes.value);
|
||||
return filterColumnVisibilityOptions(props.result.columns, query).filter((option) => displayable.has(option.index));
|
||||
return filterColumnVisibilityOptions(props.result.columns, query, { sourceColumns: props.sourceColumns, commentByColumn: columnCommentMap.value }).filter((option) => displayable.has(option.index));
|
||||
}
|
||||
function isColumnVisible(columnIndex: number): boolean {
|
||||
return !hiddenColumnIndexes.value.has(columnIndex);
|
||||
@@ -8862,9 +8862,10 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
|
||||
</button>
|
||||
</div>
|
||||
<div class="max-h-56 overflow-auto rounded border">
|
||||
<button v-for="column in filteredGoToColumns" :key="column.index" type="button" class="flex w-full items-center gap-1.5 px-2 py-1.5 text-left text-xs hover:bg-accent hover:text-accent-foreground" @click="scrollToColumn(column.index)">
|
||||
<button v-for="column in filteredGoToColumns" :key="column.index" type="button" class="grid w-full grid-cols-[minmax(0,1fr)_auto] items-center gap-x-2 gap-y-0.5 px-2 py-1.5 text-left text-xs hover:bg-accent hover:text-accent-foreground" @click="scrollToColumn(column.index)">
|
||||
<span class="min-w-0 truncate">{{ column.name }}</span>
|
||||
<span class="ml-auto shrink-0 font-mono text-[10px] text-muted-foreground">#{{ column.index + 1 }}</span>
|
||||
<span class="shrink-0 font-mono text-[10px] text-muted-foreground">#{{ column.index + 1 }}</span>
|
||||
<span v-if="column.comment" class="col-span-2 min-w-0 truncate text-[11px] leading-4 text-muted-foreground" :title="column.comment">{{ column.comment }}</span>
|
||||
</button>
|
||||
<div v-if="!filteredGoToColumns.length" class="px-2 py-3 text-center text-xs text-muted-foreground">{{ t("grid.noColumnsFound") }}</div>
|
||||
</div>
|
||||
|
||||
@@ -80,7 +80,7 @@ type DataGridHandle = {
|
||||
visibleColumnCount: number;
|
||||
displayableColumnCount: number;
|
||||
hiddenColumnCount: number;
|
||||
filteredColumnVisibilityOptions: (search: string) => Array<{ index: number; column: string }>;
|
||||
filteredColumnVisibilityOptions: (search: string) => Array<{ index: number; column: string; comment?: string }>;
|
||||
isColumnVisible: (columnIndex: number) => boolean;
|
||||
toggleColumnVisibility: (columnIndex: number) => void;
|
||||
showAllColumns: () => void;
|
||||
@@ -1179,7 +1179,10 @@ defineExpose({ focusSearch, refreshData, handleModRTarget, requestQueryEditorExe
|
||||
<span class="flex h-4 w-4 items-center justify-center rounded border" :class="dataGridRef?.isColumnVisible(option.index) ? 'border-primary bg-primary text-primary-foreground' : 'border-border bg-background text-transparent'">
|
||||
<Check class="h-3 w-3 stroke-[3]" />
|
||||
</span>
|
||||
<span class="truncate font-mono text-xs" :title="option.column">{{ option.column }}</span>
|
||||
<span class="min-w-0">
|
||||
<span class="block truncate font-mono text-xs" :title="option.column">{{ option.column }}</span>
|
||||
<span v-if="option.comment" class="block truncate text-[11px] leading-4 text-muted-foreground" :title="option.comment">{{ option.comment }}</span>
|
||||
</span>
|
||||
</button>
|
||||
<div v-if="columnVisibilityOptions.length === 0" class="px-2 py-6 text-center text-xs text-muted-foreground">
|
||||
{{ t("grid.noSearchResults") }}
|
||||
|
||||
Reference in new issue
Block a user