@imposium-hub/components 2.11.6-0 → 2.12.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.
Files changed (126) hide show
  1. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +0 -8
  2. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js +2 -2
  3. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
  4. package/dist/cjs/components/app-wrapper/AppWrapper.js +22 -2
  5. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  6. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +0 -9
  7. package/dist/cjs/components/button-group-field/ButtonGroupField.js +20 -38
  8. package/dist/cjs/components/button-group-field/ButtonGroupField.js.map +1 -1
  9. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +0 -8
  10. package/dist/cjs/components/checkbox-field/CheckboxField.js +2 -2
  11. package/dist/cjs/components/checkbox-field/CheckboxField.js.map +1 -1
  12. package/dist/cjs/components/color-field/ColorField.d.ts +0 -8
  13. package/dist/cjs/components/color-field/ColorField.js +2 -2
  14. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  15. package/dist/cjs/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  16. package/dist/cjs/components/controlled-list/ControlledList.d.ts +2 -6
  17. package/dist/cjs/components/controlled-list/ControlledList.js +6 -22
  18. package/dist/cjs/components/controlled-list/ControlledList.js.map +1 -1
  19. package/dist/cjs/components/data-table/DataTable.d.ts +4 -0
  20. package/dist/cjs/components/data-table/DataTable.js +5 -1
  21. package/dist/cjs/components/data-table/DataTable.js.map +1 -1
  22. package/dist/cjs/components/data-table/Paginator.d.ts +4 -0
  23. package/dist/cjs/components/data-table/Paginator.js +26 -10
  24. package/dist/cjs/components/data-table/Paginator.js.map +1 -1
  25. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +0 -11
  26. package/dist/cjs/components/field-wrapper/FieldWrapper.js +6 -25
  27. package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
  28. package/dist/cjs/components/number-field/NumberField.d.ts +0 -9
  29. package/dist/cjs/components/number-field/NumberField.js +5 -2
  30. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  31. package/dist/cjs/components/select-field/SelectField.d.ts +0 -8
  32. package/dist/cjs/components/select-field/SelectField.js +2 -2
  33. package/dist/cjs/components/select-field/SelectField.js.map +1 -1
  34. package/dist/cjs/constants/copy.d.ts +0 -3
  35. package/dist/cjs/constants/copy.js +1 -4
  36. package/dist/cjs/constants/copy.js.map +1 -1
  37. package/dist/cjs/constants/icons.d.ts +0 -2
  38. package/dist/cjs/constants/icons.js +1 -3
  39. package/dist/cjs/constants/icons.js.map +1 -1
  40. package/dist/cjs/constants/variables.d.ts +0 -4
  41. package/dist/cjs/constants/variables.js +1 -13
  42. package/dist/cjs/constants/variables.js.map +1 -1
  43. package/dist/cjs/index.d.ts +2 -6
  44. package/dist/cjs/index.js +1 -9
  45. package/dist/cjs/index.js.map +1 -1
  46. package/dist/cjs/services/API.d.ts +4 -0
  47. package/dist/cjs/services/API.js +35 -0
  48. package/dist/cjs/services/API.js.map +1 -1
  49. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +0 -8
  50. package/dist/esm/components/advanced-number-field/AdvancedNumberField.js +2 -2
  51. package/dist/esm/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
  52. package/dist/esm/components/app-wrapper/AppWrapper.js +22 -2
  53. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  54. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +0 -9
  55. package/dist/esm/components/button-group-field/ButtonGroupField.js +20 -38
  56. package/dist/esm/components/button-group-field/ButtonGroupField.js.map +1 -1
  57. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +0 -8
  58. package/dist/esm/components/checkbox-field/CheckboxField.js +2 -2
  59. package/dist/esm/components/checkbox-field/CheckboxField.js.map +1 -1
  60. package/dist/esm/components/color-field/ColorField.d.ts +0 -8
  61. package/dist/esm/components/color-field/ColorField.js +2 -2
  62. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  63. package/dist/esm/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  64. package/dist/esm/components/controlled-list/ControlledList.d.ts +2 -6
  65. package/dist/esm/components/controlled-list/ControlledList.js +7 -24
  66. package/dist/esm/components/controlled-list/ControlledList.js.map +1 -1
  67. package/dist/esm/components/data-table/DataTable.d.ts +4 -0
  68. package/dist/esm/components/data-table/DataTable.js +5 -1
  69. package/dist/esm/components/data-table/DataTable.js.map +1 -1
  70. package/dist/esm/components/data-table/Paginator.d.ts +4 -0
  71. package/dist/esm/components/data-table/Paginator.js +26 -10
  72. package/dist/esm/components/data-table/Paginator.js.map +1 -1
  73. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +0 -11
  74. package/dist/esm/components/field-wrapper/FieldWrapper.js +6 -24
  75. package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
  76. package/dist/esm/components/number-field/NumberField.d.ts +0 -9
  77. package/dist/esm/components/number-field/NumberField.js +5 -2
  78. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  79. package/dist/esm/components/select-field/SelectField.d.ts +0 -8
  80. package/dist/esm/components/select-field/SelectField.js +2 -2
  81. package/dist/esm/components/select-field/SelectField.js.map +1 -1
  82. package/dist/esm/constants/copy.d.ts +0 -3
  83. package/dist/esm/constants/copy.js +0 -3
  84. package/dist/esm/constants/copy.js.map +1 -1
  85. package/dist/esm/constants/icons.d.ts +0 -2
  86. package/dist/esm/constants/icons.js +2 -4
  87. package/dist/esm/constants/icons.js.map +1 -1
  88. package/dist/esm/constants/variables.d.ts +0 -4
  89. package/dist/esm/constants/variables.js +0 -11
  90. package/dist/esm/constants/variables.js.map +1 -1
  91. package/dist/esm/index.d.ts +2 -6
  92. package/dist/esm/index.js +1 -5
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/services/API.d.ts +4 -0
  95. package/dist/esm/services/API.js +35 -0
  96. package/dist/esm/services/API.js.map +1 -1
  97. package/dist/styles.css +13 -125
  98. package/dist/styles.less +209 -365
  99. package/less/components/button.less +1 -5
  100. package/less/components/controlled-list.less +13 -118
  101. package/less/components/dropdown.less +0 -3
  102. package/less/components/font-picker.less +14 -18
  103. package/less/components/form-field.less +182 -224
  104. package/package.json +2 -3
  105. package/src/components/advanced-number-field/AdvancedNumberField.tsx +4 -29
  106. package/src/components/app-wrapper/AppWrapper.tsx +30 -2
  107. package/src/components/button-group-field/ButtonGroupField.tsx +39 -110
  108. package/src/components/checkbox-field/CheckboxField.tsx +3 -36
  109. package/src/components/color-field/ColorField.tsx +4 -29
  110. package/src/components/controlled-list/ControlledList.tsx +14 -62
  111. package/src/components/data-table/DataTable.tsx +10 -1
  112. package/src/components/data-table/Paginator.tsx +54 -25
  113. package/src/components/field-wrapper/FieldWrapper.tsx +6 -80
  114. package/src/components/number-field/NumberField.tsx +8 -34
  115. package/src/components/select-field/SelectField.tsx +4 -29
  116. package/src/constants/copy.ts +0 -4
  117. package/src/constants/icons.tsx +1 -6
  118. package/src/constants/variables.ts +0 -16
  119. package/src/index.ts +2 -11
  120. package/src/services/API.ts +57 -0
  121. package/src/components/config-variable-button/ConfigVariableButton.tsx +0 -141
  122. package/src/components/font-field/FontField.tsx +0 -78
  123. package/src/components/icon-toggle/IconToggle.tsx +0 -63
  124. package/src/components/text-area-autocomplete/TextAreaAutocomplete.tsx +0 -78
  125. package/src/components/variables-dropdown/VariableDropdown.tsx +0 -98
  126. package/src/constants/fonts.ts +0 -296
@@ -9,6 +9,7 @@ import { replaceRoute } from '../../utils/routing';
9
9
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
10
  import { faExclamationTriangle } from '@fortawesome/pro-light-svg-icons';
11
11
  import { initPendo } from '../../utils/pendo';
12
+ import { TOKEN_TYPE, FlagsProvider } from '@innovid/feature-flags-react';
12
13
 
13
14
  export interface IAppWrapperProps {
14
15
  appLabel: string;
@@ -63,6 +64,15 @@ export const AppWrapper: React.FC<IAppWrapperProps> = (props) => {
63
64
  const { isAuthenticated, isLoading, getAccessTokenSilently, loginWithRedirect, logout, user } =
64
65
  useAuth0();
65
66
  const [errorState, setErrorState] = React.useState(null);
67
+ const [auth0Token, setAuth0Token] = React.useState(null);
68
+
69
+ React.useEffect(() => {
70
+ void getAccessTokenSilently().then((token) => {
71
+ if (token) {
72
+ setAuth0Token(token);
73
+ }
74
+ });
75
+ }, []);
66
76
 
67
77
  React.useEffect(() => {
68
78
  if (user) {
@@ -275,14 +285,24 @@ export const AppWrapper: React.FC<IAppWrapperProps> = (props) => {
275
285
  innerContent = (
276
286
  <AppWrapperErrors
277
287
  error={errorState}
278
- email={user.userEmail}
288
+ email={user?.userEmail}
279
289
  />
280
290
  );
281
291
  } else if (!blockRender) {
282
292
  innerContent = children;
283
293
  }
284
294
 
285
- return (
295
+ const featureFlagsConfig = {
296
+ gatewayUrl: baseUrl,
297
+ gatewayToken: auth0Token,
298
+ projectId: 'prj_40599w13mko56suv',
299
+ tokenType: TOKEN_TYPE.AUTH0_BEARER,
300
+ initialContext: {
301
+ email: user?.userEmail
302
+ }
303
+ };
304
+
305
+ const content = (
286
306
  <div
287
307
  id='app'
288
308
  className='app'>
@@ -307,6 +327,14 @@ export const AppWrapper: React.FC<IAppWrapperProps> = (props) => {
307
327
  <ConfirmModal />
308
328
  </div>
309
329
  );
330
+
331
+ const render = auth0Token ? (
332
+ <FlagsProvider config={featureFlagsConfig}>{content}</FlagsProvider>
333
+ ) : (
334
+ content
335
+ );
336
+
337
+ return render;
310
338
  };
311
339
 
312
340
  export const ERROR_HEADINGS = {
@@ -1,9 +1,6 @@
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';
7
4
 
8
5
  interface IButtonGroupOption {
9
6
  value: string | boolean;
@@ -25,15 +22,6 @@ interface IButtonGroupFieldProps {
25
22
  labelPosition?: string;
26
23
  labelWidth?: string | number;
27
24
  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;
37
25
  }
38
26
 
39
27
  class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
@@ -62,114 +50,55 @@ class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
62
50
  }
63
51
  };
64
52
 
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
-
81
53
  public render = (): JSX.Element => {
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
-
54
+ const { value, label, options, width, tooltip, info, labelPosition, labelWidth, disabled } =
55
+ this.props;
101
56
  const optionStyle: any = { width: `${100 / options.length}%` };
102
57
 
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
-
153
58
  return (
154
59
  <FieldWrapper
155
60
  customClass='button-group-field'
156
- label={this.props.label}
61
+ label={label}
157
62
  tooltip={tooltip}
158
63
  info={info}
159
64
  labelPosition={labelPosition}
160
65
  width={width}
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()}
66
+ labelWidth={labelWidth}>
67
+ <div className='button-group'>
68
+ {options.map((option, i) => {
69
+ const optionKey = option.value;
70
+ const optionLabel = option.label;
71
+ const icon = option.icon ? option.icon : null;
72
+ const tooltipId = `${optionKey}-${i}`;
73
+ const activeOption = optionKey === value;
74
+ const activeClass = activeOption ? 'active' : disabled ? 'disabled' : '';
75
+ const onClick = !activeOption
76
+ ? () => {
77
+ this.props.onChange(optionKey);
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>
173
102
  </FieldWrapper>
174
103
  );
175
104
  };
@@ -13,15 +13,6 @@ 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;
25
16
  }
26
17
 
27
18
  class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
@@ -37,42 +28,18 @@ class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
37
28
  }
38
29
 
39
30
  public render() {
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;
31
+ const { value, label, width, tooltip, info, labelPosition, labelWidth } = this.props;
56
32
  const icon = value === true ? ICON_CHECK : null;
57
33
 
58
34
  return (
59
35
  <FieldWrapper
60
36
  customClass='checkbox-field'
61
- label={this.props.label}
37
+ label={label}
62
38
  tooltip={tooltip}
63
39
  info={info}
64
40
  labelPosition={labelPosition}
65
41
  labelWidth={labelWidth}
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'>
42
+ width={width}>
76
43
  <div
77
44
  className='checkbox'
78
45
  onClick={(e) => this.toggle(e)}>
@@ -19,15 +19,6 @@ 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;
31
22
  }
32
23
 
33
24
  interface IColorFieldState {
@@ -112,6 +103,7 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
112
103
 
113
104
  public render() {
114
105
  const {
106
+ label,
115
107
  width,
116
108
  buttons,
117
109
  tooltip,
@@ -122,15 +114,7 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
122
114
  labelPosition,
123
115
  pickerPosition,
124
116
  labelWidth,
125
- disabled,
126
- override,
127
- showCopyPropIds,
128
- propKey,
129
- inventory,
130
- setOverride,
131
- removeOverride,
132
- onClose,
133
- activeOverride
117
+ disabled
134
118
  } = this.props;
135
119
  const { pickerOpen } = this.state;
136
120
  const disableAlpha = !enableAlpha;
@@ -157,22 +141,13 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
157
141
  return (
158
142
  <FieldWrapper
159
143
  customClass='color-field'
160
- label={this.props.label}
144
+ label={label}
161
145
  tooltip={tooltip}
162
146
  buttons={buttons}
163
147
  info={info}
164
148
  labelPosition={labelPosition}
165
149
  labelWidth={labelWidth}
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'>
150
+ width={width}>
176
151
  <div style={transparentBg}>
177
152
  <div
178
153
  className='swatch'
@@ -1,23 +1,17 @@
1
1
  import * as React from 'react';
2
2
  import Button from '../button/Button';
3
- import { ICON_BRACKET_CURLY, ICON_CHECK, ICON_TIMES } from '../../constants/icons';
4
-
5
- export type ControlListType = 'text' | 'number' | 'color' | 'textarea' | 'boolean' | 'icon';
3
+ import { ICON_TIMES } from '../../constants/icons';
6
4
 
7
5
  interface IControlledListProps {
8
6
  items?: any[];
9
7
  removable?: boolean;
10
8
  onRemove?(index): void;
11
- type?: ControlListType;
12
- content?: any;
13
- propKey?: string;
14
- previewMultiplier?: number;
15
9
  }
16
10
 
17
11
  class ControlledList extends React.PureComponent<IControlledListProps> {
18
- constructor(props: IControlledListProps) {
19
- super(props);
20
- }
12
+ private inputRef: any;
13
+
14
+ private submitHandler: any;
21
15
 
22
16
  public renderRemoveButton(index) {
23
17
  const { removable } = this.props;
@@ -37,61 +31,19 @@ class ControlledList extends React.PureComponent<IControlledListProps> {
37
31
  }
38
32
 
39
33
  public render() {
40
- const { items, type, content, previewMultiplier } = this.props;
34
+ const { items } = this.props;
41
35
  let buttons: JSX.Element[];
36
+
42
37
  if (items) {
43
38
  buttons = items.map((item, i) => {
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
- <p>{previewValue ? `{{ ${previewValue} }}` : 'PREVIEW NOT SET'}</p>
54
- </div>
55
- );
56
- case 'textarea':
57
- return (
58
- <div
59
- className='item textarea rta'
60
- key={`item-${i}`}>
61
- <textarea
62
- className='rta__textarea'
63
- value={item}
64
- disabled={true}
65
- />
66
- </div>
67
- );
68
- case 'boolean':
69
- const icon = content ? ICON_BRACKET_CURLY : item ? ICON_CHECK : null;
70
- return (
71
- <div
72
- className={`item ${content ? 'icon-toggle' : 'checkbox'}`}
73
- key={`item-${i}`}>
74
- {icon}
75
- </div>
76
- );
77
- case 'color':
78
- return (
79
- <div
80
- className='item color'
81
- key={`item-${i}`}
82
- style={{ backgroundColor: item }}
83
- />
84
- );
85
- default:
86
- return (
87
- <div
88
- className='item'
89
- key={`item-${i}`}>
90
- {item}
91
- {this.renderRemoveButton(i)}
92
- </div>
93
- );
94
- }
39
+ return (
40
+ <div
41
+ className='item'
42
+ key={`item-${i}`}>
43
+ {item}
44
+ {this.renderRemoveButton(i)}
45
+ </div>
46
+ );
95
47
  });
96
48
  }
97
49
 
@@ -79,6 +79,8 @@ interface IDataTableProps {
79
79
  // controlled sorting props, use internal sorting if not set
80
80
  sortBy?: any[];
81
81
  onSort?: (sortBy: any[]) => void;
82
+ maxItemsPerPage?: number;
83
+ minItemsPerPage?: number;
82
84
 
83
85
  // controlled selection props
84
86
  highlightBy?: any;
@@ -92,6 +94,9 @@ interface IDataTableProps {
92
94
  expandTags?: boolean;
93
95
 
94
96
  keyboardNav?: boolean;
97
+
98
+ useSimplePagination?: boolean;
99
+ hasMore?: boolean;
95
100
  }
96
101
 
97
102
  const processColumnData = (freshColumns): any[] => {
@@ -537,7 +542,11 @@ const DataTable: React.FC<IDataTableProps> = (props: IDataTableProps) => {
537
542
  ? () => props.onPage(props.currentPage - 1, pageSize)
538
543
  : previousPage,
539
544
  itemsPerPage: props.itemsPerPage,
540
- onItemsPerPage: (i) => props.onItemsPerPage(i)
545
+ onItemsPerPage: (i) => props.onItemsPerPage(i),
546
+ maxItemsPerPage: props.maxItemsPerPage,
547
+ minItemsPerPage: props.minItemsPerPage,
548
+ useSimplePagination: props.useSimplePagination,
549
+ hasMore: props.hasMore
541
550
  }}
542
551
  />
543
552
  )}
@@ -25,6 +25,10 @@ interface IPaginatorProps {
25
25
  setPageSize: (size: number) => void;
26
26
  itemsPerPage: number;
27
27
  onItemsPerPage: (size: number) => void;
28
+ maxItemsPerPage?: number;
29
+ minItemsPerPage?: number;
30
+ useSimplePagination?: boolean;
31
+ hasMore?: boolean;
28
32
  }
29
33
 
30
34
  const Paginator: React.FC<IPaginatorProps> = ({
@@ -38,7 +42,11 @@ const Paginator: React.FC<IPaginatorProps> = ({
38
42
  previousPage,
39
43
  nextPage,
40
44
  itemsPerPage,
41
- onItemsPerPage
45
+ onItemsPerPage,
46
+ maxItemsPerPage,
47
+ minItemsPerPage,
48
+ useSimplePagination,
49
+ hasMore
42
50
  }) => {
43
51
  const [getPageIndex, setPageIndex] = React.useState<number>(pageIndex);
44
52
  const [getItemsPerPage, setItemsPerPage] = React.useState<number>(itemsPerPage);
@@ -98,43 +106,60 @@ const Paginator: React.FC<IPaginatorProps> = ({
98
106
  return (
99
107
  <section className='ip-table-pagination'>
100
108
  <span>
101
- <Button
102
- style='subtle'
103
- size='small'
104
- tooltip='Go to first page'
105
- disabled={!canPreviousPage}
106
- onClick={() => gotoPage(1, pageSize)}>
107
- {ICON_ANGLE_DOUBLE_LEFT}
108
- </Button>
109
+ {!useSimplePagination && (
110
+ <Button
111
+ style='subtle'
112
+ size='small'
113
+ tooltip='Go to first page'
114
+ disabled={!canPreviousPage}
115
+ onClick={() => gotoPage(1, pageSize)}>
116
+ {ICON_ANGLE_DOUBLE_LEFT}
117
+ </Button>
118
+ )}
109
119
  <Button
110
120
  style='subtle'
111
121
  size='small'
112
122
  tooltip='Go to previous page'
113
- disabled={!canPreviousPage}
114
- onClick={() => previousPage()}>
123
+ disabled={(!canPreviousPage || !useSimplePagination) && getPageIndex === 1}
124
+ onClick={() => {
125
+ if (!useSimplePagination) {
126
+ previousPage();
127
+ } else {
128
+ gotoPage(getPageIndex - 1, pageSize);
129
+ }
130
+ }}>
115
131
  {ICON_ANGLE_LEFT}
116
132
  </Button>
117
133
  <Button
118
134
  style='subtle'
119
135
  size='small'
120
136
  tooltip='Go to next page'
121
- disabled={!canNextPage}
122
- onClick={() => nextPage()}>
137
+ disabled={(!canNextPage || !useSimplePagination) && !hasMore}
138
+ onClick={() => {
139
+ if (!useSimplePagination && !hasMore) {
140
+ nextPage();
141
+ } else {
142
+ gotoPage(getPageIndex + 1, pageSize);
143
+ }
144
+ }}>
123
145
  {ICON_ANGLE_RIGHT}
124
146
  </Button>
125
- <Button
126
- style='subtle'
127
- size='small'
128
- tooltip='Go to last page'
129
- disabled={!canNextPage}
130
- onClick={() => gotoPage(getPageCount, pageSize)}>
131
- {ICON_ANGLE_DOUBLE_RIGHT}
132
- </Button>
147
+ {!useSimplePagination && (
148
+ <Button
149
+ style='subtle'
150
+ size='small'
151
+ tooltip='Go to last page'
152
+ disabled={!canNextPage}
153
+ onClick={() => gotoPage(getPageCount, pageSize)}>
154
+ {ICON_ANGLE_DOUBLE_RIGHT}
155
+ </Button>
156
+ )}
133
157
  &nbsp;&nbsp;
134
158
  <span>
135
159
  {copy.table.page}&nbsp;&nbsp;
136
160
  <strong>
137
- {getPageIndex} of {getPageCount}
161
+ {getPageIndex} {useSimplePagination ? '' : 'of'}{' '}
162
+ {!useSimplePagination ? getPageCount : ''}
138
163
  </strong>
139
164
  &nbsp;&nbsp;
140
165
  </span>
@@ -196,13 +221,17 @@ const Paginator: React.FC<IPaginatorProps> = ({
196
221
  }}
197
222
  onBlur={() => onItemsPerPageBlur()}
198
223
  onKeyDown={(e) => onItemsPerPageKeyDown(e)}
224
+ max={maxItemsPerPage}
225
+ min={minItemsPerPage}
199
226
  />
200
227
  </span>
201
228
  </span>
202
229
 
203
- <span className='total-assets'>
204
- {copy.table.total}&nbsp;&nbsp;<strong>{totalItems || 0}</strong>
205
- </span>
230
+ {!useSimplePagination && (
231
+ <span className='total-assets'>
232
+ {copy.table.total}&nbsp;&nbsp;<strong>{totalItems || 0}</strong>
233
+ </span>
234
+ )}
206
235
  </section>
207
236
  );
208
237
  };