fix: give content match a lower score (#4499)
This commit is contained in:
@@ -176,6 +176,8 @@ export const pageToCommand = (
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const contentMatchedMagicString = '__$$content_matched$$__';
|
||||||
|
|
||||||
export const usePageCommands = () => {
|
export const usePageCommands = () => {
|
||||||
// todo: considering collections for searching pages
|
// todo: considering collections for searching pages
|
||||||
// const { savedCollections } = useCollectionManager(currentCollectionsAtom);
|
// const { savedCollections } = useCollectionManager(currentCollectionsAtom);
|
||||||
@@ -221,7 +223,7 @@ export const usePageCommands = () => {
|
|||||||
|
|
||||||
if (pageIds.includes(page.id)) {
|
if (pageIds.includes(page.id)) {
|
||||||
// hack to make the page always showing in the search result
|
// hack to make the page always showing in the search result
|
||||||
command.value += query;
|
command.value += contentMatchedMagicString;
|
||||||
}
|
}
|
||||||
|
|
||||||
return command;
|
return command;
|
||||||
@@ -372,11 +374,24 @@ export const useCMDKCommandGroups = () => {
|
|||||||
|
|
||||||
export const customCommandFilter = (value: string, search: string) => {
|
export const customCommandFilter = (value: string, search: string) => {
|
||||||
// strip off the part between __>>> and <<<__
|
// strip off the part between __>>> and <<<__
|
||||||
const label = value.replace(
|
let label = value.replace(
|
||||||
new RegExp(valueWrapperStart + '.*' + valueWrapperEnd, 'g'),
|
new RegExp(valueWrapperStart + '.*' + valueWrapperEnd, 'g'),
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
return commandScore(label, search);
|
|
||||||
|
const pageContentMatched = label.includes(contentMatchedMagicString);
|
||||||
|
if (pageContentMatched) {
|
||||||
|
label = label.replace(contentMatchedMagicString, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
const originalScore = commandScore(label, search);
|
||||||
|
|
||||||
|
// if the command has matched the content but not the label,
|
||||||
|
// we should give it a higher score, but not too high
|
||||||
|
if (originalScore < 0.01 && pageContentMatched) {
|
||||||
|
return 0.3;
|
||||||
|
}
|
||||||
|
return originalScore;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useCommandFilteredStatus = (
|
export const useCommandFilteredStatus = (
|
||||||
|
|||||||
@@ -365,8 +365,8 @@ const Command = React.forwardRef<HTMLDivElement, CommandProps>(
|
|||||||
// Sort the items
|
// Sort the items
|
||||||
getValidItems()
|
getValidItems()
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
const valueA = a.getAttribute(VALUE_ATTR);
|
const valueA = a.getAttribute('id');
|
||||||
const valueB = b.getAttribute(VALUE_ATTR);
|
const valueB = b.getAttribute('id');
|
||||||
return (scores.get(valueB) ?? 0) - (scores.get(valueA) ?? 0);
|
return (scores.get(valueB) ?? 0) - (scores.get(valueA) ?? 0);
|
||||||
})
|
})
|
||||||
.forEach(item => {
|
.forEach(item => {
|
||||||
|
|||||||
Reference in New Issue
Block a user