@commercetools-uikit/localized-multiline-text-input 0.0.0-canary-2021830134526
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/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/commercetools-uikit-localized-multiline-text-input.cjs.dev.js +612 -0
- package/dist/commercetools-uikit-localized-multiline-text-input.cjs.js +7 -0
- package/dist/commercetools-uikit-localized-multiline-text-input.cjs.prod.js +404 -0
- package/dist/commercetools-uikit-localized-multiline-text-input.esm.js +586 -0
- package/package.json +64 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
if (process.env.NODE_ENV === "production") {
|
|
4
|
+
module.exports = require("./commercetools-uikit-localized-multiline-text-input.cjs.prod.js");
|
|
5
|
+
} else {
|
|
6
|
+
module.exports = require("./commercetools-uikit-localized-multiline-text-input.cjs.dev.js");
|
|
7
|
+
}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
6
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
7
|
+
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
8
|
+
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
9
|
+
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
10
|
+
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
|
|
11
|
+
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
12
|
+
require('@babel/runtime-corejs3/helpers/taggedTemplateLiteral');
|
|
13
|
+
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
14
|
+
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
15
|
+
var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
|
|
16
|
+
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
17
|
+
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
18
|
+
require('@babel/runtime-corejs3/core-js-stable/instance/concat');
|
|
19
|
+
var react$1 = require('react');
|
|
20
|
+
require('prop-types');
|
|
21
|
+
require('react-required-if');
|
|
22
|
+
require('common-tags');
|
|
23
|
+
var reactIntl = require('react-intl');
|
|
24
|
+
var react = require('@emotion/react');
|
|
25
|
+
var hooks = require('@commercetools-uikit/hooks');
|
|
26
|
+
var Stack = require('@commercetools-uikit/spacings-stack');
|
|
27
|
+
var Constraints = require('@commercetools-uikit/constraints');
|
|
28
|
+
var localizedUtils = require('@commercetools-uikit/localized-utils');
|
|
29
|
+
var inputUtils = require('@commercetools-uikit/input-utils');
|
|
30
|
+
var _styled = require('@emotion/styled/base');
|
|
31
|
+
var FlatButton = require('@commercetools-uikit/flat-button');
|
|
32
|
+
var icons = require('@commercetools-uikit/icons');
|
|
33
|
+
var utils = require('@commercetools-uikit/utils');
|
|
34
|
+
var designSystem = require('@commercetools-uikit/design-system');
|
|
35
|
+
var Text = require('@commercetools-uikit/text');
|
|
36
|
+
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
37
|
+
var messages = require('@commercetools-uikit/messages');
|
|
38
|
+
|
|
39
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
40
|
+
|
|
41
|
+
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
42
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
43
|
+
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
44
|
+
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
45
|
+
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
46
|
+
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
47
|
+
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
48
|
+
var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty);
|
|
49
|
+
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
50
|
+
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
51
|
+
var Stack__default = /*#__PURE__*/_interopDefault(Stack);
|
|
52
|
+
var Constraints__default = /*#__PURE__*/_interopDefault(Constraints);
|
|
53
|
+
var _styled__default = /*#__PURE__*/_interopDefault(_styled);
|
|
54
|
+
var FlatButton__default = /*#__PURE__*/_interopDefault(FlatButton);
|
|
55
|
+
var Text__default = /*#__PURE__*/_interopDefault(Text);
|
|
56
|
+
|
|
57
|
+
function ownKeys$3(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
58
|
+
|
|
59
|
+
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$3(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$3(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
60
|
+
// * a disabled-field currently does not display warning/error-states so it takes precedence
|
|
61
|
+
// * a readonly-field cannot be changed, but it might be relevant for validation, so error and warning are checked first
|
|
62
|
+
// how you can interact with the field is controlled separately by the props, this only influences visuals
|
|
63
|
+
|
|
64
|
+
var _ref$2 = {
|
|
65
|
+
name: "d3v9zr",
|
|
66
|
+
styles: "overflow:hidden"
|
|
67
|
+
} ;
|
|
68
|
+
|
|
69
|
+
var _ref2 = {
|
|
70
|
+
name: "9a98ig",
|
|
71
|
+
styles: "border-top-left-radius:0!important;border-bottom-left-radius:0!important"
|
|
72
|
+
} ;
|
|
73
|
+
|
|
74
|
+
var getTextareaStyles = function getTextareaStyles(props) {
|
|
75
|
+
var baseStyles = [_ref2, props.isCollapsed && _ref$2];
|
|
76
|
+
return baseStyles;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
var getLanguageLabelStyles = function getLanguageLabelStyles(props, theme) {
|
|
80
|
+
var overwrittenVars = _objectSpread$3(_objectSpread$3({}, designSystem.customProperties), theme);
|
|
81
|
+
|
|
82
|
+
return /*#__PURE__*/react.css("flex:1 0 auto;color:", overwrittenVars[designSystem.designTokens.fontColorForInputWhenDisabled], ";line-height:calc(", designSystem.customProperties.sizeHeightInput, " - 2 * ", designSystem.customProperties.borderRadius1, ");background-color:", overwrittenVars[designSystem.designTokens.backgroundColorForInputWhenDisabled], ";border-top-left-radius:", overwrittenVars[designSystem.designTokens.borderRadiusForInput], ";border-bottom-left-radius:", overwrittenVars[designSystem.designTokens.borderRadiusForInput], ";border:1px ", overwrittenVars[designSystem.designTokens.borderColorForInputWhenDisabled], " solid;padding:0 ", designSystem.customProperties.spacingS, ";transition:border-color ", designSystem.customProperties.transitionStandard, ",background-color ", designSystem.customProperties.transitionStandard, ",color ", designSystem.customProperties.transitionStandard, ";border-right:0;box-shadow:none;appearance:none;" + ("" ), "" );
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var ToggleButtonWrapper = _styled__default['default']("div", {
|
|
86
|
+
target: "ed3jgad0"
|
|
87
|
+
} )({
|
|
88
|
+
name: "ejz79s",
|
|
89
|
+
styles: "flex:0;display:flex"
|
|
90
|
+
} );
|
|
91
|
+
|
|
92
|
+
function ownKeys$2(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
93
|
+
|
|
94
|
+
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$2(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$2(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
95
|
+
|
|
96
|
+
var LeftColumn = _styled__default['default']("div", {
|
|
97
|
+
target: "ecub1e22"
|
|
98
|
+
} )({
|
|
99
|
+
name: "82a6rk",
|
|
100
|
+
styles: "flex:1"
|
|
101
|
+
} );
|
|
102
|
+
|
|
103
|
+
var RightColumn = _styled__default['default']("div", {
|
|
104
|
+
target: "ecub1e21"
|
|
105
|
+
} )({
|
|
106
|
+
name: "1m04uhl",
|
|
107
|
+
styles: "position:relative;flex:0;display:flex;align-items:flex-start"
|
|
108
|
+
} );
|
|
109
|
+
|
|
110
|
+
var Row = _styled__default['default']("div", {
|
|
111
|
+
target: "ecub1e20"
|
|
112
|
+
} )({
|
|
113
|
+
name: "skgbeu",
|
|
114
|
+
styles: "display:flex;justify-content:flex-end"
|
|
115
|
+
} );
|
|
116
|
+
|
|
117
|
+
var _ref$1 = {
|
|
118
|
+
name: "1ktetz7",
|
|
119
|
+
styles: "width:100%;position:relative;display:flex"
|
|
120
|
+
} ;
|
|
121
|
+
|
|
122
|
+
var TranslationInput = function TranslationInput(props) {
|
|
123
|
+
var _useState = react$1.useState(TranslationInput.MIN_ROW_COUNT),
|
|
124
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
125
|
+
contentRowCount = _useState2[0],
|
|
126
|
+
setContentRowCount = _useState2[1];
|
|
127
|
+
|
|
128
|
+
var handleHeightChange = react$1.useCallback(function (_, rowCount) {
|
|
129
|
+
setContentRowCount(rowCount);
|
|
130
|
+
}, [setContentRowCount]);
|
|
131
|
+
var onChange = props.onChange;
|
|
132
|
+
var handleChange = react$1.useCallback(function (event) {
|
|
133
|
+
// We manipulate the event to add the language to the target.
|
|
134
|
+
// That way the users of LocalizedTextInput's onChange can read
|
|
135
|
+
// event.target.language and event.target.value to determine the next value.
|
|
136
|
+
//
|
|
137
|
+
// We only need this information for the story, the MC application code will
|
|
138
|
+
// never need to access the information in such an inconvenient way, as
|
|
139
|
+
// Formik can deal with a name like "foo.en" and sets the value correctly.
|
|
140
|
+
// We can't use this as we aren't guaranteed a name in the story as the user
|
|
141
|
+
// might clear it using the knob, and then we can't parse the language from
|
|
142
|
+
// the input name anymore.
|
|
143
|
+
//
|
|
144
|
+
// eslint-disable-next-line no-param-reassign
|
|
145
|
+
event.target.language = props.language;
|
|
146
|
+
onChange(event);
|
|
147
|
+
}, [onChange, props.language]);
|
|
148
|
+
var onFocus = props.onFocus,
|
|
149
|
+
onToggle = props.onToggle;
|
|
150
|
+
var handleFocus = react$1.useCallback(function () {
|
|
151
|
+
// Expand the input on focus
|
|
152
|
+
if (props.isCollapsed) onToggle();
|
|
153
|
+
if (onFocus) onFocus();
|
|
154
|
+
}, [props.isCollapsed, onFocus, onToggle]); // This checks if the content in the textarea overflows the minimum
|
|
155
|
+
// amount of lines it should have when collapsed
|
|
156
|
+
|
|
157
|
+
var contentExceedsShownRows = contentRowCount > TranslationInput.MIN_ROW_COUNT;
|
|
158
|
+
var shouldToggleButtonTakeSpace =
|
|
159
|
+
/*
|
|
160
|
+
- if hasLanguagesControl and there are no errors/warnings to display
|
|
161
|
+
- then the toggleButton is absolutely positioned
|
|
162
|
+
This is because the toggle button is placed next to the LocalizedInputToggle without being siblings in the DOM.
|
|
163
|
+
If there is a error or warning showing,
|
|
164
|
+
then it can be placed statically because it will then be a sibling to the error/warning message
|
|
165
|
+
and LocalizedInputToggle is placed below the errors/warnings.
|
|
166
|
+
*/
|
|
167
|
+
!props.isCollapsed && contentExceedsShownRows && !props.hasLanguagesControl || props.error || props.warning;
|
|
168
|
+
var theme = react.useTheme();
|
|
169
|
+
return jsxRuntime.jsxs(Stack__default['default'], {
|
|
170
|
+
scale: "xs",
|
|
171
|
+
children: [jsxRuntime.jsxs("div", {
|
|
172
|
+
css: _ref$1,
|
|
173
|
+
children: [jsxRuntime.jsx("label", {
|
|
174
|
+
htmlFor: props.id,
|
|
175
|
+
css: getLanguageLabelStyles(props, theme),
|
|
176
|
+
children: jsxRuntime.jsx(Text__default['default'].Detail, {
|
|
177
|
+
tone: "secondary",
|
|
178
|
+
children: props.language.toUpperCase()
|
|
179
|
+
})
|
|
180
|
+
}), jsxRuntime.jsx(inputUtils.MultilineInput, _objectSpread$2({
|
|
181
|
+
theme: theme,
|
|
182
|
+
id: props.id,
|
|
183
|
+
name: props.name,
|
|
184
|
+
autoComplete: props.autoComplete,
|
|
185
|
+
value: props.value,
|
|
186
|
+
onChange: handleChange,
|
|
187
|
+
onHeightChange: handleHeightChange,
|
|
188
|
+
onBlur: props.onBlur,
|
|
189
|
+
onFocus: handleFocus,
|
|
190
|
+
isDisabled: props.isDisabled,
|
|
191
|
+
placeholder: props.placeholder,
|
|
192
|
+
css: getTextareaStyles(props),
|
|
193
|
+
hasError: props.hasError,
|
|
194
|
+
hasWarning: props.hasWarning,
|
|
195
|
+
isReadOnly: props.isReadOnly,
|
|
196
|
+
isAutofocussed: props.isAutofocussed,
|
|
197
|
+
isOpen: !props.isCollapsed
|
|
198
|
+
}, utils.filterDataAttributes(props)))]
|
|
199
|
+
}, props.language), jsxRuntime.jsxs(Row // NOTE: applying this style withing the `styled` component results in the production
|
|
200
|
+
// bundle to apply the style in the wrong order.
|
|
201
|
+
// For instance, we need to override the marging of the spacing component, which also
|
|
202
|
+
// uses `!important`.
|
|
203
|
+
// Anyway, apparently by passing the style as a `css` prop to the `styled` component
|
|
204
|
+
// does the trick.
|
|
205
|
+
// TODO: revisit the logic and the implementation to maybe avoid having to apply this style.
|
|
206
|
+
, {
|
|
207
|
+
css: /*#__PURE__*/react.css("margin-top:", shouldToggleButtonTakeSpace ? 'inherit' : '0px !important', ";" + ("" ), "" ),
|
|
208
|
+
children: [function () {
|
|
209
|
+
if (props.error) return jsxRuntime.jsx(LeftColumn, {
|
|
210
|
+
children: jsxRuntime.jsx("div", {
|
|
211
|
+
children: props.error
|
|
212
|
+
})
|
|
213
|
+
});
|
|
214
|
+
if (props.warning) return jsxRuntime.jsx(LeftColumn, {
|
|
215
|
+
children: jsxRuntime.jsx("div", {
|
|
216
|
+
children: props.warning
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
return null;
|
|
220
|
+
}(), !props.isCollapsed && contentExceedsShownRows && jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
221
|
+
children: [jsxRuntime.jsx(LeftColumn, {}), jsxRuntime.jsx(RightColumn, {
|
|
222
|
+
children: jsxRuntime.jsx(ToggleButtonWrapper, {
|
|
223
|
+
css: [!shouldToggleButtonTakeSpace && /*#__PURE__*/react.css("position:absolute;top:0;right:0;margin-top:", designSystem.customProperties.spacingXs, ";" + ("" ), "" ), "" , "" ],
|
|
224
|
+
children: jsxRuntime.jsx(FlatButton__default['default'], {
|
|
225
|
+
onClick: props.onToggle,
|
|
226
|
+
isDisabled: props.isDisabled,
|
|
227
|
+
label: props.intl.formatMessage(inputUtils.messagesMultilineInput.collapse),
|
|
228
|
+
icon: jsxRuntime.jsx(icons.AngleUpIcon, {
|
|
229
|
+
size: "small"
|
|
230
|
+
})
|
|
231
|
+
})
|
|
232
|
+
})
|
|
233
|
+
})]
|
|
234
|
+
})]
|
|
235
|
+
})]
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
TranslationInput.displayName = 'TranslationInput';
|
|
240
|
+
TranslationInput.propTypes = {}; // The minimum ammount of rows the MultilineTextInput will show.
|
|
241
|
+
// When the input is closed, this is used as the maximum row count as well
|
|
242
|
+
// so that the input "collapses".
|
|
243
|
+
|
|
244
|
+
TranslationInput.MIN_ROW_COUNT = 1;
|
|
245
|
+
var TranslationInput$1 = TranslationInput;
|
|
246
|
+
|
|
247
|
+
function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
248
|
+
|
|
249
|
+
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$1(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$1(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
250
|
+
|
|
251
|
+
var RequiredValueErrorMessage = function RequiredValueErrorMessage() {
|
|
252
|
+
return jsxRuntime.jsx(messages.ErrorMessage, {
|
|
253
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$1({}, inputUtils.messagesLocalizedInput.missingRequiredField))
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
RequiredValueErrorMessage.displayName = 'RequiredValueErrorMessage';
|
|
258
|
+
var RequiredValueErrorMessage$1 = RequiredValueErrorMessage;
|
|
259
|
+
|
|
260
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
261
|
+
|
|
262
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys(Object(source), true)).call(_context4, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context5; _forEachInstanceProperty__default['default'](_context5 = ownKeys(Object(source))).call(_context5, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
263
|
+
|
|
264
|
+
var expandedTranslationsReducer = function expandedTranslationsReducer(state, action) {
|
|
265
|
+
switch (action.type) {
|
|
266
|
+
case 'toggle':
|
|
267
|
+
return _objectSpread(_objectSpread({}, state), {}, _defineProperty({}, action.payload, !state[action.payload]));
|
|
268
|
+
|
|
269
|
+
case 'toggleAll':
|
|
270
|
+
{
|
|
271
|
+
var _context;
|
|
272
|
+
|
|
273
|
+
var newState = _reduceInstanceProperty__default['default'](_context = _Object$keys__default['default'](state)).call(_context, function (translations, locale) {
|
|
274
|
+
return _objectSpread(_defineProperty({}, locale, true), translations);
|
|
275
|
+
}, {});
|
|
276
|
+
|
|
277
|
+
return newState;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
default:
|
|
281
|
+
return state;
|
|
282
|
+
}
|
|
283
|
+
}; // This component supports expanding/collapsing multiline inputs, but it also
|
|
284
|
+
// supports showing/hiding the remaining languages.
|
|
285
|
+
// These two features are both about opening/closing something, and so the code
|
|
286
|
+
// can get quite confusing. We try to stick to expand/collapse for the
|
|
287
|
+
// multiline inputs, while we use show/hide/open/close for the remaining
|
|
288
|
+
// languages.
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
var _ref = {
|
|
292
|
+
name: "xyzkeb",
|
|
293
|
+
styles: "align-self:flex-start"
|
|
294
|
+
} ;
|
|
295
|
+
|
|
296
|
+
var LocalizedMultilineTextInput = function LocalizedMultilineTextInput(props) {
|
|
297
|
+
var _context2;
|
|
298
|
+
|
|
299
|
+
var intl = reactIntl.useIntl();
|
|
300
|
+
|
|
301
|
+
var initialExpandedTranslationsState = _reduceInstanceProperty__default['default'](_context2 = _Object$keys__default['default'](props.value)).call(_context2, function (translations, locale) {
|
|
302
|
+
return _objectSpread(_defineProperty({}, locale, Boolean(props.defaultExpandMultilineText)), translations);
|
|
303
|
+
}, {});
|
|
304
|
+
|
|
305
|
+
var _useReducer = react$1.useReducer(expandedTranslationsReducer, initialExpandedTranslationsState),
|
|
306
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
307
|
+
expandedTranslationsState = _useReducer2[0],
|
|
308
|
+
expandedTranslationsDispatch = _useReducer2[1];
|
|
309
|
+
|
|
310
|
+
var defaultExpansionState = props.hideLanguageExpansionControls || props.defaultExpandLanguages || // useToggleState's default is `true`, but we want `false`
|
|
311
|
+
false;
|
|
312
|
+
|
|
313
|
+
var _useToggleState = hooks.useToggleState(defaultExpansionState),
|
|
314
|
+
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
315
|
+
areLanguagesOpened = _useToggleState2[0],
|
|
316
|
+
toggleLanguages = _useToggleState2[1];
|
|
317
|
+
|
|
318
|
+
var toggleLanguage = react$1.useCallback(function (language) {
|
|
319
|
+
expandedTranslationsDispatch({
|
|
320
|
+
type: 'toggle',
|
|
321
|
+
payload: language
|
|
322
|
+
});
|
|
323
|
+
}, [expandedTranslationsDispatch]);
|
|
324
|
+
var languages = localizedUtils.sortLanguages(props.selectedLanguage, _Object$keys__default['default'](props.value));
|
|
325
|
+
var hasErrorInRemainingLanguages = props.hasError || localizedUtils.getHasErrorOnRemainingLanguages(props.errors, props.selectedLanguage);
|
|
326
|
+
var hasWarningInRemainingLanguages = props.hasWarning || localizedUtils.getHasWarningOnRemainingLanguages(props.warnings, props.selectedLanguage);
|
|
327
|
+
|
|
328
|
+
if (hasErrorInRemainingLanguages || hasWarningInRemainingLanguages) {
|
|
329
|
+
if (!areLanguagesOpened) {
|
|
330
|
+
// this update within render replaces the old `getDerivedStateFromProps` functionality
|
|
331
|
+
// https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
|
|
332
|
+
toggleLanguages();
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
var shouldRenderLanguagesButton = languages.length > 1 && !props.hideLanguageExpansionControls;
|
|
337
|
+
return jsxRuntime.jsx(Constraints__default['default'].Horizontal, {
|
|
338
|
+
max: props.horizontalConstraint,
|
|
339
|
+
children: jsxRuntime.jsxs(Stack__default['default'], {
|
|
340
|
+
scale: "xs",
|
|
341
|
+
children: [jsxRuntime.jsx(Stack__default['default'], {
|
|
342
|
+
scale: "s",
|
|
343
|
+
children: _mapInstanceProperty__default['default'](languages).call(languages, function (language, index) {
|
|
344
|
+
var isFirstLanguage = index === 0;
|
|
345
|
+
if (!isFirstLanguage && !areLanguagesOpened) return null;
|
|
346
|
+
var isLastLanguage = index === languages.length - 1;
|
|
347
|
+
var hasLanguagesControl = isFirstLanguage && !areLanguagesOpened || isLastLanguage;
|
|
348
|
+
return jsxRuntime.jsx(TranslationInput$1, _objectSpread({
|
|
349
|
+
autoComplete: props.autoComplete,
|
|
350
|
+
id: LocalizedMultilineTextInput.getId(props.id, language),
|
|
351
|
+
name: LocalizedMultilineTextInput.getName(props.name, language),
|
|
352
|
+
value: props.value[language],
|
|
353
|
+
onChange: props.onChange,
|
|
354
|
+
language: language,
|
|
355
|
+
isCollapsed: !expandedTranslationsState[language],
|
|
356
|
+
onToggle: function onToggle() {
|
|
357
|
+
return toggleLanguage(language);
|
|
358
|
+
},
|
|
359
|
+
placeholder: props.placeholder ? props.placeholder[language] : undefined,
|
|
360
|
+
onBlur: props.onBlur,
|
|
361
|
+
onFocus: props.onFocus,
|
|
362
|
+
isAutofocussed: index === 0 && props.isAutofocussed,
|
|
363
|
+
isDisabled: props.isDisabled,
|
|
364
|
+
isReadOnly: props.isReadOnly,
|
|
365
|
+
hasError: Boolean(props.hasError || props.errors && props.errors[language]),
|
|
366
|
+
hasWarning: Boolean(props.hasWarning || props.warnings && props.warnings[language]),
|
|
367
|
+
intl: intl,
|
|
368
|
+
warning: props.warnings && props.warnings[language],
|
|
369
|
+
error: props.errors && props.errors[language],
|
|
370
|
+
hasLanguagesControl: hasLanguagesControl
|
|
371
|
+
}, localizedUtils.createLocalizedDataAttributes(props, language)), language);
|
|
372
|
+
})
|
|
373
|
+
}), shouldRenderLanguagesButton && jsxRuntime.jsx("div", {
|
|
374
|
+
css: _ref,
|
|
375
|
+
children: jsxRuntime.jsx(inputUtils.LocalizedInputToggle, {
|
|
376
|
+
isOpen: areLanguagesOpened,
|
|
377
|
+
onClick: toggleLanguages,
|
|
378
|
+
isDisabled: areLanguagesOpened && Boolean(hasErrorInRemainingLanguages || hasWarningInRemainingLanguages),
|
|
379
|
+
remainingLocalizations: languages.length - 1
|
|
380
|
+
})
|
|
381
|
+
})]
|
|
382
|
+
})
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
LocalizedMultilineTextInput.displayName = 'LocalizedMultilineTextInput';
|
|
387
|
+
LocalizedMultilineTextInput.RequiredValueErrorMessage = RequiredValueErrorMessage$1;
|
|
388
|
+
LocalizedMultilineTextInput.propTypes = {};
|
|
389
|
+
LocalizedMultilineTextInput.getId = localizedUtils.getId;
|
|
390
|
+
LocalizedMultilineTextInput.getName = localizedUtils.getName;
|
|
391
|
+
LocalizedMultilineTextInput.defaultProps = {
|
|
392
|
+
horizontalConstraint: 'scale'
|
|
393
|
+
};
|
|
394
|
+
LocalizedMultilineTextInput.createLocalizedString = localizedUtils.createLocalizedString;
|
|
395
|
+
LocalizedMultilineTextInput.isEmpty = localizedUtils.isEmpty;
|
|
396
|
+
LocalizedMultilineTextInput.omitEmptyTranslations = localizedUtils.omitEmptyTranslations;
|
|
397
|
+
LocalizedMultilineTextInput.isTouched = localizedUtils.isTouched;
|
|
398
|
+
var LocalizedMultilineTextInput$1 = LocalizedMultilineTextInput;
|
|
399
|
+
|
|
400
|
+
// NOTE: This string will be replaced in the `prepare` script by the `scripts/version.js` file.
|
|
401
|
+
var version = '0.0.0-canary-2021830134526';
|
|
402
|
+
|
|
403
|
+
exports['default'] = LocalizedMultilineTextInput$1;
|
|
404
|
+
exports.version = version;
|