@propellerads/tags-input 2.3.1 → 3.1.0
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/CHANGELOG.md +12 -0
- package/dist/allowJavaScriptModules.d.ts +0 -0
- package/dist/index.d.ts +1 -1
- package/dist/tags-input.cjs.development.js +15 -9
- package/dist/tags-input.cjs.development.js.map +1 -1
- package/dist/tags-input.cjs.production.min.js +1 -1
- package/dist/tags-input.cjs.production.min.js.map +1 -1
- package/dist/tags-input.esm.js +15 -9
- package/dist/tags-input.esm.js.map +1 -1
- package/dist/types.d.ts +4 -2
- package/package.json +3 -4
- package/src/index.tsx +0 -261
- package/src/style.tsx +0 -99
- package/src/types.ts +0 -36
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
#### `3.1.0`
|
|
2
|
+
|
|
3
|
+
* Added support of existing method onInputChange
|
|
4
|
+
|
|
5
|
+
#### `3.0.0`
|
|
6
|
+
|
|
7
|
+
* update REGEX - add support for zero-width non-word boundary
|
|
8
|
+
|
|
9
|
+
#### `2.4.0`
|
|
10
|
+
|
|
11
|
+
* fix errors in types
|
|
12
|
+
|
|
1
13
|
#### `2.3.0`
|
|
2
14
|
* update style-variables, dependencies
|
|
3
15
|
* apply new border-radius 8px, height, border-color
|
|
File without changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { components as reactSelectComponents } from 'react-select';
|
|
2
|
-
import { TagsInputProps } from
|
|
2
|
+
import { TagsInputProps } from './types';
|
|
3
3
|
declare const TagsInput: (props: TagsInputProps) => JSX.Element;
|
|
4
4
|
export { reactSelectComponents as components };
|
|
5
5
|
export default TagsInput;
|
|
@@ -223,11 +223,11 @@ var defaultStyles = {
|
|
|
223
223
|
}
|
|
224
224
|
};
|
|
225
225
|
|
|
226
|
-
var REGEXPS = [
|
|
226
|
+
var REGEXPS = [/(?:\b|\B)\n+\b/, /(?:\b|\B),\s\b/, /(?:\b|\B),+\b/];
|
|
227
227
|
|
|
228
228
|
function splitString(value) {
|
|
229
229
|
var splits = [];
|
|
230
|
-
var specialHandle = false;
|
|
230
|
+
var specialHandle = false; // eslint-disable-next-line no-restricted-syntax
|
|
231
231
|
|
|
232
232
|
for (var _iterator = _createForOfIteratorHelperLoose(REGEXPS), _step; !(_step = _iterator()).done;) {
|
|
233
233
|
var regex = _step.value;
|
|
@@ -325,6 +325,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
325
325
|
_props$isErrorLabelVi = props.isErrorLabelVisible,
|
|
326
326
|
isErrorLabelVisible = _props$isErrorLabelVi === void 0 ? false : _props$isErrorLabelVi,
|
|
327
327
|
onChange = props.onChange,
|
|
328
|
+
_props$onInputChange = props.onInputChange,
|
|
329
|
+
onInputChange = _props$onInputChange === void 0 ? null : _props$onInputChange,
|
|
328
330
|
_props$options = props.options,
|
|
329
331
|
options = _props$options === void 0 ? [] : _props$options,
|
|
330
332
|
_props$promiseOptions = props.promiseOptions,
|
|
@@ -341,7 +343,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
341
343
|
|
|
342
344
|
var preparedStyled = _extends({}, defaultStyles, customStyles, {
|
|
343
345
|
control: function control(base, state) {
|
|
344
|
-
|
|
346
|
+
var styles = customStyles.control && isFunction(customStyles.control) ? customStyles.control(base, state) : {};
|
|
347
|
+
return _extends({}, defaultStyles.control(base, state), styles, {
|
|
345
348
|
border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,
|
|
346
349
|
minHeight: minHeightInput
|
|
347
350
|
});
|
|
@@ -350,7 +353,10 @@ var TagsInput = function TagsInput(props) {
|
|
|
350
353
|
|
|
351
354
|
var config = _extends({}, props, {
|
|
352
355
|
id: elementId,
|
|
353
|
-
onChange: onChange
|
|
356
|
+
onChange: onChange
|
|
357
|
+
}, onInputChange && {
|
|
358
|
+
onInputChange: onInputChange
|
|
359
|
+
}, {
|
|
354
360
|
styles: preparedStyled,
|
|
355
361
|
components: _extends({
|
|
356
362
|
ClearIndicator: function ClearIndicator(clearIndicatorProps) {
|
|
@@ -361,12 +367,12 @@ var TagsInput = function TagsInput(props) {
|
|
|
361
367
|
}, components)
|
|
362
368
|
});
|
|
363
369
|
|
|
364
|
-
var handleAsyncRequest = function handleAsyncRequest(
|
|
365
|
-
if (!
|
|
370
|
+
var handleAsyncRequest = function handleAsyncRequest(newValue) {
|
|
371
|
+
if (!newValue.length || newValue.length < 2) {
|
|
366
372
|
return null;
|
|
367
373
|
}
|
|
368
374
|
|
|
369
|
-
return promiseOptions(
|
|
375
|
+
return promiseOptions(newValue);
|
|
370
376
|
};
|
|
371
377
|
|
|
372
378
|
var onPaste = function onPaste(e) {
|
|
@@ -391,8 +397,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
391
397
|
};
|
|
392
398
|
|
|
393
399
|
var asyncSelect = React__default.createElement(ReactAsyncSelect, Object.assign({}, config, {
|
|
394
|
-
loadOptions: function loadOptions(
|
|
395
|
-
return handleAsyncRequest(
|
|
400
|
+
loadOptions: function loadOptions(newValue) {
|
|
401
|
+
return handleAsyncRequest(newValue);
|
|
396
402
|
}
|
|
397
403
|
}));
|
|
398
404
|
var select = React__default.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-input.cjs.development.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {lineHeight, actionColor, borderRadius, gray80, errorColor, black, white} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from \"./types\";\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /\\b\\n+\\b/,\n /\\b,\\s\\b/,\n /\\b,+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = []\n\n let specialHandle = false;\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36\n } = props;\n\n const currentValue = value\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => ({\n ...defaultStyles.control(base, state),\n //@ts-ignore : TODO: update react-select\n ...(isFunction(customStyles.control) ? customStyles.control(base, state) : {}),\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput\n }),\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (value: any) => {\n if (!value.length || value.length < 2) {\n return null;\n }\n\n return promiseOptions(value);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(value) => handleAsyncRequest(value)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","isFocused","isDisabled","borderRadius","backgroundColor","minHeight","borderWidth","boxShadow","borderColor","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","splitString","value","splits","specialHandle","regex","split","length","searchSuitableOptions","pastedValue","availableOptions","searchableKeys","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","search","condition","replace","map","splitValue","find","comparableValue","trim","Boolean","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","TagsInput","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","options","promiseOptions","Promise","resolve","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","config","clearIndicatorProps","handleAsyncRequest","onPaste","e","pasteData","clipboardData","getData","pastedOptions","newInputOptions","acc","curVal","el","push","setTimeout","current","select","blur","asyncSelect","ReactAsyncSelect","loadOptions","ReactSelect","ErrorLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tags-input.cjs.development.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {\n lineHeight, actionColor, borderRadius, gray80, errorColor, black, white,\n} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from './types';\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /(?:\\b|\\B)\\n+\\b/,\n /(?:\\b|\\B),\\s\\b/,\n /(?:\\b|\\B),+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = [];\n\n let specialHandle = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n // eslint-disable-next-line @typescript-eslint/ban-types\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close\n color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n onInputChange = null,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36,\n } = props;\n\n const currentValue = value;\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => {\n const styles = (customStyles.control && isFunction(customStyles.control))\n ? customStyles.control(base, state)\n : {};\n\n return {\n ...defaultStyles.control(base, state),\n ...styles,\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput,\n };\n },\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n ...(onInputChange && {onInputChange}),\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (newValue: any) => {\n if (!newValue.length || newValue.length < 2) {\n return null;\n }\n\n return promiseOptions(newValue);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(newValue) => handleAsyncRequest(newValue)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","isFocused","isDisabled","borderRadius","backgroundColor","minHeight","borderWidth","boxShadow","borderColor","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","splitString","value","splits","specialHandle","regex","split","length","searchSuitableOptions","pastedValue","availableOptions","searchableKeys","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","search","condition","replace","map","splitValue","find","comparableValue","trim","Boolean","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","TagsInput","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","onInputChange","options","promiseOptions","Promise","resolve","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","config","clearIndicatorProps","handleAsyncRequest","newValue","onPaste","e","pasteData","clipboardData","getData","pastedOptions","newInputOptions","acc","curVal","el","push","setTimeout","current","select","blur","asyncSelect","ReactAsyncSelect","loadOptions","ReactSelect","ErrorLabel"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("react"),n=e(r),t=require("react-select"),o=e(t),i=e(require("lodash.isfunction")),l=e(require("react-select/lib/Async")),a=e(require("@propellerads/error-label")),u=require("@propellerads/icon"),c=e(require("styled-components")),s=require("@propellerads/stylevariables");function d(){return(d=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e}).apply(this,arguments)}function p(e,r){return r||(r=e.slice(0)),e.raw=r,e}function f(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}function b(){var e=p(["\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ","px;\n align-items: center;\n"]);return b=function(){return e},e}function g(){var e=p(["\n position: relative;\n"]);return g=function(){return e},e}var v=c.div(g()),h=c.div(b(),s.lineHeight),m={control:function(e,r){return d({},e,{borderRadius:s.borderRadius,backgroundColor:r.isDisabled?"#ededed":"#fff",minHeight:s.lineHeight+"px",borderWidth:1,boxShadow:"none",borderColor:r.isFocused?s.actionColor:s.gray80})},valueContainer:function(e){return d({},e,{overflow:"hidden",padding:"2px 2px 4px 2px",justifyContent:"flex-start"})},placeholder:function(){return{color:"#c0c0c0",fontWeight:100,paddingLeft:"4px",position:"absolute"}},clearIndicator:function(){return{color:"#c0c0c0",display:"inline-flex",marginRight:"4px"}},dropdownIndicator:function(){return{display:"none"}},indicatorSeparator:function(){return{display:"none"}},multiValue:function(e,r){return d({},e,{backgroundColor:r.data.isException?s.errorColor:s.actionColor,color:s.white,borderRadius:s.borderRadius/2+"px",height:"22px",display:"flex",alignItems:"center",margin:"2px 0 0 2px"})},multiValueLabel:function(e){return d({},e,{color:s.white,padding:"0 0 0 5px",fontSize:"12px",borderRadius:0,display:"inline-flex",lineHeight:"1"})},multiValueRemove:function(e,r){var n=r.data;return d({},e,{padding:0,margin:"0 4px 0 2px",backgroundColor:n.isException?s.errorColor:s.actionColor,cursor:"pointer",":hover":{backgroundColor:n.isException?s.errorColor:s.actionColor,color:"white"}})},menu:function(e){return d({},e,{margin:0,borderRadius:0,zIndex:10})},option:function(e,r){var n=r.isFocused;return{backgroundColor:n?s.actionColor:null,padding:"5px 10px",fontSize:"14px",color:n?s.white:s.black}},input:function(e){return d({},e,{height:"16px"})}},x=[
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("react"),n=e(r),t=require("react-select"),o=e(t),i=e(require("lodash.isfunction")),l=e(require("react-select/lib/Async")),a=e(require("@propellerads/error-label")),u=require("@propellerads/icon"),c=e(require("styled-components")),s=require("@propellerads/stylevariables");function d(){return(d=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e}).apply(this,arguments)}function p(e,r){return r||(r=e.slice(0)),e.raw=r,e}function f(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}function b(){var e=p(["\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ","px;\n align-items: center;\n"]);return b=function(){return e},e}function g(){var e=p(["\n position: relative;\n"]);return g=function(){return e},e}var v=c.div(g()),h=c.div(b(),s.lineHeight),m={control:function(e,r){return d({},e,{borderRadius:s.borderRadius,backgroundColor:r.isDisabled?"#ededed":"#fff",minHeight:s.lineHeight+"px",borderWidth:1,boxShadow:"none",borderColor:r.isFocused?s.actionColor:s.gray80})},valueContainer:function(e){return d({},e,{overflow:"hidden",padding:"2px 2px 4px 2px",justifyContent:"flex-start"})},placeholder:function(){return{color:"#c0c0c0",fontWeight:100,paddingLeft:"4px",position:"absolute"}},clearIndicator:function(){return{color:"#c0c0c0",display:"inline-flex",marginRight:"4px"}},dropdownIndicator:function(){return{display:"none"}},indicatorSeparator:function(){return{display:"none"}},multiValue:function(e,r){return d({},e,{backgroundColor:r.data.isException?s.errorColor:s.actionColor,color:s.white,borderRadius:s.borderRadius/2+"px",height:"22px",display:"flex",alignItems:"center",margin:"2px 0 0 2px"})},multiValueLabel:function(e){return d({},e,{color:s.white,padding:"0 0 0 5px",fontSize:"12px",borderRadius:0,display:"inline-flex",lineHeight:"1"})},multiValueRemove:function(e,r){var n=r.data;return d({},e,{padding:0,margin:"0 4px 0 2px",backgroundColor:n.isException?s.errorColor:s.actionColor,cursor:"pointer",":hover":{backgroundColor:n.isException?s.errorColor:s.actionColor,color:"white"}})},menu:function(e){return d({},e,{margin:0,borderRadius:0,zIndex:10})},option:function(e,r){var n=r.isFocused;return{backgroundColor:n?s.actionColor:null,padding:"5px 10px",fontSize:"14px",color:n?s.white:s.black}},input:function(e){return d({},e,{height:"16px"})}},x=[/(?:\b|\B)\n+\b/,/(?:\b|\B),\s\b/,/(?:\b|\B),+\b/],y=function(e){var r=e.elementId,t=e.getStyles,o=e.innerProps,i=o.ref,l=function(e,r){if(null==e)return{};var n,t,o={},i=Object.keys(e);for(t=0;t<i.length;t++)r.indexOf(n=i[t])>=0||(o[n]=e[n]);return o}(o,["ref"]);return n.createElement("div",Object.assign({},l,{ref:i,style:t("clearIndicator",e),id:r+"-clear"}),n.createElement(u.Close,{color:u.COLOR.GRAY_DARK,size:u.SIZE.MEDIUM_SMALL}))};Object.defineProperty(exports,"components",{enumerable:!0,get:function(){return t.components}}),exports.default=function(e){var t=r.useRef(null),u=e.components,c=void 0===u?{}:u,s=e.customStyles,p=void 0===s?{}:s,b=e.elementId,g=e.errors,C=void 0===g?[]:g,I=e.isAsync,w=void 0!==I&&I,O=e.isErrorLabelVisible,E=void 0!==O&&O,S=e.onChange,j=e.onInputChange,R=void 0===j?null:j,A=e.options,L=void 0===A?[]:A,q=e.promiseOptions,H=void 0===q?function(){return Promise.resolve()}:q,k=e.searchableKeys,P=void 0===k?["label"]:k,D=e.value,M=e.minHeightInput,z=void 0===M?36:M,B=void 0===D?[]:D,V=d({},m,p,{control:function(e,r){var n=p.control&&i(p.control)?p.control(e,r):{};return d({},m.control(e,r),n,{border:C.length?"1px solid #ed3030":m.control(e,r).border,minHeight:z})}}),_=d({},e,{id:b,onChange:S},R&&{onInputChange:R},{styles:V,components:d({ClearIndicator:function(e){return n.createElement(y,Object.assign({},e,{elementId:b}))}},c)}),F=n.createElement(l,Object.assign({},_,{loadOptions:function(e){return function(e){return!e.length||e.length<2?null:H(e)}(e)}})),K=n.createElement("div",{onPaste:function(e){var r=function(e,r,n){var t=function(e){for(var r,n=[],t=!1,o=function(e,r){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,r){if(e){if("string"==typeof e)return f(e,void 0);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,void 0):void 0}}(e))){n&&(e=n);var t=0;return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}(x);!((r=o()).done||(n=e.split(r.value)).length>1););return 1===n.length&&(t=(n=e.split(/\b\s+\b/)).length>1),{splits:n,specialHandle:t}}(e),o=t.splits;if(t.specialHandle){var i=o.join(" ").toLowerCase();return r.sort((function(e,r){return e.label.length>r.label.length?-1:e.label.length<r.label.length?1:0})).filter((function(e){return n.reduce((function(r,n){var t=String(e[n]).toLowerCase(),o=-1!==i.search(t);return o&&(i=i.replace(t,"")),r||o}),!1)}))}return o.map((function(e){return r.find((function(r){var t=e.trim().toLowerCase();return n.reduce((function(e,n){var o=String(r[n]).toLowerCase();return e||o===t}),!1)}))})).filter(Boolean)}(e.clipboardData.getData("text/plain"),L,P),n=r.reduce((function(e,r){return e.find((function(e){return e.value===r.value}))||e.push(r),e}),B);0!==r.length&&(S(n),setTimeout((function(){t.current.select.blur()}),0))}},n.createElement(o,Object.assign({},_,{ref:t,options:L})));return n.createElement(v,null,w?F:K,C&&C.length>0&&E&&n.createElement(h,null,n.createElement(a,{elementId:b,errors:C})))};
|
|
2
2
|
//# sourceMappingURL=tags-input.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-input.cjs.production.min.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {lineHeight, actionColor, borderRadius, gray80, errorColor, black, white} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from \"./types\";\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /\\b\\n+\\b/,\n /\\b,\\s\\b/,\n /\\b,+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = []\n\n let specialHandle = false;\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36\n } = props;\n\n const currentValue = value\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => ({\n ...defaultStyles.control(base, state),\n //@ts-ignore : TODO: update react-select\n ...(isFunction(customStyles.control) ? customStyles.control(base, state) : {}),\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput\n }),\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (value: any) => {\n if (!value.length || value.length < 2) {\n return null;\n }\n\n return promiseOptions(value);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(value) => handleAsyncRequest(value)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","borderRadius","backgroundColor","isDisabled","minHeight","borderWidth","boxShadow","borderColor","isFocused","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","options","promiseOptions","Promise","resolve","searchableKeys","value","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","length","config","clearIndicatorProps","asyncSelect","ReactAsyncSelect","loadOptions","handleAsyncRequest","select","onPaste","e","pastedOptions","pastedValue","availableOptions","splits","specialHandle","split","splitString","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","condition","search","replace","map","splitValue","find","comparableValue","trim","Boolean","searchSuitableOptions","clipboardData","getData","newInputOptions","acc","curVal","el","push","setTimeout","current","blur","ReactSelect","ErrorLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tags-input.cjs.production.min.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {\n lineHeight, actionColor, borderRadius, gray80, errorColor, black, white,\n} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from './types';\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /(?:\\b|\\B)\\n+\\b/,\n /(?:\\b|\\B),\\s\\b/,\n /(?:\\b|\\B),+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = [];\n\n let specialHandle = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n // eslint-disable-next-line @typescript-eslint/ban-types\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close\n color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n onInputChange = null,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36,\n } = props;\n\n const currentValue = value;\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => {\n const styles = (customStyles.control && isFunction(customStyles.control))\n ? customStyles.control(base, state)\n : {};\n\n return {\n ...defaultStyles.control(base, state),\n ...styles,\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput,\n };\n },\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n ...(onInputChange && {onInputChange}),\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (newValue: any) => {\n if (!newValue.length || newValue.length < 2) {\n return null;\n }\n\n return promiseOptions(newValue);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(newValue) => handleAsyncRequest(newValue)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","borderRadius","backgroundColor","isDisabled","minHeight","borderWidth","boxShadow","borderColor","isFocused","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","onInputChange","options","promiseOptions","Promise","resolve","searchableKeys","value","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","length","config","clearIndicatorProps","asyncSelect","ReactAsyncSelect","loadOptions","newValue","handleAsyncRequest","select","onPaste","e","pastedOptions","pastedValue","availableOptions","splits","specialHandle","split","splitString","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","condition","search","replace","map","splitValue","find","comparableValue","trim","Boolean","searchSuitableOptions","clipboardData","getData","newInputOptions","acc","curVal","el","push","setTimeout","current","blur","ReactSelect","ErrorLabel"],"mappings":"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"}
|
package/dist/tags-input.esm.js
CHANGED
|
@@ -216,11 +216,11 @@ var defaultStyles = {
|
|
|
216
216
|
}
|
|
217
217
|
};
|
|
218
218
|
|
|
219
|
-
var REGEXPS = [
|
|
219
|
+
var REGEXPS = [/(?:\b|\B)\n+\b/, /(?:\b|\B),\s\b/, /(?:\b|\B),+\b/];
|
|
220
220
|
|
|
221
221
|
function splitString(value) {
|
|
222
222
|
var splits = [];
|
|
223
|
-
var specialHandle = false;
|
|
223
|
+
var specialHandle = false; // eslint-disable-next-line no-restricted-syntax
|
|
224
224
|
|
|
225
225
|
for (var _iterator = _createForOfIteratorHelperLoose(REGEXPS), _step; !(_step = _iterator()).done;) {
|
|
226
226
|
var regex = _step.value;
|
|
@@ -318,6 +318,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
318
318
|
_props$isErrorLabelVi = props.isErrorLabelVisible,
|
|
319
319
|
isErrorLabelVisible = _props$isErrorLabelVi === void 0 ? false : _props$isErrorLabelVi,
|
|
320
320
|
onChange = props.onChange,
|
|
321
|
+
_props$onInputChange = props.onInputChange,
|
|
322
|
+
onInputChange = _props$onInputChange === void 0 ? null : _props$onInputChange,
|
|
321
323
|
_props$options = props.options,
|
|
322
324
|
options = _props$options === void 0 ? [] : _props$options,
|
|
323
325
|
_props$promiseOptions = props.promiseOptions,
|
|
@@ -334,7 +336,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
334
336
|
|
|
335
337
|
var preparedStyled = _extends({}, defaultStyles, customStyles, {
|
|
336
338
|
control: function control(base, state) {
|
|
337
|
-
|
|
339
|
+
var styles = customStyles.control && isFunction(customStyles.control) ? customStyles.control(base, state) : {};
|
|
340
|
+
return _extends({}, defaultStyles.control(base, state), styles, {
|
|
338
341
|
border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,
|
|
339
342
|
minHeight: minHeightInput
|
|
340
343
|
});
|
|
@@ -343,7 +346,10 @@ var TagsInput = function TagsInput(props) {
|
|
|
343
346
|
|
|
344
347
|
var config = _extends({}, props, {
|
|
345
348
|
id: elementId,
|
|
346
|
-
onChange: onChange
|
|
349
|
+
onChange: onChange
|
|
350
|
+
}, onInputChange && {
|
|
351
|
+
onInputChange: onInputChange
|
|
352
|
+
}, {
|
|
347
353
|
styles: preparedStyled,
|
|
348
354
|
components: _extends({
|
|
349
355
|
ClearIndicator: function ClearIndicator(clearIndicatorProps) {
|
|
@@ -354,12 +360,12 @@ var TagsInput = function TagsInput(props) {
|
|
|
354
360
|
}, components)
|
|
355
361
|
});
|
|
356
362
|
|
|
357
|
-
var handleAsyncRequest = function handleAsyncRequest(
|
|
358
|
-
if (!
|
|
363
|
+
var handleAsyncRequest = function handleAsyncRequest(newValue) {
|
|
364
|
+
if (!newValue.length || newValue.length < 2) {
|
|
359
365
|
return null;
|
|
360
366
|
}
|
|
361
367
|
|
|
362
|
-
return promiseOptions(
|
|
368
|
+
return promiseOptions(newValue);
|
|
363
369
|
};
|
|
364
370
|
|
|
365
371
|
var onPaste = function onPaste(e) {
|
|
@@ -384,8 +390,8 @@ var TagsInput = function TagsInput(props) {
|
|
|
384
390
|
};
|
|
385
391
|
|
|
386
392
|
var asyncSelect = React.createElement(ReactAsyncSelect, Object.assign({}, config, {
|
|
387
|
-
loadOptions: function loadOptions(
|
|
388
|
-
return handleAsyncRequest(
|
|
393
|
+
loadOptions: function loadOptions(newValue) {
|
|
394
|
+
return handleAsyncRequest(newValue);
|
|
389
395
|
}
|
|
390
396
|
}));
|
|
391
397
|
var select = React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-input.esm.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {lineHeight, actionColor, borderRadius, gray80, errorColor, black, white} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from \"./types\";\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /\\b\\n+\\b/,\n /\\b,\\s\\b/,\n /\\b,+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = []\n\n let specialHandle = false;\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36\n } = props;\n\n const currentValue = value\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => ({\n ...defaultStyles.control(base, state),\n //@ts-ignore : TODO: update react-select\n ...(isFunction(customStyles.control) ? customStyles.control(base, state) : {}),\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput\n }),\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (value: any) => {\n if (!value.length || value.length < 2) {\n return null;\n }\n\n return promiseOptions(value);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(value) => handleAsyncRequest(value)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","isFocused","isDisabled","borderRadius","backgroundColor","minHeight","borderWidth","boxShadow","borderColor","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","splitString","value","splits","specialHandle","regex","split","length","searchSuitableOptions","pastedValue","availableOptions","searchableKeys","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","search","condition","replace","map","splitValue","find","comparableValue","trim","Boolean","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","TagsInput","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","options","promiseOptions","Promise","resolve","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","config","clearIndicatorProps","handleAsyncRequest","onPaste","e","pasteData","clipboardData","getData","pastedOptions","newInputOptions","acc","curVal","el","push","setTimeout","current","select","blur","asyncSelect","ReactAsyncSelect","loadOptions","ReactSelect","ErrorLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tags-input.esm.js","sources":["../src/style.tsx","../src/index.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport {\n lineHeight, actionColor, borderRadius, gray80, errorColor, black, white,\n} from '@propellerads/stylevariables';\n\nconst StyledTagsInput = styled.div`\n position: relative;\n`;\n\nconst TagsInputErrors = styled.div`\n position: absolute;\n display: flex;\n flex-direction: row;\n right: 1px;\n top: 0;\n height: ${lineHeight}px;\n align-items: center;\n`;\n\nconst defaultStyles = {\n control: (styles, {isFocused, isDisabled}) => ({\n ...styles,\n borderRadius,\n backgroundColor: isDisabled ? '#ededed' : '#fff',\n minHeight: `${lineHeight}px`,\n borderWidth: 1,\n boxShadow: 'none',\n borderColor: isFocused ? actionColor : gray80,\n }),\n valueContainer: (styles) => ({\n ...styles,\n overflow: 'hidden',\n padding: '2px 2px 4px 2px',\n justifyContent: 'flex-start',\n }),\n placeholder: () => ({\n color: '#c0c0c0',\n fontWeight: 100,\n paddingLeft: '4px',\n position: 'absolute',\n }),\n clearIndicator: () => ({\n color: '#c0c0c0',\n display: 'inline-flex',\n marginRight: '4px',\n }),\n dropdownIndicator: () => ({\n display: 'none',\n }),\n indicatorSeparator: () => ({\n display: 'none',\n }),\n multiValue: (styles, {data}) => ({\n ...styles,\n backgroundColor: data.isException ? errorColor : actionColor,\n color: white,\n borderRadius: `${borderRadius / 2}px`,\n height: '22px',\n display: 'flex',\n alignItems: 'center',\n margin: '2px 0 0 2px',\n }),\n multiValueLabel: (styles) => ({\n ...styles,\n color: white,\n padding: '0 0 0 5px',\n fontSize: '12px',\n borderRadius: 0,\n display: 'inline-flex',\n lineHeight: '1',\n }),\n multiValueRemove: (styles, {data}) => ({\n ...styles,\n padding: 0,\n margin: '0 4px 0 2px',\n backgroundColor: data.isException ? errorColor : actionColor,\n cursor: 'pointer',\n ':hover': {\n backgroundColor: data.isException ? errorColor : actionColor,\n color: 'white',\n },\n }),\n menu: (styles) => ({\n ...styles,\n margin: 0,\n borderRadius: 0,\n zIndex: 10,\n }),\n option: (styles, {isFocused}) => ({\n backgroundColor: isFocused ? actionColor : null,\n padding: '5px 10px',\n fontSize: '14px',\n color: isFocused ? white : black,\n }),\n input: (styles) => ({\n ...styles,\n height: '16px',\n }),\n};\n\nexport {defaultStyles, StyledTagsInput, TagsInputErrors};\n","import React, {useRef} from 'react';\nimport ReactSelect, {components as reactSelectComponents} from 'react-select';\nimport isFunction from 'lodash.isfunction';\nimport ReactAsyncSelect from 'react-select/lib/Async';\nimport ErrorLabel from '@propellerads/error-label';\nimport {Close, SIZE, COLOR} from '@propellerads/icon';\n\nimport {TagsInputProps} from './types';\nimport {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';\n\n// regexps by priority\nconst REGEXPS = [\n /(?:\\b|\\B)\\n+\\b/,\n /(?:\\b|\\B),\\s\\b/,\n /(?:\\b|\\B),+\\b/,\n];\n\ninterface SplitStringReturnValue {\n splits: string[]\n specialHandle: boolean\n}\n\nfunction splitString(value: string): SplitStringReturnValue {\n let splits: string[] = [];\n\n let specialHandle = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const regex of REGEXPS) {\n splits = value.split(regex);\n if (splits.length > 1) {\n break;\n }\n }\n\n // special case. Need handle in special way\n if (splits.length === 1) {\n splits = value.split(/\\b\\s+\\b/);\n specialHandle = splits.length > 1;\n }\n\n return {\n splits,\n specialHandle,\n };\n}\n\nfunction searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {\n const {splits, specialHandle} = splitString(pastedValue);\n\n if (specialHandle) {\n let rawPastedString = splits.join(' ')\n .toLowerCase();\n\n return availableOptions\n .sort((firstEl, secondEl) => {\n if (firstEl.label.length > secondEl.label.length) {\n return -1;\n }\n if (firstEl.label.length < secondEl.label.length) {\n return 1;\n }\n\n return 0;\n })\n .filter((option) => searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const position = rawPastedString.search(optionValue);\n const condition = position !== -1;\n if (condition) {\n rawPastedString = rawPastedString.replace(optionValue, '');\n }\n\n return prevValue || condition;\n }, false));\n }\n\n return splits.map((splitValue) => availableOptions.find((option) => {\n const comparableValue = splitValue.trim().toLowerCase();\n\n return searchableKeys.reduce((prevValue, currValue) => {\n const optionValue = String(option[currValue])\n .toLowerCase();\n const condition = optionValue === comparableValue;\n\n return prevValue || condition;\n }, false);\n }))\n .filter(Boolean);\n}\n\ninterface ClearIndicatorProps {\n // eslint-disable-next-line @typescript-eslint/ban-types\n getStyles: (clearIndicator: string, props: any) => {},\n innerProps: {\n ref: React.Ref<HTMLDivElement>\n },\n elementId: string,\n}\n\nconst ClearIndicator = (props: ClearIndicatorProps) => {\n const {\n elementId,\n getStyles,\n innerProps: {\n ref,\n ...restInnerProps\n },\n } = props;\n\n return (\n <div\n {...restInnerProps}\n ref={ref}\n style={getStyles('clearIndicator', props)}\n id={`${elementId}-clear`}\n >\n <Close\n color={COLOR.GRAY_DARK}\n size={SIZE.MEDIUM_SMALL}\n />\n </div>\n );\n};\n\nconst TagsInput = (props: TagsInputProps) => {\n const reactSelectElement = useRef<any>(null);\n\n const {\n components = {},\n customStyles = {},\n elementId,\n errors = [],\n isAsync = false,\n isErrorLabelVisible = false,\n onChange,\n onInputChange = null,\n options = [],\n promiseOptions = () => Promise.resolve(),\n searchableKeys = [\n 'label',\n ],\n value = [],\n isClearable = true,\n isDisabled = false,\n isLoading = false,\n isRtl = false,\n isMulti = true,\n isSearchable = true,\n cacheOptions = false,\n placeholder = 'Start typing...',\n noOptionsMessage = () => 'No options...',\n loadingMessage = () => 'Loading...',\n minHeightInput = 36,\n } = props;\n\n const currentValue = value;\n\n const preparedStyled = {\n ...defaultStyles,\n ...customStyles,\n control: (base, state) => {\n const styles = (customStyles.control && isFunction(customStyles.control))\n ? customStyles.control(base, state)\n : {};\n\n return {\n ...defaultStyles.control(base, state),\n ...styles,\n border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,\n minHeight: minHeightInput,\n };\n },\n };\n\n const config = {\n ...props,\n id: elementId,\n onChange,\n ...(onInputChange && {onInputChange}),\n styles: preparedStyled,\n components: {\n ClearIndicator: (clearIndicatorProps) => (\n <ClearIndicator\n {...clearIndicatorProps}\n elementId={elementId}\n />\n ),\n ...components,\n },\n };\n\n const handleAsyncRequest = (newValue: any) => {\n if (!newValue.length || newValue.length < 2) {\n return null;\n }\n\n return promiseOptions(newValue);\n };\n\n const onPaste = (e) => {\n const pasteData = e.clipboardData.getData('text/plain');\n\n const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);\n\n const newInputOptions = pastedOptions.reduce((acc, curVal) => {\n if (!acc.find((el) => el.value === curVal.value)) {\n acc.push(curVal);\n }\n\n return acc;\n }, currentValue);\n\n if (pastedOptions.length !== 0) {\n onChange(newInputOptions);\n setTimeout(() => {\n reactSelectElement.current.select.blur();\n }, 0);\n }\n };\n\n const asyncSelect = (\n <ReactAsyncSelect\n {...config}\n loadOptions={(newValue) => handleAsyncRequest(newValue)}\n />\n );\n\n const select = (\n <div onPaste={onPaste}>\n <ReactSelect\n {...config}\n ref={reactSelectElement}\n options={options}\n />\n </div>\n );\n\n return (\n <StyledTagsInput>\n {isAsync ? asyncSelect : select}\n {errors && errors.length > 0 && isErrorLabelVisible && (\n <TagsInputErrors>\n <ErrorLabel\n elementId={elementId}\n errors={errors}\n />\n </TagsInputErrors>\n )}\n </StyledTagsInput>\n );\n};\n\nfunction customChecker(props, propName, component) {\n const {[propName]: propValue} = props;\n if (typeof propValue !== 'function') {\n return new Error(`Invalid prop \"${propName}\" passed to ${component}`);\n }\n\n const value = propValue();\n if (typeof value !== 'string' && !React.isValidElement(value)) {\n // eslint-disable-next-line max-len\n return new Error(`Invalid prop \"${propName}\" passed to ${component}. Function should return \"string\" or \"react.Node\"`);\n }\n\n return null;\n}\n\nexport {reactSelectComponents as components};\n\nexport default TagsInput;\n"],"names":["StyledTagsInput","styled","div","TagsInputErrors","lineHeight","defaultStyles","control","styles","isFocused","isDisabled","borderRadius","backgroundColor","minHeight","borderWidth","boxShadow","borderColor","actionColor","gray80","valueContainer","overflow","padding","justifyContent","placeholder","color","fontWeight","paddingLeft","position","clearIndicator","display","marginRight","dropdownIndicator","indicatorSeparator","multiValue","data","isException","errorColor","white","height","alignItems","margin","multiValueLabel","fontSize","multiValueRemove","cursor","menu","zIndex","option","black","input","REGEXPS","splitString","value","splits","specialHandle","regex","split","length","searchSuitableOptions","pastedValue","availableOptions","searchableKeys","rawPastedString","join","toLowerCase","sort","firstEl","secondEl","label","filter","reduce","prevValue","currValue","optionValue","String","search","condition","replace","map","splitValue","find","comparableValue","trim","Boolean","ClearIndicator","props","elementId","getStyles","innerProps","ref","restInnerProps","React","style","id","Close","COLOR","GRAY_DARK","size","SIZE","MEDIUM_SMALL","TagsInput","reactSelectElement","useRef","components","customStyles","errors","isAsync","isErrorLabelVisible","onChange","onInputChange","options","promiseOptions","Promise","resolve","minHeightInput","currentValue","preparedStyled","base","state","isFunction","border","config","clearIndicatorProps","handleAsyncRequest","newValue","onPaste","e","pasteData","clipboardData","getData","pastedOptions","newInputOptions","acc","curVal","el","push","setTimeout","current","select","blur","asyncSelect","ReactAsyncSelect","loadOptions","ReactSelect","ErrorLabel"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { components as reactSelectComponents } from 'react-select';
|
|
2
3
|
export declare type Option = {
|
|
3
4
|
value: number | string;
|
|
4
5
|
label: string;
|
|
5
6
|
};
|
|
6
7
|
export interface TagsInputProps {
|
|
7
|
-
components?:
|
|
8
|
+
components?: reactSelectComponents;
|
|
8
9
|
customStyles?: {
|
|
9
|
-
control?: () => void;
|
|
10
|
+
control?: (value?: any, value2?: any) => void;
|
|
10
11
|
};
|
|
11
12
|
elementId: string;
|
|
12
13
|
errors?: string[];
|
|
13
14
|
isAsync?: boolean;
|
|
14
15
|
isErrorLabelVisible?: boolean;
|
|
15
16
|
onChange: (newOptionsValue: Option[]) => void;
|
|
17
|
+
onInputChange: ((inputValue: string) => void) | null;
|
|
16
18
|
options?: Option[];
|
|
17
19
|
promiseOptions?: (value: any) => Promise<any>;
|
|
18
20
|
searchableKeys?: string[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@propellerads/tags-input",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": "https://github.com/propellerads/ui-components",
|
|
6
6
|
"author": "i.pasyuk@propellerads.net",
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"typings": "dist/index.d.ts",
|
|
18
18
|
"files": [
|
|
19
|
-
"dist"
|
|
20
|
-
"src"
|
|
19
|
+
"dist"
|
|
21
20
|
],
|
|
22
21
|
"engines": {
|
|
23
22
|
"node": ">=10"
|
|
@@ -41,5 +40,5 @@
|
|
|
41
40
|
"tslib": "^2.0.1",
|
|
42
41
|
"typescript": "^3.9.7"
|
|
43
42
|
},
|
|
44
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "920090dd976c8c74d2a7a015ed16cac1cad6b9f4"
|
|
45
44
|
}
|
package/src/index.tsx
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import React, {useRef} from 'react';
|
|
2
|
-
import ReactSelect, {components as reactSelectComponents} from 'react-select';
|
|
3
|
-
import isFunction from 'lodash.isfunction';
|
|
4
|
-
import ReactAsyncSelect from 'react-select/lib/Async';
|
|
5
|
-
import ErrorLabel from '@propellerads/error-label';
|
|
6
|
-
import {Close, SIZE, COLOR} from '@propellerads/icon';
|
|
7
|
-
|
|
8
|
-
import {TagsInputProps} from "./types";
|
|
9
|
-
import {defaultStyles, StyledTagsInput, TagsInputErrors} from './style';
|
|
10
|
-
|
|
11
|
-
// regexps by priority
|
|
12
|
-
const REGEXPS = [
|
|
13
|
-
/\b\n+\b/,
|
|
14
|
-
/\b,\s\b/,
|
|
15
|
-
/\b,+\b/,
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
interface SplitStringReturnValue {
|
|
19
|
-
splits: string[]
|
|
20
|
-
specialHandle: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function splitString(value: string): SplitStringReturnValue {
|
|
24
|
-
let splits: string[] = []
|
|
25
|
-
|
|
26
|
-
let specialHandle = false;
|
|
27
|
-
for (const regex of REGEXPS) {
|
|
28
|
-
splits = value.split(regex);
|
|
29
|
-
if (splits.length > 1) {
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// special case. Need handle in special way
|
|
35
|
-
if (splits.length === 1) {
|
|
36
|
-
splits = value.split(/\b\s+\b/);
|
|
37
|
-
specialHandle = splits.length > 1;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
splits,
|
|
42
|
-
specialHandle,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function searchSuitableOptions(pastedValue, availableOptions, searchableKeys) {
|
|
47
|
-
const {splits, specialHandle} = splitString(pastedValue);
|
|
48
|
-
|
|
49
|
-
if (specialHandle) {
|
|
50
|
-
let rawPastedString = splits.join(' ')
|
|
51
|
-
.toLowerCase();
|
|
52
|
-
|
|
53
|
-
return availableOptions
|
|
54
|
-
.sort((firstEl, secondEl) => {
|
|
55
|
-
if (firstEl.label.length > secondEl.label.length) {
|
|
56
|
-
return -1;
|
|
57
|
-
}
|
|
58
|
-
if (firstEl.label.length < secondEl.label.length) {
|
|
59
|
-
return 1;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return 0;
|
|
63
|
-
})
|
|
64
|
-
.filter((option) => searchableKeys.reduce((prevValue, currValue) => {
|
|
65
|
-
const optionValue = String(option[currValue])
|
|
66
|
-
.toLowerCase();
|
|
67
|
-
const position = rawPastedString.search(optionValue);
|
|
68
|
-
const condition = position !== -1;
|
|
69
|
-
if (condition) {
|
|
70
|
-
rawPastedString = rawPastedString.replace(optionValue, '');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return prevValue || condition;
|
|
74
|
-
}, false));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return splits.map((splitValue) => availableOptions.find((option) => {
|
|
78
|
-
const comparableValue = splitValue.trim().toLowerCase();
|
|
79
|
-
|
|
80
|
-
return searchableKeys.reduce((prevValue, currValue) => {
|
|
81
|
-
const optionValue = String(option[currValue])
|
|
82
|
-
.toLowerCase();
|
|
83
|
-
const condition = optionValue === comparableValue;
|
|
84
|
-
|
|
85
|
-
return prevValue || condition;
|
|
86
|
-
}, false);
|
|
87
|
-
}))
|
|
88
|
-
.filter(Boolean);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
interface ClearIndicatorProps {
|
|
92
|
-
getStyles: (clearIndicator: string, props: any) => {},
|
|
93
|
-
innerProps: {
|
|
94
|
-
ref: React.Ref<HTMLDivElement>
|
|
95
|
-
},
|
|
96
|
-
elementId: string,
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const ClearIndicator = (props: ClearIndicatorProps) => {
|
|
100
|
-
const {
|
|
101
|
-
elementId,
|
|
102
|
-
getStyles,
|
|
103
|
-
innerProps: {
|
|
104
|
-
ref,
|
|
105
|
-
...restInnerProps
|
|
106
|
-
},
|
|
107
|
-
} = props;
|
|
108
|
-
|
|
109
|
-
return (
|
|
110
|
-
<div
|
|
111
|
-
{...restInnerProps}
|
|
112
|
-
ref={ref}
|
|
113
|
-
style={getStyles('clearIndicator', props)}
|
|
114
|
-
id={`${elementId}-clear`}
|
|
115
|
-
>
|
|
116
|
-
<Close color={COLOR.GRAY_DARK}
|
|
117
|
-
size={SIZE.MEDIUM_SMALL}
|
|
118
|
-
/>
|
|
119
|
-
</div>
|
|
120
|
-
);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const TagsInput = (props: TagsInputProps) => {
|
|
124
|
-
const reactSelectElement = useRef<any>(null);
|
|
125
|
-
|
|
126
|
-
const {
|
|
127
|
-
components = {},
|
|
128
|
-
customStyles = {},
|
|
129
|
-
elementId,
|
|
130
|
-
errors = [],
|
|
131
|
-
isAsync = false,
|
|
132
|
-
isErrorLabelVisible = false,
|
|
133
|
-
onChange,
|
|
134
|
-
options = [],
|
|
135
|
-
promiseOptions = () => Promise.resolve(),
|
|
136
|
-
searchableKeys = [
|
|
137
|
-
'label',
|
|
138
|
-
],
|
|
139
|
-
value = [],
|
|
140
|
-
isClearable = true,
|
|
141
|
-
isDisabled = false,
|
|
142
|
-
isLoading = false,
|
|
143
|
-
isRtl = false,
|
|
144
|
-
isMulti = true,
|
|
145
|
-
isSearchable = true,
|
|
146
|
-
cacheOptions = false,
|
|
147
|
-
placeholder = 'Start typing...',
|
|
148
|
-
noOptionsMessage = () => 'No options...',
|
|
149
|
-
loadingMessage = () => 'Loading...',
|
|
150
|
-
minHeightInput = 36
|
|
151
|
-
} = props;
|
|
152
|
-
|
|
153
|
-
const currentValue = value
|
|
154
|
-
|
|
155
|
-
const preparedStyled = {
|
|
156
|
-
...defaultStyles,
|
|
157
|
-
...customStyles,
|
|
158
|
-
control: (base, state) => ({
|
|
159
|
-
...defaultStyles.control(base, state),
|
|
160
|
-
//@ts-ignore : TODO: update react-select
|
|
161
|
-
...(isFunction(customStyles.control) ? customStyles.control(base, state) : {}),
|
|
162
|
-
border: errors.length ? '1px solid #ed3030' : defaultStyles.control(base, state).border,
|
|
163
|
-
minHeight: minHeightInput
|
|
164
|
-
}),
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
const config = {
|
|
168
|
-
...props,
|
|
169
|
-
id: elementId,
|
|
170
|
-
onChange,
|
|
171
|
-
styles: preparedStyled,
|
|
172
|
-
components: {
|
|
173
|
-
ClearIndicator: (clearIndicatorProps) => (
|
|
174
|
-
<ClearIndicator
|
|
175
|
-
{...clearIndicatorProps}
|
|
176
|
-
elementId={elementId}
|
|
177
|
-
/>
|
|
178
|
-
),
|
|
179
|
-
...components,
|
|
180
|
-
},
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const handleAsyncRequest = (value: any) => {
|
|
184
|
-
if (!value.length || value.length < 2) {
|
|
185
|
-
return null;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return promiseOptions(value);
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
const onPaste = (e) => {
|
|
192
|
-
const pasteData = e.clipboardData.getData('text/plain');
|
|
193
|
-
|
|
194
|
-
const pastedOptions = searchSuitableOptions(pasteData, options, searchableKeys);
|
|
195
|
-
|
|
196
|
-
const newInputOptions = pastedOptions.reduce((acc, curVal) => {
|
|
197
|
-
if (!acc.find((el) => el.value === curVal.value)) {
|
|
198
|
-
acc.push(curVal);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return acc;
|
|
202
|
-
}, currentValue);
|
|
203
|
-
|
|
204
|
-
if (pastedOptions.length !== 0) {
|
|
205
|
-
onChange(newInputOptions);
|
|
206
|
-
setTimeout(() => {
|
|
207
|
-
reactSelectElement.current.select.blur();
|
|
208
|
-
}, 0);
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
const asyncSelect = (
|
|
213
|
-
<ReactAsyncSelect
|
|
214
|
-
{...config}
|
|
215
|
-
loadOptions={(value) => handleAsyncRequest(value)}
|
|
216
|
-
/>
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
const select = (
|
|
220
|
-
<div onPaste={onPaste}>
|
|
221
|
-
<ReactSelect
|
|
222
|
-
{...config}
|
|
223
|
-
ref={reactSelectElement}
|
|
224
|
-
options={options}
|
|
225
|
-
/>
|
|
226
|
-
</div>
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
return (
|
|
230
|
-
<StyledTagsInput>
|
|
231
|
-
{isAsync ? asyncSelect : select}
|
|
232
|
-
{errors && errors.length > 0 && isErrorLabelVisible && (
|
|
233
|
-
<TagsInputErrors>
|
|
234
|
-
<ErrorLabel
|
|
235
|
-
elementId={elementId}
|
|
236
|
-
errors={errors}
|
|
237
|
-
/>
|
|
238
|
-
</TagsInputErrors>
|
|
239
|
-
)}
|
|
240
|
-
</StyledTagsInput>
|
|
241
|
-
);
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
function customChecker(props, propName, component) {
|
|
245
|
-
const {[propName]: propValue} = props;
|
|
246
|
-
if (typeof propValue !== 'function') {
|
|
247
|
-
return new Error(`Invalid prop "${propName}" passed to ${component}`);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const value = propValue();
|
|
251
|
-
if (typeof value !== 'string' && !React.isValidElement(value)) {
|
|
252
|
-
// eslint-disable-next-line max-len
|
|
253
|
-
return new Error(`Invalid prop "${propName}" passed to ${component}. Function should return "string" or "react.Node"`);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
return null;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
export {reactSelectComponents as components};
|
|
260
|
-
|
|
261
|
-
export default TagsInput;
|
package/src/style.tsx
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import styled from 'styled-components';
|
|
2
|
-
import {lineHeight, actionColor, borderRadius, gray80, errorColor, black, white} from '@propellerads/stylevariables';
|
|
3
|
-
|
|
4
|
-
const StyledTagsInput = styled.div`
|
|
5
|
-
position: relative;
|
|
6
|
-
`;
|
|
7
|
-
|
|
8
|
-
const TagsInputErrors = styled.div`
|
|
9
|
-
position: absolute;
|
|
10
|
-
display: flex;
|
|
11
|
-
flex-direction: row;
|
|
12
|
-
right: 1px;
|
|
13
|
-
top: 0;
|
|
14
|
-
height: ${lineHeight}px;
|
|
15
|
-
align-items: center;
|
|
16
|
-
`;
|
|
17
|
-
|
|
18
|
-
const defaultStyles = {
|
|
19
|
-
control: (styles, {isFocused, isDisabled}) => ({
|
|
20
|
-
...styles,
|
|
21
|
-
borderRadius,
|
|
22
|
-
backgroundColor: isDisabled ? '#ededed' : '#fff',
|
|
23
|
-
minHeight: `${lineHeight}px`,
|
|
24
|
-
borderWidth: 1,
|
|
25
|
-
boxShadow: 'none',
|
|
26
|
-
borderColor: isFocused ? actionColor : gray80,
|
|
27
|
-
}),
|
|
28
|
-
valueContainer: (styles) => ({
|
|
29
|
-
...styles,
|
|
30
|
-
overflow: 'hidden',
|
|
31
|
-
padding: '2px 2px 4px 2px',
|
|
32
|
-
justifyContent: 'flex-start',
|
|
33
|
-
}),
|
|
34
|
-
placeholder: () => ({
|
|
35
|
-
color: '#c0c0c0',
|
|
36
|
-
fontWeight: 100,
|
|
37
|
-
paddingLeft: '4px',
|
|
38
|
-
position: 'absolute',
|
|
39
|
-
}),
|
|
40
|
-
clearIndicator: () => ({
|
|
41
|
-
color: '#c0c0c0',
|
|
42
|
-
display: 'inline-flex',
|
|
43
|
-
marginRight: '4px',
|
|
44
|
-
}),
|
|
45
|
-
dropdownIndicator: () => ({
|
|
46
|
-
display: 'none',
|
|
47
|
-
}),
|
|
48
|
-
indicatorSeparator: () => ({
|
|
49
|
-
display: 'none',
|
|
50
|
-
}),
|
|
51
|
-
multiValue: (styles, {data}) => ({
|
|
52
|
-
...styles,
|
|
53
|
-
backgroundColor: data.isException ? errorColor : actionColor,
|
|
54
|
-
color: white,
|
|
55
|
-
borderRadius: `${borderRadius / 2}px`,
|
|
56
|
-
height: '22px',
|
|
57
|
-
display: 'flex',
|
|
58
|
-
alignItems: 'center',
|
|
59
|
-
margin: '2px 0 0 2px',
|
|
60
|
-
}),
|
|
61
|
-
multiValueLabel: (styles) => ({
|
|
62
|
-
...styles,
|
|
63
|
-
color: white,
|
|
64
|
-
padding: '0 0 0 5px',
|
|
65
|
-
fontSize: '12px',
|
|
66
|
-
borderRadius: 0,
|
|
67
|
-
display: 'inline-flex',
|
|
68
|
-
lineHeight: '1',
|
|
69
|
-
}),
|
|
70
|
-
multiValueRemove: (styles, {data}) => ({
|
|
71
|
-
...styles,
|
|
72
|
-
padding: 0,
|
|
73
|
-
margin: '0 4px 0 2px',
|
|
74
|
-
backgroundColor: data.isException ? errorColor : actionColor,
|
|
75
|
-
cursor: 'pointer',
|
|
76
|
-
':hover': {
|
|
77
|
-
backgroundColor: data.isException ? errorColor : actionColor,
|
|
78
|
-
color: 'white',
|
|
79
|
-
},
|
|
80
|
-
}),
|
|
81
|
-
menu: (styles) => ({
|
|
82
|
-
...styles,
|
|
83
|
-
margin: 0,
|
|
84
|
-
borderRadius: 0,
|
|
85
|
-
zIndex: 10,
|
|
86
|
-
}),
|
|
87
|
-
option: (styles, {isFocused}) => ({
|
|
88
|
-
backgroundColor: isFocused ? actionColor : null,
|
|
89
|
-
padding: '5px 10px',
|
|
90
|
-
fontSize: '14px',
|
|
91
|
-
color: isFocused ? white : black,
|
|
92
|
-
}),
|
|
93
|
-
input: (styles) => ({
|
|
94
|
-
...styles,
|
|
95
|
-
height: '16px',
|
|
96
|
-
}),
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export {defaultStyles, StyledTagsInput, TagsInputErrors};
|
package/src/types.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
|
|
3
|
-
export type Option = {
|
|
4
|
-
value: number | string
|
|
5
|
-
label: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface TagsInputProps {
|
|
9
|
-
components?: {},
|
|
10
|
-
customStyles?: {
|
|
11
|
-
control?: () => void
|
|
12
|
-
},
|
|
13
|
-
elementId: string,
|
|
14
|
-
errors?: string[],
|
|
15
|
-
isAsync?: boolean,
|
|
16
|
-
isErrorLabelVisible?: boolean,
|
|
17
|
-
onChange: (newOptionsValue: Option[]) => void,
|
|
18
|
-
options?: Option[]
|
|
19
|
-
promiseOptions?: (value: any) => Promise<any>,
|
|
20
|
-
searchableKeys?: string[],
|
|
21
|
-
value?: Option[],
|
|
22
|
-
isClearable?: boolean
|
|
23
|
-
isDisabled?: boolean,
|
|
24
|
-
isLoading?: boolean,
|
|
25
|
-
isRtl?: boolean,
|
|
26
|
-
isMulti?: boolean,
|
|
27
|
-
isSearchable?: boolean,
|
|
28
|
-
cacheOptions?: boolean,
|
|
29
|
-
placeholder?: string | React.ReactNode
|
|
30
|
-
noOptionsMessage?: () => string,
|
|
31
|
-
loadingMessage?: () => string,
|
|
32
|
-
minHeightInput?: number
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export default class TagsInput extends React.Component<TagsInputProps> {
|
|
36
|
-
}
|