From 010f71e44d0caf9768c295bde3afa45593767bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B8=D0=BC=D0=B8=D0=BD?= Date: Tue, 2 Jun 2026 11:14:48 +0000 Subject: [PATCH] =?UTF-8?q?feat(ui):=20RecordDrawer=20wide-mode=20default?= =?UTF-8?q?=20=D0=BF=D0=BE=20viewport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/record/RecordDrawer.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ordinis-admin-ui/src/components/record/RecordDrawer.tsx b/ordinis-admin-ui/src/components/record/RecordDrawer.tsx index 56d1c2d..603add4 100644 --- a/ordinis-admin-ui/src/components/record/RecordDrawer.tsx +++ b/ordinis-admin-ui/src/components/record/RecordDrawer.tsx @@ -55,12 +55,22 @@ import { cn } from '@/lib/utils' */ const LS_KEY = 'ord-drawer-wide' +// Tailwind lg breakpoint = 1024px. Desktop ≥ lg → wide drawer (880px max +// vs 520px). Mobile < lg → narrow чтобы не давить контент. User-toggle +// persists в localStorage и побеждает auto-detection. +const DESKTOP_BREAKPOINT_PX = 1024 -/** Hook: persisted boolean (drawer wide mode). */ +/** Hook: persisted boolean (drawer wide mode). На первый визит default — + * viewport-aware (desktop wide, mobile collapsed). После toggle'а + * localStorage value побеждает viewport. */ function useDrawerWide(): [boolean, () => void] { const [wide, setWide] = useState(() => { if (typeof window === 'undefined') return false - return window.localStorage.getItem(LS_KEY) === '1' + const stored = window.localStorage.getItem(LS_KEY) + if (stored === '1') return true + if (stored === '0') return false + // First visit: viewport-aware. Desktop = wide, mobile = narrow. + return window.innerWidth >= DESKTOP_BREAKPOINT_PX }) const toggle = useCallback(() => { setWide((prev) => {