diff --git a/src/components/Board/Customize/Access/AccessCustomization.tsx b/src/components/Board/Customize/Access/AccessCustomization.tsx index 8ff4f3f3b..f1ed17c51 100644 --- a/src/components/Board/Customize/Access/AccessCustomization.tsx +++ b/src/components/Board/Customize/Access/AccessCustomization.tsx @@ -7,7 +7,11 @@ export const AccessCustomization = () => { const form = useBoardCustomizationFormContext(); return ( - + - ) -} \ No newline at end of file + ); +}; diff --git a/src/components/Dashboard/Mobile/Ribbon/MobileRibbon.tsx b/src/components/Dashboard/Mobile/Ribbon/MobileRibbon.tsx index 6f8ddce20..7aa474795 100644 --- a/src/components/Dashboard/Mobile/Ribbon/MobileRibbon.tsx +++ b/src/components/Dashboard/Mobile/Ribbon/MobileRibbon.tsx @@ -1,9 +1,9 @@ import { ActionIcon, Space, createStyles } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'; - import { useConfigContext } from '~/config/provider'; import { useScreenLargerThan } from '~/hooks/useScreenLargerThan'; + import { MobileRibbonSidebarDrawer } from './MobileRibbonSidebarDrawer'; export const MobileRibbons = () => { diff --git a/src/components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal.tsx b/src/components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal.tsx index 52bec9c64..d18070cef 100644 --- a/src/components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal.tsx +++ b/src/components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal.tsx @@ -1,9 +1,9 @@ import { SelectItem } from '@mantine/core'; import { ContextModalProps, closeModal } from '@mantine/modals'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { AppType } from '~/types/app'; + import { useGridstackStore, useWrapperColumnCount } from '../../Wrappers/gridstack/store'; import { ChangePositionModal } from './ChangePositionModal'; diff --git a/src/components/Dashboard/Modals/ChangePosition/ChangePositionModal.tsx b/src/components/Dashboard/Modals/ChangePosition/ChangePositionModal.tsx index ffb76505b..853870fc4 100644 --- a/src/components/Dashboard/Modals/ChangePosition/ChangePositionModal.tsx +++ b/src/components/Dashboard/Modals/ChangePosition/ChangePositionModal.tsx @@ -1,7 +1,6 @@ import { Button, Flex, Grid, NumberInput, Select, SelectItem } from '@mantine/core'; import { useForm } from '@mantine/form'; import { useTranslation } from 'next-i18next'; - import { useConfigContext } from '~/config/provider'; interface ChangePositionModalProps { diff --git a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx index 43a68101f..2c909f189 100644 --- a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx +++ b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx @@ -1,8 +1,8 @@ import { SelectItem } from '@mantine/core'; import { ContextModalProps, closeModal } from '@mantine/modals'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; + import widgets from '../../../../widgets'; import { WidgetChangePositionModalInnerProps } from '../../Tiles/Widgets/WidgetsMenu'; import { useGridstackStore, useWrapperColumnCount } from '../../Wrappers/gridstack/store'; diff --git a/src/components/Dashboard/Modals/EditAppModal/EditAppModal.tsx b/src/components/Dashboard/Modals/EditAppModal/EditAppModal.tsx index c447115d6..faf612d4d 100644 --- a/src/components/Dashboard/Modals/EditAppModal/EditAppModal.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/EditAppModal.tsx @@ -12,10 +12,10 @@ import { } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { AppType } from '~/types/app'; + import { DebouncedImage } from '../../../IconSelector/DebouncedImage'; import { useEditModeStore } from '../../Views/useEditModeStore'; import { AppearanceTab } from './Tabs/AppereanceTab/AppereanceTab'; diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/AppereanceTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/AppereanceTab.tsx index dd9aac3eb..b1a6e80fe 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/AppereanceTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/AppereanceTab.tsx @@ -3,9 +3,8 @@ import { UseFormReturnType } from '@mantine/form'; import { useDebouncedValue } from '@mantine/hooks'; import { useTranslation } from 'next-i18next'; import { useEffect, useRef } from 'react'; - -import { AppType } from '~/types/app'; import { IconSelector } from '~/components/IconSelector/IconSelector'; +import { AppType } from '~/types/app'; interface AppearanceTabProps { form: UseFormReturnType AppType>; @@ -83,7 +82,8 @@ export const AppearanceTab = ({ data={[ { value: 'column', - label: t('appearance.positionAppName.dropdown.top') as string }, + label: t('appearance.positionAppName.dropdown.top') as string, + }, { value: 'row-reverse', label: t('appearance.positionAppName.dropdown.right') as string, @@ -94,7 +94,8 @@ export const AppearanceTab = ({ }, { value: 'row', - label: t('appearance.positionAppName.dropdown.left') as string }, + label: t('appearance.positionAppName.dropdown.left') as string, + }, ]} {...form.getInputProps('appearance.positionAppName')} onChange={(value) => { diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/BehaviourTab/BehaviourTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/BehaviourTab/BehaviourTab.tsx index 3280c6e15..7fbc3dda4 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/BehaviourTab/BehaviourTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/BehaviourTab/BehaviourTab.tsx @@ -1,9 +1,18 @@ -import { Text, TextInput, Tooltip, Stack, Switch, Tabs, Group, useMantineTheme, HoverCard } from '@mantine/core'; +import { + Group, + HoverCard, + Stack, + Switch, + Tabs, + Text, + TextInput, + Tooltip, + useMantineTheme, +} from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { useTranslation } from 'next-i18next'; - +import { InfoCard } from '~/components/InfoCard/InfoCard'; import { AppType } from '~/types/app'; -import { InfoCard } from '~/components/InfoCard/InfoCard' interface BehaviourTabProps { form: UseFormReturnType AppType>; @@ -19,7 +28,7 @@ export const BehaviourTab = ({ form }: BehaviourTabProps) => { @@ -27,13 +36,11 @@ export const BehaviourTab = ({ form }: BehaviourTabProps) => { {t('behaviour.tooltipDescription.label')} - + - + ); -}; \ No newline at end of file +}; diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/GeneralTab/GeneralTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/GeneralTab/GeneralTab.tsx index 16d8f6194..518646460 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/GeneralTab/GeneralTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/GeneralTab/GeneralTab.tsx @@ -2,8 +2,8 @@ import { Stack, Tabs, Text, TextInput } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { IconClick, IconCursorText, IconLink } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; - import { AppType } from '~/types/app'; + import { EditAppModalTab } from '../type'; interface GeneralTabProps { @@ -51,7 +51,7 @@ export const GeneralTab = ({ form, openTab }: GeneralTabProps) => { {t('behaviour.customProtocolWarning')} - )} + )} ); diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx index 31bfb1f69..04478a0a0 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx @@ -15,7 +15,6 @@ import { import { Icon } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; - import { AppIntegrationPropertyAccessabilityType } from '~/types/app'; interface GenericSecretInputProps { diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx index 82574b82a..632a2cefa 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx @@ -3,7 +3,6 @@ import { Group, Image, Select, SelectItem, Text } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { useTranslation } from 'next-i18next'; import { forwardRef } from 'react'; - import { AppIntegrationPropertyType, AppIntegrationType, diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/IntegrationOptionsRenderer/IntegrationOptionsRenderer.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/IntegrationOptionsRenderer/IntegrationOptionsRenderer.tsx index 9e032ebbd..18a6e69fc 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/IntegrationOptionsRenderer/IntegrationOptionsRenderer.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/IntegrationOptionsRenderer/IntegrationOptionsRenderer.tsx @@ -1,7 +1,6 @@ import { Stack } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { IconKey } from '@tabler/icons-react'; - import { AppIntegrationPropertyType, AppType, @@ -9,6 +8,7 @@ import { integrationFieldDefinitions, integrationFieldProperties, } from '~/types/app'; + import { GenericSecretInput } from '../InputElements/GenericSecretInput'; interface IntegrationOptionsRendererProps { diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/IntegrationTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/IntegrationTab.tsx index 5b7fa5bd1..bdd33f117 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/IntegrationTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/IntegrationTab.tsx @@ -2,8 +2,8 @@ import { Alert, Divider, Tabs, Text } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { IconAlertTriangle } from '@tabler/icons-react'; import { Trans, useTranslation } from 'next-i18next'; - import { AppType } from '~/types/app'; + import { IntegrationSelector } from './Components/InputElements/IntegrationSelector'; import { IntegrationOptionsRenderer } from './Components/IntegrationOptionsRenderer/IntegrationOptionsRenderer'; diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx index 6b2aa809e..11a4f23fb 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx @@ -1,7 +1,6 @@ import { MultiSelect, Stack, Switch, Tabs } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { useTranslation } from 'next-i18next'; - import { StatusCodes } from '~/tools/acceptableStatusCodes'; import { AppType } from '~/types/app'; @@ -20,7 +19,7 @@ export const NetworkTab = ({ form }: NetworkTabProps) => { diff --git a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx index 6a783ba12..b4def81ad 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx @@ -3,10 +3,10 @@ import { showNotification } from '@mantine/notifications'; import { Icon, IconChecks } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { v4 as uuidv4 } from 'uuid'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { IWidget, IWidgetDefinition } from '~/widgets/widgets'; + import { useEditModeStore } from '../../../../Views/useEditModeStore'; import { GenericAvailableElementType } from '../Shared/GenericElementType'; diff --git a/src/components/Dashboard/Tiles/Apps/AppMenu.tsx b/src/components/Dashboard/Tiles/Apps/AppMenu.tsx index ca95b35f7..a8f9715eb 100644 --- a/src/components/Dashboard/Tiles/Apps/AppMenu.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppMenu.tsx @@ -2,6 +2,7 @@ import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { openContextModalGeneric } from '~/tools/mantineModalManagerExtensions'; import { AppType } from '~/types/app'; + import { GenericTileMenu } from '../GenericTileMenu'; interface TileMenuProps { diff --git a/src/components/Dashboard/Tiles/Apps/AppPing.tsx b/src/components/Dashboard/Tiles/Apps/AppPing.tsx index bf5e89f03..be58ec2ea 100644 --- a/src/components/Dashboard/Tiles/Apps/AppPing.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppPing.tsx @@ -4,10 +4,9 @@ import Consola from 'consola'; import { TargetAndTransition, Transition, motion } from 'framer-motion'; import { useSession } from 'next-auth/react'; import { useTranslation } from 'next-i18next'; -import { RouterOutputs, api } from '~/utils/api'; - import { useConfigContext } from '~/config/provider'; import { AppType } from '~/types/app'; +import { RouterOutputs, api } from '~/utils/api'; interface AppPingProps { app: AppType; diff --git a/src/components/Dashboard/Tiles/Apps/AppTile.tsx b/src/components/Dashboard/Tiles/Apps/AppTile.tsx index ba3b3676a..da4ee649e 100644 --- a/src/components/Dashboard/Tiles/Apps/AppTile.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppTile.tsx @@ -2,8 +2,8 @@ import { Affix, Box, Text, Tooltip, UnstyledButton } from '@mantine/core'; import { createStyles, useMantineTheme } from '@mantine/styles'; import { motion } from 'framer-motion'; import Link from 'next/link'; - import { AppType } from '~/types/app'; + import { useEditModeStore } from '../../Views/useEditModeStore'; import { HomarrCardWrapper } from '../HomarrCardWrapper'; import { BaseTileProps } from '../type'; @@ -111,7 +111,7 @@ const useStyles = createStyles((theme, _params, getRef) => ({ overflow: 'visible', flexGrow: 5, }, - appImage:{ + appImage: { maxHeight: '100%', maxWidth: '100%', overflow: 'auto', diff --git a/src/components/Dashboard/Tiles/GenericTileMenu.tsx b/src/components/Dashboard/Tiles/GenericTileMenu.tsx index 6984b84dc..32cb94fa4 100644 --- a/src/components/Dashboard/Tiles/GenericTileMenu.tsx +++ b/src/components/Dashboard/Tiles/GenericTileMenu.tsx @@ -1,8 +1,8 @@ import { ActionIcon, Menu } from '@mantine/core'; import { IconLayoutKanban, IconPencil, IconSettings, IconTrash } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; - import { useColorTheme } from '~/tools/color'; + import { useEditModeStore } from '../Views/useEditModeStore'; interface GenericTileMenuProps { @@ -12,14 +12,12 @@ interface GenericTileMenuProps { displayEdit: boolean; } -export const GenericTileMenu = ( - { - handleClickEdit, - handleClickChangePosition, - handleClickDelete, - displayEdit, - }: GenericTileMenuProps -) => { +export const GenericTileMenu = ({ + handleClickEdit, + handleClickChangePosition, + handleClickDelete, + displayEdit, +}: GenericTileMenuProps) => { const { t } = useTranslation('common'); const isEditMode = useEditModeStore((x) => x.enabled); diff --git a/src/components/Dashboard/Tiles/Widgets/Inputs/DraggableList.tsx b/src/components/Dashboard/Tiles/Widgets/Inputs/DraggableList.tsx index b97d6fbf9..f8bc0370d 100644 --- a/src/components/Dashboard/Tiles/Widgets/Inputs/DraggableList.tsx +++ b/src/components/Dashboard/Tiles/Widgets/Inputs/DraggableList.tsx @@ -3,7 +3,6 @@ import { useDisclosure } from '@mantine/hooks'; import { IconChevronDown, IconGripVertical } from '@tabler/icons-react'; import { Reorder, useDragControls } from 'framer-motion'; import { FC, useEffect, useRef } from 'react'; - import { IDraggableEditableListInputValue } from '~/widgets/widgets'; interface DraggableListProps { diff --git a/src/components/Dashboard/Tiles/Widgets/Inputs/StaticDraggableList.tsx b/src/components/Dashboard/Tiles/Widgets/Inputs/StaticDraggableList.tsx index 146fc3d5e..e357ff7c8 100644 --- a/src/components/Dashboard/Tiles/Widgets/Inputs/StaticDraggableList.tsx +++ b/src/components/Dashboard/Tiles/Widgets/Inputs/StaticDraggableList.tsx @@ -3,7 +3,6 @@ import { useDisclosure } from '@mantine/hooks'; import { IconChevronDown, IconGripVertical } from '@tabler/icons-react'; import { Reorder, useDragControls } from 'framer-motion'; import { FC, ReactNode, useEffect, useRef } from 'react'; - import { IDraggableListInputValue } from '~/widgets/widgets'; const useStyles = createStyles((theme) => ({ diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index 63e636a29..738473177 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -18,13 +18,13 @@ import { ContextModalProps } from '@mantine/modals'; import { IconAlertTriangle, IconPlaylistX, IconPlus } from '@tabler/icons-react'; import { Trans, useTranslation } from 'next-i18next'; import { FC, useState } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { mapObject } from '~/tools/client/objects'; -import Widgets from '../../../../widgets'; import type { IDraggableListInputValue, IWidgetOptionValue } from '~/widgets/widgets'; import { IWidget } from '~/widgets/widgets'; + +import Widgets from '../../../../widgets'; import { InfoCard } from '../../../InfoCard/InfoCard'; import { DraggableList } from './Inputs/DraggableList'; import { LocationSelection } from './Inputs/LocationSelection'; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx index fecb60641..88dfc827d 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx @@ -1,9 +1,9 @@ import { Title } from '@mantine/core'; import { useTranslation } from 'next-i18next'; - import { openContextModalGeneric } from '~/tools/mantineModalManagerExtensions'; -import WidgetsDefinitions from '../../../../widgets'; import { IWidget } from '~/widgets/widgets'; + +import WidgetsDefinitions from '../../../../widgets'; import { useWrapperColumnCount } from '../../Wrappers/gridstack/store'; import { GenericTileMenu } from '../GenericTileMenu'; import { WidgetEditModalInnerProps } from './WidgetsEditModal'; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx index ea66fb511..374c8d0cb 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx @@ -1,7 +1,6 @@ import { Button, Group, Stack, Text } from '@mantine/core'; import { ContextModalProps } from '@mantine/modals'; import { Trans, useTranslation } from 'next-i18next'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; diff --git a/src/components/Dashboard/Views/DashboardView.tsx b/src/components/Dashboard/Views/DashboardView.tsx index 3c75e3dbd..5e175a75f 100644 --- a/src/components/Dashboard/Views/DashboardView.tsx +++ b/src/components/Dashboard/Views/DashboardView.tsx @@ -1,11 +1,11 @@ import { Group, Stack } from '@mantine/core'; import { useEffect, useMemo, useRef } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useResize } from '~/hooks/use-resize'; import { useScreenLargerThan } from '~/hooks/useScreenLargerThan'; import { CategoryType } from '~/types/category'; import { WrapperType } from '~/types/wrapper'; + import { DashboardCategory } from '../Wrappers/Category/Category'; import { DashboardSidebar } from '../Wrappers/Sidebar/Sidebar'; import { DashboardWrapper } from '../Wrappers/Wrapper/Wrapper'; diff --git a/src/components/Dashboard/Views/ViewToggleButton.tsx b/src/components/Dashboard/Views/ViewToggleButton.tsx index 5502edcf9..4dc941a14 100644 --- a/src/components/Dashboard/Views/ViewToggleButton.tsx +++ b/src/components/Dashboard/Views/ViewToggleButton.tsx @@ -1,8 +1,8 @@ import { ActionIcon, Button, Text, Tooltip } from '@mantine/core'; import { IconEdit, IconEditOff } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; - import { useScreenLargerThan } from '~/hooks/useScreenLargerThan'; + import { useEditModeStore } from './useEditModeStore'; export const ViewToggleButton = () => { diff --git a/src/components/Dashboard/Wrappers/Category/Category.tsx b/src/components/Dashboard/Wrappers/Category/Category.tsx index 2e9acc908..72d162c49 100644 --- a/src/components/Dashboard/Wrappers/Category/Category.tsx +++ b/src/components/Dashboard/Wrappers/Category/Category.tsx @@ -13,9 +13,9 @@ import { useLocalStorage } from '@mantine/hooks'; import { modals } from '@mantine/modals'; import { IconDotsVertical, IconShare3 } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; - import { useConfigContext } from '~/config/provider'; import { CategoryType } from '~/types/category'; + import { useCardStyles } from '../../../layout/Common/useCardStyles'; import { useEditModeStore } from '../../Views/useEditModeStore'; import { WrapperContent } from '../WrapperContent'; diff --git a/src/components/Dashboard/Wrappers/Category/CategoryEditMenu.tsx b/src/components/Dashboard/Wrappers/Category/CategoryEditMenu.tsx index 514f36e67..471808d37 100644 --- a/src/components/Dashboard/Wrappers/Category/CategoryEditMenu.tsx +++ b/src/components/Dashboard/Wrappers/Category/CategoryEditMenu.tsx @@ -8,11 +8,11 @@ import { IconTransitionTop, IconTrash, } from '@tabler/icons-react'; - +import { useTranslation } from 'next-i18next'; import { useConfigContext } from '~/config/provider'; import { CategoryType } from '~/types/category'; + import { useCategoryActions } from './useCategoryActions'; -import { useTranslation } from 'next-i18next'; interface CategoryEditMenuProps { category: CategoryType; @@ -22,7 +22,7 @@ export const CategoryEditMenu = ({ category }: CategoryEditMenuProps) => { const { name: configName } = useConfigContext(); const { addCategoryAbove, addCategoryBelow, moveCategoryUp, moveCategoryDown, edit, remove } = useCategoryActions(configName, category); - const { t } = useTranslation(['layout/common','common']); + const { t } = useTranslation(['layout/common', 'common']); return ( @@ -33,28 +33,24 @@ export const CategoryEditMenu = ({ category }: CategoryEditMenuProps) => { } onClick={edit}> - {t('common:edit')} + {t('common:edit')} } onClick={remove}> {t('common:remove')} - - {t('common:changePosition')} - + {t('common:changePosition')} } onClick={moveCategoryUp}> {t('menu.moveUp')} } onClick={moveCategoryDown}> {t('menu.moveDown')} - - {t('menu.addCategory',{location: ''})} - + {t('menu.addCategory', { location: '' })} } onClick={addCategoryAbove}> - {t('menu.addCategory',{location: t('menu.addAbove')})} + {t('menu.addCategory', { location: t('menu.addAbove') })} } onClick={addCategoryBelow}> - {t('menu.addCategory',{location: t('menu.addBelow')})} + {t('menu.addCategory', { location: t('menu.addBelow') })} diff --git a/src/components/Dashboard/Wrappers/Category/CategoryEditModal.tsx b/src/components/Dashboard/Wrappers/Category/CategoryEditModal.tsx index 0ba775505..09c40b3de 100644 --- a/src/components/Dashboard/Wrappers/Category/CategoryEditModal.tsx +++ b/src/components/Dashboard/Wrappers/Category/CategoryEditModal.tsx @@ -2,7 +2,6 @@ import { Button, Group, TextInput } from '@mantine/core'; import { useForm } from '@mantine/form'; import { ContextModalProps } from '@mantine/modals'; import { useTranslation } from 'next-i18next'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { CategoryType } from '~/types/category'; diff --git a/src/components/Dashboard/Wrappers/Category/useCategoryActions.tsx b/src/components/Dashboard/Wrappers/Category/useCategoryActions.tsx index e954a2c9a..b9481fcbe 100644 --- a/src/components/Dashboard/Wrappers/Category/useCategoryActions.tsx +++ b/src/components/Dashboard/Wrappers/Category/useCategoryActions.tsx @@ -1,11 +1,11 @@ import { v4 as uuidv4 } from 'uuid'; - import { useConfigStore } from '~/config/store'; import { openContextModalGeneric } from '~/tools/mantineModalManagerExtensions'; import { AppType } from '~/types/app'; import { CategoryType } from '~/types/category'; import { WrapperType } from '~/types/wrapper'; import { IWidget } from '~/widgets/widgets'; + import { CategoryEditModalInnerProps } from './CategoryEditModal'; export const useCategoryActions = (configName: string | undefined, category: CategoryType) => { diff --git a/src/components/Dashboard/Wrappers/Wrapper/Wrapper.tsx b/src/components/Dashboard/Wrappers/Wrapper/Wrapper.tsx index 71f88dd5b..513975a79 100644 --- a/src/components/Dashboard/Wrappers/Wrapper/Wrapper.tsx +++ b/src/components/Dashboard/Wrappers/Wrapper/Wrapper.tsx @@ -1,4 +1,5 @@ import { WrapperType } from '~/types/wrapper'; + import { useEditModeStore } from '../../Views/useEditModeStore'; import { WrapperContent } from '../WrapperContent'; import { useGridstack } from '../gridstack/use-gridstack'; diff --git a/src/components/Dashboard/Wrappers/WrapperContent.tsx b/src/components/Dashboard/Wrappers/WrapperContent.tsx index 5fc531ac5..e3be08539 100644 --- a/src/components/Dashboard/Wrappers/WrapperContent.tsx +++ b/src/components/Dashboard/Wrappers/WrapperContent.tsx @@ -1,10 +1,10 @@ import { GridStack } from 'fily-publish-gridstack'; import { MutableRefObject, RefObject } from 'react'; - import { AppType } from '~/types/app'; -import Widgets from '../../../widgets'; import { WidgetWrapper } from '~/widgets/WidgetWrapper'; import { IWidget, IWidgetDefinition } from '~/widgets/widgets'; + +import Widgets from '../../../widgets'; import { appTileDefinition } from '../Tiles/Apps/AppTile'; import { GridstackTileWrapper } from '../Tiles/TileWrapper'; import { useGridstackStore } from './gridstack/store'; diff --git a/src/components/Dashboard/Wrappers/gridstack/init-gridstack.ts b/src/components/Dashboard/Wrappers/gridstack/init-gridstack.ts index 763b9da05..d135dc862 100644 --- a/src/components/Dashboard/Wrappers/gridstack/init-gridstack.ts +++ b/src/components/Dashboard/Wrappers/gridstack/init-gridstack.ts @@ -1,6 +1,5 @@ import { GridItemHTMLElement, GridStack, GridStackNode } from 'fily-publish-gridstack'; import { MutableRefObject, RefObject } from 'react'; - import { AppType } from '~/types/app'; import { ShapeType } from '~/types/shape'; import { IWidget } from '~/widgets/widgets'; diff --git a/src/components/Dashboard/Wrappers/gridstack/store.tsx b/src/components/Dashboard/Wrappers/gridstack/store.tsx index f02bc16b4..34ae2920c 100644 --- a/src/components/Dashboard/Wrappers/gridstack/store.tsx +++ b/src/components/Dashboard/Wrappers/gridstack/store.tsx @@ -1,5 +1,4 @@ import { createWithEqualityFn } from 'zustand/traditional'; - import { useConfigContext } from '~/config/provider'; import { GridstackBreakpoints } from '~/constants/gridstack-breakpoints'; diff --git a/src/components/Dashboard/Wrappers/gridstack/use-gridstack.ts b/src/components/Dashboard/Wrappers/gridstack/use-gridstack.ts index 994a5fbc8..1cd91f052 100644 --- a/src/components/Dashboard/Wrappers/gridstack/use-gridstack.ts +++ b/src/components/Dashboard/Wrappers/gridstack/use-gridstack.ts @@ -1,11 +1,11 @@ import { GridStack, GridStackNode } from 'fily-publish-gridstack'; import { MutableRefObject, RefObject, createRef, useEffect, useMemo, useRef } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { AppType } from '~/types/app'; import { AreaType } from '~/types/area'; import { IWidget } from '~/widgets/widgets'; + import { useEditModeStore } from '../../Views/useEditModeStore'; import { TileWithUnknownLocation, initializeGridstack } from './init-gridstack'; import { useGridstackStore, useWrapperColumnCount } from './store'; diff --git a/src/components/IconSelector/IconSelector.tsx b/src/components/IconSelector/IconSelector.tsx index e42c30018..89c28119e 100644 --- a/src/components/IconSelector/IconSelector.tsx +++ b/src/components/IconSelector/IconSelector.tsx @@ -15,9 +15,9 @@ import { import { IconSearch } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { forwardRef, useImperativeHandle, useState } from 'react'; +import { humanFileSize } from '~/tools/humanFileSize'; import { api } from '~/utils/api'; -import { humanFileSize } from '~/tools/humanFileSize'; import { DebouncedImage } from './DebouncedImage'; export const IconSelector = forwardRef( @@ -83,9 +83,7 @@ export const IconSelector = forwardRef( } icon={} rightSection={ - (value ?? currentValue).length > 0 ? ( - onChange("")} /> - ) : null + (value ?? currentValue).length > 0 ? onChange('')} /> : null } itemComponent={AutoCompleteItem} className={classes.textInput} diff --git a/src/components/InfoCard/InfoCard.tsx b/src/components/InfoCard/InfoCard.tsx index fae682d20..5245832a1 100644 --- a/src/components/InfoCard/InfoCard.tsx +++ b/src/components/InfoCard/InfoCard.tsx @@ -23,7 +23,9 @@ interface InfoCardProps { export const InfoCard = ({ bg, cardProp, message, link, hoverProp, position }: InfoCardProps) => { const { colorScheme } = useMantineTheme(); const { t } = useTranslation('common'); - const content = link? message + ` ${t('seeMore')}` : message; + const content = link + ? message + ` ${t('seeMore')}` + : message; const editor = useEditor({ content, editable: false, diff --git a/src/components/Manage/User/Create/review-input-step.tsx b/src/components/Manage/User/Create/review-input-step.tsx index 3395d62b6..69919b676 100644 --- a/src/components/Manage/User/Create/review-input-step.tsx +++ b/src/components/Manage/User/Create/review-input-step.tsx @@ -23,7 +23,12 @@ export const ReviewInputStep = ({ values, prevStep, nextStep }: ReviewInputStepP const { t } = useTranslation('manage/users/create'); const utils = api.useContext(); - const { mutateAsync: createAsync, isLoading, isError, error } = api.user.create.useMutation({ + const { + mutateAsync: createAsync, + isLoading, + isError, + error, + } = api.user.create.useMutation({ onSettled: () => { void utils.user.all.invalidate(); }, diff --git a/src/components/Onboarding/step-create-account.tsx b/src/components/Onboarding/step-create-account.tsx index b7383c4fd..a7eecf789 100644 --- a/src/components/Onboarding/step-create-account.tsx +++ b/src/components/Onboarding/step-create-account.tsx @@ -57,8 +57,10 @@ export const StepCreateAccount = ({ Create your administrator account - Your administrator account must be secure, that's why we have so many rules surrounding it. -
Try not to make it adminadmin this time... + Your administrator account must be secure, that's why we have so many rules + surrounding it. +
+ Try not to make it adminadmin this time...
diff --git a/src/components/Onboarding/step-update-path-mappings.tsx b/src/components/Onboarding/step-update-path-mappings.tsx index 0b96eafa9..e2542ee0a 100644 --- a/src/components/Onboarding/step-update-path-mappings.tsx +++ b/src/components/Onboarding/step-update-path-mappings.tsx @@ -39,7 +39,7 @@ services: const added = { color: 'green', label: '+' }; export const StepUpdatePathMappings = ({ next }: { next: () => void }) => { - const [selectedTab, setSelectedTab] = useState("standard_docker"); + const [selectedTab, setSelectedTab] = useState('standard_docker'); return ( @@ -140,7 +140,9 @@ export const StepUpdatePathMappings = ({ next }: { next: () => void }) => { {dockerComposeCommand} </Prism> </List.Item> - <List.Item>Run <Code>docker compose up</Code>.</List.Item> + <List.Item> + Run <Code>docker compose up</Code>. + </List.Item> <List.Item>Refresh this page and click on "continue"</List.Item> </List> </Tabs.Panel> diff --git a/src/components/Password/password-requirements.tsx b/src/components/Password/password-requirements.tsx index fcaa8c569..4ec5cd850 100644 --- a/src/components/Password/password-requirements.tsx +++ b/src/components/Password/password-requirements.tsx @@ -23,7 +23,6 @@ function getStrength(password: string) { score += 1; } return (score / goal) * 100; - } export const PasswordRequirements = ({ value }: { value: string }) => { diff --git a/src/components/ThemeSchemeToggle/ThemeSchemeToggle.tsx b/src/components/ThemeSchemeToggle/ThemeSchemeToggle.tsx index 079565cdb..f9a606f10 100644 --- a/src/components/ThemeSchemeToggle/ThemeSchemeToggle.tsx +++ b/src/components/ThemeSchemeToggle/ThemeSchemeToggle.tsx @@ -1,23 +1,14 @@ -import { - ActionIcon, - ActionIconProps, -} from '@mantine/core'; -import { useColorScheme } from '~/hooks/use-colorscheme'; +import { ActionIcon, ActionIconProps } from '@mantine/core'; import { IconMoonStars, IconSun } from '@tabler/icons-react'; +import { useColorScheme } from '~/hooks/use-colorscheme'; -export const ThemeSchemeToggle = (props : Partial<ActionIconProps>) => { +export const ThemeSchemeToggle = (props: Partial<ActionIconProps>) => { const { colorScheme, toggleColorScheme } = useColorScheme(); const Icon = colorScheme === 'dark' ? IconSun : IconMoonStars; return ( - <ActionIcon - size={50} - variant="outline" - radius="md" - onClick={toggleColorScheme} - {...props} - > - <Icon size="66%"/> + <ActionIcon size={50} variant="outline" radius="md" onClick={toggleColorScheme} {...props}> + <Icon size="66%" /> </ActionIcon> ); }; diff --git a/src/components/layout/Background/PolkaElement.tsx b/src/components/layout/Background/PolkaElement.tsx index be6dc79db..8c115ef2f 100644 --- a/src/components/layout/Background/PolkaElement.tsx +++ b/src/components/layout/Background/PolkaElement.tsx @@ -17,7 +17,7 @@ export const PolkaElement = ({ <Box style={{ transform: `rotate(${rotation}deg)`, - pointerEvents: 'none' + pointerEvents: 'none', }} className="polka" pos="absolute" diff --git a/src/components/layout/Common/Logo.tsx b/src/components/layout/Common/Logo.tsx index 07116361e..891ea36d7 100644 --- a/src/components/layout/Common/Logo.tsx +++ b/src/components/layout/Common/Logo.tsx @@ -1,7 +1,7 @@ import { Group, Image, Text } from '@mantine/core'; +import { useConfigContext } from '~/config/provider'; import { useScreenLargerThan } from '~/hooks/useScreenLargerThan'; -import { useConfigContext } from '~/config/provider'; import { usePrimaryGradient } from './useGradient'; interface LogoProps { diff --git a/src/components/layout/Common/useCardStyles.ts b/src/components/layout/Common/useCardStyles.ts index f85d0e097..d8e82cb03 100644 --- a/src/components/layout/Common/useCardStyles.ts +++ b/src/components/layout/Common/useCardStyles.ts @@ -1,5 +1,4 @@ import { createStyles } from '@mantine/core'; - import { useConfigContext } from '~/config/provider'; export const useCardStyles = (isCategory: boolean) => { diff --git a/src/components/layout/Common/useGradient.tsx b/src/components/layout/Common/useGradient.tsx index 4ba667f1e..566e0b626 100644 --- a/src/components/layout/Common/useGradient.tsx +++ b/src/components/layout/Common/useGradient.tsx @@ -1,5 +1,4 @@ import { MantineGradient } from '@mantine/core'; - import { useColorTheme } from '~/tools/color'; export const usePrimaryGradient = () => { diff --git a/src/components/layout/Meta/BoardHeadOverride.tsx b/src/components/layout/Meta/BoardHeadOverride.tsx index 7009489dc..cc9728360 100644 --- a/src/components/layout/Meta/BoardHeadOverride.tsx +++ b/src/components/layout/Meta/BoardHeadOverride.tsx @@ -1,8 +1,7 @@ import Head from 'next/head'; import React from 'react'; -import { firstUpperCase } from '~/tools/shared/strings'; - import { useConfigContext } from '~/config/provider'; +import { firstUpperCase } from '~/tools/shared/strings'; export const BoardHeadOverride = () => { const { config, name } = useConfigContext(); diff --git a/src/components/layout/header/About/AboutModal.tsx b/src/components/layout/header/About/AboutModal.tsx index e559d97ed..66841a89d 100644 --- a/src/components/layout/header/About/AboutModal.tsx +++ b/src/components/layout/header/About/AboutModal.tsx @@ -7,8 +7,8 @@ import { Grid, Group, HoverCard, - Kbd, Image, + Kbd, Modal, Table, Text, @@ -31,11 +31,11 @@ import { motion } from 'framer-motion'; import { InitOptions } from 'i18next'; import { Trans, i18n, useTranslation } from 'next-i18next'; import { ReactNode } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useConfigStore } from '~/config/store'; import { usePackageAttributesStore } from '~/tools/client/zustands/usePackageAttributesStore'; import { useColorTheme } from '~/tools/color'; + import { usePrimaryGradient } from '../../Common/useGradient'; import Credits from './Credits'; import Tip from './Tip'; @@ -75,13 +75,7 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod opened={opened} title={ <Group spacing="sm"> - <Image - alt="Homarr logo" - src="/imgs/logo/logo.png" - width={30} - height={30} - fit="contain" - /> + <Image alt="Homarr logo" src="/imgs/logo/logo.png" width={30} height={30} fit="contain" /> <Title order={3} variant="gradient" gradient={colorGradiant}> {t('about')} Homarr @@ -271,13 +265,17 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl transition={{ duration: 0.8, ease: 'easeInOut' }} > - {t('version.new',{ newVersion: newVersionAvailable})} + {t('version.new', { newVersion: newVersionAvailable })} - {t('version.dropdown', {currentVersion: attributes.packageVersion}).split('{{newVersion}}')[0]} + { + t('version.dropdown', { currentVersion: attributes.packageVersion }).split( + '{{newVersion}}' + )[0] + } - {t('version.dropdown', {currentVersion: attributes.packageVersion}).split('{{newVersion}}')[1]} + { + t('version.dropdown', { currentVersion: attributes.packageVersion }).split( + '{{newVersion}}' + )[1] + } diff --git a/src/components/layout/header/About/Credits.tsx b/src/components/layout/header/About/Credits.tsx index 61e437d29..e361b1cfa 100644 --- a/src/components/layout/header/About/Credits.tsx +++ b/src/components/layout/header/About/Credits.tsx @@ -1,7 +1,6 @@ import { Anchor, Box, Collapse, Flex, Table, Text } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { useTranslation } from 'next-i18next'; - import { usePackageAttributesStore } from '~/tools/client/zustands/usePackageAttributesStore'; export default function Credits() { diff --git a/src/config/init.ts b/src/config/init.ts index 05af7e514..b7df29bee 100644 --- a/src/config/init.ts +++ b/src/config/init.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react'; - import { ConfigType } from '~/types/config'; + import { useConfigContext } from './provider'; import { useConfigStore } from './store'; diff --git a/src/config/provider.tsx b/src/config/provider.tsx index f6c3af58c..746e4c79d 100644 --- a/src/config/provider.tsx +++ b/src/config/provider.tsx @@ -1,8 +1,8 @@ import { ReactNode, createContext, useContext, useEffect, useState } from 'react'; import { shallow } from 'zustand/shallow'; - import { useColorTheme } from '~/tools/color'; import { ConfigType } from '~/types/config'; + import { useConfigStore } from './store'; export type ConfigContextType = { diff --git a/src/config/store.ts b/src/config/store.ts index e03bbfe69..9abc1c955 100644 --- a/src/config/store.ts +++ b/src/config/store.ts @@ -1,7 +1,6 @@ import { createWithEqualityFn } from 'zustand/traditional'; -import { trcpProxyClient } from '~/utils/api'; - import { ConfigType } from '~/types/config'; +import { trcpProxyClient } from '~/utils/api'; export const useConfigStore = createWithEqualityFn( (set, get) => ({ diff --git a/src/middleware.ts b/src/middleware.ts index a5e0b2125..d0cd1f98d 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -48,7 +48,7 @@ const shouldRedirectToOnboard = async (): Promise => { const cacheAndGetUserCount = async () => { cachedUserCount = await client.user.count.query(); return cachedUserCount === 0; - } + }; if (!env.DATABASE_URL?.startsWith('file:')) { return await cacheAndGetUserCount(); diff --git a/src/modules/common/MediaDisplay.tsx b/src/modules/common/MediaDisplay.tsx index 363247576..a7b7ae1f0 100644 --- a/src/modules/common/MediaDisplay.tsx +++ b/src/modules/common/MediaDisplay.tsx @@ -2,9 +2,9 @@ import { Badge, Button, Group, Image, Stack, Text, Title } from '@mantine/core'; import { IconDownload, IconExternalLink, IconPlayerPlay } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; - import { useConfigContext } from '~/config/provider'; import { useColorTheme } from '~/tools/color'; + import { RequestModal } from '../overseerr/RequestModal'; import { Result } from '../overseerr/SearchResult'; diff --git a/src/modules/overseerr/RequestModal.tsx b/src/modules/overseerr/RequestModal.tsx index d1c2097ef..27613f140 100644 --- a/src/modules/overseerr/RequestModal.tsx +++ b/src/modules/overseerr/RequestModal.tsx @@ -5,9 +5,9 @@ import Consola from 'consola'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import { useConfigContext } from '~/config/provider'; +import { useColorTheme } from '~/tools/color'; import { api } from '~/utils/api'; -import { useColorTheme } from '~/tools/color'; import { MovieResult } from './Movie.d'; import { Result } from './SearchResult'; import { TvShowResult, TvShowResultSeason } from './TvShow.d'; diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 6914ad7dd..1fed25830 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -5,9 +5,8 @@ import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; import pageNotFoundImage from '~/images/undraw_page_not_found_re_e9o6.svg'; -import { pageNotFoundNamespaces } from '~/tools/server/translation-namespaces'; - import { getServerSideTranslations } from '~/tools/server/getServerSideTranslations'; +import { pageNotFoundNamespaces } from '~/tools/server/translation-namespaces'; export default function Custom404() { const { classes } = useStyles(); diff --git a/src/pages/manage/index.tsx b/src/pages/manage/index.tsx index 6b89ef760..0386a274b 100644 --- a/src/pages/manage/index.tsx +++ b/src/pages/manage/index.tsx @@ -2,11 +2,11 @@ import { Box, Card, Group, + Image, SimpleGrid, Stack, Text, Title, - Image, UnstyledButton, createStyles, } from '@mantine/core'; diff --git a/src/server/api/routers/app.ts b/src/server/api/routers/app.ts index 8049df3a9..e7c3f5e23 100644 --- a/src/server/api/routers/app.ts +++ b/src/server/api/routers/app.ts @@ -10,54 +10,60 @@ import { AppType } from '~/types/app'; import { createTRPCRouter, publicProcedure } from '../trpc'; export const appRouter = createTRPCRouter({ - ping: publicProcedure.input(z.object({ - id: z.string(), - configName: z.string() - })).query(async ({ input }) => { - const agent = new https.Agent({ rejectUnauthorized: false }); - const config = getConfig(input.configName); - const app = config.apps.find((app) => app.id === input.id); + ping: publicProcedure + .input( + z.object({ + id: z.string(), + configName: z.string(), + }) + ) + .query(async ({ input }) => { + const agent = new https.Agent({ rejectUnauthorized: false }); + const config = getConfig(input.configName); + const app = config.apps.find((app) => app.id === input.id); - if (!app?.url) { - Consola.error(`App ${input} not found`); - throw new TRPCError({ - code: 'NOT_FOUND', - cause: input, - message: `App ${input.id} was not found`, - }); - } - const res = await axios - .get(app.url, { httpsAgent: agent, timeout: 10000 }) - .then((response) => ({ - status: response.status, - statusText: response.statusText, - state: isStatusOk(app as AppType, response.status) ? 'online' : 'offline' - })) - .catch((error: AxiosError) => { - if (error.response) { - return { - state: isStatusOk(app as AppType, error.response.status) ? 'online' : 'offline', - status: error.response.status, - statusText: error.response.statusText, - }; - } - - if (error.code === 'ECONNABORTED') { - Consola.error(`Ping timed out for app with id '${input.id}' in config '${input.configName}' -> url: ${app.url})`); - throw new TRPCError({ - code: 'TIMEOUT', - cause: input, - message: `Ping timed out`, - }); - } - - Consola.error(`Unexpected response: ${error.message}`); + if (!app?.url) { + Consola.error(`App ${input} not found`); throw new TRPCError({ - code: 'UNPROCESSABLE_CONTENT', + code: 'NOT_FOUND', cause: input, - message: `Unexpected response: ${error.message}`, + message: `App ${input.id} was not found`, }); - }); - return res; - }), + } + const res = await axios + .get(app.url, { httpsAgent: agent, timeout: 10000 }) + .then((response) => ({ + status: response.status, + statusText: response.statusText, + state: isStatusOk(app as AppType, response.status) ? 'online' : 'offline', + })) + .catch((error: AxiosError) => { + if (error.response) { + return { + state: isStatusOk(app as AppType, error.response.status) ? 'online' : 'offline', + status: error.response.status, + statusText: error.response.statusText, + }; + } + + if (error.code === 'ECONNABORTED') { + Consola.error( + `Ping timed out for app with id '${input.id}' in config '${input.configName}' -> url: ${app.url})` + ); + throw new TRPCError({ + code: 'TIMEOUT', + cause: input, + message: `Ping timed out`, + }); + } + + Consola.error(`Unexpected response: ${error.message}`); + throw new TRPCError({ + code: 'UNPROCESSABLE_CONTENT', + cause: input, + message: `Unexpected response: ${error.message}`, + }); + }); + return res; + }), }); diff --git a/src/server/api/routers/media-request.ts b/src/server/api/routers/media-request.ts index 65dc38d6b..45a2ff12c 100644 --- a/src/server/api/routers/media-request.ts +++ b/src/server/api/routers/media-request.ts @@ -1,13 +1,13 @@ import Consola from 'consola'; +import { removeTrailingSlash } from 'next/dist/shared/lib/router/utils/remove-trailing-slash'; import { z } from 'zod'; import { checkIntegrationsType } from '~/tools/client/app-properties'; import { getConfig } from '~/tools/config/getConfig'; import { MediaRequestListWidget } from '~/widgets/media-requests/MediaRequestListTile'; +import { MediaRequestStatsWidget } from '~/widgets/media-requests/MediaRequestStatsTile'; import { MediaRequest, Users } from '~/widgets/media-requests/media-request-types'; import { createTRPCRouter, publicProcedure } from '../trpc'; -import { MediaRequestStatsWidget } from '~/widgets/media-requests/MediaRequestStatsTile'; -import { removeTrailingSlash } from 'next/dist/shared/lib/router/utils/remove-trailing-slash'; export const mediaRequestsRouter = createTRPCRouter({ allMedia: publicProcedure @@ -33,9 +33,11 @@ export const mediaRequestsRouter = createTRPCRouter({ }) .then(async (response) => { const body = (await response.json()) as OverseerrResponse; - let appUrl = input.widget.properties.replaceLinksWithExternalHost && app.behaviour.externalUrl?.length > 0 - ? app.behaviour.externalUrl - : app.url; + let appUrl = + input.widget.properties.replaceLinksWithExternalHost && + app.behaviour.externalUrl?.length > 0 + ? app.behaviour.externalUrl + : app.url; appUrl = removeTrailingSlash(appUrl); @@ -163,7 +165,7 @@ const retrieveDetailsForItem = async ( backdropPath: series.backdropPath, posterPath: series.backdropPath, }; - }; + } const movieResponse = await fetch(`${baseUrl}/api/v1/movie/${id}`, { headers, diff --git a/src/server/api/routers/media-server.ts b/src/server/api/routers/media-server.ts index 0f7c14ebb..a1b9cf599 100644 --- a/src/server/api/routers/media-server.ts +++ b/src/server/api/routers/media-server.ts @@ -2,21 +2,18 @@ import { Jellyfin } from '@jellyfin/sdk'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models'; import { getSessionApi } from '@jellyfin/sdk/lib/utils/api/session-api'; import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api'; - import Consola from 'consola'; - import { z } from 'zod'; - -import { createTRPCRouter, publicProcedure } from '../trpc'; - -import { ConfigAppType } from '~/types/app'; import { checkIntegrationsType, findAppProperty } from '~/tools/client/app-properties'; import { getConfig } from '~/tools/config/getConfig'; +import { PlexClient } from '~/tools/server/sdk/plex/plexClient'; import { trimStringEnding } from '~/tools/shared/strings'; import { GenericMediaServer } from '~/types/api/media-server/media-server'; import { MediaServersResponseType } from '~/types/api/media-server/response'; import { GenericCurrentlyPlaying, GenericSessionInfo } from '~/types/api/media-server/session-info'; -import { PlexClient } from '~/tools/server/sdk/plex/plexClient'; +import { ConfigAppType } from '~/types/app'; + +import { createTRPCRouter, publicProcedure } from '../trpc'; const jellyfin = new Jellyfin({ clientInfo: { @@ -108,7 +105,13 @@ const handleServer = async (app: ConfigAppType): Promise session.NowPlayingItem) @@ -180,7 +183,13 @@ const handleServer = async (app: ConfigAppType): Promise { - const timezone = GeoTz.find(input.latitude,input.longitude); - return Array.isArray(timezone) ? timezone[0] : timezone; + const timezone = GeoTz.find(input.latitude, input.longitude); + return Array.isArray(timezone) ? timezone[0] : timezone; }), -}) \ No newline at end of file +}); diff --git a/src/tools/config/getConfig.ts b/src/tools/config/getConfig.ts index 8659c61d5..dff3c80c2 100644 --- a/src/tools/config/getConfig.ts +++ b/src/tools/config/getConfig.ts @@ -1,7 +1,7 @@ import Consola from 'consola'; import { v4 as uuidv4 } from 'uuid'; - import { BackendConfigType, ConfigType } from '~/types/config'; + import { configExists } from './configExists'; import { getFallbackConfig } from './getFallbackConfig'; import { readConfig } from './readConfig'; diff --git a/src/tools/config/getFallbackConfig.ts b/src/tools/config/getFallbackConfig.ts index d5ca11750..cbb760743 100644 --- a/src/tools/config/getFallbackConfig.ts +++ b/src/tools/config/getFallbackConfig.ts @@ -1,4 +1,5 @@ import { ConfigType } from '~/types/config'; + import defaultConfig from '../../../data/configs/default.json'; export const getFallbackConfig = (name?: string) => ({ @@ -11,7 +12,7 @@ export const getFallbackConfig = (name?: string) => ({ export const getStaticFallbackConfig = (name: string): ConfigType => ({ schemaVersion: 1, configProperties: { - name: name + name: name, }, categories: [ { @@ -55,7 +56,7 @@ export const getStaticFallbackConfig = (name: string): ConfigType => ({ }, accessibility: { disablePingPulse: false, - replacePingDotsWithIcons: false + replacePingDotsWithIcons: false, }, pageTitle: 'Homarr ⭐️', logoImageUrl: '/imgs/logo/logo.png', diff --git a/src/tools/config/getFrontendConfig.ts b/src/tools/config/getFrontendConfig.ts index 146069aca..719844d38 100644 --- a/src/tools/config/getFrontendConfig.ts +++ b/src/tools/config/getFrontendConfig.ts @@ -2,8 +2,8 @@ import Consola from 'consola'; import fs from 'fs'; import { fetchCity } from '~/server/api/routers/weather'; import { IntegrationField } from '~/types/app'; - import { BackendConfigType, ConfigType } from '~/types/config'; + import { getConfig } from './getConfig'; export const getFrontendConfig = async (name: string): Promise => { @@ -139,11 +139,11 @@ const migrateAppConfigs = (config: BackendConfigType) => { ...app, appearance: { ...app.appearance, - appNameStatus: app.appearance.appNameStatus?? 'normal', - positionAppName: app.appearance.positionAppName?? 'column', - appNameFontSize: app.appearance.appNameFontSize?? 16, - lineClampAppName: app.appearance.lineClampAppName?? 1, - } - })) - } -} \ No newline at end of file + appNameStatus: app.appearance.appNameStatus ?? 'normal', + positionAppName: app.appearance.positionAppName ?? 'column', + appNameFontSize: app.appearance.appNameFontSize ?? 16, + lineClampAppName: app.appearance.lineClampAppName ?? 1, + }, + })), + }; +}; diff --git a/src/tools/config/writeConfig.ts b/src/tools/config/writeConfig.ts index 0c1fcffe6..79e9360d7 100644 --- a/src/tools/config/writeConfig.ts +++ b/src/tools/config/writeConfig.ts @@ -1,6 +1,6 @@ import fs from 'fs'; - import { BackendConfigType } from '~/types/config'; + import { generateConfigPath } from './generateConfigPath'; export function writeConfig(config: BackendConfigType) { diff --git a/src/tools/server/loginBuilder.ts b/src/tools/server/loginBuilder.ts index 5120a6dc9..3f84f2b7e 100644 --- a/src/tools/server/loginBuilder.ts +++ b/src/tools/server/loginBuilder.ts @@ -10,7 +10,7 @@ import { ParsedUrlQuery } from 'querystring'; export const checkForSessionOrAskForLogin = ( context: GetServerSidePropsContext, session: Session | null, - accessCallback: () => boolean, + accessCallback: () => boolean ): GetServerSidePropsResult | undefined => { if (!session?.user) { console.log('detected logged out user!'); @@ -26,8 +26,8 @@ export const checkForSessionOrAskForLogin = ( if (!accessCallback()) { return { props: {}, - notFound: true - } + notFound: true, + }; } return undefined; diff --git a/src/tools/server/sdk/adGuard/adGuard.ts b/src/tools/server/sdk/adGuard/adGuard.ts index eba80c4bd..461b06f64 100644 --- a/src/tools/server/sdk/adGuard/adGuard.ts +++ b/src/tools/server/sdk/adGuard/adGuard.ts @@ -2,6 +2,7 @@ import axios from 'axios'; import Consola from 'consola'; import { z } from 'zod'; import { trimStringEnding } from '~/tools/shared/strings'; + import { adGuardApiFilteringStatusSchema, adGuardApiStatsResponseSchema, diff --git a/src/tools/server/sdk/pihole/piHole.spec.ts b/src/tools/server/sdk/pihole/piHole.spec.ts index 3828c9d38..91df0b09b 100644 --- a/src/tools/server/sdk/pihole/piHole.spec.ts +++ b/src/tools/server/sdk/pihole/piHole.spec.ts @@ -171,7 +171,7 @@ describe('PiHole API client', () => { }); } - if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice'){ + if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice') { countTriedRequests += 1; return JSON.stringify({ status: 'enabled', @@ -213,9 +213,9 @@ describe('PiHole API client', () => { }); } - if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice'){ + if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice') { countTriedRequests += 1; - if(countTriedRequests < 10) { + if (countTriedRequests < 10) { return JSON.stringify({ status: 'disabled', }); @@ -261,7 +261,7 @@ describe('PiHole API client', () => { }); } - if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice'){ + if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice') { countTriedRequests += 1; return JSON.stringify({ status: 'disabled', @@ -303,9 +303,9 @@ describe('PiHole API client', () => { }); } - if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice'){ + if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice') { countTriedRequests += 1; - if(countTriedRequests < 10) { + if (countTriedRequests < 10) { return JSON.stringify({ status: 'enabled', }); @@ -351,7 +351,7 @@ describe('PiHole API client', () => { }); } - if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice'){ + if (request.url === 'http://pi.hole/admin/api.php?summaryRaw&auth=nice') { countTriedRequests += 1; return JSON.stringify({ status: 'disabled', diff --git a/src/tools/server/sdk/pihole/piHole.ts b/src/tools/server/sdk/pihole/piHole.ts index 513165527..76ed4517c 100644 --- a/src/tools/server/sdk/pihole/piHole.ts +++ b/src/tools/server/sdk/pihole/piHole.ts @@ -1,4 +1,5 @@ import { trimStringEnding } from '~/tools/shared/strings'; + import { PiHoleApiStatusChangeResponse, PiHoleApiSummaryResponse } from './piHole.type'; export class PiHoleClient { @@ -62,18 +63,18 @@ export class PiHoleClient { ); } - for(let loops = 0; loops < 10; loops++){ - const summary = await this.getSummary() - if (summary.status === action + 'd'){ + for (let loops = 0; loops < 10; loops++) { + const summary = await this.getSummary(); + if (summary.status === action + 'd') { return { status: summary.status } as PiHoleApiStatusChangeResponse; } - await new Promise ((resolve) => { setTimeout(resolve, 50)}); + await new Promise((resolve) => { + setTimeout(resolve, 50); + }); } return Promise.reject( - new Error( - `Although PiHole received the command, it failed to update it's status: ${json}` - ) - ) + new Error(`Although PiHole received the command, it failed to update it's status: ${json}`) + ); } } diff --git a/src/tools/server/sdk/plex/plexClient.ts b/src/tools/server/sdk/plex/plexClient.ts index e7ecc2f83..fef08cb60 100644 --- a/src/tools/server/sdk/plex/plexClient.ts +++ b/src/tools/server/sdk/plex/plexClient.ts @@ -1,9 +1,5 @@ import { Element, xml2js } from 'xml-js'; - -import { - GenericCurrentlyPlaying, - GenericSessionInfo, -} from '~/types/api/media-server/session-info'; +import { GenericCurrentlyPlaying, GenericSessionInfo } from '~/types/api/media-server/session-info'; export class PlexClient { constructor( @@ -44,7 +40,6 @@ export class PlexClient { const { videoCodec, videoFrameRate, audioCodec, audioChannels, height, width, bitrate } = mediaElement; - return { id: sessionElement?.id as string | undefined, username: userElement?.title ?? ('Anonymous' as string), diff --git a/src/tools/shared/app.ts b/src/tools/shared/app.ts index c4d869913..26c1a3f34 100644 --- a/src/tools/shared/app.ts +++ b/src/tools/shared/app.ts @@ -11,7 +11,7 @@ export const generateDefaultApp = (wrapperId: string): AppType => appNameStatus: 'normal', positionAppName: 'column', lineClampAppName: 1, - appNameFontSize: 16 + appNameFontSize: 16, }, network: { enabledStatusChecker: true, diff --git a/src/types/api/downloads/queue/NormalizedDownloadQueueResponse.ts b/src/types/api/downloads/queue/NormalizedDownloadQueueResponse.ts index 7f4d7187d..a0f5f44ca 100644 --- a/src/types/api/downloads/queue/NormalizedDownloadQueueResponse.ts +++ b/src/types/api/downloads/queue/NormalizedDownloadQueueResponse.ts @@ -1,5 +1,4 @@ import { NormalizedTorrent } from '@ctrl/shared-torrent'; - import { UsenetQueueItem } from '~/widgets/useNet/types'; export type NormalizedDownloadQueueResponse = { diff --git a/src/types/app.ts b/src/types/app.ts index b0f614639..68a3c5039 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -1,5 +1,5 @@ import { Icon, IconKey, IconPassword, IconUser } from '@tabler/icons-react'; -import { Property } from 'csstype' +import { Property } from 'csstype'; import { TileBaseType } from './tile'; @@ -34,7 +34,7 @@ interface AppNetworkType { interface AppAppearanceType { iconUrl: string; - appNameStatus: "normal"|"hover"|"hidden"; + appNameStatus: 'normal' | 'hover' | 'hidden'; positionAppName: Property.FlexDirection; appNameFontSize: number; lineClampAppName: number; diff --git a/src/types/config.ts b/src/types/config.ts index 597d24035..050f42005 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -1,4 +1,5 @@ import { IWidget } from '~/widgets/widgets'; + import { AppType, ConfigAppType } from './app'; import { CategoryType } from './category'; import { SettingsType } from './settings'; diff --git a/src/utils/session.ts b/src/utils/session.ts index 976322467..9c72e3b4d 100644 --- a/src/utils/session.ts +++ b/src/utils/session.ts @@ -1,4 +1,4 @@ -import { randomUUID } from "crypto"; +import { randomUUID } from 'crypto'; export const fromDate = (seconds: number, date = Date.now()) => { return new Date(date + seconds * 1000); @@ -8,4 +8,3 @@ export const fromDate = (seconds: number, date = Date.now()) => { export const generateSessionToken = () => { return randomUUID(); }; - diff --git a/src/widgets/WidgetWrapper.tsx b/src/widgets/WidgetWrapper.tsx index ec613edad..04001fc8a 100644 --- a/src/widgets/WidgetWrapper.tsx +++ b/src/widgets/WidgetWrapper.tsx @@ -1,8 +1,8 @@ import { ComponentType } from 'react'; - -import Widgets from '.'; import { HomarrCardWrapper } from '~/components/Dashboard/Tiles/HomarrCardWrapper'; import { WidgetsMenu } from '~/components/Dashboard/Tiles/Widgets/WidgetsMenu'; + +import Widgets from '.'; import ErrorBoundary from './boundary'; import { IWidget } from './widgets'; diff --git a/src/widgets/bookmark/BookmarkWidgetTile.tsx b/src/widgets/bookmark/BookmarkWidgetTile.tsx index 835ab4a36..6bc739b84 100644 --- a/src/widgets/bookmark/BookmarkWidgetTile.tsx +++ b/src/widgets/bookmark/BookmarkWidgetTile.tsx @@ -3,11 +3,11 @@ import { Box, Button, Card, + Divider, Flex, Group, Image, ScrollArea, - Divider, Stack, Switch, Text, @@ -27,12 +27,12 @@ import { } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { useEffect } from 'react'; +import React from 'react'; import { v4 } from 'uuid'; import { z } from 'zod'; -import React from 'react'; - import { useEditModeStore } from '~/components/Dashboard/Views/useEditModeStore'; import { IconSelector } from '~/components/IconSelector/IconSelector'; + import { defineWidget } from '../helper'; import { IDraggableEditableListInputValue, IWidget } from '../widgets'; @@ -54,7 +54,7 @@ const definition = defineWidget({ type: 'text', defaultValue: '', info: true, - infoLink: "https://homarr.dev/docs/widgets/bookmarks/", + infoLink: 'https://homarr.dev/docs/widgets/bookmarks/', }, items: { type: 'draggable-editable-list', @@ -84,11 +84,11 @@ const definition = defineWidget({ return undefined; } - return t('item.validation.length', {shortest: "1", longest: "100"}); + return t('item.validation.length', { shortest: '1', longest: '100' }); }, href: (value) => { if (!z.string().min(1).max(200).safeParse(value).success) { - return t('item.validation.length', {shortest: "1", longest: "200"}); + return t('item.validation.length', { shortest: '1', longest: '200' }); } if (!z.string().url().safeParse(value).success) { @@ -102,7 +102,7 @@ const definition = defineWidget({ return undefined; } - return t('item.validation.length', {shortest: "1", longest: "400"}); + return t('item.validation.length', { shortest: '1', longest: '400' }); }, }, validateInputOnChange: true, @@ -174,11 +174,7 @@ const definition = defineWidget({ } satisfies IDraggableEditableListInputValue, layout: { type: 'select', - data: [ - { value: 'autoGrid', }, - { value: 'horizontal', }, - { value: 'vertical', }, - ], + data: [{ value: 'autoGrid' }, { value: 'horizontal' }, { value: 'vertical' }], defaultValue: 'autoGrid', }, }, @@ -223,10 +219,12 @@ function BookmarkWidgetTile({ widget }: BookmarkWidgetTileProps) { case 'autoGrid': return ( - {widget.properties.name} + + {widget.properties.name} + {widget.properties.items.map((item: BookmarkItem, index) => ( @@ -239,10 +237,12 @@ function BookmarkWidgetTile({ widget }: BookmarkWidgetTileProps) { href={item.href} target={item.openNewTab ? '_blank' : undefined} withBorder - bg={colorScheme === 'dark' ? colors.dark[5].concat('80') : colors.blue[0].concat('80')} + bg={ + colorScheme === 'dark' ? colors.dark[5].concat('80') : colors.blue[0].concat('80') + } sx={{ - '&:hover': { backgroundColor: fn.primaryColor().concat('40'), }, //'40' = 25% opacity - flex:'1 1 auto', + '&:hover': { backgroundColor: fn.primaryColor().concat('40') }, //'40' = 25% opacity + flex: '1 1 auto', }} display="flex" > @@ -265,29 +265,29 @@ function BookmarkWidgetTile({ widget }: BookmarkWidgetTileProps) { type="auto" h="100%" offsetScrollbars - mr={isEditModeEnabled && widget.properties.name === ""? 'xl' : undefined} + mr={isEditModeEnabled && widget.properties.name === '' ? 'xl' : undefined} styles={{ - viewport:{ + viewport: { //mantine being mantine again... this might break. Needed for taking 100% of widget space - '& div[style="min-width: 100%; display: table;"]':{ + '& div[style="min-width: 100%; display: table;"]': { display: 'flex !important', - height:'100%', + height: '100%', }, }, }} > - + {widget.properties.items.map((item: BookmarkItem, index) => ( -
+
- +
))} @@ -320,26 +320,28 @@ function BookmarkWidgetTile({ widget }: BookmarkWidgetTileProps) { const BookmarkItemContent = ({ item }: { item: BookmarkItem }) => { const { colorScheme } = useMantineTheme(); return ( - - - - {item.name} - - - -)}; + + + + {item.name} + + + + ); +}; const useStyles = createStyles(() => ({ grid: { diff --git a/src/widgets/boundary.tsx b/src/widgets/boundary.tsx index c023291fc..a6c930bb7 100644 --- a/src/widgets/boundary.tsx +++ b/src/widgets/boundary.tsx @@ -4,8 +4,8 @@ import { IconBrandGithub, IconBug, IconInfoCircle, IconRefresh } from '@tabler/i import Consola from 'consola'; import { withTranslation } from 'next-i18next'; import React, { ReactNode } from 'react'; - import { WidgetsMenu } from '~/components/Dashboard/Tiles/Widgets/WidgetsMenu'; + import { IWidget } from './widgets'; type ErrorBoundaryState = { diff --git a/src/widgets/calendar/MediaList.tsx b/src/widgets/calendar/MediaList.tsx index 359ac72e5..70c879f9d 100644 --- a/src/widgets/calendar/MediaList.tsx +++ b/src/widgets/calendar/MediaList.tsx @@ -1,13 +1,13 @@ import { Divider, ScrollArea, createStyles } from '@mantine/core'; import { useViewportSize } from '@mantine/hooks'; import React from 'react'; - import { LidarrMediaDisplay, RadarrMediaDisplay, ReadarrMediaDisplay, SonarrMediaDisplay, } from '~/modules/common'; + import { MediasType } from './type'; interface MediaListProps { diff --git a/src/widgets/calendar/bg-calculator.ts b/src/widgets/calendar/bg-calculator.ts index 58040e641..79d47df02 100644 --- a/src/widgets/calendar/bg-calculator.ts +++ b/src/widgets/calendar/bg-calculator.ts @@ -1,5 +1,4 @@ import { ColorScheme, useMantineTheme } from '@mantine/core'; - import { isToday } from '~/tools/shared/time/date.tool'; export const getBgColorByDateAndTheme = (colorScheme: ColorScheme, date: Date) => { diff --git a/src/widgets/dashDot/DashDotCompactNetwork.tsx b/src/widgets/dashDot/DashDotCompactNetwork.tsx index 55b313b5c..0bad37df2 100644 --- a/src/widgets/dashDot/DashDotCompactNetwork.tsx +++ b/src/widgets/dashDot/DashDotCompactNetwork.tsx @@ -1,9 +1,8 @@ import { Group, Stack, Text } from '@mantine/core'; import { IconArrowNarrowDown, IconArrowNarrowUp } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; -import { RouterOutputs } from '~/utils/api'; - import { bytes } from '~/tools/bytesHelper'; +import { RouterOutputs } from '~/utils/api'; interface DashDotCompactNetworkProps { info: DashDotInfo; diff --git a/src/widgets/dashDot/DashDotCompactStorage.tsx b/src/widgets/dashDot/DashDotCompactStorage.tsx index fa82c71f5..9f76d1ef3 100644 --- a/src/widgets/dashDot/DashDotCompactStorage.tsx +++ b/src/widgets/dashDot/DashDotCompactStorage.tsx @@ -1,9 +1,9 @@ import { Group, Stack, Text } from '@mantine/core'; import { useTranslation } from 'next-i18next'; -import { api } from '~/utils/api'; - import { bytes } from '~/tools/bytesHelper'; import { percentage } from '~/tools/shared/math/percentage.tool'; +import { api } from '~/utils/api'; + import { DashDotInfo } from './DashDotCompactNetwork'; interface DashDotCompactStorageProps { diff --git a/src/widgets/dashDot/api.ts b/src/widgets/dashDot/api.ts index aac79be9b..b73877afe 100644 --- a/src/widgets/dashDot/api.ts +++ b/src/widgets/dashDot/api.ts @@ -1,6 +1,13 @@ import { useConfigContext } from '~/config/provider'; import { RouterInputs, api } from '~/utils/api'; -import { UsenetHistoryRequestParams, UsenetInfoRequestParams, UsenetPauseRequestParams, UsenetQueueRequestParams, UsenetResumeRequestParams } from '../useNet/types'; + +import { + UsenetHistoryRequestParams, + UsenetInfoRequestParams, + UsenetPauseRequestParams, + UsenetQueueRequestParams, + UsenetResumeRequestParams, +} from '../useNet/types'; const POLLING_INTERVAL = 2000; diff --git a/src/widgets/date/DateTile.tsx b/src/widgets/date/DateTile.tsx index 1b3ce6f77..1fbbdbbef 100644 --- a/src/widgets/date/DateTile.tsx +++ b/src/widgets/date/DateTile.tsx @@ -6,10 +6,10 @@ import timezones from 'dayjs/plugin/timezone'; import utc from 'dayjs/plugin/utc'; import { useSession } from 'next-auth/react'; import { useEffect, useRef, useState } from 'react'; +import { useSetSafeInterval } from '~/hooks/useSetSafeInterval'; import { getLanguageByCode } from '~/tools/language'; import { api } from '~/utils/api'; -import { useSetSafeInterval } from '~/hooks/useSetSafeInterval'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; @@ -108,8 +108,8 @@ function DateTile({ widget }: DateTileProps) { ); } -const useStyles = createStyles(()=>({ - wrapper:{ +const useStyles = createStyles(() => ({ + wrapper: { display: 'flex', flexDirection: 'column', justifyContent: 'space-evenly', @@ -117,17 +117,17 @@ const useStyles = createStyles(()=>({ height: '100%', gap: 0, }, - clock:{ + clock: { lineHeight: '1', whiteSpace: 'nowrap', fontWeight: 700, fontSize: '2.125rem', }, - extras:{ + extras: { lineHeight: '1', whiteSpace: 'nowrap', - } -})) + }, +})); /** * State which updates when the minute is changing @@ -142,7 +142,7 @@ const useDateState = (location?: { latitude: number; longitude: number }) => { const { data: userWithSettings } = api.user.withSettings.useQuery(undefined, { enabled: !!sessionData?.user, }); - const userLanguage = userWithSettings?.settings.language; + const userLanguage = userWithSettings?.settings.language; const [date, setDate] = useState(getNewDate(timezone)); const setSafeInterval = useSetSafeInterval(); const timeoutRef = useRef(); // reference for initial timeout until first minute change diff --git a/src/widgets/dnshole/DnsHoleControls.tsx b/src/widgets/dnshole/DnsHoleControls.tsx index d8285001b..01967a9cf 100644 --- a/src/widgets/dnshole/DnsHoleControls.tsx +++ b/src/widgets/dnshole/DnsHoleControls.tsx @@ -16,9 +16,9 @@ import { useElementSize } from '@mantine/hooks'; import { IconDeviceGamepad, IconPlayerPlay, IconPlayerStop } from '@tabler/icons-react'; import { useSession } from 'next-auth/react'; import { useTranslation } from 'next-i18next'; +import { useConfigContext } from '~/config/provider'; import { api } from '~/utils/api'; -import { useConfigContext } from '~/config/provider'; import { defineWidget } from '../helper'; import { WidgetLoading } from '../loading'; import { IWidget } from '../widgets'; @@ -84,15 +84,19 @@ function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) { } if (data.status.length === 0) { - return( + return (
- - {t('modules/dns-hole-controls:descriptor.errors.general.title')} - {t('modules/dns-hole-controls:descriptor.errors.general.text')} + + + {t('modules/dns-hole-controls:descriptor.errors.general.title')} + + + {t('modules/dns-hole-controls:descriptor.errors.general.text')} +
- ) + ); } console.log(data); @@ -136,15 +140,18 @@ function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) { >