Skip to content

Commit

Permalink
dd
Browse files Browse the repository at this point in the history
  • Loading branch information
EYHN committed Jan 10, 2024
1 parent 3facf7b commit 0b8dd56
Show file tree
Hide file tree
Showing 24 changed files with 93 additions and 77 deletions.
1 change: 0 additions & 1 deletion packages/common/workspace/src/modules/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * from './collection';
export * from './context';
export * from './engine';
export * from './factory';
Expand Down
18 changes: 0 additions & 18 deletions packages/common/workspace/src/utils/yjs-utils.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
*/
import 'fake-indexeddb/auto';

import type { CollectionService } from '@affine/core/modules/collection';
import type { Collection } from '@affine/env/filter';
import type { CollectionService } from '@affine/workspace';
import { renderHook } from '@testing-library/react';
import { LiveData } from '@toeverything/infra';
import { BehaviorSubject } from 'rxjs';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { CollectionService } from '@affine/core/modules/collection';
import type { Collection, Filter, VariableMap } from '@affine/env/filter';
import type { CollectionService } from '@affine/workspace';
import type { PageMeta } from '@blocksuite/store';
import { useLiveData } from '@toeverything/infra/livedata';
import { useAtom, useAtomValue } from 'jotai';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Button, Tooltip } from '@affine/component';
import type { CollectionService } from '@affine/core/modules/collection';
import type { DeleteCollectionInfo, PropertiesMeta } from '@affine/env/filter';
import type { GetPageInfoById } from '@affine/env/page-info';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { CollectionService } from '@affine/workspace';
import { ViewLayersIcon } from '@blocksuite/icons';
import clsx from 'clsx';
import { useState } from 'react';
Expand Down
2 changes: 1 addition & 1 deletion packages/frontend/core/src/components/pure/cmdk/data.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import {
useBlockSuitePageMeta,
usePageMetaHelper,
} from '@affine/core/hooks/use-block-suite-page-meta';
import { CollectionService } from '@affine/core/modules/collection';
import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { Workspace } from '@affine/workspace';
import { CollectionService } from '@affine/workspace';
import { EdgelessIcon, PageIcon, ViewLayersIcon } from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import { getCurrentStore } from '@toeverything/infra/atom';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import {
stopPropagation,
useCollectionManager,
} from '@affine/core/components/page-list';
import { CollectionService } from '@affine/core/modules/collection';
import type { Collection, DeleteCollectionInfo } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CollectionService } from '@affine/workspace';
import { MoreHorizontalIcon, ViewLayersIcon } from '@blocksuite/icons';
import type { PageMeta, Workspace } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ import {
} from '@affine/component/app-sidebar';
import { Menu } from '@affine/component/ui/menu';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { CollectionService } from '@affine/core/modules/collection';
import { apis, events } from '@affine/electron-api';
import { WorkspaceSubPath } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CollectionService, type Workspace } from '@affine/workspace';
import type { Workspace } from '@affine/workspace';
import { FolderIcon, SettingsIcon } from '@blocksuite/icons';
import { type Page } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
usePageMetaHelper,
} from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { CollectionService } from '@affine/workspace';
import { CollectionService } from '@affine/core/modules/collection';
import { useAtomValue, useSetAtom } from 'jotai';
import { useCallback } from 'react';
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
Expand Down
1 change: 1 addition & 0 deletions packages/frontend/core/src/modules/collection/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './service';
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@ import type {
DeleteCollectionInfo,
DeletedCollection,
} from '@affine/env/filter';
import { declareWorkspaceService, Workspace } from '@affine/workspace';
import { declareFactory } from '@toeverything/infra/di';
import { LiveData } from '@toeverything/infra/livedata';
import { Observable } from 'rxjs';
import { Array as YArray } from 'yjs';

import { declareWorkspaceService } from '../../services-scope';
import { updateFirstOfYArray } from '../../utils/yjs-utils';
import { Workspace } from '../workspace';

const SETTING_KEY = 'setting';

const COLLECTIONS_KEY = 'collections';
Expand Down Expand Up @@ -159,3 +156,20 @@ export const collectionServiceDecl = declareWorkspaceService(
),
}
);

const updateFirstOfYArray = <T>(
array: YArray<T>,
p: (value: T) => boolean,
update: (value: T) => T
) => {
array.doc?.transact(() => {
for (let i = 0; i < array.length; i++) {
const ele = array.get(i);
if (p(ele)) {
array.delete(i);
array.insert(i, [update(ele)]);
return;
}
}
});
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CollectionService } from '@affine/core/modules/collection';
import type { Collection, Filter } from '@affine/env/filter';
import { CollectionService } from '@affine/workspace';
import { useService } from '@toeverything/infra/di';
import { useEnsureLiveData } from '@toeverything/infra/livedata';
import { useCallback } from 'react';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import {
VirtualizedPageList,
} from '@affine/core/components/page-list';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { CollectionService } from '@affine/core/modules/collection';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CollectionService } from '@affine/workspace';
import {
CloseIcon,
DeleteIcon,
Expand Down
2 changes: 1 addition & 1 deletion packages/frontend/core/src/pages/workspace/collection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import {
} from '@affine/core/components/page-list';
import { WindowsAppControls } from '@affine/core/components/pure/header/windows-app-controls';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { CollectionService } from '@affine/core/modules/collection';
import type { Collection } from '@affine/env/filter';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CollectionService } from '@affine/workspace';
import {
CloseIcon,
FilterIcon,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,9 @@ import { PageDetailSkeleton } from '@affine/component/page-detail-skeleton';
import { ResizePanel } from '@affine/component/resize-panel';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useWorkspaceStatus } from '@affine/core/hooks/use-workspace-status';
import { CollectionService } from '@affine/core/modules/collection';
import { WorkspaceSubPath } from '@affine/env/workspace';
import {
CollectionService,
globalBlockSuiteSchema,
SyncEngineStep,
} from '@affine/workspace';
import { globalBlockSuiteSchema, SyncEngineStep } from '@affine/workspace';
import type { AffineEditorContainer } from '@blocksuite/presets';
import type { Page, Workspace } from '@blocksuite/store';
import { appSettingAtom } from '@toeverything/infra';
Expand Down
2 changes: 1 addition & 1 deletion packages/frontend/core/src/pages/workspace/pages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
filterPageByRules,
useCollectionManager,
} from '@affine/core/components/page-list';
import { CollectionService } from '@affine/workspace';
import { CollectionService } from '@affine/core/modules/collection';
import type { PageMeta } from '@blocksuite/store';
import { useAtomValue } from 'jotai';
import { useMemo } from 'react';
Expand Down
2 changes: 2 additions & 0 deletions packages/frontend/core/src/web.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { workspaceSystemDecl } from '@affine/workspace';
import { workspaceImplDecl } from '@affine/workspace-impl';
import { infraServicesDecl, ServiceCollection } from '@toeverything/infra';

import { collectionServiceDecl } from './modules/collection';
import { localStorageGlobalCacheDecl } from './modules/infra-web/storage';
import { currentWorkspaceDecl } from './modules/workspace/current-workspace';

Expand All @@ -15,6 +16,7 @@ export function createWebServices() {

services.add(localStorageGlobalCacheDecl);
services.add(currentWorkspaceDecl);
services.add(collectionServiceDecl);

services.printDebugInfo();

Expand Down
51 changes: 39 additions & 12 deletions tests/storybook/.storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,29 @@ import MockSessionContext, {
import { ThemeProvider, useTheme } from 'next-themes';
import { useDarkMode } from 'storybook-dark-mode';
import { AffineContext } from '@affine/component/context';
import { workspaceManager } from '@affine/workspace-impl';
import useSWR from 'swr';
import type { Decorator } from '@storybook/react';
import { createStore } from 'jotai/vanilla';
import { _setCurrentStore } from '@toeverything/infra/atom';
import { setupGlobal, type Environment } from '@affine/env/global';

import type { Preview } from '@storybook/react';
import { useLayoutEffect, useRef } from 'react';
import { setup } from '@affine/core/bootstrap/setup';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { currentWorkspaceAtom } from '@affine/core/modules/workspace';
import {
ServiceCollection,
ServiceProviderContext,
} from '@toeverything/infra/di';
import { infraServicesDecl } from '@toeverything/infra';
import { WorkspaceManager, workspaceSystemDecl } from '@affine/workspace';
import { workspaceImplDecl } from '@affine/workspace-impl';
import {
CurrentWorkspaceService,
currentWorkspaceDecl,
} from '@affine/core/modules/workspace';
import { collectionServiceDecl } from '@affine/core/modules/collection';
import { localStorageGlobalCacheDecl } from '@affine/core/modules/infra-web/storage';
import { createStore } from 'jotai';

setupGlobal();
export const parameters = {
Expand Down Expand Up @@ -112,29 +123,45 @@ window.localStorage.setItem(
'{"onBoarding":false, "dismissWorkspaceGuideModal":true}'
);

const services = new ServiceCollection();
services.add(infraServicesDecl);

services.add(workspaceSystemDecl);
services.add(workspaceImplDecl);

services.add(localStorageGlobalCacheDecl);
services.add(currentWorkspaceDecl);
services.add(collectionServiceDecl);

const provider = services.provider();

const store = createStore();
_setCurrentStore(store);
setup();
workspaceManager
provider
.resolve(WorkspaceManager)
.createWorkspace(WorkspaceFlavour.LOCAL, async w => {
w.meta.setName('test-workspace');
w.meta.writeVersion(w);
})
.then(id => {
store.set(
currentWorkspaceAtom,
const currentWorkspace = provider.resolve(CurrentWorkspaceService);
const workspaceManager = provider.resolve(WorkspaceManager);
currentWorkspace.openWorkspace(
workspaceManager.use({ flavour: WorkspaceFlavour.LOCAL, id }).workspace
);
});

const withContextDecorator: Decorator = (Story, context) => {
return (
<ThemeProvider>
<AffineContext store={store}>
<ThemeChange />
<Story {...context} />
</AffineContext>
</ThemeProvider>
<ServiceProviderContext.Provider value={provider}>
<ThemeProvider>
<AffineContext store={store}>
<ThemeChange />
<Story {...context} />
</AffineContext>
</ThemeProvider>
</ServiceProviderContext.Provider>
);
};

Expand Down
1 change: 1 addition & 0 deletions tests/storybook/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"dependencies": {
"@affine/component": "workspace:*",
"@affine/i18n": "workspace:*",
"@affine/workspace": "workspace:*",
"@dnd-kit/sortable": "^8.0.0",
"@storybook/jest": "^0.2.3",
"@storybook/testing-library": "^0.2.2",
Expand Down
8 changes: 5 additions & 3 deletions tests/storybook/src/stories/image-preview-modal.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { BlockSuiteEditor } from '@affine/component/block-suite-editor';
import { ImagePreviewModal } from '@affine/core/components/image-preview';
import { waitForCurrentWorkspaceAtom } from '@affine/core/modules/workspace';
import { CurrentWorkspaceService } from '@affine/core/modules/workspace';
import type { Page } from '@blocksuite/store';
import type { Meta } from '@storybook/react';
import { useEnsureLiveData, useService } from '@toeverything/infra';
import { initEmptyPage } from '@toeverything/infra/blocksuite';
import { useAtomValue } from 'jotai';
import { useEffect, useState } from 'react';
import { createPortal } from 'react-dom';

Expand All @@ -14,7 +14,9 @@ export default {
} satisfies Meta;

export const Default = () => {
const workspace = useAtomValue(waitForCurrentWorkspaceAtom);
const workspace = useEnsureLiveData(
useService(CurrentWorkspaceService).currentWorkspace
);

const [page, setPage] = useState<Page | null>(null);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,11 @@ import {
} from '@affine/core/commands';
import { CMDKQuickSearchModal } from '@affine/core/components/pure/cmdk';
import { HighlightLabel } from '@affine/core/components/pure/cmdk/highlight';
import { useWorkspace } from '@affine/core/hooks/use-workspace';
import { currentWorkspaceAtom } from '@affine/core/modules/workspace';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { Page } from '@blocksuite/store';
import type { Meta, StoryFn } from '@storybook/react';
import { useStore } from 'jotai';
import { useEffect, useLayoutEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import { withRouter } from 'storybook-addon-react-router-v6';

export default {
Expand Down Expand Up @@ -79,20 +76,7 @@ function useRegisterCommands() {
}, [store, t]);
}

function usePrepareWorkspace() {
const workspaceId = 'test-workspace';
const store = useStore();
const workspace = useWorkspace({
id: workspaceId,
flavour: WorkspaceFlavour.LOCAL,
});
useLayoutEffect(() => {
store.set(currentWorkspaceAtom, workspace);
}, [store, workspace]);
}

export const CMDKStoryWithCommands: StoryFn = () => {
usePrepareWorkspace();
useRegisterCommands();

return <CMDKQuickSearchModal open />;
Expand Down
Loading

0 comments on commit 0b8dd56

Please sign in to comment.