Use Notification instead of Popover for edit mode

This commit is contained in:
ajnart
2023-01-06 01:08:07 +09:00
parent 50bcd29271
commit 52dcdf7ba3

View File

@@ -1,19 +1,20 @@
import axios from 'axios'; import axios from 'axios';
import Consola from 'consola'; import Consola from 'consola';
import { ActionIcon, Button, Group, Popover, Text } from '@mantine/core'; import { ActionIcon, Button, Group, Title, Tooltip } from '@mantine/core';
import { IconEditCircle, IconEditCircleOff, IconX } from '@tabler/icons'; import { IconEditCircle, IconEditCircleOff } from '@tabler/icons';
import { getCookie } from 'cookies-next'; import { getCookie } from 'cookies-next';
import { Trans, useTranslation } from 'next-i18next'; import { Trans, useTranslation } from 'next-i18next';
import { useEffect, useState } from 'react'; import { useEffect } from 'react';
import { cleanNotifications, showNotification } from '@mantine/notifications';
import { useConfigContext } from '../../../../../config/provider'; import { useConfigContext } from '../../../../../config/provider';
import { useScreenSmallerThan } from '../../../../../hooks/useScreenSmallerThan'; import { useScreenSmallerThan } from '../../../../../hooks/useScreenSmallerThan';
import { useEditModeStore } from '../../../../Dashboard/Views/useEditModeStore'; import { useEditModeStore } from '../../../../Dashboard/Views/useEditModeStore';
import { AddElementAction } from '../AddElementAction/AddElementAction'; import { AddElementAction } from '../AddElementAction/AddElementAction';
import { useColorTheme } from '../../../../../tools/color';
export const ToggleEditModeAction = () => { export const ToggleEditModeAction = () => {
const { enabled, toggleEditMode } = useEditModeStore(); const { enabled, toggleEditMode } = useEditModeStore();
const [popoverManuallyHidden, setPopoverManuallyHidden] = useState<boolean>();
const { t } = useTranslation('layout/header/actions/toggle-edit-mode'); const { t } = useTranslation('layout/header/actions/toggle-edit-mode');
@@ -29,21 +30,45 @@ export const ToggleEditModeAction = () => {
const toggleButtonClicked = () => { const toggleButtonClicked = () => {
toggleEditMode(); toggleEditMode();
if (!enabled) {
showNotification({
styles: (theme) => ({
root: {
backgroundColor: theme.colors.orange[7],
borderColor: theme.colors.orange[7],
setPopoverManuallyHidden(false); '&::before': { backgroundColor: theme.white },
},
title: { color: theme.white },
description: { color: theme.white },
closeButton: {
color: theme.white,
'&:hover': { backgroundColor: theme.colors.orange[7] },
},
}),
radius: 'md',
autoClose: false,
title: <Title order={4}>{t('popover.title')}</Title>,
message: <Trans i18nKey="layout/header/actions/toggle-edit-mode:popover.text" />,
});
} else {
cleanNotifications();
}
}; };
const { primaryColor, secondaryColor } = useColorTheme();
const ToggleButtonDesktop = () => ( const ToggleButtonDesktop = () => (
<Button <Tooltip label={enabled ? t('button.enabled') : t('button.disabled')}>
onClick={() => toggleButtonClicked()} <Button
leftIcon={enabled ? <IconEditCircleOff /> : <IconEditCircle />} onClick={() => toggleButtonClicked()}
variant="default" variant="white"
radius="md" radius="md"
color="blue" color={secondaryColor}
style={{ height: 43 }} style={{ height: 43 }}
> >
<Text>{enabled ? t('button.enabled') : t('button.disabled')}</Text> {enabled ? <IconEditCircleOff /> : <IconEditCircle />}
</Button> </Button>
</Tooltip>
); );
const ToggleActionIconMobile = () => ( const ToggleActionIconMobile = () => (
@@ -59,45 +84,24 @@ export const ToggleEditModeAction = () => {
); );
return ( return (
<Popover <>
opened={enabled && !smallerThanSm && !popoverManuallyHidden} {smallerThanSm ? (
width="target" enabled ? (
transition="scale" <Group style={{ flexWrap: 'nowrap' }}>
zIndex={199} <AddElementAction type="action-icon" />
>
<Popover.Target>
{smallerThanSm ? (
enabled ? (
<Group style={{ flexWrap: 'nowrap' }}>
<AddElementAction type="action-icon" />
<ToggleActionIconMobile />
</Group>
) : (
<ToggleActionIconMobile /> <ToggleActionIconMobile />
) </Group>
) : enabled ? (
<Button.Group>
<ToggleButtonDesktop />
{enabled && <AddElementAction type="button" />}
</Button.Group>
) : ( ) : (
<ToggleActionIconMobile />
)
) : enabled ? (
<Button.Group>
<ToggleButtonDesktop /> <ToggleButtonDesktop />
)} {enabled && <AddElementAction type="button" />}
</Popover.Target> </Button.Group>
) : (
<Popover.Dropdown p={4} px={6} mt={-5}> <ToggleButtonDesktop />
<div style={{ position: 'absolute', top: 2, right: 2 }}> )}
<ActionIcon onClick={() => setPopoverManuallyHidden(true)}> </>
<IconX size={18} />
</ActionIcon>
</div>
<Text align="center" size="sm">
<Text weight="bold">{t('popover.title')}</Text>
<Text>
<Trans i18nKey="layout/header/actions/toggle-edit-mode:popover.text" />
</Text>
</Text>
</Popover.Dropdown>
</Popover>
); );
}; };