@imposium-hub/components 2.13.7 → 2.13.8-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/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +9 -0
- package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js +2 -2
- package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
- package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +9 -0
- package/dist/cjs/components/button-group-field/ButtonGroupField.js +38 -20
- package/dist/cjs/components/button-group-field/ButtonGroupField.js.map +1 -1
- package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +8 -0
- package/dist/cjs/components/checkbox-field/CheckboxField.js +2 -2
- package/dist/cjs/components/checkbox-field/CheckboxField.js.map +1 -1
- package/dist/cjs/components/color-field/ColorField.d.ts +8 -0
- package/dist/cjs/components/color-field/ColorField.js +2 -2
- package/dist/cjs/components/color-field/ColorField.js.map +1 -1
- package/dist/cjs/components/controlled-list/ControlledList.d.ts +6 -2
- package/dist/cjs/components/controlled-list/ControlledList.js +22 -6
- package/dist/cjs/components/controlled-list/ControlledList.js.map +1 -1
- package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +11 -0
- package/dist/cjs/components/field-wrapper/FieldWrapper.js +25 -6
- package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
- package/dist/cjs/components/number-field/NumberField.d.ts +9 -0
- package/dist/cjs/components/number-field/NumberField.js +2 -5
- package/dist/cjs/components/number-field/NumberField.js.map +1 -1
- package/dist/cjs/components/select-field/SelectField.d.ts +8 -0
- package/dist/cjs/components/select-field/SelectField.js +2 -2
- package/dist/cjs/components/select-field/SelectField.js.map +1 -1
- package/dist/cjs/components/slider-field/SliderField.d.ts +9 -0
- package/dist/cjs/components/slider-field/SliderField.js +2 -2
- package/dist/cjs/components/slider-field/SliderField.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +3 -0
- package/dist/cjs/constants/copy.js +4 -1
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/icons.d.ts +2 -0
- package/dist/cjs/constants/icons.js +3 -1
- package/dist/cjs/constants/icons.js.map +1 -1
- package/dist/cjs/constants/variables.d.ts +4 -0
- package/dist/cjs/constants/variables.js +13 -1
- package/dist/cjs/constants/variables.js.map +1 -1
- package/dist/cjs/index.d.ts +6 -2
- package/dist/cjs/index.js +9 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +9 -0
- package/dist/esm/components/advanced-number-field/AdvancedNumberField.js +2 -2
- package/dist/esm/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
- package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +9 -0
- package/dist/esm/components/button-group-field/ButtonGroupField.js +38 -20
- package/dist/esm/components/button-group-field/ButtonGroupField.js.map +1 -1
- package/dist/esm/components/checkbox-field/CheckboxField.d.ts +8 -0
- package/dist/esm/components/checkbox-field/CheckboxField.js +2 -2
- package/dist/esm/components/checkbox-field/CheckboxField.js.map +1 -1
- package/dist/esm/components/color-field/ColorField.d.ts +8 -0
- package/dist/esm/components/color-field/ColorField.js +2 -2
- package/dist/esm/components/color-field/ColorField.js.map +1 -1
- package/dist/esm/components/controlled-list/ControlledList.d.ts +6 -2
- package/dist/esm/components/controlled-list/ControlledList.js +24 -7
- package/dist/esm/components/controlled-list/ControlledList.js.map +1 -1
- package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +11 -0
- package/dist/esm/components/field-wrapper/FieldWrapper.js +24 -6
- package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
- package/dist/esm/components/number-field/NumberField.d.ts +9 -0
- package/dist/esm/components/number-field/NumberField.js +2 -5
- package/dist/esm/components/number-field/NumberField.js.map +1 -1
- package/dist/esm/components/select-field/SelectField.d.ts +8 -0
- package/dist/esm/components/select-field/SelectField.js +2 -2
- package/dist/esm/components/select-field/SelectField.js.map +1 -1
- package/dist/esm/components/slider-field/SliderField.d.ts +9 -0
- package/dist/esm/components/slider-field/SliderField.js +2 -2
- package/dist/esm/components/slider-field/SliderField.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +3 -0
- package/dist/esm/constants/copy.js +3 -0
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/icons.d.ts +2 -0
- package/dist/esm/constants/icons.js +4 -2
- package/dist/esm/constants/icons.js.map +1 -1
- package/dist/esm/constants/variables.d.ts +4 -0
- package/dist/esm/constants/variables.js +11 -0
- package/dist/esm/constants/variables.js.map +1 -1
- package/dist/esm/index.d.ts +6 -2
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/styles.css +130 -13
- package/dist/styles.less +369 -209
- package/less/components/button.less +5 -1
- package/less/components/controlled-list.less +122 -13
- package/less/components/dropdown.less +3 -0
- package/less/components/font-picker.less +18 -14
- package/less/components/form-field.less +224 -182
- package/package.json +3 -1
- package/src/components/advanced-number-field/AdvancedNumberField.tsx +33 -4
- package/src/components/button-group-field/ButtonGroupField.tsx +110 -39
- package/src/components/checkbox-field/CheckboxField.tsx +36 -3
- package/src/components/color-field/ColorField.tsx +29 -4
- package/src/components/config-variable-button/ConfigVariableButton.tsx +144 -0
- package/src/components/controlled-list/ControlledList.tsx +68 -14
- package/src/components/field-wrapper/FieldWrapper.tsx +80 -6
- package/src/components/font-field/FontField.tsx +78 -0
- package/src/components/icon-toggle/IconToggle.tsx +63 -0
- package/src/components/number-field/NumberField.tsx +34 -8
- package/src/components/select-field/SelectField.tsx +29 -4
- package/src/components/slider-field/SliderField.tsx +32 -2
- package/src/components/text-area-autocomplete/TextAreaAutocomplete.tsx +80 -0
- package/src/components/variables-dropdown/VariableDropdown.tsx +98 -0
- package/src/constants/copy.ts +4 -0
- package/src/constants/fonts.ts +296 -0
- package/src/constants/icons.tsx +6 -1
- package/src/constants/variables.ts +16 -0
- package/src/index.ts +11 -2
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import FieldWrapper from '../field-wrapper/FieldWrapper';
|
|
3
3
|
import { IToolTipConfig, renderTooltip, renderTooltipProps } from '../Tooltip';
|
|
4
|
+
import { getOverrideHandler } from '../../constants/variables';
|
|
5
|
+
import Button from '../button/Button';
|
|
6
|
+
import { ICON_TIMES } from '../../constants/icons';
|
|
4
7
|
|
|
5
8
|
interface IButtonGroupOption {
|
|
6
9
|
value: string | boolean;
|
|
@@ -22,6 +25,15 @@ interface IButtonGroupFieldProps {
|
|
|
22
25
|
labelPosition?: string;
|
|
23
26
|
labelWidth?: string | number;
|
|
24
27
|
disabled?: boolean;
|
|
28
|
+
|
|
29
|
+
override?: any;
|
|
30
|
+
showCopyPropIds?: boolean;
|
|
31
|
+
propKey?: string;
|
|
32
|
+
setOverride?(e): void;
|
|
33
|
+
removeOverride?(): void;
|
|
34
|
+
inventory?: any;
|
|
35
|
+
onClose?(e: boolean): void;
|
|
36
|
+
activeOverride?: string;
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
|
|
@@ -50,55 +62,114 @@ class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
|
|
|
50
62
|
}
|
|
51
63
|
};
|
|
52
64
|
|
|
65
|
+
public renderRemoveButton() {
|
|
66
|
+
const { removeOverride } = this.props;
|
|
67
|
+
return (
|
|
68
|
+
<div className='item'>
|
|
69
|
+
<div className='buttons'>
|
|
70
|
+
<Button
|
|
71
|
+
style='subtle'
|
|
72
|
+
color='danger'
|
|
73
|
+
onClick={() => removeOverride()}>
|
|
74
|
+
{ICON_TIMES}
|
|
75
|
+
</Button>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
53
81
|
public render = (): JSX.Element => {
|
|
54
|
-
const {
|
|
55
|
-
|
|
82
|
+
const {
|
|
83
|
+
options,
|
|
84
|
+
width,
|
|
85
|
+
tooltip,
|
|
86
|
+
info,
|
|
87
|
+
labelPosition,
|
|
88
|
+
labelWidth,
|
|
89
|
+
disabled,
|
|
90
|
+
propKey,
|
|
91
|
+
showCopyPropIds,
|
|
92
|
+
inventory,
|
|
93
|
+
override,
|
|
94
|
+
setOverride,
|
|
95
|
+
onClose,
|
|
96
|
+
onChange,
|
|
97
|
+
activeOverride,
|
|
98
|
+
removeOverride
|
|
99
|
+
} = this.props;
|
|
100
|
+
|
|
56
101
|
const optionStyle: any = { width: `${100 / options.length}%` };
|
|
57
102
|
|
|
103
|
+
const inputField = () => {
|
|
104
|
+
const { hasOverride, previewItem } = getOverrideHandler(propKey, override, inventory);
|
|
105
|
+
const value = hasOverride ? previewItem : this.props.value;
|
|
106
|
+
return (
|
|
107
|
+
<div className={`${hasOverride ? 'override_variable text' : ''}`}>
|
|
108
|
+
<div className='button-group'>
|
|
109
|
+
{options.map((option, i) => {
|
|
110
|
+
const optionKey = option.value;
|
|
111
|
+
const optionLabel = option.label;
|
|
112
|
+
const icon = option.icon ? option.icon : null;
|
|
113
|
+
const tooltipId = `${optionKey}-${i}`;
|
|
114
|
+
const activeOption = optionKey === value;
|
|
115
|
+
const activeClass = activeOption
|
|
116
|
+
? 'active'
|
|
117
|
+
: disabled
|
|
118
|
+
? 'disabled'
|
|
119
|
+
: '';
|
|
120
|
+
const onClick = !activeOption
|
|
121
|
+
? () => {
|
|
122
|
+
onChange(optionKey);
|
|
123
|
+
}
|
|
124
|
+
: null;
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<div
|
|
128
|
+
key={`option-${optionKey}`}
|
|
129
|
+
style={optionStyle}
|
|
130
|
+
className={`button-group-option ${activeClass} ${
|
|
131
|
+
hasOverride ? 'disabled' : ''
|
|
132
|
+
}`}
|
|
133
|
+
{...renderTooltipProps(tooltipId, option.tooltip)}
|
|
134
|
+
onClick={
|
|
135
|
+
typeof option.onDoubleClick === 'function'
|
|
136
|
+
? () =>
|
|
137
|
+
this.handleMultipleClicks(
|
|
138
|
+
onClick,
|
|
139
|
+
option.onDoubleClick
|
|
140
|
+
)
|
|
141
|
+
: onClick
|
|
142
|
+
}>
|
|
143
|
+
{!icon ? optionLabel : icon}
|
|
144
|
+
{renderTooltip(tooltipId, option.tooltip)}
|
|
145
|
+
</div>
|
|
146
|
+
);
|
|
147
|
+
})}
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
);
|
|
151
|
+
};
|
|
152
|
+
|
|
58
153
|
return (
|
|
59
154
|
<FieldWrapper
|
|
60
155
|
customClass='button-group-field'
|
|
61
|
-
label={label}
|
|
156
|
+
label={this.props.label}
|
|
62
157
|
tooltip={tooltip}
|
|
63
158
|
info={info}
|
|
64
159
|
labelPosition={labelPosition}
|
|
65
160
|
width={width}
|
|
66
|
-
labelWidth={labelWidth}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
: null;
|
|
80
|
-
|
|
81
|
-
return (
|
|
82
|
-
<div
|
|
83
|
-
key={`option-${optionKey}`}
|
|
84
|
-
style={optionStyle}
|
|
85
|
-
className={`button-group-option ${activeClass}`}
|
|
86
|
-
{...renderTooltipProps(tooltipId, option.tooltip)}
|
|
87
|
-
onClick={
|
|
88
|
-
typeof option.onDoubleClick === 'function'
|
|
89
|
-
? () =>
|
|
90
|
-
this.handleMultipleClicks(
|
|
91
|
-
onClick,
|
|
92
|
-
option.onDoubleClick
|
|
93
|
-
)
|
|
94
|
-
: onClick
|
|
95
|
-
}>
|
|
96
|
-
{!icon ? optionLabel : icon}
|
|
97
|
-
{renderTooltip(tooltipId, option.tooltip)}
|
|
98
|
-
</div>
|
|
99
|
-
);
|
|
100
|
-
})}
|
|
101
|
-
</div>
|
|
161
|
+
labelWidth={labelWidth}
|
|
162
|
+
propKey={propKey}
|
|
163
|
+
showCopyPropIds={showCopyPropIds}
|
|
164
|
+
inventory={inventory}
|
|
165
|
+
setOverride={setOverride}
|
|
166
|
+
onClose={onClose}
|
|
167
|
+
activeOverride={activeOverride}
|
|
168
|
+
removeOverride={removeOverride}
|
|
169
|
+
override={override}
|
|
170
|
+
type='text'
|
|
171
|
+
buttonGroup={true}>
|
|
172
|
+
{inputField()}
|
|
102
173
|
</FieldWrapper>
|
|
103
174
|
);
|
|
104
175
|
};
|
|
@@ -13,6 +13,15 @@ interface ICheckboxFieldProps {
|
|
|
13
13
|
info?: string;
|
|
14
14
|
labelPosition?: string;
|
|
15
15
|
labelWidth?: string | number;
|
|
16
|
+
|
|
17
|
+
override?: any;
|
|
18
|
+
showCopyPropIds?: boolean;
|
|
19
|
+
propKey?: string;
|
|
20
|
+
setOverride?(e): void;
|
|
21
|
+
removeOverride?(): void;
|
|
22
|
+
inventory?: any;
|
|
23
|
+
onClose?(e: boolean): void;
|
|
24
|
+
activeOverride?: string;
|
|
16
25
|
}
|
|
17
26
|
|
|
18
27
|
class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
|
|
@@ -28,18 +37,42 @@ class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
|
|
|
28
37
|
}
|
|
29
38
|
|
|
30
39
|
public render() {
|
|
31
|
-
const {
|
|
40
|
+
const {
|
|
41
|
+
value,
|
|
42
|
+
width,
|
|
43
|
+
tooltip,
|
|
44
|
+
info,
|
|
45
|
+
labelPosition,
|
|
46
|
+
labelWidth,
|
|
47
|
+
showCopyPropIds,
|
|
48
|
+
propKey,
|
|
49
|
+
override,
|
|
50
|
+
inventory,
|
|
51
|
+
setOverride,
|
|
52
|
+
removeOverride,
|
|
53
|
+
onClose,
|
|
54
|
+
activeOverride
|
|
55
|
+
} = this.props;
|
|
32
56
|
const icon = value === true ? ICON_CHECK : null;
|
|
33
57
|
|
|
34
58
|
return (
|
|
35
59
|
<FieldWrapper
|
|
36
60
|
customClass='checkbox-field'
|
|
37
|
-
label={label}
|
|
61
|
+
label={this.props.label}
|
|
38
62
|
tooltip={tooltip}
|
|
39
63
|
info={info}
|
|
40
64
|
labelPosition={labelPosition}
|
|
41
65
|
labelWidth={labelWidth}
|
|
42
|
-
width={width}
|
|
66
|
+
width={width}
|
|
67
|
+
propKey={propKey}
|
|
68
|
+
showCopyPropIds={showCopyPropIds}
|
|
69
|
+
inventory={inventory}
|
|
70
|
+
setOverride={setOverride}
|
|
71
|
+
onClose={onClose}
|
|
72
|
+
activeOverride={activeOverride}
|
|
73
|
+
removeOverride={removeOverride}
|
|
74
|
+
override={override}
|
|
75
|
+
type='boolean'>
|
|
43
76
|
<div
|
|
44
77
|
className='checkbox'
|
|
45
78
|
onClick={(e) => this.toggle(e)}>
|
|
@@ -19,6 +19,15 @@ interface IColorFieldProps {
|
|
|
19
19
|
pickerPosition?: string;
|
|
20
20
|
labelWidth?: string | number;
|
|
21
21
|
disabled?: boolean;
|
|
22
|
+
|
|
23
|
+
override?: any;
|
|
24
|
+
showCopyPropIds?: boolean;
|
|
25
|
+
propKey?: string;
|
|
26
|
+
setOverride?(e): void;
|
|
27
|
+
removeOverride?(): void;
|
|
28
|
+
inventory?: any;
|
|
29
|
+
onClose?(e: boolean): void;
|
|
30
|
+
activeOverride?: string;
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
interface IColorFieldState {
|
|
@@ -103,7 +112,6 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
|
|
|
103
112
|
|
|
104
113
|
public render() {
|
|
105
114
|
const {
|
|
106
|
-
label,
|
|
107
115
|
width,
|
|
108
116
|
buttons,
|
|
109
117
|
tooltip,
|
|
@@ -114,7 +122,15 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
|
|
|
114
122
|
labelPosition,
|
|
115
123
|
pickerPosition,
|
|
116
124
|
labelWidth,
|
|
117
|
-
disabled
|
|
125
|
+
disabled,
|
|
126
|
+
override,
|
|
127
|
+
showCopyPropIds,
|
|
128
|
+
propKey,
|
|
129
|
+
inventory,
|
|
130
|
+
setOverride,
|
|
131
|
+
removeOverride,
|
|
132
|
+
onClose,
|
|
133
|
+
activeOverride
|
|
118
134
|
} = this.props;
|
|
119
135
|
const { pickerOpen } = this.state;
|
|
120
136
|
const disableAlpha = !enableAlpha;
|
|
@@ -141,13 +157,22 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
|
|
|
141
157
|
return (
|
|
142
158
|
<FieldWrapper
|
|
143
159
|
customClass='color-field'
|
|
144
|
-
label={label}
|
|
160
|
+
label={this.props.label}
|
|
145
161
|
tooltip={tooltip}
|
|
146
162
|
buttons={buttons}
|
|
147
163
|
info={info}
|
|
148
164
|
labelPosition={labelPosition}
|
|
149
165
|
labelWidth={labelWidth}
|
|
150
|
-
width={width}
|
|
166
|
+
width={width}
|
|
167
|
+
propKey={propKey}
|
|
168
|
+
showCopyPropIds={showCopyPropIds}
|
|
169
|
+
inventory={inventory}
|
|
170
|
+
setOverride={setOverride}
|
|
171
|
+
onClose={onClose}
|
|
172
|
+
activeOverride={activeOverride}
|
|
173
|
+
removeOverride={removeOverride}
|
|
174
|
+
override={override}
|
|
175
|
+
type='color'>
|
|
151
176
|
<div style={transparentBg}>
|
|
152
177
|
<div
|
|
153
178
|
className='swatch'
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import React, { useState, useRef } from 'react';
|
|
2
|
+
import { ICON_BRACKET_CURLY } from '../../constants/icons';
|
|
3
|
+
import Button from '../button/Button';
|
|
4
|
+
import ImposiumDropdown from '../dropdown/Dropdown';
|
|
5
|
+
import moize from 'moize';
|
|
6
|
+
import VariableDropDown from '../variables-dropdown/VariableDropdown';
|
|
7
|
+
import { ControlListType } from '../controlled-list/ControlledList';
|
|
8
|
+
|
|
9
|
+
interface IConfigVariableButtonProps {
|
|
10
|
+
type: ControlListType;
|
|
11
|
+
icon?: any;
|
|
12
|
+
inventory: any;
|
|
13
|
+
setOverride?(e): void;
|
|
14
|
+
onClose?(e): void;
|
|
15
|
+
removeOverride?(): void;
|
|
16
|
+
activeOverride?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const ConfigVariableButton: React.FC<IConfigVariableButtonProps> = ({
|
|
20
|
+
type,
|
|
21
|
+
inventory,
|
|
22
|
+
setOverride,
|
|
23
|
+
onClose,
|
|
24
|
+
activeOverride,
|
|
25
|
+
removeOverride,
|
|
26
|
+
icon
|
|
27
|
+
}) => {
|
|
28
|
+
const [show, setShow] = useState(false);
|
|
29
|
+
const variablesButtonRef = useRef();
|
|
30
|
+
|
|
31
|
+
const close = () => {
|
|
32
|
+
setShow(!show);
|
|
33
|
+
if (onClose) {
|
|
34
|
+
onClose(!show);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const setOverrideHandler = (o) => {
|
|
39
|
+
setOverride(o);
|
|
40
|
+
setShow(!show);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const removeOverrideHandler = () => {
|
|
44
|
+
removeOverride();
|
|
45
|
+
setShow(!show);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<>
|
|
50
|
+
<Button
|
|
51
|
+
tooltip='Configure Variables'
|
|
52
|
+
customClass={icon ? 'icon-toggle' : ''}
|
|
53
|
+
onClick={() => {
|
|
54
|
+
close();
|
|
55
|
+
}}
|
|
56
|
+
buttonRef={variablesButtonRef}
|
|
57
|
+
size='small'
|
|
58
|
+
style='subtle'>
|
|
59
|
+
{ICON_BRACKET_CURLY}
|
|
60
|
+
</Button>
|
|
61
|
+
|
|
62
|
+
<ImposiumDropdown
|
|
63
|
+
key='variables-dropdown'
|
|
64
|
+
position='bottomleft'
|
|
65
|
+
show={show}
|
|
66
|
+
toggleRef={variablesButtonRef}
|
|
67
|
+
customClass='variables'
|
|
68
|
+
onOutsideClick={() => close()}>
|
|
69
|
+
<VariableDropDown
|
|
70
|
+
returnVariables={show}
|
|
71
|
+
type={type}
|
|
72
|
+
inventory={inventory}
|
|
73
|
+
setOverride={setOverrideHandler}
|
|
74
|
+
removeOverride={removeOverrideHandler}
|
|
75
|
+
activeOverride={activeOverride}
|
|
76
|
+
/>
|
|
77
|
+
</ImposiumDropdown>
|
|
78
|
+
</>
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const mGetConfigVariableButton = (
|
|
83
|
+
enabled,
|
|
84
|
+
type,
|
|
85
|
+
inventory,
|
|
86
|
+
setOverride,
|
|
87
|
+
onClose,
|
|
88
|
+
icon,
|
|
89
|
+
activeOverride,
|
|
90
|
+
removeOverride
|
|
91
|
+
) => {
|
|
92
|
+
if (enabled || activeOverride !== undefined) {
|
|
93
|
+
return (
|
|
94
|
+
<ConfigVariableButton
|
|
95
|
+
type={type}
|
|
96
|
+
inventory={inventory}
|
|
97
|
+
setOverride={(o) => setOverride(o)}
|
|
98
|
+
onClose={(o) => {
|
|
99
|
+
if (enabled) onClose(o);
|
|
100
|
+
}}
|
|
101
|
+
icon={icon}
|
|
102
|
+
activeOverride={activeOverride}
|
|
103
|
+
removeOverride={removeOverride}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
106
|
+
} else {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const getConfigVariableButton = moize(mGetConfigVariableButton);
|
|
112
|
+
|
|
113
|
+
export const fieldLabel = (
|
|
114
|
+
labelText,
|
|
115
|
+
propKey,
|
|
116
|
+
showCopyPropIds,
|
|
117
|
+
type: string,
|
|
118
|
+
inventory,
|
|
119
|
+
setOverride,
|
|
120
|
+
onClose,
|
|
121
|
+
activeOverride,
|
|
122
|
+
removeOverride,
|
|
123
|
+
icon?
|
|
124
|
+
) => {
|
|
125
|
+
const label = propKey ? (
|
|
126
|
+
<span>
|
|
127
|
+
{labelText}
|
|
128
|
+
{getConfigVariableButton(
|
|
129
|
+
showCopyPropIds,
|
|
130
|
+
type,
|
|
131
|
+
inventory,
|
|
132
|
+
(o) => setOverride(o),
|
|
133
|
+
(o) => onClose(o),
|
|
134
|
+
icon,
|
|
135
|
+
activeOverride,
|
|
136
|
+
removeOverride
|
|
137
|
+
)}
|
|
138
|
+
</span>
|
|
139
|
+
) : (
|
|
140
|
+
labelText
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
return label;
|
|
144
|
+
};
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import Button from '../button/Button';
|
|
3
|
-
import { ICON_TIMES } from '../../constants/icons';
|
|
3
|
+
import { ICON_BRACKET_CURLY, ICON_CHECK, ICON_TIMES } from '../../constants/icons';
|
|
4
|
+
|
|
5
|
+
export type ControlListType = 'text' | 'number' | 'color' | 'textarea' | 'boolean' | 'icon';
|
|
4
6
|
|
|
5
7
|
interface IControlledListProps {
|
|
6
8
|
items?: any[];
|
|
7
9
|
removable?: boolean;
|
|
8
10
|
onRemove?(index): void;
|
|
11
|
+
type?: ControlListType;
|
|
12
|
+
content?: any;
|
|
13
|
+
propKey?: string;
|
|
14
|
+
previewMultiplier?: number;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
class ControlledList extends React.PureComponent<IControlledListProps> {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
constructor(props: IControlledListProps) {
|
|
19
|
+
super(props);
|
|
20
|
+
}
|
|
15
21
|
|
|
16
22
|
public renderRemoveButton(index) {
|
|
17
23
|
const { removable } = this.props;
|
|
@@ -31,19 +37,67 @@ class ControlledList extends React.PureComponent<IControlledListProps> {
|
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
public render() {
|
|
34
|
-
const { items } = this.props;
|
|
40
|
+
const { items, type, content, previewMultiplier } = this.props;
|
|
35
41
|
let buttons: JSX.Element[];
|
|
36
|
-
|
|
37
42
|
if (items) {
|
|
38
43
|
buttons = items.map((item, i) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
switch (type) {
|
|
45
|
+
case 'text':
|
|
46
|
+
case 'number':
|
|
47
|
+
const previewValue =
|
|
48
|
+
typeof item === 'number' ? `${item * previewMultiplier}` : item;
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
className='item'
|
|
52
|
+
key={`item-${i}`}>
|
|
53
|
+
<input
|
|
54
|
+
type='text'
|
|
55
|
+
value={
|
|
56
|
+
previewValue ? `{{ ${previewValue} }}` : 'PREVIEW NOT SET'
|
|
57
|
+
}
|
|
58
|
+
readOnly
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
case 'textarea':
|
|
63
|
+
return (
|
|
64
|
+
<div
|
|
65
|
+
className='item textarea rta'
|
|
66
|
+
key={`item-${i}`}>
|
|
67
|
+
<textarea
|
|
68
|
+
className='rta__textarea'
|
|
69
|
+
value={item}
|
|
70
|
+
disabled={true}
|
|
71
|
+
/>
|
|
72
|
+
</div>
|
|
73
|
+
);
|
|
74
|
+
case 'boolean':
|
|
75
|
+
const icon = content ? ICON_BRACKET_CURLY : item ? ICON_CHECK : null;
|
|
76
|
+
return (
|
|
77
|
+
<div
|
|
78
|
+
className={`item ${content ? 'icon-toggle' : 'checkbox'}`}
|
|
79
|
+
key={`item-${i}`}>
|
|
80
|
+
{icon}
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
case 'color':
|
|
84
|
+
return (
|
|
85
|
+
<div
|
|
86
|
+
className='item color'
|
|
87
|
+
key={`item-${i}`}
|
|
88
|
+
style={{ backgroundColor: item }}
|
|
89
|
+
/>
|
|
90
|
+
);
|
|
91
|
+
default:
|
|
92
|
+
return (
|
|
93
|
+
<div
|
|
94
|
+
className='item'
|
|
95
|
+
key={`item-${i}`}>
|
|
96
|
+
{item}
|
|
97
|
+
{this.renderRemoveButton(i)}
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
47
101
|
});
|
|
48
102
|
}
|
|
49
103
|
|
|
@@ -3,6 +3,9 @@ import { generateUUID } from '../../Util';
|
|
|
3
3
|
import { renderTooltipProps, renderTooltip, IToolTipConfig } from '../Tooltip';
|
|
4
4
|
import { ICON_TIMES_CIRCLE, ICON_INFO_CIRCLE } from '../../constants/icons';
|
|
5
5
|
import Button from '../button/Button';
|
|
6
|
+
import { fieldLabel } from '../config-variable-button/ConfigVariableButton';
|
|
7
|
+
import ControlledList from '../controlled-list/ControlledList';
|
|
8
|
+
import { getOverrideHandler } from '../../constants/variables';
|
|
6
9
|
|
|
7
10
|
interface IFieldWrapperProps {
|
|
8
11
|
buttons?: any;
|
|
@@ -15,6 +18,20 @@ interface IFieldWrapperProps {
|
|
|
15
18
|
labelPosition?: string;
|
|
16
19
|
labelWidth?: string | number;
|
|
17
20
|
header?: boolean;
|
|
21
|
+
|
|
22
|
+
type?: any;
|
|
23
|
+
override?: any;
|
|
24
|
+
showCopyPropIds?: boolean;
|
|
25
|
+
propKey?: string;
|
|
26
|
+
setOverride?(e): void;
|
|
27
|
+
removeOverride?(): void;
|
|
28
|
+
inventory?: any;
|
|
29
|
+
onClose?(e: boolean): void;
|
|
30
|
+
activeOverride?: string;
|
|
31
|
+
|
|
32
|
+
buttonGroup?: boolean;
|
|
33
|
+
|
|
34
|
+
previewMultiplier?: number;
|
|
18
35
|
}
|
|
19
36
|
|
|
20
37
|
interface IFieldWrapperState {
|
|
@@ -43,17 +60,44 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
|
|
|
43
60
|
}
|
|
44
61
|
|
|
45
62
|
private getLabelClass() {
|
|
46
|
-
|
|
63
|
+
const { propKey, label, labelPosition } = this.props;
|
|
64
|
+
|
|
65
|
+
if (!label && propKey) {
|
|
66
|
+
return 'label-left';
|
|
67
|
+
} else if (!label) {
|
|
47
68
|
return 'no-label';
|
|
48
69
|
} else {
|
|
49
|
-
const labelPos =
|
|
70
|
+
const labelPos = labelPosition ? labelPosition : 'left';
|
|
50
71
|
return `label-${labelPos}`;
|
|
51
72
|
}
|
|
52
73
|
}
|
|
53
74
|
|
|
54
75
|
private renderLabel() {
|
|
55
76
|
const { showInfo } = this.state;
|
|
56
|
-
const {
|
|
77
|
+
const {
|
|
78
|
+
info,
|
|
79
|
+
labelWidth,
|
|
80
|
+
propKey,
|
|
81
|
+
showCopyPropIds,
|
|
82
|
+
inventory,
|
|
83
|
+
setOverride,
|
|
84
|
+
onClose,
|
|
85
|
+
activeOverride,
|
|
86
|
+
removeOverride,
|
|
87
|
+
type
|
|
88
|
+
} = this.props;
|
|
89
|
+
|
|
90
|
+
const label = fieldLabel(
|
|
91
|
+
this.props.label,
|
|
92
|
+
propKey,
|
|
93
|
+
showCopyPropIds,
|
|
94
|
+
type,
|
|
95
|
+
inventory,
|
|
96
|
+
(o) => setOverride(o),
|
|
97
|
+
(o) => onClose(o),
|
|
98
|
+
activeOverride,
|
|
99
|
+
() => removeOverride()
|
|
100
|
+
);
|
|
57
101
|
|
|
58
102
|
const iconInfo = showInfo ? ICON_TIMES_CIRCLE : ICON_INFO_CIRCLE;
|
|
59
103
|
const style = {};
|
|
@@ -88,9 +132,39 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
|
|
|
88
132
|
}
|
|
89
133
|
|
|
90
134
|
public render() {
|
|
91
|
-
const {
|
|
135
|
+
const {
|
|
136
|
+
label,
|
|
137
|
+
width,
|
|
138
|
+
header,
|
|
139
|
+
propKey,
|
|
140
|
+
override,
|
|
141
|
+
inventory,
|
|
142
|
+
type,
|
|
143
|
+
customClass,
|
|
144
|
+
buttonGroup,
|
|
145
|
+
previewMultiplier
|
|
146
|
+
} = this.props;
|
|
92
147
|
const labelJSX = this.renderLabel();
|
|
93
148
|
|
|
149
|
+
const { hasOverride, previewItem } = getOverrideHandler(propKey, override, inventory);
|
|
150
|
+
|
|
151
|
+
const className = hasOverride ? `${customClass} override_variable ${type}` : customClass;
|
|
152
|
+
|
|
153
|
+
const children = () => {
|
|
154
|
+
if (hasOverride && !buttonGroup) {
|
|
155
|
+
return (
|
|
156
|
+
<ControlledList
|
|
157
|
+
items={[previewItem]}
|
|
158
|
+
removable={true}
|
|
159
|
+
type={type}
|
|
160
|
+
previewMultiplier={previewMultiplier}
|
|
161
|
+
/>
|
|
162
|
+
);
|
|
163
|
+
} else {
|
|
164
|
+
return this.props.children;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
|
|
94
168
|
const style = {};
|
|
95
169
|
let fieldProps = {};
|
|
96
170
|
if (!label) {
|
|
@@ -104,13 +178,13 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
|
|
|
104
178
|
<>
|
|
105
179
|
{header && this.renderButtons()}
|
|
106
180
|
<div
|
|
107
|
-
className={`form-field ${
|
|
181
|
+
className={`form-field ${className} ${this.getLabelClass()}`}
|
|
108
182
|
style={style}>
|
|
109
183
|
{labelJSX}
|
|
110
184
|
<div
|
|
111
185
|
className={`form-field-content ${this.getLabelClass()}`}
|
|
112
186
|
{...fieldProps}>
|
|
113
|
-
{
|
|
187
|
+
{children()}
|
|
114
188
|
{!header && this.renderButtons()}
|
|
115
189
|
</div>
|
|
116
190
|
{renderTooltip(this.tooltipId, this.props.tooltip)}
|