kitchen-simulator 5.0.0-test.17 → 5.0.0-test.19

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.
Files changed (206) hide show
  1. package/package.json +8 -18
  2. package/src/@history.js +3 -0
  3. package/src/CrossSignOn.jsx +94 -0
  4. package/src/KitchenConfigurator.jsx +1526 -0
  5. package/src/KitchenConfiguratorApp.jsx +1 -1
  6. package/src/_KitchenConfigurator.jsx +3 -91
  7. package/src/components/atoms/Snackbar/index.jsx +43 -0
  8. package/src/components/atoms/radio-button/index.jsx +20 -0
  9. package/src/components/atoms/radio-button/styles.js +56 -0
  10. package/src/components/button/MainButton.jsx +157 -0
  11. package/src/components/button/ToggleMeasureButton.jsx +65 -0
  12. package/src/components/catalog-view/catalog-breadcrumb.jsx +53 -0
  13. package/src/components/catalog-view/catalog-item.jsx +229 -0
  14. package/src/components/catalog-view/catalog-list.jsx +173 -0
  15. package/src/components/catalog-view/catalog-page-item.jsx +110 -0
  16. package/src/components/catalog-view/catalog-turn-back-page-item.jsx +80 -0
  17. package/src/components/configurator/custom-configurator.jsx +77 -0
  18. package/src/components/configurator/project-configurator.jsx +120 -0
  19. package/src/components/content.jsx +136 -0
  20. package/src/components/export.js +36 -0
  21. package/src/components/firstsetting/button/styles.js +223 -0
  22. package/src/components/firstsetting/export.js +9 -0
  23. package/src/components/firstsetting/firstsetting-content-button.jsx +198 -0
  24. package/src/components/firstsetting/firstsetting-toggle-button.jsx +101 -0
  25. package/src/components/firstsetting/firstsetting.jsx +814 -0
  26. package/src/components/footerbar/button/ControlButton.jsx +43 -0
  27. package/src/components/footerbar/button/DirectionButton.jsx +54 -0
  28. package/src/components/footerbar/button/DirectionPanSpinButton.jsx +36 -0
  29. package/src/components/footerbar/button/ToggleButton.jsx +58 -0
  30. package/src/components/footerbar/button/ToggleConvertButton.jsx +48 -0
  31. package/src/components/footerbar/button/ToggleMeasureButton.jsx +33 -0
  32. package/src/components/footerbar/button/styles.js +217 -0
  33. package/src/components/footerbar/export.js +9 -0
  34. package/src/components/footerbar/footer-content-button.jsx +198 -0
  35. package/src/components/footerbar/footer-toggle-button.jsx +101 -0
  36. package/src/components/footerbar/footerbar.jsx +1103 -0
  37. package/src/components/footerbar/styles.js +263 -0
  38. package/src/components/header/button/MenuButton.jsx +46 -0
  39. package/src/components/header/button/SaveButton.jsx +54 -0
  40. package/src/components/header/button/styles.js +181 -0
  41. package/src/components/header/export.js +5 -0
  42. package/src/components/header/header.jsx +631 -0
  43. package/src/components/header/header.style.css +47 -0
  44. package/src/components/header/styles.js +320 -0
  45. package/src/components/login/Login.js +77 -0
  46. package/src/components/login/LoginForm/index.js +108 -0
  47. package/src/components/login/Register.js +82 -0
  48. package/src/components/login/RegisterForm/index.js +171 -0
  49. package/src/components/login/jwtService.js +201 -0
  50. package/src/components/login/style.css +158 -0
  51. package/src/components/login/style.scss +260 -0
  52. package/src/components/molecules/slider/index.jsx +15 -0
  53. package/src/components/molecules/slider/styles.js +0 -0
  54. package/src/components/molecules/slider/styles.scss +3 -0
  55. package/src/components/myprojects/export.js +5 -0
  56. package/src/components/myprojects/index.jsx +445 -0
  57. package/src/components/myprojects/styles.js +241 -0
  58. package/src/components/sidebar/custom-accordion.jsx +48 -0
  59. package/src/components/sidebar/export.js +15 -0
  60. package/src/components/sidebar/panel-element-editor/attributes-editor/attributes-editor.jsx +73 -0
  61. package/src/components/sidebar/panel-element-editor/attributes-editor/confirm-popup.jsx +101 -0
  62. package/src/components/sidebar/panel-element-editor/attributes-editor/hole-attributes-editor.jsx +149 -0
  63. package/src/components/sidebar/panel-element-editor/attributes-editor/item-attributes-editor.jsx +316 -0
  64. package/src/components/sidebar/panel-element-editor/attributes-editor/line-attributes-editor.jsx +108 -0
  65. package/src/components/sidebar/panel-element-editor/element-editor.jsx +1070 -0
  66. package/src/components/sidebar/panel-element-editor/multi-elements-editor.jsx +0 -0
  67. package/src/components/sidebar/panel-element-editor/panel-element-editor.jsx +104 -0
  68. package/src/components/sidebar/panel-element-editor/panel-multi-elements-editor.jsx +155 -0
  69. package/src/components/sidebar/panel-group-editor.jsx +272 -0
  70. package/src/components/sidebar/panel-groups.jsx +310 -0
  71. package/src/components/sidebar/panel-guides.jsx +192 -0
  72. package/src/components/sidebar/panel-layer-elements.jsx +298 -0
  73. package/src/components/sidebar/panel-layers.jsx +381 -0
  74. package/src/components/sidebar/panel.jsx +71 -0
  75. package/src/components/sidebar/sidebar.jsx +106 -0
  76. package/src/components/sidebar/toolbar-panel.jsx +139 -0
  77. package/src/components/sign/export.js +7 -0
  78. package/src/components/sign/main/index.jsx +523 -0
  79. package/src/components/sign/main/styles.js +163 -0
  80. package/src/components/style/button.jsx +95 -0
  81. package/src/components/style/cancel-button.jsx +20 -0
  82. package/src/components/style/content-container.jsx +29 -0
  83. package/src/components/style/content-title.jsx +20 -0
  84. package/src/components/style/delete-button.jsx +23 -0
  85. package/src/components/style/export.jsx +48 -0
  86. package/src/components/style/form-block.jsx +13 -0
  87. package/src/components/style/form-color-input.jsx +27 -0
  88. package/src/components/style/form-label.jsx +15 -0
  89. package/src/components/style/form-number-input.jsx +196 -0
  90. package/src/components/style/form-number-input_2.jsx +191 -0
  91. package/src/components/style/form-select.jsx +38 -0
  92. package/src/components/style/form-slider.jsx +36 -0
  93. package/src/components/style/form-submit-button.jsx +23 -0
  94. package/src/components/style/form-text-input.jsx +65 -0
  95. package/src/components/toolbar/button/ControlButton.jsx +41 -0
  96. package/src/components/toolbar/button/DirectionButton.jsx +34 -0
  97. package/src/components/toolbar/button/RightButton.jsx +103 -0
  98. package/src/components/toolbar/button/ToggleButton.jsx +41 -0
  99. package/src/components/toolbar/button/index.jsx +55 -0
  100. package/src/components/toolbar/button/styles.js +127 -0
  101. package/src/components/toolbar/components/DoorStyleMenu.jsx +103 -0
  102. package/src/components/toolbar/components/Pricing.jsx +126 -0
  103. package/src/components/toolbar/components/ReviewForQuote.jsx +635 -0
  104. package/src/components/toolbar/export.js +21 -0
  105. package/src/components/toolbar/main/Alert.js +122 -0
  106. package/src/components/toolbar/main/TakePictureModal.jsx +104 -0
  107. package/src/components/toolbar/main/confirm-popup.jsx +99 -0
  108. package/src/components/toolbar/main/index.jsx +5627 -0
  109. package/src/components/toolbar/main/lShaped.json +311 -0
  110. package/src/components/toolbar/main/longNarrow.json +238 -0
  111. package/src/components/toolbar/main/myComponents.js +123 -0
  112. package/src/components/toolbar/main/oRectangle.json +220 -0
  113. package/src/components/toolbar/main/rectangle.json +238 -0
  114. package/src/components/toolbar/main/style.css +107 -0
  115. package/src/components/toolbar/main/styles.js +696 -0
  116. package/src/components/toolbar/plugin-item.jsx +123 -0
  117. package/src/components/toolbar/popup/appliance/appliance-category/index.jsx +73 -0
  118. package/src/components/toolbar/popup/appliance/choose-appliance/index.jsx +102 -0
  119. package/src/components/toolbar/popup/appliance/index.jsx +83 -0
  120. package/src/components/toolbar/popup/autosaveprompt/index.jsx +150 -0
  121. package/src/components/toolbar/popup/autosaveprompt/styles.css +64 -0
  122. package/src/components/toolbar/popup/autosaveprompt/styles.js +40 -0
  123. package/src/components/toolbar/popup/cabinet/cabinet-category/index.jsx +73 -0
  124. package/src/components/toolbar/popup/cabinet/choose-product/index.jsx +119 -0
  125. package/src/components/toolbar/popup/cabinet/index.jsx +85 -0
  126. package/src/components/toolbar/popup/doorStyle/choose-style/index.jsx +63 -0
  127. package/src/components/toolbar/popup/doorStyle/index.jsx +71 -0
  128. package/src/components/toolbar/popup/doorStyle/style-category/index.jsx +139 -0
  129. package/src/components/toolbar/popup/downloadsummary/downloadSummaryContext.js +2 -0
  130. package/src/components/toolbar/popup/downloadsummary/downloadSummaryTemp.jsx +157 -0
  131. package/src/components/toolbar/popup/downloadsummary/index.jsx +643 -0
  132. package/src/components/toolbar/popup/downloadsummary/show2D/show2DView.jsx +51 -0
  133. package/src/components/toolbar/popup/downloadsummary/show2D/viewer2DDownLoad.jsx +175 -0
  134. package/src/components/toolbar/popup/downloadsummary/show3D/show3DView.jsx +283 -0
  135. package/src/components/toolbar/popup/downloadsummary/show3D/viewer3DDownLoad.jsx +2257 -0
  136. package/src/components/toolbar/popup/downloadsummary/showCabinetInfo.js +93 -0
  137. package/src/components/toolbar/popup/downloadsummary/showElevation/showElevationView.jsx +132 -0
  138. package/src/components/toolbar/popup/downloadsummary/showElevation/viewer3DElevationDownload.jsx +2198 -0
  139. package/src/components/toolbar/popup/downloadsummary/showElevation/viewerElevationDownload.jsx +152 -0
  140. package/src/components/toolbar/popup/downloadsummary/showWarranty.jsx +149 -0
  141. package/src/components/toolbar/popup/downloadsummary/styles.css +177 -0
  142. package/src/components/toolbar/popup/downloadsummary/styles.js +453 -0
  143. package/src/components/toolbar/popup/finishingtouch/category/index.jsx +34 -0
  144. package/src/components/toolbar/popup/finishingtouch/index.jsx +58 -0
  145. package/src/components/toolbar/popup/finishingtouch/material-edit.jsx +112 -0
  146. package/src/components/toolbar/popup/finishingtouch/product/index.jsx +116 -0
  147. package/src/components/toolbar/popup/floorplan/choose-floor/confirm-popup.jsx +101 -0
  148. package/src/components/toolbar/popup/floorplan/choose-floor/index.jsx +254 -0
  149. package/src/components/toolbar/popup/floorplan/choose-floor/lShaped.json +311 -0
  150. package/src/components/toolbar/popup/floorplan/choose-floor/longNarrow.json +238 -0
  151. package/src/components/toolbar/popup/floorplan/choose-floor/oRectangle.json +220 -0
  152. package/src/components/toolbar/popup/floorplan/choose-floor/rectangle.json +238 -0
  153. package/src/components/toolbar/popup/floorplan/choose-floor/styles.js +86 -0
  154. package/src/components/toolbar/popup/floorplan/floor-category/index.jsx +109 -0
  155. package/src/components/toolbar/popup/floorplan/index.jsx +60 -0
  156. package/src/components/toolbar/popup/index.jsx +241 -0
  157. package/src/components/toolbar/popup/newproject/index.jsx +59 -0
  158. package/src/components/toolbar/popup/newproject/styles.css +64 -0
  159. package/src/components/toolbar/popup/newproject/styles.js +41 -0
  160. package/src/components/toolbar/popup/product/appliance.jsx +54 -0
  161. package/src/components/toolbar/popup/product/cabinetproduct.jsx +15 -0
  162. package/src/components/toolbar/popup/product/doorstyle.jsx +58 -0
  163. package/src/components/toolbar/popup/product/doorstyleproduct.jsx +47 -0
  164. package/src/components/toolbar/popup/product/floor.jsx +36 -0
  165. package/src/components/toolbar/popup/product/floorproduct.jsx +42 -0
  166. package/src/components/toolbar/popup/product/index.jsx +36 -0
  167. package/src/components/toolbar/popup/product/primary.jsx +77 -0
  168. package/src/components/toolbar/popup/product/productline.jsx +93 -0
  169. package/src/components/toolbar/popup/product/reviewItem.jsx +427 -0
  170. package/src/components/toolbar/popup/product/reviewMolding.jsx +310 -0
  171. package/src/components/toolbar/popup/product/style.css +54 -0
  172. package/src/components/toolbar/popup/product/styles.js +260 -0
  173. package/src/components/toolbar/popup/savedesign/FullPictureForm.jsx +146 -0
  174. package/src/components/toolbar/popup/savedesign/index.jsx +495 -0
  175. package/src/components/toolbar/popup/savedesign/savedesign.style.css +16 -0
  176. package/src/components/toolbar/popup/savedesign/styles.js +151 -0
  177. package/src/components/toolbar/popup/setDoorStyleOption/index.jsx +87 -0
  178. package/src/components/toolbar/popup/styles.js +909 -0
  179. package/src/components/toolbar/popup/submitforquote/AddToCartOptions.jsx +192 -0
  180. package/src/components/toolbar/popup/submitforquote/CustomerRequestsForm.jsx +96 -0
  181. package/src/components/toolbar/popup/submitforquote/SkipDesignerReview.jsx +54 -0
  182. package/src/components/toolbar/popup/submitforquote/StepDots.jsx +25 -0
  183. package/src/components/toolbar/popup/submitforquote/cart-choice.jsx +116 -0
  184. package/src/components/toolbar/popup/submitforquote/doorstyle-menus.js +38 -0
  185. package/src/components/toolbar/popup/submitforquote/index.jsx +698 -0
  186. package/src/components/toolbar/popup/submitforquote/styles.css +105 -0
  187. package/src/components/toolbar/popup/submitforquote/styles.js +294 -0
  188. package/src/components/toolbar/popup/submitprompt/index.jsx +89 -0
  189. package/src/components/toolbar/popup/submitprompt/styles.css +64 -0
  190. package/src/components/toolbar/popup/submitprompt/styles.js +42 -0
  191. package/src/components/toolbar/toolbar-button.jsx +90 -0
  192. package/src/components/toolbar/toolbar-load-button.jsx +36 -0
  193. package/src/components/toolbar/toolbar-save-button.jsx +32 -0
  194. package/src/components/tutorial-view/Modal.jsx +584 -0
  195. package/src/components/tutorial-view/style.css +111 -0
  196. package/src/components/tutorial-view/styles.js +65 -0
  197. package/src/components/wizardstep/button/styles.js +677 -0
  198. package/src/components/wizardstep/export.js +5 -0
  199. package/src/components/wizardstep/index.jsx +1372 -0
  200. package/src/components/wizardstep/styles.js +688 -0
  201. package/src/components/wizardstep/wizardstep-content-button.jsx +198 -0
  202. package/src/components/wizardstep/wizardstep-toggle-button.jsx +101 -0
  203. package/src/{_index.js → index.js} +4 -4
  204. package/src/renderer.jsx +466 -0
  205. package/src/actions/_export.js +0 -35
  206. package/src/components/_export.js +0 -11
@@ -0,0 +1,95 @@
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import * as SharedStyle from '../../shared-style';
4
+
5
+ const BASE_STYLE = {
6
+ display: 'inline-block',
7
+ fontWeight: '400',
8
+ lineHeight: '1.25',
9
+ textAlign: 'center',
10
+ whiteSpace: 'nowrap',
11
+ verticalAlign: 'middle',
12
+ cursor: 'pointer',
13
+ WebkitUserSelect: 'none',
14
+ MozUserSelect: 'none',
15
+ MsUserSelect: 'none',
16
+ userSelect: 'none',
17
+ padding: '5px 14px',
18
+ fontSize: '14px',
19
+ color: SharedStyle.COLORS.black,
20
+ fonWeight: '400px',
21
+ transition: 'background-color 175ms ease, border 175ms ease',
22
+ outline: 'none',
23
+ borderRadius: '2px',
24
+ borderWidth: '1px',
25
+ borderType: 'solid',
26
+ width: '100%'
27
+ };
28
+
29
+ const BASE_STYLE_SIZE = {
30
+ small: {
31
+ fontSize: '12px',
32
+ padding: '3px 8px'
33
+ },
34
+ normal: {},
35
+ large: {
36
+ padding: '8px 20px'
37
+ }
38
+ };
39
+
40
+ export default class Button extends Component {
41
+ constructor(props) {
42
+ super(props);
43
+ this.state = { hover: false };
44
+ }
45
+
46
+ render() {
47
+ let { hover } = this.state;
48
+ let {
49
+ type,
50
+ style: customStyle,
51
+ styleHover: customStyleHover,
52
+ children,
53
+ size,
54
+ ...rest
55
+ } = this.props;
56
+ let styleMerged = Object.assign(
57
+ {},
58
+ BASE_STYLE,
59
+ BASE_STYLE_SIZE[size],
60
+ hover ? customStyleHover : customStyle
61
+ );
62
+
63
+ return (
64
+ <button
65
+ type={type}
66
+ onMouseEnter={e => this.setState({ hover: true })}
67
+ onMouseLeave={e => this.setState({ hover: false })}
68
+ style={styleMerged}
69
+ {...rest}
70
+ >
71
+ {children}
72
+ </button>
73
+ );
74
+ }
75
+ }
76
+
77
+ Button.defaultProps = {
78
+ type: 'button',
79
+ size: 'normal',
80
+ style: {
81
+ backgroundColor: '#e6e6e6',
82
+ borderColor: '#adadad'
83
+ },
84
+ styleHover: {
85
+ backgroundColor: '#d4d4d4',
86
+ borderColor: '#8c8c8c'
87
+ }
88
+ };
89
+
90
+ Button.propTypes = {
91
+ type: PropTypes.string,
92
+ style: PropTypes.object,
93
+ styleHover: PropTypes.object,
94
+ size: PropTypes.oneOf(['large', 'normal', 'small'])
95
+ };
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import Button from './button';
3
+
4
+ const STYLE = {
5
+ borderColor: '#adadad',
6
+ backgroundColor: '#e6e6e6'
7
+ };
8
+
9
+ const STYLE_HOVER = {
10
+ backgroundColor: '#d4d4d4',
11
+ borderColor: '#8c8c8c'
12
+ };
13
+
14
+ export default function CancelButton({ children, ...rest }) {
15
+ return (
16
+ <Button style={STYLE} styleHover={STYLE_HOVER} {...rest}>
17
+ {children}
18
+ </Button>
19
+ );
20
+ }
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ const STYLE = {
5
+ padding: '0 20px',
6
+ overflowY: 'auto'
7
+ };
8
+
9
+ export default function ContentContainer({
10
+ children,
11
+ width,
12
+ height,
13
+ style = {}
14
+ }) {
15
+ return (
16
+ <div
17
+ style={{ width, height, ...STYLE, ...style }}
18
+ onWheel={event => event.stopPropagation()}
19
+ >
20
+ {children}
21
+ </div>
22
+ );
23
+ }
24
+
25
+ ContentContainer.propsType = {
26
+ width: PropTypes.number.isRequired,
27
+ height: PropTypes.number.isRequired,
28
+ style: PropTypes.object
29
+ };
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import * as SharedStyle from '../../shared-style';
4
+
5
+ const STYLE = {
6
+ color: SharedStyle.PRIMARY_COLOR.alt,
7
+ fontWeight: 300
8
+ };
9
+
10
+ export default function ContentTitle({ children, style = {}, ...rest }) {
11
+ return (
12
+ <h1 style={{ ...STYLE, ...style }} {...rest}>
13
+ {children}
14
+ </h1>
15
+ );
16
+ }
17
+
18
+ ContentTitle.propsType = {
19
+ style: PropTypes.object
20
+ };
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import Button from './button';
3
+ import * as SharedStyle from '../../shared-style';
4
+
5
+ const STYLE = {
6
+ borderColor: '#c12e2a',
7
+ backgroundColor: '#c9302c',
8
+ color: SharedStyle.COLORS.white
9
+ };
10
+
11
+ const STYLE_HOVER = {
12
+ backgroundColor: '#972726',
13
+ borderColor: '#c12e2a',
14
+ color: SharedStyle.COLORS.white
15
+ };
16
+
17
+ export default function FormDeleteButton({ children, ...rest }) {
18
+ return (
19
+ <Button style={STYLE} styleHover={STYLE_HOVER} {...rest}>
20
+ {children}
21
+ </Button>
22
+ );
23
+ }
@@ -0,0 +1,48 @@
1
+ import Button from './button';
2
+ import CancelButton from './cancel-button';
3
+ import ContentContainer from './content-container';
4
+ import ContentTitle from './content-title';
5
+ import DeleteButton from './delete-button';
6
+ import FormBlock from './form-block';
7
+ import FormColorInput from './form-color-input';
8
+ import FormLabel from './form-label';
9
+ import FormNumberInput from './form-number-input';
10
+ import FormSelect from './form-select';
11
+ import FormSlider from './form-slider';
12
+ import FormSubmitButton from './form-submit-button';
13
+ import FormTextInput from './form-text-input';
14
+ import FormNumberInput2 from './form-number-input_2';
15
+
16
+ export {
17
+ Button,
18
+ CancelButton,
19
+ ContentContainer,
20
+ ContentTitle,
21
+ DeleteButton,
22
+ FormBlock,
23
+ FormColorInput,
24
+ FormLabel,
25
+ FormNumberInput,
26
+ FormSelect,
27
+ FormSlider,
28
+ FormSubmitButton,
29
+ FormTextInput,
30
+ FormNumberInput2
31
+ };
32
+
33
+ export default {
34
+ Button,
35
+ CancelButton,
36
+ ContentContainer,
37
+ ContentTitle,
38
+ DeleteButton,
39
+ FormBlock,
40
+ FormColorInput,
41
+ FormLabel,
42
+ FormNumberInput,
43
+ FormSelect,
44
+ FormSlider,
45
+ FormSubmitButton,
46
+ FormTextInput,
47
+ FormNumberInput2
48
+ };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ const BASE_STYLE = {
4
+ marginBottom: '16px'
5
+ };
6
+
7
+ export default function FormBlock({ children, style, ...rest }) {
8
+ return (
9
+ <div style={{ ...BASE_STYLE, style }} {...rest}>
10
+ {children}
11
+ </div>
12
+ );
13
+ }
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import FormTextInput from './form-text-input';
3
+
4
+ const STYLE = {
5
+ padding: 0,
6
+ border: 0
7
+ };
8
+ const EREG_NUMBER = /^.*$/;
9
+
10
+ export default function FormColorInput({ onChange, ...rest }) {
11
+ let onChangeCustom = event => {
12
+ let value = event.target.value;
13
+ if (EREG_NUMBER.test(value)) {
14
+ onChange(event);
15
+ }
16
+ };
17
+
18
+ return (
19
+ <FormTextInput
20
+ type="color"
21
+ style={STYLE}
22
+ onChange={onChangeCustom}
23
+ autoComplete="off"
24
+ {...rest}
25
+ />
26
+ );
27
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ const BASE_STYLE = {
4
+ display: 'block',
5
+ marginBottom: '2px',
6
+ fontSize: '12px'
7
+ };
8
+
9
+ export default function FormLabel({ children, style, ...rest }) {
10
+ return (
11
+ <label style={{ ...BASE_STYLE, style }} {...rest}>
12
+ {children}
13
+ </label>
14
+ );
15
+ }
@@ -0,0 +1,196 @@
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ KEYBOARD_BUTTON_CODE,
5
+ TEXT_COLOR_NEUTRAL_0,
6
+ SECONDARY_PURPLE_COLOR,
7
+ DEFAULT_FONT_FAMILY
8
+ } from '../../constants';
9
+ import styled from 'styled-components';
10
+ import { isValidNumber } from '../../utils/helper';
11
+
12
+ const StyledInput = styled.input`
13
+ display: block;
14
+ padding: 15px 25px 12px 0px;
15
+ width: 120px;
16
+ color: ${TEXT_COLOR_NEUTRAL_0};
17
+ background-color: rgb(255, 255, 255);
18
+ border: 2px solid;
19
+ text-align: right;
20
+ float: right;
21
+ font-family: ${DEFAULT_FONT_FAMILY};
22
+ font-size: 16px;
23
+ font-weight: 600;
24
+ line-height: 17px;
25
+ border-radius: 5px;
26
+ outline: 0;
27
+ :focus {
28
+ border-color: ${SECONDARY_PURPLE_COLOR};
29
+ }
30
+ `;
31
+
32
+ export default class FormNumberInput extends Component {
33
+ constructor(props, context) {
34
+ super(props, context);
35
+ this.state = {
36
+ focus: false,
37
+ valid: true,
38
+ showedValue: props.value,
39
+ focusOn: false,
40
+ flag: true
41
+ };
42
+ this.input = React.createRef(null);
43
+ }
44
+
45
+ componentDidMount() {
46
+ if (
47
+ this.input.current &&
48
+ ['width', 'length'].includes(this.props.labelName.toLowerCase())
49
+ ) {
50
+ this.input.current.focus();
51
+ this.input.current.select();
52
+ }
53
+ }
54
+
55
+ componentWillReceiveProps(nextProps) {
56
+ if (
57
+ this.props.value !== nextProps.value ||
58
+ this.props.focus !== nextProps.focus
59
+ ) {
60
+ this.setState({ showedValue: nextProps.value, focusOn: nextProps.focus });
61
+ }
62
+ }
63
+
64
+ componentDidUpdate(prevProps, preprevState) {
65
+ if (
66
+ this.props.value !== prevProps.value &&
67
+ prevProps.labelName !== 'Ceiling Height'
68
+ ) {
69
+ this.input.current.focus();
70
+ this.input.current.select();
71
+ }
72
+
73
+ const { showedValue } = this.state;
74
+ const { min, max, isCeiling } = this.props;
75
+
76
+ if (!isCeiling) {
77
+ if (isValidNumber(min) && showedValue < min) {
78
+ this.setState({ showedValue: min });
79
+ } else if (isValidNumber(max) && showedValue > max) {
80
+ this.setState({ showedValue: max });
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+
86
+ render() {
87
+ let {
88
+ value,
89
+ min,
90
+ max,
91
+ precision,
92
+ onChange,
93
+ onValid,
94
+ onInvalid,
95
+ style,
96
+ placeholder,
97
+ isCeiling
98
+ } = this.props;
99
+ let regexp = new RegExp(`^-?([0-9]+)?\\.?([0-9]{0,${precision}})?$`);
100
+
101
+ let currValue = regexp.test(this.state.showedValue)
102
+ ? this.state.showedValue
103
+ : parseFloat(this.state.showedValue).toFixed(precision);
104
+
105
+ let different =
106
+ parseFloat(this.props.value).toFixed(precision) !==
107
+ parseFloat(this.state.showedValue).toFixed(precision);
108
+
109
+ let saveFn = e => {
110
+ e.stopPropagation();
111
+
112
+ if (this.state.valid) {
113
+ let savedValue =
114
+ this.state.showedValue !== '' && this.state.showedValue !== '-'
115
+ ? parseFloat(this.state.showedValue)
116
+ : 0;
117
+
118
+ this.setState({ showedValue: savedValue });
119
+ onChange({ target: { value: savedValue } });
120
+ }
121
+ };
122
+
123
+ return (
124
+ <StyledInput
125
+ id="form_number_input"
126
+ autoFocus={this.state.focusOn}
127
+ readOnly={!!this.props.disabled}
128
+ type="text"
129
+ value={currValue}
130
+ style={style}
131
+ onChange={evt => {
132
+ this.context.projectActions.copyProperties('ddddd');
133
+ let valid = regexp.test(evt.nativeEvent.target.value);
134
+
135
+ if (valid) {
136
+ this.setState({
137
+ showedValue: evt.nativeEvent.target.value,
138
+ flag: false
139
+ });
140
+ if (onValid) onValid(evt.nativeEvent);
141
+ } else {
142
+ if (onInvalid) onInvalid(evt.nativeEvent);
143
+ }
144
+ this.setState({ valid });
145
+ }}
146
+ onFocus={e => this.setState({ focusOn: true })}
147
+ onBlur={e => this.setState({ focusOn: false })}
148
+ ref={this.input}
149
+ onKeyDown={e => {
150
+ var keyCode = e.keyCode || e.which;
151
+ if (
152
+ keyCode == KEYBOARD_BUTTON_CODE.ENTER ||
153
+ keyCode == KEYBOARD_BUTTON_CODE.TAB
154
+ ) {
155
+ saveFn(e);
156
+ this.input.current.blur();
157
+ }
158
+ if (keyCode == KEYBOARD_BUTTON_CODE.ESC) {
159
+ this.context.projectActions.rollback();
160
+ }
161
+ }}
162
+ placeholder={placeholder}
163
+ />
164
+ );
165
+ }
166
+ }
167
+
168
+ FormNumberInput.propTypes = {
169
+ value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
170
+ style: PropTypes.object,
171
+ onChange: PropTypes.func.isRequired,
172
+ onValid: PropTypes.func,
173
+ onInvalid: PropTypes.func,
174
+ min: PropTypes.number,
175
+ max: PropTypes.number,
176
+ precision: PropTypes.number,
177
+ placeholder: PropTypes.string,
178
+ labelName: PropTypes.string,
179
+ isCeiling: PropTypes.string
180
+ };
181
+
182
+ FormNumberInput.contextTypes = {
183
+ translator: PropTypes.object.isRequired,
184
+ projectActions: PropTypes.object.isRequired,
185
+ linesActions: PropTypes.object.isRequired
186
+ };
187
+
188
+ FormNumberInput.defaultProps = {
189
+ value: 0,
190
+ style: {},
191
+ min: Number.MIN_SAFE_INTEGER,
192
+ max: Number.MAX_SAFE_INTEGER,
193
+ precision: 2,
194
+ disabled: false,
195
+ labelName: 'default'
196
+ };
@@ -0,0 +1,191 @@
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import * as SharedStyle from '../../shared-style';
4
+ import { MdUpdate } from 'react-icons/md';
5
+ import { KEYBOARD_BUTTON_CODE } from '../../constants';
6
+
7
+ const STYLE_INPUT = {
8
+ display: 'block',
9
+ width: '100%',
10
+ padding: '0 2px',
11
+ fontSize: '13px',
12
+ lineHeight: '1.25',
13
+ color: SharedStyle.PRIMARY_COLOR.input,
14
+ backgroundColor: SharedStyle.COLORS.white,
15
+ backgroundImage: 'none',
16
+ border: '1px solid rgba(0,0,0,.15)',
17
+ outline: 'none',
18
+ height: '30px'
19
+ };
20
+
21
+ const confirmStyle = {
22
+ position: 'absolute',
23
+ cursor: 'pointer',
24
+ width: '20px',
25
+ height: '20px',
26
+ right: '5px',
27
+ top: '5px',
28
+ backgroundColor: SharedStyle.SECONDARY_COLOR.main,
29
+ color: '#FFF',
30
+ transition: 'all 0.1s linear'
31
+ };
32
+
33
+ export default class FormNumberInput extends Component {
34
+ constructor(props, context) {
35
+ super(props, context);
36
+ this.state = {
37
+ focus: false,
38
+ valid: true,
39
+ showedValue: props.value,
40
+ disabled: props.disabled === true ? true : false,
41
+ focusOn: false
42
+ };
43
+ }
44
+
45
+ componentWillReceiveProps(nextProps) {
46
+ if (
47
+ this.props.value !== nextProps.value ||
48
+ this.props.focus !== nextProps.focus
49
+ ) {
50
+ this.setState({ showedValue: nextProps.value, focusOn: nextProps.focus });
51
+ }
52
+ if (this.props.focus !== nextProps.focus) {
53
+ this.Input.focus();
54
+ this.Input.select();
55
+ }
56
+ }
57
+
58
+ render() {
59
+ let {
60
+ value,
61
+ min,
62
+ max,
63
+ precision,
64
+ onChange,
65
+ onValid,
66
+ onInvalid,
67
+ style,
68
+ placeholder
69
+ } = this.props;
70
+ let numericInputStyle = { ...STYLE_INPUT, ...style };
71
+ if (this.state.focusOn)
72
+ numericInputStyle.border = `1px solid ${SharedStyle.SECONDARY_COLOR.main}`;
73
+ let regexp = new RegExp(`^-?([0-9]+)?\\.?([0-9]{0,${precision}})?$`);
74
+
75
+ if (!isNaN(min) && isFinite(min) && this.state.showedValue < min)
76
+ this.setState({ showedValue: min }); // value = min;
77
+ if (!isNaN(max) && isFinite(max) && this.state.showedValue > max)
78
+ this.setState({ showedValue: max }); // value = max;
79
+
80
+ let currValue = regexp.test(this.state.showedValue)
81
+ ? this.state.showedValue
82
+ : parseFloat(this.state.showedValue).toFixed(precision);
83
+
84
+ let different =
85
+ parseFloat(this.props.value).toFixed(precision) !==
86
+ parseFloat(this.state.showedValue).toFixed(precision);
87
+
88
+ let saveFn = e => {
89
+ e.stopPropagation();
90
+
91
+ if (this.state.valid) {
92
+ let savedValue =
93
+ this.state.showedValue !== '' && this.state.showedValue !== '-'
94
+ ? parseFloat(this.state.showedValue)
95
+ : 0;
96
+
97
+ this.setState({ showedValue: savedValue });
98
+ onChange({ target: { value: savedValue } });
99
+ }
100
+ };
101
+
102
+ return (
103
+ <div style={{ position: 'relative' }}>
104
+ <input
105
+ autoFocus={this.state.focusOn}
106
+ readOnly={this.state.disabled}
107
+ type="text"
108
+ value={currValue}
109
+ style={numericInputStyle}
110
+ onChange={evt => {
111
+ let valid = regexp.test(evt.nativeEvent.target.value);
112
+
113
+ if (valid) {
114
+ this.setState({ showedValue: evt.nativeEvent.target.value });
115
+ if (onValid) onValid(evt.nativeEvent);
116
+ } else {
117
+ if (onInvalid) onInvalid(evt.nativeEvent);
118
+ }
119
+
120
+ this.setState({ valid });
121
+ }}
122
+ onFocus={e => this.setState({ focusOn: true })}
123
+ onBlur={e => this.setState({ focusOn: false })}
124
+ ref={ele => {
125
+ this.Input = ele;
126
+ }}
127
+ onKeyDown={e => {
128
+ var keyCode = e.keyCode || e.which;
129
+ if (
130
+ keyCode == KEYBOARD_BUTTON_CODE.ENTER ||
131
+ keyCode == KEYBOARD_BUTTON_CODE.TAB
132
+ ) {
133
+ saveFn(e);
134
+ this.Input.blur();
135
+ }
136
+ if (keyCode == KEYBOARD_BUTTON_CODE.ESC) {
137
+ this.context.projectActions.rollback();
138
+ }
139
+ }}
140
+ placeholder={placeholder}
141
+ />
142
+ <div
143
+ onClick={e => {
144
+ if (different) saveFn(e);
145
+ }}
146
+ title={this.context.translator.t('Confirm')}
147
+ style={{
148
+ ...confirmStyle,
149
+ visibility: different ? 'visible' : 'hidden',
150
+ opacity: different ? '1' : '0'
151
+ }}
152
+ >
153
+ <MdUpdate
154
+ style={{
155
+ width: '100%',
156
+ height: '100%',
157
+ padding: '0.2em',
158
+ color: '#FFF'
159
+ }}
160
+ />
161
+ </div>
162
+ </div>
163
+ );
164
+ }
165
+ }
166
+
167
+ FormNumberInput.propTypes = {
168
+ value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
169
+ style: PropTypes.object,
170
+ onChange: PropTypes.func.isRequired,
171
+ onValid: PropTypes.func,
172
+ onInvalid: PropTypes.func,
173
+ min: PropTypes.number,
174
+ max: PropTypes.number,
175
+ precision: PropTypes.number,
176
+ placeholder: PropTypes.string
177
+ };
178
+
179
+ FormNumberInput.contextTypes = {
180
+ translator: PropTypes.object.isRequired,
181
+ projectActions: PropTypes.object.isRequired
182
+ };
183
+
184
+ FormNumberInput.defaultProps = {
185
+ value: 0,
186
+ style: {},
187
+ min: Number.MIN_SAFE_INTEGER,
188
+ max: Number.MAX_SAFE_INTEGER,
189
+ precision: 2,
190
+ disabled: false
191
+ };