mirror of
https://gitlab.com/wheres-the-tp/ui-mobile.git
synced 2026-01-25 06:04:55 -06:00
52 lines
1.3 KiB
JavaScript
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
|
|
}
|
|
},
|
|
};
|
|
})
|
|
);
|