Files
004.erp.generic/frontend/src/components/layout/TaskCalendarPortal.jsx
mariomitte fe7edf5643 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>
2026-07-19 15:27:20 +02:00

51 lines
1.6 KiB
JavaScript

import { useMemo } from 'preact/hooks';
import { useStore } from '@nanostores/preact';
import { $tasks } from '../../stores/taskStore';
import { $user } from '../../stores/authStore';
import TaskCalendarWidget from '../dashboard/TaskCalendarWidget';
/**
* Mountan u Layout.astro (van AnimatedPage transforma) pa fixed pozicija
* uvijek ostaje uz viewport rub.
*
* Filtriranje taskova po ulozi:
* - Serviser → samo taskovi dodijeljeni njemu
* - Supervisor (nije serviser) → svi taskovi
*
* Kad korisnik klikne task u kalendaru, šaljemo custom event koji
* FleetDashboardShell sluša i otvara TaskServiceRecordsModal.
*/
export default function TaskCalendarPortal() {
const allTasks = useStore($tasks);
const user = useStore($user);
const isServiser = Boolean(user?.is_serviser);
const isTeamMember = Boolean(user?.is_team_member);
const isSupervisorNotServiser = isTeamMember && !isServiser;
const tasks = useMemo(() => {
if (!user?.id) return [];
// Supervisor vidi sve; serviser vidi samo svoje
if (isSupervisorNotServiser) return allTasks;
return allTasks.filter(
(t) => String(t.assigned_to || '') === String(user.id)
);
}, [allTasks, user, isSupervisorNotServiser]);
// Ne renderiramo ništa ako korisnik nije prijavljen
if (!user?.id) return null;
function handleTaskClick(task) {
window.dispatchEvent(
new CustomEvent('calendar:open-task', { detail: { task } })
);
}
return (
<TaskCalendarWidget
tasks={tasks}
onTaskClick={handleTaskClick}
/>
);
}