Merge pull request #956 from ente-io/caption-search

add caption search support
This commit is contained in:
Abhinav Kumar 2023-02-24 16:32:37 +05:30 committed by GitHub
commit 338e40e100
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 4 deletions

View file

@ -99,6 +99,9 @@ export default function SearchInput(props: Iprops) {
case SuggestionType.FILE_NAME:
search = { files: selectedOption.value as number[] };
break;
case SuggestionType.FILE_CAPTION:
search = { files: selectedOption.value as number[] };
break;
case SuggestionType.PERSON:
search = { person: selectedOption.value as Person };
break;

View file

@ -44,7 +44,8 @@ export const getAutoCompleteSuggestions =
...getYearSuggestion(searchPhrase),
...getDateSuggestion(searchPhrase),
...getCollectionSuggestion(searchPhrase, collections),
getFileSuggestion(searchPhrase, files),
getFileNameSuggestion(searchPhrase, files),
getFileCaptionSuggestion(searchPhrase, files),
...(await getThingSuggestion(searchPhrase)),
...(await getWordSuggestion(searchPhrase)),
];
@ -191,11 +192,11 @@ function getCollectionSuggestion(
);
}
function getFileSuggestion(
function getFileNameSuggestion(
searchPhrase: string,
files: EnteFile[]
): Suggestion {
const matchedFiles = searchFiles(searchPhrase, files);
const matchedFiles = searchFilesByName(searchPhrase, files);
return {
type: SuggestionType.FILE_NAME,
value: matchedFiles.map((file) => file.id),
@ -203,6 +204,18 @@ function getFileSuggestion(
};
}
function getFileCaptionSuggestion(
searchPhrase: string,
files: EnteFile[]
): Suggestion {
const matchedFiles = searchFilesByCaption(searchPhrase, files);
return {
type: SuggestionType.FILE_CAPTION,
value: matchedFiles.map((file) => file.id),
label: searchPhrase,
};
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async function getLocationSuggestions(searchPhrase: string) {
const locationResults = await searchLocation(searchPhrase);
@ -252,7 +265,7 @@ function searchCollection(
);
}
function searchFiles(searchPhrase: string, files: EnteFile[]) {
function searchFilesByName(searchPhrase: string, files: EnteFile[]) {
const user = getData(LS_KEYS.USER) as User;
if (!user) return [];
return files.filter(
@ -262,6 +275,19 @@ function searchFiles(searchPhrase: string, files: EnteFile[]) {
);
}
function searchFilesByCaption(searchPhrase: string, files: EnteFile[]) {
const user = getData(LS_KEYS.USER) as User;
if (!user) return [];
return files.filter(
(file) =>
file.ownerID === user.id &&
file.pubMagicMetadata &&
file.pubMagicMetadata.data.caption
?.toLowerCase()
.includes(searchPhrase)
);
}
function parseHumanDate(humanDate: string): DateValue[] {
const date = chrono.parseDate(humanDate);
const date1 = chrono.parseDate(`${humanDate} 1`);
@ -366,6 +392,9 @@ function convertSuggestionToSearchQuery(option: Suggestion): Search {
case SuggestionType.FILE_NAME:
return { files: option.value as number[] };
case SuggestionType.FILE_CAPTION:
return { files: option.value as number[] };
case SuggestionType.PERSON:
return { person: option.value as Person };

View file

@ -18,6 +18,7 @@ export enum SuggestionType {
INDEX_STATUS,
THING,
TEXT,
FILE_CAPTION,
}
export interface DateValue {

View file

@ -419,6 +419,10 @@ const englishConstants = {
return 'Date';
case SuggestionType.FILE_NAME:
return 'File name';
case SuggestionType.THING:
return 'Content';
case SuggestionType.FILE_CAPTION:
return 'Caption';
}
},
PHOTO_COUNT: (count: number) =>