diff --git a/src/components/MyObservations/Header.js b/src/components/MyObservations/Header.js index 322fad648..dd4cb9d98 100644 --- a/src/components/MyObservations/Header.js +++ b/src/components/MyObservations/Header.js @@ -15,7 +15,7 @@ import useNumUnuploadedObservations from "sharedHooks/useNumUnuploadedObservatio import Onboarding from "./Onboarding"; type Props = { - setLayout: Function; + toggleLayout: Function; layout: string, currentUser: ?Object, numObservations: number, @@ -25,7 +25,7 @@ type Props = { } const Header = ( { - setLayout, + toggleLayout, layout, currentUser, numObservations, @@ -115,7 +115,7 @@ const Header = ( { {!hideToolbar && ( , onEndReached: Function, - setLayout: Function, + toggleLayout: Function, uploadStatus: Object, currentUser: ?Object, showLoginSheet: boolean, @@ -69,7 +69,7 @@ const MyObservations = ( { layout, observations, onEndReached, - setLayout, + toggleLayout, uploadStatus, currentUser, showLoginSheet, @@ -177,7 +177,7 @@ const MyObservations = ( { ]} >
{ +const MyObservationsContainer = ( ): Node => { const { observationList: observations, allObsToUpload } = useLocalObservations( ); const uploadStatus = useUploadObservations( allObsToUpload ); - const [layout, setLayout] = useState( "list" ); + const { getItem, setItem } = useAsyncStorage( "myObservationsLayout" ); + const [layout, setLayout] = useState( null ); const { isLoading, fetchNextPage } = useInfiniteScroll(); const [showLoginSheet, setShowLoginSheet] = useState( false ); const currentUser = useCurrentUser(); useObservationsUpdates( !!currentUser ); + const writeItemToStorage = useCallback( async newValue => { + await setItem( newValue ); + setLayout( newValue ); + }, [setItem] ); + + useEffect( ( ) => { + const readItemFromStorage = async ( ) => { + const item = await getItem( ); + if ( !item ) { + await writeItemToStorage( "list" ); + } + setLayout( item || "list" ); + }; + + readItemFromStorage( ); + }, [getItem, writeItemToStorage] ); + + const toggleLayout = ( ) => { + if ( layout === "grid" ) { + writeItemToStorage( "list" ); + } else { + writeItemToStorage( "grid" ); + } + }; + + if ( !layout ) { return null; } + return ( { @@ -100,13 +100,6 @@ const ToolbarContainer = ( { const navToExplore = ( ) => navigation.navigate( "Explore" ); - const toggleLayout = ( ) => setLayout( currentView => { - if ( currentView === "list" ) { - return "grid"; - } - return "list"; - } ); - const statusText = getStatusText( ); const getSyncIcon = ( ) => {