CLRF to LF
Build check / build (pull_request) Has been cancelled

This commit is contained in:
devteabct78
2026-06-29 17:45:57 +03:00
parent 4fa0e014a9
commit b624443fa1
2 changed files with 1637 additions and 1637 deletions
+92 -92
View File
@@ -1,92 +1,92 @@
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { Globe } from 'lucide-react'; import { Globe } from 'lucide-react';
import { createPortal } from 'react-dom'; import { createPortal } from 'react-dom';
import cls from 'classnames'; import cls from 'classnames';
import { api } from '~renderer/utils/api'; import { api } from '~renderer/utils/api';
import { useLocale } from '~renderer/i18n'; import { useLocale } from '~renderer/i18n';
import { type Lang } from '~renderer/i18n/translations'; import { type Lang } from '~renderer/i18n/translations';
const LOCALES: { value: Lang; code: string; label: string }[] = [ const LOCALES: { value: Lang; code: string; label: string }[] = [
{ value: 'enUS', code: 'En', label: 'English' }, { value: 'enUS', code: 'En', label: 'English' },
{ value: 'deDE', code: 'De', label: 'Deutsch' }, { value: 'deDE', code: 'De', label: 'Deutsch' },
{ value: 'zhCN', code: 'Zh', label: '中文' }, { value: 'zhCN', code: 'Zh', label: '中文' },
{ value: 'esES', code: 'Es', label: 'Español' }, { value: 'esES', code: 'Es', label: 'Español' },
{ value: 'ptBR', code: 'Pt', label: 'Português' }, { value: 'ptBR', code: 'Pt', label: 'Português' },
{ value: 'ruRU', code: 'Ru', label: 'Русский' }, { value: 'ruRU', code: 'Ru', label: 'Русский' },
{ value: 'trTR', code: 'Tr', label: 'Türkçe' } { value: 'trTR', code: 'Tr', label: 'Türkçe' }
]; ];
const LanguageDropdown = () => { const LanguageDropdown = () => {
const { lang, setLang, t } = useLocale(); const { lang, setLang, t } = useLocale();
const setPref = api.preferences.set.useMutation(); const setPref = api.preferences.set.useMutation();
const code = LOCALES.find(l => l.value === lang)?.code ?? 'En'; const code = LOCALES.find(l => l.value === lang)?.code ?? 'En';
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [pos, setPos] = useState<{ top: number; right: number }>(); const [pos, setPos] = useState<{ top: number; right: number }>();
const btnRef = useRef<HTMLButtonElement>(null); const btnRef = useRef<HTMLButtonElement>(null);
const toggle = () => { const toggle = () => {
const r = btnRef.current?.getBoundingClientRect(); const r = btnRef.current?.getBoundingClientRect();
if (r) setPos({ top: r.bottom + 4, right: window.innerWidth - r.right }); if (r) setPos({ top: r.bottom + 4, right: window.innerWidth - r.right });
setOpen(o => !o); setOpen(o => !o);
}; };
useEffect(() => { useEffect(() => {
if (!open) return; if (!open) return;
const close = () => setOpen(false); const close = () => setOpen(false);
window.addEventListener('click', close); window.addEventListener('click', close);
return () => window.removeEventListener('click', close); return () => window.removeEventListener('click', close);
}, [open]); }, [open]);
const pick = (v: Lang) => { const pick = (v: Lang) => {
setLang(v); setLang(v);
setPref.mutate({ locale: v }); setPref.mutate({ locale: v });
setOpen(false); setOpen(false);
}; };
return ( return (
<> <>
<button <button
ref={btnRef} ref={btnRef}
type="button" type="button"
title={t('topbar.language')} title={t('topbar.language')}
onClick={e => { onClick={e => {
e.stopPropagation(); e.stopPropagation();
toggle(); toggle();
}} }}
className="bg-transparent flex cursor-pointer items-center border-0 px-1 text-[12px] tracking-wide hocus:text-orange" className="bg-transparent flex cursor-pointer items-center border-0 px-1 text-[12px] tracking-wide hocus:text-orange"
> >
<Globe size={14} /> <Globe size={14} />
{code} {code}
</button> </button>
{open && {open &&
pos && pos &&
createPortal( createPortal(
<div <div
onClick={e => e.stopPropagation()} onClick={e => e.stopPropagation()}
style={{ top: pos.top, right: pos.right }} style={{ top: pos.top, right: pos.right }}
className="fixed z-50 flex flex-col border border-blueGray/30 bg-darkGray py-1 shadow-[0_8px_20px_rgba(0,0,0,0.5)]" className="fixed z-50 flex flex-col border border-blueGray/30 bg-darkGray py-1 shadow-[0_8px_20px_rgba(0,0,0,0.5)]"
> >
{LOCALES.map(l => ( {LOCALES.map(l => (
<button <button
key={l.value} key={l.value}
type="button" type="button"
title={l.label} title={l.label}
onClick={() => pick(l.value)} onClick={() => pick(l.value)}
className={cls( className={cls(
'bg-transparent cursor-pointer border-0 px-3 py-1 text-center text-[12px] hocus:bg-orange/20', 'bg-transparent cursor-pointer border-0 px-3 py-1 text-center text-[12px] hocus:bg-orange/20',
l.value === lang ? 'text-warmGreen' : 'text-white' l.value === lang ? 'text-warmGreen' : 'text-white'
)} )}
> >
{l.code} {l.code}
</button> </button>
))} ))}
</div>, </div>,
document.body document.body
)} )}
</> </>
); );
}; };
export default LanguageDropdown; export default LanguageDropdown;
File diff suppressed because it is too large Load Diff