diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index dcebb19c88..6bfd403140 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -62,6 +62,7 @@ import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from " import DangerConfirmDialog from "@/components/editor/DangerConfirmDialog.vue"; import ImagePreviewDialog from "@/components/grid/ImagePreviewDialog.vue"; import TemporalCellEditor from "@/components/grid/TemporalCellEditor.vue"; +import EnumCellEditor from "@/components/grid/EnumCellEditor.vue"; import type { QueryResult, ColumnInfo, DatabaseType, ForeignKeyInfo, IndexInfo, TriggerInfo } from "@/types/database"; import * as api from "@/lib/api"; import { coerceDataGridCellValue, dataGridCellDisplayText, dataGridCellEditorText } from "@/lib/dataGridCellCoercion"; @@ -94,6 +95,7 @@ import { renderWktOnCanvas, isHexGeometry } from "@/lib/geometryPreview"; import { buildDataGridCellDetail, buildDataGridColumnDetail, buildDataGridRowDetail, dataGridColumnDetailJson, dataGridColumnDetailTsv, dataGridRowDetailJson, dataGridRowDetailTsv, filterDataGridDetailFields, type DataGridCellDetail } from "@/lib/dataGridDetail"; import { applyColumnFormatter, buildColumnFormatterKey, normalizeColumnFormatter, resolveColumnFormatter, type ColumnFormatterConfig, type DateTimeFormatterUnit } from "@/lib/columnFormatter"; import { temporalCellEditorKind, type TemporalCellEditorKind } from "@/lib/dataGridTemporalEditor"; +import { isEnumColumn, enumValuesForColumn } from "@/lib/dataGridEnumEditor"; import { isCancelSearchShortcut, isCopyCurrentRowShortcut, isDeleteCurrentRowShortcut, isFocusSearchShortcut, isModRShortcut, isToggleTransposeShortcut } from "@/lib/keyboardShortcuts"; import { dataGridHeaderContentWidth, scrollbarGutterWidth } from "@/lib/dataGridScrollGutter"; import { canGoNextDataGridPage } from "@/lib/dataGridPagination"; @@ -2109,6 +2111,18 @@ function temporalEditorKindForColumn(columnIndex: number): TemporalCellEditorKin return temporalCellEditorKind(tableColumnForGridColumn(columnIndex)?.data_type, props.databaseType); } +function enumValuesForGridColumn(columnIndex: number): string[] { + return enumValuesForColumn(tableColumnForGridColumn(columnIndex)); +} + +function isEnumGridColumn(columnIndex: number): boolean { + return isEnumColumn(tableColumnForGridColumn(columnIndex)); +} + +function isEnumGridColumnNullable(columnIndex: number): boolean { + return tableColumnForGridColumn(columnIndex)?.is_nullable ?? false; +} + function canDeleteRowItem(item: RowItem | undefined): boolean { return !!props.editable && !!item && !item.isDeleted && (item.isNew || canEditExistingRows.value); } @@ -6076,6 +6090,7 @@ const gridContextMenuItems = computed(() => { >