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