fix(core): wrong fetch injected to snapshot downloader (#9460)

This commit is contained in:
liuyi
2024-12-31 16:51:19 +08:00
committed by GitHub
parent e8aabed3fa
commit 43adb85e7d
5 changed files with 44 additions and 6 deletions

View File

@@ -206,6 +206,7 @@ const Dialog = ({
loading={disabled} loading={disabled}
disabled={disabled} disabled={disabled}
onClick={handleImportToSelectedWorkspace} onClick={handleImportToSelectedWorkspace}
data-testid="import-template-to-workspace-btn"
> >
{selectedWorkspaceName && {selectedWorkspaceName &&
t['com.affine.import-template.dialog.createDocToWorkspace']({ t['com.affine.import-template.dialog.createDocToWorkspace']({

View File

@@ -16,11 +16,15 @@ export const Component = () => {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const { jumpToIndex } = useNavigateHelper(); const { jumpToIndex } = useNavigateHelper();
useEffect(() => { useEffect(() => {
globalDialogService.open('import-template', { const id = globalDialogService.open('import-template', {
templateName: searchParams.get('name') ?? '', templateName: searchParams.get('name') ?? '',
templateMode: (searchParams.get('mode') as DocMode) ?? 'page', templateMode: (searchParams.get('mode') as DocMode) ?? 'page',
snapshotUrl: searchParams.get('snapshotUrl') ?? '', snapshotUrl: searchParams.get('snapshotUrl') ?? '',
}); });
return () => {
globalDialogService.close(id);
};
}, [globalDialogService, jumpToIndex, searchParams]); }, [globalDialogService, jumpToIndex, searchParams]);
// no ui for this route, just open the dialog // no ui for this route, just open the dialog
return null; return null;

View File

@@ -1,6 +1,6 @@
import { type Framework } from '@toeverything/infra'; import { type Framework } from '@toeverything/infra';
import { FetchService } from '../cloud'; import { RawFetchProvider } from '../cloud';
import { WorkspacesService } from '../workspace'; import { WorkspacesService } from '../workspace';
import { ImportTemplateDialog } from './entities/dialog'; import { ImportTemplateDialog } from './entities/dialog';
import { TemplateDownloader } from './entities/downloader'; import { TemplateDownloader } from './entities/downloader';
@@ -16,6 +16,6 @@ export function configureImportTemplateModule(framework: Framework) {
.entity(ImportTemplateDialog) .entity(ImportTemplateDialog)
.service(TemplateDownloaderService) .service(TemplateDownloaderService)
.entity(TemplateDownloader, [TemplateDownloaderStore]) .entity(TemplateDownloader, [TemplateDownloaderStore])
.store(TemplateDownloaderStore, [FetchService]) .store(TemplateDownloaderStore, [RawFetchProvider])
.service(ImportTemplateService, [WorkspacesService]); .service(ImportTemplateService, [WorkspacesService]);
} }

View File

@@ -1,14 +1,14 @@
import { Store } from '@toeverything/infra'; import { Store } from '@toeverything/infra';
import type { FetchService } from '../../cloud'; import type { RawFetchProvider } from '../../cloud';
export class TemplateDownloaderStore extends Store { export class TemplateDownloaderStore extends Store {
constructor(private readonly fetchService: FetchService) { constructor(private readonly fetchProvider: RawFetchProvider) {
super(); super();
} }
async download(snapshotUrl: string) { async download(snapshotUrl: string) {
const response = await this.fetchService.fetch(snapshotUrl, { const response = await this.fetchProvider.fetch(snapshotUrl, {
priority: 'high', priority: 'high',
} as any); } as any);
const arrayBuffer = await response.arrayBuffer(); const arrayBuffer = await response.arrayBuffer();

View File

@@ -0,0 +1,33 @@
import { test } from '@affine-test/kit/playwright';
import { createRandomUser, loginUser } from '@affine-test/kit/utils/cloud';
import { waitForEditorLoad } from '@affine-test/kit/utils/page-logic';
test.beforeEach(async ({ page }) => {
const user = await createRandomUser();
await loginUser(page, user);
});
test('import from template should work', async ({ page }) => {
await page.goto('https://affine.pro/templates', { waitUntil: 'load' });
await page.click('.template-list > a:first-child');
const importLink = page.getByText('Use this template');
const href = await importLink.evaluate((el: HTMLElement) => {
const a = el.closest('a');
if (!a) {
throw new Error('Import link not found');
}
return a.href;
});
const url = new URL(href);
await page.goto(url.pathname + url.search);
const btn = page.getByTestId('import-template-to-workspace-btn');
await btn.isVisible();
btn.click();
await waitForEditorLoad(page);
});