@mason-api/javascript-sdk
Version:
Mason component rendering library
138 lines (122 loc) • 5.27 kB
JavaScript
;
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;