mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-02-12 23:14:57 -05:00
* Bump @chakra-ui/icons from 1.0.3 to 1.0.6 Bumps [@chakra-ui/icons](https://github.com/chakra-ui/chakra-ui) from 1.0.3 to 1.0.6. - [Release notes](https://github.com/chakra-ui/chakra-ui/releases) - [Commits](https://github.com/chakra-ui/chakra-ui/compare/@chakra-ui/icons@1.0.3...@chakra-ui/icons@1.0.6) Signed-off-by: dependabot[bot] <support@github.com> * Bump tsdx from 0.13.3 to 0.14.1 Bumps [tsdx](https://github.com/formium/tsdx) from 0.13.3 to 0.14.1. - [Release notes](https://github.com/formium/tsdx/releases) - [Commits](https://github.com/formium/tsdx/compare/v0.13.3...v0.14.1) Signed-off-by: dependabot[bot] <support@github.com> * Bump @types/react from 16.9.52 to 17.0.3 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 16.9.52 to 17.0.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) Signed-off-by: dependabot[bot] <support@github.com> * Bump express-graphql from 0.11.0 to 0.12.0 Bumps [express-graphql](https://github.com/graphql/express-graphql) from 0.11.0 to 0.12.0. - [Release notes](https://github.com/graphql/express-graphql/releases) - [Commits](https://github.com/graphql/express-graphql/compare/v0.11.0...v0.12.0) Signed-off-by: dependabot[bot] <support@github.com> * Bump eslint-plugin-simple-import-sort from 5.0.3 to 7.0.0 Bumps [eslint-plugin-simple-import-sort](https://github.com/lydell/eslint-plugin-simple-import-sort) from 5.0.3 to 7.0.0. - [Release notes](https://github.com/lydell/eslint-plugin-simple-import-sort/releases) - [Changelog](https://github.com/lydell/eslint-plugin-simple-import-sort/blob/main/CHANGELOG.md) - [Commits](https://github.com/lydell/eslint-plugin-simple-import-sort/compare/v5.0.3...v7.0.0) Signed-off-by: dependabot[bot] <support@github.com> * Bump eslint-plugin-jsx-a11y from 6.3.1 to 6.4.1 Bumps [eslint-plugin-jsx-a11y](https://github.com/evcohen/eslint-plugin-jsx-a11y) from 6.3.1 to 6.4.1. - [Release notes](https://github.com/evcohen/eslint-plugin-jsx-a11y/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/CHANGELOG.md) - [Commits](https://github.com/evcohen/eslint-plugin-jsx-a11y/compare/v6.3.1...v6.4.1) Signed-off-by: dependabot[bot] <support@github.com> * Bump eslint-plugin-jest from 24.1.3 to 24.3.1 Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 24.1.3 to 24.3.1. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v24.1.3...v24.3.1) Signed-off-by: dependabot[bot] <support@github.com> * Bump eslint-import-resolver-typescript from 2.2.1 to 2.4.0 Bumps [eslint-import-resolver-typescript](https://github.com/alexgorbatchev/eslint-import-resolver-typescript) from 2.2.1 to 2.4.0. - [Release notes](https://github.com/alexgorbatchev/eslint-import-resolver-typescript/releases) - [Changelog](https://github.com/alexgorbatchev/eslint-import-resolver-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/alexgorbatchev/eslint-import-resolver-typescript/compare/v2.2.1...v2.4.0) Signed-off-by: dependabot[bot] <support@github.com> * Bump eslint-config-airbnb-typescript from 9.0.0 to 12.3.1 Bumps [eslint-config-airbnb-typescript](https://github.com/iamturns/eslint-config-airbnb-typescript) from 9.0.0 to 12.3.1. - [Release notes](https://github.com/iamturns/eslint-config-airbnb-typescript/releases) - [Changelog](https://github.com/iamturns/eslint-config-airbnb-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/iamturns/eslint-config-airbnb-typescript/compare/v9.0.0...v12.3.1) Signed-off-by: dependabot[bot] <support@github.com> * Fix eslint imports * Fix tslint * lint! * lint Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import { useRouter } from 'next/router';
|
|
import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
|
import { SetupOptions } from 'utils/setupOptions';
|
|
|
|
const urlPrefix = `/profile/setup/`;
|
|
|
|
type SetupContextType = {
|
|
options: SetupOptions;
|
|
stepIndex: number;
|
|
onNextPress: () => void;
|
|
onBackPress: () => void;
|
|
nextButtonLabel: string;
|
|
};
|
|
|
|
export const SetupContext = React.createContext<SetupContextType>({
|
|
options: new SetupOptions(),
|
|
stepIndex: 0,
|
|
onNextPress: () => undefined,
|
|
onBackPress: () => undefined,
|
|
nextButtonLabel: 'Next Step',
|
|
});
|
|
|
|
export const SetupContextProvider: React.FC = ({ children }) => {
|
|
const options = useMemo(() => {
|
|
return new SetupOptions();
|
|
}, []);
|
|
|
|
const router = useRouter();
|
|
|
|
const pageMatches = router.pathname.match(`${urlPrefix}(.+)`);
|
|
const slug = pageMatches != null && pageMatches.length > 1 ? pageMatches[1] : null;
|
|
const stepIndex = options.stepIndexMatchingSlug(slug);
|
|
const currentStep = options.steps[stepIndex];
|
|
|
|
const [nextButtonLabel, setNextButtonLabel] = useState('Next Step');
|
|
|
|
useEffect(() => {
|
|
if (options.isLastStep(stepIndex)) {
|
|
setNextButtonLabel(currentStep.label);
|
|
} else {
|
|
const nextStep = options.steps[stepIndex + 1];
|
|
let nextStepLabel = nextStep.label;
|
|
if (options.isFinalStepOfSection(stepIndex)) {
|
|
nextStepLabel = options.sections[nextStep.sectionIndex].label;
|
|
}
|
|
setNextButtonLabel(`Next: ${nextStepLabel}`);
|
|
}
|
|
}, [options, stepIndex, setNextButtonLabel, currentStep]);
|
|
|
|
const onNextPress = useCallback(() => {
|
|
if (!options.isLastStep(stepIndex)) {
|
|
const nextStep = options.steps[stepIndex + 1];
|
|
router.push(`${urlPrefix}${nextStep.slug}`);
|
|
}
|
|
}, [router, options, stepIndex]);
|
|
|
|
const onBackPress = useCallback(() => {
|
|
if (stepIndex <= 0) {
|
|
router.push('/');
|
|
} else {
|
|
const previousStep = options.steps[stepIndex - 1];
|
|
router.push(`${urlPrefix}${previousStep.slug}`);
|
|
}
|
|
}, [router, options, stepIndex]);
|
|
|
|
return (
|
|
<SetupContext.Provider
|
|
value={{
|
|
options,
|
|
stepIndex,
|
|
onNextPress,
|
|
onBackPress,
|
|
nextButtonLabel,
|
|
}}
|
|
>
|
|
{children}
|
|
</SetupContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const useSetupFlow = (): SetupContextType => useContext(SetupContext);
|