aretherecookies-mobile/js/enhancers/favesEnhancer.js
2020-03-29 19:47:33 +00:00

52 lines
1.3 KiB
JavaScript

//@flow
import mapPropsStream from 'recompose/mapPropsStream';
import Faves$, { emit as emitFaves, emitOne as emitFave } from '../streams/FavesStream';
import { fetchFaves, putFaves, deleteFaves } from '../apis/FavesApi';
import { fromJS, get } from 'immutable';
const fetchAndEmitFaves = async () => {
const faves = fromJS(await fetchFaves());
emitFaves(faves);
};
const buildTempFave = foodItemId =>
fromJS({
food_item_id: foodItemId,
date: Date.now(),
});
export const withFaves = mapPropsStream(props$ =>
props$.combineLatest(Faves$, (props, faves) => {
return {
...props,
faves,
getFaves: async () => {
try {
await fetchAndEmitFaves();
} catch (err) {
console.log(err); // eslint-disable-line no-console
}
},
addFave: async foodItemId => {
try {
await putFaves([foodItemId]);
emitFave(buildTempFave(foodItemId));
} catch (err) {
console.log(err); // eslint-disable-line no-console
}
},
deleteFave: async foodItemId => {
try {
await deleteFaves([foodItemId]);
const idx = faves.findIndex(fave => get(fave, 'id') === foodItemId);
if (idx >= 0) {
emitFaves(faves.delete(idx));
}
} catch (err) {
console.log(err); // eslint-disable-line no-console
}
},
};
})
);