carnet panel contact
This commit is contained in:
parent
c15c615428
commit
3e3c077cf8
@ -73,33 +73,15 @@ export default function CarnetPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchNextcloudFolders = async () => {
|
const fetchNextcloudFolders = async () => {
|
||||||
// Check cache first
|
|
||||||
if (foldersCache.current) {
|
|
||||||
const cacheAge = Date.now() - foldersCache.current.timestamp;
|
|
||||||
if (cacheAge < 5 * 60 * 1000) { // 5 minutes cache
|
|
||||||
setNextcloudFolders(foldersCache.current.folders);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/api/nextcloud/status');
|
const response = await fetch('/api/nextcloud/files?folder=Contacts');
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error('Failed to fetch Nextcloud folders');
|
throw new Error('Failed to fetch folders');
|
||||||
}
|
}
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
const folders = data.folders || [];
|
setNextcloudFolders(data);
|
||||||
|
} catch (error) {
|
||||||
// Update cache
|
console.error('Error fetching folders:', error);
|
||||||
foldersCache.current = {
|
|
||||||
folders,
|
|
||||||
timestamp: Date.now()
|
|
||||||
};
|
|
||||||
|
|
||||||
setNextcloudFolders(folders);
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Error fetching Nextcloud folders:', err);
|
|
||||||
setNextcloudFolders([]);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -561,6 +543,45 @@ export default function CarnetPage() {
|
|||||||
return formatVCard(vcard);
|
return formatVCard(vcard);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleCreateGroup = async (groupName: string) => {
|
||||||
|
if (!session?.user?.id) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
setIsLoading(true);
|
||||||
|
|
||||||
|
// Create a new empty VCF file for the group
|
||||||
|
const basePath = `/files/cube-${session.user.id}/Private/Contacts`;
|
||||||
|
const vcfFile = `${groupName}.vcf`;
|
||||||
|
const path = `${basePath}/${vcfFile}`;
|
||||||
|
|
||||||
|
// Create an empty VCF file
|
||||||
|
const saveResponse = await fetch('/api/nextcloud/files', {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
id: path,
|
||||||
|
title: vcfFile,
|
||||||
|
content: '', // Empty VCF file
|
||||||
|
folder: 'Contacts',
|
||||||
|
mime: 'text/vcard'
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!saveResponse.ok) {
|
||||||
|
throw new Error('Failed to create group');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh the folders list to show the new group
|
||||||
|
await fetchNextcloudFolders();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error creating group:', error);
|
||||||
|
} finally {
|
||||||
|
setIsLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
return (
|
return (
|
||||||
<div className="flex h-screen items-center justify-center">
|
<div className="flex h-screen items-center justify-center">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user