Skip to content

Commit 70525c1

Browse files
authored
Merge pull request #2767 from daostack/CW-instant-reorder-feedItems-and-inbox
CW-instatnt-reorder-feedItems-and-inbox
2 parents 0e335fd + a9c585a commit 70525c1

File tree

41 files changed

+1008
-533
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1008
-533
lines changed

src/pages/OldCommon/components/CommonDetailContainer/MembersComponent/CommonMemberComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const CommonMember: FC<CommonMemberProps> = ({
4545
const { isShowing, onClose, onOpen } = useModal(false);
4646
const contextMenuRef = useRef<ContextMenuRef>(null);
4747
const recentAssignedCircle: Circle | undefined = useSelector(
48-
selectRecentAssignedCircle(member.userId),
48+
selectRecentAssignedCircle(commonId, member.userId),
4949
);
5050

5151
const handleContextMenu: MouseEventHandler<HTMLLIElement> = (event) => {

src/pages/common/BaseCommon.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,17 @@ const BaseCommon: FC<CommonProps> = (props) => {
7979
}, [userId]);
8080

8181
useEffect(() => {
82-
dispatch(setCommonMember(commonMember || null));
82+
dispatch(setCommonMember({ commonId, member: commonMember || null }));
8383
onCommonMemberChange?.(commonMember || null);
8484
}, [dispatch, commonMember]);
8585

8686
useEffect(() => {
87-
dispatch(setCommonGovernance(commonData?.governance || null));
87+
dispatch(
88+
setCommonGovernance({
89+
commonId,
90+
governance: commonData?.governance || null,
91+
}),
92+
);
8893
}, [dispatch, commonData?.governance]);
8994

9095
useEffect(() => {

src/pages/common/components/ChatComponent/ChatComponent.tsx

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import {
5454
removeTextEditorEmptyEndLinesValues,
5555
countTextEditorEmojiElements,
5656
} from "@/shared/ui-kit";
57+
import { BaseTextEditorHandles } from "@/shared/ui-kit/TextEditor/BaseTextEditor";
5758
import { checkUncheckedItemsInTextEditorValue } from "@/shared/ui-kit/TextEditor/utils";
5859
import { InternalLinkData, notEmpty } from "@/shared/utils";
5960
import { getUserName, hasPermission, isMobile } from "@/shared/utils";
@@ -70,6 +71,7 @@ import {
7071
selectInstantDiscussionMessagesOrder,
7172
} from "@/store/states";
7273
import { ChatContentContext, ChatContentData } from "../CommonContent/context";
74+
import { useFeedItemContext } from "../FeedItem";
7375
import {
7476
ChatContent,
7577
ChatContentRef,
@@ -87,8 +89,6 @@ import {
8789
uploadFilesAndImages,
8890
} from "./utils";
8991
import styles from "./ChatComponent.module.scss";
90-
import { BaseTextEditorHandles } from "@/shared/ui-kit/TextEditor/BaseTextEditor";
91-
import { useFeedItemContext } from "../FeedItem";
9292

9393
const BASE_CHAT_INPUT_HEIGHT = 48;
9494
const BASE_ORDER_INTERVAL = 1000;
@@ -259,19 +259,16 @@ export default function ChatComponent({
259259
parseStringToTextEditorValue(),
260260
);
261261

262-
const {
263-
setIsInputFocused
264-
} = useFeedItemContext();
262+
const { setIsInputFocused } = useFeedItemContext();
265263

266264
useEffect(() => {
267265
const isEmpty = checkIsTextEditorValueEmpty(message);
268-
if(!isEmpty || message.length > 1) {
266+
if (!isEmpty || message.length > 1) {
269267
setIsInputFocused?.(true);
270268
} else {
271269
setIsInputFocused?.(false);
272270
}
273-
274-
},[message, setIsInputFocused])
271+
}, [message, setIsInputFocused]);
275272

276273
const emojiCount = useMemo(
277274
() => countTextEditorEmojiElements(message),
@@ -294,9 +291,12 @@ export default function ChatComponent({
294291
const optimisticDiscussionMessages = useSelector(
295292
selectOptimisticDiscussionMessages,
296293
);
297-
const instantDiscussionMessagesOrder = useSelector(selectInstantDiscussionMessagesOrder);
294+
const instantDiscussionMessagesOrder = useSelector(
295+
selectInstantDiscussionMessagesOrder,
296+
);
298297

299-
const currentChatOrder = instantDiscussionMessagesOrder.get(discussionId)?.order || 1;
298+
const currentChatOrder =
299+
instantDiscussionMessagesOrder.get(discussionId)?.order || 1;
300300

301301
const isOptimisticChat = optimisticFeedItems.has(discussionId);
302302

@@ -604,7 +604,11 @@ export default function ChatComponent({
604604

605605
return [...prev, ...filePreviewPayload, payload];
606606
});
607-
dispatch(optimisticActions.setInstantDiscussionMessagesOrder({discussionId}));
607+
dispatch(
608+
optimisticActions.setInstantDiscussionMessagesOrder({
609+
discussionId,
610+
}),
611+
);
608612
}
609613

610614
if (isChatChannel) {
@@ -638,10 +642,15 @@ export default function ChatComponent({
638642
userName: getUserName(user),
639643
ownerType: DiscussionMessageOwnerType.User,
640644
content: JSON.stringify(message),
641-
}
645+
},
642646
};
643647

644-
dispatch(commonActions.setFeedItemUpdatedAt(payloadUpdateFeedItem));
648+
dispatch(
649+
commonActions.setFeedItemUpdatedAt({
650+
...payloadUpdateFeedItem,
651+
commonId,
652+
}),
653+
);
645654
dispatch(inboxActions.setInboxItemUpdatedAt(payloadUpdateFeedItem));
646655
document
647656
.getElementById("feedLayoutWrapper")
@@ -765,7 +774,7 @@ export default function ChatComponent({
765774
useLayoutEffect(() => {
766775
textInputRef?.current?.clear?.();
767776
textInputRef?.current?.focus?.();
768-
},[discussionId]);
777+
}, [discussionId]);
769778

770779
useEffect(() => {
771780
if (isFetchedDiscussionMessages) {

src/pages/common/components/CommonContent/CommonContent.tsx

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { FC, useEffect, useMemo, useState } from "react";
2-
import { useDispatch, useSelector } from "react-redux";
2+
import { useSelector } from "react-redux";
33
import { useHistory } from "react-router-dom";
44
import { CommonPageSettings } from "@/pages/common/types";
55
import { useRoutesContext } from "@/shared/contexts";
@@ -16,7 +16,7 @@ import {
1616
} from "@/shared/models";
1717
import { Container } from "@/shared/ui-kit";
1818
import { getInboxPagePath } from "@/shared/utils";
19-
import { commonActions, selectIsNewProjectCreated } from "@/store/states";
19+
import { selectIsNewProjectCreated } from "@/store/states";
2020
import { CommonDataProvider } from "../../providers";
2121
import { CommonHeader } from "../CommonHeader";
2222
import { CommonManagement } from "../CommonManagement";
@@ -67,7 +67,6 @@ const CommonContent: FC<CommonContentProps> = (props) => {
6767
setIsJoinPending,
6868
} = props;
6969
const isTabletView = useIsTabletView();
70-
const dispatch = useDispatch();
7170
const history = useHistory();
7271
const { canGoBack, goBack } = useGoBack();
7372
const { getCommonPagePath } = useRoutesContext();
@@ -86,7 +85,9 @@ const CommonContent: FC<CommonContentProps> = (props) => {
8685
allowedTabs,
8786
}),
8887
);
89-
const isNewProjectCreated = useSelector(selectIsNewProjectCreated);
88+
89+
const commonId = common.id;
90+
const isNewProjectCreated = useSelector(selectIsNewProjectCreated(commonId));
9091
const parentCommonId = common.directParent?.commonId;
9192
const isSubCommon = common.directParent !== null;
9293

@@ -108,12 +109,6 @@ const CommonContent: FC<CommonContentProps> = (props) => {
108109
}
109110
}, [isCommonMember, common.listVisibility, history.push, goBack, canGoBack]);
110111

111-
useEffect(() => {
112-
return () => {
113-
dispatch(commonActions.resetCommon());
114-
};
115-
}, []);
116-
117112
return (
118113
<CommonDataProvider
119114
settings={settings}
@@ -136,7 +131,7 @@ const CommonContent: FC<CommonContentProps> = (props) => {
136131
commonMember={commonMember}
137132
circles={governance.circles}
138133
isSubCommon={isSubCommon}
139-
commonId={common.id}
134+
commonId={commonId}
140135
/>
141136
<CommonSidenavLayoutPageContent
142137
className={settings?.pageContentClassName}
@@ -145,7 +140,7 @@ const CommonContent: FC<CommonContentProps> = (props) => {
145140
settings.renderHeaderContent()
146141
) : !isTabletView ? (
147142
<HeaderContent
148-
backButtonPath={getCommonPagePath(common.id)}
143+
backButtonPath={getCommonPagePath(commonId)}
149144
withoutBackButton={!commonMember}
150145
/>
151146
) : null
@@ -168,7 +163,7 @@ const CommonContent: FC<CommonContentProps> = (props) => {
168163
{!isTabletView && (
169164
<Container>
170165
<CommonManagement
171-
commonId={common.id}
166+
commonId={commonId}
172167
activeTab={tab}
173168
allowedTabs={allowedTabs}
174169
isSubCommon={isSubCommon}
@@ -197,7 +192,10 @@ const CommonContent: FC<CommonContentProps> = (props) => {
197192
</div>
198193
</CommonSidenavLayoutPageContent>
199194
{isGlobalDataFetched && isNewProjectCreated && parentCommonId && (
200-
<SuccessfulProjectCreationModal parentCommonId={parentCommonId} />
195+
<SuccessfulProjectCreationModal
196+
commonId={commonId}
197+
parentCommonId={parentCommonId}
198+
/>
201199
)}
202200
</CommonDataProvider>
203201
);

src/pages/common/components/CommonContent/components/SuccessfulProjectCreationModal/SuccessfulProjectCreationModal.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,27 @@ import styles from "./SuccessfulProjectCreationModal.module.scss";
99

1010
interface SuccessfulProjectCreationModalProps {
1111
parentCommonId: string;
12+
commonId: string;
1213
}
1314

1415
const SuccessfulProjectCreationModal: FC<
1516
SuccessfulProjectCreationModalProps
1617
> = (props) => {
17-
const { parentCommonId } = props;
18+
const { parentCommonId, commonId } = props;
1819
const dispatch = useDispatch();
1920
const history = useHistory();
2021

2122
const handleClose = () => {
22-
dispatch(commonActions.setIsNewProjectCreated(false));
23+
dispatch(
24+
commonActions.setIsNewProjectCreated({ isCreated: false, commonId }),
25+
);
2326
history.push(getCommonPageAboutTabPath(parentCommonId));
2427
};
2528

2629
const handleJumpToProject = () => {
27-
dispatch(commonActions.setIsNewProjectCreated(false));
30+
dispatch(
31+
commonActions.setIsNewProjectCreated({ isCreated: false, commonId }),
32+
);
2833
};
2934

3035
return (

src/pages/common/components/CommonTabPanels/components/FeedTab/FeedTab.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,10 @@ export const FeedTab: FC<FeedTabProps> = (props) => {
179179

180180
useEffect(() => {
181181
return () => {
182-
dispatch(
183-
commonActions.getFeedItems.cancel(
184-
"Cancel feed items fetch on feed umount",
185-
),
186-
);
187-
dispatch(commonActions.resetFeedItems());
182+
dispatch(commonActions.getFeedItems.cancel({ commonId: common.id }));
183+
dispatch(commonActions.resetFeedItems({ commonId: common.id }));
188184
};
189-
}, []);
185+
}, [common.id]);
190186

191187
const contextValue = useMemo(
192188
() => ({

src/pages/common/components/CommonTabPanels/components/FeedTab/components/NewDiscussionCreation/NewDiscussionCreation.tsx

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { FC, useCallback, useEffect, useMemo } from "react";
22
import { useDispatch, useSelector } from "react-redux";
33
import { v4 as uuidv4 } from "uuid";
44
import { selectUser } from "@/pages/Auth/store/selectors";
5+
import { DiscussionMessageOwnerType } from "@/shared/constants";
56
import {
67
NewDiscussionCreationFormValues,
78
UploadFile,
@@ -18,15 +19,18 @@ import {
1819
TextEditorValue,
1920
parseStringToTextEditorValue,
2021
} from "@/shared/ui-kit/TextEditor";
21-
import { generateFirstMessage, generateOptimisticFeedItem, getUserName } from "@/shared/utils";
22+
import {
23+
generateFirstMessage,
24+
generateOptimisticFeedItem,
25+
getUserName,
26+
} from "@/shared/utils";
2227
import {
2328
optimisticActions,
2429
selectDiscussionCreationData,
2530
selectIsDiscussionCreationLoading,
2631
} from "@/store/states";
2732
import { commonActions } from "@/store/states";
2833
import { DiscussionCreationCard, DiscussionCreationModal } from "./components";
29-
import { DiscussionMessageOwnerType } from "@/shared/constants";
3034

3135
interface NewDiscussionCreationProps {
3236
common: Common;
@@ -60,8 +64,12 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
6064
onDiscussionIdChange,
6165
} = props;
6266
const dispatch = useDispatch();
63-
const discussionCreationData = useSelector(selectDiscussionCreationData);
64-
const isLoading = useSelector(selectIsDiscussionCreationLoading);
67+
68+
const commonId = common.id;
69+
const discussionCreationData = useSelector(
70+
selectDiscussionCreationData(commonId),
71+
);
72+
const isLoading = useSelector(selectIsDiscussionCreationLoading(commonId));
6573
const user = useSelector(selectUser());
6674
const userId = user?.uid;
6775
const userCircleIds = useMemo(
@@ -71,7 +79,7 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
7179

7280
const handleCancel = () => {
7381
dispatch(commonActions.setCommonAction(null));
74-
dispatch(commonActions.setDiscussionCreationData(null));
82+
dispatch(commonActions.setDiscussionCreationData({ data: null, commonId }));
7583
};
7684

7785
const initialValues: NewDiscussionCreationFormValues = useMemo(() => {
@@ -118,6 +126,7 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
118126
message: JSON.stringify(values.content),
119127
images: values.images,
120128
},
129+
commonId,
121130
}),
122131
);
123132
} else {
@@ -136,13 +145,15 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
136145
ownerId: userId,
137146
userName,
138147
ownerType: DiscussionMessageOwnerType.System,
139-
content: generateFirstMessage({userName, userId}),
140-
}
148+
content: generateFirstMessage({ userName, userId }),
149+
},
141150
});
142-
dispatch(optimisticActions.setOptimisticFeedItem({
143-
data: optimisticFeedItem,
144-
common
145-
}));
151+
dispatch(
152+
optimisticActions.setOptimisticFeedItem({
153+
data: optimisticFeedItem,
154+
common,
155+
}),
156+
);
146157
dispatch(commonActions.setRecentStreamId(optimisticFeedItem.data.id));
147158
dispatch(
148159
commonActions.createDiscussion.request({
@@ -155,13 +166,14 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
155166
images: values.images,
156167
circleVisibility,
157168
},
169+
commonId,
158170
}),
159171
);
160172
}
161173

162174
handleCancel();
163175
},
164-
[governanceCircles, userCircleIds, userId, common.id, edit],
176+
[governanceCircles, userCircleIds, userId, commonId, edit],
165177
);
166178

167179
useEffect(() => {
@@ -185,6 +197,7 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
185197
isLoading={isLoading}
186198
commonImage={commonImage}
187199
commonName={commonName}
200+
commonId={commonId}
188201
edit={edit}
189202
/>
190203
);
@@ -199,6 +212,7 @@ const NewDiscussionCreation: FC<NewDiscussionCreationProps> = (props) => {
199212
onCancel={handleCancel}
200213
isLoading={isLoading}
201214
edit={edit}
215+
commonId={commonId}
202216
/>
203217
);
204218
};

0 commit comments

Comments
 (0)