react-sprucebot
Version:
React components for your Sprucebot Skill 💪🏼
241 lines (209 loc) • 8.34 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var submit = function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
console.log('Redux Form Submit: ', values);
return _context.abrupt('return', new Promise(function (resolve, reject) {
var yes = confirm('Form Success or Fail?');
var done = void 0;
if (yes) {
done = resolve;
} else {
done = reject;
}
setTimeout(done, 1500);
}).then(function () {
return { success: 'Success!' };
}).catch(function () {
throw new _reduxForm.SubmissionError({
firstName: 'Async Validation Error',
_error: 'Submit Failed'
});
}));
case 2:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function submit(_x) {
return _ref.apply(this, arguments);
};
}();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reduxForm = require('redux-form');
var _BotText = require('../BotText/BotText');
var _BotText2 = _interopRequireDefault(_BotText);
var _Pre = require('../Pre/Pre');
var _Pre2 = _interopRequireDefault(_Pre);
var _Button = require('../Button/Button');
var _Button2 = _interopRequireDefault(_Button);
var _LinkPile = require('../LinkPile/LinkPile');
var _LinkPile2 = _interopRequireDefault(_LinkPile);
var _Form = require('../Form/Form');
var _Form2 = _interopRequireDefault(_Form);
var _Typography = require('../Typography/Typography');
var _InputField = require('../InputField/InputField');
var _InputField2 = _interopRequireDefault(_InputField);
var _TextArea = require('../TextArea/TextArea');
var _TextArea2 = _interopRequireDefault(_TextArea);
var _SelectField = require('../SelectField/SelectField');
var _SelectField2 = _interopRequireDefault(_SelectField);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
var required = function required(value) {
return value ? undefined : 'Required';
};
var minLength = function minLength(min) {
return function (value) {
return value && value.length < min ? 'Must be ' + min + ' characters or more' : undefined;
};
};
// Important to invoke this function outside #render()
var minLength8 = minLength(8);
function FormExample(_ref2) {
var handleSubmit = _ref2.handleSubmit,
reset = _ref2.reset,
pristine = _ref2.pristine,
submitting = _ref2.submitting,
error = _ref2.error,
_ref2$onSubmit = _ref2.onSubmit,
onSubmit = _ref2$onSubmit === undefined ? submit : _ref2$onSubmit;
return _react2.default.createElement(
_Form2.default,
{ onSubmit: handleSubmit(onSubmit) },
_react2.default.createElement(
_BotText2.default,
null,
'Using',
' ',
_react2.default.createElement(
'a',
{ href: 'https://redux-form.com', target: '_blank' },
'redux-form'
),
' ',
'makes it easy to validate form state and handle server side errors on form submission. Go ahead, try out the example:'
),
_react2.default.createElement(
_Typography.SectionHeading,
null,
'Example Heading'
),
_react2.default.createElement(_reduxForm.Field, { name: 'firstName', label: 'First Name', component: _InputField2.default }),
_react2.default.createElement(_reduxForm.Field, { name: 'email', label: 'Email', component: _InputField2.default }),
_react2.default.createElement(_reduxForm.Field, {
name: 'password',
type: 'password',
label: 'Password',
validate: [required, minLength8],
component: _InputField2.default
}),
_react2.default.createElement(_reduxForm.Field, {
name: 'description',
type: 'textarea',
label: 'Growing multiline input',
finePrint: 'This is helpful fine print',
component: _TextArea2.default
}),
_react2.default.createElement(
_reduxForm.Field,
{
name: 'dropdown',
label: 'Dropdowns Rock!',
validate: required,
component: _SelectField2.default
},
_react2.default.createElement(
'option',
{ value: null },
'Select a value'
),
_react2.default.createElement(
'option',
{ value: 'value1' },
'Value 1'
),
_react2.default.createElement(
'option',
{ value: 'value2' },
'Value 2'
)
),
error && _react2.default.createElement(
_Typography.Paragraph,
null,
error
),
_react2.default.createElement(
_LinkPile2.default,
null,
_react2.default.createElement(
_Button2.default,
{ alt: true, disabled: pristine || submitting, onClick: reset },
'Reset Form'
),
_react2.default.createElement(
_Button2.default,
{ primary: true, type: 'submit', disabled: submitting, busy: submitting },
'Submit'
)
),
_react2.default.createElement(
_Typography.SectionHeading,
null,
'Basic Form Submission'
),
_react2.default.createElement(
_BotText2.default,
null,
'Notice you pass the form an `initialValues` which sets default values for the form. When a user submits the form is your chance to persist those values to your server and other reducers. When the `onSubmit` is executed, you can expect that client side validations have ran.'
),
_react2.default.createElement(
_Pre2.default,
null,
'\nimport { reduxForm, Field, propTypes, SubmissionError } from \'redux-form\'\n\nconst required = value => (value ? undefined : \'Required\') // Validator\n\nfunction FormExample({ handleSubmit, reset, pristine, submitting, error }) {\n\tconst onSubmit = (values) => console.log(\'Your async submit function. Submitted values: \', values)\n\treturn (\n\t\t<Form onSubmit={handleSubmit(onSubmit)}>\n\t\t\t<SectionHeading>Example Heading</SectionHeading>\n\t\t\t<Field name="firstName" label="First Name" component={InputField} />\n\t\t\t{error && <P>{error}</P>}\n\t\t\t<LinkPile>\n\t\t\t\t<Button alt disabled={pristine || submitting} onClick={reset}>\n\t\t\t\t\tReset Form\n\t\t\t\t</Button>\n\t\t\t\t<Button primary type="submit" disabled={submitting} busy={submitting}>\n\t\t\t\t\tSubmit\n\t\t\t\t</Button>\n\t\t\t</LinkPile>\n\t\t</Form>\n\t)}\nexport default reduxForm({\n\tform: \'form-example\',\n\tinitialValues: {\n\t\tfirstName: \'Sprucebot\'\n\t}\n})(FormExample)'
),
_react2.default.createElement(
_Pre2.default,
null,
'<Field name="firstName" label="First Name" component={InputField} />'
),
_react2.default.createElement(
_Pre2.default,
null,
'<Field name="email" label="Email" component={InputField} />'
),
_react2.default.createElement(
_Pre2.default,
null,
'<Field\n\tname="password"\n\ttype="password"\n\tlabel="Password"\n\tvalidate={[required, minLength8]}\n\tcomponent={InputField}\n/>'
),
_react2.default.createElement(
_Pre2.default,
null,
'<Field\n\tname="description"\n\ttype="textarea"\n\tlabel="Growing multiline input"\n\tfinePrint="This is helpful fine print."\n\tcomponent={TextArea}\n/>'
),
_react2.default.createElement(
_Pre2.default,
null,
'<Field\n\tname="dropdown"\n\tlabel="Dropdowns Rock!"\n\tvalidate={required}\n\tcomponent={SelectField}\n>\n\t<option value={null}>Select a value</option>\n\t<option value="value1">Value 1</option>\n\t<option value="value2">Value 2</option>\n</Field>'
)
);
}
FormExample.propTypes = _extends({}, _reduxForm.propTypes);
exports.default = (0, _reduxForm.reduxForm)({
form: 'form-example',
initialValues: {
firstName: 'Sprucebot'
}
})(FormExample);