diff --git a/Plan/react/dashboard/src/components/cards/common/AddressListCard.jsx b/Plan/react/dashboard/src/components/cards/common/AddressListCard.jsx index 3e74eabf6..679672a1b 100644 --- a/Plan/react/dashboard/src/components/cards/common/AddressListCard.jsx +++ b/Plan/react/dashboard/src/components/cards/common/AddressListCard.jsx @@ -13,6 +13,12 @@ const AddressListCard = ({n, group, editGroup, allAddresses, remove}) => { const [editingName, setEditingName] = useState(false); const [name, setName] = useState(group.name); + useEffect(() => { + if (!selectedIndexes.length && allAddresses?.length && group?.addresses?.length) { + setSelectedIndexes(group.addresses.map(address => allAddresses.indexOf(address))) + } + }, [selectedIndexes, group, allAddresses]) + const isUpToDate = group.addresses === allAddresses.filter((a, i) => selectedIndexes.includes(i)); const applySelected = useCallback(() => { editGroup({...group, addresses: allAddresses.filter((a, i) => selectedIndexes.includes(i))}) @@ -28,10 +34,14 @@ const AddressListCard = ({n, group, editGroup, allAddresses, remove}) => { setName(e.target.value)}/> : group.name + setName(e.target.value)}/> : group.name }> - diff --git a/Plan/react/dashboard/src/hooks/context/joinAddressListContextHook.jsx b/Plan/react/dashboard/src/hooks/context/joinAddressListContextHook.jsx index dc9b51b4c..98c5cb2dd 100644 --- a/Plan/react/dashboard/src/hooks/context/joinAddressListContextHook.jsx +++ b/Plan/react/dashboard/src/hooks/context/joinAddressListContextHook.jsx @@ -2,24 +2,42 @@ import {createContext, useCallback, useContext, useEffect, useMemo, useState} fr import {randomUuid} from "../../util/uuid.js"; import {fetchPlayerJoinAddresses} from "../../service/serverService.js"; import {useNavigation} from "../navigationHook.jsx"; +import {usePreferences} from "../preferencesHook.jsx"; const JoinAddressListContext = createContext({}); export const JoinAddressListContextProvider = ({identifier, children}) => { const {updateRequested} = useNavigation(); + const {preferencesLoaded, getKeyedPreference, setSomePreferences} = usePreferences(); const [list, setList] = useState([]); + const updateList = useCallback(newValue => { + setList(newValue); + const userPreferences = {} + userPreferences["join-addresses-" + identifier] = newValue; + setSomePreferences(userPreferences); + }, [setList]) + + useEffect(() => { + if (preferencesLoaded && !list.length) { + const value = getKeyedPreference("join-addresses-" + identifier); + if (value?.length) { + setList(value) + } + } + }, [list, setList, preferencesLoaded, getKeyedPreference]); + const add = useCallback(() => { - setList([...list, {name: "Address group " + (list.length + 1), addresses: [], uuid: randomUuid()}]) - }, [list, setList]); + updateList([...list, {name: "Address group " + (list.length + 1), addresses: [], uuid: randomUuid()}]) + }, [updateList, list]); const remove = useCallback(index => { - setList(list.filter((f, i) => i !== index)); - }, [setList, list]); + updateList(list.filter((f, i) => i !== index)); + }, [updateList, list]); const replace = useCallback((replacement, index) => { const newList = [...list]; newList[index] = replacement; - setList(newList) - }, [setList, list]); + updateList(newList) + }, [updateList, list]); const [allAddresses, setAllAddresses] = useState([]); const loadAddresses = useCallback(async () => { @@ -32,7 +50,7 @@ export const JoinAddressListContextProvider = ({identifier, children}) => { const sharedState = useMemo(() => { return {list, add, remove, replace, allAddresses}; - }, [list, add, remove, replace]); + }, [list, add, remove, replace, allAddresses]); return ( {children} diff --git a/Plan/react/dashboard/src/hooks/preferencesHook.jsx b/Plan/react/dashboard/src/hooks/preferencesHook.jsx index db94dc102..26e411305 100644 --- a/Plan/react/dashboard/src/hooks/preferencesHook.jsx +++ b/Plan/react/dashboard/src/hooks/preferencesHook.jsx @@ -33,7 +33,15 @@ export const PreferencesContextProvider = ({children}) => { } else { localStorage.setItem("preferences", JSON.stringify(withDefaultsRemoved)); } - }, [defaultPreferences, authRequired, authLoaded, loggedIn]); + setPreferences({...defaultPreferences, ...(withDefaultsRemoved || {})}); + }, [defaultPreferences, authRequired, authLoaded, loggedIn, setPreferences]); + + const setSomePreferences = useCallback(userPref => { + storePreferences({...preferences, ...userPref}); + }, [storePreferences, preferences]); + const getKeyedPreference = useCallback(key => { + return preferences[key]; + }, [preferences]); useEffect(() => { updatePreferences(); @@ -42,12 +50,13 @@ export const PreferencesContextProvider = ({children}) => { const sharedState = useMemo(() => { return { ...preferences, - storePreferences, + getKeyedPreference, + setSomePreferences, defaultPreferences, preferencesLoaded: Object.keys(defaultPreferences || {}).length > 0 } }, - [preferences, defaultPreferences, storePreferences]); + [preferences, defaultPreferences, storePreferences, getKeyedPreference, setSomePreferences]); return ( {children}