quiz-interactions
Version:
A React UI component Library for quiz interaction types.
138 lines (104 loc) • 4.27 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _pickBy = _interopRequireDefault(require("lodash/fp/pickBy"));
var _forEach = _interopRequireDefault(require("lodash/fp/forEach"));
var _Alert = _interopRequireDefault(require("../Alert"));
var dummyImg = 'https://i.ytimg.com/vi/LgkAebhJ7iE/maxresdefault.jpg';
function clone(children, props) {
return _react.default.cloneElement(children, (0, _pickBy.default)(function (prop) {
return prop !== void 0;
}, props));
}
var TakeStateProvider =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(TakeStateProvider, _Component);
function TakeStateProvider() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, TakeStateProvider);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(TakeStateProvider)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this.state = {
userResponse: void 0 // storage for the currently ongoing requests
};
_this.uploadRequests = null;
_this.makeUploadHandler = function (id, callback) {
return function () {
delete _this.uploadRequests[id];
callback(dummyImg);
};
};
_this.cancelMediaUpload = function (id) {
clearTimeout(_this.uploadRequests[id]);
delete _this.uploadRequests[id];
};
_this.handleResponseUpdate = function (value) {
_this.setState({
userResponse: {
value: value
}
});
};
_this.notifyScreenreader = function (content) {
return _this.alert.setAlert(content);
};
_this.mediaUpload = function (id, file, callback) {
// Simulates the upload of file
// calls callback when the upload has finished
if (_this.uploadRequests[id] !== void 0) {
_this.cancelMediaUpload(id);
}
_this.uploadRequests[id] = setTimeout(_this.makeUploadHandler(id, callback), 2000 + Math.random() * 2000);
};
_this.handleAlertRef = function (node) {
_this.alert = node;
};
return _this;
}
(0, _createClass2.default)(TakeStateProvider, [{
key: "componentWillMount",
value: function componentWillMount() {
this.uploadRequests = {};
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
(0, _forEach.default)(clearTimeout, this.uploadRequests);
} // generates the callback used when an upload has finished
}, {
key: "render",
value: function render() {
console.log('Current Response:', this.state.userResponse); // eslint-disable-line no-console
return _react.default.createElement("div", null, _react.default.createElement(_Alert.default, {
ref: this.handleAlertRef
}), clone(this.props.children, {
notifyScreenreader: this.notifyScreenreader,
userResponse: this.state.userResponse,
handleResponseUpdate: this.handleResponseUpdate,
cancelMediaUpload: this.cancelMediaUpload,
mediaUpload: this.mediaUpload
}));
}
}]);
TakeStateProvider.displayName = "TakeStateProvider";
return TakeStateProvider;
}(_react.Component);
exports.default = TakeStateProvider;
TakeStateProvider.propTypes = {
children: _propTypes.default.node.isRequired
};