Skip to content

Commit

Permalink
fixup! feat: add access to prolific respondant
Browse files Browse the repository at this point in the history
  • Loading branch information
hamzace committed Feb 17, 2025
1 parent 5852842 commit 7f3d3e6
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
20 changes: 20 additions & 0 deletions src/entities/applet/api/integrations/useProlificUserExistsQuery.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { ProlificService, QueryOptions, ReturnAwaited, useBaseQuery } from '~/shared/api';

type FetchFn = typeof ProlificService.prolificUserExists;
type Options<TData> = QueryOptions<FetchFn, TData>;

type Params = {
prolificPid: string;
studyId: string;
};

export const useProlificUserExistsQuery = <TData = ReturnAwaited<FetchFn>>(
params: Params,
options?: Options<TData>,
) => {
return useBaseQuery(
['prolificUserExists', params],
() => ProlificService.prolificUserExists(params.prolificPid, params.studyId),
options,
);
};
8 changes: 8 additions & 0 deletions src/shared/api/services/integrations/prolific.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ type ProlificCompletionCodeList = {
completionCodes: ProlificCompletionCode[];
};

type ProlificPublicUser = {
exists: boolean;
};

const getProlificService = () => {
return {
isProlificStudyValidated: (appletId?: string, prolificStudyId?: string) =>
Expand All @@ -29,6 +33,10 @@ const getProlificService = () => {
axiosService.get<ProlificCompletionCodeList>(
`/integrations/prolific/applet/${appletId}/completion_codes/${studyId}`,
),
prolificUserExists: (prolificPid: string, studyId: string) =>
axiosService.get<ProlificPublicUser>(
`/integrations/prolific/pid/${prolificPid}/study_id/${studyId}`,
),
};
};

Expand Down
33 changes: 32 additions & 1 deletion src/widgets/ActivityGroups/ui/ActivityCard/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { useContext } from 'react';
import { useCallback, useContext } from 'react';

import { t } from 'i18next';

import { ActivityCardBase } from './ActivityCardBase';
import { ActivityCardDescription } from './ActivityCardDescription';
Expand All @@ -14,6 +16,9 @@ import { useEntityCardDetails } from '../../model/hooks';
import { getProgressId, openStoreLink } from '~/abstract/lib';
import { ActivityListItem } from '~/abstract/lib/GroupBuilder';
import { appletModel } from '~/entities/applet';
import { useProlificUserExistsQuery } from '~/entities/applet/api/integrations/useProlificUserExistsQuery';
import { prolificParamsSelector } from '~/entities/applet/model/selectors';
import { useBanners } from '~/entities/banner/model';
import { useAutoCompletionRecord } from '~/features/AutoCompletion/model';
import { useStartSurvey } from '~/features/PassSurvey';
import Box from '~/shared/ui/Box';
Expand Down Expand Up @@ -94,9 +99,35 @@ export const ActivityCard = ({ activityListItem }: Props) => {

const flowProgress = (countOfCompletedActivities / numberOfActivitiesInFlow) * 100;

const { addErrorBanner } = useBanners();

const prolificParams = useAppSelector(prolificParamsSelector);
const { data: prolificUser } = useProlificUserExistsQuery(
{
studyId: prolificParams?.studyId ?? '',
prolificPid: prolificParams?.prolificPid ?? '',
},
{
enabled: !!prolificParams,
},
);

const prolificUserExists = useCallback(() => {
if (!prolificParams) {
return false;
}

return !!prolificUser?.data?.exists;
}, [prolificUser, prolificParams]);

const onStartActivity = (shouldRestart: boolean) => {
if (isDisabled) return;

if (prolificUserExists()) {
addErrorBanner(t('prolific.alreadyAnswered'));
return;
}

if (!isEntitySupported) {
return openStoreLink();
}
Expand Down

0 comments on commit 7f3d3e6

Please sign in to comment.