Skip to content

Commit cbcd3e0

Browse files
Merge pull request #137 from devgateway/task/TOBACCO-1585/fix-default-values-in-post-filters
fix (TOBACCO-1585): clear default filters when changing select type. …
2 parents df16ef5 + 555bfdb commit cbcd3e0

4 files changed

Lines changed: 30 additions & 9 deletions

File tree

.changeset/itchy-toys-wait.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@devgateway/dvz-wp-commons": patch
3+
---
4+
5+
Normalize default values in posts filter

packages/commons/src/Blocks.jsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,16 +266,19 @@ export class BlockEditWithFilters extends ComponentWithSettings {
266266

267267
onDefaultCategoryChanged(value, filterType = 'multi-select', checked) {
268268
const { setAttributes, attributes: { defaultValues } } = this.props;
269+
const normalizedValue = value === null || value === undefined || value === 'none'
270+
? value
271+
: Number(value);
269272

270273
if (filterType === 'multi-select') {
271274
if (!checked) {
272-
setAttributes({ defaultValues: defaultValues.filter(i => i !== value) });
275+
setAttributes({ defaultValues: defaultValues.filter(i => Number(i) !== normalizedValue) });
273276
} else {
274-
setAttributes({ defaultValues: [...defaultValues, value] });
277+
setAttributes({ defaultValues: [...defaultValues, normalizedValue] });
275278
}
276279
} else {
277280
// For single-select, 'checked' parameter is not used, 'value' is the selected value
278-
setAttributes({ defaultValues: [value] });
281+
setAttributes({ defaultValues: [normalizedValue] });
279282
}
280283
}
281284

@@ -520,7 +523,7 @@ export class BlockEditWithFilters extends ComponentWithSettings {
520523
</Text>
521524
<SelectControl
522525
options={[{ label: 'None', value: 'none' }, ...this.categoriesOptions()]}
523-
value={defaultValues[0]} onChange={(value) => {
526+
value={defaultValues[0] !== undefined ? String(defaultValues[0]) : 'none'} onChange={(value) => {
524527
this.onDefaultCategoryChanged(value, filterType);
525528
}} />
526529
</PanelBody>

plugins/wp-react-blocks-plugin/blocks/posts-filter/BlockEdit.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class BlockEdit extends BlockEditWithFilters {
8484
label={__('Filter Type')}
8585
value={filterType}
8686
onChange={(filterType) => {
87-
setAttributes({ filterType: filterType });
87+
setAttributes({ filterType: filterType, defaultValues: [] });
8888
}}
8989
options={[
9090
{ label: "Single select", value: "single-select" },
@@ -99,7 +99,8 @@ class BlockEdit extends BlockEditWithFilters {
9999
onChange={() => setAttributes({
100100
isCountryFilter: !isCountryFilter,
101101
isYearFilter: false,
102-
selectedYear: null
102+
selectedYear: null,
103+
defaultValues: []
103104
})} />
104105

105106
<ToggleControl
@@ -109,7 +110,8 @@ class BlockEdit extends BlockEditWithFilters {
109110
onChange={() => setAttributes({
110111
isYearFilter: !isYearFilter,
111112
isCountryFilter: false,
112-
selectedYear: null
113+
selectedYear: null,
114+
defaultValues: []
113115
})} />
114116

115117
</PanelBody>

plugins/wp-react-blocks-plugin/blocks/posts-filter/BlockSave.jsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ const SaveComponent = (props) => {
2828
}
2929
} = props;
3030

31+
const normalizedDefaultValues = Array.isArray(defaultValues)
32+
? defaultValues
33+
.map((value) => {
34+
if (value === null || value === undefined || value === 'none') {
35+
return value;
36+
}
37+
const numericValue = Number(value);
38+
return Number.isNaN(numericValue) ? value : numericValue;
39+
})
40+
: defaultValues;
41+
3142
const divClass = {};
3243
const divStyles = {};
3344

@@ -49,12 +60,12 @@ const SaveComponent = (props) => {
4960
data-all-none-same-behaviour={allNoneSameBehaviour}
5061
data-auto-apply={autoApply}
5162
data-taxonomy={taxonomy}
52-
data-categories={categories.toString()}
63+
data-categories={encodeURIComponent(JSON.stringify(categories))}
5364
data-is-country-filter={isCountryFilter}
5465
data-is-year-filter={isYearFilter}
5566
data-selected-year={selectedYear}
5667
data-type={type}
57-
data-default-values={encodeURIComponent(JSON.stringify(defaultValues))}
68+
data-default-values={encodeURIComponent(JSON.stringify(normalizedDefaultValues))}
5869
data-wordpress-source={wordpressSource}
5970
data-wordpress-source-type={wordpressSourceType}>
6071
</div>

0 commit comments

Comments
 (0)