fix: sort search results by TSRank (#13875)

Before:


https://github.com/user-attachments/assets/85ecf0c9-fa51-4aff-ac4a-7743a845542b




After:





https://github.com/user-attachments/assets/60f81eaf-cd7c-4da5-9f44-cbdd223c8f90





/closes #11804

---------

Co-authored-by: etiennejouan <jouan.etienne@gmail.com>
This commit is contained in:
neo773
2025-08-19 23:07:25 +05:30
committed by GitHub
parent 025eaff9ec
commit 1b94621c05
2 changed files with 29 additions and 1 deletions
@@ -9,6 +9,7 @@ import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-r
import { multipleRecordPickerSearchFilterComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchFilterComponentState';
import { multipleRecordPickerSearchableObjectMetadataItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchableObjectMetadataItemsComponentState';
import { searchRecordStoreComponentFamilyState } from '@/object-record/record-picker/multiple-record-picker/states/searchRecordStoreComponentFamilyState';
import { sortMorphItems } from '@/object-record/record-picker/multiple-record-picker/utils/sortMorphItems';
import { type RecordPickerPickableMorphItem } from '@/object-record/record-picker/types/RecordPickerPickableMorphItem';
import { getObjectPermissionsFromMapByObjectMetadataId } from '@/settings/roles/role-permissions/objects-permissions/utils/getObjectPermissionsFromMapByObjectMetadataId';
import { type ApolloClient } from '@apollo/client';
@@ -260,11 +261,16 @@ export const useMultipleRecordPickerPerformSearch = () => {
)
: newMorphItems;
const sortedMorphItems = sortMorphItems(morphItems, [
...searchRecordsFilteredOnPickedRecords,
...searchRecordsExcludingPickedRecords,
]);
set(
multipleRecordPickerPickableMorphItemsComponentState.atomFamily({
instanceId: multipleRecordPickerInstanceId,
}),
morphItems,
sortedMorphItems,
);
const searchRecords = [
@@ -0,0 +1,22 @@
import { type RecordPickerPickableMorphItem } from '@/object-record/record-picker/types/RecordPickerPickableMorphItem';
import { type SearchRecord } from '~/generated-metadata/graphql';
export const sortMorphItems = (
morphItems: RecordPickerPickableMorphItem[],
searchRecords: SearchRecord[],
): RecordPickerPickableMorphItem[] => {
const indexByRecordId = new Map<string, number>();
searchRecords.forEach((record, index) => {
indexByRecordId.set(record.recordId, index);
});
return morphItems.sort((a, b) => {
if (a.isSelected && !b.isSelected) return -1;
if (!a.isSelected && b.isSelected) return 1;
const aRank = indexByRecordId.get(a.recordId);
const bRank = indexByRecordId.get(b.recordId);
return (aRank ?? -1) - (bRank ?? -1);
});
};