fix: premjesti kalendar widget u Layout, popravi PDF toast i Servisi danas

- TaskCalendarPortal u Layout.astro (van AnimatedPage transforma) pa fixed
  pozicija uvijek prati viewport rub bez probijanja sadržaja
- Kalendar widgeta panel koristi clipping wrapper (overflow:hidden + animirana
  width) umjesto translate3d — potpuno skriva sjenu i border kad je zatvoren
- Serviser vidi samo svoje taskove, supervisor vidi sve; neprijavljeni korisnik
  ne vidi widget (return null)
- FleetDashboardShell sluša calendar:open-task event i otvara TaskServiceRecordsModal
- Servisi danas broji Taskove (scheduled_date=danas, status aktivan/servis)
  umjesto Servisnih zapisa
- downloadGeneratedPdfByUrl hvata grešku i prikazuje Toast (npr. PDF nije
  dostupan ili je istekao)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
mariomitte
2026-07-19 15:27:20 +02:00
parent 0c9e1b7d50
commit fe7edf5643
5 changed files with 91 additions and 17 deletions

View File

@@ -27,7 +27,7 @@ export default function TaskCalendarWidget({ tasks = [], onTaskClick }) {
const [selectedDay, setSelectedDay] = useState(null);
const panelSpring = useSpring({
transform: open ? 'translate3d(0%,0,0)' : `translate3d(-100%,0,0)`,
left: open ? 0 : -PANEL_WIDTH,
config: { tension: 260, friction: 28 },
});
@@ -99,11 +99,19 @@ export default function TaskCalendarWidget({ tasks = [], onTaskClick }) {
/>
)}
{/* Sliding panel */}
{/* Clipping wrapper — animates width 0→300, clips shadow+border completely */}
<animated.div
style={{ ...panelSpring, width: `${PANEL_WIDTH}px` }}
className="fixed left-0 top-0 z-[46] flex h-screen flex-col overflow-hidden border-r border-border-hairline bg-canvas-elevated shadow-2xl"
style={{
width: panelSpring.left.to((v) => `${Math.max(0, v + PANEL_WIDTH)}px`),
pointerEvents: open ? 'auto' : 'none',
}}
className="fixed left-0 top-0 z-[46] h-screen overflow-hidden"
>
{/* Inner panel — always 300px, anchored to right edge of wrapper */}
<div
style={{ width: `${PANEL_WIDTH}px` }}
className="absolute right-0 top-0 flex h-full flex-col border-r border-border-hairline bg-canvas-elevated shadow-2xl"
>
{/* Header */}
<div className="flex items-center justify-between border-b border-border-hairline px-4 py-3">
<h2 className="text-sm font-semibold text-text-main">📅 Kalendar zadataka</h2>
@@ -244,6 +252,7 @@ export default function TaskCalendarWidget({ tasks = [], onTaskClick }) {
</>
)}
</div>
</div>
</animated.div>
{/* Toggle tab button — slides right as panel opens */}