@coorpacademy/components 10.13.2 → 10.13.3-alpha.20

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 (185) hide show
  1. package/es/atom/drag-and-drop/index.js +72 -46
  2. package/es/atom/drag-and-drop/index.js.map +1 -1
  3. package/es/atom/drag-and-drop/style.css +161 -73
  4. package/es/atom/drag-and-drop/test/dragging.js +8 -1
  5. package/es/atom/drag-and-drop/test/dragging.js.map +1 -1
  6. package/es/atom/drag-and-drop/test/fixtures/clean-and-modified.js +12 -0
  7. package/es/atom/drag-and-drop/test/fixtures/clean-and-modified.js.map +1 -0
  8. package/es/atom/drag-and-drop/test/fixtures/default.js +3 -3
  9. package/es/atom/drag-and-drop/test/fixtures/default.js.map +1 -1
  10. package/es/atom/drag-and-drop/test/fixtures/error.js +12 -0
  11. package/es/atom/drag-and-drop/test/fixtures/error.js.map +1 -0
  12. package/es/atom/drag-and-drop/test/fixtures/modified.js +12 -0
  13. package/es/atom/drag-and-drop/test/fixtures/modified.js.map +1 -0
  14. package/es/atom/drag-and-drop/test/fixtures/with-children.js +1 -14
  15. package/es/atom/drag-and-drop/test/fixtures/with-children.js.map +1 -1
  16. package/es/atom/drag-and-drop/test/fixtures/with-image.js +1 -1
  17. package/es/atom/drag-and-drop/test/fixtures/with-image.js.map +1 -1
  18. package/es/atom/drag-and-drop/test/fixtures/with-long-description.js +12 -0
  19. package/es/atom/drag-and-drop/test/fixtures/with-long-description.js.map +1 -0
  20. package/es/atom/drag-and-drop/test/fixtures/with-video.js +2 -1
  21. package/es/atom/drag-and-drop/test/fixtures/with-video.js.map +1 -1
  22. package/es/atom/drag-and-drop/test/fixtures.js +8 -0
  23. package/es/atom/drag-and-drop/test/fixtures.js.map +1 -1
  24. package/es/atom/image-upload/index.js +6 -3
  25. package/es/atom/image-upload/index.js.map +1 -1
  26. package/es/atom/image-upload/test/fixtures/clean-modified.js +13 -0
  27. package/es/atom/image-upload/test/fixtures/clean-modified.js.map +1 -0
  28. package/es/atom/image-upload/test/fixtures/{without-image.js → default.js} +1 -1
  29. package/es/atom/image-upload/test/fixtures/default.js.map +1 -0
  30. package/es/atom/image-upload/test/fixtures.js +4 -2
  31. package/es/atom/image-upload/test/fixtures.js.map +1 -1
  32. package/es/atom/input-text/style.css +1 -1
  33. package/es/atom/input-text-with-title/index.js +4 -2
  34. package/es/atom/input-text-with-title/index.js.map +1 -1
  35. package/es/atom/input-text-with-title/style.css +6 -2
  36. package/es/atom/input-text-with-title/test/fixtures/error.js +3 -1
  37. package/es/atom/input-text-with-title/test/fixtures/error.js.map +1 -1
  38. package/es/atom/loader/style.css +7 -3
  39. package/es/atom/review-header-step-item/test/fixtures.js +19 -0
  40. package/es/atom/review-header-step-item/test/fixtures.js.map +1 -0
  41. package/es/atom/select/index.js +4 -1
  42. package/es/atom/select/index.js.map +1 -1
  43. package/es/molecule/brand-form-group/index.js +3 -1
  44. package/es/molecule/brand-form-group/index.js.map +1 -1
  45. package/es/molecule/brand-form-group/style.css +5 -0
  46. package/es/molecule/brand-form-group/test/fixtures/images.js +6 -2
  47. package/es/molecule/brand-form-group/test/fixtures/images.js.map +1 -1
  48. package/es/molecule/course-sections/index.js +4 -1
  49. package/es/molecule/course-sections/index.js.map +1 -1
  50. package/es/molecule/course-sections/style.css +15 -2
  51. package/es/molecule/drag-and-drop-wrapper/index.js +39 -0
  52. package/es/molecule/drag-and-drop-wrapper/index.js.map +1 -0
  53. package/es/molecule/drag-and-drop-wrapper/style.css +15 -0
  54. package/es/molecule/drag-and-drop-wrapper/test/fixtures/default.js +9 -0
  55. package/es/molecule/drag-and-drop-wrapper/test/fixtures/default.js.map +1 -0
  56. package/es/molecule/drag-and-drop-wrapper/test/fixtures/two-drag-and-drops.js +10 -0
  57. package/es/molecule/drag-and-drop-wrapper/test/fixtures/two-drag-and-drops.js.map +1 -0
  58. package/es/molecule/drag-and-drop-wrapper/test/fixtures.js +15 -0
  59. package/es/molecule/drag-and-drop-wrapper/test/fixtures.js.map +1 -0
  60. package/es/molecule/review-header-steps/test/fixtures.js +23 -0
  61. package/es/molecule/review-header-steps/test/fixtures.js.map +1 -0
  62. package/es/molecule/setup-slide/index.js +3 -1
  63. package/es/molecule/setup-slide/index.js.map +1 -1
  64. package/es/molecule/setup-slide/style.css +5 -0
  65. package/es/molecule/setup-slide/test/fixtures/without-upload-image.js +41 -0
  66. package/es/molecule/setup-slide/test/fixtures/without-upload-image.js.map +1 -0
  67. package/es/molecule/setup-slide/test/fixtures.js +2 -0
  68. package/es/molecule/setup-slide/test/fixtures.js.map +1 -1
  69. package/es/molecule/setup-slider/test/fixtures/default.js +8 -4
  70. package/es/molecule/setup-slider/test/fixtures/default.js.map +1 -1
  71. package/es/organism/brand-form/test/fixtures/lms.js +14 -0
  72. package/es/organism/brand-form/test/fixtures/lms.js.map +1 -1
  73. package/es/organism/course-selection/index.js +2 -1
  74. package/es/organism/course-selection/index.js.map +1 -1
  75. package/es/organism/course-selection/style.css +12 -3
  76. package/es/organism/course-selection/test/fixtures/loading.js +9 -0
  77. package/es/organism/course-selection/test/fixtures/loading.js.map +1 -0
  78. package/es/organism/course-selection/test/fixtures.js +2 -0
  79. package/es/organism/course-selection/test/fixtures.js.map +1 -1
  80. package/es/organism/search-and-chips-results/index.js +2 -1
  81. package/es/organism/search-and-chips-results/index.js.map +1 -1
  82. package/es/organism/search-and-chips-results/style.css +10 -3
  83. package/es/organism/search-and-chips-results/test/fixtures/loading.js +9 -0
  84. package/es/organism/search-and-chips-results/test/fixtures/loading.js.map +1 -0
  85. package/es/organism/search-and-chips-results/test/fixtures.js +2 -0
  86. package/es/organism/search-and-chips-results/test/fixtures.js.map +1 -1
  87. package/es/template/back-office/brand-update/index.js +5 -2
  88. package/es/template/back-office/brand-update/index.js.map +1 -1
  89. package/es/template/back-office/brand-update/style.css +10 -1
  90. package/es/util/button-icons.js +3 -2
  91. package/es/util/button-icons.js.map +1 -1
  92. package/lib/atom/drag-and-drop/index.js +74 -45
  93. package/lib/atom/drag-and-drop/index.js.map +1 -1
  94. package/lib/atom/drag-and-drop/style.css +161 -73
  95. package/lib/atom/drag-and-drop/test/dragging.js +8 -1
  96. package/lib/atom/drag-and-drop/test/dragging.js.map +1 -1
  97. package/lib/atom/drag-and-drop/test/fixtures/clean-and-modified.js +21 -0
  98. package/lib/atom/drag-and-drop/test/fixtures/clean-and-modified.js.map +1 -0
  99. package/lib/atom/drag-and-drop/test/fixtures/default.js +3 -3
  100. package/lib/atom/drag-and-drop/test/fixtures/default.js.map +1 -1
  101. package/lib/atom/drag-and-drop/test/fixtures/error.js +21 -0
  102. package/lib/atom/drag-and-drop/test/fixtures/error.js.map +1 -0
  103. package/lib/atom/drag-and-drop/test/fixtures/modified.js +21 -0
  104. package/lib/atom/drag-and-drop/test/fixtures/modified.js.map +1 -0
  105. package/lib/atom/drag-and-drop/test/fixtures/with-children.js +1 -19
  106. package/lib/atom/drag-and-drop/test/fixtures/with-children.js.map +1 -1
  107. package/lib/atom/drag-and-drop/test/fixtures/with-image.js +1 -1
  108. package/lib/atom/drag-and-drop/test/fixtures/with-image.js.map +1 -1
  109. package/lib/atom/drag-and-drop/test/fixtures/with-long-description.js +21 -0
  110. package/lib/atom/drag-and-drop/test/fixtures/with-long-description.js.map +1 -0
  111. package/lib/atom/drag-and-drop/test/fixtures/with-video.js +2 -1
  112. package/lib/atom/drag-and-drop/test/fixtures/with-video.js.map +1 -1
  113. package/lib/atom/drag-and-drop/test/fixtures.js +12 -0
  114. package/lib/atom/drag-and-drop/test/fixtures.js.map +1 -1
  115. package/lib/atom/image-upload/index.js +6 -3
  116. package/lib/atom/image-upload/index.js.map +1 -1
  117. package/lib/atom/image-upload/test/fixtures/clean-modified.js +22 -0
  118. package/lib/atom/image-upload/test/fixtures/clean-modified.js.map +1 -0
  119. package/lib/atom/image-upload/test/fixtures/{without-image.js → default.js} +1 -1
  120. package/lib/atom/image-upload/test/fixtures/default.js.map +1 -0
  121. package/lib/atom/image-upload/test/fixtures.js +6 -3
  122. package/lib/atom/image-upload/test/fixtures.js.map +1 -1
  123. package/lib/atom/input-text/style.css +1 -1
  124. package/lib/atom/input-text-with-title/index.js +4 -2
  125. package/lib/atom/input-text-with-title/index.js.map +1 -1
  126. package/lib/atom/input-text-with-title/style.css +6 -2
  127. package/lib/atom/input-text-with-title/test/fixtures/error.js +3 -1
  128. package/lib/atom/input-text-with-title/test/fixtures/error.js.map +1 -1
  129. package/lib/atom/loader/style.css +7 -3
  130. package/lib/atom/review-header-step-item/test/fixtures.js +31 -0
  131. package/lib/atom/review-header-step-item/test/fixtures.js.map +1 -0
  132. package/lib/atom/select/index.js +4 -1
  133. package/lib/atom/select/index.js.map +1 -1
  134. package/lib/molecule/brand-form-group/index.js +3 -1
  135. package/lib/molecule/brand-form-group/index.js.map +1 -1
  136. package/lib/molecule/brand-form-group/style.css +5 -0
  137. package/lib/molecule/brand-form-group/test/fixtures/images.js +6 -2
  138. package/lib/molecule/brand-form-group/test/fixtures/images.js.map +1 -1
  139. package/lib/molecule/course-sections/index.js +4 -1
  140. package/lib/molecule/course-sections/index.js.map +1 -1
  141. package/lib/molecule/course-sections/style.css +15 -2
  142. package/lib/molecule/drag-and-drop-wrapper/index.js +49 -0
  143. package/lib/molecule/drag-and-drop-wrapper/index.js.map +1 -0
  144. package/lib/molecule/drag-and-drop-wrapper/style.css +15 -0
  145. package/lib/molecule/drag-and-drop-wrapper/test/fixtures/default.js +19 -0
  146. package/lib/molecule/drag-and-drop-wrapper/test/fixtures/default.js.map +1 -0
  147. package/lib/molecule/drag-and-drop-wrapper/test/fixtures/two-drag-and-drops.js +21 -0
  148. package/lib/molecule/drag-and-drop-wrapper/test/fixtures/two-drag-and-drops.js.map +1 -0
  149. package/lib/molecule/drag-and-drop-wrapper/test/fixtures.js +25 -0
  150. package/lib/molecule/drag-and-drop-wrapper/test/fixtures.js.map +1 -0
  151. package/lib/molecule/review-header-steps/test/fixtures.js +37 -0
  152. package/lib/molecule/review-header-steps/test/fixtures.js.map +1 -0
  153. package/lib/molecule/setup-slide/index.js +3 -1
  154. package/lib/molecule/setup-slide/index.js.map +1 -1
  155. package/lib/molecule/setup-slide/style.css +5 -0
  156. package/lib/molecule/setup-slide/test/fixtures/without-upload-image.js +46 -0
  157. package/lib/molecule/setup-slide/test/fixtures/without-upload-image.js.map +1 -0
  158. package/lib/molecule/setup-slide/test/fixtures.js +3 -0
  159. package/lib/molecule/setup-slide/test/fixtures.js.map +1 -1
  160. package/lib/molecule/setup-slider/test/fixtures/default.js +7 -2
  161. package/lib/molecule/setup-slider/test/fixtures/default.js.map +1 -1
  162. package/lib/organism/brand-form/test/fixtures/lms.js +14 -0
  163. package/lib/organism/brand-form/test/fixtures/lms.js.map +1 -1
  164. package/lib/organism/course-selection/index.js +2 -1
  165. package/lib/organism/course-selection/index.js.map +1 -1
  166. package/lib/organism/course-selection/style.css +12 -3
  167. package/lib/organism/course-selection/test/fixtures/loading.js +19 -0
  168. package/lib/organism/course-selection/test/fixtures/loading.js.map +1 -0
  169. package/lib/organism/course-selection/test/fixtures.js +3 -0
  170. package/lib/organism/course-selection/test/fixtures.js.map +1 -1
  171. package/lib/organism/search-and-chips-results/index.js +2 -1
  172. package/lib/organism/search-and-chips-results/index.js.map +1 -1
  173. package/lib/organism/search-and-chips-results/style.css +10 -3
  174. package/lib/organism/search-and-chips-results/test/fixtures/loading.js +19 -0
  175. package/lib/organism/search-and-chips-results/test/fixtures/loading.js.map +1 -0
  176. package/lib/organism/search-and-chips-results/test/fixtures.js +3 -0
  177. package/lib/organism/search-and-chips-results/test/fixtures.js.map +1 -1
  178. package/lib/template/back-office/brand-update/index.js +5 -2
  179. package/lib/template/back-office/brand-update/index.js.map +1 -1
  180. package/lib/template/back-office/brand-update/style.css +10 -1
  181. package/lib/util/button-icons.js +2 -1
  182. package/lib/util/button-icons.js.map +1 -1
  183. package/package.json +2 -2
  184. package/es/atom/image-upload/test/fixtures/without-image.js.map +0 -1
  185. package/lib/atom/image-upload/test/fixtures/without-image.js.map +0 -1
@@ -3,9 +3,9 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
 
6
- var _constant2 = _interopRequireDefault(require("lodash/fp/constant"));
6
+ var _isEmpty2 = _interopRequireDefault(require("lodash/fp/isEmpty"));
7
7
 
8
- var _get2 = _interopRequireDefault(require("lodash/fp/get"));
8
+ var _constant2 = _interopRequireDefault(require("lodash/fp/constant"));
9
9
 
10
10
  var _uniqueId2 = _interopRequireDefault(require("lodash/fp/uniqueId"));
11
11
 
@@ -15,18 +15,18 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
16
  var _novaIcons = require("@coorpacademy/nova-icons");
17
17
 
18
- var _provider = _interopRequireDefault(require("../provider"));
19
-
20
18
  var _loader = _interopRequireDefault(require("../loader"));
21
19
 
20
+ var _buttonLink = _interopRequireDefault(require("../button-link"));
21
+
22
+ var _getClassState = _interopRequireDefault(require("../../util/get-class-state"));
23
+
22
24
  var _style = _interopRequireDefault(require("./style.css"));
23
25
 
24
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
27
 
26
28
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
27
29
 
28
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
-
30
30
  const constantNull = (0, _constant2.default)(null);
31
31
 
32
32
  class DragAndDrop extends _react.default.Component {
@@ -52,10 +52,6 @@ class DragAndDrop extends _react.default.Component {
52
52
  }
53
53
 
54
54
  render() {
55
- const {
56
- skin
57
- } = this.context;
58
- const brandColor = (0, _get2.default)('common.brand', skin);
59
55
  const idBox = (0, _uniqueId2.default)('drop-box-');
60
56
  const {
61
57
  children = constantNull,
@@ -66,7 +62,8 @@ class DragAndDrop extends _react.default.Component {
66
62
  previewContent,
67
63
  loading = false,
68
64
  modified = false,
69
- onReset = null
65
+ onReset = null,
66
+ error = ''
70
67
  } = this.props;
71
68
  const {
72
69
  dragging
@@ -75,72 +72,103 @@ class DragAndDrop extends _react.default.Component {
75
72
 
76
73
  if (previewContent && previewContent.type === 'image') {
77
74
  previewView = /*#__PURE__*/_react.default.createElement("div", {
78
- className: _style.default.previewView
75
+ className: _style.default.preview
79
76
  }, /*#__PURE__*/_react.default.createElement("img", {
80
77
  src: previewContent.src
81
78
  }));
82
79
  } else if (previewContent && previewContent.type === 'video') {
83
80
  previewView = /*#__PURE__*/_react.default.createElement("div", {
84
- className: _extends(_extends({}, _style.default.previewView), {}, {
85
- width: '300px'
86
- })
81
+ className: _style.default.preview
87
82
  }, /*#__PURE__*/_react.default.createElement("video", {
88
- width: "100%",
89
83
  controls: true,
90
84
  src: previewContent.src,
91
85
  type: "video/*"
92
86
  }));
93
87
  } else if (loading) {
94
88
  previewView = /*#__PURE__*/_react.default.createElement("div", {
95
- className: _style.default.loading
96
- }, /*#__PURE__*/_react.default.createElement(_loader.default, null));
89
+ className: _style.default.loaderWrapper
90
+ }, /*#__PURE__*/_react.default.createElement("div", {
91
+ className: _style.default.loadingCancel
92
+ }, /*#__PURE__*/_react.default.createElement(_novaIcons.NovaLineStatusClose, {
93
+ "data-name": "reset-content-icon",
94
+ height: 16,
95
+ width: 16,
96
+ className: _style.default.closeIcon,
97
+ onClick: onReset
98
+ })), /*#__PURE__*/_react.default.createElement("div", {
99
+ className: _style.default.loader
100
+ }, /*#__PURE__*/_react.default.createElement(_loader.default, {
101
+ theme: "coorpmanager"
102
+ })), /*#__PURE__*/_react.default.createElement("span", {
103
+ className: _style.default.loaderText
104
+ }, "Uploading"));
97
105
  } else {
98
106
  previewView = /*#__PURE__*/_react.default.createElement("span", null, previewLabel);
99
107
  }
100
108
 
101
- const resetContent = previewContent && previewContent.src && onReset ? /*#__PURE__*/_react.default.createElement("div", {
109
+ const resetContent = previewContent && previewContent.src ? /*#__PURE__*/_react.default.createElement("div", {
102
110
  className: _style.default.resetUploadWrapper
103
111
  }, /*#__PURE__*/_react.default.createElement("div", {
104
112
  className: _style.default.resetSrcLabel
105
- }, previewContent.src), /*#__PURE__*/_react.default.createElement(_novaIcons.NovaLineStatusClose, {
113
+ }, previewContent.src), onReset ? /*#__PURE__*/_react.default.createElement(_novaIcons.NovaLineStatusClose, {
106
114
  "data-name": "reset-content-icon",
107
115
  height: 16,
108
116
  width: 16,
109
117
  className: _style.default.closeIcon,
110
118
  onClick: onReset
111
- })) : null;
119
+ }) : null) : null;
120
+
121
+ const buildButton = () => {
122
+ const defaultButtonProps = {
123
+ label: uploadLabel,
124
+ 'aria-label': 'aria button',
125
+ 'data-name': 'default-button',
126
+ icon: {
127
+ position: 'left',
128
+ type: 'folders'
129
+ }
130
+ };
131
+
132
+ if (dragging) {
133
+ return null;
134
+ } else if (error) {
135
+ return /*#__PURE__*/_react.default.createElement(_buttonLink.default, _extends({}, defaultButtonProps, {
136
+ label: "Try again",
137
+ icon: {}
138
+ }));
139
+ } else {
140
+ return /*#__PURE__*/_react.default.createElement(_buttonLink.default, defaultButtonProps);
141
+ }
142
+ };
143
+
144
+ const button = buildButton(dragging, error);
145
+ const previewContainer = (0, _getClassState.default)(_style.default.previewContainer, _style.default.modifiedPreviewContainer, null, modified, error);
146
+ const inputWrapper = (0, _getClassState.default)(_style.default.inputWrapper, _style.default.modifiedInputWrapper, _style.default.errorInputWrapper, modified, error);
112
147
  return /*#__PURE__*/_react.default.createElement("div", {
113
148
  className: _style.default.wrapper,
114
149
  "data-name": "drag-and-drop-wrapper"
150
+ }, !(0, _isEmpty2.default)(previewContent) || loading ? /*#__PURE__*/_react.default.createElement("div", {
151
+ className: previewContainer
152
+ }, previewView) : /*#__PURE__*/_react.default.createElement("div", {
153
+ className: dragging ? _style.default.dragging : inputWrapper,
154
+ id: idBox
115
155
  }, /*#__PURE__*/_react.default.createElement("div", {
156
+ className: _style.default.infosContainer
157
+ }, error ? /*#__PURE__*/_react.default.createElement(_novaIcons.NovaSolidFilesBasicFileBlock2, {
158
+ className: _style.default.iconError
159
+ }) : /*#__PURE__*/_react.default.createElement(_novaIcons.NovaSolidFilesBasicFileUpload2, {
160
+ className: _style.default.icon
161
+ }), description ? /*#__PURE__*/_react.default.createElement("div", {
162
+ className: _style.default.description
163
+ }, description) : null, error ? null : /*#__PURE__*/_react.default.createElement("div", {
116
164
  className: _style.default.title
117
- }, title), /*#__PURE__*/_react.default.createElement("div", {
118
- className: modified ? _style.default.modified : _style.default.previewWrapper
119
- }, previewView), /*#__PURE__*/_react.default.createElement("div", {
120
- className: dragging ? _style.default.dragging : _style.default.inputWrapper,
121
- id: idBox
122
- }, /*#__PURE__*/_react.default.createElement(_novaIcons.NovaSolidDataTransferDataUpload1, {
123
- className: _style.default.arrow,
124
- color: brandColor
125
- }), /*#__PURE__*/_react.default.createElement("div", {
126
- className: _style.default.uploadLabel
127
- }, uploadLabel), children(this.handleDragStart, this.handleDragStop)), resetContent, description ?
128
- /*#__PURE__*/
129
- // eslint-disable-next-line react/no-danger
130
- _react.default.createElement("div", {
131
- className: _style.default.description,
132
- dangerouslySetInnerHTML: {
133
- __html: description
134
- }
135
- }) : null);
165
+ }, title)), button, /*#__PURE__*/_react.default.createElement("div", null, children(this.handleDragStart, this.handleDragStop))), error ? /*#__PURE__*/_react.default.createElement("span", {
166
+ className: _style.default.errorMessage
167
+ }, error) : resetContent);
136
168
  }
137
169
 
138
170
  }
139
171
 
140
- _defineProperty(DragAndDrop, "contextTypes", {
141
- skin: _provider.default.childContextTypes.skin
142
- });
143
-
144
172
  DragAndDrop.propTypes = process.env.NODE_ENV !== "production" ? {
145
173
  title: _propTypes.default.string,
146
174
  description: _propTypes.default.string,
@@ -153,7 +181,8 @@ DragAndDrop.propTypes = process.env.NODE_ENV !== "production" ? {
153
181
  loading: _propTypes.default.bool,
154
182
  modified: _propTypes.default.bool,
155
183
  children: _propTypes.default.func,
156
- onReset: _propTypes.default.func
184
+ onReset: _propTypes.default.func,
185
+ error: _propTypes.default.string
157
186
  } : {};
158
187
  var _default = DragAndDrop;
159
188
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/atom/drag-and-drop/index.js"],"names":["constantNull","DragAndDrop","React","Component","constructor","props","state","dragging","handleDragStart","bind","handleDragStop","setState","render","skin","context","brandColor","idBox","children","title","description","uploadLabel","previewLabel","previewContent","loading","modified","onReset","previewView","type","style","src","width","resetContent","resetUploadWrapper","resetSrcLabel","closeIcon","wrapper","previewWrapper","inputWrapper","arrow","__html","Provider","childContextTypes","propTypes","PropTypes","string","shape","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {uniqueId, get, constant} from 'lodash/fp';\nimport {\n NovaSolidDataTransferDataUpload1 as UploadIcon,\n NovaLineStatusClose as Close\n} from '@coorpacademy/nova-icons';\nimport Provider from '../provider';\nimport Loader from '../loader';\nimport style from './style.css';\n\nconst constantNull = constant(null);\n\nclass DragAndDrop extends React.Component {\n static propTypes = {\n title: PropTypes.string,\n description: PropTypes.string,\n uploadLabel: PropTypes.string,\n previewLabel: PropTypes.string,\n previewContent: PropTypes.shape({\n type: PropTypes.string,\n src: PropTypes.string\n }),\n loading: PropTypes.bool,\n modified: PropTypes.bool,\n children: PropTypes.func,\n onReset: PropTypes.func\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n dragging: false\n };\n\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragStop = this.handleDragStop.bind(this);\n }\n\n handleDragStart() {\n this.setState({\n dragging: true\n });\n }\n\n handleDragStop() {\n this.setState({\n dragging: false\n });\n }\n\n render() {\n const {skin} = this.context;\n const brandColor = get('common.brand', skin);\n const idBox = uniqueId('drop-box-');\n const {\n children = constantNull,\n title,\n description,\n uploadLabel,\n previewLabel = '',\n previewContent,\n loading = false,\n modified = false,\n onReset = null\n } = this.props;\n const {dragging} = this.state;\n\n let previewView = null;\n\n if (previewContent && previewContent.type === 'image') {\n previewView = (\n <div className={style.previewView}>\n <img src={previewContent.src} />\n </div>\n );\n } else if (previewContent && previewContent.type === 'video') {\n previewView = (\n <div className={{...style.previewView, width: '300px'}}>\n <video width=\"100%\" controls src={previewContent.src} type=\"video/*\" />\n </div>\n );\n } else if (loading) {\n previewView = (\n <div className={style.loading}>\n <Loader />\n </div>\n );\n } else {\n previewView = <span>{previewLabel}</span>;\n }\n\n const resetContent =\n previewContent && previewContent.src && onReset ? (\n <div className={style.resetUploadWrapper}>\n <div className={style.resetSrcLabel}>{previewContent.src}</div>\n <Close\n data-name=\"reset-content-icon\"\n height={16}\n width={16}\n className={style.closeIcon}\n onClick={onReset}\n />\n </div>\n ) : null;\n\n return (\n <div className={style.wrapper} data-name=\"drag-and-drop-wrapper\">\n <div className={style.title}>{title}</div>\n <div className={modified ? style.modified : style.previewWrapper}>{previewView}</div>\n <div className={dragging ? style.dragging : style.inputWrapper} id={idBox}>\n <UploadIcon className={style.arrow} color={brandColor} />\n <div className={style.uploadLabel}>{uploadLabel}</div>\n {children(this.handleDragStart, this.handleDragStop)}\n </div>\n {resetContent}\n {description ? (\n // eslint-disable-next-line react/no-danger\n <div className={style.description} dangerouslySetInnerHTML={{__html: description}} />\n ) : null}\n </div>\n );\n }\n}\n\nexport default DragAndDrop;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/atom/drag-and-drop/index.js"],"names":["constantNull","DragAndDrop","React","Component","constructor","props","state","dragging","handleDragStart","bind","handleDragStop","setState","render","idBox","children","title","description","uploadLabel","previewLabel","previewContent","loading","modified","onReset","error","previewView","type","style","preview","src","loaderWrapper","loadingCancel","closeIcon","loader","loaderText","resetContent","resetUploadWrapper","resetSrcLabel","buildButton","defaultButtonProps","label","icon","position","button","previewContainer","modifiedPreviewContainer","inputWrapper","modifiedInputWrapper","errorInputWrapper","wrapper","infosContainer","iconError","errorMessage","propTypes","PropTypes","string","shape","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {uniqueId, constant, isEmpty} from 'lodash/fp';\nimport {\n NovaLineStatusClose as Close,\n NovaSolidFilesBasicFileUpload2 as FileUploadIcon,\n NovaSolidFilesBasicFileBlock2 as FileUploadBlockedIcon\n} from '@coorpacademy/nova-icons';\nimport Loader from '../loader';\nimport Button from '../button-link';\nimport getClassState from '../../util/get-class-state';\nimport style from './style.css';\n\nconst constantNull = constant(null);\n\nclass DragAndDrop extends React.Component {\n static propTypes = {\n title: PropTypes.string,\n description: PropTypes.string,\n uploadLabel: PropTypes.string,\n previewLabel: PropTypes.string,\n previewContent: PropTypes.shape({\n type: PropTypes.string,\n src: PropTypes.string\n }),\n loading: PropTypes.bool,\n modified: PropTypes.bool,\n children: PropTypes.func,\n onReset: PropTypes.func,\n error: PropTypes.string\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n dragging: false\n };\n\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragStop = this.handleDragStop.bind(this);\n }\n\n handleDragStart() {\n this.setState({\n dragging: true\n });\n }\n\n handleDragStop() {\n this.setState({\n dragging: false\n });\n }\n\n render() {\n const idBox = uniqueId('drop-box-');\n const {\n children = constantNull,\n title,\n description,\n uploadLabel,\n previewLabel = '',\n previewContent,\n loading = false,\n modified = false,\n onReset = null,\n error = ''\n } = this.props;\n const {dragging} = this.state;\n\n let previewView = null;\n\n if (previewContent && previewContent.type === 'image') {\n previewView = (\n <div className={style.preview}>\n <img src={previewContent.src} />\n </div>\n );\n } else if (previewContent && previewContent.type === 'video') {\n previewView = (\n <div className={style.preview}>\n <video controls src={previewContent.src} type=\"video/*\" />\n </div>\n );\n } else if (loading) {\n previewView = (\n <div className={style.loaderWrapper}>\n <div className={style.loadingCancel}>\n <Close\n data-name=\"reset-content-icon\"\n height={16}\n width={16}\n className={style.closeIcon}\n onClick={onReset}\n />\n </div>\n <div className={style.loader}>\n <Loader theme=\"coorpmanager\" />\n </div>\n <span className={style.loaderText}>Uploading</span>\n </div>\n );\n } else {\n previewView = <span>{previewLabel}</span>;\n }\n\n const resetContent =\n previewContent && previewContent.src ? (\n <div className={style.resetUploadWrapper}>\n <div className={style.resetSrcLabel}>{previewContent.src}</div>\n {onReset ? (\n <Close\n data-name=\"reset-content-icon\"\n height={16}\n width={16}\n className={style.closeIcon}\n onClick={onReset}\n />\n ) : null}\n </div>\n ) : null;\n\n const buildButton = () => {\n const defaultButtonProps = {\n label: uploadLabel,\n 'aria-label': 'aria button',\n 'data-name': 'default-button',\n icon: {\n position: 'left',\n type: 'folders'\n }\n };\n if (dragging) {\n return null;\n } else if (error) {\n return <Button {...defaultButtonProps} label=\"Try again\" icon={{}} />;\n } else {\n return <Button {...defaultButtonProps} />;\n }\n };\n\n const button = buildButton(dragging, error);\n\n const previewContainer = getClassState(\n style.previewContainer,\n style.modifiedPreviewContainer,\n null,\n modified,\n error\n );\n const inputWrapper = getClassState(\n style.inputWrapper,\n style.modifiedInputWrapper,\n style.errorInputWrapper,\n modified,\n error\n );\n\n return (\n <div className={style.wrapper} data-name=\"drag-and-drop-wrapper\">\n {!isEmpty(previewContent) || loading ? (\n <div className={previewContainer}>{previewView}</div>\n ) : (\n <div className={dragging ? style.dragging : inputWrapper} id={idBox}>\n <div className={style.infosContainer}>\n {error ? (\n <FileUploadBlockedIcon className={style.iconError} />\n ) : (\n <FileUploadIcon className={style.icon} />\n )}\n {description ? <div className={style.description}>{description}</div> : null}\n {error ? null : <div className={style.title}>{title}</div>}\n </div>\n {button}\n <div>{children(this.handleDragStart, this.handleDragStop)}</div>\n </div>\n )}\n {error ? <span className={style.errorMessage}>{error}</span> : resetContent}\n </div>\n );\n }\n}\n\nexport default DragAndDrop;\n"],"file":"index.js"}
@@ -6,145 +6,233 @@
6
6
  @value battle from colors;
7
7
  @value light from colors;
8
8
  @value xtraLightGrey from colors;
9
+ @value cm_grey_50 from colors;
10
+ @value cm_grey_100 from colors;
11
+ @value cm_grey_200 from colors;
12
+ @value cm_grey_300 from colors;
13
+ @value cm_grey_400 from colors;
14
+ @value cm_grey_700 from colors;
15
+ @value white from colors;
16
+ @value cm_negative_100 from colors;
17
+ @value cm_yellow_100 from colors;
9
18
 
10
19
  .wrapper {
11
- width: 360px;
20
+ font-family: "Gilroy";
21
+ max-height: 360px;
22
+ max-width: 360px;
23
+ height: 100%;
24
+ width: 100%;
12
25
  }
13
26
 
14
27
  .title {
15
- font-family: "Gilroy";
16
- font-size: 15px;
17
- text-transform: none;
18
- color: dark;
19
- margin-bottom: 20px;
28
+ font-size: 14px;
29
+ font-weight: 700;
30
+ color: cm_grey_700;
31
+ margin-bottom: 14px;
20
32
  }
21
33
 
22
34
  .description {
23
- font-family: 'Gilroy';
24
- font-size: 13px;
35
+ max-height: 85px;
36
+ font-size: 1.2em;
25
37
  font-weight: 400;
26
- font-style: italic;
27
- color: dark;
28
- margin: 10px 0;
29
- text-align: justify;
38
+ color: cm_grey_300;
39
+ text-align: center;
40
+ padding: 8px;
30
41
  }
31
42
 
32
- .previewWrapper {
43
+ .previewContainer {
33
44
  width: 100%;
34
- box-sizing: border-box;
35
- border: 1px dashed medium;
36
- margin-bottom: 10px;
37
- display: flex;
38
- align-items: center;
39
- justify-content: center;
40
- }
41
-
42
- .modified {
43
- composes: previewWrapper;
44
- border: 2px solid battle;
45
+ height: 80%;
46
+ border: none;
47
+ border-radius: 7px;
48
+ background: cm_grey_50;
45
49
  }
46
50
 
47
- .previewWrapper span {
48
- font-family: 'Gilroy';
49
- color: dark;
50
- font-size: 15px;
51
- font-weight: 700;
52
- line-height: 100px;
51
+ .modifiedPreviewContainer {
52
+ composes: previewContainer;
53
+ border: 3px solid cm_yellow_100;
53
54
  }
54
55
 
55
- .previewView {
56
- padding: 10px;
56
+ .preview {
57
+ padding: 16px;
57
58
  width: 100%;
58
- height: 100px;
59
+ height: 100%;
59
60
  box-sizing: border-box;
60
61
  display: flex;
62
+ justify-content: center;
63
+ align-items: center;
64
+ background-clip: content-box;
65
+ border-radius: 19px;
66
+ background-color: white;
61
67
  }
62
68
 
63
- .previewView img {
69
+ .preview img, video {
64
70
  max-width: 100%;
65
71
  max-height: 100%;
66
72
  margin: auto;
67
73
  }
68
74
 
75
+ .infosContainer {
76
+ font-size: 10px;;
77
+ width: 100%;
78
+ height: 100%;
79
+ display: flex;
80
+ flex-direction: column;
81
+ align-items: center;
82
+ justify-content: space-evenly;
83
+ overflow: hidden;
84
+ }
85
+
69
86
  .inputWrapper {
87
+ background: cm_grey_50;
70
88
  width: 100%;
71
- height: 70px;
89
+ height: 80%;
72
90
  box-sizing: border-box;
73
- border: 1px dashed medium;
74
- border-radius: 3px;
91
+ border-radius: 7px;
75
92
  position: relative;
76
93
  display: flex;
94
+ flex-direction: column;
77
95
  align-items: center;
78
- justify-content: center;
96
+ justify-content: space-between;
97
+ padding: 14px 8px 8px 8px;
98
+ overflow: hidden;
99
+ }
100
+
101
+ .inputWrapper:before {
102
+ content: "";
103
+ position: absolute;
104
+ border: 10px dashed cm_grey_200;
105
+ top: -8px;
106
+ bottom: -8px;
107
+ left: -8px;
108
+ right: -8px;
109
+ }
110
+
111
+ .modifiedInputWrapper {
112
+ composes: inputWrapper;
113
+ }
114
+
115
+ .modifiedInputWrapper::before {
116
+ content: "";
117
+ position: absolute;
118
+ border: 10px dashed cm_yellow_100;
119
+ top: -8px;
120
+ bottom: -8px;
121
+ left: -8px;
122
+ right: -8px;
123
+ }
124
+
125
+ .errorInputWrapper {
126
+ composes: inputWrapper;
127
+ }
128
+
129
+ .errorInputWrapper .icon {
130
+ color: cm_negative_100;
79
131
  }
80
132
 
81
133
  .resetUploadWrapper {
82
134
  width: 100%;
83
- height: 30px;
135
+ min-height: 24px;
84
136
  box-sizing: border-box;
85
- background-color: xtraLightGrey;
86
- border: solid 1px light;
137
+ background-color: cm_grey_50;
87
138
  border-radius: 3px;
88
- position: relative;
89
139
  display: flex;
90
140
  align-items: center;
91
141
  justify-content: space-between;
92
- /* fonts */
93
- font-family: Gilroy;
94
- font-size: 13px;
142
+ margin-top: 16px;
143
+ padding: 4px 8px;
144
+ font-size: 10px;
95
145
  font-weight: 400;
96
- margin-top: 15px;
97
146
  }
98
147
 
99
148
  .resetSrcLabel {
100
- font-family: Gilroy;
101
- color: dark;
102
- max-width: 220px;
149
+ color: cm_grey_700;
103
150
  display: inline-block;
104
151
  white-space: nowrap;
105
152
  overflow: hidden;
106
153
  text-overflow: ellipsis;
107
154
  direction: rtl;
108
155
  text-align: left;
109
- margin-left: 9px;
110
156
  }
111
157
 
112
158
  .closeIcon {
113
- margin-right: 9px;
114
159
  cursor: pointer;
115
- color: dark;
116
- }
117
-
118
- .closeIcon:hover {
119
- color: black;
160
+ color: cm_grey_400;
161
+ padding: 6px;
120
162
  }
121
163
 
122
164
  .dragging {
123
165
  composes: inputWrapper;
124
- border: 3px dashed brand;
166
+ border: 1px solid cm_grey_200;
167
+ background: cm_grey_100;
125
168
  }
126
169
 
127
- .arrow {
128
- width: 34px;
129
- height: 34px;
130
- margin-right: 10px;
131
- transition: all 0.2s cubic-bezier(0.47, 1.04, 0.46, 2.16);
170
+ .dragging .description .icon .title {
171
+ font-size: 8px;
132
172
  }
133
173
 
134
- .dragging .arrow {
135
- transform: scale(1.2);
174
+ .dragging .title {
175
+ font-size: 10px;
136
176
  }
137
177
 
138
- .uploadLabel {
139
- font-family: 'Gilroy';
140
- font-size: 18px;
141
- text-transform: uppercase;
142
- font-weight: 700;
143
- color: dark;
178
+ .dragging .icon {
179
+ transform: scale(0.85);
144
180
  }
145
181
 
146
- .loading {
147
- min-height: 100px;
148
- border: none;
182
+ .icon {
183
+ min-width: 14px;
184
+ min-height: 14px;
185
+ max-width: 30px;
186
+ max-height: 30px;
187
+ height: 20%;
188
+ width: 20%;;
189
+ transition: all 0.2s cubic-bezier(0.47, 1.04, 0.46, 2.16);
190
+ }
191
+
192
+ .iconError {
193
+ composes: icon;
194
+ color: cm_negative_100;
195
+ }
196
+
197
+ .loaderWrapper {
149
198
  position: relative;
199
+ height: 100%;
200
+ width: 100%;
201
+ display: flex;
202
+ flex-direction: column;
203
+ justify-content: center;
204
+ align-items: center;
205
+ border-radius: 7px;
206
+ }
207
+
208
+ .loader {
209
+ margin-bottom: 8px;
210
+ height: 14px;
211
+ width: 14px;
212
+ }
213
+
214
+ .loaderText {
215
+ font-size: 10px;
216
+ font-weight: 400;
217
+ }
218
+
219
+ .loadingCancel {
220
+ display: none;
221
+ position: absolute;
222
+ top: 0;
223
+ right: 0;
224
+ }
225
+
226
+ .loaderWrapper:hover .loadingCancel {
227
+ display: block;
228
+ }
229
+
230
+ .loaderWrapper:hover {
231
+ background-color: cm_grey_100;
232
+ }
233
+
234
+ .errorMessage {
235
+ color: cm_negative_100;
236
+ font-size: 12px;
237
+ margin-top: 8px;
150
238
  }
@@ -18,12 +18,19 @@ var _withChildren = _interopRequireDefault(require("./fixtures/with-children"));
18
18
 
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
 
21
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
22
+
21
23
  (0, _browserEnv.default)();
22
24
  (0, _enzyme.configure)({
23
25
  adapter: new _enzymeAdapterReact.default()
24
26
  });
27
+ const {
28
+ props
29
+ } = _withChildren.default;
25
30
  (0, _ava.default)('should set state to dragging when user starts dragging', t => {
26
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_.default, _withChildren.default.props, (onDragStart, onDragStop) => /*#__PURE__*/_react.default.createElement("input", {
31
+ const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_.default, _extends({}, props, {
32
+ previewContent: {}
33
+ }), (onDragStart, onDragStop) => /*#__PURE__*/_react.default.createElement("input", {
27
34
  className: _style.default.input,
28
35
  key: "1",
29
36
  type: "file",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/atom/drag-and-drop/test/dragging.js"],"names":["adapter","Adapter","t","wrapper","withChildrenFixtures","props","onDragStart","onDragStop","style","input","instance","false","state","dragging","find","simulate","true"],"mappings":";;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA;AACA,uBAAU;AAACA,EAAAA,OAAO,EAAE,IAAIC,2BAAJ;AAAV,CAAV;AAEA,kBAAK,wDAAL,EAA+DC,CAAC,IAAI;AAClE,QAAMC,OAAO,GAAG,mCACd,6BAAC,SAAD,EAAiBC,sBAAqBC,KAAtC,EACG,CAACC,WAAD,EAAcC,UAAd,kBACC;AACE,IAAA,SAAS,EAAEC,eAAMC,KADnB;AAEE,IAAA,GAAG,EAAC,GAFN;AAGE,IAAA,IAAI,EAAC,MAHP;AAIE,IAAA,MAAM,EAAC,SAJT;AAKE,IAAA,QAAQ,EAAE,MAAM,IALlB;AAME,IAAA,WAAW,EAAEH,WANf;AAOE,IAAA,MAAM,EAAEC,UAPV;AAQE,IAAA,WAAW,EAAEA;AARf,IAFJ,CADc,CAAhB;AAgBA,QAAMG,QAAQ,GAAGP,OAAO,CAACO,QAAR,EAAjB;AAEAR,EAAAA,CAAC,CAACS,KAAF,CAAQD,QAAQ,CAACE,KAAT,CAAeC,QAAvB;AACAV,EAAAA,OAAO,CAACW,IAAR,CAAa,OAAb,EAAsBC,QAAtB,CAA+B,WAA/B;AACAb,EAAAA,CAAC,CAACc,IAAF,CAAON,QAAQ,CAACE,KAAT,CAAeC,QAAtB;AACAV,EAAAA,OAAO,CAACW,IAAR,CAAa,OAAb,EAAsBC,QAAtB,CAA+B,WAA/B;AACAb,EAAAA,CAAC,CAACS,KAAF,CAAQD,QAAQ,CAACE,KAAT,CAAeC,QAAvB;AACD,CAxBD","sourcesContent":["import browserEnv from 'browser-env';\nimport test from 'ava';\nimport React from 'react';\nimport {shallow, configure} from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport style from '../../image-upload/style.css';\nimport DragAndDrop from '..';\nimport withChildrenFixtures from './fixtures/with-children';\n\nbrowserEnv();\nconfigure({adapter: new Adapter()});\n\ntest('should set state to dragging when user starts dragging', t => {\n const wrapper = shallow(\n <DragAndDrop {...withChildrenFixtures.props}>\n {(onDragStart, onDragStop) => (\n <input\n className={style.input}\n key=\"1\"\n type=\"file\"\n accept=\"image*/\"\n onChange={() => true}\n onDragEnter={onDragStart}\n onDrop={onDragStop}\n onDragLeave={onDragStop}\n />\n )}\n </DragAndDrop>\n );\n const instance = wrapper.instance();\n\n t.false(instance.state.dragging);\n wrapper.find('input').simulate('dragenter');\n t.true(instance.state.dragging);\n wrapper.find('input').simulate('dragleave');\n t.false(instance.state.dragging);\n});\n"],"file":"dragging.js"}
1
+ {"version":3,"sources":["../../../../src/atom/drag-and-drop/test/dragging.js"],"names":["adapter","Adapter","props","withChildrenFixtures","t","wrapper","onDragStart","onDragStop","style","input","instance","false","state","dragging","find","simulate","true"],"mappings":";;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA;AACA,uBAAU;AAACA,EAAAA,OAAO,EAAE,IAAIC,2BAAJ;AAAV,CAAV;AAEA,MAAM;AAACC,EAAAA;AAAD,IAAUC,qBAAhB;AAEA,kBAAK,wDAAL,EAA+DC,CAAC,IAAI;AAClE,QAAMC,OAAO,GAAG,mCACd,6BAAC,SAAD,eAAiBH,KAAjB;AAAwB,IAAA,cAAc,EAAE;AAAxC,MACG,CAACI,WAAD,EAAcC,UAAd,kBACC;AACE,IAAA,SAAS,EAAEC,eAAMC,KADnB;AAEE,IAAA,GAAG,EAAC,GAFN;AAGE,IAAA,IAAI,EAAC,MAHP;AAIE,IAAA,MAAM,EAAC,SAJT;AAKE,IAAA,QAAQ,EAAE,MAAM,IALlB;AAME,IAAA,WAAW,EAAEH,WANf;AAOE,IAAA,MAAM,EAAEC,UAPV;AAQE,IAAA,WAAW,EAAEA;AARf,IAFJ,CADc,CAAhB;AAgBA,QAAMG,QAAQ,GAAGL,OAAO,CAACK,QAAR,EAAjB;AAEAN,EAAAA,CAAC,CAACO,KAAF,CAAQD,QAAQ,CAACE,KAAT,CAAeC,QAAvB;AACAR,EAAAA,OAAO,CAACS,IAAR,CAAa,OAAb,EAAsBC,QAAtB,CAA+B,WAA/B;AACAX,EAAAA,CAAC,CAACY,IAAF,CAAON,QAAQ,CAACE,KAAT,CAAeC,QAAtB;AACAR,EAAAA,OAAO,CAACS,IAAR,CAAa,OAAb,EAAsBC,QAAtB,CAA+B,WAA/B;AACAX,EAAAA,CAAC,CAACO,KAAF,CAAQD,QAAQ,CAACE,KAAT,CAAeC,QAAvB;AACD,CAxBD","sourcesContent":["import browserEnv from 'browser-env';\nimport test from 'ava';\nimport React from 'react';\nimport {shallow, configure} from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport style from '../../image-upload/style.css';\nimport DragAndDrop from '..';\nimport withChildrenFixtures from './fixtures/with-children';\n\nbrowserEnv();\nconfigure({adapter: new Adapter()});\n\nconst {props} = withChildrenFixtures;\n\ntest('should set state to dragging when user starts dragging', t => {\n const wrapper = shallow(\n <DragAndDrop {...props} previewContent={{}}>\n {(onDragStart, onDragStop) => (\n <input\n className={style.input}\n key=\"1\"\n type=\"file\"\n accept=\"image*/\"\n onChange={() => true}\n onDragEnter={onDragStart}\n onDrop={onDragStop}\n onDragLeave={onDragStop}\n />\n )}\n </DragAndDrop>\n );\n const instance = wrapper.instance();\n\n t.false(instance.state.dragging);\n wrapper.find('input').simulate('dragenter');\n t.true(instance.state.dragging);\n wrapper.find('input').simulate('dragleave');\n t.false(instance.state.dragging);\n});\n"],"file":"dragging.js"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+
6
+ var _default2 = _interopRequireDefault(require("./default"));
7
+
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+
10
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+
12
+ const {
13
+ props
14
+ } = _default2.default;
15
+ var _default = {
16
+ props: _extends(_extends({}, props), {}, {
17
+ modified: true
18
+ })
19
+ };
20
+ exports.default = _default;
21
+ //# sourceMappingURL=clean-and-modified.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/atom/drag-and-drop/test/fixtures/clean-and-modified.js"],"names":["props","defaultProps","modified"],"mappings":";;;;;AAAA;;;;;;AAEA,MAAM;AAACA,EAAAA;AAAD,IAAUC,iBAAhB;eAEe;AACbD,EAAAA,KAAK,wBACAA,KADA;AAEHE,IAAAA,QAAQ,EAAE;AAFP;AADQ,C","sourcesContent":["import defaultProps from './default';\n\nconst {props} = defaultProps;\n\nexport default {\n props: {\n ...props,\n modified: true\n }\n};\n"],"file":"clean-and-modified.js"}
@@ -4,9 +4,9 @@ exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _default = {
6
6
  props: {
7
- title: 'Drag & Drop',
8
- description: 'Drag and drop component',
9
- uploadLabel: 'Upload',
7
+ title: 'Drag & drop here',
8
+ description: 'JPG or PNG, smaller than 5mb',
9
+ uploadLabel: 'Browse',
10
10
  previewLabel: 'File Preview'
11
11
  }
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/atom/drag-and-drop/test/fixtures/default.js"],"names":["props","title","description","uploadLabel","previewLabel"],"mappings":";;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAE,aADF;AAELC,IAAAA,WAAW,EAAE,yBAFR;AAGLC,IAAAA,WAAW,EAAE,QAHR;AAILC,IAAAA,YAAY,EAAE;AAJT;AADM,C","sourcesContent":["export default {\n props: {\n title: 'Drag & Drop',\n description: 'Drag and drop component',\n uploadLabel: 'Upload',\n previewLabel: 'File Preview'\n }\n};\n"],"file":"default.js"}
1
+ {"version":3,"sources":["../../../../../src/atom/drag-and-drop/test/fixtures/default.js"],"names":["props","title","description","uploadLabel","previewLabel"],"mappings":";;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAE,kBADF;AAELC,IAAAA,WAAW,EAAE,8BAFR;AAGLC,IAAAA,WAAW,EAAE,QAHR;AAILC,IAAAA,YAAY,EAAE;AAJT;AADM,C","sourcesContent":["export default {\n props: {\n title: 'Drag & drop here',\n description: 'JPG or PNG, smaller than 5mb',\n uploadLabel: 'Browse',\n previewLabel: 'File Preview'\n }\n};\n"],"file":"default.js"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+
6
+ var _default2 = _interopRequireDefault(require("./default"));
7
+
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+
10
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+
12
+ const {
13
+ props
14
+ } = _default2.default;
15
+ var _default = {
16
+ props: _extends(_extends({}, props), {}, {
17
+ error: 'The file is invalid'
18
+ })
19
+ };
20
+ exports.default = _default;
21
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/atom/drag-and-drop/test/fixtures/error.js"],"names":["props","defaultProps","error"],"mappings":";;;;;AAAA;;;;;;AAEA,MAAM;AAACA,EAAAA;AAAD,IAAUC,iBAAhB;eAEe;AACbD,EAAAA,KAAK,wBACAA,KADA;AAEHE,IAAAA,KAAK,EAAE;AAFJ;AADQ,C","sourcesContent":["import defaultProps from './default';\n\nconst {props} = defaultProps;\n\nexport default {\n props: {\n ...props,\n error: 'The file is invalid'\n }\n};\n"],"file":"error.js"}