From 5b40cefe37b3744e6384f2d9a7647430855d094e Mon Sep 17 00:00:00 2001 From: Utku <74243531+utkubakir@users.noreply.github.com> Date: Thu, 28 Mar 2024 18:35:28 -0700 Subject: [PATCH] Revert "remove fixed filters" (#2261) * Revert "remove fixed filters (#2257)" This reverts commit 1959226fb941336eb8f075f72e5bc3262b9d6406. * bump 0.2.10 --- Cargo.lock | 4 +- apps/desktop/src-tauri/Cargo.toml | 2 +- core/Cargo.toml | 2 +- interface/app/$libraryId/favorites.tsx | 19 +++- interface/app/$libraryId/labels.tsx | 4 +- interface/app/$libraryId/location/$id.tsx | 40 ++++--- interface/app/$libraryId/recents.tsx | 19 +++- interface/app/$libraryId/saved-search/$id.tsx | 8 +- .../app/$libraryId/search/AppliedFilters.tsx | 10 +- interface/app/$libraryId/search/Filters.tsx | 37 ++++--- interface/app/$libraryId/search/SearchBar.tsx | 6 +- .../app/$libraryId/search/SearchOptions.tsx | 4 +- interface/app/$libraryId/search/index.tsx | 34 +++--- interface/app/$libraryId/search/useSearch.ts | 104 +++++++++++++----- .../settings/library/saved-searches/index.tsx | 4 +- interface/app/$libraryId/tag/$id.tsx | 22 ++-- 16 files changed, 204 insertions(+), 115 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bec493be5..92336f730 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8179,7 +8179,7 @@ dependencies = [ [[package]] name = "sd-core" -version = "0.2.9" +version = "0.2.10" dependencies = [ "aovec", "async-channel", @@ -8336,7 +8336,7 @@ dependencies = [ [[package]] name = "sd-desktop" -version = "0.2.9" +version = "0.2.10" dependencies = [ "axum", "directories 5.0.1", diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 2ddc2a7e9..a319584e2 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sd-desktop" -version = "0.2.9" +version = "0.2.10" description = "The universal file manager." authors = ["Spacedrive Technology Inc "] default-run = "sd-desktop" diff --git a/core/Cargo.toml b/core/Cargo.toml index 93a35ec12..88763f862 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sd-core" -version = "0.2.9" +version = "0.2.10" description = "Virtual distributed filesystem engine that powers Spacedrive." authors = ["Spacedrive Technology Inc."] rust-version = "1.75.0" diff --git a/interface/app/$libraryId/favorites.tsx b/interface/app/$libraryId/favorites.tsx index 54e485659..f3f53da44 100644 --- a/interface/app/$libraryId/favorites.tsx +++ b/interface/app/$libraryId/favorites.tsx @@ -25,7 +25,19 @@ export function Component() { const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); - const search = useSearch(); + const fixedFilters = useMemo( + () => [ + // { object: { favorite: true } }, + ...(explorerSettingsSnapshot.layoutMode === 'media' + ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] + : []) + ], + [explorerSettingsSnapshot.layoutMode] + ); + + const search = useSearch({ + fixedFilters + }); const objects = useObjectsExplorerQuery({ arg: { @@ -33,10 +45,7 @@ export function Component() { filters: [ ...search.allFilters, // TODO: Add filter to search options - { object: { favorite: true } }, - ...(explorerSettingsSnapshot.layoutMode === 'media' - ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] - : []) + { object: { favorite: true } } ] }, order: explorerSettings.useSettingsSnapshot().order diff --git a/interface/app/$libraryId/labels.tsx b/interface/app/$libraryId/labels.tsx index fe26327b9..24beaae25 100644 --- a/interface/app/$libraryId/labels.tsx +++ b/interface/app/$libraryId/labels.tsx @@ -27,7 +27,7 @@ export function Component() { // const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); - // const filters = useMemo( + // const fixedFilters = useMemo( // () => [ // ...(explorerSettingsSnapshot.layoutMode === 'media' // ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] @@ -36,7 +36,7 @@ export function Component() { // [explorerSettingsSnapshot.layoutMode] // ); - const search = useSearch(); + const search = useSearch({}); // const objects = useObjectsExplorerQuery({ // arg: { diff --git a/interface/app/$libraryId/location/$id.tsx b/interface/app/$libraryId/location/$id.tsx index 96fb6e2ba..03720f20a 100644 --- a/interface/app/$libraryId/location/$id.tsx +++ b/interface/app/$libraryId/location/$id.tsx @@ -71,9 +71,7 @@ const LocationExplorer = ({ location }: { location: Location; path?: string }) = const { layoutMode, mediaViewWithDescendants, showHiddenFiles } = explorerSettings.useSettingsSnapshot(); - const search = useLocationSearch(location); - - const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); + const search = useLocationSearch(explorerSettings, location); const paths = usePathsExplorerQuery({ arg: { @@ -86,15 +84,12 @@ const LocationExplorer = ({ location }: { location: Location; path?: string }) = path: path ?? '', include_descendants: search.search !== '' || - search.filters.length > 0 || + search.dynamicFilters.length > 0 || (layoutMode === 'media' && mediaViewWithDescendants) } } }, - !showHiddenFiles && { filePath: { hidden: false } }, - explorerSettingsSnapshot.layoutMode === 'media' && [ - { object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } } - ] + !showHiddenFiles && { filePath: { hidden: false } } ].filter(Boolean) as any, take }, @@ -273,32 +268,47 @@ function useLocationExplorerSettings(location: Location) { }; } -function useLocationSearch(location: Location) { +function useLocationSearch( + explorerSettings: UseExplorerSettings, + location: Location +) { const [searchParams, setSearchParams] = useRawSearchParams(); + const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); + + const fixedFilters = useMemo( + () => [ + { filePath: { locations: { in: [location.id] } } }, + ...(explorerSettingsSnapshot.layoutMode === 'media' + ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] + : []) + ], + [location.id, explorerSettingsSnapshot.layoutMode] + ); const filtersParam = searchParams.get('filters'); - const filters = useMemo(() => JSON.parse(filtersParam ?? '[]'), [filtersParam]); + const dynamicFilters = useMemo(() => JSON.parse(filtersParam ?? '[]'), [filtersParam]); const searchQueryParam = searchParams.get('search'); const search = useSearch({ - open: !!searchQueryParam || filters.length > 0 || undefined, + open: !!searchQueryParam || dynamicFilters.length > 0 || undefined, search: searchParams.get('search') ?? undefined, - defaultFilters: [{ filePath: { locations: { in: [location.id] } } }], - filters: filters + fixedFilters, + dynamicFilters }); useEffect(() => { setSearchParams( (p) => { - if (search.filters.length > 0) p.set('filters', JSON.stringify(search.filters)); + if (search.dynamicFilters.length > 0) + p.set('filters', JSON.stringify(search.dynamicFilters)); else p.delete('filters'); return p; }, { replace: true } ); - }, [search.filters, setSearchParams]); + }, [search.dynamicFilters, setSearchParams]); const searchQuery = search.search; diff --git a/interface/app/$libraryId/recents.tsx b/interface/app/$libraryId/recents.tsx index 7baca400a..f415a0307 100644 --- a/interface/app/$libraryId/recents.tsx +++ b/interface/app/$libraryId/recents.tsx @@ -25,7 +25,19 @@ export function Component() { const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); - const search = useSearch(); + const fixedFilters = useMemo( + () => [ + // { object: { dateAccessed: { from: new Date(0).toISOString() } } }, + ...(explorerSettingsSnapshot.layoutMode === 'media' + ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] + : []) + ], + [explorerSettingsSnapshot.layoutMode] + ); + + const search = useSearch({ + fixedFilters + }); const objects = useObjectsExplorerQuery({ arg: { @@ -33,10 +45,7 @@ export function Component() { filters: [ ...search.allFilters, // TODO: Add fil ter to search options - { object: { dateAccessed: { from: new Date(0).toISOString() } } }, - ...(explorerSettingsSnapshot.layoutMode === 'media' - ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] - : []) + { object: { dateAccessed: { from: new Date(0).toISOString() } } } ] }, order: explorerSettings.useSettingsSnapshot().order diff --git a/interface/app/$libraryId/saved-search/$id.tsx b/interface/app/$libraryId/saved-search/$id.tsx index 4f6c5742b..1ce371d9e 100644 --- a/interface/app/$libraryId/saved-search/$id.tsx +++ b/interface/app/$libraryId/saved-search/$id.tsx @@ -46,14 +46,14 @@ export const Component = () => { const rawFilters = savedSearch.data?.filters; - const filters = useMemo(() => { + const dynamicFilters = useMemo(() => { if (rawFilters) return JSON.parse(rawFilters) as SearchFilterArgs[]; }, [rawFilters]); const search = useSearch({ open: true, search: savedSearch.data?.search ?? undefined, - filters: filters + dynamicFilters }); const paths = usePathsExplorerQuery({ @@ -85,7 +85,7 @@ export const Component = () => { >
- {(search.filters !== filters || + {(search.dynamicFilters !== dynamicFilters || search.search !== savedSearch.data?.search) && ( )} @@ -123,7 +123,7 @@ function SaveButton({ searchId }: { searchId: number }) { updateSavedSearch.mutate([ searchId, { - filters: JSON.stringify(search.filters), + filters: JSON.stringify(search.dynamicFilters), search: search.search } ]); diff --git a/interface/app/$libraryId/search/AppliedFilters.tsx b/interface/app/$libraryId/search/AppliedFilters.tsx index 141f5c221..b0f965aa0 100644 --- a/interface/app/$libraryId/search/AppliedFilters.tsx +++ b/interface/app/$libraryId/search/AppliedFilters.tsx @@ -55,11 +55,13 @@ export const AppliedFilters = ({ allowRemove = true }: { allowRemove?: boolean } onDelete={ removalIndex !== null && allowRemove ? () => { - search.updateFilters((dyanmicFilters) => { - dyanmicFilters.splice(removalIndex, 1); + search.updateDynamicFilters( + (dyanmicFilters) => { + dyanmicFilters.splice(removalIndex, 1); - return dyanmicFilters; - }); + return dyanmicFilters; + } + ); } : undefined } diff --git a/interface/app/$libraryId/search/Filters.tsx b/interface/app/$libraryId/search/Filters.tsx index a5b504cc7..7b204b5bc 100644 --- a/interface/app/$libraryId/search/Filters.tsx +++ b/interface/app/$libraryId/search/Filters.tsx @@ -71,25 +71,28 @@ export function useToggleOptionSelected({ search }: { search: UseSearch }) { option: FilterOption; select: boolean; }) => { - search.updateFilters((filters) => { - const rawArg = filters.find((arg) => filter.extract(arg)); + search.updateDynamicFilters((dynamicFilters) => { + const key = getKey({ ...option, type: filter.name }); + if (search.fixedFiltersKeys?.has(key)) return dynamicFilters; + + const rawArg = dynamicFilters.find((arg) => filter.extract(arg)); if (!rawArg) { const arg = filter.create(option.value); - filters.push(arg); + dynamicFilters.push(arg); } else { - const rawArgIndex = filters.findIndex((arg) => filter.extract(arg))!; + const rawArgIndex = dynamicFilters.findIndex((arg) => filter.extract(arg))!; const arg = filter.extract(rawArg)!; if (select) { if (rawArg) filter.applyAdd(arg, option); } else { - if (!filter.applyRemove(arg, option)) filters.splice(rawArgIndex, 1); + if (!filter.applyRemove(arg, option)) dynamicFilters.splice(rawArgIndex, 1); } } - return filters; + return dynamicFilters; }); }; } @@ -156,14 +159,14 @@ const FilterOptionText = ({ filter, search }: { filter: SearchFilterCRUD; search className="flex gap-1.5" onSubmit={(e) => { e.preventDefault(); - search.updateFilters((filters) => { - if (allFiltersKeys.has(key)) return filters; + search.updateDynamicFilters((dynamicFilters) => { + if (allFiltersKeys.has(key)) return dynamicFilters; const arg = filter.create(value); - filters.push(arg); + dynamicFilters.push(arg); setValue(''); - return filters; + return dynamicFilters; }); }} > @@ -188,7 +191,7 @@ const FilterOptionBoolean = ({ filter: SearchFilterCRUD; search: UseSearch; }) => { - const { allFiltersKeys } = search; + const { fixedFiltersKeys, allFiltersKeys } = search; const key = getKey({ type: filter.name, @@ -201,17 +204,19 @@ const FilterOptionBoolean = ({ icon={filter.icon} selected={allFiltersKeys?.has(key)} setSelected={() => { - search.updateFilters((filters) => { - const index = filters.findIndex((f) => filter.extract(f) !== undefined); + search.updateDynamicFilters((dynamicFilters) => { + if (fixedFiltersKeys?.has(key)) return dynamicFilters; + + const index = dynamicFilters.findIndex((f) => filter.extract(f) !== undefined); if (index !== -1) { - filters.splice(index, 1); + dynamicFilters.splice(index, 1); } else { const arg = filter.create(true); - filters.push(arg); + dynamicFilters.push(arg); } - return filters; + return dynamicFilters; }); }} > diff --git a/interface/app/$libraryId/search/SearchBar.tsx b/interface/app/$libraryId/search/SearchBar.tsx index 85205ced6..e49c1441d 100644 --- a/interface/app/$libraryId/search/SearchBar.tsx +++ b/interface/app/$libraryId/search/SearchBar.tsx @@ -81,7 +81,6 @@ export default ({ redirectToSearch }: Props) => { function clearValue() { search.setSearch(''); - search.setFilters([]); } return ( @@ -100,10 +99,7 @@ export default ({ redirectToSearch }: Props) => { search.setSearchBarFocused(false); } }} - onFocus={() => { - search.setSearchBarFocused(true); - if (search.defaultFilters) search.setFilters(search.defaultFilters); - }} + onFocus={() => search.setSearchBarFocused(true)} right={
{ diff --git a/interface/app/$libraryId/search/SearchOptions.tsx b/interface/app/$libraryId/search/SearchOptions.tsx index 1cf649b13..aa77f0677 100644 --- a/interface/app/$libraryId/search/SearchOptions.tsx +++ b/interface/app/$libraryId/search/SearchOptions.tsx @@ -124,7 +124,9 @@ export const SearchOptions = ({ {children ?? ( <> - {(search.filters.length > 0 || search.search !== '') && } + {(search.dynamicFilters.length > 0 || search.search !== '') && ( + + )} diff --git a/interface/app/$libraryId/search/index.tsx b/interface/app/$libraryId/search/index.tsx index 3ec25317d..3f7ec1e84 100644 --- a/interface/app/$libraryId/search/index.tsx +++ b/interface/app/$libraryId/search/index.tsx @@ -27,19 +27,13 @@ export function Component() { }, []), orderingKeys: objectOrderingKeysSchema }); - const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); - const search = useSearchWithFilters(); + const search = useSearchWithFilters(explorerSettings); const objects = useObjectsExplorerQuery({ arg: { take: 100, - filters: [ - ...search.allFilters, - ...(explorerSettingsSnapshot.layoutMode === 'media' - ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] - : []) - ] + filters: search.allFilters }, order: explorerSettings.useSettingsSnapshot().order }); @@ -83,31 +77,43 @@ export function Component() { ); } -function useSearchWithFilters() { +function useSearchWithFilters(explorerSettings: UseExplorerSettings) { const [searchParams, setSearchParams] = useRawSearchParams(); + const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); + + const fixedFilters = useMemo( + () => [ + ...(explorerSettingsSnapshot.layoutMode === 'media' + ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] + : []) + ], + [explorerSettingsSnapshot.layoutMode] + ); const filtersParam = searchParams.get('filters'); - const filters = useMemo(() => JSON.parse(filtersParam ?? '[]'), [filtersParam]); + const dynamicFilters = useMemo(() => JSON.parse(filtersParam ?? '[]'), [filtersParam]); const searchQueryParam = searchParams.get('search'); const search = useSearch({ - open: !!searchQueryParam || filters.length > 0 || undefined, + open: !!searchQueryParam || dynamicFilters.length > 0 || undefined, search: searchParams.get('search') ?? undefined, - filters + fixedFilters, + dynamicFilters }); useEffect(() => { setSearchParams( (p) => { - if (search.filters.length > 0) p.set('filters', JSON.stringify(search.filters)); + if (search.dynamicFilters.length > 0) + p.set('filters', JSON.stringify(search.dynamicFilters)); else p.delete('filters'); return p; }, { replace: true } ); - }, [search.filters, setSearchParams]); + }, [search.dynamicFilters, setSearchParams]); const searchQuery = search.search; diff --git a/interface/app/$libraryId/search/useSearch.ts b/interface/app/$libraryId/search/useSearch.ts index a2746fa4a..f81207ecb 100644 --- a/interface/app/$libraryId/search/useSearch.ts +++ b/interface/app/$libraryId/search/useSearch.ts @@ -9,12 +9,15 @@ import { argsToOptions, getKey, useSearchStore } from './store'; export interface UseSearchProps { open?: boolean; search?: string; + /** + * Filters that cannot be removed + */ + fixedFilters?: SearchFilterArgs[]; /** * Filters that can be removed. * When this value changes dynamic filters stored internally will reset. */ - filters?: SearchFilterArgs[]; - defaultFilters?: SearchFilterArgs[]; + dynamicFilters?: SearchFilterArgs[]; } export function useSearch(props?: UseSearchProps) { @@ -22,22 +25,18 @@ export function useSearch(props?: UseSearchProps) { const searchState = useSearchStore(); - const [filters, setFilters] = useState(props?.filters ?? []); - const [filtersFromProps, setFiltersFromProps] = useState(props?.filters); + // Filters that can't be removed - if (filtersFromProps !== props?.filters) { - setFiltersFromProps(props?.filters); - setFilters(props?.filters ?? []); - } + const fixedFilters = useMemo(() => props?.fixedFilters ?? [], [props?.fixedFilters]); - const filtersAsOptions = useMemo( - () => argsToOptions(filters, searchState.filterOptions), - [filters, searchState.filterOptions] + const fixedFiltersAsOptions = useMemo( + () => argsToOptions(fixedFilters, searchState.filterOptions), + [fixedFilters, searchState.filterOptions] ); - const filtersKeys: Set = useMemo(() => { + const fixedFiltersKeys: Set = useMemo(() => { return new Set( - filtersAsOptions.map(({ arg, filter }) => + fixedFiltersAsOptions.map(({ arg, filter }) => getKey({ type: filter.name, name: arg.name, @@ -45,31 +44,79 @@ export function useSearch(props?: UseSearchProps) { }) ) ); - }, [filtersAsOptions]); + }, [fixedFiltersAsOptions]); - const updateFilters = useCallback( + // Filters that can be removed + + const [dynamicFilters, setDynamicFilters] = useState(props?.dynamicFilters ?? []); + const [dynamicFiltersFromProps, setDynamicFiltersFromProps] = useState(props?.dynamicFilters); + + if (dynamicFiltersFromProps !== props?.dynamicFilters) { + setDynamicFiltersFromProps(props?.dynamicFilters); + setDynamicFilters(props?.dynamicFilters ?? []); + } + + const dynamicFiltersAsOptions = useMemo( + () => argsToOptions(dynamicFilters, searchState.filterOptions), + [dynamicFilters, searchState.filterOptions] + ); + + const dynamicFiltersKeys: Set = useMemo(() => { + return new Set( + dynamicFiltersAsOptions.map(({ arg, filter }) => + getKey({ + type: filter.name, + name: arg.name, + value: arg.value + }) + ) + ); + }, [dynamicFiltersAsOptions]); + + const updateDynamicFilters = useCallback( (cb: (args: SearchFilterArgs[]) => SearchFilterArgs[]) => - setFilters((filters) => produce(filters, cb)), + setDynamicFilters((filters) => produce(filters, cb)), [] ); // Merging of filters that should be ORed const mergedFilters = useMemo(() => { - const value: { arg: SearchFilterArgs; removalIndex: number | null }[] = []; + const value: { arg: SearchFilterArgs; removalIndex: number | null }[] = fixedFilters.map( + (arg) => ({ + arg, + removalIndex: null + }) + ); - for (const [index, arg] of filters.entries()) { + for (const [index, arg] of dynamicFilters.entries()) { const filter = filterRegistry.find((f) => f.extract(arg)); if (!filter) continue; - value.push({ - arg, - removalIndex: index - }); + const fixedEquivalentIndex = fixedFilters.findIndex( + (a) => filter.extract(a) !== undefined + ); + + if (fixedEquivalentIndex !== -1) { + const merged = filter.merge( + filter.extract(fixedFilters[fixedEquivalentIndex]!)! as any, + filter.extract(arg)! as any + ); + + value[fixedEquivalentIndex] = { + arg: filter.create(merged), + removalIndex: fixedEquivalentIndex + }; + } else { + value.push({ + arg, + removalIndex: index + }); + } } return value; - }, [filters]); + }, [fixedFilters, dynamicFilters]); // Filters generated from the search query @@ -120,16 +167,17 @@ export function useSearch(props?: UseSearchProps) { return { open: props?.open || searchBarFocused, + fixedFilters, + fixedFiltersKeys, search, rawSearch, setSearch: setRawSearch, searchBarFocused, setSearchBarFocused, - defaultFilters: props?.defaultFilters, - filters, - setFilters, - updateFilters, - filtersKeys, + dynamicFilters, + setDynamicFilters, + updateDynamicFilters, + dynamicFiltersKeys, mergedFilters, allFilters, allFiltersKeys diff --git a/interface/app/$libraryId/settings/library/saved-searches/index.tsx b/interface/app/$libraryId/settings/library/saved-searches/index.tsx index 187787f29..8d5eee88f 100644 --- a/interface/app/$libraryId/settings/library/saved-searches/index.tsx +++ b/interface/app/$libraryId/settings/library/saved-searches/index.tsx @@ -82,13 +82,13 @@ function EditForm({ savedSearch, onDelete }: { savedSearch: SavedSearch; onDelet updateSavedSearch.mutate([savedSearch.id, { name: data.name ?? '' }]); }); - const filters = useMemo(() => { + const fixedFilters = useMemo(() => { if (savedSearch.filters === null) return []; return JSON.parse(savedSearch.filters) as SearchFilterArgs[]; }, [savedSearch.filters]); - const search = useSearch({ search: savedSearch.search ?? undefined, filters }); + const search = useSearch({ search: savedSearch.search ?? undefined, fixedFilters }); return (
diff --git a/interface/app/$libraryId/tag/$id.tsx b/interface/app/$libraryId/tag/$id.tsx index dbd53ca1e..fb7b4f269 100644 --- a/interface/app/$libraryId/tag/$id.tsx +++ b/interface/app/$libraryId/tag/$id.tsx @@ -38,20 +38,22 @@ export function Component() { const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot(); + const fixedFilters = useMemo( + () => [ + { object: { tags: { in: [tag!.id] } } }, + ...(explorerSettingsSnapshot.layoutMode === 'media' + ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] + : []) + ], + [tag, explorerSettingsSnapshot.layoutMode] + ); + const search = useSearch({ - defaultFilters: [{ object: { tags: { in: [tag!.id] } } }] + fixedFilters }); const objects = useObjectsExplorerQuery({ - arg: { - take: 100, - filters: [ - ...search.allFilters, - ...(explorerSettingsSnapshot.layoutMode === 'media' - ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }] - : []) - ] - }, + arg: { take: 100, filters: search.allFilters }, order: explorerSettings.useSettingsSnapshot().order });