Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 117x 12x 12x 12x 12x 12x 12x 12x 117x 1641x 1641x 1641x 1641x 1641x 1641x 12x 11x 1641x | import { useAppSelector } from "@redux/hooks";
import {
selectConversationTopic,
selectConversationsFilter,
selectConversationsGeneralSearch,
} from "@redux/slices/conversations";
import { customInstance } from "@services/api";
import { useQuery } from "react-query";
import { useConversationsModal } from "./useConversationsModal";
import { Tabs_Types } from "../types";
import { GENERAL_STALE_TIME_15 } from "@features/Merchants/MerchantSidePanel/constants";
export type TConversationTopic = {
typeName?: string;
createdAt: number;
displayName: string;
id: number;
isGlobal: boolean;
lastActivity: null | number; // Assuming lastActivity can be either null or a number
name: string;
subjectAccID: number;
totalMessages: number;
totalMentions: number;
totalUnread: number;
totalUsers: number;
updatedAt: number;
userAccID: number;
userAvatars: string[];
hasMentions: boolean;
subject?: string;
};
const getTopics = ({
merchantId,
queryString,
filterString,
tabs,
isConversationOpen,
}: {
merchantId: number;
queryString: string;
filterString: string;
tabs: Tabs_Types;
isConversationOpen: boolean;
}) => {
let builder = `/merchants/${merchantId}/topics`;
let hasQueryParams = false;
Iif (queryString) {
builder += `?q="${queryString}"`;
hasQueryParams = true;
}
Iif (filterString) {
builder += `${hasQueryParams ? "&" : "?"}filter=totalMentions:>0`;
hasQueryParams = true;
}
Iif (tabs && isConversationOpen) {
builder += `${
hasQueryParams ? "&" : "?"
}filter=typeDisplayName:"${tabs}"&sort=-id,-userAccID`;
} else {
builder += `?sort=-id,-userAccID`;
}
return customInstance({
url: builder,
method: "GET",
});
};
export const useListTopics = ({
merchantId,
enabled = true,
}: {
merchantId: number;
enabled?: boolean;
}) => {
const { isOpen, queryObject } = useAppSelector(selectConversationTopic);
const { queryKey, queryString } = useAppSelector(
selectConversationsGeneralSearch,
);
const { isOpen: isConversationOpen } = useConversationsModal();
const { filterString } = useAppSelector(selectConversationsFilter);
const { tabs = "Internal" } = queryObject || {};
const { data, isLoading, isFetching, error } = useQuery(
[
"get-conversation-topics",
merchantId,
isOpen,
queryKey === "Topics" && queryString,
filterString,
tabs,
isConversationOpen,
],
async () => {
const data = await getTopics({
tabs,
merchantId,
queryString,
filterString,
isConversationOpen,
});
return {
...data,
data: data?.data,
};
},
{
enabled: typeof merchantId === "number" && enabled && isConversationOpen,
refetchOnWindowFocus: false,
refetchOnMount: false,
staleTime: GENERAL_STALE_TIME_15,
},
);
return {
data,
isLoading,
isFetching,
error,
};
};
|