Application Android et IOS pour l'amicale des élèves https://play.google.com/store/apps/details?id=fr.amicaleinsat.application
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PreferencesProvider.tsx 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { useState } from 'react';
  2. import {
  3. defaultPreferences,
  4. PreferenceKeys,
  5. PreferencesType,
  6. setPreference,
  7. } from '../../utils/asyncStorage';
  8. import {
  9. PreferencesContext,
  10. PreferencesContextType,
  11. } from '../../utils/preferencesContext';
  12. type Props = {
  13. children: React.ReactChild;
  14. initialPreferences: PreferencesType;
  15. };
  16. export default function PreferencesProvider(props: Props) {
  17. const updatePreferences = (
  18. key: PreferenceKeys,
  19. value: number | string | boolean | object | Array<any>
  20. ) => {
  21. setPreferencesState((prevState) => {
  22. const prevPreferences = { ...prevState.preferences };
  23. const newPrefs = setPreference(key, value, prevPreferences);
  24. const newSate = {
  25. ...prevState,
  26. preferences: { ...newPrefs },
  27. };
  28. return newSate;
  29. });
  30. };
  31. const resetPreferences = () => {
  32. setPreferencesState((prevState) => {
  33. const prevPreferences = { ...prevState.preferences };
  34. let newPreferences = { ...prevPreferences };
  35. Object.values(PreferenceKeys).forEach((key) => {
  36. newPreferences = setPreference(
  37. key,
  38. defaultPreferences[key],
  39. prevPreferences
  40. );
  41. });
  42. const newSate = {
  43. ...prevState,
  44. preferences: { ...newPreferences },
  45. };
  46. return newSate;
  47. });
  48. };
  49. const [
  50. preferencesState,
  51. setPreferencesState,
  52. ] = useState<PreferencesContextType>({
  53. preferences: { ...props.initialPreferences },
  54. updatePreferences: updatePreferences,
  55. resetPreferences: resetPreferences,
  56. });
  57. return (
  58. <PreferencesContext.Provider value={preferencesState}>
  59. {props.children}
  60. </PreferencesContext.Provider>
  61. );
  62. }