react-ui-basics 0.0.219 → 0.0.221
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 +1 -0
- package/Animated.js.map +1 -1
- package/Button.d.ts +24 -0
- package/Button.js +45 -75
- package/Button.js.map +1 -1
- package/DNDContainer.js +10 -5
- package/DNDContainer.js.map +1 -1
- package/DNDDraggable.d.ts +29 -0
- package/DNDDraggable.js +27 -44
- package/DNDDraggable.js.map +1 -1
- package/DNDDroppable.d.ts +28 -0
- package/DNDDroppable.js +32 -46
- package/DNDDroppable.js.map +1 -1
- package/Dialog.d.ts +29 -0
- package/Dialog.js +84 -143
- package/Dialog.js.map +1 -1
- package/DroppableHorizontalList.js +28 -27
- package/DroppableHorizontalList.js.map +1 -1
- package/DroppableList.js +29 -34
- package/DroppableList.js.map +1 -1
- package/Dropzone.js.map +1 -1
- package/FilteredList.d.ts +62 -0
- package/FilteredList.js +128 -232
- package/FilteredList.js.map +1 -1
- package/FormUploadProgress.d.ts +19 -0
- package/FormUploadProgress.js +14 -39
- package/FormUploadProgress.js.map +1 -1
- package/Modal.d.ts +31 -0
- package/Modal.js +102 -134
- package/Modal.js.map +1 -1
- package/ReactConstants.d.ts +6 -2
- package/ReactConstants.js +1 -1
- package/ReactConstants.js.map +1 -1
- package/ReactCreateElement.d.ts +3 -0
- package/ReactCreateElement.js.map +1 -1
- package/ReadyListener.d.ts +34 -0
- package/ReadyListener.js +34 -56
- package/ReadyListener.js.map +1 -1
- package/Scrollable.css +0 -1
- package/Scrollable.d.ts +33 -0
- package/Scrollable.js +308 -325
- package/Scrollable.js.map +1 -1
- package/ScrollableTable.d.ts +4 -2
- package/ScrollableTable.js +5 -6
- package/ScrollableTable.js.map +1 -1
- package/Table.js +1 -1
- package/Table.js.map +1 -1
- package/TextField.d.ts +36 -0
- package/TextField.js +73 -134
- package/TextField.js.map +1 -1
- package/Tools.d.ts +1 -1
- package/Tools.js +1 -1
- package/Tools.js.map +1 -1
- package/_virtual/_rollupPluginBabelHelpers.js +0 -15
- package/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/bundle.css +903 -904
- package/package.json +1 -1
- package/router/Route.js +1 -0
- package/router/Route.js.map +1 -1
- package/src/Button.tsx +96 -0
- package/src/DNDContainer.tsx +19 -10
- package/src/{DNDDraggable.js → DNDDraggable.tsx} +35 -9
- package/src/{DNDDroppable.js → DNDDroppable.tsx} +35 -8
- package/src/{Dialog.js → Dialog.tsx} +63 -44
- package/src/DroppableHorizontalList.js +33 -32
- package/src/DroppableList.js +34 -41
- package/src/Dropzone.tsx +1 -1
- package/src/{FilteredList.js → FilteredList.tsx} +95 -45
- package/src/{FormUploadProgress.js → FormUploadProgress.tsx} +13 -22
- package/src/{Modal.js → Modal.tsx} +48 -33
- package/src/ReactConstants.ts +14 -6
- package/src/ReactCreateElement.tsx +3 -0
- package/src/ReadyListener.tsx +58 -0
- package/src/Scrollable.css +0 -1
- package/src/Scrollable.scss +0 -1
- package/src/{Scrollable.js → Scrollable.tsx} +72 -60
- package/src/ScrollableTable.tsx +7 -7
- package/src/Table.tsx +3 -3
- package/src/{TextField.js → TextField.tsx} +42 -44
- package/src/Tools.ts +2 -2
- package/src/store/Store.test.js +1 -1
- package/src/store/Store.ts +3 -1
- package/store/Store.js +1 -0
- package/store/Store.js.map +1 -1
- package/src/Button.js +0 -98
- package/src/ReactCreateElement.js +0 -3
- package/src/ReadyListener.js +0 -48
package/package.json
CHANGED
package/router/Route.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 { 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 '../ReactCreateElement.js';
|
|
3
4
|
import 'prop-types';
|
|
4
5
|
import { setOf, allPropsExcept, isDifferent, addEventListener, WINDOW, removeEventListener, orNoop } from '../Tools.js';
|
|
5
6
|
import { stateGSs, componentDidUpdate, render, componentDidMount, componentWillUnmount, PureComponent, propsGetter, setState } from '../ReactConstants.js';
|
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","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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"}
|
package/src/Button.tsx
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import React, {FocusEventHandler, MouseEventHandler, ReactElement, ReactNode} from 'react';
|
|
2
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
3
|
+
import './Button.css'
|
|
4
|
+
import {classNames, DOCUMENT, addEventListener, createRef, orNoop} from "./Tools";
|
|
5
|
+
import {PureComponent, render, stateGS, props} from "./ReactConstants";
|
|
6
|
+
|
|
7
|
+
export interface ButtonProps {
|
|
8
|
+
flat?: boolean,
|
|
9
|
+
raised?: boolean,
|
|
10
|
+
round?: boolean,
|
|
11
|
+
disabled?: boolean,
|
|
12
|
+
withRipple?: boolean,
|
|
13
|
+
type?: 'button' | 'submit' | 'reset',
|
|
14
|
+
className?: string,
|
|
15
|
+
onClick?: MouseEventHandler,
|
|
16
|
+
onFocus?: FocusEventHandler,
|
|
17
|
+
style?: any,
|
|
18
|
+
children?: ReactNode,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
class Button extends PureComponent<ButtonProps> {
|
|
22
|
+
static defaultProps = {
|
|
23
|
+
type: 'button',
|
|
24
|
+
withRipple: true,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
constructor(properties) {
|
|
28
|
+
super(properties);
|
|
29
|
+
|
|
30
|
+
const that = this;
|
|
31
|
+
const el = createRef<HTMLButtonElement>();
|
|
32
|
+
const ripple = createRef<HTMLSpanElement>();
|
|
33
|
+
|
|
34
|
+
const rippleClassName = stateGS<string>(that);
|
|
35
|
+
|
|
36
|
+
const onMouseDown = (e) => {
|
|
37
|
+
if (!props(that).withRipple) return;
|
|
38
|
+
|
|
39
|
+
const rect = el().getBoundingClientRect();
|
|
40
|
+
const rippleElement = ripple();
|
|
41
|
+
const style = rippleElement.style;
|
|
42
|
+
const body = DOCUMENT.body;
|
|
43
|
+
|
|
44
|
+
style.height = style.width = Math.max(rect.width, rect.height) + 'px';
|
|
45
|
+
style.top = (e.pageY - rect.top - rippleElement.offsetHeight / 2 - body.scrollTop) + 'px';
|
|
46
|
+
style.left = (e.pageX - rect.left - rippleElement.offsetWidth / 2 - body.scrollLeft) + 'px';
|
|
47
|
+
|
|
48
|
+
rippleClassName('show');
|
|
49
|
+
|
|
50
|
+
addEventListener(rippleElement, 'animationend', () => {
|
|
51
|
+
rippleClassName('showed');
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const onFocus = e => {
|
|
56
|
+
orNoop(props(that).onFocus)(e)
|
|
57
|
+
if (rippleClassName() === 'show')
|
|
58
|
+
return
|
|
59
|
+
|
|
60
|
+
const rect = el().getBoundingClientRect();
|
|
61
|
+
const style = ripple().style;
|
|
62
|
+
|
|
63
|
+
let size = Math.max(rect.width, rect.height) * 0.8
|
|
64
|
+
style.height = style.width = size + 'px';
|
|
65
|
+
style.top = (rect.height / 2 - size / 2) + 'px';
|
|
66
|
+
style.left = (rect.width / 2 - size / 2) + 'px';
|
|
67
|
+
|
|
68
|
+
rippleClassName('focused');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
that[render] = () => {
|
|
72
|
+
const {children, type, className, onClick, flat, raised = !flat, round, style, disabled} = props(that);
|
|
73
|
+
return (
|
|
74
|
+
<button className={classNames('Button',
|
|
75
|
+
className,
|
|
76
|
+
disabled && 'disabled',
|
|
77
|
+
raised && 'raised',
|
|
78
|
+
flat && 'flat',
|
|
79
|
+
round && 'round')
|
|
80
|
+
}
|
|
81
|
+
onFocus={onFocus}
|
|
82
|
+
disabled={disabled}
|
|
83
|
+
style={style}
|
|
84
|
+
type={type}
|
|
85
|
+
onClick={onClick}
|
|
86
|
+
onMouseDown={onMouseDown}
|
|
87
|
+
ref={el}>
|
|
88
|
+
{children}
|
|
89
|
+
<span className={classNames(`ripple`, rippleClassName())} ref={ripple}/>
|
|
90
|
+
</button>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default Button;
|
package/src/DNDContainer.tsx
CHANGED
|
@@ -18,6 +18,8 @@ import {
|
|
|
18
18
|
UNDEFINED
|
|
19
19
|
} from "./Tools";
|
|
20
20
|
import {propsGetter, render, componentDidMount} from "./ReactConstants";
|
|
21
|
+
import Droppable from "./DNDDroppable";
|
|
22
|
+
import Draggable from "./DNDDraggable";
|
|
21
23
|
|
|
22
24
|
const clearSelection = () => {
|
|
23
25
|
const getSelection = WINDOW.getSelection;
|
|
@@ -113,9 +115,9 @@ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
|
|
|
113
115
|
draggable = null;
|
|
114
116
|
};
|
|
115
117
|
|
|
116
|
-
const draggableInitializer = (item) => {
|
|
118
|
+
const draggableInitializer = (item: Draggable) => {
|
|
117
119
|
const handle = item.props.handle;
|
|
118
|
-
const draggableElement = (handle && item.element.
|
|
120
|
+
const draggableElement: HTMLElement = ((handle && item.element.firstElementChild as HTMLElement) || item.element);
|
|
119
121
|
draggableElement.draggable = true;
|
|
120
122
|
|
|
121
123
|
const dragStartListener = (e) => {
|
|
@@ -131,7 +133,7 @@ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
|
|
|
131
133
|
item.width = itemOffset.width;
|
|
132
134
|
item.height = itemOffset.height;
|
|
133
135
|
|
|
134
|
-
let clone = orNoop(item.props.copy)((it) => {
|
|
136
|
+
let clone = orNoop(item.props.copy)((it: Draggable) => {
|
|
135
137
|
let style = it.element.style;
|
|
136
138
|
|
|
137
139
|
const offsetLeft = totalOffsetLeft(container) + (e.clientX - itemOffset.left);
|
|
@@ -177,7 +179,7 @@ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
|
|
|
177
179
|
}
|
|
178
180
|
}
|
|
179
181
|
onDragStart(e);
|
|
180
|
-
setTimeout(() => item.setState({placeholder: true}), 1)
|
|
182
|
+
return setTimeout(() => item.setState({placeholder: true}), 1)
|
|
181
183
|
};
|
|
182
184
|
addListener(draggableElement, item, 'dragend', (e) => {
|
|
183
185
|
if (item.state.placeholder)
|
|
@@ -232,7 +234,7 @@ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
|
|
|
232
234
|
});
|
|
233
235
|
}
|
|
234
236
|
|
|
235
|
-
const droppableInitializer = (item) => {
|
|
237
|
+
const droppableInitializer = (item: Droppable) => {
|
|
236
238
|
droppables.push(item);
|
|
237
239
|
|
|
238
240
|
addEventListener(item.element, 'drop', (e) => {
|
|
@@ -242,27 +244,34 @@ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
|
|
|
242
244
|
data && orNoop(item.props.onDrop)(data);
|
|
243
245
|
}
|
|
244
246
|
}, false);
|
|
245
|
-
addEventListener(item.element, '
|
|
247
|
+
addEventListener(item.element, 'mouseenter', (e) => {
|
|
248
|
+
if(!draggable)
|
|
249
|
+
return
|
|
250
|
+
|
|
246
251
|
if (item.state.allow) {
|
|
247
252
|
preventDefault(e);
|
|
248
253
|
item.isHover(e, draggable, true)
|
|
249
254
|
}
|
|
250
255
|
});
|
|
251
|
-
addEventListener(item.element, '
|
|
256
|
+
addEventListener(item.element, 'mouseleave', (e) => {
|
|
257
|
+
if(!draggable)
|
|
258
|
+
return
|
|
259
|
+
|
|
252
260
|
if (item.state.allow) {
|
|
253
261
|
preventDefault(e);
|
|
254
262
|
item.isHover(e, draggable, false)
|
|
255
263
|
}
|
|
256
264
|
});
|
|
257
265
|
|
|
258
|
-
item.onDragStart = (e, draggable) => {
|
|
266
|
+
item.onDragStart = (e, draggable: Draggable) => {
|
|
259
267
|
item.bounds = item.element.getBoundingClientRect();
|
|
260
268
|
let allow = (orNoop(item.props.onDragStart)(e, data));
|
|
261
269
|
if (allow === UNDEFINED)
|
|
262
270
|
allow = true
|
|
263
|
-
item.setState({allow});
|
|
271
|
+
item.setState({allow: allow as boolean});
|
|
272
|
+
item.isHover(e, draggable)
|
|
264
273
|
};
|
|
265
|
-
item.isHover = (e, draggable, hover) => {
|
|
274
|
+
item.isHover = (e, draggable, hover?: boolean) => {
|
|
266
275
|
const bounds = item.bounds;
|
|
267
276
|
if (!bounds)
|
|
268
277
|
return;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React, {MouseEventHandler} from 'react';
|
|
2
2
|
import ReactCreateElement from './ReactCreateElement';
|
|
3
3
|
import {classNames, orNoop, ref} from "./Tools";
|
|
4
4
|
import {componentDidUpdate, props, state, render, children, className, componentDidMount, componentWillUnmount, PureComponent} from "./ReactConstants";
|
|
@@ -12,35 +12,61 @@ const hover = 'hover',
|
|
|
12
12
|
|
|
13
13
|
const init = that => orNoop(props(that)[initializer])(that);
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
interface DraggableProps {
|
|
16
|
+
id: string | number
|
|
17
|
+
data: any
|
|
18
|
+
copy?: (initializer: (it: Draggable) => Draggable, classname: string, item: Draggable) => Draggable
|
|
19
|
+
onClick?: MouseEventHandler<HTMLDivElement>
|
|
20
|
+
children?: React.ReactNode
|
|
21
|
+
className?: string,
|
|
22
|
+
handle?: React.ReactNode
|
|
23
|
+
initializer?: (draggable: Draggable) => void
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface DraggableState {
|
|
27
|
+
dragged?: boolean,
|
|
28
|
+
placeholder?: boolean,
|
|
29
|
+
hover?: boolean,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
abstract class AbstractDraggable extends PureComponent<DraggableProps, DraggableState> {
|
|
33
|
+
onUnmount?: () => void
|
|
34
|
+
element: HTMLDivElement
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
createPositionListener: (e, style, itemOffset, container) => any;
|
|
38
|
+
initDraggedStyles: (style, itemOffset) => void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class Draggable extends AbstractDraggable {
|
|
16
42
|
|
|
17
43
|
constructor(properties) {
|
|
18
44
|
super(properties);
|
|
19
45
|
const that = this;
|
|
20
46
|
that.state = {};
|
|
21
|
-
that[
|
|
47
|
+
that[componentDidUpdate] = (prevProps) => {
|
|
22
48
|
if (prevProps[handle] !== props(that)[handle] || prevProps[initializer] !== props(that)[initializer])
|
|
23
49
|
init(that)
|
|
24
50
|
};
|
|
25
|
-
that[
|
|
51
|
+
that[componentDidMount] = () => {
|
|
26
52
|
init(that)
|
|
27
53
|
};
|
|
28
|
-
that[
|
|
54
|
+
that[componentWillUnmount] = () => {
|
|
29
55
|
orNoop(that.onUnmount)();
|
|
30
56
|
};
|
|
31
|
-
that[
|
|
57
|
+
that[render] = () => {
|
|
32
58
|
const _state = state(that),
|
|
33
59
|
_props = props(that);
|
|
34
|
-
return <div className={classNames('Draggable', _props[
|
|
60
|
+
return <div className={classNames('Draggable', _props[className],
|
|
35
61
|
_state[dragged] && dragged,
|
|
36
62
|
_state[placeholder] && placeholder,
|
|
37
63
|
_state[hover] && hover,
|
|
38
64
|
)}
|
|
39
|
-
onClick={_props
|
|
65
|
+
onClick={_props.onClick}
|
|
40
66
|
ref={ref('element', that)}
|
|
41
67
|
>
|
|
42
68
|
{_props[handle]}
|
|
43
|
-
{_props[
|
|
69
|
+
{_props[children]}
|
|
44
70
|
</div>;
|
|
45
71
|
}
|
|
46
72
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import ReactCreateElement from './ReactCreateElement';
|
|
3
3
|
import {classNames, orNoop, ref, preventDefault, stopPropagation} from "./Tools";
|
|
4
4
|
import {componentDidMount, componentDidUpdate, render, props, state, componentWillUnmount, children, className, PureComponent} from "./ReactConstants";
|
|
5
|
+
import Draggable from "./DNDDraggable";
|
|
5
6
|
|
|
6
7
|
const hover = 'hover',
|
|
7
8
|
allow = 'allow',
|
|
@@ -10,32 +11,58 @@ const hover = 'hover',
|
|
|
10
11
|
|
|
11
12
|
const init = that => orNoop(props(that)[initializer])(that);
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
interface DroppableProps {
|
|
15
|
+
children?: React.ReactNode
|
|
16
|
+
className?: string,
|
|
17
|
+
initializer?: (draggable: Droppable) => void
|
|
18
|
+
onDrop?: (data: any) => void
|
|
19
|
+
onHover?: (e, draggable: Draggable) => void
|
|
20
|
+
onDragStart?: (e, data: any) => boolean
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface DroppableState {
|
|
24
|
+
allow?: boolean,
|
|
25
|
+
hover?: boolean,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
abstract class AbstractDroppable extends PureComponent<DroppableProps, DroppableState> {
|
|
29
|
+
onUnmount?: () => void
|
|
30
|
+
element: HTMLDivElement
|
|
31
|
+
onDragStart: (e, draggable: Draggable) => void
|
|
32
|
+
bounds: DOMRect
|
|
33
|
+
isHover: (e, draggable: Draggable, hover?: boolean) => void;
|
|
34
|
+
onDragEnd: () => void;
|
|
35
|
+
dropIfHover: () => void;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class Droppable extends AbstractDroppable {
|
|
39
|
+
|
|
14
40
|
|
|
15
41
|
constructor(properties) {
|
|
16
42
|
super(properties);
|
|
17
43
|
const that = this;
|
|
44
|
+
that.state = {}
|
|
18
45
|
|
|
19
|
-
that[
|
|
46
|
+
that[componentDidUpdate] = (prevProps) => {
|
|
20
47
|
if (prevProps[initializer] !== props(that)[initializer])
|
|
21
48
|
init(that)
|
|
22
49
|
};
|
|
23
50
|
|
|
24
|
-
that[
|
|
51
|
+
that[componentDidMount] = () => {
|
|
25
52
|
init(that)
|
|
26
53
|
};
|
|
27
54
|
|
|
28
|
-
that[
|
|
55
|
+
that[componentWillUnmount] = () => {
|
|
29
56
|
orNoop(that.onUnmount)();
|
|
30
57
|
};
|
|
31
58
|
|
|
32
|
-
that[
|
|
59
|
+
that[render] = () => {
|
|
33
60
|
const _props = props(that),
|
|
34
61
|
_state = state(that);
|
|
35
62
|
return <div className={
|
|
36
63
|
classNames(
|
|
37
64
|
'Droppable',
|
|
38
|
-
_props[
|
|
65
|
+
_props[className],
|
|
39
66
|
_state[hover] && hover,
|
|
40
67
|
_state[allow] && allow,
|
|
41
68
|
)}
|
|
@@ -46,7 +73,7 @@ class Droppable extends PureComponent {
|
|
|
46
73
|
}
|
|
47
74
|
}}
|
|
48
75
|
ref={ref('element', that)}>
|
|
49
|
-
{_props[
|
|
76
|
+
{_props[children]}
|
|
50
77
|
</div>;
|
|
51
78
|
};
|
|
52
79
|
}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React, {MouseEventHandler, ReactElement} from 'react';
|
|
2
2
|
import ReactCreateElement from './ReactCreateElement';
|
|
3
3
|
import './Dialog.css'
|
|
4
4
|
import Button from "./Button";
|
|
5
5
|
import Modal from "./Modal";
|
|
6
6
|
import {isUndefined, orNoop, preventDefault, ref, UNDEFINED, classNames, createRef} from "./Tools";
|
|
7
7
|
import {PureComponent, render, componentDidMount, propsGetter, stateGSs} from "./ReactConstants";
|
|
8
|
-
import PropTypes from "prop-types";
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
|
|
10
|
+
type StringOrReactElement = string | ReactElement;
|
|
11
|
+
|
|
12
|
+
export interface DialogProps {
|
|
13
|
+
title?: StringOrReactElement,
|
|
14
|
+
description?: StringOrReactElement,
|
|
15
|
+
accept?: StringOrReactElement,
|
|
16
|
+
cancel?: StringOrReactElement,
|
|
17
|
+
className?: string,
|
|
18
|
+
top?: number,
|
|
19
|
+
onAccept?: MouseEventHandler,
|
|
20
|
+
onCancel?: MouseEventHandler,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class Dialog extends PureComponent<DialogProps> {
|
|
24
|
+
static defaultProps = {
|
|
25
|
+
accept: 'Accept',
|
|
26
|
+
cancel: 'Decline',
|
|
27
|
+
}
|
|
28
|
+
|
|
11
29
|
constructor(properties) {
|
|
12
30
|
super(properties);
|
|
13
31
|
|
|
14
|
-
this[
|
|
15
|
-
const {title, description, accept, cancel, onAccept, onCancel, children} =
|
|
32
|
+
this[render] = () => {
|
|
33
|
+
const {title, description, accept, cancel, onAccept, onCancel, children} = this.props;
|
|
16
34
|
return <div className="Dialog">
|
|
17
35
|
{title && <div className="title">{title}</div>}
|
|
18
36
|
{description && <div className="description">{description}</div>}
|
|
@@ -26,16 +44,34 @@ class Dialog extends PureComponent {
|
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
46
|
|
|
29
|
-
Dialog.defaultProps = {
|
|
30
|
-
accept: 'Accept',
|
|
31
|
-
cancel: 'Decline',
|
|
32
|
-
};
|
|
33
47
|
|
|
34
48
|
const throwIfPropExists = (key, props) => {
|
|
35
49
|
if (props[key]) throw Error(key + " was already set by props")
|
|
36
50
|
};
|
|
37
51
|
|
|
38
|
-
|
|
52
|
+
export type OpenDialogFn = (
|
|
53
|
+
onAccept?: MouseEventHandler,
|
|
54
|
+
onCancel?: MouseEventHandler,
|
|
55
|
+
title?: StringOrReactElement,
|
|
56
|
+
description?: StringOrReactElement,
|
|
57
|
+
accept?: StringOrReactElement,
|
|
58
|
+
cancel?: StringOrReactElement
|
|
59
|
+
) => void;
|
|
60
|
+
|
|
61
|
+
export type CloseDialogFn = () => void;
|
|
62
|
+
|
|
63
|
+
abstract class AbstractDialogWrapper extends PureComponent<DialogWrapperProps> {
|
|
64
|
+
open: OpenDialogFn
|
|
65
|
+
close: CloseDialogFn
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface DialogWrapperProps extends DialogProps {
|
|
69
|
+
show?: boolean,
|
|
70
|
+
open?: (open: OpenDialogFn) => void,
|
|
71
|
+
close?: (close: CloseDialogFn) => void,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
class DialogWrapper extends AbstractDialogWrapper {
|
|
39
75
|
|
|
40
76
|
constructor(properties) {
|
|
41
77
|
super(properties);
|
|
@@ -43,8 +79,8 @@ class DialogWrapper extends Component {
|
|
|
43
79
|
that.state = {};
|
|
44
80
|
|
|
45
81
|
const props = propsGetter(that);
|
|
46
|
-
const openRef = createRef();
|
|
47
|
-
const closeRef = createRef();
|
|
82
|
+
const openRef = createRef<() => void>();
|
|
83
|
+
const closeRef = createRef<() => void>();
|
|
48
84
|
|
|
49
85
|
const [titleState,
|
|
50
86
|
descriptionState,
|
|
@@ -52,9 +88,9 @@ class DialogWrapper extends Component {
|
|
|
52
88
|
onCancelState,
|
|
53
89
|
acceptState,
|
|
54
90
|
cancelState
|
|
55
|
-
] = stateGSs(that, 6);
|
|
91
|
+
] = stateGSs<[StringOrReactElement, StringOrReactElement, MouseEventHandler, MouseEventHandler, StringOrReactElement, StringOrReactElement]>(that, 6);
|
|
56
92
|
|
|
57
|
-
const onCancel = (e) => {
|
|
93
|
+
const onCancel = (e?) => {
|
|
58
94
|
preventDefault(e);
|
|
59
95
|
orNoop(props().onCancel || onCancelState())();
|
|
60
96
|
closeRef()();
|
|
@@ -66,8 +102,8 @@ class DialogWrapper extends Component {
|
|
|
66
102
|
closeRef()();
|
|
67
103
|
};
|
|
68
104
|
|
|
69
|
-
that[
|
|
70
|
-
const {top, className
|
|
105
|
+
that[render] = () => {
|
|
106
|
+
const {top, className} = props();
|
|
71
107
|
return (
|
|
72
108
|
<Modal
|
|
73
109
|
top={top}
|
|
@@ -76,7 +112,15 @@ class DialogWrapper extends Component {
|
|
|
76
112
|
close={closeRef}
|
|
77
113
|
onClose={onCancel}
|
|
78
114
|
>
|
|
79
|
-
<Dialog
|
|
115
|
+
<Dialog
|
|
116
|
+
title={titleState()}
|
|
117
|
+
description={descriptionState()}
|
|
118
|
+
accept={acceptState()}
|
|
119
|
+
cancel={cancelState()}
|
|
120
|
+
{...props()}
|
|
121
|
+
onAccept={onAccept}
|
|
122
|
+
onCancel={onCancel}
|
|
123
|
+
/>
|
|
80
124
|
</Modal>
|
|
81
125
|
);
|
|
82
126
|
};
|
|
@@ -117,7 +161,7 @@ class DialogWrapper extends Component {
|
|
|
117
161
|
openRef()();
|
|
118
162
|
};
|
|
119
163
|
|
|
120
|
-
that[
|
|
164
|
+
that[componentDidMount] = () => {
|
|
121
165
|
const _props = props();
|
|
122
166
|
orNoop(_props.open)(that.open);
|
|
123
167
|
orNoop(_props.close)(closeRef());
|
|
@@ -126,29 +170,4 @@ class DialogWrapper extends Component {
|
|
|
126
170
|
}
|
|
127
171
|
}
|
|
128
172
|
|
|
129
|
-
export default DialogWrapper;
|
|
130
|
-
|
|
131
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
132
|
-
DialogWrapper.propTypes = {
|
|
133
|
-
title: PropTypes.oneOfType([
|
|
134
|
-
PropTypes.string,
|
|
135
|
-
PropTypes.element
|
|
136
|
-
]),
|
|
137
|
-
description: PropTypes.oneOfType([
|
|
138
|
-
PropTypes.string,
|
|
139
|
-
PropTypes.element
|
|
140
|
-
]),
|
|
141
|
-
accept: PropTypes.oneOfType([
|
|
142
|
-
PropTypes.string,
|
|
143
|
-
PropTypes.element
|
|
144
|
-
]),
|
|
145
|
-
cancel: PropTypes.oneOfType([
|
|
146
|
-
PropTypes.string,
|
|
147
|
-
PropTypes.element
|
|
148
|
-
]),
|
|
149
|
-
onAccept: PropTypes.func,
|
|
150
|
-
onCancel: PropTypes.func,
|
|
151
|
-
[ReactConstants[5]]: PropTypes.string,
|
|
152
|
-
top: PropTypes.number,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
173
|
+
export default DialogWrapper;
|