better code: too much in misc
Massimo Melina committed
Dec 20, 2023 at 22:03 UTC
b0e01f3a104ed20663ac4e3f55caf23cd8df1ad2
28 files changed
+56
-59
admin/src/AccountForm.ts
+2
-1
@@ -5,7 +5,8 @@ import { BoolField, Form, MultiSelectField } from '@hfs/mui-grid-form'
5
import { Alert } from '@mui/material'
6
import { apiCall } from './api'
7
import { alertDialog, toast, useDialogBarColors } from './dialog'
8
-import { HTTP_NOT_ACCEPTABLE, IconBtn, isEqualLax, modifiedSx, wantArray } from './misc'
8
+import { HTTP_NOT_ACCEPTABLE, isEqualLax, wantArray } from './misc'
9
+import { IconBtn, modifiedSx } from './mui'
10
import { Account } from './AccountsPage'
11
import { createVerifierAndSalt, SRPParameters, SRPRoutines } from 'tssrp6a'
12
import { AutoDelete, Delete } from '@mui/icons-material'
admin/src/AccountsPage.ts
+2
-2
@@ -4,13 +4,13 @@ import { createElement as h, useState, useEffect, Fragment } from "react"
4
import { apiCall, useApiEx } from './api'
5
import { Alert, Box, Button, Card, CardContent, Grid, List, ListItem, ListItemText, Typography } from '@mui/material'
6
import { Close, Delete, DoNotDisturb, Group, MilitaryTech, Person, PersonAdd } from '@mui/icons-material'
7
-import { IconBtn, iconTooltip, newDialog, reloadBtn, useBreakpoint, with_ } from './misc'
7
+import { newDialog, with_ } from './misc'
8
+import { Flex, IconBtn, iconTooltip, reloadBtn, useBreakpoint } from './mui'
9
import { TreeItem, TreeView } from '@mui/x-tree-view'
10
import MenuButton from './MenuButton'
11
import AccountForm from './AccountForm'
12
import md from './md'
13
import _ from 'lodash'
13
-import { Flex } from './misc'
14
import { alertDialog, confirmDialog } from './dialog'
15
import { useSnapState } from './state'
16
import { importAccountsCsv } from './importAccountsCsv'
admin/src/App.ts
+1
-1
@@ -6,7 +6,7 @@ import MainMenu, { getMenuLabel, mainMenu } from './MainMenu'
6
import { AppBar, Box, Drawer, IconButton, ThemeProvider, Toolbar, Typography } from '@mui/material'
7
import { Dialogs } from './dialog'
8
import { useMyTheme } from './theme'
9
-import { useBreakpoint} from './misc'
9
+import { useBreakpoint} from './mui'
10
import { LoginRequired } from './LoginRequired'
11
import { Menu } from '@mui/icons-material'
12
import { LocalizationProvider } from '@mui/x-date-pickers'
admin/src/ArrayField.ts
+2
-1
@@ -1,7 +1,7 @@
1
// This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
2
3
import { createElement as h, Fragment, useMemo, useState } from 'react'
4
-import { Dict, IconBtn, isOrderedEqual, setHidden, swap } from './misc'
4
+import { Dict, isOrderedEqual, setHidden, swap } from './misc'
5
import { Add, Edit, Delete, ArrowUpward, ArrowDownward, Undo } from '@mui/icons-material'
6
import { formDialog } from './dialog'
7
import { DataGrid, GridActionsCellItem, GridAlignment, GridColDef } from '@mui/x-data-grid'
@@ -9,6 +9,7 @@ import { FieldDescriptor, FieldProps, labelFromKey } from '@hfs/mui-grid-form'
9
import { Box, FormHelperText, FormLabel } from '@mui/material'
10
import { DateTimeField } from './DateTimeField'
11
import _ from 'lodash'
12
+import { IconBtn } from './mui'
13
14
type ArrayFieldProps<T> = FieldProps<T[]> & { fields: FieldDescriptor[], height?: number, reorder?: boolean, prepend?: boolean }
15
export function ArrayField<T extends object>({ label, helperText, fields, value, onChange, onError, setApi, reorder, prepend, ...rest }: ArrayFieldProps<T>) {
admin/src/ConfigFilePage.ts
+2
-1
@@ -3,7 +3,8 @@
3
import { createElement as h, Fragment, useEffect, useState } from 'react';
4
import { apiCall, useApiEx } from './api'
5
import { Alert, Box } from '@mui/material'
6
-import { Btn, Flex, focusSelector, IconBtn, isCtrlKey, KeepInScreen, modifiedSx, reloadBtn } from './misc';
6
+import { focusSelector, isCtrlKey, KeepInScreen } from './misc';
7
+import { Btn, Flex, IconBtn, modifiedSx, reloadBtn } from './mui';
8
import { Save, ContentCopy, EditNote } from '@mui/icons-material'
9
import { TextEditor } from './TextEditor';
10
import { state } from './state';
admin/src/CustomHtmlPage.ts
+2
-1
@@ -4,7 +4,8 @@ import { createElement as h, Fragment, useEffect, useMemo, useState } from 'reac
4
import { Field, SelectField } from '@hfs/mui-grid-form'
5
import { apiCall, useApiEx } from './api'
6
import { Alert, Box } from '@mui/material'
7
-import { Dict, HTTP_MESSAGES, IconBtn, isCtrlKey, modifiedSx, prefix, reloadBtn, wikiLink } from './misc';
7
+import { Dict, HTTP_MESSAGES, isCtrlKey, prefix } from './misc';
8
+import { IconBtn, modifiedSx, reloadBtn, wikiLink } from './mui';
9
import { Save } from '@mui/icons-material'
10
import _ from 'lodash'
11
import { useDebounce } from 'usehooks-ts'
admin/src/DataTable.ts
+1
-1
@@ -5,7 +5,7 @@ import { useWindowSize } from 'usehooks-ts'
5
import { createElement as h, Fragment, ReactNode, useEffect, useMemo, useRef, useState } from 'react'
6
import { newDialog, onlyTruthy } from '@hfs/shared'
7
import _ from 'lodash'
8
-import { Center, Flex } from './misc'
8
+import { Center, Flex } from './mui'
9
10
const ACTIONS = 'Actions'
11
admin/src/FileField.ts
+1
-1
@@ -4,7 +4,7 @@ import { FieldProps, StringField } from '@hfs/mui-grid-form'
4
import { createElement as h } from 'react'
5
import { InputAdornment } from '@mui/material'
6
import { Eject } from '@mui/icons-material'
7
-import { IconBtn, useBreakpoint } from './misc'
7
+import { IconBtn, useBreakpoint } from './mui'
8
import { newDialog } from '@hfs/shared'
9
import FilePicker from './FilePicker'
10
import { apiCall } from './api'
admin/src/FileForm.ts
+3
-3
@@ -6,9 +6,9 @@ import { Alert, Box, Collapse, FormHelperText, Link, MenuItem, MenuList } from '
6
import { BoolField, DisplayField, Field, FieldProps, Form, MultiSelectField, SelectField, StringField
7
} from '@hfs/mui-grid-form'
8
import { apiCall, UseApi, useApiEx } from './api'
9
-import { basename, Btn, defaultPerms, formatBytes, formatTimestamp, IconBtn, isEqualLax, isWhoObject,
10
- LinkBtn, modifiedSx, newDialog, objSameKeys, onlyTruthy, prefix, useBreakpoint, VfsPerms, wantArray,
11
- Who, WhoObject, wikiLink, matches } from './misc'
9
+import { basename, defaultPerms, formatBytes, formatTimestamp, isEqualLax, isWhoObject, newDialog,
10
+ objSameKeys, onlyTruthy, prefix, VfsPerms, wantArray, Who, WhoObject, matches } from './misc'
11
+import { Btn, IconBtn, LinkBtn, modifiedSx, useBreakpoint, wikiLink } from './mui'
12
import { reloadVfs, VfsNode } from './VfsPage'
13
import md from './md'
14
import _ from 'lodash'
admin/src/FilePicker.ts
+3
-12
@@ -3,18 +3,9 @@
3
import { createElement as h, Fragment, useEffect, useMemo, useRef, useState } from 'react'
4
import { apiCall, useApiList } from './api'
5
import _ from 'lodash'
6
-import {
7
- Alert,
8
- Box,
9
- Button,
10
- Checkbox,
11
- ListItemIcon,
12
- ListItemText,
13
- MenuItem,
14
- TextField,
15
- Typography
16
-} from '@mui/material'
17
-import { enforceFinal, formatBytes, isWindowsDrive, spinner, Center, err2msg, basename, IconBtn, Flex } from './misc'
6
+import { Alert, Box, Button, Checkbox, ListItemIcon, ListItemText, MenuItem, TextField, Typography } from '@mui/material'
7
+import { enforceFinal, formatBytes, isWindowsDrive, err2msg, basename } from './misc'
8
+import { spinner, Center, IconBtn, Flex } from './mui'
9
import { ArrowUpward, CreateNewFolder, VerticalAlignTop } from '@mui/icons-material'
10
import { StringField } from '@hfs/mui-grid-form'
11
import { FileIcon, FolderIcon } from './VfsTree'
admin/src/HomePage.ts
+3
-2
@@ -3,8 +3,9 @@
3
import { createElement as h, ReactNode, useState } from 'react'
4
import { Box, Button, Card, CardContent, LinearProgress, Link } from '@mui/material'
5
import { apiCall, useApiEx, useApiList } from './api'
6
-import { Btn, dontBotherWithKeys, Flex, InLink, LinkBtn, objSameKeys, onlyTruthy, prefix, REPO_URL,
7
- wait, wikiLink, with_ } from './misc'
6
+import { dontBotherWithKeys, objSameKeys, onlyTruthy, prefix, REPO_URL,
7
+ wait, with_ } from './misc'
8
+import { Btn, Flex, InLink, LinkBtn, wikiLink, } from './mui'
9
import { BrowserUpdated as UpdateIcon, CheckCircle, Error, Info, Launch, OpenInNew, Warning } from '@mui/icons-material'
10
import md, { replaceStringToReact } from './md'
11
import { state, useSnapState } from './state'
admin/src/InstalledPlugins.ts
+2
-1
@@ -5,13 +5,14 @@ import { createElement as h, Fragment, ReactNode } from 'react'
5
import { Box, Link, Tooltip } from '@mui/material'
6
import { DataTable } from './DataTable'
7
import { Delete, Error as ErrorIcon, PlayCircle, Settings, StopCircle, Upgrade } from '@mui/icons-material'
8
-import { Btn, HTTP_FAILED_DEPENDENCY, IconBtn, prefix, with_, xlate } from './misc'
8
+import { HTTP_FAILED_DEPENDENCY, prefix, with_, xlate } from './misc'
9
import { alertDialog, formDialog, toast } from './dialog'
10
import _ from 'lodash'
11
import { BoolField, Field, MultiSelectField, NumberField, SelectField, StringField } from '@hfs/mui-grid-form'
12
import { ArrayField } from './ArrayField'
13
import FileField from './FileField'
14
import { PLUGIN_ERRORS } from './PluginsPage'
15
+import { Btn, IconBtn } from './mui'
16
17
export default function InstalledPlugins({ updates }: { updates?: true }) {
18
const { list, updateEntry, error, initializing } = useApiList(updates ? 'get_plugin_updates' : 'get_plugins')
admin/src/InternetPage.ts
+2
-2
@@ -3,8 +3,8 @@ import { Alert, Box, Button, Card, CardContent, CircularProgress, Divider, Linea
3
import { CardMembership, HomeWorkTwoTone, Lock, Public, PublicTwoTone, RouterTwoTone, Send, Storage,
4
SvgIconComponent } from '@mui/icons-material'
5
import { apiCall, useApiEx } from './api'
6
-import { closeDialog, DAY, formatTimestamp, wait, wantArray, with_ } from '@hfs/shared'
7
-import { PORT_DISABLED, Flex, LinkBtn, isIP, Btn, CFG } from './misc'
6
+import { closeDialog, DAY, formatTimestamp, wait, wantArray, with_, PORT_DISABLED, isIP, CFG } from './misc'
7
+import { Flex, LinkBtn, Btn } from './mui'
8
import { alertDialog, confirmDialog, promptDialog, toast, waitDialog } from './dialog'
9
import { BoolField, Form, MultiSelectField, NumberField, SelectField } from '@hfs/mui-grid-form'
10
import md from './md'
admin/src/LangPage.ts
+2
-1
@@ -5,7 +5,8 @@ import { apiCall, useApiEx, useApiList } from './api'
5
import { DataTable } from './DataTable';
6
import { Alert, Box, Button } from '@mui/material'
7
import { Delete, Upload } from '@mui/icons-material'
8
-import { IconBtn, readFile, selectFiles, useBreakpoint } from './misc'
8
+import { readFile, selectFiles } from './misc'
9
+import { IconBtn, useBreakpoint } from './mui'
10
import _ from 'lodash'
11
import { alertDialog, toast } from './dialog'
12
import { Field, SelectField } from '@hfs/mui-grid-form';
admin/src/LoginRequired.ts
+2
-1
@@ -2,11 +2,12 @@
2
3
import { state, useSnapState } from './state'
4
import { createElement as h, Fragment, useEffect, useRef, useState } from 'react'
5
-import { Center, getHFS, HTTP_FORBIDDEN, HTTP_UNAUTHORIZED, makeSessionRefresher } from './misc'
5
+import { getHFS, HTTP_FORBIDDEN, HTTP_UNAUTHORIZED, makeSessionRefresher } from './misc'
6
import { Form } from '@hfs/mui-grid-form'
7
import { apiCall } from './api'
8
import { srpClientSequence } from '@hfs/shared'
9
import { Alert, Box } from '@mui/material'
10
+import { Center } from './mui'
11
12
export function LoginRequired({ children }: any) {
13
const { loginRequired } = useSnapState()
admin/src/LogoutPage.ts
+2
-1
@@ -5,8 +5,9 @@ import { Alert, Box } from '@mui/material'
5
import { apiCall, useApiEx } from './api'
6
import { alertDialog } from "./dialog"
7
import { useSnapState } from './state'
8
-import { Btn, HTTP_UNAUTHORIZED } from './misc'
8
+import { HTTP_UNAUTHORIZED } from './misc'
9
import { Logout, PowerSettingsNew } from '@mui/icons-material'
10
+import { Btn } from './mui'
11
12
export default function LogoutPage() {
13
const { element } = useApiEx('get_config', { only: [] }) // sort of noop, just to get the 'element' part
admin/src/LogsPage.ts
+2
-2
@@ -4,9 +4,9 @@ import { createElement as h, Fragment, useMemo, useState } from 'react';
4
import { Box, Tab, Tabs, Tooltip } from '@mui/material'
5
import { API_URL, useApiList } from './api'
6
import { DataTable } from './DataTable'
7
-import { Dict, formatBytes, HTTP_UNAUTHORIZED, prefix, shortenAgent, splitAt, tryJson } from '@hfs/shared'
7
+import { Dict, formatBytes, HTTP_UNAUTHORIZED, prefix, shortenAgent, splitAt, tryJson, typedKeys } from '@hfs/shared'
8
import { logLabels } from './OptionsPage'
9
-import { Flex, typedKeys, useBreakpoint, usePauseButton, useToggleButton } from './misc';
9
+import { Flex, useBreakpoint, usePauseButton, useToggleButton } from './mui';
10
import { GridColDef } from '@mui/x-data-grid'
11
import _ from 'lodash'
12
import { SmartToy } from '@mui/icons-material'
admin/src/MonitorPage.ts
+2
-2
@@ -6,8 +6,8 @@ import { apiCall, useApiEvents, useApiEx, useApiList } from "./api"
6
import { LinkOff, Lock, Block, FolderZip, Upload, Download } from '@mui/icons-material'
7
import { Box, Chip, ChipProps, Tooltip } from '@mui/material'
8
import { DataTable } from './DataTable'
9
-import { formatBytes, IconBtn, IconProgress, iconTooltip, ipForUrl, manipulateConfig, useBreakpoint, useBatch,
10
- CFG, usePauseButton, formatSpeed } from "./misc"
9
+import { formatBytes, ipForUrl, manipulateConfig, useBatch, CFG, formatSpeed } from "./misc"
10
+import { IconBtn, IconProgress, iconTooltip, usePauseButton, useBreakpoint } from './mui'
11
import { Field, SelectField } from '@hfs/mui-grid-form'
12
import { StandardCSSProperties } from '@mui/system/styleFunctionSx/StandardCssProperties'
13
import { toast } from "./dialog"
admin/src/OnlinePlugins.ts
+2
-1
@@ -3,7 +3,7 @@
3
import { apiCall, useApiList } from './api'
4
import { Fragment, createElement as h, useState } from 'react'
5
import { DataTable } from './DataTable'
6
-import { HTTP_FAILED_DEPENDENCY, IconBtn, xlate } from './misc'
6
+import { HTTP_FAILED_DEPENDENCY, xlate } from './misc'
7
import { Download, Search } from '@mui/icons-material'
8
import { StringField } from '@hfs/mui-grid-form'
9
import { useDebounce } from 'usehooks-ts'
@@ -12,6 +12,7 @@ import { state, useSnapState } from './state'
12
import { alertDialog, confirmDialog, toast } from './dialog'
13
import _ from 'lodash'
14
import { PLUGIN_ERRORS } from './PluginsPage'
15
+import { IconBtn } from './mui'
16
17
export default function OnlinePlugins() {
18
const [search, setSearch] = useState('')
admin/src/OptionsPage.ts
+3
-4
@@ -6,10 +6,9 @@ import { apiCall, useApiEx } from './api'
6
import { state, useSnapState } from './state'
7
import { Link as RouterLink } from 'react-router-dom'
8
import { CardMembership, EditNote, Refresh, Warning } from '@mui/icons-material'
9
-import {
10
- Dict, iconTooltip, InLink, LinkBtn, MAX_TILE_SIZE, modifiedSx, REPO_URL, ipLocalHost,
11
- wait, wikiLink, with_, try_, ipForUrl, SORT_BY_OPTIONS, THEME_OPTIONS, useBreakpoint, CFG
12
-} from './misc'
9
+import { Dict, MAX_TILE_SIZE, REPO_URL, ipLocalHost, wait, with_, try_, ipForUrl, SORT_BY_OPTIONS, THEME_OPTIONS,
10
+ CFG } from './misc'
11
+import { iconTooltip, InLink, LinkBtn, modifiedSx, wikiLink, useBreakpoint } from './mui'
12
import { Form, BoolField, NumberField, SelectField, FieldProps, Field, StringField } from '@hfs/mui-grid-form';
13
import { ArrayField } from './ArrayField'
14
import FileField from './FileField'
admin/src/PluginsPage.ts
+1
-1
@@ -4,7 +4,7 @@ import { createElement as h, Fragment, useState } from "react"
4
import { Tab, Tabs } from '@mui/material'
5
import InstalledPlugins from "./InstalledPlugins"
6
import OnlinePlugins from "./OnlinePlugins"
7
-import { useBreakpoint } from "./misc"
7
+import { useBreakpoint } from "./mui"
8
9
const TABS = {
10
"Installed": InstalledPlugins,
admin/src/VfsMenuBar.ts
+3
-2
@@ -1,12 +1,13 @@
1
// This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
2
3
import { createElement as h } from 'react'
4
-import { Alert, Box, Button } from '@mui/material'
4
+import { Alert, Box } from '@mui/material'
5
import { Add, Microsoft } from '@mui/icons-material'
6
import { reloadVfs } from './VfsPage'
7
import addFiles, { addLink, addVirtual } from './addFiles'
8
import MenuButton from './MenuButton'
9
-import { Btn, CFG, Flex, newDialog, reloadBtn } from './misc'
9
+import { CFG, newDialog } from './misc'
10
+import { Btn, Flex, reloadBtn } from './mui'
11
import { apiCall, ApiObject, useApi } from './api'
12
import { ConfigForm } from './ConfigForm'
13
import { ArrayField } from './ArrayField'
admin/src/VfsPage.ts
+2
-1
@@ -6,7 +6,8 @@ import { Alert, Box, Button, Card, CardContent, Grid, Link, List, ListItem, List
6
import { state, useSnapState } from './state'
7
import VfsMenuBar from './VfsMenuBar'
8
import VfsTree, { vfsNodeIcon } from './VfsTree'
9
-import { Flex, IconBtn, newDialog, onlyTruthy, prefix, useBreakpoint, VfsNodeAdminSend } from './misc'
9
+import { newDialog, onlyTruthy, prefix, VfsNodeAdminSend } from './misc'
10
+import { Flex, IconBtn, useBreakpoint } from './mui'
11
import { reactJoin } from '@hfs/shared'
12
import _ from 'lodash'
13
import { AlertProps } from '@mui/material/Alert/Alert'
admin/src/VfsTree.ts
+2
-1
@@ -8,7 +8,8 @@ import { ChevronRight, ExpandMore, TheaterComedy, Folder, Home, Link, InsertDriv
8
} from '@mui/icons-material'
9
import { Box } from '@mui/material'
10
import { reloadVfs, VfsNode } from './VfsPage'
11
-import { iconTooltip, onlyTruthy, Who, with_ } from './misc'
11
+import { onlyTruthy, Who, with_ } from './misc'
12
+import { iconTooltip } from './mui'
13
import { apiCall, ApiObject } from './api'
14
import { alertDialog, confirmDialog } from './dialog'
15
admin/src/api.ts
+2
-1
@@ -1,8 +1,9 @@
1
// This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
2
3
import { createElement as h, useEffect, useMemo, useRef, useState } from 'react'
4
-import { Dict, err2msg, Falsy, IconBtn, LIST, spinner, useStateMounted, wantArray, xlate,
4
+import { Dict, err2msg, Falsy, LIST, useStateMounted, wantArray, xlate,
5
HTTP_FORBIDDEN, HTTP_UNAUTHORIZED,} from './misc'
6
+import { IconBtn, spinner } from './mui'
7
import { Alert } from '@mui/material'
8
import _ from 'lodash'
9
import { state } from './state'
admin/src/dialog.ts
+3
-10
@@ -6,17 +6,10 @@ import { createElement as h, Dispatch, Fragment, isValidElement, ReactElement, R
6
useEffect, useRef, useState
7
} from 'react'
8
import { Check, Close, Error as ErrorIcon, Forward, Info, Warning } from '@mui/icons-material'
9
-import {
10
- newDialog,
11
- closeDialog,
12
- dialogsDefaults,
13
- DialogOptions,
14
- componentOrNode,
15
- pendingPromise,
16
- focusSelector
17
-} from '@hfs/shared'
9
+import { newDialog, closeDialog, dialogsDefaults, DialogOptions, componentOrNode, pendingPromise,
10
+ focusSelector } from '@hfs/shared'
11
import { Form, FormProps } from '@hfs/mui-grid-form'
19
-import { IconBtn, Flex, Center } from './misc'
12
+import { IconBtn, Flex, Center } from './mui'
13
import { useDark } from './theme'
14
import { useWindowSize } from 'usehooks-ts'
15
import md from './md'
admin/src/importAccountsCsv.ts
+2
-1
@@ -4,7 +4,8 @@ import { Group, Upload } from '@mui/icons-material'
4
import { Box } from '@mui/material'
5
import { apiCall } from './api'
6
import { apiNewPassword } from './AccountForm'
7
-import { HTTP_CONFLICT, IconProgress, prefix, readFile, selectFiles } from './misc'
7
+import { HTTP_CONFLICT, prefix, readFile, selectFiles } from './misc'
8
+import { IconProgress } from './mui'
9
import { NumberField, BoolField } from '@hfs/mui-grid-form'
10
import Parser from '@gregoranders/csv';
11
admin/src/misc.ts
-1
@@ -1,7 +1,6 @@
1
// This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
2
3
import { apiCall } from './api'
4
-export * from './mui'
4
export * from '@hfs/shared'
5
6
export async function manipulateConfig(k: string, work:(data:any) => any) {