|
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 |
|
@@ -130,3 +133,47 @@ export const useCourseDetails = (courseId: string) => { |
130 | 133 | status, |
131 | 134 | }; |
132 | 135 | }; |
| 136 | + |
| 137 | +export const getGatingAgreementTypes = (gatingTypes: string[]): string[] => ( |
| 138 | + [...new Set( |
| 139 | + gatingTypes |
| 140 | + .flatMap(gatingType => getConfig().AGREEMENT_GATING?.[gatingType]) |
| 141 | + .filter(item => Boolean(item)), |
| 142 | + )] |
| 143 | +); |
| 144 | + |
| 145 | +export const useUserAgreementRecord = (agreementType:string) => ( |
| 146 | + useQuery<UserAgreementRecord, Error>({ |
| 147 | + queryKey: ['agreement-record', agreementType], |
| 148 | + queryFn: () => getUserAgreementRecord(agreementType), |
| 149 | + retry: false, |
| 150 | + }) |
| 151 | +); |
| 152 | + |
| 153 | +export const useUserAgreementRecords = (agreementTypes:string[]) => ( |
| 154 | + useQueries({ |
| 155 | + queries: agreementTypes.map<UseQueryOptions<UserAgreementRecord, Error>>(agreementType => ({ |
| 156 | + queryKey: ['agreement-record', agreementType], |
| 157 | + queryFn: () => getUserAgreementRecord(agreementType), |
| 158 | + retry: false, |
| 159 | + })), |
| 160 | + }) |
| 161 | +); |
| 162 | + |
| 163 | +export const useUserAgreementRecordUpdater = (agreementType:string) => { |
| 164 | + const queryClient = useQueryClient(); |
| 165 | + return useMutation({ |
| 166 | + mutationFn: async () => updateUserAgreementRecord(agreementType), |
| 167 | + onSuccess: () => { |
| 168 | + queryClient.invalidateQueries({ queryKey: ['agreement-record', agreementType] }); |
| 169 | + }, |
| 170 | + }); |
| 171 | +}; |
| 172 | + |
| 173 | +export const useUserAgreement = (agreementType:string) => ( |
| 174 | + useQuery<UserAgreement, Error>({ |
| 175 | + queryKey: ['agreements', agreementType], |
| 176 | + queryFn: () => getUserAgreement(agreementType), |
| 177 | + retry: false, |
| 178 | + }) |
| 179 | +); |
0 commit comments