From aeed3cb80d8c0a62d0ccc565733c4a213759c5bd Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 13 Feb 2021 16:35:39 +0800 Subject: ... --- .../app/views/timeline-common/TimelineMember.tsx | 22 +++++++++++----------- .../views/timeline-common/TimelinePageTemplate.tsx | 14 +++++++++++--- .../timeline-common/TimelinePageTemplateUI.tsx | 1 - .../TimelinePropertyChangeDialog.tsx | 9 +++++---- 4 files changed, 27 insertions(+), 19 deletions(-) (limited to 'FrontEnd/src/app/views/timeline-common') diff --git a/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx b/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx index dd8c7389..51512f15 100644 --- a/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx +++ b/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx @@ -46,9 +46,10 @@ const TimelineMemberItem: React.FC<{ ); }; -const TimelineMemberUserSearch: React.FC<{ timeline: HttpTimelineInfo }> = ({ - timeline, -}) => { +const TimelineMemberUserSearch: React.FC<{ + timeline: HttpTimelineInfo; + onChange: () => void; +}> = ({ timeline, onChange }) => { const { t } = useTranslation(); const [userSearchText, setUserSearchText] = useState(""); @@ -120,6 +121,7 @@ const TimelineMemberUserSearch: React.FC<{ timeline: HttpTimelineInfo }> = ({ .then(() => { setUserSearchText(""); setUserSearchState({ type: "init" }); + onChange(); }); }} /> @@ -139,14 +141,13 @@ const TimelineMemberUserSearch: React.FC<{ timeline: HttpTimelineInfo }> = ({ ); }; -// TODO: Trigger resync. - export interface TimelineMemberProps { timeline: HttpTimelineInfo; + onChange: () => void; } const TimelineMember: React.FC = (props) => { - const { timeline } = props; + const { timeline, onChange } = props; const members = [timeline.owner, ...timeline.members]; return ( @@ -159,10 +160,9 @@ const TimelineMember: React.FC = (props) => { onAction={ timeline.manageable && index !== 0 ? () => { - void getHttpTimelineClient().memberDelete( - timeline.name, - member.username - ); + void getHttpTimelineClient() + .memberDelete(timeline.name, member.username) + .then(onChange); } : undefined } @@ -170,7 +170,7 @@ const TimelineMember: React.FC = (props) => { ))} {timeline.manageable ? ( - + ) : null} ); diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx index caab1768..6a8dd63c 100644 --- a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx +++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx @@ -16,12 +16,14 @@ export interface TimelinePageTemplateProps { Omit, "CardComponent"> >; notFoundI18nKey: string; + reloadKey: number; + onReload: () => void; } export default function TimelinePageTemplate( props: TimelinePageTemplateProps ): React.ReactElement | null { - const { name } = props; + const { name, reloadKey, onReload } = props; const [dialog, setDialog] = React.useState( null @@ -68,7 +70,7 @@ export default function TimelinePageTemplate( return () => { subscribe = false; }; - }, [name]); + }, [name, reloadKey]); let dialogElement: React.ReactElement | undefined; const closeDialog = (): void => setDialog(null); @@ -85,6 +87,7 @@ export default function TimelinePageTemplate( open close={closeDialog} timeline={timeline} + onChange={onReload} /> ); } else if (dialog === "member") { @@ -95,7 +98,12 @@ export default function TimelinePageTemplate( } dialogElement = ( - + ); } diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx index 48263486..56be8cfe 100644 --- a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx +++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx @@ -134,7 +134,6 @@ export default function TimelinePageTemplateUI( className="fixed-bottom" timeline={timeline} onHeightChange={onPostEditHeightChange} - timelineUniqueId={timeline.uniqueId} /> ) : null} diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx index b99ec267..a5628a9a 100644 --- a/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx +++ b/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx @@ -10,12 +10,11 @@ import { import OperationDialog from "../common/OperationDialog"; -// TODO: Trigger resync. - export interface TimelinePropertyChangeDialogProps { open: boolean; close: () => void; timeline: HttpTimelineInfo; + onChange: () => void; } const labelMap: { [key in TimelineVisibility]: string } = { @@ -27,7 +26,7 @@ const labelMap: { [key in TimelineVisibility]: string } = { const TimelinePropertyChangeDialog: React.FC = ( props ) => { - const { timeline } = props; + const { timeline, onChange } = props; return ( if (newDescription !== timeline.description) { req.description = newDescription; } - return getHttpTimelineClient().patchTimeline(timeline.name, req); + return getHttpTimelineClient() + .patchTimeline(timeline.name, req) + .then(onChange); }} /> ); -- cgit v1.2.3