react-web-native-sketch
Version:
[TODO: We need an overview of how this can be used via npm vs as a local package]
87 lines • 4.83 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
require("whatwg-fetch");
var navigation_1 = require("./reducers/navigation");
var s3upload_1 = require("./reducers/s3upload");
var utils_1 = require("./utils");
exports.s3UploadMiddleware = function (baseUrl, baseHeaders) {
if (baseHeaders === void 0) { baseHeaders = {}; }
return function (_a) {
var dispatch = _a.dispatch, getState = _a.getState;
return function (next) { return function (action) {
var s3Upload = action.s3Upload, fields = action.fields, field = action.field, method = action.method, formName = action.formName, url = action.url, extraHeaders = action.extraHeaders, body = action.body, queryParameters = action.queryParameters, _a = action.requestPayload, requestPayload = _a === void 0 ? {} : _a, _b = action.successPayload, successPayload = _b === void 0 ? {} : _b, dispatchOnSuccess = action.dispatchOnSuccess, _c = action.failurePayload, failurePayload = _c === void 0 ? {} : _c, dispatchOnFailure = action.dispatchOnFailure;
if (!s3Upload) {
// Normal action: pass it on
return next(action);
}
dispatch(__assign({ type: s3upload_1.TypeKeys.GET_S3_PHOTO_INFO }, requestPayload));
// @ts-ignore
var persistedHeaders = (getState().persisted && getState().persisted.headers) || {};
var fetchParams = {
method: method,
body: JSON.stringify(body),
headers: __assign({}, baseHeaders, persistedHeaders, (extraHeaders || {})),
};
return fetch(baseUrl + utils_1.encodeParametersInUrl(url, queryParameters), fetchParams)
.then(function (response) {
return response
.json()
.then(function (json) {
var actionType = s3upload_1.TypeKeys.GET_S3_PHOTO_INFO_FAIL, extraData = failurePayload;
if (response.status >= 200 && response.status < 300) {
actionType = s3upload_1.TypeKeys.GET_S3_PHOTO_INFO_SUCCESS;
extraData = successPayload;
dispatchOnSuccess && dispatch(dispatchOnSuccess);
}
else {
if (json.error) {
dispatch(navigation_1.showAlert(json.error));
}
else {
dispatch(navigation_1.showAlert('API_ERROR'));
}
dispatchOnFailure && dispatch(dispatchOnFailure);
}
dispatch(__assign({ response: json, type: actionType }, extraData));
if (actionType === s3upload_1.TypeKeys.GET_S3_PHOTO_INFO_SUCCESS) {
// TODO show a message to the user that he can only upload max 20 files
var backendData = fields.length > 1 ? json : [json];
for (var i in backendData) {
var photo = fields[i].field, s3ExtraData = fields[i].s3ExtraData, s3Data = __assign({}, backendData[i], s3ExtraData), payload = {
field: field,
photo: photo,
formName: formName,
s3Key: s3Data.key,
preview: fields[i].preview,
};
dispatch({
formTypes: [
s3upload_1.TypeKeys.POST_S3_DATA,
s3upload_1.TypeKeys.POST_S3_DATA_SUCCESS,
s3upload_1.TypeKeys.POST_S3_DATA_FAIL
],
data: s3Data,
requestPayload: payload,
successPayload: payload,
failurePayload: payload,
});
}
}
});
}).catch(function (error) {
console.log(error);
dispatch(__assign({ response: { error: error }, type: s3upload_1.TypeKeys.GET_S3_PHOTO_INFO_FAIL }, failurePayload));
dispatchOnFailure && dispatch(dispatchOnFailure);
});
}; };
};
};
//# sourceMappingURL=s3UploadMiddleware.js.map