Skip to content

Commit

Permalink
Revert "remove fixed filters" (#2261)
Browse files Browse the repository at this point in the history
* Revert "remove fixed filters (#2257)"

This reverts commit 1959226.

* bump 0.2.10
  • Loading branch information
utkubakir committed Mar 29, 2024
1 parent 44c2854 commit 5b40cef
Show file tree
Hide file tree
Showing 16 changed files with 203 additions and 114 deletions.
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 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 <support@spacedrive.com>"]
default-run = "sd-desktop"
Expand Down
2 changes: 1 addition & 1 deletion 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"
Expand Down
19 changes: 14 additions & 5 deletions interface/app/$libraryId/favorites.tsx
Expand Up @@ -25,18 +25,27 @@ export function Component() {

const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot();

const search = useSearch();
const fixedFilters = useMemo<SearchFilterArgs[]>(
() => [
// { object: { favorite: true } },
...(explorerSettingsSnapshot.layoutMode === 'media'
? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }]
: [])
],
[explorerSettingsSnapshot.layoutMode]
);

const search = useSearch({
fixedFilters
});

const objects = useObjectsExplorerQuery({
arg: {
take: 100,
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
Expand Down
4 changes: 2 additions & 2 deletions interface/app/$libraryId/labels.tsx
Expand Up @@ -27,7 +27,7 @@ export function Component() {

// const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot();

// const filters = useMemo<SearchFilterArgs[]>(
// const fixedFilters = useMemo<SearchFilterArgs[]>(
// () => [
// ...(explorerSettingsSnapshot.layoutMode === 'media'
// ? [{ object: { kind: { in: [ObjectKindEnum.Image, ObjectKindEnum.Video] } } }]
Expand All @@ -36,7 +36,7 @@ export function Component() {
// [explorerSettingsSnapshot.layoutMode]
// );

const search = useSearch();
const search = useSearch({});

// const objects = useObjectsExplorerQuery({
// arg: {
Expand Down
40 changes: 25 additions & 15 deletions interface/app/$libraryId/location/$id.tsx
Expand Up @@ -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: {
Expand All @@ -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
},
Expand Down Expand Up @@ -273,32 +268,47 @@ function useLocationExplorerSettings(location: Location) {
};
}

function useLocationSearch(location: Location) {
function useLocationSearch(
explorerSettings: UseExplorerSettings<FilePathOrder>,
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;

Expand Down
19 changes: 14 additions & 5 deletions interface/app/$libraryId/recents.tsx
Expand Up @@ -25,18 +25,27 @@ export function Component() {

const explorerSettingsSnapshot = explorerSettings.useSettingsSnapshot();

const search = useSearch();
const fixedFilters = useMemo<SearchFilterArgs[]>(
() => [
// { 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: {
take: 100,
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
Expand Down
8 changes: 4 additions & 4 deletions interface/app/$libraryId/saved-search/$id.tsx
Expand Up @@ -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({
Expand Down Expand Up @@ -85,7 +85,7 @@ export const Component = () => {
>
<hr className="w-full border-t border-sidebar-divider bg-sidebar-divider" />
<SearchOptions>
{(search.filters !== filters ||
{(search.dynamicFilters !== dynamicFilters ||
search.search !== savedSearch.data?.search) && (
<SaveButton searchId={id} />
)}
Expand Down Expand Up @@ -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
}
]);
Expand Down
10 changes: 6 additions & 4 deletions interface/app/$libraryId/search/AppliedFilters.tsx
Expand Up @@ -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
}
Expand Down
37 changes: 21 additions & 16 deletions interface/app/$libraryId/search/Filters.tsx
Expand Up @@ -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;
});
};
}
Expand Down Expand Up @@ -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;
});
}}
>
Expand All @@ -188,7 +191,7 @@ const FilterOptionBoolean = ({
filter: SearchFilterCRUD;
search: UseSearch;
}) => {
const { allFiltersKeys } = search;
const { fixedFiltersKeys, allFiltersKeys } = search;

const key = getKey({
type: filter.name,
Expand All @@ -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;
});
}}
>
Expand Down
6 changes: 1 addition & 5 deletions interface/app/$libraryId/search/SearchBar.tsx
Expand Up @@ -81,7 +81,6 @@ export default ({ redirectToSearch }: Props) => {

function clearValue() {
search.setSearch('');
search.setFilters([]);
}

return (
Expand All @@ -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={
<div className="pointer-events-none flex h-7 items-center space-x-1 opacity-70 group-focus-within:hidden">
{
Expand Down
4 changes: 3 additions & 1 deletion interface/app/$libraryId/search/SearchOptions.tsx
Expand Up @@ -124,7 +124,9 @@ export const SearchOptions = ({

{children ?? (
<>
{(search.filters.length > 0 || search.search !== '') && <SaveSearchButton />}
{(search.dynamicFilters.length > 0 || search.search !== '') && (
<SaveSearchButton />
)}

<EscapeButton />
</>
Expand Down

0 comments on commit 5b40cef

Please sign in to comment.