diff options
Diffstat (limited to 'FrontEnd/src/pages')
-rw-r--r-- | FrontEnd/src/pages/timeline/CollapseButton.tsx | 25 | ||||
-rw-r--r-- | FrontEnd/src/pages/timeline/Timeline.tsx | 4 | ||||
-rw-r--r-- | FrontEnd/src/pages/timeline/TimelineInfoCard.css (renamed from FrontEnd/src/pages/timeline/TimelineCard.css) | 0 | ||||
-rw-r--r-- | FrontEnd/src/pages/timeline/TimelineInfoCard.tsx (renamed from FrontEnd/src/pages/timeline/TimelineCard.tsx) | 97 |
4 files changed, 71 insertions, 55 deletions
diff --git a/FrontEnd/src/pages/timeline/CollapseButton.tsx b/FrontEnd/src/pages/timeline/CollapseButton.tsx deleted file mode 100644 index 1c4fa2ba..00000000 --- a/FrontEnd/src/pages/timeline/CollapseButton.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { CSSProperties } from "react"; - -import IconButton from "~src/components/button/IconButton"; - -export default function CollapseButton({ - collapse, - onClick, - className, - style, -}: { - collapse: boolean; - onClick: () => void; - className?: string; - style?: CSSProperties; -}) { - return ( - <IconButton - color="primary" - icon={collapse ? "arrows-angle-expand" : "arrows-angle-contract"} - onClick={onClick} - className={className} - style={style} - /> - ); -} diff --git a/FrontEnd/src/pages/timeline/Timeline.tsx b/FrontEnd/src/pages/timeline/Timeline.tsx index caf4f502..4fe5c521 100644 --- a/FrontEnd/src/pages/timeline/Timeline.tsx +++ b/FrontEnd/src/pages/timeline/Timeline.tsx @@ -19,7 +19,7 @@ import { useScrollToBottom } from "~src/components/hooks"; import TimelinePostList from "./TimelinePostList"; import TimelinePostEdit from "./TimelinePostCreateView"; -import TimelineCard from "./TimelineCard"; +import TimelineInfoCard from "./TimelineInfoCard"; import "./Timeline.css"; @@ -159,7 +159,7 @@ export function Timeline(props: TimelineProps) { return ( <div className="timeline-container"> {timeline && ( - <TimelineCard + <TimelineInfoCard timeline={timeline} connectionStatus={signalrState} onReload={updateTimeline} diff --git a/FrontEnd/src/pages/timeline/TimelineCard.css b/FrontEnd/src/pages/timeline/TimelineInfoCard.css index 29e59b62..29e59b62 100644 --- a/FrontEnd/src/pages/timeline/TimelineCard.css +++ b/FrontEnd/src/pages/timeline/TimelineInfoCard.css diff --git a/FrontEnd/src/pages/timeline/TimelineCard.tsx b/FrontEnd/src/pages/timeline/TimelineInfoCard.tsx index 1e0e9b75..b1310be9 100644 --- a/FrontEnd/src/pages/timeline/TimelineCard.tsx +++ b/FrontEnd/src/pages/timeline/TimelineInfoCard.tsx @@ -8,38 +8,55 @@ import { getHttpBookmarkClient } from "~src/http/bookmark"; import { pushAlert } from "~src/components/alert"; import { useMobile } from "~src/components/hooks"; -import { Dialog, DialogProvider, useDialog } from "~src/components/dialog"; +import { IconButton } from "~src/components/button"; +import { + Dialog, + FullPageDialog, + DialogProvider, + useDialog, +} from "~src/components/dialog"; import UserAvatar from "~src/components/user/UserAvatar"; import PopupMenu from "~src/components/menu/PopupMenu"; -import FullPageDialog from "~src/components/dialog/FullPageDialog"; import Card from "~src/components/Card"; + import TimelineDeleteDialog from "./TimelineDeleteDialog"; import ConnectionStatusBadge from "./ConnectionStatusBadge"; -import CollapseButton from "./CollapseButton"; import TimelineMember from "./TimelineMember"; import TimelinePropertyChangeDialog from "./TimelinePropertyChangeDialog"; -import IconButton from "~src/components/button/IconButton"; -import "./TimelineCard.css"; +import "./TimelineInfoCard.css"; + +function CollapseButton({ + collapse, + onClick, + className, +}: { + collapse: boolean; + onClick: () => void; + className?: string; +}) { + return ( + <IconButton + color="primary" + icon={collapse ? "info-circle" : "x-circle"} + onClick={onClick} + className={className} + /> + ); +} -interface TimelinePageCardProps { +interface TimelineInfoCardProps { timeline: HttpTimelineInfo; connectionStatus: HubConnectionState; onReload: () => void; } -export default function TimelineCard(props: TimelinePageCardProps) { - const { timeline, connectionStatus, onReload } = props; - +function TimelineInfoContent({ + timeline, + onReload, +}: Omit<TimelineInfoCardProps, "connectionStatus">) { const user = useUser(); - const [collapse, setCollapse] = useState(true); - const toggleCollapse = (): void => { - setCollapse((o) => !o); - }; - - const isMobile = useMobile(); - const { controller, createDialogSwitch } = useDialog({ member: ( <Dialog> @@ -52,7 +69,7 @@ export default function TimelineCard(props: TimelinePageCardProps) { delete: <TimelineDeleteDialog timeline={timeline} />, }); - const content = ( + return ( <div> <h3 className="timeline-card-title"> {timeline.title} @@ -127,8 +144,31 @@ export default function TimelineCard(props: TimelinePageCardProps) { </PopupMenu> )} </div> + <DialogProvider controller={controller} /> </div> ); +} + +export default function TimelineInfoCard(props: TimelineInfoCardProps) { + const { timeline, connectionStatus, onReload } = props; + + const [collapse, setCollapse] = useState(true); + + const isMobile = useMobile((mobile) => { + if (!mobile) { + switchDialog(null); + } else { + setCollapse(true); + } + }); + + const { controller, switchDialog } = useDialog({ + "full-page": ( + <FullPageDialog> + <TimelineInfoContent timeline={timeline} onReload={onReload} /> + </FullPageDialog> + ), + }); return ( <Card @@ -139,18 +179,19 @@ export default function TimelineCard(props: TimelinePageCardProps) { > <div className="timeline-card-top-right-area"> <ConnectionStatusBadge status={connectionStatus} /> - <CollapseButton collapse={collapse} onClick={toggleCollapse} /> + <CollapseButton + collapse={collapse} + onClick={() => { + const open = collapse; + setCollapse(!open); + if (isMobile && open) { + switchDialog("full-page"); + } + }} + /> </div> - {isMobile ? ( - <FullPageDialog - onBack={toggleCollapse} - show={!collapse} - contentContainerClassName="p-2" - > - {content} - </FullPageDialog> - ) : ( - <div style={{ display: collapse ? "none" : "block" }}>{content}</div> + {!collapse && !isMobile && ( + <TimelineInfoContent timeline={timeline} onReload={onReload} /> )} <DialogProvider controller={controller} /> </Card> |