all repos — caroster @ 7aaf2e08839a69d11fe38936bef5abaf5789b853

[Octree] Group carpool to your event https://caroster.io

frontend/containers/Languages/withLanguagesSelection.tsx (view raw)

 1import {useEffect} from 'react';
 2import useLangStore from '../../stores/useLangStore';
 3import useProfile from '../../hooks/useProfile';
 4import {
 5  useUpdateMeMutation,
 6  Enum_Userspermissionsuser_Lang,
 7} from '../../generated/graphql';
 8
 9type LangFunction = (lang: Enum_Userspermissionsuser_Lang) => void;
10
11export interface LanguageSelectionComponentProps {
12  language: Enum_Userspermissionsuser_Lang;
13  setLanguage: LangFunction;
14  onConfirmCallback: LangFunction;
15}
16
17const withLanguagesSelection =
18  (
19    LanguageSelectionComponent: (
20      args: LanguageSelectionComponentProps
21    ) => JSX.Element
22  ) => 
23  (props) => {
24    const language = useLangStore(s => s.language);
25    const setLanguage = useLangStore(s => s.setLanguage);
26    const {profile, connected} = useProfile();
27    const [updateProfile] = useUpdateMeMutation();
28
29    useEffect(() => {
30      if (profile?.lang) setLanguage(profile.lang);
31    }, [profile]);
32
33    const onConfirmCallback = (lang: Enum_Userspermissionsuser_Lang) => {
34      if (connected) {
35        updateProfile({
36          variables: {
37            userUpdate: {
38              lang,
39            },
40          },
41        });
42      }
43    };
44
45    return (
46      <LanguageSelectionComponent
47        language={language}
48        setLanguage={setLanguage}
49        onConfirmCallback={onConfirmCallback}
50        {...props}
51      />
52    );
53  };
54
55export default withLanguagesSelection;