quiz-interactions
Version:
A React UI component Library for quiz interaction types.
199 lines (162 loc) • 6.1 kB
JavaScript
"use strict";
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 _uiForms = require("@instructure/ui-forms");
var _quizI18n = require("@instructure/quiz-i18n");
var _uiLayout = require("@instructure/ui-layout");
var _quizNumberInput = require("@instructure/quiz-number-input");
var _NumericTypeSelect = _interopRequireDefault(require("./NumericTypeSelect"));
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message"));
var _constants = require("./constants");
var MarginOfError =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(MarginOfError, _Component);
function MarginOfError() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, MarginOfError);
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)(MarginOfError)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this.state = {
margin: '',
value: '',
onClickHelp: null
};
_this.handleMarginChange = function (event, value, normalized) {
_this.setState({
margin: value
});
_this.props.onChange(event, {
id: _this.props.id,
margin: normalized
});
};
_this.handleMarginTypeChange = function (event, _ref) {
var value = _ref.value;
_this.props.onChange(event, {
id: _this.props.id,
marginType: value
});
};
_this.handleValueChange = function (event, value, normalized) {
_this.setState({
value: value
});
_this.props.onChange(event, {
id: _this.props.id,
value: normalized
});
};
return _this;
}
(0, _createClass2.default)(MarginOfError, [{
key: "componentWillMount",
value: function componentWillMount() {
if (this.props.margin) {
var margin;
try {
margin = _quizI18n.Decimal.toLocaleString(this.props.margin, this.props.locale);
} catch (e) {
margin = this.props.margin;
}
this.setState({
margin: margin
});
}
if (this.props.value) {
var value;
try {
value = _quizI18n.Decimal.toLocaleString(this.props.value, this.props.locale);
} catch (e) {
value = this.props.value;
}
this.setState({
value: value
});
}
}
}, {
key: "render",
value: function render() {
return _react.default.createElement(_uiLayout.Flex, {
alignItems: "start"
}, _react.default.createElement(_uiLayout.Flex.Item, {
grow: true,
shrink: true,
margin: "0 xx-small"
}, _react.default.createElement(_NumericTypeSelect.default, {
id: this.props.id,
onChange: this.props.onChangeType,
onClickHelp: this.props.onClickHelp,
value: _constants.MARGIN_OF_ERROR
})), _react.default.createElement(_uiLayout.Flex.Item, {
grow: true,
shrink: true,
margin: "0 xx-small"
}, _react.default.createElement(_quizNumberInput.ScientificNumberInput, {
label: (0, _formatMessage.default)('Answer'),
locale: this.props.locale,
messages: this.props.messages.value,
onChange: this.handleValueChange,
value: this.state.value
})), _react.default.createElement(_uiLayout.Flex.Item, {
grow: true,
shrink: true,
margin: "0 xx-small"
}, _react.default.createElement(_quizNumberInput.ScientificNumberInput, {
label: (0, _formatMessage.default)('+/- margin'),
locale: this.props.locale,
messages: this.props.messages.margin,
min: 0,
onChange: this.handleMarginChange,
value: this.state.margin
})), _react.default.createElement(_uiLayout.Flex.Item, {
grow: true,
shrink: true,
margin: "0 xx-small"
}, _react.default.createElement(_uiForms.Select, {
label: (0, _formatMessage.default)('Type'),
onChange: this.handleMarginTypeChange,
selectedOption: this.props.marginType
}, _react.default.createElement("option", {
value: _constants.PERCENT
}, (0, _formatMessage.default)('Percent')), _react.default.createElement("option", {
value: _constants.ABSOLUTE
}, (0, _formatMessage.default)('Absolute')))));
}
}]);
MarginOfError.displayName = "MarginOfError";
return MarginOfError;
}(_react.Component);
exports.default = MarginOfError;
MarginOfError.propTypes = {
id: _propTypes.default.string.isRequired,
locale: _propTypes.default.string.isRequired,
margin: _propTypes.default.string,
marginType: _propTypes.default.oneOf([_constants.PERCENT, _constants.ABSOLUTE]).isRequired,
messages: _propTypes.default.objectOf(_propTypes.default.array),
onChange: _propTypes.default.func.isRequired,
onChangeType: _propTypes.default.func.isRequired,
onClickHelp: _propTypes.default.func,
value: _propTypes.default.string
};
MarginOfError.defaultProps = {
margin: void 0,
messages: void 0,
onClickHelp: void 0,
value: void 0
};