feat: favorite message
This commit is contained in:
@@ -3,6 +3,7 @@ import { createApi } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
import { ContentTypes } from "../config";
|
||||
import { updateReadChannels, updateReadUsers } from "../slices/footprint";
|
||||
import { fullfillFavorites, populateFavorite } from "../slices/favorites";
|
||||
import { onMessageSendStarted } from "./handlers";
|
||||
|
||||
// import { updateMessage } from "../slices/message";
|
||||
@@ -83,6 +84,50 @@ export const messageApi = createApi({
|
||||
body: { mid },
|
||||
}),
|
||||
}),
|
||||
unpinMessage: builder.mutation({
|
||||
query: ({ gid, mid }) => ({
|
||||
url: `/group/${gid}/unpin`,
|
||||
method: "POST",
|
||||
body: { mid },
|
||||
}),
|
||||
}),
|
||||
favoriteMessage: builder.mutation({
|
||||
query: (mids) => ({
|
||||
url: `/favorite`,
|
||||
method: "POST",
|
||||
body: { mid_list: mids },
|
||||
}),
|
||||
}),
|
||||
getFavoriteDetails: builder.query({
|
||||
query: (id) => ({
|
||||
url: `/favorite/${id}`,
|
||||
}),
|
||||
async onQueryStarted(id, { dispatch, queryFulfilled }) {
|
||||
try {
|
||||
const { data } = await queryFulfilled;
|
||||
dispatch(populateFavorite({ id, data }));
|
||||
} catch (err) {
|
||||
console.log("get favorite list error", err);
|
||||
}
|
||||
},
|
||||
}),
|
||||
getFavorites: builder.query({
|
||||
query: () => ({
|
||||
url: `/favorite`,
|
||||
}),
|
||||
async onQueryStarted(data, { dispatch, queryFulfilled }) {
|
||||
try {
|
||||
const { data: favorites } = await queryFulfilled;
|
||||
dispatch(fullfillFavorites(favorites));
|
||||
for (const fav of favorites) {
|
||||
const { id } = fav;
|
||||
dispatch(messageApi.endpoints.getFavoriteDetails.initiate(id));
|
||||
}
|
||||
} catch (err) {
|
||||
console.log("get favorite list error", err);
|
||||
}
|
||||
},
|
||||
}),
|
||||
replyMessage: builder.mutation({
|
||||
query: ({ reply_mid, content, type = "text" }) => ({
|
||||
headers: {
|
||||
@@ -121,6 +166,9 @@ export const messageApi = createApi({
|
||||
});
|
||||
|
||||
export const {
|
||||
useUnpinMessageMutation,
|
||||
useLazyGetFavoritesQuery,
|
||||
useFavoriteMessageMutation,
|
||||
usePinMessageMutation,
|
||||
useLazyGetArchiveMessageQuery,
|
||||
useGetArchiveMessageQuery,
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { createSlice } from "@reduxjs/toolkit";
|
||||
// import BASE_URL from "../config";
|
||||
const initialState = [];
|
||||
const favoritesSlice = createSlice({
|
||||
name: `favorites`,
|
||||
initialState,
|
||||
reducers: {
|
||||
fullfillFavorites(state, action) {
|
||||
return action.payload;
|
||||
},
|
||||
populateFavorite(state, action) {
|
||||
const { id, data } = action.payload;
|
||||
const idx = state.findIndex((fav) => fav.id == id);
|
||||
if (idx > -1) {
|
||||
state[idx].data = data;
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
export const { fullfillFavorites, populateFavorite } = favoritesSlice.actions;
|
||||
export default favoritesSlice.reducer;
|
||||
@@ -10,6 +10,7 @@ import contactsReducer from "./slices/contacts";
|
||||
import reactionMsgReducer from "./slices/message.reaction";
|
||||
import channelMsgReducer from "./slices/message.channel";
|
||||
import userMsgReducer from "./slices/message.user";
|
||||
import favoritesReducer from "./slices/favorites";
|
||||
import fileMsgReducer from "./slices/message.file";
|
||||
import messageReducer from "./slices/message";
|
||||
import { authApi } from "./services/auth";
|
||||
@@ -23,6 +24,7 @@ const reducer = combineReducers({
|
||||
ui: uiReducer,
|
||||
footprint: footprintReducer,
|
||||
server: serverReducer,
|
||||
favorites: favoritesReducer,
|
||||
contacts: contactsReducer,
|
||||
channels: channelsReducer,
|
||||
reactionMessage: reactionMsgReducer,
|
||||
|
||||
Reference in New Issue
Block a user