49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import { useState, useTransition } from 'react';
|
|
import { Button } from '@/components/ui/button';
|
|
import { RefreshCw } from 'lucide-react';
|
|
import { triggerPolicySync } from '@/lib/actions/policySettings';
|
|
import { toast } from 'sonner';
|
|
|
|
export function SyncButton() {
|
|
const [isPending, startTransition] = useTransition();
|
|
|
|
const handleSync = () => {
|
|
startTransition(async () => {
|
|
try {
|
|
const result = await triggerPolicySync();
|
|
|
|
if (result.success) {
|
|
toast.success(result.message ?? 'Policy sync triggered successfully');
|
|
} else {
|
|
toast.error(result.error ?? 'Failed to trigger sync');
|
|
}
|
|
} catch (error) {
|
|
toast.error('An unexpected error occurred');
|
|
}
|
|
});
|
|
};
|
|
|
|
return (
|
|
<Button
|
|
onClick={handleSync}
|
|
disabled={isPending}
|
|
variant="default"
|
|
size="default"
|
|
>
|
|
{isPending ? (
|
|
<>
|
|
<RefreshCw className="mr-2 h-4 w-4 animate-spin" />
|
|
Syncing...
|
|
</>
|
|
) : (
|
|
<>
|
|
<RefreshCw className="mr-2 h-4 w-4" />
|
|
Sync Policies
|
|
</>
|
|
)}
|
|
</Button>
|
|
);
|
|
}
|