digitransit-ui/app/hooks/FavouriteContext.js
Simo Partinen 2b83102f66 feat: added FavouriteContext
(cherry picked from commit 4b9037ec042a081f21963c7fe683a7edc6318f47)
2026-01-22 15:46:04 +02:00

38 lines
1,022 B
JavaScript

import React, { createContext, useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const fluxibleContextShape = PropTypes.shape({
getStore: PropTypes.func.isRequired,
});
const FavouriteContext = createContext([]);
export const useFavourites = () => useContext(FavouriteContext);
export function FavouriteProvider({ context, children }) {
const [favourites, setFavourites] = useState(
context.getStore('FavouriteStore').getFavourites(),
);
useEffect(() => {
const store = context.getStore('FavouriteStore');
const onChange = () => setFavourites(store.getFavourites());
store.addChangeListener(onChange);
return () => store.removeChangeListener(onChange);
}, [context]);
return (
<FavouriteContext.Provider value={favourites}>
{children}
</FavouriteContext.Provider>
);
}
FavouriteProvider.propTypes = {
context: fluxibleContextShape.isRequired,
children: PropTypes.node,
};
FavouriteProvider.defaultProps = {
children: null,
};