@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
JavaScript
;
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;