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 126 127 | 21x 22x 21x 25x 25x 25x 25x 21x 6x 6x 6x 6x 6x 21x 5x 5x 7x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 21x | import { useAppSelector } from "@redux/hooks";
import { useMerchantSidePanelContext } from "../../Provider/MerchantSidePanelProvider";
import { createComponentRepository } from "../createComponentRepository";
import { IComponentRepository, RepositoryConfigs } from "../types";
import { useRepository } from "../WithRepositoryContext";
import {
TCategoryStats,
TChallange,
TChallengeCategory,
TChallengeRepositories,
TChallengeStatus,
} from "./types";
import { selectQueryString } from "@redux/slices/search";
export const useChallengesRepository = <K extends keyof TChallengeRepositories>(
tag: K,
) => {
return useRepository<keyof TChallengeRepositories, TChallengeRepositories, K>(
tag,
);
};
export const useConfigureChallenges = () => {
const { id } = useMerchantSidePanelContext();
const configs = {
all_challenges: {
baseUrl: `/merchants/${id}/underwriting-challenges`,
tag: "all_challenges",
},
challenges_categories: {
baseUrl: `/merchants/${id}/underwriting-challenge-categories`,
tag: "challenges_categories",
},
challenges_stats: {
baseUrl: `/merchants/${id}/underwriting-challenges/stats`,
tag: "challenges_stats",
},
} satisfies RepositoryConfigs<keyof TChallengeRepositories>;
const repositories = {
challenges_categories: createComponentRepository<TChallengeCategory>(),
challenges_stats: createComponentRepository<TCategoryStats>(),
all_challenges: createComponentRepository<TChallange>(),
} satisfies {
[K in keyof TChallengeRepositories]: IComponentRepository<
TChallengeRepositories[K]
>;
};
return {
repositories,
configs,
};
};
export const useGetChallenges = (filter = "") => {
const { useGetItems: useGetChallengesCategories } = useChallengesRepository(
"challenges_categories",
);
const { useGetItems: useGetChallengesStats } =
useChallengesRepository("challenges_stats");
const {
data: challengesCategoriesData,
isLoading: areChallengesCategoriesLoading,
} = useGetChallengesCategories(`?${filter}sort=sortOrderPriority`);
const { data: challengesStatsData, isLoading: areChallengesStatsLoading } =
useGetChallengesStats("");
return {
data: {
challengesStatsData,
challengesCategoriesData,
},
isLoading: areChallengesStatsLoading || areChallengesCategoriesLoading,
};
};
export const useGetSpecificChallengeData = (
challengeIdentifier: string,
statusFilters: TChallengeStatus[],
userTaggedInFilter: string,
hasUnreadMessagesFilter: string,
) => {
const { useGetItems: useGetChallengesList } =
useChallengesRepository("all_challenges");
const searchText = useAppSelector((state) =>
selectQueryString(state, "items_all_challenges"),
);
const status = statusFilters.flatMap((status) =>
filterMapper[status].map((value) => `statusName:"${value}"`),
);
let filterParam = challengeIdentifier
? `?filter=%3B(categoryName:"${challengeIdentifier}")`
: "";
Iif (status.length > 0) filterParam += `%3B(${status.join(",")})`;
Iif (hasUnreadMessagesFilter) filterParam += hasUnreadMessagesFilter;
Iif (userTaggedInFilter) filterParam += userTaggedInFilter;
const searchParam = searchText ? `&q="${searchText}"` : "";
const {
data: challengesList,
isLoading: isChallengesListLoading,
error,
} = useGetChallengesList(`${filterParam}${searchParam}`);
const { useGetItems } = useChallengesRepository("challenges_categories");
const { data: categories, isLoading: areStatsLoading } = useGetItems(
"?sort=sortOrderPriority",
);
return {
data: {
categories,
challengesList,
},
isLoading: areStatsLoading && isChallengesListLoading,
isLoadingList: isChallengesListLoading,
error,
};
};
const filterMapper = {
open: [1],
ready_for_verification: [2],
closed: [3, 5],
rejected: [4], //currently this is not used for filtering, but caused a type error
};
|