Skip to content

Commit 10190cf

Browse files
committed
add sorting and filtering options to Django-Filer
1 parent 06d1eef commit 10190cf

File tree

6 files changed

+36
-14
lines changed

6 files changed

+36
-14
lines changed

client/browser/FinderFileSelect.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,19 @@ export default function FinderFileSelect(props) {
2727
closeDialog();
2828
}
2929
};
30+
const preventDefault = (event) => {
31+
event.preventDefault();
32+
}
3033
window.addEventListener('keydown', handleEscape);
34+
35+
// prevent browser from loading a drag-and-dropped file
36+
window.addEventListener('dragover', preventDefault, false);
37+
window.addEventListener('drop', preventDefault, false);
38+
3139
return () => {
3240
window.removeEventListener('keydown', handleEscape);
41+
window.removeEventListener('dragover', preventDefault);
42+
window.removeEventListener('drop', preventDefault);
3343
}
3444
}, []);
3545

client/browser/Menu.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, {useRef} from 'react';
22
import DropDownMenu from '../finder/DropDownMenu';
33
import {useSearchRealm} from '../finder/Storage';
4+
import {SortingOptionsItem, FilterByLabel} from '../finder/MenuBar';
45
import SearchIcon from '../icons/search.svg';
56
import UploadIcon from '../icons/upload.svg';
67

@@ -80,6 +81,7 @@ export default function Menu(props) {
8081
</DropDownMenu>
8182
</div>
8283
</li>
84+
<SortingOptionsItem/>
8385
<li onClick={openUploader} data-tooltip-id="django-finder-tooltip" data-tooltip-content={gettext("Upload file")}>
8486
<UploadIcon/>
8587
</li>

client/finder/DropDownMenu.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ export default function DropDownMenu(props) {
1111
ref.current.setAttribute('aria-expanded', 'false');
1212
}
1313
};
14-
window.addEventListener('click', closeSubmenu);
15-
return () => window.removeEventListener('click', closeSubmenu);
14+
const rootNode = ref.current.getRootNode();
15+
rootNode.addEventListener('click', closeSubmenu);
16+
return () => rootNode.removeEventListener('click', closeSubmenu);
1617
}, []);
1718

1819
function toggleSubmenu() {
19-
ref.current.setAttribute('aria-expanded', ref.current.ariaExpanded === 'true' ? 'false': 'true');
20+
ref.current.setAttribute('aria-expanded', ref.current.ariaExpanded === 'true' ? 'false' : 'true');
2021
}
2122

2223
return (

client/finder/FolderAdmin.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ export function FolderAdmin() {
131131
deselectAll();
132132
}
133133

134+
function refreshColumns() {
135+
Object.entries(columnRefs as React.MutableRefObject<any>).forEach(([folderId, columnRef]) => {
136+
columnRef.current?.fetchInodes();
137+
});
138+
}
139+
134140
function computeBoundingBox(inodes) {
135141
let zoom = 1;
136142
if (inodes.length === 0) {
@@ -366,6 +372,7 @@ export function FolderAdmin() {
366372
layout={layout}
367373
setLayout={setLayout}
368374
deselectAll={deselectAll}
375+
refreshColumns={refreshColumns}
369376
clipboard={clipboard}
370377
setClipboard={setClipboard}
371378
clearClipboard={clearClipboard}

client/finder/MenuBar.tsx

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ const useSorting = () => useCookie('django-finder-sorting', '');
3535
const useFilter = () => useCookie('django-finder-filter', []);
3636

3737

38-
function SortingOptionsItem(props: any) {
38+
export function SortingOptionsItem(props: any) {
39+
const {refreshColumns} = props;
3940
const [sorting, setSorting] = useSorting();
4041

4142
function isActive(value) {
@@ -45,9 +46,7 @@ function SortingOptionsItem(props: any) {
4546
function changeSorting(value) {
4647
if (value !== sorting) {
4748
setSorting(value);
48-
Object.entries(props.columnRefs as React.MutableRefObject<any>).forEach(([folderId, columnRef]) => {
49-
columnRef.current?.fetchInodes();
50-
});
49+
refreshColumns();
5150
}
5251
}
5352

@@ -83,8 +82,8 @@ function SortingOptionsItem(props: any) {
8382
}
8483

8584

86-
function FilterByLabel(props: any) {
87-
const {columnRefs, labels} = props;
85+
export function FilterByLabel(props: any) {
86+
const {labels, refreshFilesList} = props;
8887
const [filter, setFilter] = useFilter();
8988

9089
function changeFilter(value) {
@@ -95,9 +94,7 @@ function FilterByLabel(props: any) {
9594
} else {
9695
setFilter([...filter, value]);
9796
}
98-
Object.entries(columnRefs as React.MutableRefObject<any>).forEach(([folderId, columnRef]) => {
99-
columnRef.current?.fetchInodes();
100-
});
97+
refreshFilesList();
10198
}
10299

103100
return (
@@ -224,6 +221,7 @@ const MenuBar = forwardRef((props: any, forwardedRef) => {
224221
layout,
225222
setLayout,
226223
deselectAll,
224+
refreshColumns,
227225
clipboard,
228226
setClipboard,
229227
clearClipboard,
@@ -437,8 +435,8 @@ const MenuBar = forwardRef((props: any, forwardedRef) => {
437435
data-tooltip-id="django-finder-tooltip" data-tooltip-content={gettext("Columns view")}>
438436
<ColumnsIcon/></li>
439437
<li style={{marginLeft: 'auto'}}></li>
440-
{settings.labels && <FilterByLabel columnRefs={columnRefs} labels={settings.labels}/>}
441-
<SortingOptionsItem columnRefs={columnRefs}/>
438+
{settings.labels && <FilterByLabel refreshFilesList={refreshColumns} labels={settings.labels}/>}
439+
<SortingOptionsItem refreshColumns={refreshColumns} />
442440
<li style={{marginRight: 'auto'}}></li>
443441
<li className={numSelectedInodes ? null : "disabled"} onClick={cutInodes}
444442
data-tooltip-id="django-finder-tooltip"

client/scss/finder-browser.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ dialog {
8787
padding-bottom: 0.5rem;
8888
margin: 0.25rem 1rem;
8989
@include menubar;
90+
91+
.search-field {
92+
margin-left: -14px;
93+
}
9094
}
9195

9296
> .browser-body {

0 commit comments

Comments
 (0)