veza/apps/web/src/components/studio/connectivity-view/useConnectivityView.ts

59 lines
1.5 KiB
TypeScript
Raw Normal View History

import { useState, useCallback } from 'react';
import { useToast } from '@/components/feedback/ToastProvider';
import type { WebhookItem } from './types';
export function useConnectivityView() {
const { addToast } = useToast();
const [webdavPass, setWebdavPass] = useState('****');
const [webhooks, setWebhooks] = useState<WebhookItem[]>([
{
id: '1',
url: 'https://api.myapp.com/hooks/veza',
events: ['file.upload', 'file.delete'],
},
]);
const [newHookUrl, setNewHookUrl] = useState('');
const generateWebdavPass = useCallback(() => {
setWebdavPass(`wd-${Math.random().toString(36).substring(2, 12)}`);
addToast('New WebDAV password generated', 'success');
}, [addToast]);
const addWebhook = useCallback(() => {
if (!newHookUrl.trim()) return;
setWebhooks((prev) => [
...prev,
{
id: Date.now().toString(),
url: newHookUrl.trim(),
events: ['file.upload'],
},
]);
setNewHookUrl('');
addToast('Webhook endpoint added', 'success');
}, [newHookUrl, addToast]);
const removeWebhook = useCallback((id: string) => {
setWebhooks((prev) => prev.filter((h) => h.id !== id));
}, []);
const copyToClipboard = useCallback(
(text: string) => {
navigator.clipboard.writeText(text);
addToast('Copied to clipboard');
},
[addToast],
);
return {
webdavPass,
webhooks,
newHookUrl,
setNewHookUrl,
generateWebdavPass,
addWebhook,
removeWebhook,
copyToClipboard,
};
}