import React from "react"; import classnames from "classnames"; import { useTranslation } from "react-i18next"; import { getHttpHighlightClient } from "@/http/highlight"; import { getHttpBookmarkClient } from "@/http/bookmark"; import { useUser } from "@/services/user"; import { pushAlert } from "@/services/alert"; import { timelineVisibilityTooltipTranslationMap } from "@/services/timeline"; import { useIsSmallScreen } from "@/utilities/mediaQuery"; import { TimelinePageCardProps } from "./TimelinePageTemplate"; import CollapseButton from "./CollapseButton"; import { TimelineMemberDialog } from "./TimelineMember"; import TimelinePropertyChangeDialog from "./TimelinePropertyChangeDialog"; import ConnectionStatusBadge from "./ConnectionStatusBadge"; import { MenuItems, PopupMenu } from "../common/Menu"; import FullPageDialog from "../common/dailog/FullPageDialog"; import Card from "../common/Card"; export interface TimelineCardTemplateProps extends TimelinePageCardProps { infoArea: React.ReactElement; manageItems?: MenuItems; dialog: string | "property" | "member" | null; setDialog: (dialog: "property" | "member" | null) => void; } const TimelinePageCardTemplate: React.FC = ({ timeline, collapse, toggleCollapse, infoArea, manageItems, connectionStatus, onReload, className, dialog, setDialog, }) => { const { t } = useTranslation(); const isSmallScreen = useIsSmallScreen(); const user = useUser(); const content = ( <> {infoArea}

{timeline.description}

{t(timelineVisibilityTooltipTranslationMap[timeline.visibility])}
{ getHttpHighlightClient() [timeline.isHighlight ? "delete" : "put"](timeline.name) .then(onReload, () => { pushAlert({ message: timeline.isHighlight ? "timeline.removeHighlightFail" : "timeline.addHighlightFail", type: "danger", }); }); } : undefined } /> {user != null ? ( { getHttpBookmarkClient() [timeline.isBookmark ? "delete" : "put"](timeline.name) .then(onReload, () => { pushAlert({ message: timeline.isBookmark ? "timeline.removeBookmarkFail" : "timeline.addBookmarkFail", type: "danger", }); }); }} /> ) : null} setDialog("member")} /> {manageItems != null ? ( ) : null}
); return ( <>
{isSmallScreen ? ( {content} ) : (
{content}
)}
{(() => { if (dialog === "member") { return ( setDialog(null)} open onChange={onReload} /> ); } else if (dialog === "property") { return ( setDialog(null)} open onChange={onReload} /> ); } })()} ); }; export default TimelinePageCardTemplate;