Skip to content

Commit

Permalink
feat(didyoumean): allow shifting queryCorrectionMode on the fly (#4305)
Browse files Browse the repository at this point in the history
https://coveord.atlassian.net/browse/KIT-3482

---------

Co-authored-by: Felix Perron-Brault <[email protected]>
  • Loading branch information
louis-bompart and fpbrault committed Oct 10, 2024
1 parent 121c419 commit 1efcba2
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
buildQueryTrigger,
QueryTriggerState,
} from '@coveo/headless';
import {Component, h, Prop, State} from '@stencil/core';
import {Component, h, Prop, State, Watch} from '@stencil/core';
import {
BindStateToController,
InitializableComponent,
Expand Down Expand Up @@ -68,6 +68,11 @@ export class AtomicDidYouMean implements InitializableComponent {
@Prop({reflect: true})
public queryCorrectionMode: 'legacy' | 'next' = 'next';

@Watch('queryCorrectionMode')
public updateQueryCorrectionMode() {
this.didYouMean.updateQueryCorrectionMode(this.queryCorrectionMode);
}

public initialize() {
this.didYouMean = buildDidYouMean(this.bindings.engine, {
options: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,15 @@ describe('did you mean', () => {
expect(applyDidYouMeanCorrection).toHaveBeenCalledWith('bar');
});

it('should allow to update the query correction mode', () => {
const initialState = createMockState();
initialState.didYouMean.queryCorrectionMode = 'legacy';
initDidYouMean({}, initialState);
dym.updateQueryCorrectionMode('next');

expect(engine.dispatch).toHaveBeenCalledWith(setCorrectionMode('next'));
});

it('should dispatch disableAutomaticQueryCorrection at initialization when specified', () => {
initDidYouMean({options: {automaticallyCorrectQuery: false}});
expect(disableAutomaticQueryCorrection).toHaveBeenCalledTimes(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ export interface DidYouMeanProps {
options?: DidYouMeanOptions;
}

type QueryCorrectionMode = 'legacy' | 'next';

export interface DidYouMeanOptions {
/**
* Whether to automatically apply corrections for queries that would otherwise return no results.
Expand All @@ -46,14 +48,25 @@ export interface DidYouMeanOptions {
*
* Default value is `next`.
*/
queryCorrectionMode?: 'legacy' | 'next';
queryCorrectionMode?: QueryCorrectionMode;
}
export interface DidYouMean extends Controller {
/**
* Apply query correction using the query correction, if any, currently present in the state.
*/
applyCorrection(): void;

/**
* Update which query correction system to use
*
* `legacy`: Query correction is powered by the legacy index system. This system relies on an algorithm using solely the index content to compute the suggested terms.
* `next`: Query correction is powered by a machine learning system, requiring a valid query suggestion model configured in your Coveo environment to function properly. This system relies on machine learning algorithms to compute the suggested terms.
*
* @param queryCorrectionMode - the query correction mode to use
*
*/
updateQueryCorrectionMode(queryCorrectionMode: QueryCorrectionMode): void;

/**
* The state of the `DidYouMean` controller.
*/
Expand Down Expand Up @@ -138,6 +151,9 @@ export function buildCoreDidYouMean(
applyDidYouMeanCorrection(this.state.queryCorrection.correctedQuery)
);
},
updateQueryCorrectionMode(queryCorrectionMode: QueryCorrectionMode) {
dispatch(setCorrectionMode(queryCorrectionMode));
},
};
}

Expand Down

0 comments on commit 1efcba2

Please sign in to comment.