UNPKG

@mason-api/javascript-sdk

Version:

Mason component rendering library

138 lines (122 loc) 5.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.schema = void 0; var _lodash = _interopRequireDefault(require("lodash")); var _immutabilityHelper = _interopRequireDefault(require("immutability-helper")); var _utils = require("@mason-api/utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var BUCKET_NAME = 'bucketName'; var IDENTITY_POOL_ID = 'identityPoolId'; var REGION = 'region'; var schema = { id: 's3', name: 'S3', keys: { BUCKET_NAME: BUCKET_NAME, IDENTITY_POOL_ID: IDENTITY_POOL_ID, REGION: REGION }, requiredKeys: [BUCKET_NAME, IDENTITY_POOL_ID, REGION], spec: [{ key: BUCKET_NAME, value: '' }, { key: IDENTITY_POOL_ID, value: '' }, { key: REGION, value: '' }] }; exports.schema = schema; var s3 = {}; var _default = { has: function has(config) { return _lodash.default.every(schema.requiredKeys, function (key) { return !_lodash.default.isEmpty(_utils.CONFIG.getValueForIntegration(config, schema.id, key)); }); }, init: function init(getContext) { return function (next) { return function (config) { var bucket = _utils.CONFIG.getValueForIntegration(config, schema.id, BUCKET_NAME); if (!_lodash.default.has(s3, bucket)) { if (!_lodash.default.isObject(AWS)) { throw new Error('AWS not found. Please include AWS SDK script, visit https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-the-jssdk.html for more details'); } else { AWS.config.update({ region: _utils.CONFIG.getValueForIntegration(config, schema.id, REGION), credentials: new AWS.CognitoIdentityCredentials({ IdentityPoolId: _utils.CONFIG.getValueForIntegration(config, schema.id, IDENTITY_POOL_ID) }) }); s3[bucket] = new AWS.S3({ apiVersion: '2006-03-01', params: { Bucket: bucket } }); } } return next(config); }; }; }, render: function render(getContext) { return function (next) { return function (config, configSubpath, target, props) { return next(config, configSubpath, target, _objectSpread({}, props, { willSendData: function willSendData(form, formName) { var bucket = _utils.CONFIG.getValueForIntegration(config, schema.id, BUCKET_NAME); var fileInputs = form.querySelectorAll('input[type="file"]'); var files = _lodash.default.reduce(fileInputs, function (result, input) { if (input.files.length) { // accept single files for now return _lodash.default.concat(result, { file: input.files[0], name: input.getAttribute('name'), required: input.getAttribute('required') }); } return result; }, []); if (!_lodash.default.isEmpty(files)) { return Promise.all(_lodash.default.map(files, function (_ref) { var file = _ref.file, name = _ref.name, required = _ref.required; return s3[bucket].upload({ Key: "".concat(_utils.UUID.uuidv4(), "-").concat(file.name), Body: file, ACL: 'bucket-owner-full-control' }).promise().then(function (_ref2) { var Location = _ref2.Location; return Promise.resolve(_defineProperty({}, name, Location)); }).catch(function () { if (required) { return Promise.reject(false); } return Promise.resolve({}); }); })).then(function (uploads) { return _lodash.default.get(props, 'willSendData', _lodash.default.identity)(_lodash.default.reduce(uploads, function (result, upload) { return (0, _immutabilityHelper.default)(result, { data: { $merge: upload } }); }, form)); }, formName, componentId); } return _lodash.default.get(props, 'willSendData', _lodash.default.identity)(form, formName, componentId); } })); }; }; } }; exports.default = _default;