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 | 4x 4x 65x 65x 65x 65x 65x 65x 65x 4x 1x 65x 205x 65x 65x 168x 168x 210x 65x 65x 65x 65x 4x 4x 241x 241x 8x 8x 8x 241x | import { useMemo, useState } from "react";
import { ItemType } from "../components/FilterPermissionList";
import { useQueryClient } from "react-query";
import { capitalizeFirstLetter } from "@common/Table/helpers";
import usePermissionData from "./usePermissionData";
import { IUpdatedData } from "features/Permissions/Modal/api/types";
import { useDebouncedCallback } from "use-debounce";
const QUERY_KEY = "add-permission-modal-list";
const useAddPermissionsModal = (memberId: number) => {
const {
dataIsFetching,
dataIsLoading,
setSearchQuery,
isMutated: listMutated,
permissionsData,
clearChanges,
setPermissionStatus,
logs,
} = usePermissionData(memberId, {
withPagination: false,
queryKey: QUERY_KEY,
});
const [searchString, setSearchString] = useState<string>("");
const setAPISearchQuery = useDebouncedCallback(
(value) => setSearchQuery(value),
200,
);
const handleSearch = (value: string) => {
setSearchString(value);
setAPISearchQuery(value);
};
const [selectedGroup, setSelectedGroup] = useState<ItemType>(defaultAll);
const { value: filterKey } = selectedGroup;
const filteredGroups =
filterKey && filterKey !== defaultAll.value
? Object.entries(permissionsData.groups).reduce(
(acc: typeof permissionsData.groups, [key, hashes]) => {
if (key !== filterKey) return acc;
return {
...acc,
[key]: hashes,
};
},
{},
)
: permissionsData.groups;
const orderedKeys = Object.keys(filteredGroups).sort((a, b) =>
a.localeCompare(b),
);
const filters = useMemo(() => {
const arr = Object.keys(permissionsData?.groups).map((item) => {
const title =
capitalizeFirstLetter(item === "enterprise" ? "provider" : item) +
" " +
"permissions";
return {
value: item,
title,
};
});
arr.sort((a, b) => a.value.localeCompare(b.value));
arr.unshift(defaultAll);
return arr;
}, [permissionsData.groups, orderedKeys, filteredGroups]);
const handleSelect = (e: ItemType) => setSelectedGroup(e);
return {
listMutated,
clearChanges,
logs,
dataIsLoading: dataIsLoading || (dataIsFetching && !orderedKeys.length),
isSearching: dataIsFetching && !!searchString,
searchString,
handleSearch,
selectedGroup,
filters,
handleSelect,
orderedKeys,
permissionsData,
setPermissionStatus,
filteredGroups,
};
};
const defaultAll = {
value: "All",
title: "All permissions",
};
export const useAddPermissionModalCache = () => {
const queryClient = useQueryClient();
const updateCache = (key: string, values: IUpdatedData) => {
queryClient.setQueriesData(QUERY_KEY, (oldData: any) => {
Iif (!oldData?.data) return oldData;
return {
...oldData,
data: {
...oldData.data,
[key]: {
...values,
},
},
};
});
};
return { updateCache, queryKey: QUERY_KEY };
};
export default useAddPermissionsModal;
|