diff --git a/src/features/providers/ProvidersWorkbenchPage.tsx b/src/features/providers/ProvidersWorkbenchPage.tsx index 65ae42e..aec5742 100644 --- a/src/features/providers/ProvidersWorkbenchPage.tsx +++ b/src/features/providers/ProvidersWorkbenchPage.tsx @@ -183,6 +183,27 @@ export function ProvidersWorkbenchPage() { [showConfirmation, showNotification, t, workbench] ); + const handleToggleDisabled = useCallback( + async (resource: ProviderResource, disabled: boolean) => { + try { + await workbench.toggleDisabled(resource, disabled); + showNotification( + disabled + ? t('providersPage.toast.disabled') + : t('providersPage.toast.enabled'), + 'success' + ); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + showNotification( + `${t('providersPage.toast.toggleFailed')}: ${msg}`, + 'error' + ); + } + }, + [showNotification, t, workbench] + ); + const handleCreated = useCallback(() => { showNotification(t('providersPage.toast.created'), 'success'); closeSheet(); @@ -267,6 +288,7 @@ export function ProvidersWorkbenchPage() { onView={openView} onEdit={openEdit} onDelete={handleDelete} + onToggleDisabled={handleToggleDisabled} onCreate={openCreate} /> diff --git a/src/features/providers/components/ProviderResourcePanel.tsx b/src/features/providers/components/ProviderResourcePanel.tsx index cca4c2c..ee2f398 100644 --- a/src/features/providers/components/ProviderResourcePanel.tsx +++ b/src/features/providers/components/ProviderResourcePanel.tsx @@ -29,6 +29,7 @@ interface ProviderResourcePanelProps { onView: (resource: ProviderResource) => void; onEdit: (resource: ProviderResource) => void; onDelete: (resource: ProviderResource) => void; + onToggleDisabled?: (resource: ProviderResource, disabled: boolean) => void; onCreate: () => void; } @@ -42,6 +43,7 @@ export function ProviderResourcePanel({ onView, onEdit, onDelete, + onToggleDisabled, onCreate, }: ProviderResourcePanelProps) { const { t } = useTranslation(); @@ -128,6 +130,7 @@ export function ProviderResourcePanel({ onView={onView} onEdit={onEdit} onDelete={onDelete} + onToggleDisabled={onToggleDisabled} /> )} diff --git a/src/features/providers/components/ProviderResourceTable.module.scss b/src/features/providers/components/ProviderResourceTable.module.scss index 02fcc66..26f36fc 100644 --- a/src/features/providers/components/ProviderResourceTable.module.scss +++ b/src/features/providers/components/ProviderResourceTable.module.scss @@ -119,9 +119,16 @@ .actions { display: flex; gap: 4px; + align-items: center; justify-content: flex-end; } +.toggleWrap { + display: inline-flex; + align-items: center; + margin-right: 4px; +} + .iconBtn { display: inline-flex; align-items: center; diff --git a/src/features/providers/components/ProviderResourceTable.tsx b/src/features/providers/components/ProviderResourceTable.tsx index c260844..6d96d3e 100644 --- a/src/features/providers/components/ProviderResourceTable.tsx +++ b/src/features/providers/components/ProviderResourceTable.tsx @@ -15,6 +15,7 @@ import { TableHeader, TableRow, } from '@/components/ui/Table'; +import { ToggleSwitch } from '@/components/ui/ToggleSwitch'; import type { ProviderResource } from '../types'; import styles from './ProviderResourceTable.module.scss'; @@ -25,6 +26,7 @@ interface ProviderResourceTableProps { onView: (resource: ProviderResource) => void; onEdit: (resource: ProviderResource) => void; onDelete: (resource: ProviderResource) => void; + onToggleDisabled?: (resource: ProviderResource, disabled: boolean) => void; } const columnWidths = ['20%', '22%', '8%', '22%', '8%', '20%']; @@ -36,6 +38,7 @@ export function ProviderResourceTable({ onView, onEdit, onDelete, + onToggleDisabled, }: ProviderResourceTableProps) { const { t } = useTranslation(); @@ -191,6 +194,25 @@ export function ProviderResourceTable({ {renderStatus(resource)} + {!isAmpcode && onToggleDisabled ? ( + e.stopPropagation()} + > + + onToggleDisabled(resource, !value) + } + ariaLabel={ + resource.disabled + ? t('providersPage.actions.enable') + : t('providersPage.actions.disable') + } + /> + + ) : null}