react-misc-toolbox
Version:
[ ] imageviewer | gradual scroll [ ] imageviewer | cancellable scroll
671 lines (619 loc) • 23.6 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Form = undefined;
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends5 = require('babel-runtime/helpers/extends');
var _extends6 = _interopRequireDefault(_extends5);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _helperFunctions = require('./helperFunctions');
var _recompose = require('recompose');
var _Button = require('./Button');
var _Button2 = _interopRequireDefault(_Button);
var _SelectOne = require('./SelectOne');
var _SelectOne2 = _interopRequireDefault(_SelectOne);
var _SelectMany = require('./SelectMany');
var _SelectMany2 = _interopRequireDefault(_SelectMany);
var _ = require('.');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var signValueLabelMaps = [{
value: -1,
label: '<'
}, {
value: 0,
label: '='
}, {
value: 1,
label: '>'
}];
var sumOf = function sumOf(arrayOfNumbers) {
return arrayOfNumbers.reduce(function (acc, v) {
acc = acc + v;
return acc;
});
};
var Form = function Form(props) {
var onMount = props.onMount,
onUnmount = props.onUnmount,
_props$baseClassName = props.baseClassName,
baseClassName = _props$baseClassName === undefined ? 'form' : _props$baseClassName,
className = props.className,
style = props.style,
values = props.values,
touched = props.touched,
errors = props.errors,
children = props.children,
handleChange = props.handleChange,
handleSubmit = props.handleSubmit,
setFieldValue = props.setFieldValue,
setFieldTouched = props.setFieldTouched,
isSubmitting = props.isSubmitting;
//useEffect(() => {
// onMount && onMount()
// return () => {
// onUnmount && onUnmount()
// }
//}, [])
var renderError = function renderError(type) {
return errors && errors[type] && touched && touched[type] && _react2.default.createElement(
'div',
{ className: baseClassName + '__error' },
errors[type]
);
};
var renderTextareaInputSocket = function renderTextareaInputSocket(_ref) {
var type = _ref.type,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === undefined ? true : _ref$required;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__socket ' + baseClassName + '__textarea__socket' },
values[type] && _react2.default.createElement(
_react.Fragment,
null,
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__textarea__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
),
_react2.default.createElement('textarea', {
className: baseClassName + '__input ' + baseClassName + '__textarea__input',
'data-testid': type.toLowerCase() + '-input',
id: type,
required: required,
value: values[type],
onChange: function onChange(e) {
return setFieldValue(type, e.target.value);
}
})
),
errors[type] && touched[type] && _react2.default.createElement(
'div',
{ className: 'input-feedback' },
errors[type]
)
);
};
var renderSelectManyWithAdvancedCompositionSocket = function renderSelectManyWithAdvancedCompositionSocket(_ref2) {
var _ref2$isSigned = _ref2.isSigned,
isSigned = _ref2$isSigned === undefined ? true : _ref2$isSigned,
_ref2$isVertical = _ref2.isVertical,
isVertical = _ref2$isVertical === undefined ? false : _ref2$isVertical,
type = _ref2.type,
label = _ref2.label,
optionLabels = _ref2.optionLabels,
renderTrigger = _ref2.renderTrigger;
//draw currentOptions from labels and current values
var currentOptions = values[type] ? (0, _keys2.default)(values[type]).map(function (compositionID) {
var currentOptionLabelMap = optionLabels.find(function (optionLabel) {
return optionLabel.value === compositionID;
});
if (!currentOptionLabelMap) {
throw new Error('optionLabels prop lacks one or more of the form values');
}
return {
value: compositionID,
label: currentOptionLabelMap.label
};
}) : [];
var getSharedInputProps = function getSharedInputProps(_ref3) {
var currentOption = _ref3.currentOption;
var value = values[type][currentOption.value];
return {
onClick: function onClick(e) {
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
},
id: currentOption.value,
value: value ? value[0] : 0,
onChange: function onChange(v) {
var integerValue = parseInt(v.target.value, 10);
var integerSign = value ? value[1] : 0;
setFieldValue(type, (0, _extends6.default)({}, values[type], (0, _defineProperty3.default)({}, currentOption.value, [integerValue, integerSign])));
}
};
};
var renderSignDropdown = function renderSignDropdown(_ref4) {
var option = _ref4.option;
//signValueLabelMapExists =
return values[type][option.value] && _react2.default.createElement(
_SelectOne2.default,
{
renderTrigger: function renderTrigger(_ref5) {
var currentOption = _ref5.currentOption,
isOn = _ref5.isOn,
getTriggerProps = _ref5.getTriggerProps;
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({ isOn: isOn }, getTriggerProps()),
currentOption ? currentOption.label : optionLabels[0].label
);
},
currentOption: signValueLabelMaps.find(function (signValueLabelMap) {
return signValueLabelMap.value === values[type][option.value][1];
}),
onChange: function onChange(signValueLabelMap) {
setFieldValue(type, (0, _extends6.default)({}, values[type], (0, _defineProperty3.default)({}, option.value, [values[type][option.value][0], signValueLabelMap.value])));
},
options: signValueLabelMaps
},
signValueLabelMaps
);
};
var renderCurrentOptionLabel = function renderCurrentOptionLabel(_ref6) {
var currentOption = _ref6.currentOption;
return _react2.default.createElement(
'div',
{
className: (0, _helperFunctions.flippyClass)(isVertical, baseClassName + '__composition__label', 'vertical', 'horizontal')
},
currentOption.label
);
};
var renderCurrentOptionInputs = function renderCurrentOptionInputs(_ref7) {
var currentOption = _ref7.currentOption;
var renderRangeInput = function renderRangeInput() {
return _react2.default.createElement('input', (0, _extends6.default)({}, getSharedInputProps({ currentOption: currentOption }), {
className: (0, _helperFunctions.flippyMultiBase)(isVertical, [baseClassName + '__composition__input', baseClassName + '__composition__input__range'], 'vertical', 'horizontal'),
style: isVertical ? {
WebkitAppearance: 'slider-vertical',
writingMode: 'bt-lr'
} : {},
orient: isVertical ? 'vertical' : 'horizontal',
type: 'range'
}));
};
var renderNumberInput = function renderNumberInput() {
return _react2.default.createElement('input', (0, _extends6.default)({}, getSharedInputProps({ currentOption: currentOption }), {
className: baseClassName + '__composition__input ' + baseClassName + '__composition__input__number',
type: 'number'
}));
};
return _react2.default.createElement(
_react.Fragment,
null,
renderRangeInput(),
isSigned && renderSignDropdown({ option: currentOption }),
renderNumberInput()
);
};
var renderLabel = function renderLabel() {
return _react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__composition__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
);
};
return _react2.default.createElement(
'div',
{ className: baseClassName + '__socket ' + baseClassName + '__composition__socket' },
label && renderLabel(),
_react2.default.createElement(
_SelectMany2.default,
{
initialOptions: currentOptions,
options: optionLabels,
renderTrigger: renderTrigger,
onChange: function onChange(value) {
console.log('onChange', value);
setFieldValue(type, value.reduce(function (acc, v) {
if ((0, _keys2.default)(values[type]).length === 0) {
acc[v.value] = [100, -1];
} else if (values[type][v.value]) {
acc[v.value] = values[type][v.value];
} else {
acc[v.value] = [0, 1];
}
return acc;
}, {}));
},
transitionType: ['dropdown', 'fade'],
pivotFrom: 'DOWNRIGHT',
renderCurrentOption: function renderCurrentOption(currentOption) {
return _react2.default.createElement(
'div',
{
className: (0, _helperFunctions.flippyClass)(isVertical, baseClassName + '__composition', 'vertical', 'horizontal')
},
renderCurrentOptionLabel({
currentOption: currentOption
}),
renderCurrentOptionInputs({
currentOption: currentOption
})
);
}
},
function (_ref8) {
var getChildProps = _ref8.getChildProps,
getChildrenProps = _ref8.getChildrenProps,
currentOptions = _ref8.currentOptions;
return _react2.default.createElement(
'div',
(0, _extends6.default)({}, getChildrenProps({
className: baseClassName + '__composition__options'
})),
optionLabels.map(function (optionLabel) {
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({
colors: 'neutral',
isOn: currentOptions.map(function (currentOption) {
return currentOption.value;
}).includes(optionLabel.value)
}, getChildProps({
option: optionLabel
}), {
key: optionLabel.value
}),
optionLabel.label
);
})
);
}
)
);
};
var renderSelectManyWithCompositionSocket = function renderSelectManyWithCompositionSocket(_ref9) {
var type = _ref9.type,
label = _ref9.label,
options = _ref9.options,
currentOptions = _ref9.currentOptions,
renderTrigger = _ref9.renderTrigger;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__socket ' + baseClassName + '__composition__socket' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__composition__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
),
_react2.default.createElement(
_SelectMany2.default,
{
currentOptions: values[type] ? (0, _keys2.default)(values[type]).map(function (v) {
return {
value: v,
label: options.find(function (o) {
return o.value === v;
}) ? options.find(function (o) {
return o.value === v;
}).label : 'label not found'
};
}) : [],
options: options,
renderTrigger: renderTrigger,
onChange: function onChange(value) {
setFieldValue(type, value.reduce(function (acc, v) {
acc[v.value] = 0;
return acc;
}, {}));
},
transitionType: ['dropdown', 'fade'],
pivotFrom: 'DOWNRIGHT'
},
function (_ref10) {
var getChildProps = _ref10.getChildProps,
getChildrenProps = _ref10.getChildrenProps,
currentOptions = _ref10.currentOptions;
return _react2.default.createElement(
'div',
(0, _extends6.default)({}, getChildrenProps({ style: { width: '25.5rem' } })),
options.map(function (option) {
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({}, getChildProps({
option: { value: option.value, label: option.label }
}), {
key: option.value
}),
option.label
);
})
);
}
),
values[type] && (0, _keys2.default)(values[type]).map(function (component) {
return _react2.default.createElement(
'div',
{ key: component, className: baseClassName + '__composition' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__composition__label' },
options.find(function (o) {
return o.value === component;
}) ? options.find(function (o) {
return o.value === component;
}).label : 'label not found'
),
_react2.default.createElement('input', {
className: baseClassName + '__composition__input',
id: component,
type: 'number',
value: values[type][component],
onChange: function onChange(v) {
setFieldValue(type, (0, _extends6.default)({}, values[type], (0, _defineProperty3.default)({}, component, v.target.value)));
}
})
);
})
);
};
var renderSelectManySocket = function renderSelectManySocket(_ref11) {
var type = _ref11.type,
label = _ref11.label,
options = _ref11.options,
currentOptions = _ref11.currentOptions,
renderTrigger = _ref11.renderTrigger;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__socket ' + baseClassName + '__select__socket' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__select__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
),
_react2.default.createElement(
_SelectMany2.default,
{
currentOptions: values[type],
options: options,
renderTrigger: renderTrigger,
onChange: function onChange(value) {
setFieldValue(type, value);
},
transitionType: ['dropdown', 'fade'],
pivotFrom: 'DOWNRIGHT'
},
function (_ref12) {
var getChildProps = _ref12.getChildProps,
getChildrenProps = _ref12.getChildrenProps;
return _react2.default.createElement(
'div',
(0, _extends6.default)({}, getChildrenProps({
className: baseClassName + '__dropdown',
style: { width: '25.5rem' }
})),
options.map(function (option) {
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({}, getChildProps({
option: { value: option.value, label: option.label }
}), {
key: option.value
}),
option.label
);
})
);
}
)
);
};
var renderSelectOneSocket = function renderSelectOneSocket(_ref13) {
var type = _ref13.type,
label = _ref13.label,
options = _ref13.options;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__socket ' + baseClassName + '__select__socket' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__select__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
),
_react2.default.createElement(
_SelectOne2.default,
{
renderTrigger: function renderTrigger(_ref14) {
var isOn = _ref14.isOn,
currentOption = _ref14.currentOption,
getTriggerProps = _ref14.getTriggerProps;
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({
type: 'caretdown',
isOn: isOn
}, getTriggerProps({
className: 'selectone__trigger',
style: { border: '1px solid #ccc' }
}), {
colors: _.buttonStyles.monochrome
}),
currentOption ? currentOption.label : ''
);
},
options: options,
currentOption: values[type],
onChange: function onChange(value) {
setFieldValue(type, value);
},
transitionType: ['dropdown', 'fade'],
pivotFrom: 'DOWNRIGHT'
},
function (_ref15) {
var getChildProps = _ref15.getChildProps,
getChildrenProps = _ref15.getChildrenProps,
currentOption = _ref15.currentOption,
toggleIsOn = _ref15.toggleIsOn;
return _react2.default.createElement(
'div',
(0, _extends6.default)({}, getChildrenProps({ style: { width: '25.5rem' } })),
options.map(function (option) {
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({}, getChildProps({
option: { value: option.value, label: option.label },
onClick: toggleIsOn
}), {
isOn: currentOption.value === option.value,
key: option.value
}),
option.label
);
})
);
}
)
);
};
var renderSubmitButton = function renderSubmitButton() {
var _ref16 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var label = _ref16.label,
props = (0, _objectWithoutProperties3.default)(_ref16, ['label']);
return _react2.default.createElement(
_Button2.default,
(0, _extends6.default)({
invert: true,
colors: 'surfing',
onClick: handleSubmit,
dataTestId: 'submit',
disabled: isSubmitting,
style: { width: '24rem', borderRadius: '.25rem' }
}, props),
label
);
};
var renderTextInputSocket = function renderTextInputSocket(_ref17) {
var type = _ref17.type,
label = _ref17.label,
sublabel = _ref17.sublabel,
_ref17$options = _ref17.options,
options = _ref17$options === undefined ? { required: true, autoFocus: false, autoComplete: '' } : _ref17$options,
props = (0, _objectWithoutProperties3.default)(_ref17, ['type', 'label', 'sublabel', 'options']);
return _react2.default.createElement(
'div',
(0, _extends6.default)({ className: baseClassName + '__socket' }, props),
_react2.default.createElement('input', {
id: type,
className: baseClassName + '__socket__input ' + baseClassName + '__socket__input__' + type.toLowerCase(),
type: 'text',
required: options.required ? options.required : true,
autoFocus: options.autoFocus ? options.autoFocus : false,
value: values[type],
autoComplete: options.autoComplete ? options.autoComplete : '',
onChange: handleChange,
onBlur: function onBlur() {
return setFieldTouched(type);
}
}),
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__socket__label' },
(0, _helperFunctions.capitalizeEveryWord)(label)
),
_react2.default.createElement('div', { className: baseClassName + '__socket__bar' }),
sublabel && _react2.default.createElement(
'div',
{ className: baseClassName + '__socket__sublabel' },
sublabel
),
renderError(type)
);
};
var renderGroup = function renderGroup(_ref18) {
var label = _ref18.label,
renderChildren = _ref18.renderChildren;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__group' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__group__label' },
label
),
_react2.default.createElement(
'div',
{ className: baseClassName + '__children ' + baseClassName + '__group__children' },
renderChildren()
)
);
};
var renderCheckboxSocket = function renderCheckboxSocket(_ref19) {
var label = _ref19.label,
type = _ref19.type;
return _react2.default.createElement(
'div',
{ className: baseClassName + '__checkbox' },
_react2.default.createElement(
'div',
{ className: baseClassName + '__label ' + baseClassName + '__checkbox__label' },
label
),
_react2.default.createElement('input', {
id: type,
className: baseClassName + '__checkbox__input',
type: 'checkbox',
checked: values[type],
onChange: handleChange
})
);
};
return _react2.default.createElement(
'form',
{
onSubmit: handleSubmit,
className: className ? className : 'form',
style: style
},
children({
renderTextInputSocket: renderTextInputSocket,
renderTextareaInputSocket: renderTextareaInputSocket,
renderSelectManyWithCompositionSocket: renderSelectManyWithCompositionSocket,
renderSelectManyWithAdvancedCompositionSocket: renderSelectManyWithAdvancedCompositionSocket,
renderSelectOneSocket: renderSelectOneSocket,
renderSelectManySocket: renderSelectManySocket,
renderCheckboxSocket: renderCheckboxSocket,
renderGroup: renderGroup,
renderSubmitButton: renderSubmitButton
}),
errors.firebase && _react2.default.createElement(
'div',
{
'data-testid': 'registeraccountmodal-formerror-firebase',
className: 'input-feedback'
},
'error!',
errors.firebase
),
_react2.default.createElement('input', { type: 'submit', style: { visibility: 'hidden', height: 0, width: 0 } })
);
};
exports.Form = Form;
Form.defaultProps = {
handleSubmit: function handleSubmit() {
return console.log('Form: handleSubmit');
},
style: {}
};
var enhance = (0, _recompose.compose)();
//onlyUpdateForKeys([`values`, `touched`, `errors`, `children`])
exports.default = enhance(Form);