Skip to content

Commit

Permalink
fix(createURL): ensure refined value gets removed (#5912)
Browse files Browse the repository at this point in the history
---------

Co-authored-by: Dhaya <154633+dhayab@users.noreply.github.com>
  • Loading branch information
Haroenv and dhayab authored Nov 14, 2023
1 parent 2da9d47 commit 77919a9
Show file tree
Hide file tree
Showing 16 changed files with 520 additions and 247 deletions.
10 changes: 5 additions & 5 deletions bundlesize.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,27 @@
},
{
"path": "./packages/instantsearch.js/dist/instantsearch.production.min.js",
"maxSize": "75.25 kB"
"maxSize": "75.5 kB"
},
{
"path": "./packages/instantsearch.js/dist/instantsearch.development.js",
"maxSize": "165.5 kB"
"maxSize": "166.25 kB"
},
{
"path": "packages/react-instantsearch-core/dist/umd/ReactInstantSearchCore.min.js",
"maxSize": "46.25 kB"
},
{
"path": "packages/react-instantsearch/dist/umd/ReactInstantSearch.min.js",
"maxSize": "57 kB"
"maxSize": "57.25 kB"
},
{
"path": "packages/vue-instantsearch/vue2/umd/index.js",
"maxSize": "64 kB"
"maxSize": "64.25 kB"
},
{
"path": "packages/vue-instantsearch/vue3/umd/index.js",
"maxSize": "64.25 kB"
"maxSize": "64.75 kB"
},
{
"path": "packages/vue-instantsearch/vue2/cjs/index.js",
Expand Down
54 changes: 36 additions & 18 deletions packages/instantsearch.js/src/__tests__/common-connectors.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,21 @@ const testSetups: TestSetupsMap<TestSuites> = {
>
LINK
</a>
<button data-testid="HierarchicalMenu-refine">
refine
</button>
<form data-testid="HierarchicalMenu-refine-form">
<input type="text" data-testid="HierarchicalMenu-refine-input" />
</form>
`;

renderOptions.widgetParams.container
.querySelector('[data-testid="HierarchicalMenu-refine"]')!
.addEventListener('click', () => {
renderOptions.refine('Apple');
.querySelector('[data-testid="HierarchicalMenu-refine-form"]')!
.addEventListener('submit', (event) => {
renderOptions.refine(
(
(event.currentTarget as HTMLFormElement).elements.item(
0
) as HTMLInputElement
).value
);
});
});

Expand Down Expand Up @@ -106,15 +112,21 @@ const testSetups: TestSetupsMap<TestSuites> = {
>
LINK
</a>
<button data-testid="RefinementList-refine">
refine
</button>
<form data-testid="RefinementList-refine-form">
<input type="text" data-testid="RefinementList-refine-input" />
</form>
`;

renderOptions.widgetParams.container
.querySelector('[data-testid="RefinementList-refine"]')!
.addEventListener('click', () => {
renderOptions.refine('Apple');
.querySelector('[data-testid="RefinementList-refine-form"]')!
.addEventListener('submit', (event) => {
renderOptions.refine(
(
(event.currentTarget as HTMLFormElement).elements.item(
0
) as HTMLInputElement
).value
);
});
});

Expand All @@ -137,15 +149,21 @@ const testSetups: TestSetupsMap<TestSuites> = {
>
LINK
</a>
<button data-testid="Menu-refine">
refine
</button>
<form data-testid="Menu-refine-form">
<input type="text" data-testid="Menu-refine-input" />
</form>
`;

renderOptions.widgetParams.container
.querySelector('[data-testid="Menu-refine"]')!
.addEventListener('click', () => {
renderOptions.refine('Apple');
.querySelector('[data-testid="Menu-refine-form"]')!
.addEventListener('submit', (event) => {
renderOptions.refine(
(
(event.currentTarget as HTMLFormElement).elements.item(
0
) as HTMLInputElement
).value
);
});
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type {
TransformItems,
CreateURL,
WidgetRenderState,
IndexUiState,
} from '../../types';
import type { SearchParameters, SearchResults } from 'algoliasearch-helper';

Expand Down Expand Up @@ -243,17 +244,13 @@ const connectBreadcrumb: BreadcrumbConnector = function connectBreadcrumb(
hierarchicalFacetName
);

if (!path.length) {
return uiState;
}

return {
return removeEmptyRefinementsFromUiState({
...uiState,
hierarchicalMenu: {
...uiState.hierarchicalMenu,
[hierarchicalFacetName]: path,
},
};
});
},

getWidgetSearchParameters(searchParameters, { uiState }) {
Expand Down Expand Up @@ -336,4 +333,29 @@ function shiftItemsValues(array: BreadcrumbConnectorParamsItem[]) {
}));
}

function removeEmptyRefinementsFromUiState(indexUiState: IndexUiState) {
const { hierarchicalMenu, ...indexUiStateBase } = indexUiState;

if (!hierarchicalMenu) {
return indexUiState;
}

const connectorUiState = Object.keys(hierarchicalMenu).reduce(
(acc, key) => ({
...acc,
...(hierarchicalMenu[key].length > 0
? { [key]: hierarchicalMenu[key] }
: {}),
}),
{}
);

return {
...indexUiStateBase,
...(Object.keys(connectorUiState).length > 0
? { hierarchicalMenu: connectorUiState }
: {}),
};
}

export default connectBreadcrumb;
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import type {
Widget,
SortBy,
WidgetRenderState,
IndexUiState,
} from '../../types';
import type { SearchResults } from 'algoliasearch-helper';

Expand Down Expand Up @@ -396,17 +397,13 @@ const connectHierarchicalMenu: HierarchicalMenuConnector =
hierarchicalFacetName
);

if (!path.length) {
return uiState;
}

return {
return removeEmptyRefinementsFromUiState({
...uiState,
hierarchicalMenu: {
...uiState.hierarchicalMenu,
[hierarchicalFacetName]: path,
},
};
});
},

getWidgetSearchParameters(searchParameters, { uiState }) {
Expand Down Expand Up @@ -482,4 +479,29 @@ As this is not supported, please make sure to remove this other widget or this H
};
};

function removeEmptyRefinementsFromUiState(indexUiState: IndexUiState) {
const { hierarchicalMenu, ...indexUiStateBase } = indexUiState;

if (!hierarchicalMenu) {
return indexUiState;
}

const connectorUiState = Object.keys(hierarchicalMenu).reduce(
(acc, key) => ({
...acc,
...(hierarchicalMenu[key].length > 0
? { [key]: hierarchicalMenu[key] }
: {}),
}),
{}
);

return {
...indexUiStateBase,
...(Object.keys(connectorUiState).length > 0
? { hierarchicalMenu: connectorUiState }
: {}),
};
}

export default connectHierarchicalMenu;
32 changes: 26 additions & 6 deletions packages/instantsearch.js/src/connectors/menu/connectMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { SendEventForFacet } from '../../lib/utils';
import type {
Connector,
CreateURL,
IndexUiState,
RenderOptions,
SortBy,
TransformItems,
Expand Down Expand Up @@ -333,17 +334,13 @@ const connectMenu: MenuConnector = function connectMenu(
const [value] =
searchParameters.getHierarchicalFacetBreadcrumb(attribute);

if (!value) {
return uiState;
}

return {
return removeEmptyRefinementsFromUiState({
...uiState,
menu: {
...uiState.menu,
[attribute]: value,
},
};
});
},

getWidgetSearchParameters(searchParameters, { uiState }) {
Expand Down Expand Up @@ -400,4 +397,27 @@ As this is not supported, please make sure to remove this other widget or this M
};
};

function removeEmptyRefinementsFromUiState(indexUiState: IndexUiState) {
const { menu, ...indexUiStateBase } = indexUiState;

if (!menu) {
return indexUiState;
}

const connectorUiState = Object.keys(menu).reduce(
(acc, key) => ({
...acc,
...(menu[key]?.length > 0 ? { [key]: menu[key] } : {}),
}),
{}
);

return {
...indexUiStateBase,
...(Object.keys(connectorUiState).length > 0
? { menu: connectorUiState }
: {}),
};
}

export default connectMenu;
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import type { SendEventForFacet } from '../../lib/utils';
import type {
Connector,
CreateURL,
IndexUiState,
InstantSearch,
TransformItems,
WidgetRenderState,
Expand Down Expand Up @@ -234,17 +235,13 @@ const connectNumericMenu: NumericMenuConnector = function connectNumericMenu(
const min = (values['>='] && values['>='][0]) || '';
const max = (values['<='] && values['<='][0]) || '';

if (min === '' && max === '') {
return uiState;
}

return {
return removeEmptyRefinementsFromUiState({
...uiState,
numericMenu: {
...uiState.numericMenu,
[attribute]: `${min}:${max}`,
},
};
});
},

getWidgetSearchParameters(searchParameters, { uiState }) {
Expand Down Expand Up @@ -486,4 +483,27 @@ function hasNumericRefinement(
);
}

function removeEmptyRefinementsFromUiState(indexUiState: IndexUiState) {
const { numericMenu, ...indexUiStateBase } = indexUiState;

if (!numericMenu) {
return indexUiState;
}

const connectorUiState = Object.keys(numericMenu).reduce(
(acc, key) => ({
...acc,
...(numericMenu[key] !== ':' ? { [key]: numericMenu[key] } : {}),
}),
{}
);

return {
...indexUiStateBase,
...(Object.keys(connectorUiState).length > 0
? { numericMenu: connectorUiState }
: {}),
};
}

export default connectNumericMenu;
Loading

0 comments on commit 77919a9

Please sign in to comment.