react-ui-basics 0.0.212 → 0.0.213
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.
- package/Animated.js +2 -6
- package/Animated.js.map +1 -1
- package/AutocompleteSelect.js +1 -5
- package/AutocompleteSelect.js.map +1 -1
- package/Button.js +1 -15
- package/Button.js.map +1 -1
- package/CalendarMonthView.d.ts +0 -1
- package/CircleProgress.d.ts +0 -1
- package/Dialog.js +1 -13
- package/Dialog.js.map +1 -1
- package/Dropzone.js +1 -13
- package/Dropzone.js.map +1 -1
- package/FormUploadProgress.js +1 -12
- package/FormUploadProgress.js.map +1 -1
- package/ImageGallery.js +7 -7
- package/ImageGallery.js.map +1 -1
- package/MaterialIcon.d.ts +0 -1
- package/Modal.js +1 -8
- package/Modal.js.map +1 -1
- package/Scrollable.js +2 -14
- package/Scrollable.js.map +1 -1
- package/Size.d.ts +0 -1
- package/SpinningProgress.d.ts +0 -1
- package/TextField.js +1 -23
- package/TextField.js.map +1 -1
- package/bundle.css +765 -765
- package/package.json +3 -1
- package/router/Link.js +1 -6
- package/router/Link.js.map +1 -1
- package/router/NavLink.js +0 -3
- package/router/NavLink.js.map +1 -1
- package/router/Route.js +1 -8
- package/router/Route.js.map +1 -1
- package/src/store/{ProxyTools.test.js → ProxyTools.test.ts} +1 -1
- package/src/store/Store.test.js +86 -0
- package/src/store/Store.ts +30 -18
- package/store/ProxyTools.test.d.ts +1 -0
- package/store/Store.d.ts +2 -1
- package/store/Store.js +28 -14
- package/store/Store.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-ui-basics",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.213",
|
|
4
4
|
"description": "",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"_main": "index.cjs.js",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@babel/plugin-transform-runtime": "7.22.15",
|
|
58
58
|
"@babel/preset-env": "7.22.20",
|
|
59
59
|
"@babel/preset-react": "7.22.15",
|
|
60
|
+
"@babel/preset-typescript": "^7.23.3",
|
|
60
61
|
"@rollup/plugin-typescript": "^9.0.1",
|
|
61
62
|
"@storybook/addon-actions": "6.4.19",
|
|
62
63
|
"@storybook/addon-controls": "6.4.19",
|
|
@@ -65,6 +66,7 @@
|
|
|
65
66
|
"@storybook/addons": "6.4.19",
|
|
66
67
|
"@storybook/react": "6.4.19",
|
|
67
68
|
"@storybook/source-loader": "6.4.19",
|
|
69
|
+
"@types/jest": "^29.5.11",
|
|
68
70
|
"@types/react": "^17.0.50",
|
|
69
71
|
"@types/react-dom": "^17.0.17",
|
|
70
72
|
"babel-loader": "^8.2.5",
|
package/router/Link.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import 'react';
|
|
2
2
|
import ReactCreateElement from '../ReactCreateElement.js';
|
|
3
|
-
import
|
|
3
|
+
import 'prop-types';
|
|
4
4
|
import { pushLocation } from './HistoryTools.js';
|
|
5
5
|
import { preventDefault } from '../Tools.js';
|
|
6
6
|
|
|
@@ -19,11 +19,6 @@ var Link = function Link(_ref) {
|
|
|
19
19
|
}
|
|
20
20
|
}, children);
|
|
21
21
|
};
|
|
22
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
23
|
-
Link.propTypes = {
|
|
24
|
-
href: PropTypes.string.isRequired
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
22
|
var Link$1 = Link;
|
|
28
23
|
|
|
29
24
|
export { Link$1 as default };
|
package/router/Link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sources":["../src/router/Link.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {pushLocation} from \"./HistoryTools\";\nimport {preventDefault} from \"../Tools\";\n\nconst Link = ({children, href, className}) =>\n <a href={href} className={className} onClick={(e) => {\n if (!e.ctrlKey) {\n preventDefault(e);\n pushLocation(href);\n }\n }}>{children}</a>;\n\nif (window.isNotProductionEnvironment) {\n Link.propTypes = {\n href: PropTypes.string.isRequired,\n };\n}\n\nexport default Link;"],"names":["Link","_ref","children","href","className","ReactCreateElement","onClick","e","ctrlKey","preventDefault","pushLocation"
|
|
1
|
+
{"version":3,"file":"Link.js","sources":["../src/router/Link.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {pushLocation} from \"./HistoryTools\";\nimport {preventDefault} from \"../Tools\";\n\nconst Link = ({children, href, className}) =>\n <a href={href} className={className} onClick={(e) => {\n if (!e.ctrlKey) {\n preventDefault(e);\n pushLocation(href);\n }\n }}>{children}</a>;\n\nif (window.isNotProductionEnvironment) {\n Link.propTypes = {\n href: PropTypes.string.isRequired,\n };\n}\n\nexport default Link;"],"names":["Link","_ref","children","href","className","ReactCreateElement","onClick","e","ctrlKey","preventDefault","pushLocation"],"mappings":";;;;;;AAOA,IAAMA,IAAI,GAAG,SAAPA,IAAIA,CAAAC,IAAA,EAAA;AAAA,EAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS,CAAA;AAAA,EAAA,OACpCC,kBAAA,CAAA,GAAA,EAAA;AAAGF,IAAAA,IAAI,EAAEA,IAAK;AAACC,IAAAA,SAAS,EAAEA,SAAU;AAACE,IAAAA,OAAO,EAAE,SAAAA,OAACC,CAAAA,CAAC,EAAK;AACjD,MAAA,IAAI,CAACA,CAAC,CAACC,OAAO,EAAE;QACZC,cAAc,CAACF,CAAC,CAAC,CAAA;QACjBG,YAAY,CAACP,IAAI,CAAC,CAAA;AACtB,OAAA;AACJ,KAAA;AAAE,GAAA,EAAED,QAAY,CAAC,CAAA;AAAA,CAAA,CAAA;AAQrB,aAAeF,IAAI;;;;"}
|
package/router/NavLink.js
CHANGED
package/router/NavLink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavLink.js","sources":["../src/router/NavLink.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport Route from \"./Route\";\nimport Link from \"./Link\";\nimport {classNames} from \"../Tools\";\n\nconst NavLink = ({children, href, highlightPath, className, activeClassName}) =>\n <Route path={highlightPath || href}\n controller={matches => <Link href={href} className={classNames(className, matches && activeClassName)}>\n {children}\n </Link>}\n />;\n\nif(window.isNotProductionEnvironment) {\n NavLink.propTypes = Link.propTypes;\n}\n\nexport default NavLink;"],"names":["NavLink","_ref","children","href","highlightPath","className","activeClassName","ReactCreateElement","Route","path","controller","matches","Link","classNames"
|
|
1
|
+
{"version":3,"file":"NavLink.js","sources":["../src/router/NavLink.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport Route from \"./Route\";\nimport Link from \"./Link\";\nimport {classNames} from \"../Tools\";\n\nconst NavLink = ({children, href, highlightPath, className, activeClassName}) =>\n <Route path={highlightPath || href}\n controller={matches => <Link href={href} className={classNames(className, matches && activeClassName)}>\n {children}\n </Link>}\n />;\n\nif(window.isNotProductionEnvironment) {\n NavLink.propTypes = Link.propTypes;\n}\n\nexport default NavLink;"],"names":["NavLink","_ref","children","href","highlightPath","className","activeClassName","ReactCreateElement","Route","path","controller","matches","Link","classNames"],"mappings":";;;;;;;AAQA,IAAMA,OAAO,GAAG,SAAVA,OAAOA,CAAAC,IAAA,EAAA;AAAA,EAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,aAAa,GAAAH,IAAA,CAAbG,aAAa;IAAEC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IAAEC,eAAe,GAAAL,IAAA,CAAfK,eAAe,CAAA;EAAA,OACvEC,kBAAA,CAACC,KAAK,EAAA;IAACC,IAAI,EAAEL,aAAa,IAAID,IAAK;IAC5BO,UAAU,EAAE,SAAAA,UAAAA,CAAAC,OAAO,EAAA;MAAA,OAAIJ,kBAAA,CAACK,IAAI,EAAA;AAACT,QAAAA,IAAI,EAAEA,IAAK;AAACE,QAAAA,SAAS,EAAEQ,UAAU,CAACR,SAAS,EAAEM,OAAO,IAAIL,eAAe,CAAA;AAAE,OAAA,EACjGJ,QACC,CAAC,CAAA;AAAA,KAAA;AAAC,GACd,CAAC,CAAA;AAAA,CAAA,CAAA;AAMN,gBAAeF,OAAO;;;;"}
|
package/router/Route.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { inherits as _inherits, createSuper as _createSuper, createClass as _createClass, classCallCheck as _classCallCheck, assertThisInitialized as _assertThisInitialized, slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import
|
|
3
|
+
import 'prop-types';
|
|
4
4
|
import { setOf, allPropsExcept, isDifferent, addEventListener, WINDOW, removeEventListener, orNoop } from '../Tools.js';
|
|
5
5
|
import { stateGSs, componentDidUpdate, render, componentDidMount, componentWillUnmount, PureComponent, propsGetter, setState } from '../ReactConstants.js';
|
|
6
6
|
|
|
@@ -151,13 +151,6 @@ var Route = function (_PureComponent) {
|
|
|
151
151
|
}
|
|
152
152
|
return _createClass(Route);
|
|
153
153
|
}(PureComponent);
|
|
154
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
155
|
-
Route.propTypes = {
|
|
156
|
-
path: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]).isRequired,
|
|
157
|
-
controller: PropTypes.func,
|
|
158
|
-
onToggle: PropTypes.func
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
154
|
var DefaultController = function DefaultController(matches, children, props) {
|
|
162
155
|
if (!matches || !children) return null;
|
|
163
156
|
if (Object.keys(props).length > 0) {
|
package/router/Route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Route.js","sources":["../src/router/Route.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {allPropsExcept, isDifferent, orNoop, setOf, WINDOW, addEventListener, removeEventListener} from \"../Tools\";\nimport {componentDidUpdate, render, PureComponent, componentDidMount, componentWillUnmount, propsGetter, stateGSs, setState} from \"../ReactConstants\";\n\nconst historyEvents = ['popstate', 'pushState', 'replaceState'];\n\nconst cleanPath = (path) => {\n if (path.length > 1 && path.lastIndexOf('/') === path.length - 1)\n return path.substring(0, path.length - 1);\n\n return path;\n};\n\nconst createUrlMatcher = path => {\n let matcher;\n const segments = path.split('/');\n const optionals = segments.map(it => it === '*' || it.indexOf('?') === it.length - 1);\n const containsVariables = path.indexOf(':') !== -1;\n const containsAnySegment = path.indexOf('*') !== -1;\n const containsNot = path.indexOf('!') !== -1;\n\n if (!containsAnySegment && !containsVariables && !containsNot) {\n matcher = (p) => p === path\n } else {\n const endsWithAny = path.lastIndexOf('*') === path.length - 1;\n const matchers = segments.map((segment, i) => {\n let matcher;\n const variableNameIndex = segment.indexOf(':');\n if (segment === '*')\n matcher = () => true;\n else if (variableNameIndex !== -1) {\n let variable = segment.substring(variableNameIndex + 1);\n let regex = null\n if (variable.indexOf('?') !== -1)\n variable = variable.substring(0, variable.indexOf('?'));\n if (variable.indexOf('(') !== -1) {\n let regexStart = variable.indexOf('(');\n regex = new RegExp(variable.substring(regexStart))\n variable = variable.substring(0, regexStart);\n }\n\n const prefix = variableNameIndex && segment.substring(0, variableNameIndex);\n matcher = (p, params) => {\n if (regex && !!p && !p.match(regex))\n return false\n\n if (!p && !optionals[i])\n return false;\n if (prefix) {\n if (p.indexOf(prefix) === 0)\n p = p.substring(variableNameIndex);\n else\n return false;\n }\n\n params[variable] = p;\n return true;\n }\n } else if (segment.indexOf('!') === 0) {\n const not = segment.substring(1);\n matcher = (p) => p !== not;\n } else\n matcher = (p) => p === segment;\n return matcher;\n });\n\n matcher = (path, params) => {\n const segments = path.split('/');\n const length = Math.min(matchers.length, segments.length);\n\n // only exact match if mapping not ends with *\n if (!endsWithAny && matchers.length < segments.length)\n return false;\n\n // check that each segment matches\n for (let i = 0; i < length; i++) {\n if (!matchers[i](segments[i], params))\n return false;\n }\n\n // check that all other segments are optional\n for (let i = length; i < optionals.length; i++) {\n if (!optionals[i])\n return false;\n }\n\n return true;\n };\n }\n return matcher\n};\n\nconst createUrlMatchers = path => {\n if (Array.isArray(path)) {\n const matchers = path.map(it => createUrlMatcher(it));\n return (path, params) => {\n for (let i = 0; i < matchers.length; i++) {\n let props = {};\n if (matchers[i](path, props)) {\n Object.assign(params, props);\n return true;\n }\n }\n return false;\n }\n } else {\n return createUrlMatcher(path);\n }\n};\n\nconst selfProps = setOf([\n 'children',\n 'path',\n 'controller',\n 'onToggle',\n]);\n\nclass Route extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n let matcher;\n\n const props = propsGetter(that);\n const [\n isRendering,\n paramsState,\n mergedPropsState,\n ] = stateGSs(that, 3);\n\n const process = () => {\n let params = {};\n let nextState = {};\n let isMatching = matcher(cleanPath(WINDOW.location.pathname), params);\n\n const toggle = isMatching !== isRendering();\n toggle && (nextState[isRendering] = isMatching);\n\n if (isDifferent(paramsState(), params)) {\n nextState[mergedPropsState] = Object.assign(allPropsExcept(props(), selfProps), params);\n nextState[paramsState] = params;\n }\n\n //set new state just once to avoid several renders\n setState(that, nextState, () => {\n toggle && orNoop(props().onToggle)(isMatching);\n })\n };\n\n that[componentDidUpdate] = (prevProps, prevState) => {\n if (props() !== prevProps) {\n let mergedProps = Object.assign(allPropsExcept(props(), selfProps), paramsState());\n if (isDifferent(mergedProps, mergedPropsState()))\n mergedPropsState(mergedProps);\n }\n };\n\n that[render] = () => {\n const {children, controller} = props();\n return (controller || DefaultController)(isRendering(), children, mergedPropsState());\n };\n\n that[componentDidMount] = () => {\n matcher = createUrlMatchers(props().path);\n\n historyEvents.forEach(it => {\n addEventListener(WINDOW, it, process);\n });\n process();\n };\n\n that[componentWillUnmount] = () => {\n historyEvents.forEach(it => {\n removeEventListener(WINDOW, it, process);\n });\n };\n }\n}\n\nif (window.isNotProductionEnvironment) {\n Route.propTypes = {\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]).isRequired,\n controller: PropTypes.func,\n onToggle: PropTypes.func,\n };\n}\n\nconst DefaultController = (matches, children, props) => {\n if (!matches || !children) return null;\n if (Object.keys(props).length > 0) {\n return React.Children.map(children, child => React.cloneElement(child, props));\n }\n return children;\n};\n\nexport default Route;"],"names":["historyEvents","cleanPath","path","length","lastIndexOf","substring","createUrlMatcher","matcher","segments","split","optionals","map","it","indexOf","containsVariables","containsAnySegment","containsNot","p","endsWithAny","matchers","segment","i","variableNameIndex","variable","regex","regexStart","RegExp","prefix","params","match","not","Math","min","createUrlMatchers","Array","isArray","props","Object","assign","selfProps","setOf","Route","_PureComponent","_inherits","_super","_createSuper","properties","_this","_classCallCheck","call","that","_assertThisInitialized","state","propsGetter","_stateGSs","stateGSs","_stateGSs2","_slicedToArray","isRendering","paramsState","mergedPropsState","process","nextState","isMatching","WINDOW","location","pathname","toggle","isDifferent","allPropsExcept","setState","orNoop","onToggle","componentDidUpdate","prevProps","prevState","mergedProps","render","_props","children","controller","DefaultController","componentDidMount","forEach","addEventListener","componentWillUnmount","removeEventListener","_createClass","PureComponent","window","isNotProductionEnvironment","propTypes","PropTypes","oneOfType","string","arrayOf","isRequired","func","matches","keys","React","Children","child","cloneElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Route.js","sources":["../src/router/Route.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {allPropsExcept, isDifferent, orNoop, setOf, WINDOW, addEventListener, removeEventListener} from \"../Tools\";\nimport {componentDidUpdate, render, PureComponent, componentDidMount, componentWillUnmount, propsGetter, stateGSs, setState} from \"../ReactConstants\";\n\nconst historyEvents = ['popstate', 'pushState', 'replaceState'];\n\nconst cleanPath = (path) => {\n if (path.length > 1 && path.lastIndexOf('/') === path.length - 1)\n return path.substring(0, path.length - 1);\n\n return path;\n};\n\nconst createUrlMatcher = path => {\n let matcher;\n const segments = path.split('/');\n const optionals = segments.map(it => it === '*' || it.indexOf('?') === it.length - 1);\n const containsVariables = path.indexOf(':') !== -1;\n const containsAnySegment = path.indexOf('*') !== -1;\n const containsNot = path.indexOf('!') !== -1;\n\n if (!containsAnySegment && !containsVariables && !containsNot) {\n matcher = (p) => p === path\n } else {\n const endsWithAny = path.lastIndexOf('*') === path.length - 1;\n const matchers = segments.map((segment, i) => {\n let matcher;\n const variableNameIndex = segment.indexOf(':');\n if (segment === '*')\n matcher = () => true;\n else if (variableNameIndex !== -1) {\n let variable = segment.substring(variableNameIndex + 1);\n let regex = null\n if (variable.indexOf('?') !== -1)\n variable = variable.substring(0, variable.indexOf('?'));\n if (variable.indexOf('(') !== -1) {\n let regexStart = variable.indexOf('(');\n regex = new RegExp(variable.substring(regexStart))\n variable = variable.substring(0, regexStart);\n }\n\n const prefix = variableNameIndex && segment.substring(0, variableNameIndex);\n matcher = (p, params) => {\n if (regex && !!p && !p.match(regex))\n return false\n\n if (!p && !optionals[i])\n return false;\n if (prefix) {\n if (p.indexOf(prefix) === 0)\n p = p.substring(variableNameIndex);\n else\n return false;\n }\n\n params[variable] = p;\n return true;\n }\n } else if (segment.indexOf('!') === 0) {\n const not = segment.substring(1);\n matcher = (p) => p !== not;\n } else\n matcher = (p) => p === segment;\n return matcher;\n });\n\n matcher = (path, params) => {\n const segments = path.split('/');\n const length = Math.min(matchers.length, segments.length);\n\n // only exact match if mapping not ends with *\n if (!endsWithAny && matchers.length < segments.length)\n return false;\n\n // check that each segment matches\n for (let i = 0; i < length; i++) {\n if (!matchers[i](segments[i], params))\n return false;\n }\n\n // check that all other segments are optional\n for (let i = length; i < optionals.length; i++) {\n if (!optionals[i])\n return false;\n }\n\n return true;\n };\n }\n return matcher\n};\n\nconst createUrlMatchers = path => {\n if (Array.isArray(path)) {\n const matchers = path.map(it => createUrlMatcher(it));\n return (path, params) => {\n for (let i = 0; i < matchers.length; i++) {\n let props = {};\n if (matchers[i](path, props)) {\n Object.assign(params, props);\n return true;\n }\n }\n return false;\n }\n } else {\n return createUrlMatcher(path);\n }\n};\n\nconst selfProps = setOf([\n 'children',\n 'path',\n 'controller',\n 'onToggle',\n]);\n\nclass Route extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n let matcher;\n\n const props = propsGetter(that);\n const [\n isRendering,\n paramsState,\n mergedPropsState,\n ] = stateGSs(that, 3);\n\n const process = () => {\n let params = {};\n let nextState = {};\n let isMatching = matcher(cleanPath(WINDOW.location.pathname), params);\n\n const toggle = isMatching !== isRendering();\n toggle && (nextState[isRendering] = isMatching);\n\n if (isDifferent(paramsState(), params)) {\n nextState[mergedPropsState] = Object.assign(allPropsExcept(props(), selfProps), params);\n nextState[paramsState] = params;\n }\n\n //set new state just once to avoid several renders\n setState(that, nextState, () => {\n toggle && orNoop(props().onToggle)(isMatching);\n })\n };\n\n that[componentDidUpdate] = (prevProps, prevState) => {\n if (props() !== prevProps) {\n let mergedProps = Object.assign(allPropsExcept(props(), selfProps), paramsState());\n if (isDifferent(mergedProps, mergedPropsState()))\n mergedPropsState(mergedProps);\n }\n };\n\n that[render] = () => {\n const {children, controller} = props();\n return (controller || DefaultController)(isRendering(), children, mergedPropsState());\n };\n\n that[componentDidMount] = () => {\n matcher = createUrlMatchers(props().path);\n\n historyEvents.forEach(it => {\n addEventListener(WINDOW, it, process);\n });\n process();\n };\n\n that[componentWillUnmount] = () => {\n historyEvents.forEach(it => {\n removeEventListener(WINDOW, it, process);\n });\n };\n }\n}\n\nif (window.isNotProductionEnvironment) {\n Route.propTypes = {\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]).isRequired,\n controller: PropTypes.func,\n onToggle: PropTypes.func,\n };\n}\n\nconst DefaultController = (matches, children, props) => {\n if (!matches || !children) return null;\n if (Object.keys(props).length > 0) {\n return React.Children.map(children, child => React.cloneElement(child, props));\n }\n return children;\n};\n\nexport default Route;"],"names":["historyEvents","cleanPath","path","length","lastIndexOf","substring","createUrlMatcher","matcher","segments","split","optionals","map","it","indexOf","containsVariables","containsAnySegment","containsNot","p","endsWithAny","matchers","segment","i","variableNameIndex","variable","regex","regexStart","RegExp","prefix","params","match","not","Math","min","createUrlMatchers","Array","isArray","props","Object","assign","selfProps","setOf","Route","_PureComponent","_inherits","_super","_createSuper","properties","_this","_classCallCheck","call","that","_assertThisInitialized","state","propsGetter","_stateGSs","stateGSs","_stateGSs2","_slicedToArray","isRendering","paramsState","mergedPropsState","process","nextState","isMatching","WINDOW","location","pathname","toggle","isDifferent","allPropsExcept","setState","orNoop","onToggle","componentDidUpdate","prevProps","prevState","mergedProps","render","_props","children","controller","DefaultController","componentDidMount","forEach","addEventListener","componentWillUnmount","removeEventListener","_createClass","PureComponent","matches","keys","React","Children","child","cloneElement"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {createProxy} from "./ProxyTools";
|
|
2
2
|
|
|
3
3
|
it('test proxy null', () => {
|
|
4
4
|
const p = createProxy(null);
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import ReactConstants from "./ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./CommonFields"; import {toConsumableArray as __toConsumableArray} from "./_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./_virtual/_rollupPluginBabelHelpers"; import React from 'react';
|
|
2
|
+
import {mount} from 'enzyme';
|
|
3
|
+
import Store, {useStore} from "./Store";
|
|
4
|
+
import {act} from 'react-dom/test-utils';
|
|
5
|
+
|
|
6
|
+
it('test 1', () => {
|
|
7
|
+
const store = new Store({
|
|
8
|
+
count: 0,
|
|
9
|
+
value: ''
|
|
10
|
+
});
|
|
11
|
+
let renderCount = 0
|
|
12
|
+
const MyComponent = () => {
|
|
13
|
+
let s = useStore(store);
|
|
14
|
+
renderCount++
|
|
15
|
+
return <div>{s.count}</div>;
|
|
16
|
+
};
|
|
17
|
+
const wrapper = mount(<MyComponent/>);
|
|
18
|
+
expect(wrapper).toHaveHTML('<div>0</div>');
|
|
19
|
+
expect(renderCount).toBe(1);
|
|
20
|
+
|
|
21
|
+
act(() => {
|
|
22
|
+
store.set(it => {
|
|
23
|
+
it.count++
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
27
|
+
expect(renderCount).toBe(2);
|
|
28
|
+
|
|
29
|
+
act(() => {
|
|
30
|
+
store.set(it => {
|
|
31
|
+
it.value = 'foo'
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
35
|
+
expect(renderCount).toBe(3);
|
|
36
|
+
|
|
37
|
+
act(() => {
|
|
38
|
+
store.set(it => {
|
|
39
|
+
it.value = 'bar'
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
43
|
+
expect(renderCount).toBe(4);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
it('test 2', () => {
|
|
48
|
+
const store = new Store({
|
|
49
|
+
count: 0,
|
|
50
|
+
value: ''
|
|
51
|
+
});
|
|
52
|
+
let renderCount = 0
|
|
53
|
+
const MyComponent = () => {
|
|
54
|
+
let count = useStore(store, it=> it.count);
|
|
55
|
+
renderCount++
|
|
56
|
+
return <div>{count}</div>;
|
|
57
|
+
};
|
|
58
|
+
const wrapper = mount(<MyComponent/>);
|
|
59
|
+
expect(wrapper).toHaveHTML('<div>0</div>');
|
|
60
|
+
expect(renderCount).toBe(1);
|
|
61
|
+
|
|
62
|
+
act(() => {
|
|
63
|
+
store.set(it => {
|
|
64
|
+
it.count++
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
68
|
+
expect(renderCount).toBe(2);
|
|
69
|
+
|
|
70
|
+
act(() => {
|
|
71
|
+
store.set({
|
|
72
|
+
value: 'foo'
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
76
|
+
// react executes functional-component after first setState with the same value
|
|
77
|
+
expect(renderCount).toBe(3);
|
|
78
|
+
|
|
79
|
+
act(() => {
|
|
80
|
+
store.set({
|
|
81
|
+
value: 'bar'
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
expect(wrapper).toHaveHTML('<div>1</div>');
|
|
85
|
+
expect(renderCount).toBe(3);
|
|
86
|
+
});
|
package/src/store/Store.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {useEffect, useState} from "react";
|
|
2
2
|
import {createProxy} from "./ProxyTools";
|
|
3
|
+
import {isFunction, isObject} from "../Tools";
|
|
3
4
|
|
|
4
5
|
interface Stores {
|
|
5
6
|
[index: number]: any
|
|
@@ -8,9 +9,11 @@ interface Stores {
|
|
|
8
9
|
let STORES: Stores = {}
|
|
9
10
|
let COUNTER = 0
|
|
10
11
|
|
|
12
|
+
type Setter<T> = (oldState: T) => T | void;
|
|
13
|
+
|
|
11
14
|
abstract class AbstractStore<T> {
|
|
12
15
|
get: () => T;
|
|
13
|
-
set: (
|
|
16
|
+
set: (setter: T | Partial<T> | (Setter<T>)) => void;
|
|
14
17
|
reset: () => void;
|
|
15
18
|
subscribe: (fn: () => void) => void;
|
|
16
19
|
unsubscribe: (fn: () => void) => void;
|
|
@@ -23,27 +26,36 @@ export class Store<T> extends AbstractStore<T> {
|
|
|
23
26
|
super()
|
|
24
27
|
let that = this;
|
|
25
28
|
let listeners: Array<() => void> = []
|
|
29
|
+
let index = '' + COUNTER++;
|
|
30
|
+
let runListeners = () => {
|
|
31
|
+
listeners.forEach(fn => fn())
|
|
32
|
+
};
|
|
26
33
|
|
|
27
|
-
const index = COUNTER++;
|
|
28
34
|
STORES[index] = initialState
|
|
29
35
|
|
|
30
36
|
that.unsubscribe = (fn: () => void) => {
|
|
31
|
-
|
|
37
|
+
let i = listeners.indexOf(fn)
|
|
38
|
+
let length = listeners.length;
|
|
39
|
+
if (i > -1) {
|
|
40
|
+
listeners[i] = listeners[length - 1]
|
|
41
|
+
listeners.splice(length - 1, 1)
|
|
42
|
+
}
|
|
32
43
|
}
|
|
33
44
|
that.get = (): T => STORES[index]
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
that.set = (setter) => {
|
|
46
|
+
let result;
|
|
47
|
+
if (isFunction(setter)) {
|
|
48
|
+
const proxy = createProxy(STORES[index]);
|
|
49
|
+
result = (setter as Setter<T>)(proxy);
|
|
50
|
+
if (!result || result === proxy)
|
|
51
|
+
result = proxy.bake()
|
|
52
|
+
} else if (isObject(setter)) {
|
|
53
|
+
result = {...STORES[index], ...setter}
|
|
54
|
+
} else {
|
|
55
|
+
result = setter
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
STORES[index] = result
|
|
47
59
|
runListeners();
|
|
48
60
|
}
|
|
49
61
|
|
|
@@ -85,7 +97,7 @@ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>): R {
|
|
|
85
97
|
if (!selector)
|
|
86
98
|
selector = (defaultSelector as Selector<T, R>)
|
|
87
99
|
|
|
88
|
-
const [state, setState] = useState(selector(store.get()))
|
|
100
|
+
const [state, setState] = useState(() => selector(store.get()))
|
|
89
101
|
|
|
90
102
|
useEffect(() => {
|
|
91
103
|
const updateState = () => {
|
|
@@ -96,7 +108,7 @@ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>): R {
|
|
|
96
108
|
return () => {
|
|
97
109
|
store.unsubscribe(updateState);
|
|
98
110
|
}
|
|
99
|
-
}, [
|
|
111
|
+
}, [])
|
|
100
112
|
|
|
101
113
|
return state
|
|
102
114
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/store/Store.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
interface Stores {
|
|
2
2
|
[index: number]: any;
|
|
3
3
|
}
|
|
4
|
+
declare type Setter<T> = (oldState: T) => T | void;
|
|
4
5
|
declare abstract class AbstractStore<T> {
|
|
5
6
|
get: () => T;
|
|
6
|
-
set: (
|
|
7
|
+
set: (setter: T | Partial<T> | (Setter<T>)) => void;
|
|
7
8
|
reset: () => void;
|
|
8
9
|
subscribe: (fn: () => void) => void;
|
|
9
10
|
unsubscribe: (fn: () => void) => void;
|
package/store/Store.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { useState, useEffect } from 'react';
|
|
2
2
|
import { createProxy } from './ProxyTools.js';
|
|
3
|
+
import { isFunction, isObject } from '../Tools.js';
|
|
3
4
|
|
|
4
5
|
let STORES = {};
|
|
5
6
|
let COUNTER = 0;
|
|
@@ -10,22 +11,35 @@ class Store extends AbstractStore {
|
|
|
10
11
|
super();
|
|
11
12
|
let that = this;
|
|
12
13
|
let listeners = [];
|
|
13
|
-
|
|
14
|
+
let index = '' + COUNTER++;
|
|
15
|
+
let runListeners = () => {
|
|
16
|
+
listeners.forEach(fn => fn());
|
|
17
|
+
};
|
|
14
18
|
STORES[index] = initialState;
|
|
15
19
|
that.unsubscribe = (fn) => {
|
|
16
|
-
|
|
20
|
+
let i = listeners.indexOf(fn);
|
|
21
|
+
let length = __length(listeners);
|
|
22
|
+
if (i > -1) {
|
|
23
|
+
listeners[i] = listeners[length - 1];
|
|
24
|
+
listeners.splice(length - 1, 1);
|
|
25
|
+
}
|
|
17
26
|
};
|
|
18
27
|
that.get = () => STORES[index];
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
else
|
|
28
|
-
STORES[index]
|
|
28
|
+
that.set = (setter) => {
|
|
29
|
+
let result;
|
|
30
|
+
if (isFunction(setter)) {
|
|
31
|
+
const proxy = createProxy(STORES[index]);
|
|
32
|
+
result = setter(proxy);
|
|
33
|
+
if (!result || result === proxy)
|
|
34
|
+
result = proxy.bake();
|
|
35
|
+
}
|
|
36
|
+
else if (isObject(setter)) {
|
|
37
|
+
result = __extends(__extends({}, STORES[index]), setter);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
result = setter;
|
|
41
|
+
}
|
|
42
|
+
STORES[index] = result;
|
|
29
43
|
runListeners();
|
|
30
44
|
};
|
|
31
45
|
that.reset = () => {
|
|
@@ -51,7 +65,7 @@ const defaultSelector = (store) => store;
|
|
|
51
65
|
function useStore(store, selector) {
|
|
52
66
|
if (!selector)
|
|
53
67
|
selector = defaultSelector;
|
|
54
|
-
const [state, setState] = useState(selector(store.get()));
|
|
68
|
+
const [state, setState] = useState(() => selector(store.get()));
|
|
55
69
|
useEffect(() => {
|
|
56
70
|
const updateState = () => {
|
|
57
71
|
setState(selector(store.get()));
|
|
@@ -60,7 +74,7 @@ function useStore(store, selector) {
|
|
|
60
74
|
return () => {
|
|
61
75
|
store.unsubscribe(updateState);
|
|
62
76
|
};
|
|
63
|
-
}, [
|
|
77
|
+
}, []);
|
|
64
78
|
return state;
|
|
65
79
|
}
|
|
66
80
|
|
package/store/Store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|