- 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>
51 lines
1.6 KiB
JavaScript
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}
|
|
/>
|
|
);
|
|
}
|