mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-05-05 22:03:16 -04:00
70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline';
|
|
import { useBridgeMutation, useBridgeQuery } from '@sd/client';
|
|
import { LibraryConfigWrapped } from '@sd/client';
|
|
import { Button, ButtonLink, Card } from '@sd/ui';
|
|
import { DotsSixVertical } from 'phosphor-react';
|
|
import { useState } from 'react';
|
|
|
|
import CreateLibraryDialog from '../../../components/dialog/CreateLibraryDialog';
|
|
import DeleteLibraryDialog from '../../../components/dialog/DeleteLibraryDialog';
|
|
import { SettingsContainer } from '../../../components/settings/SettingsContainer';
|
|
import { SettingsHeader } from '../../../components/settings/SettingsHeader';
|
|
|
|
function LibraryListItem(props: { library: LibraryConfigWrapped }) {
|
|
const [openDeleteModal, setOpenDeleteModal] = useState(false);
|
|
|
|
const deleteLibrary = useBridgeMutation('library.delete', {
|
|
onSuccess: () => {
|
|
setOpenDeleteModal(false);
|
|
}
|
|
});
|
|
|
|
return (
|
|
<Card>
|
|
<DotsSixVertical weight="bold" className="mt-[15px] mr-3 opacity-30" />
|
|
<div className="flex-1 my-0.5">
|
|
<h3 className="font-semibold">{props.library.config.name}</h3>
|
|
<p className="mt-0.5 text-xs text-ink-dull">{props.library.uuid}</p>
|
|
</div>
|
|
<div className="flex flex-row items-center space-x-2">
|
|
<ButtonLink size="icon" to="/settings/library" variant="gray">
|
|
<PencilIcon className="w-4 h-4" />
|
|
</ButtonLink>
|
|
<DeleteLibraryDialog libraryUuid={props.library.uuid}>
|
|
<Button size="icon" variant="gray">
|
|
<TrashIcon className="w-4 h-4" />
|
|
</Button>
|
|
</DeleteLibraryDialog>
|
|
</div>
|
|
</Card>
|
|
);
|
|
}
|
|
|
|
export default function LibrarySettings() {
|
|
const { data: libraries } = useBridgeQuery(['library.list']);
|
|
|
|
return (
|
|
<SettingsContainer>
|
|
<SettingsHeader
|
|
title="Libraries"
|
|
description="The database contains all library data and file metadata."
|
|
rightArea={
|
|
<div className="flex-row space-x-2">
|
|
<CreateLibraryDialog>
|
|
<Button variant="accent" size="sm">
|
|
Add Library
|
|
</Button>
|
|
</CreateLibraryDialog>
|
|
</div>
|
|
}
|
|
/>
|
|
|
|
<div className="space-y-2">
|
|
{libraries?.map((library) => (
|
|
<LibraryListItem key={library.uuid} library={library} />
|
|
))}
|
|
</div>
|
|
</SettingsContainer>
|
|
);
|
|
}
|