/* Copyright 2024 New Vector Ltd. Copyright 2016-2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React from "react"; import { logger } from "matrix-js-sdk/src/logger"; import NotificationsIcon from "@vector-im/compound-design-tokens/assets/web/icons/notifications"; import { _t } from "../../languageHandler"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import BaseCard from "../views/right_panel/BaseCard"; import TimelinePanel from "./TimelinePanel"; import Spinner from "../views/elements/Spinner"; import { Layout } from "../../settings/enums/Layout"; import RoomContext, { TimelineRenderingType } from "../../contexts/RoomContext"; import Measured from "../views/elements/Measured"; import EmptyState from "../views/right_panel/EmptyState"; import { ScopedRoomContextProvider } from "../../contexts/ScopedRoomContext.tsx"; interface IProps { onClose(): void; } interface IState { narrow: boolean; } /* * Component which shows the global notification list using a TimelinePanel */ export default class NotificationPanel extends React.PureComponent { public static contextType = RoomContext; declare public context: React.ContextType; private card = React.createRef(); public constructor(props: IProps, context: React.ContextType) { super(props, context); this.state = { narrow: false, }; } private onMeasurement = (narrow: boolean): void => { this.setState({ narrow }); }; public render(): React.ReactNode { const emptyState = ( ); let content: JSX.Element; const timelineSet = MatrixClientPeg.safeGet().getNotifTimelineSet(); if (timelineSet) { // wrap a TimelinePanel with the jump-to-event bits turned off. content = ( ); } else { logger.error("No notifTimelineSet available!"); content = ; } return ( {this.card.current && } {content} ); } }