feat(structure): add default value quick-pick presets to table designer
This commit is contained in:
1 parent
79700c0b41
commit
30cf9a4e92
8 files changed
+85
-2
No files matched your search
@@ -7,7 +7,7 @@ import { Input } from "@/components/ui/input";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||
import { AlertTriangle, Check, ChevronDown, ChevronUp, Copy, Database, Info, KeyRound, Loader2, Maximize2, Plus, RefreshCw, Save, SlidersHorizontal, Trash2, X } from "@lucide/vue";
|
||||
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
|
||||
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
|
||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
|
||||
import { SearchableSelect } from "@/components/ui/searchable-select";
|
||||
@@ -301,6 +301,68 @@ const indexTypesByDb: Record<string, string[]> = {
|
||||
};
|
||||
const indexTypeOptions = computed(() => (structureCapabilities.value.indexType ? (indexTypesByDb[structureDialect.value] ?? []) : []));
|
||||
|
||||
interface DefaultValuePreset {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
const defaultValuePresets = computed((): DefaultValuePreset[] => {
|
||||
const universal: DefaultValuePreset[] = [
|
||||
{ label: "''", value: "''" },
|
||||
{ label: "NULL", value: "NULL" },
|
||||
{ label: "0", value: "0" },
|
||||
{ label: "1", value: "1" },
|
||||
];
|
||||
|
||||
const dialectPresets: Record<string, DefaultValuePreset[]> = {
|
||||
mysql: [
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "CURRENT_DATE", value: "CURRENT_DATE" },
|
||||
{ label: "CURRENT_TIME", value: "CURRENT_TIME" },
|
||||
],
|
||||
postgres: [
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "CURRENT_DATE", value: "CURRENT_DATE" },
|
||||
{ label: "now()", value: "now()" },
|
||||
{ label: "gen_random_uuid()", value: "gen_random_uuid()" },
|
||||
],
|
||||
sqlite: [
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "CURRENT_DATE", value: "CURRENT_DATE" },
|
||||
{ label: "CURRENT_TIME", value: "CURRENT_TIME" },
|
||||
],
|
||||
duckdb: [
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "CURRENT_DATE", value: "CURRENT_DATE" },
|
||||
],
|
||||
sqlserver: [
|
||||
{ label: "GETDATE()", value: "GETDATE()" },
|
||||
{ label: "GETUTCDATE()", value: "GETUTCDATE()" },
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "NEWID()", value: "NEWID()" },
|
||||
],
|
||||
oracle: [
|
||||
{ label: "SYSDATE", value: "SYSDATE" },
|
||||
{ label: "SYSTIMESTAMP", value: "SYSTIMESTAMP" },
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
],
|
||||
h2: [
|
||||
{ label: "CURRENT_TIMESTAMP", value: "CURRENT_TIMESTAMP" },
|
||||
{ label: "CURRENT_DATE", value: "CURRENT_DATE" },
|
||||
],
|
||||
clickhouse: [
|
||||
{ label: "now()", value: "now()" },
|
||||
{ label: "today()", value: "today()" },
|
||||
],
|
||||
informix: [
|
||||
{ label: "CURRENT", value: "CURRENT" },
|
||||
{ label: "TODAY", value: "TODAY" },
|
||||
],
|
||||
};
|
||||
|
||||
return [...universal, ...(dialectPresets[structureDialect.value] ?? [])];
|
||||
});
|
||||
|
||||
function isPostgresIdentityType(dbType: string | undefined): boolean {
|
||||
return dbType === "postgres" || dbType === "gaussdb" || dbType === "kwdb" || dbType === "opengauss" || dbType === "highgo" || dbType === "vastbase" || dbType === "kingbase";
|
||||
}
|
||||
@@ -1035,7 +1097,21 @@ watch(activeTab, (tab) => {
|
||||
/>
|
||||
</td>
|
||||
<td v-if="columnEditorControls.defaultValue" :class="structureCellClass">
|
||||
<Input v-model="column.defaultValue" :class="structureMonoControlClass" :disabled="isColumnDefaultDisabled(column)" />
|
||||
<div class="flex min-w-0 items-center gap-1">
|
||||
<Input v-model="column.defaultValue" :class="[structureMonoControlClass, 'flex-1']" :disabled="isColumnDefaultDisabled(column)" />
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger as-child>
|
||||
<Button variant="ghost" size="icon" :class="[structureIconButtonClass, 'shrink-0']" :disabled="isColumnDefaultDisabled(column)" :aria-label="t('structureEditor.defaultValuePresets')" :title="t('structureEditor.defaultValuePresets')">
|
||||
<ChevronDown :class="structureIconClass" />
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end" class="max-h-56 min-w-36 overflow-y-auto">
|
||||
<DropdownMenuItem v-for="preset in defaultValuePresets" :key="preset.value" @click="column.defaultValue = preset.value">
|
||||
<code class="font-mono text-[length:var(--structure-font-size)]">{{ preset.label }}</code>
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
</td>
|
||||
<td v-if="columnEditorControls.comment" :class="structureCellClass">
|
||||
<div class="flex min-w-0 items-center gap-1">
|
||||
|
||||
Reference in new issue
Block a user