diff --git a/web/src/components/devops/DevopsConnectForm.vue b/web/src/components/devops/DevopsConnectForm.vue index 14f0ecc..d8ea222 100644 --- a/web/src/components/devops/DevopsConnectForm.vue +++ b/web/src/components/devops/DevopsConnectForm.vue @@ -3,6 +3,7 @@ import { ref } from 'vue' import { useDevopsStore } from '@/stores/devops' import Input from '@/components/ui/Input.vue' import Button from '@/components/ui/Button.vue' +import ConfirmDialog from '@/components/ui/ConfirmDialog.vue' import { toast } from 'vue-sonner' const devopsStore = useDevopsStore() @@ -11,6 +12,7 @@ const adoOrg = ref(devopsStore.integration?.organization ?? '') const adoProject = ref(devopsStore.integration?.project ?? '') const adoPat = ref('') const saving = ref(false) +const showDisconnectConfirm = ref(false) async function save() { if (!adoOrg.value || !adoProject.value || !adoPat.value) { @@ -34,7 +36,6 @@ async function save() { } async function remove() { - if (!confirm('Delete ADO integration?')) return try { await devopsStore.deleteIntegration() adoOrg.value = '' @@ -88,10 +89,20 @@ async function remove() { v-if="devopsStore.integration" variant="destructive" size="sm" - @click="remove" + @click="showDisconnectConfirm = true" > Disconnect + + diff --git a/web/src/views/DevopsView.vue b/web/src/views/DevopsView.vue index 07fd728..fe93949 100644 --- a/web/src/views/DevopsView.vue +++ b/web/src/views/DevopsView.vue @@ -10,6 +10,8 @@ import Button from '@/components/ui/Button.vue' import Spinner from '@/components/ui/Spinner.vue' import DataTable from '@/components/ui/DataTable.vue' import type { TableColumn } from '@/components/ui/DataTable.vue' +import SegmentedControl from '@/components/ui/SegmentedControl.vue' +import Tooltip from '@/components/ui/Tooltip.vue' import DevopsConnectForm from '@/components/devops/DevopsConnectForm.vue' import { toast } from 'vue-sonner' @@ -19,6 +21,13 @@ type StateFilter = 'All' | 'Active' | 'Resolved' | 'Closed' const stateFilter = ref('All') const cloningId = ref(null) +const stateOptions = [ + { value: 'All', label: 'All' }, + { value: 'Active', label: 'Active' }, + { value: 'Resolved', label: 'Resolved' }, + { value: 'Closed', label: 'Closed' }, +] + onMounted(async () => { await devopsStore.fetchIntegration() if (devopsStore.integration) { @@ -71,19 +80,18 @@ function priorityClass(p: number | null | undefined) { const v = p ?? 3 if (v <= 1) return 'text-red-500 font-bold' if (v <= 2) return 'text-amber-500 font-semibold' - return 'text-slate-400' + return 'text-muted-foreground' } function stateClass(s: string) { if (s === 'Active' || s === 'Doing' || s === 'In Progress') return 'bg-blue-50 text-blue-600 border border-blue-100' if (s === 'Resolved' || s === 'Done' || s === 'Closed') return 'bg-emerald-50 text-emerald-600 border border-emerald-100' - if (s === 'New') return 'bg-slate-50 text-slate-500 border border-slate-200' - return 'bg-slate-50 text-slate-500 border border-slate-200' + return 'bg-muted text-muted-foreground border border-border' }