diff --git a/src/app/(authenticated)/dashboard/page.tsx b/src/app/(authenticated)/dashboard/page.tsx index 9b0258f..cf7defd 100644 --- a/src/app/(authenticated)/dashboard/page.tsx +++ b/src/app/(authenticated)/dashboard/page.tsx @@ -1,168 +1,220 @@ -"use client" +"use client"; -import { MainCarousel } from "@/components/dashboard/main-carousel" -import { BirthdaysCarousel } from "@/components/dashboard/birthdays-carousel" -import { api } from "@/trpc/react" -import { cn } from "@/lib/utils" -import { LinkIcon, LucideGraduationCap, Coffee, Sparkles, LucideMegaphone } from "lucide-react" -import { motion } from "framer-motion" -import { VideosCarousel } from "@/components/dashboard/videos-carousel" -import Link from "next/link" -import { NewsDisplay } from "@/components/dashboard/news-displ" -import { routeItems, type RouteItem } from "@/const/routes" -import { canViewHallEntrada } from "@/lib/access-control" -import { FaInstagram, FaFacebook, FaYoutube } from "react-icons/fa6" -import Image from "next/image" -import { DashboardShell } from "@/components/ui/dashboard-shell" +import { MainCarousel } from "@/components/dashboard/main-carousel"; +import { BirthdaysCarousel } from "@/components/dashboard/birthdays-carousel"; +import { api } from "@/trpc/react"; +import { cn } from "@/lib/utils"; +import { + LinkIcon, + LucideGraduationCap, + Coffee, + Sparkles, + LucideMegaphone, +} from "lucide-react"; +import { motion } from "framer-motion"; +import { VideosCarousel } from "@/components/dashboard/videos-carousel"; +import Link from "next/link"; +import { NewsDisplay } from "@/components/dashboard/news-displ"; +import { routeItems, type RouteItem } from "@/const/routes"; +import { canViewHallEntrada } from "@/lib/access-control"; +import { FaInstagram, FaFacebook, FaYoutube } from "react-icons/fa6"; +import Image from "next/image"; +import { DashboardShell } from "@/components/ui/dashboard-shell"; -import { SuggestionsWrapper } from "./suggestions-wrapper" -import { CompleteProfileModal } from "@/components/ui/complete-profile-modal" -import { WelcomeCard } from "@/components/dashboard/welcome-card" -import { EmotionRulerWrapper } from "@/components/emotion-ruler/emotion-ruler-wrapper" -import { useState, useEffect, useMemo } from "react" +import { SuggestionsWrapper } from "./suggestions-wrapper"; +import { CompleteProfileModal } from "@/components/ui/complete-profile-modal"; +import { WelcomeCard } from "@/components/dashboard/welcome-card"; +import { EmotionRulerWrapper } from "@/components/emotion-ruler/emotion-ruler-wrapper"; +import { useState, useEffect, useMemo } from "react"; // Variantes de animação para o footer const fadeInUp = { hidden: { opacity: 0, y: 20 }, - visible: { opacity: 1, y: 0 } -} + visible: { opacity: 1, y: 0 }, +}; const transitionDefault = { duration: 0.5, - ease: [0.4, 0, 0.2, 1] as const -} + ease: [0.4, 0, 0.2, 1] as const, +}; export default function DashboardPage() { - const [showProfileModal, setShowProfileModal] = useState(false) + const [showProfileModal, setShowProfileModal] = useState(false); // Buscar dados usando client-side tRPC - const { data: birthdays } = api.birthday.listCurrentMonth.useQuery() - const { data: user, refetch: refetchUser } = api.user.me.useQuery() + const { data: birthdays } = api.birthday.listCurrentMonth.useQuery(); + const { data: user, refetch: refetchUser } = api.user.me.useQuery(); // Tipagem para os dados do usuário // Removido: userRole não é mais necessário com novo sistema - const userEnterprise = user?.enterprise ?? null - const userSetor = user?.setor ?? null - const userMatricula = user?.matricula ?? null - const userFilialId = user?.filialId ?? null - const isFilialEnterprise = userEnterprise === "Box_Filial" || userEnterprise === "Cristallux_Filial" - const isTotem = user?.role_config?.isTotem === true + const userEnterprise = user?.enterprise ?? null; + const userSetor = user?.setor ?? null; + const userMatricula = user?.matricula ?? null; + const userFilialId = user?.filialId ?? null; + const isFilialEnterprise = + userEnterprise === "Box_Filial" || userEnterprise === "Cristallux_Filial"; + const isTotem = user?.role_config?.isTotem === true; // Verificar se os campos obrigatórios estão preenchidos (filial apenas para empresas do tipo filial) useEffect(() => { - if (user && (!userMatricula?.trim() || !userEnterprise || !userSetor || (isFilialEnterprise && !userFilialId))) { - setShowProfileModal(true) + if ( + user && + (!userMatricula?.trim() || + !userEnterprise || + !userSetor || + (isFilialEnterprise && !userFilialId)) + ) { + setShowProfileModal(true); } - }, [user, userMatricula, userEnterprise, userSetor, userFilialId, isFilialEnterprise]) + }, [ + user, + userMatricula, + userEnterprise, + userSetor, + userFilialId, + isFilialEnterprise, + ]); const todayBirthdays = useMemo(() => { if (!birthdays) { - return [] + return []; } // Ajustar para usar o dia anterior (dia 09 ao invés do dia 10) - const today = new Date() - today.setDate(today.getDate() - 1) // SPE - FAMOSA GAMBIARRA - const currentDay = today.getDate() - const currentMonth = today.getMonth() + const today = new Date(); + today.setDate(today.getDate() - 1); // SPE - FAMOSA GAMBIARRA + const currentDay = today.getDate(); + const currentMonth = today.getMonth(); return birthdays.filter((birthday) => { - const birthdayDate = new Date(birthday.data) + const birthdayDate = new Date(birthday.data); return ( birthdayDate.getDate() === currentDay && birthdayDate.getMonth() === currentMonth - ) - }) - }, [birthdays]) + ); + }); + }, [birthdays]); - const hasTodayBirthdays = todayBirthdays.length > 0 + const hasTodayBirthdays = todayBirthdays.length > 0; const announcementShortcuts = useMemo(() => { - const routes = routeItems(user?.role_config, false, user?.novidades === true) - const group = routes.find((m) => m.title === "Anúncios") + const routes = routeItems( + user?.role_config, + false, + user?.novidades === true, + ); + const group = routes.find((m) => m.title === "Anúncios"); const withHref = - group?.children?.filter((c): c is RouteItem & { href: string } => Boolean(c.href)) ?? [] + group?.children?.filter((c): c is RouteItem & { href: string } => + Boolean(c.href), + ) ?? []; return withHref.filter((c) => { if (c.href === "/forms/hall-entrada") { - return canViewHallEntrada(user?.role_config ?? null) + return canViewHallEntrada(user?.role_config ?? null); } - return true - }) - }, [user?.role_config, user?.novidades]) + return true; + }); + }, [user?.role_config, user?.novidades]); const posts: { - imageRef: string, - title: string, + imageRef: string; + title: string; }[] = [ - { - imageRef: '/banners/Banners-intranet-1.png', - title: 'Banners-intranet-1', - }, - { - imageRef: '/banners/Banners-intranet-2.png', - title: 'Banners-intranet-2', - }, - { - imageRef: '/banners/Banners-intranet-4.png', - title: 'Banners-intranet-4', - }, - { - imageRef: '/banners/Banners-intranet-6.jpg', - title: 'Banners-intranet-6', - }, - ] + { + imageRef: "/banners/Banners-intranet-1.png", + title: "Banners-intranet-1", + }, + { + imageRef: "/banners/Banners-intranet-2.png", + title: "Banners-intranet-2", + }, + { + imageRef: "/banners/Banners-intranet-4.png", + title: "Banners-intranet-4", + }, + { + imageRef: "/banners/Banners-intranet-6.jpg", + title: "Banners-intranet-6", + }, + ]; const videos: { - imageRef: string, - title: string, + imageRef: string; + title: string; }[] = [ - { - imageRef: 'https://www.youtube.com/embed/AIlQ-EM35UQ?si=RomGdNhQLn6CuzCw', - title: 'Institucional Cristallux', - }, - ] + { + imageRef: "https://www.youtube.com/embed/AIlQ-EM35UQ?si=RomGdNhQLn6CuzCw", + title: "Institucional Cristallux", + }, + { + imageRef: "https://www.youtube.com/embed/nW-_4kfXE4U?si=tFAOWTij0oSkdcCm", + title: "Apresentação Box Distribuidor", + }, + { + imageRef: "https://www.youtube.com/embed/iSdz3gxUpAI", + title: "Valores Grupo RHenz", + }, + ]; return (
+
©️ {new Date().getFullYear()} Elo | Intranet
@@ -397,11 +480,13 @@ export default function DashboardPage() {