@axinom/mosaic-ui 0.34.0-rc.7 → 0.34.0-rc.8
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/components/Filters/Filter/Filter.d.ts +2 -1
- package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
- package/dist/components/Filters/Filters.d.ts.map +1 -1
- package/dist/components/Filters/Filters.model.d.ts +2 -0
- package/dist/components/Filters/Filters.model.d.ts.map +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/Filters/Filter/Filter.spec.tsx +24 -1
- package/src/components/Filters/Filter/Filter.tsx +6 -0
- package/src/components/Filters/Filters.model.ts +3 -0
- package/src/components/Filters/Filters.stories.tsx +9 -0
- package/src/components/Filters/Filters.tsx +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axinom/mosaic-ui",
|
|
3
|
-
"version": "0.34.0-rc.
|
|
3
|
+
"version": "0.34.0-rc.8",
|
|
4
4
|
"description": "UI components for building Axinom Mosaic applications",
|
|
5
5
|
"author": "Axinom",
|
|
6
6
|
"license": "PROPRIETARY",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"build-storybook": "storybook build"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@axinom/mosaic-core": "^0.4.7-rc.
|
|
35
|
+
"@axinom/mosaic-core": "^0.4.7-rc.8",
|
|
36
36
|
"@faker-js/faker": "^7.4.0",
|
|
37
37
|
"@popperjs/core": "^2.9.2",
|
|
38
38
|
"clsx": "^1.1.0",
|
|
@@ -102,5 +102,5 @@
|
|
|
102
102
|
"publishConfig": {
|
|
103
103
|
"access": "public"
|
|
104
104
|
},
|
|
105
|
-
"gitHead": "
|
|
105
|
+
"gitHead": "5edc02cc390133cd76b231e57bde5394db8a5aa0"
|
|
106
106
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { mount, shallow } from 'enzyme';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Button } from '../../Buttons';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
CustomFilterProps,
|
|
6
|
+
FilterType,
|
|
7
|
+
FilterTypes,
|
|
8
|
+
SelectedValueRenderer,
|
|
9
|
+
} from '../Filters.model';
|
|
5
10
|
import { FreeTextFilter } from '../SelectionTypes/FreeTextFilter/FreeTextFilter';
|
|
6
11
|
import { OptionsFilter } from '../SelectionTypes/OptionsFilter/OptionsFilter';
|
|
7
12
|
import { Filter, FilterProps } from './Filter';
|
|
@@ -148,6 +153,24 @@ describe('Filter', () => {
|
|
|
148
153
|
expect(wrapper.find('.selectedValue').exists()).toBe(false);
|
|
149
154
|
});
|
|
150
155
|
|
|
156
|
+
it(`'selectedValueRenderer' value is displayed when the prop is set`, () => {
|
|
157
|
+
const renderedValue = `${sampleText} renderer`;
|
|
158
|
+
const selectedValueRenderer: SelectedValueRenderer = (value) => {
|
|
159
|
+
return `${value} renderer`;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const wrapper = mount(
|
|
163
|
+
<Filter {...defaultProps} options={freeTextFilter} value={sampleText} />,
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
expect(wrapper.find('.selectedValue').text()).toEqual(sampleText);
|
|
167
|
+
|
|
168
|
+
wrapper.setProps({ selectedValueRenderer });
|
|
169
|
+
wrapper.update();
|
|
170
|
+
|
|
171
|
+
expect(wrapper.find('.selectedValue').text()).toEqual(renderedValue);
|
|
172
|
+
});
|
|
173
|
+
|
|
151
174
|
it('Raises onFilterChange with prop name and new undefined value when filter is closed', () => {
|
|
152
175
|
const mockValue = 'test-value';
|
|
153
176
|
const wrapper = mount(
|
|
@@ -26,6 +26,7 @@ export interface FilterProps<T extends Data> {
|
|
|
26
26
|
index?: number;
|
|
27
27
|
isActive: boolean;
|
|
28
28
|
className?: string;
|
|
29
|
+
selectedValueRenderer?: (value: FilterValue) => string;
|
|
29
30
|
onFilterChange: (prop: keyof T, value: FilterValue, index: number) => void;
|
|
30
31
|
onValidate?: (currentValue: FilterValue) => string | null | undefined;
|
|
31
32
|
onFilterClicked: () => void;
|
|
@@ -37,6 +38,7 @@ export const Filter = <T extends Data>({
|
|
|
37
38
|
index = -1,
|
|
38
39
|
isActive,
|
|
39
40
|
className = '',
|
|
41
|
+
selectedValueRenderer,
|
|
40
42
|
onFilterChange,
|
|
41
43
|
onFilterClicked,
|
|
42
44
|
onValidate,
|
|
@@ -72,6 +74,10 @@ export const Filter = <T extends Data>({
|
|
|
72
74
|
};
|
|
73
75
|
|
|
74
76
|
const renderValue = (value: unknown): ReactNode => {
|
|
77
|
+
if (selectedValueRenderer !== undefined) {
|
|
78
|
+
return selectedValueRenderer(value);
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
switch (options.type) {
|
|
76
82
|
case FilterTypes.Date:
|
|
77
83
|
return formatDate(String(value));
|
|
@@ -15,6 +15,7 @@ export interface FilterConfig<T extends Data> {
|
|
|
15
15
|
label: string;
|
|
16
16
|
property: keyof T;
|
|
17
17
|
type: FilterTypes;
|
|
18
|
+
selectedValueRenderer?: SelectedValueRenderer;
|
|
18
19
|
onValidate?: FilterValidatorFunction<T>;
|
|
19
20
|
}
|
|
20
21
|
|
|
@@ -105,3 +106,5 @@ export type FilterValidatorFunction<T> = (
|
|
|
105
106
|
value: FilterValue,
|
|
106
107
|
allValues: FilterValues<T>,
|
|
107
108
|
) => FilterValidationResult;
|
|
109
|
+
|
|
110
|
+
export type SelectedValueRenderer = (value: FilterValue) => string;
|
|
@@ -153,6 +153,15 @@ const customFilter: FilterType<{ custom: string }> = {
|
|
|
153
153
|
label: 'Custom Filter (multi select)',
|
|
154
154
|
property: 'custom',
|
|
155
155
|
type: FilterTypes.Custom,
|
|
156
|
+
selectedValueRenderer: (value: unknown) => {
|
|
157
|
+
const items = value as string[];
|
|
158
|
+
|
|
159
|
+
return String(
|
|
160
|
+
`${items.length} item${items.length === 1 ? '' : 's'}: ${items
|
|
161
|
+
.join(', ')
|
|
162
|
+
.replace(/([a-zA-Z])(\d)/g, '$1 $2')}`,
|
|
163
|
+
);
|
|
164
|
+
},
|
|
156
165
|
component: CustomFilterComponent,
|
|
157
166
|
};
|
|
158
167
|
|
|
@@ -134,6 +134,7 @@ export const Filters = <T extends Data>({
|
|
|
134
134
|
index={index}
|
|
135
135
|
isActive={index === activeFilterIndex}
|
|
136
136
|
onFilterChange={filtersChangedHandler}
|
|
137
|
+
selectedValueRenderer={filter.selectedValueRenderer}
|
|
137
138
|
onValidate={(currentValue) =>
|
|
138
139
|
filter.onValidate &&
|
|
139
140
|
filter.onValidate(currentValue, activeFilters.current)
|