UNPKG

@open-tender/cloud

Version:

A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our cloud-based Order API.

84 lines (83 loc) 3.55 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.allergensReducer = exports.selectSelectedAllergenNames = exports.selectSelectedAllergens = exports.selectAllergens = exports.setSelectedAllergens = exports.resetAllergens = exports.fetchAllergens = exports.AllergensActionType = void 0; const tslib_1 = require("tslib"); const toolkit_1 = require("@reduxjs/toolkit"); const types_1 = require("./types"); const utils_1 = require("@open-tender/utils"); const makeAllergenLookup = (data) => { return data.reduce((obj, i) => { const imageMap = i.images ? (0, utils_1.makeImageMap)(i.images) : {}; const imageUrl = imageMap.SMALL_IMAGE || imageMap.APP_IMAGE || imageMap.LARGE_IMAGE || ''; const tag = Object.assign(Object.assign({}, i), { imageUrl }); return Object.assign(Object.assign({}, obj), { [i.name]: tag }); }, {}); }; const initialState = { entities: [], error: null, loading: 'idle', selectedAllergens: null, lookup: {} }; var AllergensActionType; (function (AllergensActionType) { AllergensActionType["FetchAllergens"] = "allergens/fetchAllergens"; })(AllergensActionType = exports.AllergensActionType || (exports.AllergensActionType = {})); exports.fetchAllergens = (0, toolkit_1.createAsyncThunk)(AllergensActionType.FetchAllergens, (_, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { try { const api = getState().config.api; const { data } = yield api.getAllergens(); const lookup = makeAllergenLookup(data); return { data, lookup }; } catch (err) { return rejectWithValue(err); } })); const allergensSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.Allergens, initialState, reducers: { resetAllergens: () => initialState, setSelectedAllergens: (state, action) => { state.selectedAllergens = action.payload; } }, extraReducers: builder => { builder .addCase(exports.fetchAllergens.fulfilled, (state, action) => { state.entities = action.payload.data; state.lookup = action.payload.lookup; state.loading = 'idle'; state.error = null; }) .addCase(exports.fetchAllergens.pending, state => { state.loading = 'pending'; }) .addCase(exports.fetchAllergens.rejected, (state, action) => { state.error = action.payload; state.loading = 'idle'; }); } }); _a = allergensSlice.actions, exports.resetAllergens = _a.resetAllergens, exports.setSelectedAllergens = _a.setSelectedAllergens; const selectAllergens = (state) => state.allergens; exports.selectAllergens = selectAllergens; const selectSelectedAllergens = (state) => state.allergens.selectedAllergens; exports.selectSelectedAllergens = selectSelectedAllergens; exports.selectSelectedAllergenNames = (0, toolkit_1.createSelector)((state) => { const { entities: allergens, selectedAllergens } = state.allergens; return { allergens, selectedAllergens }; }, ({ allergens, selectedAllergens }) => { if (!selectedAllergens) return []; const selected = selectedAllergens.map(i => { var _a; const allergen = allergens.find(a => a.allergen_id === i.allergen_id); return allergen ? (_a = allergen.name) !== null && _a !== void 0 ? _a : '' : ''; }); return selected; }); exports.allergensReducer = allergensSlice.reducer;