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.

105 lines (104 loc) 5.26 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.revenueCentersReducer = exports.selectRevenueCenterCount = exports.selectRevenueCenters = exports.setRevenueCenters = exports.resetRevenueCenters = exports.fetchLocations = exports.fetchRevenueCenters = exports.RevenueCentersActionType = 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 initialState = { revenueCenters: [], links: {}, loading: 'idle', error: null }; var RevenueCentersActionType; (function (RevenueCentersActionType) { RevenueCentersActionType["FetchRevenueCenters"] = "revenueCenters/fetchRevenueCenters"; RevenueCentersActionType["FetchLocations"] = "revenueCenters/fetchLocations"; })(RevenueCentersActionType = exports.RevenueCentersActionType || (exports.RevenueCentersActionType = {})); exports.fetchRevenueCenters = (0, toolkit_1.createAsyncThunk)(RevenueCentersActionType.FetchRevenueCenters, (requestData, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { try { const { config: { api }, revenueCenters: { revenueCenters: currentCenters } } = getState(); if (requestData.lat) requestData.lat = parseFloat(requestData.lat.toFixed(7)); if (requestData.lng) requestData.lng = parseFloat(requestData.lng.toFixed(7)); const { data, links } = (yield api.getRevenueCenters(requestData.type, requestData.is_outpost, requestData.lat, requestData.lng, requestData.requestedAt, requestData.service_type, requestData.limit, requestData.cursor)); const revenueCenters = requestData.lat && requestData.lng ? (0, utils_1.addDistance)(data, { lat: requestData.lat, lng: requestData.lng }) : data; const result = requestData.cursor ? currentCenters.concat(revenueCenters) : revenueCenters; return { data: result, links }; } catch (err) { return rejectWithValue(err); } })); exports.fetchLocations = (0, toolkit_1.createAsyncThunk)(RevenueCentersActionType.FetchLocations, (requestData, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { try { const { config: { api }, revenueCenters: { revenueCenters: currentCenters } } = getState(); if (requestData.lat) requestData.lat = parseFloat(requestData.lat.toFixed(7)); if (requestData.lng) requestData.lng = parseFloat(requestData.lng.toFixed(7)); const { data, links } = (yield api.getLocations(requestData.type, requestData.is_outpost, requestData.lat, requestData.lng, requestData.requestedAt, requestData.cart_total, requestData.address, requestData.service_type, requestData.limit, requestData.cursor)); const revenueCenters = requestData.lat && requestData.lng ? (0, utils_1.addDistance)(data, { lat: requestData.lat, lng: requestData.lng }) : data; const result = requestData.cursor ? currentCenters.concat(revenueCenters) : revenueCenters; return { data: result, links }; } catch (err) { return rejectWithValue(err); } })); const revenueCentersSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.RevenueCenters, initialState, reducers: { resetRevenueCenters: () => initialState, setRevenueCenters: (state, action) => { state.revenueCenters = action.payload; } }, extraReducers: builder => { builder .addCase(exports.fetchRevenueCenters.fulfilled, (state, action) => { state.revenueCenters = action.payload.data; state.links = action.payload.links; state.loading = 'idle'; state.error = null; }) .addCase(exports.fetchRevenueCenters.pending, state => { state.loading = 'pending'; }) .addCase(exports.fetchRevenueCenters.rejected, (state, action) => { state.error = action.payload; state.loading = 'idle'; }) .addCase(exports.fetchLocations.fulfilled, (state, action) => { state.revenueCenters = action.payload.data; state.links = action.payload.links; state.loading = 'idle'; state.error = null; }) .addCase(exports.fetchLocations.pending, state => { state.loading = 'pending'; }) .addCase(exports.fetchLocations.rejected, (state, action) => { state.error = action.payload; state.loading = 'idle'; }); } }); _a = revenueCentersSlice.actions, exports.resetRevenueCenters = _a.resetRevenueCenters, exports.setRevenueCenters = _a.setRevenueCenters; const selectRevenueCenters = (state) => state.revenueCenters; exports.selectRevenueCenters = selectRevenueCenters; const selectRevenueCenterCount = (state) => state.revenueCenters ? state.revenueCenters.revenueCenters.length : 0; exports.selectRevenueCenterCount = selectRevenueCenterCount; exports.revenueCentersReducer = revenueCentersSlice.reducer;