@danderson00/react-forms 0.0.34 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorMessage.js","names":["extractErrorMessage","error","hasOwnProperty","message","createElement","className","children"],"sources":["../src/ErrorMessage.js"],"sourcesContent":["import { createElement } from 'react'\n\nexport const extractErrorMessage = error => error\n ? (error.hasOwnProperty('stack') || error.hasOwnProperty('message'))\n ? error.message || 'An error occurred'\n : error\n : 'An error occurred'\n\nexport default ({ error }) => createElement('div', {\n className: 'react-forms-error',\n children: extractErrorMessage(error)\n})"],"mappings":";;;;;;;AAAA;;AAEO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAAC,KAAK;EAAA,OAAIA,KAAK,GAC5CA,KAAK,CAACC,cAAN,CAAqB,OAArB,KAAiCD,KAAK,CAACC,cAAN,CAAqB,SAArB,CAAlC,GACED,KAAK,CAACE,OAAN,IAAiB,mBADnB,GAEEF,KAH2C,GAI7C,mBAJoC;AAAA,CAAjC;;;;eAMQ;EAAA,IAAGA,KAAH,QAAGA,KAAH;EAAA,oBAAe,IAAAG,oBAAA,EAAc,KAAd,EAAqB;IACjDC,SAAS,EAAE,mBADsC;IAEjDC,QAAQ,EAAEN,mBAAmB,CAACC,KAAD;EAFoB,CAArB,CAAf;AAAA,C"}
1
+ {"version":3,"sources":["../src/ErrorMessage.js"],"names":["extractErrorMessage","error","hasOwnProperty","message","className","children"],"mappings":";;;;;;;AAAA;;AAEO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAAC,KAAK;AAAA,SAAIA,KAAK,GAC5CA,KAAK,CAACC,cAAN,CAAqB,OAArB,KAAiCD,KAAK,CAACC,cAAN,CAAqB,SAArB,CAAlC,GACED,KAAK,CAACE,OAAN,IAAiB,mBADnB,GAEEF,KAH2C,GAI7C,mBAJoC;AAAA,CAAjC;;;;eAMQ;AAAA,MAAGA,KAAH,QAAGA,KAAH;AAAA,sBAAe,0BAAc,KAAd,EAAqB;AACjDG,IAAAA,SAAS,EAAE,mBADsC;AAEjDC,IAAAA,QAAQ,EAAEL,mBAAmB,CAACC,KAAD;AAFoB,GAArB,CAAf;AAAA,C","sourcesContent":["import { createElement } from 'react'\n\nexport const extractErrorMessage = error => error\n ? (error.hasOwnProperty('stack') || error.hasOwnProperty('message'))\n ? error.message || 'An error occurred'\n : error\n : 'An error occurred'\n\nexport default ({ error }) => createElement('div', {\n className: 'react-forms-error',\n children: extractErrorMessage(error)\n})"],"file":"ErrorMessage.js"}
package/dist/Form.js CHANGED
@@ -97,7 +97,10 @@ var Form = function Form(ContextProvider) {
97
97
  setFieldValues(function (previousValues) {
98
98
  return (0, _objectPathImmutable.set)(previousValues, path, value);
99
99
  });
100
- setValid(form.current.checkValidity());
100
+
101
+ if (form.current) {
102
+ setValid(form.current.checkValidity());
103
+ }
101
104
  };
102
105
 
103
106
  var onSubmit = function onSubmit(e) {
@@ -154,6 +157,7 @@ var Form = function Form(ContextProvider) {
154
157
  }
155
158
 
156
159
  e && e.preventDefault && e.preventDefault();
160
+ e && e.stopPropagation && e.stopPropagation();
157
161
  };
158
162
 
159
163
  var classNames = ['react-forms', props.className];
package/dist/Form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["Form","ContextProvider","additionalContext","ErrorMessage","resetOnSubmit","row","gap","props","useState","values","fieldValues","setFieldValues","useReducer","validators","validator","fieldValidators","registerFieldValidator","error","setError","valid","setValid","form","createRef","useEffect","current","checkValidity","getFieldValue","path","get","getFieldValues","mapFieldValues","target","Object","keys","reduce","name","set","setFieldValue","value","previousValues","onSubmit","e","additionalValues","validate","forEach","setFieldValidated","undefined","interactiveElements","querySelectorAll","setFormDisabled","disabled","x","reset","checkResultForError","result","success","message","then","preventDefault","classNames","className","push","mergedAdditionalContext","property","createElement","join","noValidate","ref","style","children","key","type","visibility","position"],"sources":["../src/Form.js"],"sourcesContent":["import { createElement, createRef, useEffect, useReducer, useState } from 'react'\nimport { get, set } from 'object-path-immutable'\n\nconst Form = (ContextProvider, additionalContext = {}, ErrorMessage) => (\n ({ resetOnSubmit, row, gap, ...props }) => {\n const [fieldValues, setFieldValues] = useState(props.values || {})\n const [fieldValidators, registerFieldValidator] = useReducer((validators, validator) => [...validators, validator], [])\n const [error, setError] = useState()\n const [valid, setValid] = useState()\n const form = createRef()\n\n useEffect(() => {\n if(form.current) {\n setValid(form.current.checkValidity())\n }\n }, [form.current])\n\n const getFieldValue = path => get(fieldValues, path)\n const getFieldValues = () => fieldValues\n const mapFieldValues = target => Object.keys(target).reduce(\n (values, name) => set(values, name, target[name]),\n {}\n )\n\n const setFieldValue = (path, value) => {\n setFieldValues(previousValues => set(previousValues, path, value))\n setValid(form.current.checkValidity())\n }\n\n const onSubmit = (e, { additionalValues, validate } = {}) => {\n if(validate !== false) {\n fieldValidators.forEach(setFieldValidated => setFieldValidated())\n }\n\n if((validate === false || form.current.checkValidity()) && props.onSubmit) {\n setError(undefined)\n\n const interactiveElements = form.current.querySelectorAll('input,button,textarea,select')\n const setFormDisabled = disabled => interactiveElements.forEach(x => x.disabled = disabled)\n\n const reset = () => {\n if(resetOnSubmit) {\n setFieldValues(props.values || {})\n }\n }\n\n try {\n const checkResultForError = result => {\n if(result && (result.success === false || result.error)) {\n setError(result.error || result.message || 'Form submission failed')\n } else {\n reset()\n }\n return result\n }\n\n const result = props.onSubmit(mapFieldValues({ ...fieldValues, ...additionalValues }))\n if(result && typeof result.then === 'function') {\n setFormDisabled(true)\n result\n .then(checkResultForError)\n .catch(setError)\n .finally(() => setFormDisabled(false))\n } else {\n reset()\n }\n } catch(error) {\n setError(error)\n }\n }\n\n e && e.preventDefault && e.preventDefault()\n }\n\n const classNames = ['react-forms', props.className]\n if(row) {\n classNames.push('react-forms-row')\n }\n\n const mergedAdditionalContext = Object.keys(additionalContext).reduce(\n (result, property) => ({ ...result, [property]: props[property] || additionalContext[property] }),\n {}\n )\n\n return (\n createElement('form', {\n ...props,\n className: classNames.join(' '),\n noValidate: true,\n onSubmit: onSubmit,\n ref: form,\n ...(gap && { style: { gap } }),\n children: [\n createElement(ContextProvider, {\n ...props,\n key: 'context',\n value: {\n registerFieldValidator,\n setFieldValue,\n getFieldValue,\n getFieldValues,\n onSubmit,\n valid,\n ...mergedAdditionalContext\n }\n }),\n error && createElement(ErrorMessage, { key: 'error', error }),\n createElement('input', {\n key: 'submit',\n type: 'submit',\n style: {\n visibility: 'hidden',\n position: 'absolute'\n }\n }),\n ]\n })\n )\n }\n)\nexport default Form"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/Form.js"],"names":["Form","ContextProvider","additionalContext","ErrorMessage","resetOnSubmit","row","gap","props","values","fieldValues","setFieldValues","validators","validator","fieldValidators","registerFieldValidator","error","setError","valid","setValid","form","current","checkValidity","getFieldValue","path","getFieldValues","mapFieldValues","target","Object","keys","reduce","name","setFieldValue","value","previousValues","onSubmit","e","additionalValues","validate","forEach","setFieldValidated","undefined","interactiveElements","querySelectorAll","setFormDisabled","disabled","x","reset","checkResultForError","result","success","message","then","preventDefault","stopPropagation","classNames","className","push","mergedAdditionalContext","property","join","noValidate","ref","style","children","key","type","visibility","position"],"mappings":"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","sourcesContent":["import { createElement, createRef, useEffect, useReducer, useState } from 'react'\nimport { get, set } from 'object-path-immutable'\n\nconst Form = (ContextProvider, additionalContext = {}, ErrorMessage) => (\n ({ resetOnSubmit, row, gap, ...props }) => {\n const [fieldValues, setFieldValues] = useState(props.values || {})\n const [fieldValidators, registerFieldValidator] = useReducer((validators, validator) => [...validators, validator], [])\n const [error, setError] = useState()\n const [valid, setValid] = useState()\n const form = createRef()\n\n useEffect(() => {\n if(form.current) {\n setValid(form.current.checkValidity())\n }\n }, [form.current])\n\n const getFieldValue = path => get(fieldValues, path)\n const getFieldValues = () => fieldValues\n const mapFieldValues = target => Object.keys(target).reduce(\n (values, name) => set(values, name, target[name]),\n {}\n )\n\n const setFieldValue = (path, value) => {\n setFieldValues(previousValues => set(previousValues, path, value))\n if(form.current) {\n setValid(form.current.checkValidity())\n }\n }\n\n const onSubmit = (e, { additionalValues, validate } = {}) => {\n if(validate !== false) {\n fieldValidators.forEach(setFieldValidated => setFieldValidated())\n }\n\n if((validate === false || form.current.checkValidity()) && props.onSubmit) {\n setError(undefined)\n\n const interactiveElements = form.current.querySelectorAll('input,button,textarea,select')\n const setFormDisabled = disabled => interactiveElements.forEach(x => x.disabled = disabled)\n\n const reset = () => {\n if(resetOnSubmit) {\n setFieldValues(props.values || {})\n }\n }\n\n try {\n const checkResultForError = result => {\n if(result && (result.success === false || result.error)) {\n setError(result.error || result.message || 'Form submission failed')\n } else {\n reset()\n }\n return result\n }\n\n const result = props.onSubmit(mapFieldValues({ ...fieldValues, ...additionalValues }))\n if(result && typeof result.then === 'function') {\n setFormDisabled(true)\n result\n .then(checkResultForError)\n .catch(setError)\n .finally(() => setFormDisabled(false))\n } else {\n reset()\n }\n } catch(error) {\n setError(error)\n }\n }\n\n e && e.preventDefault && e.preventDefault()\n e && e.stopPropagation && e.stopPropagation()\n }\n\n const classNames = ['react-forms', props.className]\n if(row) {\n classNames.push('react-forms-row')\n }\n\n const mergedAdditionalContext = Object.keys(additionalContext).reduce(\n (result, property) => ({ ...result, [property]: props[property] || additionalContext[property] }),\n {}\n )\n\n return (\n createElement('form', {\n ...props,\n className: classNames.join(' '),\n noValidate: true,\n onSubmit: onSubmit,\n ref: form,\n ...(gap && { style: { gap } }),\n children: [\n createElement(ContextProvider, {\n ...props,\n key: 'context',\n value: {\n registerFieldValidator,\n setFieldValue,\n getFieldValue,\n getFieldValues,\n onSubmit,\n valid,\n ...mergedAdditionalContext\n }\n }),\n error && createElement(ErrorMessage, { key: 'error', error }),\n createElement('input', {\n key: 'submit',\n type: 'submit',\n style: {\n visibility: 'hidden',\n position: 'absolute'\n }\n }),\n ]\n })\n )\n }\n)\nexport default Form"],"file":"Form.js"}
package/dist/Group.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Group.js","names":["Group","formContext","name","props","Error","useContext","groups","context","createElement","Provider","value","concat"],"sources":["../src/Group.js"],"sourcesContent":["import { createElement, useContext } from 'react'\n\nconst Group = formContext => ({ name, ...props }) => {\n if (!name) throw new Error(\"You must provide a name prop to form components\")\n const { groups = [], ...context } = useContext(formContext)\n\n return createElement(formContext.Provider, {\n ...props,\n value: {\n ...context,\n groups: groups.concat(name)\n }\n })\n}\nexport default Group"],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;;AAEA,IAAMA,KAAK,GAAG,SAARA,KAAQ,CAAAC,WAAW;EAAA,OAAI,gBAAwB;IAAA,IAArBC,IAAqB,QAArBA,IAAqB;IAAA,IAAZC,KAAY;;IACnD,IAAI,CAACD,IAAL,EAAW,MAAM,IAAIE,KAAJ,CAAU,iDAAV,CAAN;;IACX,kBAAoC,IAAAC,iBAAA,EAAWJ,WAAX,CAApC;IAAA,qCAAQK,MAAR;IAAA,IAAQA,MAAR,mCAAiB,EAAjB;IAAA,IAAwBC,OAAxB;;IAEA,oBAAO,IAAAC,oBAAA,EAAcP,WAAW,CAACQ,QAA1B,kCACFN,KADE;MAELO,KAAK,kCACAH,OADA;QAEHD,MAAM,EAAEA,MAAM,CAACK,MAAP,CAAcT,IAAd;MAFL;IAFA,GAAP;EAOD,CAXwB;AAAA,CAAzB;;eAYeF,K"}
1
+ {"version":3,"sources":["../src/Group.js"],"names":["Group","formContext","name","props","Error","groups","context","Provider","value","concat"],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;;AAEA,IAAMA,KAAK,GAAG,SAARA,KAAQ,CAAAC,WAAW;AAAA,SAAI,gBAAwB;AAAA,QAArBC,IAAqB,QAArBA,IAAqB;AAAA,QAAZC,KAAY;;AACnD,QAAI,CAACD,IAAL,EAAW,MAAM,IAAIE,KAAJ,CAAU,iDAAV,CAAN;;AACX,sBAAoC,uBAAWH,WAAX,CAApC;AAAA,yCAAQI,MAAR;AAAA,QAAQA,MAAR,mCAAiB,EAAjB;AAAA,QAAwBC,OAAxB;;AAEA,wBAAO,0BAAcL,WAAW,CAACM,QAA1B,kCACFJ,KADE;AAELK,MAAAA,KAAK,kCACAF,OADA;AAEHD,QAAAA,MAAM,EAAEA,MAAM,CAACI,MAAP,CAAcP,IAAd;AAFL;AAFA,OAAP;AAOD,GAXwB;AAAA,CAAzB;;eAYeF,K","sourcesContent":["import { createElement, useContext } from 'react'\n\nconst Group = formContext => ({ name, ...props }) => {\n if (!name) throw new Error(\"You must provide a name prop to form components\")\n const { groups = [], ...context } = useContext(formContext)\n\n return createElement(formContext.Provider, {\n ...props,\n value: {\n ...context,\n groups: groups.concat(name)\n }\n })\n}\nexport default Group"],"file":"Group.js"}
package/dist/fields.js ADDED
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Text = exports.RadioButton = exports.Radio = exports.Checkbox = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _index = require("./index");
11
+
12
+ var _excluded = ["label", "className"],
13
+ _excluded2 = ["values", "labels"];
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16
+
17
+ function _extends() { _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; }; return _extends.apply(this, arguments); }
18
+
19
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
20
+
21
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
22
+
23
+ var base = function base(type, render) {
24
+ return function (_ref) {
25
+ var label = _ref.label,
26
+ className = _ref.className,
27
+ inputProps = _objectWithoutProperties(_ref, _excluded);
28
+
29
+ return /*#__PURE__*/_react["default"].createElement("div", {
30
+ className: "".concat(type, " ").concat(className)
31
+ }, /*#__PURE__*/_react["default"].createElement("label", null, label), render(inputProps));
32
+ };
33
+ };
34
+
35
+ var Text = base('Text', function (props) {
36
+ return props.multiline ? /*#__PURE__*/_react["default"].createElement(_index.Textarea, props) : /*#__PURE__*/_react["default"].createElement(_index.Input, props);
37
+ });
38
+ exports.Text = Text;
39
+ var Checkbox = base('Checkbox', function (props) {
40
+ return /*#__PURE__*/_react["default"].createElement(_index.Input, _extends({}, props, {
41
+ type: "checkbox"
42
+ }));
43
+ });
44
+ exports.Checkbox = Checkbox;
45
+ var RadioButton = base('RadioButton', function (props) {
46
+ return /*#__PURE__*/_react["default"].createElement(_index.Input, _extends({}, props, {
47
+ type: "radio"
48
+ }));
49
+ });
50
+ exports.RadioButton = RadioButton;
51
+ var Radio = base('Radio', function (_ref2) {
52
+ var values = _ref2.values,
53
+ labels = _ref2.labels,
54
+ props = _objectWithoutProperties(_ref2, _excluded2);
55
+
56
+ return values.map(function (value, index) {
57
+ return /*#__PURE__*/_react["default"].createElement(RadioButton, _extends({}, props, {
58
+ value: value,
59
+ label: labels && labels[index] || value
60
+ }));
61
+ });
62
+ }); //
63
+ // export const Select = base('Select', ({ values, labels, ...props }) =>
64
+ // <Select {...props}>
65
+ // {values.map((value, index) => <option value={value}>{(labels && labels[index]) || value}</option>)}
66
+ // </Select>
67
+ // )
68
+ //
69
+
70
+ exports.Radio = Radio;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["context","createContext","createConsumer","ConsumerComponent","props","createElement","Consumer","children","createRawConsumer","registerFieldValidator","setFieldValue","getFieldValue","Form","FormProvider","Provider","ErrorMessage","Group","GroupProvider","Submit","submit","Input","input","Textarea","Select","type","wrapInput","component","options","wrapSubmit","useFormValues","useFormValuesImpl"],"sources":["../src/index.js"],"sourcesContent":["import { createContext, createElement } from 'react'\nimport FormProvider from './Form'\nimport GroupProvider from './Group'\nimport ErrorMessage from './ErrorMessage'\nimport submit from './submit'\nimport input from './input'\nimport useFormValuesImpl from './useFormValues'\nimport './styles'\n\nexport const context = createContext({})\n\nconst createConsumer = ConsumerComponent => props => createElement(\n context.Consumer,\n { children: context => createElement(ConsumerComponent, { ...context, ...props }) }\n)\n\nexport const createRawConsumer = ConsumerComponent => (\n props => createElement(\n context.Consumer,\n { children: ({ registerFieldValidator, setFieldValue, getFieldValue, ...context }) => (\n createElement(ConsumerComponent, { ...context, ...props })\n )}\n )\n)\n\nexport const Form = FormProvider(context.Provider, {}, ErrorMessage)\nexport const Group = GroupProvider(context)\nexport const Submit = createConsumer(submit(props => createElement('button', props)))\n\nexport const Input = createConsumer(input(props => createElement('input', props)))\nexport const Textarea = createConsumer(input(props => createElement('textarea', props)))\nexport const Select = createConsumer(input(props => createElement('select', props), { type: 'select' }))\n\nexport const wrapInput = (component, options) => createConsumer(input(props => createElement(component, props), options))\nexport const wrapSubmit = component => createConsumer(submit(props => createElement(component, props)))\n\nexport const useFormValues = useFormValuesImpl(context)\n\nexport { FormProvider }"],"mappings":";;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;AAEO,IAAMA,OAAO,gBAAG,IAAAC,oBAAA,EAAc,EAAd,CAAhB;;;AAEP,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAAC,iBAAiB;EAAA,OAAI,UAAAC,KAAK;IAAA,oBAAI,IAAAC,oBAAA,EACnDL,OAAO,CAACM,QAD2C,EAEnD;MAAEC,QAAQ,EAAE,kBAAAP,OAAO;QAAA,oBAAI,IAAAK,oBAAA,EAAcF,iBAAd,kCAAsCH,OAAtC,GAAkDI,KAAlD,EAAJ;MAAA;IAAnB,CAFmD,CAAJ;EAAA,CAAT;AAAA,CAAxC;;AAKO,IAAMI,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAL,iBAAiB;EAAA,OAChD,UAAAC,KAAK;IAAA,oBAAI,IAAAC,oBAAA,EACPL,OAAO,CAACM,QADD,EAEP;MAAEC,QAAQ,EAAE;QAAA,IAAGE,sBAAH,QAAGA,sBAAH;QAAA,IAA2BC,aAA3B,QAA2BA,aAA3B;QAAA,IAA0CC,aAA1C,QAA0CA,aAA1C;QAAA,IAA4DX,OAA5D;;QAAA,oBACV,IAAAK,oBAAA,EAAcF,iBAAd,kCAAsCH,OAAtC,GAAkDI,KAAlD,EADU;MAAA;IAAZ,CAFO,CAAJ;EAAA,CAD2C;AAAA,CAA3C;;;AASA,IAAMQ,IAAI,GAAG,IAAAC,gBAAA,EAAab,OAAO,CAACc,QAArB,EAA+B,EAA/B,EAAmCC,wBAAnC,CAAb;;AACA,IAAMC,KAAK,GAAG,IAAAC,iBAAA,EAAcjB,OAAd,CAAd;;AACA,IAAMkB,MAAM,GAAGhB,cAAc,CAAC,IAAAiB,kBAAA,EAAO,UAAAf,KAAK;EAAA,oBAAI,IAAAC,oBAAA,EAAc,QAAd,EAAwBD,KAAxB,CAAJ;AAAA,CAAZ,CAAD,CAA7B;;AAEA,IAAMgB,KAAK,GAAGlB,cAAc,CAAC,IAAAmB,iBAAA,EAAM,UAAAjB,KAAK;EAAA,oBAAI,IAAAC,oBAAA,EAAc,OAAd,EAAuBD,KAAvB,CAAJ;AAAA,CAAX,CAAD,CAA5B;;AACA,IAAMkB,QAAQ,GAAGpB,cAAc,CAAC,IAAAmB,iBAAA,EAAM,UAAAjB,KAAK;EAAA,oBAAI,IAAAC,oBAAA,EAAc,UAAd,EAA0BD,KAA1B,CAAJ;AAAA,CAAX,CAAD,CAA/B;;AACA,IAAMmB,MAAM,GAAGrB,cAAc,CAAC,IAAAmB,iBAAA,EAAM,UAAAjB,KAAK;EAAA,oBAAI,IAAAC,oBAAA,EAAc,QAAd,EAAwBD,KAAxB,CAAJ;AAAA,CAAX,EAA+C;EAAEoB,IAAI,EAAE;AAAR,CAA/C,CAAD,CAA7B;;;AAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACC,SAAD,EAAYC,OAAZ;EAAA,OAAwBzB,cAAc,CAAC,IAAAmB,iBAAA,EAAM,UAAAjB,KAAK;IAAA,oBAAI,IAAAC,oBAAA,EAAcqB,SAAd,EAAyBtB,KAAzB,CAAJ;EAAA,CAAX,EAAgDuB,OAAhD,CAAD,CAAtC;AAAA,CAAlB;;;;AACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAF,SAAS;EAAA,OAAIxB,cAAc,CAAC,IAAAiB,kBAAA,EAAO,UAAAf,KAAK;IAAA,oBAAI,IAAAC,oBAAA,EAAcqB,SAAd,EAAyBtB,KAAzB,CAAJ;EAAA,CAAZ,CAAD,CAAlB;AAAA,CAA5B;;;AAEA,IAAMyB,aAAa,GAAG,IAAAC,yBAAA,EAAkB9B,OAAlB,CAAtB"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["context","createConsumer","ConsumerComponent","props","Consumer","children","createRawConsumer","registerFieldValidator","setFieldValue","getFieldValue","Form","Provider","ErrorMessage","Group","Submit","Input","Textarea","Select","type","wrapInput","component","options","wrapSubmit","useFormValues"],"mappings":";;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;AAEO,IAAMA,OAAO,gBAAG,0BAAc,EAAd,CAAhB;;;AAEP,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAAC,iBAAiB;AAAA,SAAI,UAAAC,KAAK;AAAA,wBAAI,0BACnDH,OAAO,CAACI,QAD2C,EAEnD;AAAEC,MAAAA,QAAQ,EAAE,kBAAAL,OAAO;AAAA,4BAAI,0BAAcE,iBAAd,kCAAsCF,OAAtC,GAAkDG,KAAlD,EAAJ;AAAA;AAAnB,KAFmD,CAAJ;AAAA,GAAT;AAAA,CAAxC;;AAKO,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAJ,iBAAiB;AAAA,SAChD,UAAAC,KAAK;AAAA,wBAAI,0BACPH,OAAO,CAACI,QADD,EAEP;AAAEC,MAAAA,QAAQ,EAAE;AAAA,YAAGE,sBAAH,QAAGA,sBAAH;AAAA,YAA2BC,aAA3B,QAA2BA,aAA3B;AAAA,YAA0CC,aAA1C,QAA0CA,aAA1C;AAAA,YAA4DT,OAA5D;;AAAA,4BACV,0BAAcE,iBAAd,kCAAsCF,OAAtC,GAAkDG,KAAlD,EADU;AAAA;AAAZ,KAFO,CAAJ;AAAA,GAD2C;AAAA,CAA3C;;;AASA,IAAMO,IAAI,GAAG,sBAAaV,OAAO,CAACW,QAArB,EAA+B,EAA/B,EAAmCC,wBAAnC,CAAb;;AACA,IAAMC,KAAK,GAAG,uBAAcb,OAAd,CAAd;;AACA,IAAMc,MAAM,GAAGb,cAAc,CAAC,wBAAO,UAAAE,KAAK;AAAA,sBAAI,0BAAc,QAAd,EAAwBA,KAAxB,CAAJ;AAAA,CAAZ,CAAD,CAA7B;;AAEA,IAAMY,KAAK,GAAGd,cAAc,CAAC,uBAAM,UAAAE,KAAK;AAAA,sBAAI,0BAAc,OAAd,EAAuBA,KAAvB,CAAJ;AAAA,CAAX,CAAD,CAA5B;;AACA,IAAMa,QAAQ,GAAGf,cAAc,CAAC,uBAAM,UAAAE,KAAK;AAAA,sBAAI,0BAAc,UAAd,EAA0BA,KAA1B,CAAJ;AAAA,CAAX,CAAD,CAA/B;;AACA,IAAMc,MAAM,GAAGhB,cAAc,CAAC,uBAAM,UAAAE,KAAK;AAAA,sBAAI,0BAAc,QAAd,EAAwBA,KAAxB,CAAJ;AAAA,CAAX,EAA+C;AAAEe,EAAAA,IAAI,EAAE;AAAR,CAA/C,CAAD,CAA7B;;;AAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACC,SAAD,EAAYC,OAAZ;AAAA,SAAwBpB,cAAc,CAAC,uBAAM,UAAAE,KAAK;AAAA,wBAAI,0BAAciB,SAAd,EAAyBjB,KAAzB,CAAJ;AAAA,GAAX,EAAgDkB,OAAhD,CAAD,CAAtC;AAAA,CAAlB;;;;AACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAF,SAAS;AAAA,SAAInB,cAAc,CAAC,wBAAO,UAAAE,KAAK;AAAA,wBAAI,0BAAciB,SAAd,EAAyBjB,KAAzB,CAAJ;AAAA,GAAZ,CAAD,CAAlB;AAAA,CAA5B;;;AAEA,IAAMoB,aAAa,GAAG,+BAAkBvB,OAAlB,CAAtB","sourcesContent":["import { createContext, createElement } from 'react'\nimport FormProvider from './Form'\nimport GroupProvider from './Group'\nimport ErrorMessage from './ErrorMessage'\nimport submit from './submit'\nimport input from './input'\nimport useFormValuesImpl from './useFormValues'\nimport './styles'\n\nexport const context = createContext({})\n\nconst createConsumer = ConsumerComponent => props => createElement(\n context.Consumer,\n { children: context => createElement(ConsumerComponent, { ...context, ...props }) }\n)\n\nexport const createRawConsumer = ConsumerComponent => (\n props => createElement(\n context.Consumer,\n { children: ({ registerFieldValidator, setFieldValue, getFieldValue, ...context }) => (\n createElement(ConsumerComponent, { ...context, ...props })\n )}\n )\n)\n\nexport const Form = FormProvider(context.Provider, {}, ErrorMessage)\nexport const Group = GroupProvider(context)\nexport const Submit = createConsumer(submit(props => createElement('button', props)))\n\nexport const Input = createConsumer(input(props => createElement('input', props)))\nexport const Textarea = createConsumer(input(props => createElement('textarea', props)))\nexport const Select = createConsumer(input(props => createElement('select', props), { type: 'select' }))\n\nexport const wrapInput = (component, options) => createConsumer(input(props => createElement(component, props), options))\nexport const wrapSubmit = component => createConsumer(submit(props => createElement(component, props)))\n\nexport const useFormValues = useFormValuesImpl(context)\n\nexport { FormProvider }"],"file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"injectCss.js","names":["injectCss","id","css","document","querySelector","head","getElementsByTagName","style","createElement","type","appendChild","styleSheet","cssText","createTextNode"],"sources":["../src/injectCss.js"],"sourcesContent":["export default function injectCss(id, css) {\n if (!css || typeof document === 'undefined' || document.querySelector(`#${id}`)) return\n\n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.id = id\n style.type = 'text/css'\n\n head.appendChild(style)\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n}"],"mappings":";;;;;;;AAAe,SAASA,SAAT,CAAmBC,EAAnB,EAAuBC,GAAvB,EAA4B;EACzC,IAAI,CAACA,GAAD,IAAQ,OAAOC,QAAP,KAAoB,WAA5B,IAA2CA,QAAQ,CAACC,aAAT,YAA2BH,EAA3B,EAA/C,EAAiF;EAEjF,IAAMI,IAAI,GAAGF,QAAQ,CAACE,IAAT,IAAiBF,QAAQ,CAACG,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAA9B;EACA,IAAMC,KAAK,GAAGJ,QAAQ,CAACK,aAAT,CAAuB,OAAvB,CAAd;EACAD,KAAK,CAACN,EAAN,GAAWA,EAAX;EACAM,KAAK,CAACE,IAAN,GAAa,UAAb;EAEAJ,IAAI,CAACK,WAAL,CAAiBH,KAAjB;;EAEA,IAAIA,KAAK,CAACI,UAAV,EAAsB;IACpBJ,KAAK,CAACI,UAAN,CAAiBC,OAAjB,GAA2BV,GAA3B;EACD,CAFD,MAEO;IACLK,KAAK,CAACG,WAAN,CAAkBP,QAAQ,CAACU,cAAT,CAAwBX,GAAxB,CAAlB;EACD;AACF"}
1
+ {"version":3,"sources":["../src/injectCss.js"],"names":["injectCss","id","css","document","querySelector","head","getElementsByTagName","style","createElement","type","appendChild","styleSheet","cssText","createTextNode"],"mappings":";;;;;;;AAAe,SAASA,SAAT,CAAmBC,EAAnB,EAAuBC,GAAvB,EAA4B;AACzC,MAAI,CAACA,GAAD,IAAQ,OAAOC,QAAP,KAAoB,WAA5B,IAA2CA,QAAQ,CAACC,aAAT,YAA2BH,EAA3B,EAA/C,EAAiF;AAEjF,MAAMI,IAAI,GAAGF,QAAQ,CAACE,IAAT,IAAiBF,QAAQ,CAACG,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAA9B;AACA,MAAMC,KAAK,GAAGJ,QAAQ,CAACK,aAAT,CAAuB,OAAvB,CAAd;AACAD,EAAAA,KAAK,CAACN,EAAN,GAAWA,EAAX;AACAM,EAAAA,KAAK,CAACE,IAAN,GAAa,UAAb;AAEAJ,EAAAA,IAAI,CAACK,WAAL,CAAiBH,KAAjB;;AAEA,MAAIA,KAAK,CAACI,UAAV,EAAsB;AACpBJ,IAAAA,KAAK,CAACI,UAAN,CAAiBC,OAAjB,GAA2BV,GAA3B;AACD,GAFD,MAEO;AACLK,IAAAA,KAAK,CAACG,WAAN,CAAkBP,QAAQ,CAACU,cAAT,CAAwBX,GAAxB,CAAlB;AACD;AACF","sourcesContent":["export default function injectCss(id, css) {\n if (!css || typeof document === 'undefined' || document.querySelector(`#${id}`)) return\n\n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.id = id\n style.type = 'text/css'\n\n head.appendChild(style)\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n}"],"file":"injectCss.js"}
package/dist/input.js CHANGED
@@ -223,7 +223,9 @@ var _default = function _default(render) {
223
223
  setFieldValidated(true); // this is a little hacky, but the simplest way I could think of to determine the
224
224
  // validity of the actual input element. :invalid is also not supported by enzyme
225
225
 
226
- setError(Boolean(document.querySelector("#".concat(id, ":invalid"))));
226
+ var invalid = Boolean(document.querySelector("#".concat(id, ":invalid")));
227
+ setError(invalid);
228
+ props.onValidated && props.onValidated(!invalid);
227
229
  };
228
230
  /* render */
229
231
 
package/dist/input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":["nextElementId","id","render","options","Input","props","name","Error","setFieldValue","useState","fieldValidated","setFieldValidated","error","setError","previousValueProp","usePrevious","value","groups","throttle","onSubmit","map","group","submitHandler","createThrottled","isNaN","useEffect","getFieldValue","registerFieldValidator","types","setInitialValue","applyValueTransforms","undefined","set","element","document","querySelector","updateValidationState","useUpdate","onChange","args","event","submitOnChange","valueFromEvent","getOutputValue","elementValue","apply","target","checkValidity","additionalValues","onBlur","submitOnBlur","onFocus","selectOnFocus","selectText","selectionStart","selectionEnd","length","setTimeout","onKeyDown","numeric","exec","key","includes","keyCode","preventDefault","Boolean","passErrorProp","getValueProps","type","checked","defaultValue","getFieldValues","valid","passThroughProps","valueProps","currentValue","numericProps","typeProps","errorProps","className","finalProps"],"sources":["../src/input.js"],"sourcesContent":["import { useState, useEffect } from 'react'\nimport usePrevious from './usePrevious'\nimport useUpdate from './useUpdate'\nimport types from './inputTypes'\nimport createThrottled from './throttle'\n\nconst nextElementId = (id => () => `react-forms-${++id}`)(0)\n\nexport default (render, options = {}) => function Input(props) {\n if (!props.name) throw new Error(\"You must provide a name prop to form components\")\n if (!props.setFieldValue) throw new Error(\"Input components must be contained within a Form component\")\n\n const [fieldValidated, setFieldValidated] = useState(false)\n const [error, setError] = useState(false)\n const [id] = useState(props.id || nextElementId())\n const previousValueProp = usePrevious(props.value)\n\n // this is currently broken :-\\\n const { groups = [], throttle, onSubmit } = props\n const name = groups.map(group => group + '.') + props.name\n const submitHandler = (throttle && onSubmit) ? createThrottled(onSubmit, isNaN(throttle) ? 200 : throttle) : onSubmit\n\n useEffect(() => {\n const { getFieldValue, setFieldValue, registerFieldValidator } = props\n const { setInitialValue, applyValueTransforms } = types(props, options)\n\n // don't override values that were set from passing a values prop to the form\n if(getFieldValue(name) === undefined) {\n // TODO: change setter to a getter and return a private `UNSET` symbol to indicate not to call the field setter\n // this allows us to set the default value with useState above and not have an initial render cycle without the default value\n // BUT... to get the default value of a select list, we need to render it first? dilemma....\n\n setInitialValue({\n // pass a setter function - radio buttons do not always want to set a value!\n set: value => setFieldValue(name, applyValueTransforms(value)),\n element: document.querySelector(`#${id}`)\n })\n }\n registerFieldValidator(updateValidationState)\n\n // TODO: need to unregister in case of dynamic form elements\n }, [])\n\n // ensure form values are updated to reflect passed `value` prop\n // this probably introduces some redundancy with the onChange handler below\n useUpdate(() => {\n const { value, setFieldValue } = props\n const { applyValueTransforms } = types(props, options)\n\n if(value !== previousValueProp) {\n setFieldValue(name, applyValueTransforms(value))\n }\n }, [props])\n\n // TODO: refactor bubbling to prop pattern\n const onChange = (...args) => {\n const [event] = args\n const { setFieldValue, onChange, submitOnChange } = props\n const { valueFromEvent } = options\n const { getOutputValue, applyValueTransforms } = types(props, options)\n\n const elementValue = valueFromEvent\n ? valueFromEvent.apply(null, args)\n : getOutputValue({ event })\n\n setFieldValue(name, applyValueTransforms(elementValue))\n\n if(event && event.target && event.target.checkValidity) {\n event.target.checkValidity()\n updateValidationState()\n }\n\n if(onChange) {\n onChange.apply(event.target, args)\n }\n\n if(submitOnChange && submitHandler) {\n // the setFieldValue above sets state on the Form component, used in the onSubmit handler\n // setting state requires an additional render cycle - we need to pass in the new value so it's set correctly\n submitHandler(undefined, { additionalValues: { [name]: applyValueTransforms(elementValue) } })\n }\n }\n\n const onBlur = (...args) => {\n const { submitOnBlur, onSubmit, onBlur } = props\n const [event] = args\n\n if(submitOnBlur) {\n onSubmit()\n }\n if(onBlur) {\n onBlur.apply(event.target, args)\n }\n }\n\n const onFocus = (...args) => {\n const { selectOnFocus, onFocus } = props\n const [event] = args\n const element = event.target\n\n const selectText = () => {\n element.selectionStart = 0\n element.selectionEnd = element.value.length\n }\n\n if(selectOnFocus) {\n selectText()\n setTimeout(selectText)\n }\n if(onFocus) {\n onFocus.apply(element, args)\n }\n }\n\n const onKeyDown = (...args) => {\n const { onKeyDown } = props\n const [event] = args\n const element = event.target\n \n if(props.numeric && !/[0-9-]/.exec(event.key) && ![null, 0, 8, 9, 13, 27, 35, 36, 37, 39, 46].includes(event.keyCode)) {\n event.preventDefault()\n }\n\n if(onKeyDown) {\n onKeyDown.apply(element, args)\n }\n }\n\n\n const updateValidationState = () => {\n setFieldValidated(true)\n // this is a little hacky, but the simplest way I could think of to determine the\n // validity of the actual input element. :invalid is also not supported by enzyme\n setError(Boolean(document.querySelector(`#${id}:invalid`)))\n }\n\n /* render */ {\n const { passErrorProp } = options\n const { getValueProps } = types(props, options)\n\n const {\n type, value, checked, defaultValue, numeric,\n onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,\n submitOnChange, submitOnBlur, selectOnFocus, throttle, valid,\n ...passThroughProps\n } = props\n const valueProps = getValueProps({ currentValue: getFieldValue(name) })\n const numericProps = (numeric && { type: 'number' })\n const typeProps = (type && { type })\n const errorProps = (passErrorProp && { error })\n const className = ((fieldValidated ? 'validated ' : '') + (props.className || '') || undefined)\n\n const finalProps = {\n id, name, className,\n ...passThroughProps, ...valueProps, ...numericProps, ...typeProps, ...errorProps,\n onChange, onFocus, onBlur, onKeyDown\n }\n\n return render(finalProps)\n }\n}"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/input.js"],"names":["nextElementId","id","render","options","Input","props","name","Error","setFieldValue","fieldValidated","setFieldValidated","error","setError","previousValueProp","value","groups","throttle","onSubmit","map","group","submitHandler","isNaN","getFieldValue","registerFieldValidator","setInitialValue","applyValueTransforms","undefined","set","element","document","querySelector","updateValidationState","onChange","args","event","submitOnChange","valueFromEvent","getOutputValue","elementValue","apply","target","checkValidity","additionalValues","onBlur","submitOnBlur","onFocus","selectOnFocus","selectText","selectionStart","selectionEnd","length","setTimeout","onKeyDown","numeric","exec","key","includes","keyCode","preventDefault","invalid","Boolean","onValidated","passErrorProp","getValueProps","type","checked","defaultValue","getFieldValues","valid","passThroughProps","valueProps","currentValue","numericProps","typeProps","errorProps","className","finalProps"],"mappings":"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","sourcesContent":["import { useState, useEffect } from 'react'\nimport usePrevious from './usePrevious'\nimport useUpdate from './useUpdate'\nimport types from './inputTypes'\nimport createThrottled from './throttle'\n\nconst nextElementId = (id => () => `react-forms-${++id}`)(0)\n\nexport default (render, options = {}) => function Input(props) {\n if (!props.name) throw new Error(\"You must provide a name prop to form components\")\n if (!props.setFieldValue) throw new Error(\"Input components must be contained within a Form component\")\n\n const [fieldValidated, setFieldValidated] = useState(false)\n const [error, setError] = useState(false)\n const [id] = useState(props.id || nextElementId())\n const previousValueProp = usePrevious(props.value)\n\n // this is currently broken :-\\\n const { groups = [], throttle, onSubmit } = props\n const name = groups.map(group => group + '.') + props.name\n const submitHandler = (throttle && onSubmit) ? createThrottled(onSubmit, isNaN(throttle) ? 200 : throttle) : onSubmit\n\n useEffect(() => {\n const { getFieldValue, setFieldValue, registerFieldValidator } = props\n const { setInitialValue, applyValueTransforms } = types(props, options)\n\n // don't override values that were set from passing a values prop to the form\n if(getFieldValue(name) === undefined) {\n // TODO: change setter to a getter and return a private `UNSET` symbol to indicate not to call the field setter\n // this allows us to set the default value with useState above and not have an initial render cycle without the default value\n // BUT... to get the default value of a select list, we need to render it first? dilemma....\n\n setInitialValue({\n // pass a setter function - radio buttons do not always want to set a value!\n set: value => setFieldValue(name, applyValueTransforms(value)),\n element: document.querySelector(`#${id}`)\n })\n }\n registerFieldValidator(updateValidationState)\n\n // TODO: need to unregister in case of dynamic form elements\n }, [])\n\n // ensure form values are updated to reflect passed `value` prop\n // this probably introduces some redundancy with the onChange handler below\n useUpdate(() => {\n const { value, setFieldValue } = props\n const { applyValueTransforms } = types(props, options)\n\n if(value !== previousValueProp) {\n setFieldValue(name, applyValueTransforms(value))\n }\n }, [props])\n\n // TODO: refactor bubbling to prop pattern\n const onChange = (...args) => {\n const [event] = args\n const { setFieldValue, onChange, submitOnChange } = props\n const { valueFromEvent } = options\n const { getOutputValue, applyValueTransforms } = types(props, options)\n\n const elementValue = valueFromEvent\n ? valueFromEvent.apply(null, args)\n : getOutputValue({ event })\n\n setFieldValue(name, applyValueTransforms(elementValue))\n\n if(event && event.target && event.target.checkValidity) {\n event.target.checkValidity()\n updateValidationState()\n }\n\n if(onChange) {\n onChange.apply(event.target, args)\n }\n\n if(submitOnChange && submitHandler) {\n // the setFieldValue above sets state on the Form component, used in the onSubmit handler\n // setting state requires an additional render cycle - we need to pass in the new value so it's set correctly\n submitHandler(undefined, { additionalValues: { [name]: applyValueTransforms(elementValue) } })\n }\n }\n\n const onBlur = (...args) => {\n const { submitOnBlur, onSubmit, onBlur } = props\n const [event] = args\n\n if(submitOnBlur) {\n onSubmit()\n }\n if(onBlur) {\n onBlur.apply(event.target, args)\n }\n }\n\n const onFocus = (...args) => {\n const { selectOnFocus, onFocus } = props\n const [event] = args\n const element = event.target\n\n const selectText = () => {\n element.selectionStart = 0\n element.selectionEnd = element.value.length\n }\n\n if(selectOnFocus) {\n selectText()\n setTimeout(selectText)\n }\n if(onFocus) {\n onFocus.apply(element, args)\n }\n }\n\n const onKeyDown = (...args) => {\n const { onKeyDown } = props\n const [event] = args\n const element = event.target\n \n if(props.numeric && !/[0-9-]/.exec(event.key) && ![null, 0, 8, 9, 13, 27, 35, 36, 37, 39, 46].includes(event.keyCode)) {\n event.preventDefault()\n }\n\n if(onKeyDown) {\n onKeyDown.apply(element, args)\n }\n }\n\n const updateValidationState = () => {\n setFieldValidated(true)\n // this is a little hacky, but the simplest way I could think of to determine the\n // validity of the actual input element. :invalid is also not supported by enzyme\n const invalid = Boolean(document.querySelector(`#${id}:invalid`))\n setError(invalid)\n props.onValidated && props.onValidated(!invalid)\n }\n\n /* render */ {\n const { passErrorProp } = options\n const { getValueProps } = types(props, options)\n\n const {\n type, value, checked, defaultValue, numeric,\n onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,\n submitOnChange, submitOnBlur, selectOnFocus, throttle, valid,\n ...passThroughProps\n } = props\n const valueProps = getValueProps({ currentValue: getFieldValue(name) })\n const numericProps = (numeric && { type: 'number' })\n const typeProps = (type && { type })\n const errorProps = (passErrorProp && { error })\n const className = ((fieldValidated ? 'validated ' : '') + (props.className || '') || undefined)\n\n const finalProps = {\n id, name, className,\n ...passThroughProps, ...valueProps, ...numericProps, ...typeProps, ...errorProps,\n onChange, onFocus, onBlur, onKeyDown\n }\n\n return render(finalProps)\n }\n}"],"file":"input.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"inputTypes.js","names":["resolveValue","value","args","apply","props","options","type","checked","defaultValue","applyValueTransforms","numeric","isNaN","defaultType","setInitialValue","set","undefined","getOutputValue","event","target","Error","getValueProps","currentValue","checkboxValue","Boolean","types","text","radio","checkbox","select","element","length"],"sources":["../src/inputTypes.js"],"sourcesContent":["const resolveValue = (value, args) => typeof value === 'function' ? value.apply(null, args) : value\n\nexport default (props, options) => {\n const { type, checked, value, defaultValue } = props\n\n const applyValueTransforms = value => ((props.type === 'number' || props.numeric) && !isNaN(+value) && value !== '') ? +value : value\n\n const defaultType = {\n setInitialValue: ({ set }) => {\n if(value !== undefined) {\n set(value)\n } else if (defaultValue !== undefined) {\n set(defaultValue)\n } else if (options.defaultValue !== undefined) {\n set(resolveValue(options.defaultValue, [props]))\n } else {\n set(undefined)\n }\n },\n getOutputValue: ({ event }) => {\n if (event.target && event.target.value !== undefined) {\n return event.target.value\n } else if (event.value !== undefined) {\n return event.value\n } else {\n throw new Error(\"Unable to determine input value from event\")\n }\n },\n getValueProps: ({ currentValue }) => ({\n value: currentValue === undefined ? '' : currentValue\n })\n }\n\n const checkboxValue = (checked, value) => (value === undefined\n ? Boolean(checked)\n : checked ? value : undefined\n )\n\n const types = {\n text: defaultType,\n radio: {\n setInitialValue: ({ set }) => checked && set(value),\n getOutputValue: () => value,\n getValueProps: ({ currentValue }) => ({ checked: applyValueTransforms(value) === currentValue })\n },\n checkbox: {\n setInitialValue: ({ set }) => set(checkboxValue(checked, value)),\n getOutputValue: ({ event }) => checkboxValue(event.target.checked, value),\n getValueProps: ({ currentValue }) => ({ checked: Boolean(currentValue) })\n },\n select: {\n ...defaultType,\n setInitialValue: ({ set, element }) => {\n set(value || defaultValue ||\n (props.options && props.options.length > 0 && props.options[0]) || // this probably should come out - is it the right behavior for all browsers? it's here to keep 1 unit test happy?\n element && element.value || '' // this *should* work in all browsers (except jsdom)...\n )\n }\n }\n }\n\n return { ...(types[options.type || type] || types.text), applyValueTransforms }\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/inputTypes.js"],"names":["resolveValue","value","args","apply","props","options","type","checked","defaultValue","applyValueTransforms","numeric","isNaN","defaultType","setInitialValue","set","undefined","getOutputValue","event","target","Error","getValueProps","currentValue","checkboxValue","Boolean","types","text","radio","checkbox","select","element","length"],"mappings":"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","sourcesContent":["const resolveValue = (value, args) => typeof value === 'function' ? value.apply(null, args) : value\n\nexport default (props, options) => {\n const { type, checked, value, defaultValue } = props\n\n const applyValueTransforms = value => ((props.type === 'number' || props.numeric) && !isNaN(+value) && value !== '') ? +value : value\n\n const defaultType = {\n setInitialValue: ({ set }) => {\n if(value !== undefined) {\n set(value)\n } else if (defaultValue !== undefined) {\n set(defaultValue)\n } else if (options.defaultValue !== undefined) {\n set(resolveValue(options.defaultValue, [props]))\n } else {\n set(undefined)\n }\n },\n getOutputValue: ({ event }) => {\n if (event.target && event.target.value !== undefined) {\n return event.target.value\n } else if (event.value !== undefined) {\n return event.value\n } else {\n throw new Error(\"Unable to determine input value from event\")\n }\n },\n getValueProps: ({ currentValue }) => ({\n value: currentValue === undefined ? '' : currentValue\n })\n }\n\n const checkboxValue = (checked, value) => (value === undefined\n ? Boolean(checked)\n : checked ? value : undefined\n )\n\n const types = {\n text: defaultType,\n radio: {\n setInitialValue: ({ set }) => checked && set(value),\n getOutputValue: () => value,\n getValueProps: ({ currentValue }) => ({ checked: applyValueTransforms(value) === currentValue })\n },\n checkbox: {\n setInitialValue: ({ set }) => set(checkboxValue(checked, value)),\n getOutputValue: ({ event }) => checkboxValue(event.target.checked, value),\n getValueProps: ({ currentValue }) => ({ checked: Boolean(currentValue) })\n },\n select: {\n ...defaultType,\n setInitialValue: ({ set, element }) => {\n set(value || defaultValue ||\n (props.options && props.options.length > 0 && props.options[0]) || // this probably should come out - is it the right behavior for all browsers? it's here to keep 1 unit test happy?\n element && element.value || '' // this *should* work in all browsers (except jsdom)...\n )\n }\n }\n }\n\n return { ...(types[options.type || type] || types.text), applyValueTransforms }\n}\n"],"file":"inputTypes.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","names":["injectCss"],"sources":["../src/styles.js"],"sourcesContent":["import injectCss from './injectCss'\n\ninjectCss('react-forms-styles', `\n.react-forms {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.react-forms-row {\n flex-direction: row;\n align-items: flex-start;\n}\n\n.react-forms-error {\n color: #f44336;\n}\n`)\n\n\n"],"mappings":";;AAAA;;;;AAEA,IAAAA,qBAAA,EAAU,oBAAV"}
1
+ {"version":3,"sources":["../src/styles.js"],"names":[],"mappings":";;AAAA;;;;AAEA,2BAAU,oBAAV","sourcesContent":["import injectCss from './injectCss'\n\ninjectCss('react-forms-styles', `\n.react-forms {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.react-forms-row {\n flex-direction: row;\n align-items: flex-start;\n}\n\n.react-forms-error {\n color: #f44336;\n}\n`)\n\n\n"],"file":"styles.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","names":["render","Submit","props","onSubmit","Error","registerFieldValidator","setFieldValue","getFieldValue","getFieldValues","valid","validate","disableInvalid","values","propsToPass","useState","executing","setExecuting","onClick","e","result","additionalValues","finalProps","disabled"],"sources":["../src/submit.js"],"sourcesContent":["import React, { useState } from 'react'\n\nexport default render => function Submit(props) {\n if(!props.onSubmit) throw new Error('Button components must be contained within a Form component')\n\n const {\n onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,\n valid, validate, disableInvalid, values, ...propsToPass\n } = props\n\n // TODO: set executing when form is triggered by enter key\n const [executing, setExecuting] = useState(false)\n\n const onClick = e => {\n const result = onSubmit(e, { validate, additionalValues: values })\n if(result && result.finally && typeof result.finally === 'function') {\n setExecuting(true)\n result.finally(() => setExecuting(false))\n }\n }\n\n const finalProps = {\n ...propsToPass,\n onClick,\n disabled: props.disabled || executing || (disableInvalid && !valid)\n }\n\n return render(finalProps)\n}\n"],"mappings":";;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAEe,kBAAAA,MAAM;EAAA,OAAI,SAASC,MAAT,CAAgBC,KAAhB,EAAuB;IAC9C,IAAG,CAACA,KAAK,CAACC,QAAV,EAAoB,MAAM,IAAIC,KAAJ,CAAU,6DAAV,CAAN;;IAEpB,IACED,QADF,GAGID,KAHJ,CACEC,QADF;IAAA,IACYE,sBADZ,GAGIH,KAHJ,CACYG,sBADZ;IAAA,IACoCC,aADpC,GAGIJ,KAHJ,CACoCI,aADpC;IAAA,IACmDC,aADnD,GAGIL,KAHJ,CACmDK,aADnD;IAAA,IACkEC,cADlE,GAGIN,KAHJ,CACkEM,cADlE;IAAA,IAEEC,KAFF,GAGIP,KAHJ,CAEEO,KAFF;IAAA,IAESC,QAFT,GAGIR,KAHJ,CAESQ,QAFT;IAAA,IAEmBC,cAFnB,GAGIT,KAHJ,CAEmBS,cAFnB;IAAA,IAEmCC,MAFnC,GAGIV,KAHJ,CAEmCU,MAFnC;IAAA,IAE8CC,WAF9C,4BAGIX,KAHJ,aAH8C,CAQ9C;;;IACA,gBAAkC,IAAAY,eAAA,EAAS,KAAT,CAAlC;IAAA;IAAA,IAAOC,SAAP;IAAA,IAAkBC,YAAlB;;IAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAC,CAAC,EAAI;MACnB,IAAMC,MAAM,GAAGhB,QAAQ,CAACe,CAAD,EAAI;QAAER,QAAQ,EAARA,QAAF;QAAYU,gBAAgB,EAAER;MAA9B,CAAJ,CAAvB;;MACA,IAAGO,MAAM,IAAIA,MAAM,WAAhB,IAA4B,OAAOA,MAAM,WAAb,KAA0B,UAAzD,EAAqE;QACnEH,YAAY,CAAC,IAAD,CAAZ;QACAG,MAAM,WAAN,CAAe;UAAA,OAAMH,YAAY,CAAC,KAAD,CAAlB;QAAA,CAAf;MACD;IACF,CAND;;IAQA,IAAMK,UAAU,mCACXR,WADW;MAEdI,OAAO,EAAPA,OAFc;MAGdK,QAAQ,EAAEpB,KAAK,CAACoB,QAAN,IAAkBP,SAAlB,IAAgCJ,cAAc,IAAI,CAACF;IAH/C,EAAhB;;IAMA,OAAOT,MAAM,CAACqB,UAAD,CAAb;EACD,CA1BoB;AAAA,C"}
1
+ {"version":3,"sources":["../src/submit.js"],"names":["render","Submit","props","onSubmit","Error","registerFieldValidator","setFieldValue","getFieldValue","getFieldValues","valid","validate","disableInvalid","values","propsToPass","executing","setExecuting","onClick","e","result","additionalValues","finalProps","disabled"],"mappings":";;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAEe,kBAAAA,MAAM;AAAA,SAAI,SAASC,MAAT,CAAgBC,KAAhB,EAAuB;AAC9C,QAAG,CAACA,KAAK,CAACC,QAAV,EAAoB,MAAM,IAAIC,KAAJ,CAAU,6DAAV,CAAN;;AAEpB,QACED,QADF,GAGID,KAHJ,CACEC,QADF;AAAA,QACYE,sBADZ,GAGIH,KAHJ,CACYG,sBADZ;AAAA,QACoCC,aADpC,GAGIJ,KAHJ,CACoCI,aADpC;AAAA,QACmDC,aADnD,GAGIL,KAHJ,CACmDK,aADnD;AAAA,QACkEC,cADlE,GAGIN,KAHJ,CACkEM,cADlE;AAAA,QAEEC,KAFF,GAGIP,KAHJ,CAEEO,KAFF;AAAA,QAESC,QAFT,GAGIR,KAHJ,CAESQ,QAFT;AAAA,QAEmBC,cAFnB,GAGIT,KAHJ,CAEmBS,cAFnB;AAAA,QAEmCC,MAFnC,GAGIV,KAHJ,CAEmCU,MAFnC;AAAA,QAE8CC,WAF9C,4BAGIX,KAHJ,aAH8C,CAQ9C;;;AACA,oBAAkC,qBAAS,KAAT,CAAlC;AAAA;AAAA,QAAOY,SAAP;AAAA,QAAkBC,YAAlB;;AAEA,QAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAC,CAAC,EAAI;AACnB,UAAMC,MAAM,GAAGf,QAAQ,CAACc,CAAD,EAAI;AAAEP,QAAAA,QAAQ,EAARA,QAAF;AAAYS,QAAAA,gBAAgB,EAAEP;AAA9B,OAAJ,CAAvB;;AACA,UAAGM,MAAM,IAAIA,MAAM,WAAhB,IAA4B,OAAOA,MAAM,WAAb,KAA0B,UAAzD,EAAqE;AACnEH,QAAAA,YAAY,CAAC,IAAD,CAAZ;AACAG,QAAAA,MAAM,WAAN,CAAe;AAAA,iBAAMH,YAAY,CAAC,KAAD,CAAlB;AAAA,SAAf;AACD;AACF,KAND;;AAQA,QAAMK,UAAU,mCACXP,WADW;AAEdG,MAAAA,OAAO,EAAPA,OAFc;AAGdK,MAAAA,QAAQ,EAAEnB,KAAK,CAACmB,QAAN,IAAkBP,SAAlB,IAAgCH,cAAc,IAAI,CAACF;AAH/C,MAAhB;;AAMA,WAAOT,MAAM,CAACoB,UAAD,CAAb;AACD,GA1BoB;AAAA,C","sourcesContent":["import React, { useState } from 'react'\n\nexport default render => function Submit(props) {\n if(!props.onSubmit) throw new Error('Button components must be contained within a Form component')\n\n const {\n onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,\n valid, validate, disableInvalid, values, ...propsToPass\n } = props\n\n // TODO: set executing when form is triggered by enter key\n const [executing, setExecuting] = useState(false)\n\n const onClick = e => {\n const result = onSubmit(e, { validate, additionalValues: values })\n if(result && result.finally && typeof result.finally === 'function') {\n setExecuting(true)\n result.finally(() => setExecuting(false))\n }\n }\n\n const finalProps = {\n ...propsToPass,\n onClick,\n disabled: props.disabled || executing || (disableInvalid && !valid)\n }\n\n return render(finalProps)\n}\n"],"file":"submit.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","names":["target","delay","timeout","args","clearTimeout","setTimeout"],"sources":["../src/throttle.js"],"sourcesContent":["export default (target, delay = 200) => {\n let timeout\n\n return (...args) => {\n clearTimeout(timeout)\n timeout = setTimeout(\n () => target(...args),\n delay\n )\n }\n}"],"mappings":";;;;;;;eAAe,kBAACA,MAAD,EAAyB;EAAA,IAAhBC,KAAgB,uEAAR,GAAQ;EACtC,IAAIC,OAAJ;EAEA,OAAO,YAAa;IAAA,kCAATC,IAAS;MAATA,IAAS;IAAA;;IAClBC,YAAY,CAACF,OAAD,CAAZ;IACAA,OAAO,GAAGG,UAAU,CAClB;MAAA,OAAML,MAAM,MAAN,SAAUG,IAAV,CAAN;IAAA,CADkB,EAElBF,KAFkB,CAApB;EAID,CAND;AAOD,C"}
1
+ {"version":3,"sources":["../src/throttle.js"],"names":["target","delay","timeout","args","clearTimeout","setTimeout"],"mappings":";;;;;;;eAAe,kBAACA,MAAD,EAAyB;AAAA,MAAhBC,KAAgB,uEAAR,GAAQ;AACtC,MAAIC,OAAJ;AAEA,SAAO,YAAa;AAAA,sCAATC,IAAS;AAATA,MAAAA,IAAS;AAAA;;AAClBC,IAAAA,YAAY,CAACF,OAAD,CAAZ;AACAA,IAAAA,OAAO,GAAGG,UAAU,CAClB;AAAA,aAAML,MAAM,MAAN,SAAUG,IAAV,CAAN;AAAA,KADkB,EAElBF,KAFkB,CAApB;AAID,GAND;AAOD,C","sourcesContent":["export default (target, delay = 200) => {\n let timeout\n\n return (...args) => {\n clearTimeout(timeout)\n timeout = setTimeout(\n () => target(...args),\n delay\n )\n }\n}"],"file":"throttle.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFormValues.js","names":["context","useFormValues","useContext","getFieldValues"],"sources":["../src/useFormValues.js"],"sourcesContent":["import { useContext } from 'react'\n\nexport default context => function useFormValues() {\n return useContext(context).getFieldValues()\n}"],"mappings":";;;;;;;AAAA;;eAEe,kBAAAA,OAAO;EAAA,OAAI,SAASC,aAAT,GAAyB;IACjD,OAAO,IAAAC,iBAAA,EAAWF,OAAX,EAAoBG,cAApB,EAAP;EACD,CAFqB;AAAA,C"}
1
+ {"version":3,"sources":["../src/useFormValues.js"],"names":["context","useFormValues","getFieldValues"],"mappings":";;;;;;;AAAA;;eAEe,kBAAAA,OAAO;AAAA,SAAI,SAASC,aAAT,GAAyB;AACjD,WAAO,uBAAWD,OAAX,EAAoBE,cAApB,EAAP;AACD,GAFqB;AAAA,C","sourcesContent":["import { useContext } from 'react'\n\nexport default context => function useFormValues() {\n return useContext(context).getFieldValues()\n}"],"file":"useFormValues.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePrevious.js","names":["usePrevious","value","ref","useRef","useEffect","current"],"sources":["../src/usePrevious.js"],"sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport default function usePrevious(value) {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,WAAT,CAAqBC,KAArB,EAA4B;EACzC,IAAMC,GAAG,GAAG,IAAAC,aAAA,GAAZ;EACA,IAAAC,gBAAA,EAAU,YAAM;IACdF,GAAG,CAACG,OAAJ,GAAcJ,KAAd;EACD,CAFD;EAGA,OAAOC,GAAG,CAACG,OAAX;AACD"}
1
+ {"version":3,"sources":["../src/usePrevious.js"],"names":["usePrevious","value","ref","current"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,WAAT,CAAqBC,KAArB,EAA4B;AACzC,MAAMC,GAAG,GAAG,oBAAZ;AACA,wBAAU,YAAM;AACdA,IAAAA,GAAG,CAACC,OAAJ,GAAcF,KAAd;AACD,GAFD;AAGA,SAAOC,GAAG,CAACC,OAAX;AACD","sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport default function usePrevious(value) {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}"],"file":"usePrevious.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"useUpdate.js","names":["useUpdate","hook","inputs","didMountRef","useRef","useEffect","current"],"sources":["../src/useUpdate.js"],"sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport default function useUpdate(hook, inputs) {\n const didMountRef = useRef(false)\n\n useEffect(() => {\n if (didMountRef.current)\n hook()\n else\n didMountRef.current = true\n }, inputs)\n}"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,SAAT,CAAmBC,IAAnB,EAAyBC,MAAzB,EAAiC;EAC9C,IAAMC,WAAW,GAAG,IAAAC,aAAA,EAAO,KAAP,CAApB;EAEA,IAAAC,gBAAA,EAAU,YAAM;IACd,IAAIF,WAAW,CAACG,OAAhB,EACEL,IAAI,GADN,KAGEE,WAAW,CAACG,OAAZ,GAAsB,IAAtB;EACH,CALD,EAKGJ,MALH;AAMD"}
1
+ {"version":3,"sources":["../src/useUpdate.js"],"names":["useUpdate","hook","inputs","didMountRef","current"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,SAAT,CAAmBC,IAAnB,EAAyBC,MAAzB,EAAiC;AAC9C,MAAMC,WAAW,GAAG,mBAAO,KAAP,CAApB;AAEA,wBAAU,YAAM;AACd,QAAIA,WAAW,CAACC,OAAhB,EACEH,IAAI,GADN,KAGEE,WAAW,CAACC,OAAZ,GAAsB,IAAtB;AACH,GALD,EAKGF,MALH;AAMD","sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport default function useUpdate(hook, inputs) {\n const didMountRef = useRef(false)\n\n useEffect(() => {\n if (didMountRef.current)\n hook()\n else\n didMountRef.current = true\n }, inputs)\n}"],"file":"useUpdate.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danderson00/react-forms",
3
- "version": "0.0.34",
3
+ "version": "0.0.37",
4
4
  "description": "Ultra simple, stateless, validated forms for use in React function components",
5
5
  "main": "dist/index.js",
6
6
  "module": "src/index.js",
package/src/Form.js CHANGED
@@ -24,7 +24,9 @@ const Form = (ContextProvider, additionalContext = {}, ErrorMessage) => (
24
24
 
25
25
  const setFieldValue = (path, value) => {
26
26
  setFieldValues(previousValues => set(previousValues, path, value))
27
- setValid(form.current.checkValidity())
27
+ if(form.current) {
28
+ setValid(form.current.checkValidity())
29
+ }
28
30
  }
29
31
 
30
32
  const onSubmit = (e, { additionalValues, validate } = {}) => {
@@ -70,6 +72,7 @@ const Form = (ContextProvider, additionalContext = {}, ErrorMessage) => (
70
72
  }
71
73
 
72
74
  e && e.preventDefault && e.preventDefault()
75
+ e && e.stopPropagation && e.stopPropagation()
73
76
  }
74
77
 
75
78
  const classNames = ['react-forms', props.className]
package/src/input.js CHANGED
@@ -126,12 +126,13 @@ export default (render, options = {}) => function Input(props) {
126
126
  }
127
127
  }
128
128
 
129
-
130
129
  const updateValidationState = () => {
131
130
  setFieldValidated(true)
132
131
  // this is a little hacky, but the simplest way I could think of to determine the
133
132
  // validity of the actual input element. :invalid is also not supported by enzyme
134
- setError(Boolean(document.querySelector(`#${id}:invalid`)))
133
+ const invalid = Boolean(document.querySelector(`#${id}:invalid`))
134
+ setError(invalid)
135
+ props.onValidated && props.onValidated(!invalid)
135
136
  }
136
137
 
137
138
  /* render */ {