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