commit
918c5320f3
|
@ -50,6 +50,7 @@ import { LoadingOverlay } from 'components/LoadingOverlay';
|
||||||
import PhotoFrame from 'components/PhotoFrame';
|
import PhotoFrame from 'components/PhotoFrame';
|
||||||
import {
|
import {
|
||||||
changeFilesVisibility,
|
changeFilesVisibility,
|
||||||
|
getNonTrashedUniqueUserFiles,
|
||||||
getSelectedFiles,
|
getSelectedFiles,
|
||||||
mergeMetadata,
|
mergeMetadata,
|
||||||
sortFiles,
|
sortFiles,
|
||||||
|
@ -581,7 +582,7 @@ export default function Gallery() {
|
||||||
loadingBar={loadingBar}
|
loadingBar={loadingBar}
|
||||||
isFirstFetch={isFirstFetch}
|
isFirstFetch={isFirstFetch}
|
||||||
collections={collections}
|
collections={collections}
|
||||||
files={files}
|
files={getNonTrashedUniqueUserFiles(files)}
|
||||||
setActiveCollection={setActiveCollection}
|
setActiveCollection={setActiveCollection}
|
||||||
setSearch={updateSearch}
|
setSearch={updateSearch}
|
||||||
searchStats={searchStats}
|
searchStats={searchStats}
|
||||||
|
|
|
@ -5,8 +5,7 @@ import { DateValue, Suggestion, SuggestionType } from 'components/SearchBar';
|
||||||
import HTTPService from './HTTPService';
|
import HTTPService from './HTTPService';
|
||||||
import { Collection } from './collectionService';
|
import { Collection } from './collectionService';
|
||||||
import { File } from './fileService';
|
import { File } from './fileService';
|
||||||
import { User } from './userService';
|
import { logError } from 'utils/sentry';
|
||||||
import { getData, LS_KEYS } from 'utils/storage/localStorage';
|
|
||||||
|
|
||||||
const ENDPOINT = getEndpoint();
|
const ENDPOINT = getEndpoint();
|
||||||
const DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
const DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
||||||
|
@ -45,6 +44,7 @@ export function parseHumanDate(humanDate: string): DateValue[] {
|
||||||
export async function searchLocation(
|
export async function searchLocation(
|
||||||
searchPhrase: string
|
searchPhrase: string
|
||||||
): Promise<LocationSearchResponse[]> {
|
): Promise<LocationSearchResponse[]> {
|
||||||
|
try {
|
||||||
const resp = await HTTPService.get(
|
const resp = await HTTPService.get(
|
||||||
`${ENDPOINT}/search/location`,
|
`${ENDPOINT}/search/location`,
|
||||||
{
|
{
|
||||||
|
@ -55,7 +55,11 @@ export async function searchLocation(
|
||||||
'X-Auth-Token': getToken(),
|
'X-Auth-Token': getToken(),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return resp.data.results;
|
return resp.data.results ?? [];
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'location search failed');
|
||||||
|
}
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getHolidaySuggestion(searchPhrase: string): Suggestion[] {
|
export function getHolidaySuggestion(searchPhrase: string): Suggestion[] {
|
||||||
|
@ -99,7 +103,7 @@ export function getYearSuggestion(searchPhrase: string): Suggestion[] {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// ignore
|
logError(e, 'getYearSuggestion failed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
|
@ -115,8 +119,6 @@ export function searchCollection(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function searchFiles(searchPhrase: string, files: File[]) {
|
export function searchFiles(searchPhrase: string, files: File[]) {
|
||||||
const user: User = getData(LS_KEYS.USER) ?? {};
|
|
||||||
const idSet = new Set();
|
|
||||||
return files
|
return files
|
||||||
.map((file, idx) => ({
|
.map((file, idx) => ({
|
||||||
title: file.metadata.title,
|
title: file.metadata.title,
|
||||||
|
@ -125,13 +127,6 @@ export function searchFiles(searchPhrase: string, files: File[]) {
|
||||||
ownerID: file.ownerID,
|
ownerID: file.ownerID,
|
||||||
id: file.id,
|
id: file.id,
|
||||||
}))
|
}))
|
||||||
.filter((file) => {
|
|
||||||
if (file.ownerID === user.id && !idSet.has(file.id)) {
|
|
||||||
idSet.add(file.id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
})
|
|
||||||
.filter(({ title }) => title.toLowerCase().includes(searchPhrase))
|
.filter(({ title }) => title.toLowerCase().includes(searchPhrase))
|
||||||
.slice(0, 4);
|
.slice(0, 4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,3 +444,25 @@ export async function getFileFromURL(fileURL: string) {
|
||||||
const fileFile = new globalThis.File([fileBlob], 'temp');
|
const fileFile = new globalThis.File([fileBlob], 'temp');
|
||||||
return fileFile;
|
return fileFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getUniqueFiles(files: File[]) {
|
||||||
|
const idSet = new Set<number>();
|
||||||
|
return files.filter((file) => {
|
||||||
|
if (!idSet.has(file.id)) {
|
||||||
|
idSet.add(file.id);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
export function getNonTrashedUniqueUserFiles(files: File[]) {
|
||||||
|
const user: User = getData(LS_KEYS.USER) ?? {};
|
||||||
|
return getUniqueFiles(
|
||||||
|
files.filter(
|
||||||
|
(file) =>
|
||||||
|
(typeof file.isTrashed === 'undefined' || !file.isTrashed) &&
|
||||||
|
(!user.id || file.ownerID === user.id)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue