mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-04-29 19:03:03 -04:00
* more translation keys * added i18n keys for future ObjectKindEnum translation * more keys * added more keys * synced all new translation keys with all languages, translated keys on Belarusian and Russian * added translation for objectkinds in overview * added translation function for objectkinds * added more keys to german locale * renamed 'asc' and 'desc' keys * rolled back changes * added missed key * there are much more keys, than you can imagine * fixed misspelling * removed console.log * removed function "pluralize", added required plural words keys for each language * fixed condition, which could've lead to undefined value * hide filter description for boolean filters
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import { Gear, Lock, Plus } from '@phosphor-icons/react';
|
|
import clsx from 'clsx';
|
|
import { useClientContext } from '@sd/client';
|
|
import { dialogManager, Dropdown, DropdownMenu } from '@sd/ui';
|
|
import { useLocale } from '~/hooks';
|
|
|
|
import CreateDialog from '../../../settings/node/libraries/CreateDialog';
|
|
import { useSidebarContext } from './Context';
|
|
|
|
export default () => {
|
|
const { library, libraries, currentLibraryId } = useClientContext();
|
|
|
|
const sidebar = useSidebarContext();
|
|
|
|
const { t } = useLocale();
|
|
|
|
return (
|
|
<DropdownMenu.Root
|
|
trigger={
|
|
<Dropdown.Button
|
|
variant="gray"
|
|
className={clsx(
|
|
`w-full text-sidebar-ink`,
|
|
// these classname overrides are messy
|
|
// but they work
|
|
`!border-sidebar-line/50 !bg-sidebar-box ring-offset-sidebar active:!border-sidebar-line active:!bg-sidebar-button ui-open:!border-sidebar-line ui-open:!bg-sidebar-button`,
|
|
(library === null || libraries.isLoading) && '!text-sidebar-inkFaint'
|
|
)}
|
|
>
|
|
<span className="truncate">
|
|
{libraries.isLoading
|
|
? `${t('loading')}...`
|
|
: library
|
|
? library.config.name
|
|
: ' '}
|
|
</span>
|
|
</Dropdown.Button>
|
|
}
|
|
// we override the sidebar dropdown item's hover styles
|
|
// because the dark style clashes with the sidebar
|
|
className="z-[100] mt-1 shadow-none data-[side=bottom]:slide-in-from-top-2 dark:divide-menu-selected/30 dark:border-sidebar-line dark:bg-sidebar-box"
|
|
alignToTrigger
|
|
// Timeout because of race conditions when opening the dropdown from a open popover.
|
|
onOpenChange={(open) => setTimeout(() => sidebar.onLockedChange(open))}
|
|
>
|
|
{libraries.data?.map((lib) => (
|
|
<DropdownMenu.Item
|
|
to={`/${lib.uuid}`}
|
|
key={lib.uuid}
|
|
selected={lib.uuid === currentLibraryId}
|
|
>
|
|
<p className="truncate">{lib.config.name}</p>
|
|
</DropdownMenu.Item>
|
|
))}
|
|
<DropdownMenu.Separator className="mx-0" />
|
|
<DropdownMenu.Item
|
|
label={t('new_library')}
|
|
icon={Plus}
|
|
iconProps={{ weight: 'bold', size: 16 }}
|
|
onClick={() => dialogManager.create((dp) => <CreateDialog {...dp} />)}
|
|
className="font-medium"
|
|
/>
|
|
<DropdownMenu.Item
|
|
label={t('manage_library')}
|
|
icon={Gear}
|
|
iconProps={{ weight: 'bold', size: 16 }}
|
|
to="settings/library/general"
|
|
className="font-medium"
|
|
/>
|
|
{/* <DropdownMenu.Item
|
|
label={t('lock')}
|
|
icon={Lock}
|
|
iconProps={{ weight: 'bold', size: 16 }}
|
|
onClick={() => alert('TODO: Not implemented yet!')}
|
|
className="font-medium"
|
|
/> */}
|
|
</DropdownMenu.Root>
|
|
);
|
|
};
|