import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import RepeatIcon from "@mui/icons-material/Repeat"; import SquareRoundedIcon from "@mui/icons-material/SquareRounded"; import VideocamIcon from "@mui/icons-material/Videocam"; import { Box, Button, IconButton, Stack, Typography } from "@mui/material"; import CircularProgress from "@mui/material/CircularProgress"; import { useI18n } from "twake-i18n"; import { useState } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import { AppDispatch } from "../../app/store"; import logo from "../../static/noResult-logo.svg"; import { browserDefaultTimeZone } from "../../utils/timezone"; import { getEventAsync } from "../Calendars/CalendarSlice"; import EventPreviewModal from "../Events/EventDisplayPreview"; import { CalendarEvent } from "../Events/EventsTypes"; import { setView } from "../Settings/SettingsSlice"; import "./searchResult.styl"; const styles = { M3BodyLarge: { fontFamily: "Roboto", fontWeight: 400, fontStyle: "normal", fontSize: "22px", lineHeight: "28px", letterSpacing: "0%", color: "#243B55", }, M3BodyMedium1: { fontFamily: "Inter", fontWeight: 400, fontStyle: "normal", fontSize: "16px", lineHeight: "24px", letterSpacing: "-0.15px", color: "#243B55", }, M3BodyMedium: { fontFamily: "Roboto", fontWeight: 400, fontStyle: "normal", fontSize: "14px", lineHeight: "20px", letterSpacing: "0.25px", verticalAlign: "middle", color: "#8C9CAF", }, M3BodyMedium3: { fontFamily: "Inter", fontWeight: 400, fontSize: "14px", lineHeight: "20px", letterSpacing: "0.25px", verticalAlign: "middle", color: "#8C9CAF", }, M3TitleMedium: { fontFamily: "Roboto", fontWeight: 500, fontStyle: "medium", fontSize: "16px", lineHeight: "24px", letterSpacing: "0.15px", textAlign: "center", verticalAlign: "middle", color: "#243B55", }, }; export default function SearchResultsPage() { const { t } = useI18n(); const dispatch = useAppDispatch(); const { error, loading, hits, results } = useAppSelector( (state) => state.searchResult ); let layout; if (loading) { layout = ( ); } else if (error) { layout = ( {error} ); } else if (!hits) { layout = ( {t("search.noResults")} {t("search.noResults")} {t("search.noResultsSubtitle")} ); } else { layout = ( {results?.map((r: any, idx: number) => ( ))} ); } return ( dispatch(setView("calendar"))} aria-label={t("settings.back")} > {t("search.resultsTitle")} {layout} ); } function ResultItem({ eventData, dispatch, }: { eventData: Record; dispatch: AppDispatch; }) { const { t } = useI18n(); const startDate = new Date(eventData.data.start); const endDate = eventData.data.end ? new Date(eventData.data.end) : startDate; const timeZone = useAppSelector((state) => state.settings.timeZone) ?? browserDefaultTimeZone; const calendar = useAppSelector( (state) => state.calendars.list[ `${eventData.data.userId}/${eventData.data.calendarId}` ] ); const calendarColor = calendar?.color?.light; const [openPreview, setOpenPreview] = useState(false); const handleOpenResult = async (eventData: Record) => { if (calendar) { const event = { URL: eventData._links.self.href, calId: calendar.id, uid: eventData.data.uid, start: eventData.data.start, end: eventData.data.end, allday: eventData.data.allDay, attendee: eventData.data.attendees, class: eventData.data.class, description: eventData.data.description, stamp: eventData.data.dtstamp, location: eventData.data.location, organizer: eventData.data.organizer, title: eventData.data.summary, timezone: timeZone, } as CalendarEvent; await dispatch(getEventAsync(event)); setOpenPreview(true); } }; return ( <> handleOpenResult(eventData)} > {startDate.toLocaleDateString(t("locale"), { day: "2-digit", month: "short", timeZone, })} {startDate.toDateString() !== endDate.toDateString() && ( <> {" - "} {endDate.toLocaleDateString(t("locale"), { day: "2-digit", month: "short", timeZone, })} )} {!eventData.data.allDay && ( {startDate.toLocaleTimeString(t("locale"), { hour: "2-digit", minute: "2-digit", timeZone, })} - {endDate.toLocaleTimeString(t("locale"), { hour: "2-digit", minute: "2-digit", timeZone, })} )} {eventData.data.summary || t("event.untitled")} {eventData.data.isRecurrentMaster && } {(eventData.data.organizer?.cn || eventData.data.organizer?.email) && ( {eventData.data.organizer.cn || eventData.data.organizer.email} )} {eventData.data?.location && ( {eventData.data.location} )} {eventData.data?.description && ( {eventData.data.description.replace(/\n/g, " ")} )} {eventData.data["x-openpaas-videoconference"] && ( )} {calendar && calendar.events[eventData.data.uid] && ( setOpenPreview(false)} /> )} ); }