mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 04:18:54 +00:00
feat: add toast for workspace deletion (#1825)
Co-authored-by: himself65 <himself65@outlook.com>
This commit is contained in:
@@ -26,7 +26,7 @@ export type WorkspaceSettingDetailProps = {
|
|||||||
workspace: AffineOfficialWorkspace;
|
workspace: AffineOfficialWorkspace;
|
||||||
currentTab: SettingPanel;
|
currentTab: SettingPanel;
|
||||||
onChangeTab: (tab: SettingPanel) => void;
|
onChangeTab: (tab: SettingPanel) => void;
|
||||||
onDeleteWorkspace: () => void;
|
onDeleteWorkspace: () => Promise<void>;
|
||||||
onTransferWorkspace: <
|
onTransferWorkspace: <
|
||||||
From extends WorkspaceFlavour,
|
From extends WorkspaceFlavour,
|
||||||
To extends WorkspaceFlavour
|
To extends WorkspaceFlavour
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-blocksuite-w
|
|||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
import type { AffineOfficialWorkspace } from '../../../../../../shared';
|
import type { AffineOfficialWorkspace } from '../../../../../../shared';
|
||||||
|
import { toast } from '../../../../../../utils';
|
||||||
import {
|
import {
|
||||||
StyledButtonContent,
|
StyledButtonContent,
|
||||||
StyledInputContent,
|
StyledInputContent,
|
||||||
@@ -18,7 +19,7 @@ interface WorkspaceDeleteProps {
|
|||||||
open: boolean;
|
open: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
workspace: AffineOfficialWorkspace;
|
workspace: AffineOfficialWorkspace;
|
||||||
onDeleteWorkspace: () => void;
|
onDeleteWorkspace: () => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WorkspaceDeleteModal = ({
|
export const WorkspaceDeleteModal = ({
|
||||||
@@ -35,8 +36,12 @@ export const WorkspaceDeleteModal = ({
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const handleDelete = useCallback(() => {
|
const handleDelete = useCallback(() => {
|
||||||
onDeleteWorkspace();
|
onDeleteWorkspace().then(() => {
|
||||||
}, [onDeleteWorkspace]);
|
toast(t('Successfully deleted'), {
|
||||||
|
portal: document.body,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, [onDeleteWorkspace, t]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal open={open} onClose={onClose}>
|
<Modal open={open} onClose={onClose}>
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
import type { ToastOptions } from '@affine/component';
|
import type { ToastOptions } from '@affine/component';
|
||||||
import { toast as basicToast } from '@affine/component';
|
import { toast as basicToast } from '@affine/component';
|
||||||
|
import { DebugLogger } from '@affine/debug';
|
||||||
|
|
||||||
|
const logger = new DebugLogger('toast');
|
||||||
|
|
||||||
export const toast = (message: string, options?: ToastOptions) => {
|
export const toast = (message: string, options?: ToastOptions) => {
|
||||||
const mainContainer = document.querySelector(
|
const mainContainer = document.querySelector(
|
||||||
'.main-container'
|
'.main-container'
|
||||||
) as HTMLElement;
|
) as HTMLElement;
|
||||||
|
logger.debug(`toast with message: "${message}"`, options);
|
||||||
return basicToast(message, {
|
return basicToast(message, {
|
||||||
portal: mainContainer || document.body,
|
portal: mainContainer || document.body,
|
||||||
...options,
|
...options,
|
||||||
|
|||||||
@@ -38,7 +38,10 @@ const createToastContainer = (portal?: HTMLElement) => {
|
|||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
`;
|
`;
|
||||||
const template = html`<div style="${styles}"></div>`;
|
const template = html`<div
|
||||||
|
style="${styles}"
|
||||||
|
data-testid="affine-toast-container"
|
||||||
|
></div>`;
|
||||||
const element = htmlToElement<HTMLDivElement>(template);
|
const element = htmlToElement<HTMLDivElement>(template);
|
||||||
portal.appendChild(element);
|
portal.appendChild(element);
|
||||||
return element;
|
return element;
|
||||||
@@ -80,7 +83,10 @@ export const toast = (
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const template = html`<div style="${styles}"></div>`;
|
const template = html`<div
|
||||||
|
style="${styles}"
|
||||||
|
data-testid="affine-toast"
|
||||||
|
></div>`;
|
||||||
const element = htmlToElement<HTMLDivElement>(template);
|
const element = htmlToElement<HTMLDivElement>(template);
|
||||||
// message is not trusted
|
// message is not trusted
|
||||||
element.textContent = message;
|
element.textContent = message;
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ type SettingProps<Flavour extends keyof WorkspaceRegistry> =
|
|||||||
UIBaseProps<Flavour> & {
|
UIBaseProps<Flavour> & {
|
||||||
currentTab: SettingPanel;
|
currentTab: SettingPanel;
|
||||||
onChangeTab: (tab: SettingPanel) => void;
|
onChangeTab: (tab: SettingPanel) => void;
|
||||||
onDeleteWorkspace: () => void;
|
onDeleteWorkspace: () => Promise<void>;
|
||||||
onTransformWorkspace: <
|
onTransformWorkspace: <
|
||||||
From extends keyof WorkspaceRegistry,
|
From extends keyof WorkspaceRegistry,
|
||||||
To extends keyof WorkspaceRegistry
|
To extends keyof WorkspaceRegistry
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ test.describe('Local first delete workspace', () => {
|
|||||||
.getByTestId('delete-workspace-input')
|
.getByTestId('delete-workspace-input')
|
||||||
.type(currentWorkspaceName as string);
|
.type(currentWorkspaceName as string);
|
||||||
await page.getByTestId('delete-workspace-confirm-button').click();
|
await page.getByTestId('delete-workspace-confirm-button').click();
|
||||||
|
await page.getByTestId('affine-toast').waitFor({ state: 'attached' });
|
||||||
expect(await page.getByTestId('workspace-card').count()).toBe(0);
|
expect(await page.getByTestId('workspace-card').count()).toBe(0);
|
||||||
await page.mouse.click(1, 1);
|
await page.mouse.click(1, 1);
|
||||||
expect(await page.getByTestId('workspace-card').count()).toBe(0);
|
expect(await page.getByTestId('workspace-card').count()).toBe(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user