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) {