|
1 | | -import { |
2 | | - skipToken, useMutation, useQuery, useQueryClient, |
3 | | -} from '@tanstack/react-query'; |
| 1 | +import { getConfig } from '@edx/frontend-platform'; |
4 | 2 | import { getAuthenticatedUser } from '@edx/frontend-platform/auth'; |
| 3 | +import { UserAgreement, UserAgreementRecord } from '@src/data/types'; |
5 | 4 | import { libraryAuthoringQueryKeys } from '@src/library-authoring/data/apiHooks'; |
6 | 5 | import { |
7 | | - getWaffleFlags, |
8 | | - waffleFlagDefaults, |
9 | | - bulkModulestoreMigrate, |
10 | | - getModulestoreMigrationStatus, |
| 6 | + skipToken, useMutation, useQueries, useQuery, useQueryClient, UseQueryOptions, |
| 7 | +} from '@tanstack/react-query'; |
| 8 | +import { |
11 | 9 | BulkMigrateRequestData, |
| 10 | + bulkModulestoreMigrate, |
12 | 11 | getCourseDetails, |
13 | | - getPreviewModulestoreMigration, |
| 12 | + getModulestoreMigrationStatus, |
| 13 | + getPreviewModulestoreMigration, getUserAgreement, |
| 14 | + getUserAgreementRecord, |
| 15 | + getWaffleFlags, updateUserAgreementRecord, |
| 16 | + waffleFlagDefaults, |
14 | 17 | } from './api'; |
15 | 18 | import { RequestStatus, RequestStatusType } from './constants'; |
16 | 19 |
|
@@ -165,3 +168,47 @@ export function createGlobalState<T>( |
165 | 168 | return { data, setData, resetData }; |
166 | 169 | }; |
167 | 170 | } |
| 171 | + |
| 172 | +export const getGatingAgreementTypes = (gatingTypes: string[]): string[] => ( |
| 173 | + [...new Set( |
| 174 | + gatingTypes |
| 175 | + .flatMap(gatingType => getConfig().AGREEMENT_GATING?.[gatingType]) |
| 176 | + .filter(item => Boolean(item)), |
| 177 | + )] |
| 178 | +); |
| 179 | + |
| 180 | +export const useUserAgreementRecord = (agreementType:string) => ( |
| 181 | + useQuery<UserAgreementRecord, Error>({ |
| 182 | + queryKey: ['agreement-record', agreementType], |
| 183 | + queryFn: () => getUserAgreementRecord(agreementType), |
| 184 | + retry: false, |
| 185 | + }) |
| 186 | +); |
| 187 | + |
| 188 | +export const useUserAgreementRecords = (agreementTypes:string[]) => ( |
| 189 | + useQueries({ |
| 190 | + queries: agreementTypes.map<UseQueryOptions<UserAgreementRecord, Error>>(agreementType => ({ |
| 191 | + queryKey: ['agreement-record', agreementType], |
| 192 | + queryFn: () => getUserAgreementRecord(agreementType), |
| 193 | + retry: false, |
| 194 | + })), |
| 195 | + }) |
| 196 | +); |
| 197 | + |
| 198 | +export const useUserAgreementRecordUpdater = (agreementType:string) => { |
| 199 | + const queryClient = useQueryClient(); |
| 200 | + return useMutation({ |
| 201 | + mutationFn: async () => updateUserAgreementRecord(agreementType), |
| 202 | + onSuccess: () => { |
| 203 | + queryClient.invalidateQueries({ queryKey: ['agreement-record', agreementType] }); |
| 204 | + }, |
| 205 | + }); |
| 206 | +}; |
| 207 | + |
| 208 | +export const useUserAgreement = (agreementType:string) => ( |
| 209 | + useQuery<UserAgreement, Error>({ |
| 210 | + queryKey: ['agreements', agreementType], |
| 211 | + queryFn: () => getUserAgreement(agreementType), |
| 212 | + retry: false, |
| 213 | + }) |
| 214 | +); |
0 commit comments