@true-engineering/true-react-common-ui-kit 3.48.0 → 3.49.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@true-engineering/true-react-common-ui-kit",
3
- "version": "3.48.0",
3
+ "version": "3.49.0",
4
4
  "description": "True Engineering React UI Kit with theming support",
5
5
  "author": "True Engineering (https://trueengineering.ru)",
6
6
  "keywords": [
@@ -29,7 +29,7 @@ export function FilterValueView<Values, Key extends keyof Values>({
29
29
  return <></>;
30
30
  }
31
31
 
32
- if (filter.getSelectedValueView !== undefined) {
32
+ if (isNotEmpty(filter.getSelectedValueView)) {
33
33
  return <span className={classes.text}>{filter.getSelectedValueView(value)}</span>;
34
34
  }
35
35
 
@@ -94,7 +94,7 @@ export function FilterValueView<Values, Key extends keyof Values>({
94
94
  const intervalValueFrom = intervalValue[0];
95
95
  const intervalValueTo = intervalValue[1];
96
96
 
97
- const intervals = [];
97
+ const intervals: string[] = [];
98
98
  if (intervalValueFrom !== undefined) {
99
99
  intervals.push(`${translates.from.toLowerCase()} ${String(intervalValueFrom)}`);
100
100
  }
@@ -105,19 +105,6 @@ export function FilterValueView<Values, Key extends keyof Values>({
105
105
  return <span className={classes.text}>{intervals.join(' ')}</span>;
106
106
  }
107
107
 
108
- if (isMultiple) {
109
- return (
110
- <>
111
- {Array.isArray(value) && value.length > 0 && (
112
- <>
113
- <span className={classes.text}>{displayValue(value[0])}</span>
114
- <span className={classes.count}>{value.length > 1 && ` (+${value.length - 1})`}</span>
115
- </>
116
- )}
117
- </>
118
- );
119
- }
120
-
121
108
  if (isDate) {
122
109
  const { from, to, periodType, label } = value as unknown as IPeriod;
123
110
  const hasFrom = from !== undefined && from !== null;
@@ -127,7 +114,7 @@ export function FilterValueView<Values, Key extends keyof Values>({
127
114
  return <span className={classes.text}>{displayValue(label)}</span>;
128
115
  }
129
116
 
130
- const range = [];
117
+ const range: string[] = [];
131
118
  if (hasFrom) {
132
119
  if (!hasTo) {
133
120
  range.push(translates.from.toLowerCase());
@@ -146,12 +133,27 @@ export function FilterValueView<Values, Key extends keyof Values>({
146
133
  return <span className={classes.text}>{range.join(' ')}</span>;
147
134
  }
148
135
 
136
+ if (isMultiple) {
137
+ const convertValue = filter.getSelectedValue ?? displayValue;
138
+
139
+ return (
140
+ <>
141
+ {Array.isArray(value) && value.length > 0 && (
142
+ <>
143
+ <span className={classes.text}>{convertValue(value[0])}</span>
144
+ <span className={classes.count}>{value.length > 1 && ` (+${value.length - 1})`}</span>
145
+ </>
146
+ )}
147
+ </>
148
+ );
149
+ }
150
+
149
151
  if (isRange && Array.isArray(value)) {
150
152
  const rangeValue = value as unknown as number[];
151
153
  const rangeValueFrom = rangeValue[0];
152
154
  const rangeValueTo = rangeValue[1];
153
155
 
154
- const range = [];
156
+ const range: string[] = [];
155
157
  if (rangeValueFrom !== undefined) {
156
158
  range.push(`${translates.from.toLowerCase()} ${String(rangeValueFrom)}`);
157
159
  }
@@ -84,22 +84,40 @@ export type IDateRangeConfigItem<Value> = IConfigItemBasicBase<Value> & {
84
84
  dateFormat?: string;
85
85
  } & Omit<IFilterWithPeriodProps, 'value' | 'onChange' | 'setIsOpen'>;
86
86
 
87
- export type CustomComponent<Value> = FC<{
87
+ export interface ICustomComponentProps<Value> {
88
88
  value?: Value;
89
89
  onChange: (v?: Value) => void;
90
90
  onClose?: () => void;
91
91
  filter: ICustomConfigItem<Value>;
92
92
  localeKey?: IFilterLocaleKey;
93
93
  locale?: IPartialFilterLocale;
94
- }>;
94
+ }
95
+
96
+ export type CustomComponent<Value> = FC<ICustomComponentProps<Value>>;
97
+
98
+ export type ICustomValue<V> = V extends Array<infer T> ? T : never;
99
+
100
+ export interface ICustomRangeConfigItem<Value> extends IConfigItemBasicBase<Value> {
101
+ // eslint-disable-next-line @typescript-eslint/ban-types
102
+ [key: string & {}]: any;
103
+ type: 'custom';
104
+ component: CustomComponent<Value>;
105
+ valueViewType?: 'range';
106
+ }
95
107
 
96
- export interface ICustomConfigItem<Value> extends IConfigItemBasicBase<Value> {
97
- [key: string]: any;
108
+ export interface ICustomMultipleConfigItem<Value> extends IConfigItemBasicBase<Value> {
109
+ // eslint-disable-next-line @typescript-eslint/ban-types
110
+ [key: string & {}]: any;
98
111
  type: 'custom';
99
112
  component: CustomComponent<Value>;
100
- valueViewType?: 'range' | 'multiple';
113
+ valueViewType?: 'multiple';
114
+ getSelectedValue?: (v: ICustomValue<Value>) => ReactNode;
101
115
  }
102
116
 
117
+ export type ICustomConfigItem<Value> =
118
+ | ICustomRangeConfigItem<Value>
119
+ | ICustomMultipleConfigItem<Value>;
120
+
103
121
  export type ConfigItem<Value> =
104
122
  | ISelectConfigItem<Value>
105
123
  | IMultiSelectConfigItem<Value>