create-folder in current folder's menu
Massimo Melina committed
Aug 28, 2024 at 22:53 UTC
99b57840e1d440fae2972a7c1ae1d1ea5261592c
4 files changed
+10
-4
frontend/src/Breadcrumbs.ts
+7
@@ -7,6 +7,7 @@ import { DirEntry, state, useSnapState } from './state'
7
import { usePath, reloadList } from './useFetchList'
8
import { useI18N } from './i18n'
9
import { openFileMenu } from './fileMenu'
10
+import { createFolder } from './upload'
11
12
export function Breadcrumbs() {
13
const base = getPrefixUrl() + '/'
@@ -43,6 +44,12 @@ function Breadcrumb({ path, label, current, title }:{ current?: boolean, path: s
44
if (!current) return
45
ev.preventDefault()
46
openFileMenu(new DirEntry(decodeURIComponent(path), { p }), ev, [
47
+ props?.can_upload && {
48
+ id: 'create-folder',
49
+ label: t`Create folder`,
50
+ icon: 'folder',
51
+ onClick: createFolder,
52
+ },
53
{
54
id: 'reload',
55
label: t`Reload`,
frontend/src/fileMenu.ts
+2
-2
@@ -1,7 +1,7 @@
1
import { t, useI18N } from './i18n'
2
import {
3
dontBotherWithKeys, formatBytes, getHFS, hfsEvent, hIcon, newDialog, prefix, with_, working,
4
- pathEncode, closeDialog, anyDialogOpen
4
+ pathEncode, closeDialog, anyDialogOpen, Falsy
5
} from './misc'
6
import { createElement as h, Fragment, isValidElement, MouseEvent, ReactNode } from 'react'
7
import _ from 'lodash'
@@ -26,7 +26,7 @@ interface FileMenuEntry {
26
onClick?: (ev:MouseEvent<Element>) => any
27
}
28
29
-export function openFileMenu(entry: DirEntry, ev: MouseEvent, addToMenu: (FileMenuEntry | 'open' | 'delete' | 'show')[]) {
29
+export function openFileMenu(entry: DirEntry, ev: MouseEvent, addToMenu: (Falsy | FileMenuEntry | 'open' | 'delete' | 'show')[]) {
30
const { uri, isFolder, s } = entry
31
const canRead = !entry.p?.includes('r')
32
const canArchive = entry.p?.includes('A') || state.props?.can_archive && !entry.p?.includes('a')
frontend/src/upload.ts
+1
-1
@@ -476,7 +476,7 @@ export function acceptDropFiles(cb: false | undefined | ((files:File[], to: stri
476
}
477
}
478
479
-async function createFolder() {
479
+export async function createFolder() {
480
const name = await promptDialog(t`Enter folder name`)
481
if (!name) return
482
const uri = location.pathname
src/selfCheck.ts
-1
@@ -16,7 +16,6 @@ export const selfCheckMiddleware: Middleware = (ctx, next) => {
16
ctx.state.skipFilters = true
17
}
18
19
-
19
declare module "koa" {
20
interface DefaultState {
21
skipFilters?: boolean