mirror of
https://github.com/datahub-project/datahub.git
synced 2025-10-01 12:06:29 +00:00
32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
import React, { useEffect, useState } from 'react';
|
|
import { getInitialAllowListIds, getStepIds } from '../app/onboarding/utils';
|
|
import { useBatchGetStepStatesQuery } from '../graphql/step.generated';
|
|
import { EducationStepsContext } from './EducationStepsContext';
|
|
import { StepStateResult } from '../types.generated';
|
|
import { useUserContext } from '../app/context/useUserContext';
|
|
|
|
export function EducationStepsProvider({ children }: { children: React.ReactNode }) {
|
|
const userUrn = useUserContext()?.user?.urn;
|
|
const stepIds = getStepIds(userUrn || '');
|
|
const { data } = useBatchGetStepStatesQuery({ skip: !userUrn, variables: { input: { ids: stepIds } } });
|
|
const results = data?.batchGetStepStates.results;
|
|
const [educationSteps, setEducationSteps] = useState<StepStateResult[] | null>(results || null);
|
|
const [educationStepIdsAllowlist, setEducationStepIdsAllowlist] = useState<Set<string>>(
|
|
new Set(getInitialAllowListIds()),
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (results && (educationSteps === null || (educationSteps && results.length > educationSteps.length))) {
|
|
setEducationSteps(results);
|
|
}
|
|
}, [results, educationSteps]);
|
|
|
|
return (
|
|
<EducationStepsContext.Provider
|
|
value={{ educationSteps, setEducationSteps, educationStepIdsAllowlist, setEducationStepIdsAllowlist }}
|
|
>
|
|
{children}
|
|
</EducationStepsContext.Provider>
|
|
);
|
|
}
|