mirror of
https://github.com/ajnart/homarr.git
synced 2026-01-29 10:49:14 +01:00
fix: Modals titles nested headers and header nested buttons errors (#2019)
This commit is contained in:
@@ -169,11 +169,7 @@ const CitySelectModal = ({ opened, closeModal, query, onCitySelected }: CitySele
|
||||
if (isError === true)
|
||||
return (
|
||||
<Modal
|
||||
title={
|
||||
<Title order={4}>
|
||||
{t('modal.title')} - {query}
|
||||
</Title>
|
||||
}
|
||||
title={t('modal.title') + ' - ' + query}
|
||||
size="xl"
|
||||
opened={opened}
|
||||
onClose={closeModal}
|
||||
@@ -193,11 +189,7 @@ const CitySelectModal = ({ opened, closeModal, query, onCitySelected }: CitySele
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title={
|
||||
<Title order={4}>
|
||||
{t('modal.title')} - {query}
|
||||
</Title>
|
||||
}
|
||||
title={t('modal.title') + ' - ' + query}
|
||||
size="xl"
|
||||
opened={opened}
|
||||
onClose={closeModal}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Title } from '@mantine/core';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { openContextModalGeneric } from '~/tools/mantineModalManagerExtensions';
|
||||
import { IWidget } from '~/widgets/widgets';
|
||||
@@ -38,7 +37,7 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => {
|
||||
const handleDeleteClick = () => {
|
||||
openContextModalGeneric<WidgetsRemoveModalInnerProps>({
|
||||
modal: 'integrationRemove',
|
||||
title: <Title order={4}>{t('common:remove')}</Title>,
|
||||
title: t('common:remove'),
|
||||
innerProps: {
|
||||
widgetId: widget.id,
|
||||
widgetType: integration,
|
||||
|
||||
@@ -98,10 +98,10 @@ export const DashboardCategory = ({ category }: DashboardCategoryProps) => {
|
||||
>
|
||||
<Accordion.Item value={category.name}>
|
||||
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
||||
<Accordion.Control icon={isEditMode && <CategoryEditMenu category={category} />}>
|
||||
<Accordion.Control>
|
||||
<Title order={3}>{category.name}</Title>
|
||||
</Accordion.Control>
|
||||
{!isEditMode && (
|
||||
{!isEditMode ? (
|
||||
<Menu withArrow withinPortal>
|
||||
<Menu.Target>
|
||||
<ActionIcon variant="light" mr="md">
|
||||
@@ -114,7 +114,7 @@ export const DashboardCategory = ({ category }: DashboardCategoryProps) => {
|
||||
</Menu.Item>
|
||||
</Menu.Dropdown>
|
||||
</Menu>
|
||||
)}
|
||||
) : <CategoryEditMenu category={category} />}
|
||||
</Box>
|
||||
<Accordion.Panel>
|
||||
<div
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Stack, Text, TextInput, Title } from '@mantine/core';
|
||||
import { Button, Group, Stack, Text, TextInput } from '@mantine/core';
|
||||
import { useForm } from '@mantine/form';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
@@ -80,11 +80,7 @@ export const CreateBoardModal = ({ id }: ContextModalProps<{}>) => {
|
||||
export const openCreateBoardModal = () => {
|
||||
modals.openContextModal({
|
||||
modal: 'createBoardModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="manage/boards:modals.create.title" />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="manage/boards:modals.create.title" />,
|
||||
innerProps: {},
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, Group, Stack, Text } from '@mantine/core';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { api } from '~/utils/api';
|
||||
@@ -51,11 +51,7 @@ export const DeleteBoardModal = ({ id, innerProps }: ContextModalProps<InnerProp
|
||||
export const openDeleteBoardModal = (innerProps: InnerProps) => {
|
||||
modals.openContextModal({
|
||||
modal: 'deleteBoardModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="manage/boards:modals.delete.title" />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="manage/boards:modals.delete.title" />,
|
||||
innerProps,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Select, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, Group, Select, Stack, Text } from '@mantine/core';
|
||||
import { useForm } from '@mantine/form';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { showNotification } from '@mantine/notifications';
|
||||
@@ -132,11 +132,7 @@ export const DockerSelectBoardModal = ({ id, innerProps }: ContextModalProps<Inn
|
||||
export const openDockerSelectBoardModal = (innerProps: InnerProps) => {
|
||||
modals.openContextModal({
|
||||
modal: 'dockerSelectBoardModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="tools/docker:modals.selectBoard.title" />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="tools/docker:modals.selectBoard.title" />,
|
||||
innerProps,
|
||||
});
|
||||
umami.track('Add to homarr modal');
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, CopyButton, Mark, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, CopyButton, Mark, Stack, Text } from '@mantine/core';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import Link from 'next/link';
|
||||
@@ -65,11 +65,7 @@ const useInviteUrl = (id: string, token: string) => {
|
||||
export const openCopyInviteModal = (data: InnerProps) => {
|
||||
modals.openContextModal({
|
||||
modal: 'copyInviteModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="manage/users/invites:modals.copy.title" />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="manage/users/invites:modals.copy.title" />,
|
||||
innerProps: data,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, Group, Stack, Text } from '@mantine/core';
|
||||
import { DateTimePicker } from '@mantine/dates';
|
||||
import { useForm } from '@mantine/form';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
@@ -79,11 +79,7 @@ export const CreateInviteModal = ({ id }: ContextModalProps<{}>) => {
|
||||
export const openCreateInviteModal = () => {
|
||||
modals.openContextModal({
|
||||
modal: 'createInviteModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="manage/users/invites:modals.create.title" />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="manage/users/invites:modals.create.title" />,
|
||||
innerProps: {},
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, Group, Stack, Text } from '@mantine/core';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { api } from '~/utils/api';
|
||||
@@ -48,12 +48,10 @@ export const openRoleChangeModal = (user: InnerProps) => {
|
||||
modals.openContextModal({
|
||||
modal: 'changeUserRoleModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans
|
||||
i18nKey={`manage/users:modals.change-role.${user.type}.title`}
|
||||
values={{ name: user.name }}
|
||||
/>
|
||||
</Title>
|
||||
<Trans
|
||||
i18nKey={`manage/users:modals.change-role.${user.type}.title`}
|
||||
values={{ name: user.name }}
|
||||
/>
|
||||
),
|
||||
innerProps: user,
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Group, Stack, Text, Title } from '@mantine/core';
|
||||
import { Button, Group, Stack, Text } from '@mantine/core';
|
||||
import { ContextModalProps, modals } from '@mantine/modals';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { api } from '~/utils/api';
|
||||
@@ -46,11 +46,7 @@ export const DeleteUserModal = ({ id, innerProps }: ContextModalProps<InnerProps
|
||||
export const openDeleteUserModal = (user: InnerProps) => {
|
||||
modals.openContextModal({
|
||||
modal: 'deleteUserModal',
|
||||
title: (
|
||||
<Title order={4}>
|
||||
<Trans i18nKey="manage/users:modals.delete.title" values={{ name: user.name }} />
|
||||
</Title>
|
||||
),
|
||||
title: <Trans i18nKey="manage/users:modals.delete.title" values={{ name: user.name }} />,
|
||||
innerProps: user,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -27,64 +27,60 @@ export const AvatarMenu = () => {
|
||||
const defaultBoardHref = useBoardLink('/board');
|
||||
|
||||
return (
|
||||
<UnstyledButton>
|
||||
<Menu width={256}>
|
||||
<Menu.Target>
|
||||
<Menu width={256}>
|
||||
<Menu.Target>
|
||||
<UnstyledButton>
|
||||
<CurrentUserAvatar user={sessionData?.user ?? null} />
|
||||
</Menu.Target>
|
||||
<Menu.Dropdown>
|
||||
<Menu.Item
|
||||
closeMenuOnClick={false}
|
||||
icon={<Icon size="1rem" />}
|
||||
onClick={toggleColorScheme}
|
||||
>
|
||||
{t('actions.avatar.switchTheme')}
|
||||
</Menu.Item>
|
||||
{sessionData?.user && (
|
||||
<>
|
||||
<Menu.Item
|
||||
component={Link}
|
||||
passHref
|
||||
href="/user/preferences"
|
||||
icon={<IconUserCog size="1rem" />}
|
||||
>
|
||||
{t('actions.avatar.preferences')}
|
||||
</Menu.Item>
|
||||
<Menu.Item
|
||||
component={Link}
|
||||
href={defaultBoardHref}
|
||||
icon={<IconDashboard size="1rem" />}
|
||||
>
|
||||
{t('actions.avatar.defaultBoard')}
|
||||
</Menu.Item>
|
||||
<Menu.Item component={Link} href="/manage" icon={<IconHomeShare size="1rem" />}>
|
||||
{t('actions.avatar.manage')}
|
||||
</Menu.Item>
|
||||
<Menu.Divider />
|
||||
</>
|
||||
)}
|
||||
{sessionData?.user ? (
|
||||
</UnstyledButton>
|
||||
</Menu.Target>
|
||||
<Menu.Dropdown>
|
||||
<Menu.Item closeMenuOnClick={false} icon={<Icon size="1rem" />} onClick={toggleColorScheme}>
|
||||
{t('actions.avatar.switchTheme')}
|
||||
</Menu.Item>
|
||||
{sessionData?.user && (
|
||||
<>
|
||||
<Menu.Item
|
||||
icon={<IconLogout size="1rem" />}
|
||||
color="red"
|
||||
onClick={() =>
|
||||
signOut({
|
||||
redirect: false,
|
||||
}).then(() => window.location.reload())
|
||||
}
|
||||
component={Link}
|
||||
passHref
|
||||
href="/user/preferences"
|
||||
icon={<IconUserCog size="1rem" />}
|
||||
>
|
||||
{t('actions.avatar.logout', {
|
||||
username: sessionData.user.name,
|
||||
})}
|
||||
{t('actions.avatar.preferences')}
|
||||
</Menu.Item>
|
||||
) : (
|
||||
<Menu.Item icon={<IconLogin size="1rem" />} component={Link} href="/auth/login">
|
||||
{t('actions.avatar.login')}
|
||||
<Menu.Item
|
||||
component={Link}
|
||||
href={defaultBoardHref}
|
||||
icon={<IconDashboard size="1rem" />}
|
||||
>
|
||||
{t('actions.avatar.defaultBoard')}
|
||||
</Menu.Item>
|
||||
)}
|
||||
</Menu.Dropdown>
|
||||
</Menu>
|
||||
</UnstyledButton>
|
||||
<Menu.Item component={Link} href="/manage" icon={<IconHomeShare size="1rem" />}>
|
||||
{t('actions.avatar.manage')}
|
||||
</Menu.Item>
|
||||
<Menu.Divider />
|
||||
</>
|
||||
)}
|
||||
{sessionData?.user ? (
|
||||
<Menu.Item
|
||||
icon={<IconLogout size="1rem" />}
|
||||
color="red"
|
||||
onClick={() =>
|
||||
signOut({
|
||||
redirect: false,
|
||||
}).then(() => window.location.reload())
|
||||
}
|
||||
>
|
||||
{t('actions.avatar.logout', {
|
||||
username: sessionData.user.name,
|
||||
})}
|
||||
</Menu.Item>
|
||||
) : (
|
||||
<Menu.Item icon={<IconLogin size="1rem" />} component={Link} href="/auth/login">
|
||||
{t('actions.avatar.login')}
|
||||
</Menu.Item>
|
||||
)}
|
||||
</Menu.Dropdown>
|
||||
</Menu>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -140,6 +140,11 @@
|
||||
background-size: 60px 60px;
|
||||
}
|
||||
|
||||
.mantine-Modal-title {
|
||||
font-size: 1.375rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.tiptap {
|
||||
hr {
|
||||
border-top-style: double;
|
||||
|
||||
Reference in New Issue
Block a user