carnet panel contact 2
This commit is contained in:
parent
cce84ff69b
commit
5ae91adaec
@ -73,19 +73,33 @@ export default function CarnetPage() {
|
||||
|
||||
useEffect(() => {
|
||||
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 {
|
||||
const response = await fetch('/api/nextcloud/files?folder=Contacts');
|
||||
const response = await fetch('/api/nextcloud/status');
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to fetch folders');
|
||||
throw new Error('Failed to fetch Nextcloud folders');
|
||||
}
|
||||
const data = await response.json();
|
||||
// Filter for VCF files and extract basenames
|
||||
const vcfFiles = data
|
||||
.filter((file: any) => file.basename.endsWith('.vcf'))
|
||||
.map((file: any) => file.basename.replace('.vcf', ''));
|
||||
setNextcloudFolders(vcfFiles);
|
||||
} catch (error) {
|
||||
console.error('Error fetching folders:', error);
|
||||
const folders = data.folders || [];
|
||||
|
||||
// Update cache
|
||||
foldersCache.current = {
|
||||
folders,
|
||||
timestamp: Date.now()
|
||||
};
|
||||
|
||||
setNextcloudFolders(folders);
|
||||
} catch (err) {
|
||||
console.error('Error fetching Nextcloud folders:', err);
|
||||
setNextcloudFolders([]);
|
||||
}
|
||||
};
|
||||
|
||||
@ -547,45 +561,6 @@ export default function CarnetPage() {
|
||||
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) {
|
||||
return (
|
||||
<div className="flex h-screen items-center justify-center">
|
||||
@ -620,24 +595,6 @@ export default function CarnetPage() {
|
||||
{showNotes && (
|
||||
<>
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<div className="flex justify-between items-center mb-4">
|
||||
<h2 className="text-lg font-semibold">
|
||||
{selectedFolder === 'Contacts' ? 'Contact Groups' : 'Content'}
|
||||
</h2>
|
||||
{selectedFolder === 'Contacts' && (
|
||||
<button
|
||||
onClick={() => {
|
||||
const groupName = prompt('Enter group name:');
|
||||
if (groupName) {
|
||||
handleCreateGroup(groupName);
|
||||
}
|
||||
}}
|
||||
className="px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600"
|
||||
>
|
||||
New Group
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
{selectedFolder === 'Contacts' ? (
|
||||
<ContactsView
|
||||
contacts={contacts}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user