chore: strict eslint check (#1084)

This commit is contained in:
Himself65
2023-02-17 01:33:32 -06:00
committed by GitHub
parent 191c36c6fb
commit 5e6366ba44
213 changed files with 1080 additions and 1886 deletions

3
.eslintignore Normal file
View File

@@ -0,0 +1,3 @@
node_modules
dist
.next

64
.eslintrc.js Normal file
View File

@@ -0,0 +1,64 @@
module.exports = {
root: true,
settings: {
react: {
version: '18',
},
next: {
rootDir: 'apps/web',
},
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
globalReturn: false,
impliedStrict: true,
jsx: true,
},
ecmaVersion: 'latest',
sourceType: 'module',
},
plugins: [
'react',
'@typescript-eslint',
'simple-import-sort',
'import',
'unused-imports',
],
rules: {
'no-undef': 'off',
'no-empty': 'off',
'no-func-assign': 'off',
'no-cond-assign': 'off',
'react/react-in-jsx-scope': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
'@typescript-eslint/ban-ts-comment': 0,
'@typescript-eslint/no-restricted-imports': [
'error',
{
patterns: [
{
group: ['**/dist'],
message: "Don't import from dist",
allowTypeImports: false,
},
{
group: ['**/src'],
message: "Don't import from src",
allowTypeImports: false,
},
],
},
],
},
};

View File

@@ -36,31 +36,9 @@
"@types/node": "^18.11.17", "@types/node": "^18.11.17",
"@types/react": "^18.0.26", "@types/react": "^18.0.26",
"@types/react-dom": "^18.0.9", "@types/react-dom": "^18.0.9",
"@typescript-eslint/eslint-plugin": "5.47.0",
"@typescript-eslint/parser": "5.47.0",
"concurrently": "^7.6.0", "concurrently": "^7.6.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"esbuild": "^0.16.10", "esbuild": "^0.16.10",
"eslint": "8.30.0",
"eslint-config-prettier": "8.5.0",
"eslint-config-standard": "^17.0.0",
"eslint-config-standard-with-typescript": "24.0.0",
"eslint-import-resolver-alias": "1.1.2",
"eslint-import-resolver-typescript": "3.5.2",
"eslint-plugin-autofix": "1.1.0",
"eslint-plugin-html": "7.1.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-n": "^15.6.0",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "4.2.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-react": "7.31.11",
"eslint-plugin-react-hooks": "4.6.0",
"eslint-plugin-security": "1.5.0",
"eslint-plugin-security-node": "1.1.1",
"eslint-plugin-typescript-sort-keys": "2.1.0",
"eslint-plugin-unicorn": "45.0.2",
"eslint-plugin-unused-imports": "2.0.0",
"prettier": "2.8.1", "prettier": "2.8.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"typescript": "^4.9.4", "typescript": "^4.9.4",

View File

@@ -1,12 +1,14 @@
import { Modal, ModalWrapper } from '@affine/component'; import { Modal, ModalWrapper } from '@affine/component';
import { IconButton } from '@affine/component'; import { IconButton } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useCallback, useState } from 'react';
import router from 'next/router';
import { toast } from '@affine/component'; import { toast } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { CloseIcon } from '@blocksuite/icons'; import { CloseIcon } from '@blocksuite/icons';
import router from 'next/router';
import { useCallback, useState } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { Header, Content, ContentTitle, StyleTips, StyleButton } from './style';
import { Content, ContentTitle, Header, StyleButton, StyleTips } from './style';
interface EnableWorkspaceModalProps { interface EnableWorkspaceModalProps {
open: boolean; open: boolean;

View File

@@ -1,8 +1,8 @@
import { import {
JoinedWorkspaceIcon as DefaultJoinedWorkspaceIcon,
LocalWorkspaceIcon as DefaultLocalWorkspaceIcon,
CloudWorkspaceIcon as DefaultCloudWorkspaceIcon, CloudWorkspaceIcon as DefaultCloudWorkspaceIcon,
JoinedWorkspaceIcon as DefaultJoinedWorkspaceIcon,
LocalDataIcon as DefaultLocalDataIcon, LocalDataIcon as DefaultLocalDataIcon,
LocalWorkspaceIcon as DefaultLocalWorkspaceIcon,
PublishIcon as DefaultPublishIcon, PublishIcon as DefaultPublishIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';

4
apps/web/.eslintrc Normal file
View File

@@ -0,0 +1,4 @@
{
"root": false,
"extends": "next/core-web-vitals"
}

View File

@@ -47,10 +47,7 @@
"@types/react-dom": "18.0.6", "@types/react-dom": "18.0.6",
"@types/wicg-file-system-access": "^2020.9.5", "@types/wicg-file-system-access": "^2020.9.5",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"eslint": "8.22.0",
"eslint-config-next": "12.3.1", "eslint-config-next": "12.3.1",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"typescript": "^4.9.5" "typescript": "^4.9.5"
}, },

View File

@@ -1,5 +1,7 @@
import { test, expect } from '@playwright/test'; import { expect, test } from '@playwright/test';
import { printer } from './../printer'; import { printer } from './../printer';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const chalk = require('chalk'); const chalk = require('chalk');
test.describe('printer', () => { test.describe('printer', () => {
test('test debug', () => { test('test debug', () => {

View File

@@ -1,6 +1,7 @@
// @ts-check // @ts-check
// import { execSync } from 'child_process' // import { execSync } from 'child_process'
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { execSync } = require('child_process'); const { execSync } = require('child_process');
const hasGit = () => { const hasGit = () => {

View File

@@ -1,3 +1,4 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const chalk = require('chalk'); const chalk = require('chalk');
const printer = { const printer = {
debug: msg => { debug: msg => {

View File

@@ -1,7 +1,8 @@
import { NotFoundTitle, PageContainer } from './styles';
import { useTranslation } from '@affine/i18n';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { NotFoundTitle, PageContainer } from './styles';
export const NotfoundPage = () => { export const NotfoundPage = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const router = useRouter(); const router = useRouter();

View File

@@ -1,29 +1,31 @@
import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { import { useTranslation } from '@affine/i18n';
LogoIcon,
DocIcon, import bg from '@/components/contact-modal/bg.png';
TwitterIcon,
GithubIcon,
DiscordIcon,
TelegramIcon,
RedditIcon,
LinkIcon,
} from './Icons';
import logo from './affine-text-logo.png'; import logo from './affine-text-logo.png';
import {
DiscordIcon,
DocIcon,
GithubIcon,
LinkIcon,
LogoIcon,
RedditIcon,
TelegramIcon,
TwitterIcon,
} from './Icons';
import { import {
StyledBigLink, StyledBigLink,
StyledSmallLink,
StyledSubTitle,
StyledLeftContainer,
StyledRightContainer,
StyledContent, StyledContent,
StyledLeftContainer,
StyledLogo, StyledLogo,
StyledModalFooter,
StyledModalHeader, StyledModalHeader,
StyledModalHeaderLeft, StyledModalHeaderLeft,
StyledModalFooter, StyledRightContainer,
StyledSmallLink,
StyledSubTitle,
} from './style'; } from './style';
import bg from '@/components/contact-modal/bg.png';
import { useTranslation } from '@affine/i18n';
const linkList = [ const linkList = [
{ {
icon: <GithubIcon />, icon: <GithubIcon />,

View File

@@ -1,13 +1,14 @@
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { useRef, useState } from 'react';
import { Input } from '@affine/component'; import { Input } from '@affine/component';
import { KeyboardEvent } from 'react';
import { useTranslation } from '@affine/i18n';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { useRouter } from 'next/router';
import { toast } from '@affine/component'; import { toast } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useRouter } from 'next/router';
import { useRef, useState } from 'react';
import { KeyboardEvent } from 'react';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
interface ModalProps { interface ModalProps {
open: boolean; open: boolean;

View File

@@ -1,5 +1,5 @@
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Input } from '@affine/component'; import { Input } from '@affine/component';
import { useState } from 'react'; import { useState } from 'react';

View File

@@ -1,26 +1,28 @@
import { useState, useEffect } from 'react';
import {
StyledEdgelessToolbar,
StyledToolbarWrapper,
StyledToolbarItem,
} from './style';
import {
SelectIcon,
TextIcon,
ShapeIcon,
PenIcon,
StickerIcon,
ConnectorIcon,
UndoIcon,
RedoIcon,
} from './Icons';
import { MuiSlide } from '@affine/component'; import { MuiSlide } from '@affine/component';
import { Tooltip } from '@affine/component'; import { Tooltip } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useEffect, useState } from 'react';
import useCurrentPageMeta from '@/hooks/use-current-page-meta'; import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import useHistoryUpdated from '@/hooks/use-history-update'; import useHistoryUpdated from '@/hooks/use-history-update';
import { useTranslation } from '@affine/i18n';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import {
ConnectorIcon,
PenIcon,
RedoIcon,
SelectIcon,
ShapeIcon,
StickerIcon,
TextIcon,
UndoIcon,
} from './Icons';
import {
StyledEdgelessToolbar,
StyledToolbarItem,
StyledToolbarWrapper,
} from './style';
const useToolbarList1 = () => { const useToolbarList1 = () => {
const { t } = useTranslation(); const { t } = useTranslation();
return [ return [

View File

@@ -1,4 +1,4 @@
import { styled, displayFlex } from '@affine/component'; import { displayFlex, styled } from '@affine/component';
export const StyledEdgelessToolbar = styled.div(({ theme }) => ({ export const StyledEdgelessToolbar = styled.div(({ theme }) => ({
height: '320px', height: '320px',

View File

@@ -1,21 +1,23 @@
import React, { useState, useEffect, cloneElement } from 'react'; import { useTranslation } from '@affine/i18n';
import { import React, { cloneElement, useEffect, useState } from 'react';
StyledAnimateRadioContainer,
StyledMiddleLine,
StyledRadioItem,
StyledLabel,
StyledIcon,
} from './style';
import type {
RadioItemStatus,
AnimateRadioProps,
AnimateRadioItemProps,
} from './type';
import { useTheme } from '@/providers/ThemeProvider';
import { EdgelessIcon, PaperIcon } from './Icons';
import useCurrentPageMeta from '@/hooks/use-current-page-meta'; import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import { useTranslation } from '@affine/i18n'; import { useTheme } from '@/providers/ThemeProvider';
import { EdgelessIcon, PaperIcon } from './Icons';
import {
StyledAnimateRadioContainer,
StyledIcon,
StyledLabel,
StyledMiddleLine,
StyledRadioItem,
} from './style';
import type {
AnimateRadioItemProps,
AnimateRadioProps,
RadioItemStatus,
} from './type';
const PaperItem = ({ active }: { active?: boolean }) => { const PaperItem = ({ active }: { active?: boolean }) => {
const { const {
theme: { theme: {

View File

@@ -2,6 +2,7 @@ import { displayFlex, keyframes, styled } from '@affine/component';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
import spring, { toString } from 'css-spring'; import spring, { toString } from 'css-spring';
import type { ItemStatus } from './type'; import type { ItemStatus } from './type';
const ANIMATE_DURATION = 500; const ANIMATE_DURATION = 500;

View File

@@ -1,8 +1,9 @@
import { useEffect, useRef } from 'react';
import type { Page, Workspace } from '@blocksuite/store';
import '@blocksuite/blocks'; import '@blocksuite/blocks';
import { EditorContainer } from '@blocksuite/editor';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { EditorContainer } from '@blocksuite/editor';
import type { Page, Workspace } from '@blocksuite/store';
import { useEffect, useRef } from 'react';
const StyledEditorContainer = styled('div')(() => { const StyledEditorContainer = styled('div')(() => {
return { return {

View File

@@ -3,9 +3,11 @@ import { useTranslation } from '@affine/i18n';
import { CloseIcon } from '@blocksuite/icons'; import { CloseIcon } from '@blocksuite/icons';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { Content, ContentTitle, Header, StyleButton, StyleTips } from './style';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { Content, ContentTitle, Header, StyleButton, StyleTips } from './style';
interface EnableWorkspaceModalProps { interface EnableWorkspaceModalProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,7 +1,7 @@
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { FC, useRef, ChangeEvent, ReactElement } from 'react';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { ChangeEvent, FC, ReactElement, useRef } from 'react';
interface Props { interface Props {
uploadType?: string; uploadType?: string;
children?: ReactElement; children?: ReactElement;

View File

@@ -1,17 +1,19 @@
import { Content } from '@affine/component';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import EditorModeSwitch from '@/components/editor-mode-switch';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import usePropsUpdated from '@/hooks/use-props-updated';
import { useGlobalState } from '@/store/app';
import Header from './Header';
import QuickSearchButton from './QuickSearchButton';
import { import {
StyledSearchArrowWrapper, StyledSearchArrowWrapper,
StyledSwitchWrapper, StyledSwitchWrapper,
StyledTitle, StyledTitle,
StyledTitleWrapper, StyledTitleWrapper,
} from './styles'; } from './styles';
import { Content } from '@affine/component';
import EditorModeSwitch from '@/components/editor-mode-switch';
import QuickSearchButton from './QuickSearchButton';
import Header from './Header';
import usePropsUpdated from '@/hooks/use-props-updated';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { useGlobalState } from '@/store/app';
export const EditorHeader = () => { export const EditorHeader = () => {
const [title, setTitle] = useState(''); const [title, setTitle] = useState('');

View File

@@ -1,17 +1,18 @@
import { CloseIcon } from '@blocksuite/icons';
import React, { PropsWithChildren, ReactNode, useState } from 'react'; import React, { PropsWithChildren, ReactNode, useState } from 'react';
import EditorOptionMenu from './header-right-items/EditorOptionMenu';
import SyncUser from './header-right-items/SyncUser';
import ThemeModeSwitch from './header-right-items/theme-mode-switch';
import TrashButtonGroup from './header-right-items/TrashButtonGroup';
import { import {
StyledHeader,
StyledHeaderRightSide,
StyledHeaderContainer,
StyledBrowserWarning, StyledBrowserWarning,
StyledCloseButton, StyledCloseButton,
StyledHeader,
StyledHeaderContainer,
StyledHeaderRightSide,
} from './styles'; } from './styles';
import { CloseIcon } from '@blocksuite/icons'; import { shouldShowWarning, useWarningMessage } from './utils';
import { useWarningMessage, shouldShowWarning } from './utils';
import EditorOptionMenu from './header-right-items/EditorOptionMenu';
import TrashButtonGroup from './header-right-items/TrashButtonGroup';
import ThemeModeSwitch from './header-right-items/theme-mode-switch';
import SyncUser from './header-right-items/SyncUser';
const BrowserWarning = ({ const BrowserWarning = ({
show, show,

View File

@@ -1,4 +1,5 @@
import { PropsWithChildren, ReactNode } from 'react'; import { PropsWithChildren, ReactNode } from 'react';
import Header from './Header'; import Header from './Header';
import QuickSearchButton from './QuickSearchButton'; import QuickSearchButton from './QuickSearchButton';
import { StyledPageListTittleWrapper } from './styles'; import { StyledPageListTittleWrapper } from './styles';

View File

@@ -1,8 +1,9 @@
import React from 'react';
import { IconButton, IconButtonProps } from '@affine/component'; import { IconButton, IconButtonProps } from '@affine/component';
import { ArrowDownIcon } from '@blocksuite/icons';
import { useModal } from '@/store/globalModal';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { ArrowDownIcon } from '@blocksuite/icons';
import React from 'react';
import { useModal } from '@/store/globalModal';
const StyledIconButtonWithAnimate = styled(IconButton)(({ theme }) => { const StyledIconButtonWithAnimate = styled(IconButton)(({ theme }) => {
return { return {

View File

@@ -1,5 +1,7 @@
import { Menu, MenuItem } from '@affine/component'; import { Menu, MenuItem } from '@affine/component';
import { IconButton } from '@affine/component'; import { IconButton } from '@affine/component';
import { toast } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { import {
EdgelessIcon, EdgelessIcon,
ExportIcon, ExportIcon,
@@ -11,11 +13,10 @@ import {
PaperIcon, PaperIcon,
TrashIcon, TrashIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import { useConfirm } from '@/providers/ConfirmProvider'; import { useConfirm } from '@/providers/ConfirmProvider';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { toast } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
const PopoverContent = () => { const PopoverContent = () => {
const editor = useGlobalState(store => store.editor); const editor = useGlobalState(store => store.editor);

View File

@@ -1,10 +1,11 @@
import { LocalWorkspaceIcon, CloudWorkspaceIcon } from '@blocksuite/icons'; import { displayFlex, IconButton, styled, Tooltip } from '@affine/component';
import { displayFlex, styled, Tooltip, IconButton } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useModal } from '@/store/globalModal';
import { useCallback, useEffect, useState } from 'react';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { CloudWorkspaceIcon, LocalWorkspaceIcon } from '@blocksuite/icons';
import { useCallback, useEffect, useState } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { useModal } from '@/store/globalModal';
const NoNetWorkIcon = () => { const NoNetWorkIcon = () => {
return ( return (

View File

@@ -1,11 +1,12 @@
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useRouter } from 'next/router';
import { useCallback } from 'react';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import { useConfirm } from '@/providers/ConfirmProvider'; import { useConfirm } from '@/providers/ConfirmProvider';
import { useRouter } from 'next/router';
import useCurrentPageMeta from '@/hooks/use-current-page-meta';
import { useTranslation } from '@affine/i18n';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { useCallback } from 'react';
export const TrashButtonGroup = () => { export const TrashButtonGroup = () => {
const { permanentlyDeletePage } = usePageHelper(); const { permanentlyDeletePage } = usePageHelper();

View File

@@ -1,4 +1,4 @@
import type { DOMAttributes, CSSProperties } from 'react'; import type { CSSProperties, DOMAttributes } from 'react';
type IconProps = { type IconProps = {
style?: CSSProperties; style?: CSSProperties;
} & DOMAttributes<SVGElement>; } & DOMAttributes<SVGElement>;

View File

@@ -1,7 +1,9 @@
import { useState } from 'react'; import { useState } from 'react';
import { useTheme } from '@/providers/ThemeProvider'; import { useTheme } from '@/providers/ThemeProvider';
import { MoonIcon, SunIcon } from './Icons'; import { MoonIcon, SunIcon } from './Icons';
import { StyledThemeModeSwitch, StyledSwitchItem } from './style'; import { StyledSwitchItem, StyledThemeModeSwitch } from './style';
export const ThemeModeSwitch = () => { export const ThemeModeSwitch = () => {
const { mode, changeMode } = useTheme(); const { mode, changeMode } = useTheme();
const [isHover, setIsHover] = useState(false); const [isHover, setIsHover] = useState(false);

View File

@@ -1,8 +1,8 @@
import { displayFlex, keyframes, styled } from '@affine/component'; import { displayFlex, keyframes, styled } from '@affine/component';
import { CSSProperties } from 'react';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
import spring, { toString } from 'css-spring'; import spring, { toString } from 'css-spring';
import { CSSProperties } from 'react';
const ANIMATE_DURATION = 400; const ANIMATE_DURATION = 400;

View File

@@ -1,3 +1,3 @@
export * from './Header';
export * from './EditorHeader'; export * from './EditorHeader';
export * from './Header';
export * from './PageListHeader'; export * from './PageListHeader';

View File

@@ -1,5 +1,6 @@
import getIsMobile from '@/utils/get-is-mobile';
import { Trans, useTranslation } from '@affine/i18n'; import { Trans, useTranslation } from '@affine/i18n';
import getIsMobile from '@/utils/get-is-mobile';
// Inspire by https://stackoverflow.com/a/4900484/8415727 // Inspire by https://stackoverflow.com/a/4900484/8415727
const getChromeVersion = () => { const getChromeVersion = () => {
const raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); const raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);

View File

@@ -1,18 +1,19 @@
import { useState, useEffect } from 'react'; import { Tooltip } from '@affine/component';
import { MuiFade } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { CloseIcon } from '@blocksuite/icons';
import { useEffect, useState } from 'react';
import { useGlobalState } from '@/store/app';
import { useModal } from '@/store/globalModal';
import { ContactIcon, HelpIcon, KeyboardIcon } from './Icons';
import { import {
StyledIsland,
StyledIconWrapper,
StyledAnimateWrapper, StyledAnimateWrapper,
StyledIconWrapper,
StyledIsland,
StyledTriggerWrapper, StyledTriggerWrapper,
} from './style'; } from './style';
import { ContactIcon, HelpIcon, KeyboardIcon } from './Icons';
import { Tooltip } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useModal } from '@/store/globalModal';
import { MuiFade } from '@affine/component';
import { useGlobalState } from '@/store/app';
import { CloseIcon } from '@blocksuite/icons';
export type IslandItemNames = 'contact' | 'shortcuts'; export type IslandItemNames = 'contact' | 'shortcuts';
export const HelpIsland = ({ export const HelpIsland = ({
showList = ['contact', 'shortcuts'], showList = ['contact', 'shortcuts'],

View File

@@ -1,8 +1,8 @@
import { import {
JoinedWorkspaceIcon as DefaultJoinedWorkspaceIcon,
LocalWorkspaceIcon as DefaultLocalWorkspaceIcon,
CloudWorkspaceIcon as DefaultCloudWorkspaceIcon, CloudWorkspaceIcon as DefaultCloudWorkspaceIcon,
JoinedWorkspaceIcon as DefaultJoinedWorkspaceIcon,
LocalDataIcon as DefaultLocalDataIcon, LocalDataIcon as DefaultLocalDataIcon,
LocalWorkspaceIcon as DefaultLocalWorkspaceIcon,
PublishIcon as DefaultPublishIcon, PublishIcon as DefaultPublishIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';

View File

@@ -1,12 +1,14 @@
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { StyledButtonWrapper, StyledTitle } from './styles';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Content, FlexWrapper } from '@affine/component'; import { Content, FlexWrapper } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useCallback, useEffect, useState } from 'react';
import Loading from '@/components/loading'; import Loading from '@/components/loading';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import { useCallback, useEffect, useState } from 'react';
import { useTranslation } from '@affine/i18n';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { StyledButtonWrapper, StyledTitle } from './styles';
// import { Tooltip } from '@affine/component'; // import { Tooltip } from '@affine/component';
type ImportModalProps = { type ImportModalProps = {
open: boolean; open: boolean;

View File

@@ -1,7 +1,7 @@
import { import {
StyledLoadingWrapper,
StyledLoading, StyledLoading,
StyledLoadingItem, StyledLoadingItem,
StyledLoadingWrapper,
} from './styled'; } from './styled';
export const Loading = ({ size = 40 }: { size?: number }) => { export const Loading = ({ size = 40 }: { size?: number }) => {

View File

@@ -1,7 +1,8 @@
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import Loading from './Loading';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import Loading from './Loading';
// Used for the full page loading // Used for the full page loading
const StyledLoadingContainer = styled('div')(() => { const StyledLoadingContainer = styled('div')(() => {
return { return {

View File

@@ -1,9 +1,11 @@
import { positionAbsolute, styled } from '@affine/component'; import { positionAbsolute, styled } from '@affine/component';
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { GoogleIcon } from './GoogleIcon';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { GoogleIcon } from './GoogleIcon';
interface LoginModalProps { interface LoginModalProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,10 +1,12 @@
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Check, UnCheck } from './icon';
import { useState } from 'react';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { useState } from 'react';
import { useAppState } from '@/providers/app-state-provider'; import { useAppState } from '@/providers/app-state-provider';
import { Check, UnCheck } from './icon';
interface LoginModalProps { interface LoginModalProps {
open: boolean; open: boolean;
onClose: (wait: boolean) => void; onClose: (wait: boolean) => void;

View File

@@ -1,9 +1,11 @@
import React, { useState } from 'react';
import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import getIsMobile from '@/utils/get-is-mobile';
import { StyledButton, StyledContent, StyledTitle } from './styles';
import bg from './bg.png';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import React, { useState } from 'react';
import getIsMobile from '@/utils/get-is-mobile';
import bg from './bg.png';
import { StyledButton, StyledContent, StyledTitle } from './styles';
export const MobileModal = () => { export const MobileModal = () => {
const [showModal, setShowModal] = useState(getIsMobile()); const [showModal, setShowModal] = useState(getIsMobile());
const { t } = useTranslation(); const { t } = useTranslation();

View File

@@ -1,9 +1,10 @@
import localizedFormat from 'dayjs/plugin/localizedFormat';
import dayjs from 'dayjs';
import { PageMeta } from '@/providers/app-state-provider';
import { TableCell } from '@affine/component'; import { TableCell } from '@affine/component';
import dayjs from 'dayjs';
import localizedFormat from 'dayjs/plugin/localizedFormat';
import React from 'react'; import React from 'react';
import { PageMeta } from '@/providers/app-state-provider';
dayjs.extend(localizedFormat); dayjs.extend(localizedFormat);
export const DateCell = ({ export const DateCell = ({

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { Empty } from '@affine/component'; import { Empty } from '@affine/component';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import React from 'react';
export const PageListEmpty = (props: { listType?: string }) => { export const PageListEmpty = (props: { listType?: string }) => {
const { listType } = props; const { listType } = props;
const { t } = useTranslation(); const { t } = useTranslation();

View File

@@ -1,25 +1,25 @@
import { useConfirm } from '@/providers/ConfirmProvider';
import { PageMeta } from '@/providers/app-state-provider';
import { import {
FlexWrapper,
IconButton,
Menu, Menu,
MenuItem, MenuItem,
Tooltip, Tooltip,
FlexWrapper,
IconButton,
} from '@affine/component'; } from '@affine/component';
import { toast } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { import {
MoreVerticalIcon,
RestoreIcon,
FavouritesIcon,
FavouritedIcon,
OpenInNewIcon,
DeleteForeverIcon, DeleteForeverIcon,
FavouritedIcon,
FavouritesIcon,
MoreVerticalIcon,
OpenInNewIcon,
RestoreIcon,
TrashIcon, TrashIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';
import { toast } from '@affine/component';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import { useTranslation } from '@affine/i18n'; import { PageMeta } from '@/providers/app-state-provider';
import { useConfirm } from '@/providers/ConfirmProvider';
export const OperationCell = ({ pageMeta }: { pageMeta: PageMeta }) => { export const OperationCell = ({ pageMeta }: { pageMeta: PageMeta }) => {
const { id, favorite } = pageMeta; const { id, favorite } = pageMeta;

View File

@@ -1,16 +1,3 @@
import { PageMeta } from '@/providers/app-state-provider';
import {
FavouritedIcon,
FavouritesIcon,
PaperIcon,
EdgelessIcon,
} from '@blocksuite/icons';
import {
StyledTableContainer,
StyledTableRow,
StyledTitleLink,
StyledTitleWrapper,
} from './styles';
import { import {
Table, Table,
TableBody, TableBody,
@@ -18,19 +5,34 @@ import {
TableHead, TableHead,
TableRow, TableRow,
} from '@affine/component'; } from '@affine/component';
import { OperationCell, TrashOperationCell } from './OperationCell';
import Empty from './Empty';
import { Content } from '@affine/component'; import { Content } from '@affine/component';
import React, { useCallback } from 'react';
import DateCell from '@/components/page-list/DateCell';
import { IconButton } from '@affine/component'; import { IconButton } from '@affine/component';
import { Tooltip } from '@affine/component'; import { Tooltip } from '@affine/component';
import { useRouter } from 'next/router';
import { toast } from '@affine/component'; import { toast } from '@affine/component';
import { usePageHelper } from '@/hooks/use-page-helper';
import { useTheme } from '@/providers/ThemeProvider';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import {
EdgelessIcon,
FavouritedIcon,
FavouritesIcon,
PaperIcon,
} from '@blocksuite/icons';
import { useRouter } from 'next/router';
import React, { useCallback } from 'react';
import DateCell from '@/components/page-list/DateCell';
import { usePageHelper } from '@/hooks/use-page-helper';
import { PageMeta } from '@/providers/app-state-provider';
import { useTheme } from '@/providers/ThemeProvider';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import Empty from './Empty';
import { OperationCell, TrashOperationCell } from './OperationCell';
import {
StyledTableContainer,
StyledTableRow,
StyledTitleLink,
StyledTitleWrapper,
} from './styles';
const FavoriteTag = ({ const FavoriteTag = ({
pageMeta: { favorite, id }, pageMeta: { favorite, id },
}: { }: {

View File

@@ -1,9 +1,11 @@
import React from 'react';
import { PlusIcon } from '@blocksuite/icons';
import { StyledModalFooterContent } from './style';
import { Command } from 'cmdk';
import { usePageHelper } from '@/hooks/use-page-helper';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { PlusIcon } from '@blocksuite/icons';
import { Command } from 'cmdk';
import React from 'react';
import { usePageHelper } from '@/hooks/use-page-helper';
import { StyledModalFooterContent } from './style';
export const Footer = (props: { query: string; onClose: () => void }) => { export const Footer = (props: { query: string; onClose: () => void }) => {
const { openPage, createPage } = usePageHelper(); const { openPage, createPage } = usePageHelper();
const { t } = useTranslation(); const { t } = useTranslation();

View File

@@ -1,3 +1,6 @@
import { useTranslation } from '@affine/i18n';
import { SearchIcon } from '@blocksuite/icons';
import { Command } from 'cmdk';
import React, { import React, {
Dispatch, Dispatch,
SetStateAction, SetStateAction,
@@ -5,10 +8,8 @@ import React, {
useRef, useRef,
useState, useState,
} from 'react'; } from 'react';
import { SearchIcon } from '@blocksuite/icons';
import { StyledInputContent, StyledLabel } from './style'; import { StyledInputContent, StyledLabel } from './style';
import { Command } from 'cmdk';
import { useTranslation } from '@affine/i18n';
export const Input = (props: { export const Input = (props: {
open: boolean; open: boolean;
query: string; query: string;

View File

@@ -1,15 +1,17 @@
import { Command } from 'cmdk';
import { StyledListItem, StyledNotFound } from './style';
import { PaperIcon, EdgelessIcon } from '@blocksuite/icons';
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
import { PageMeta } from '@/providers/app-state-provider';
import { useRouter } from 'next/router';
import { NoResultSVG } from './NoResultSVG';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import usePageHelper from '@/hooks/use-page-helper'; import { EdgelessIcon, PaperIcon } from '@blocksuite/icons';
import { Workspace } from '@blocksuite/store'; import { Workspace } from '@blocksuite/store';
import { Command } from 'cmdk';
import { useRouter } from 'next/router';
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
import usePageHelper from '@/hooks/use-page-helper';
import { PageMeta } from '@/providers/app-state-provider';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { NoResultSVG } from './NoResultSVG';
import { StyledListItem, StyledNotFound } from './style';
export const PublishedResults = (props: { export const PublishedResults = (props: {
query: string; query: string;
loading: boolean; loading: boolean;

View File

@@ -1,6 +1,7 @@
import { useTranslation } from '@affine/i18n';
import { EdgelessIcon, PaperIcon } from '@blocksuite/icons';
import { Command } from 'cmdk'; import { Command } from 'cmdk';
import { StyledListItem, StyledNotFound } from './style'; import { useRouter } from 'next/router';
import { PaperIcon, EdgelessIcon } from '@blocksuite/icons';
import { import {
Dispatch, Dispatch,
SetStateAction, SetStateAction,
@@ -8,12 +9,13 @@ import {
useEffect, useEffect,
useState, useState,
} from 'react'; } from 'react';
import { useRouter } from 'next/router';
import { useSwitchToConfig } from './config';
import { NoResultSVG } from './NoResultSVG';
import { useTranslation } from '@affine/i18n';
import usePageHelper from '@/hooks/use-page-helper'; import usePageHelper from '@/hooks/use-page-helper';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { useSwitchToConfig } from './config';
import { NoResultSVG } from './NoResultSVG';
import { StyledListItem, StyledNotFound } from './style';
export const Results = (props: { export const Results = (props: {
query: string; query: string;
loading: boolean; loading: boolean;

View File

@@ -1,11 +1,11 @@
import { FC, SVGProps } from 'react'; import { useTranslation } from '@affine/i18n';
import { import {
AllPagesIcon, AllPagesIcon,
FavouritesIcon, FavouritesIcon,
TrashIcon,
SettingsIcon, SettingsIcon,
TrashIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';
import { useTranslation } from '@affine/i18n'; import { FC, SVGProps } from 'react';
export const useSwitchToConfig = ( export const useSwitchToConfig = (
currentWorkspaceId?: string currentWorkspaceId?: string

View File

@@ -1,20 +1,22 @@
import { Modal, ModalWrapper } from '@affine/component'; import { Modal, ModalWrapper } from '@affine/component';
import {
StyledContent,
StyledModalHeader,
StyledModalFooter,
StyledModalDivider,
StyledShortcut,
} from './style';
import { Input } from './Input';
import { Results } from './Results';
import { Footer } from './Footer';
import { Command } from 'cmdk'; import { Command } from 'cmdk';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useModal } from '@/store/globalModal'; import { useModal } from '@/store/globalModal';
import { getUaHelper } from '@/utils'; import { getUaHelper } from '@/utils';
import { useRouter } from 'next/router';
import { Footer } from './Footer';
import { Input } from './Input';
import { PublishedResults } from './PublishedResults'; import { PublishedResults } from './PublishedResults';
import { Results } from './Results';
import {
StyledContent,
StyledModalDivider,
StyledModalFooter,
StyledModalHeader,
StyledShortcut,
} from './style';
type TransitionsModalProps = { type TransitionsModalProps = {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,4 +1,19 @@
import {
ModalCloseButton,
MuiClickAwayListener,
MuiSlide,
} from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { createPortal } from 'react-dom'; import { createPortal } from 'react-dom';
import {
useMacKeyboardShortcuts,
useMacMarkdownShortcuts,
useWindowsKeyboardShortcuts,
useWinMarkdownShortcuts,
} from '@/components/shortcuts-modal/config';
import { getUaHelper } from '@/utils';
import { KeyboardIcon } from './Icons'; import { KeyboardIcon } from './Icons';
import { import {
StyledListItem, StyledListItem,
@@ -7,19 +22,6 @@ import {
StyledSubTitle, StyledSubTitle,
StyledTitle, StyledTitle,
} from './style'; } from './style';
import {
useMacKeyboardShortcuts,
useMacMarkdownShortcuts,
useWindowsKeyboardShortcuts,
useWinMarkdownShortcuts,
} from '@/components/shortcuts-modal/config';
import {
MuiSlide,
MuiClickAwayListener,
ModalCloseButton,
} from '@affine/component';
import { getUaHelper } from '@/utils';
import { useTranslation } from '@affine/i18n';
type ModalProps = { type ModalProps = {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,4 +1,4 @@
import { LitElement, css, html } from 'lit'; import { css, html, LitElement } from 'lit';
import { customElement, property, state } from 'lit/decorators.js'; import { customElement, property, state } from 'lit/decorators.js';
import * as React from 'react'; import * as React from 'react';

View File

@@ -1,5 +1,6 @@
import { useState, useEffect } from 'react';
import type { WorkspaceUnit } from '@affine/datacenter'; import type { WorkspaceUnit } from '@affine/datacenter';
import { useEffect, useState } from 'react';
import { WorkspaceAvatar as Avatar } from './Avatar'; import { WorkspaceAvatar as Avatar } from './Avatar';
const useAvatar = (workspaceUnit: WorkspaceUnit | null) => { const useAvatar = (workspaceUnit: WorkspaceUnit | null) => {

View File

@@ -1,10 +1,12 @@
import { useRouter } from 'next/router';
import { PropsWithChildren } from 'react';
import HelpIsland from '@/components/help-island'; import HelpIsland from '@/components/help-island';
import { WorkSpaceSliderBar } from '@/components/workspace-slider-bar'; import { WorkSpaceSliderBar } from '@/components/workspace-slider-bar';
import { useRouter } from 'next/router';
import { StyledPage, StyledToolWrapper, StyledWrapper } from './styles';
import { PropsWithChildren } from 'react';
import useEnsureWorkspace from '@/hooks/use-ensure-workspace'; import useEnsureWorkspace from '@/hooks/use-ensure-workspace';
import { PageLoading } from '../loading'; import { PageLoading } from '../loading';
import { StyledPage, StyledToolWrapper, StyledWrapper } from './styles';
export const WorkspaceDefender = ({ children }: PropsWithChildren) => { export const WorkspaceDefender = ({ children }: PropsWithChildren) => {
const { workspaceLoaded } = useEnsureWorkspace(); const { workspaceLoaded } = useEnsureWorkspace();

View File

@@ -1,11 +1,13 @@
import { CloudWorkspaceIcon, SignOutIcon } from '@blocksuite/icons';
import { FlexWrapper } from '@affine/component'; import { FlexWrapper } from '@affine/component';
import { WorkspaceAvatar } from '@/components/workspace-avatar';
import { IconButton } from '@affine/component'; import { IconButton } from '@affine/component';
import { StyledFooter, StyleUserInfo, StyledSignInButton } from './styles';
import { useTranslation } from '@affine/i18n';
import { Tooltip } from '@affine/component'; import { Tooltip } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { CloudWorkspaceIcon, SignOutIcon } from '@blocksuite/icons';
import { WorkspaceAvatar } from '@/components/workspace-avatar';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { StyledFooter, StyledSignInButton, StyleUserInfo } from './styles';
export const Footer = ({ export const Footer = ({
onLogin, onLogin,
onLogout, onLogout,

View File

@@ -1,9 +1,9 @@
import { LOCALES } from '@affine/i18n';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { ArrowDownIcon } from '@blocksuite/icons';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Menu, MenuItem } from '@affine/component'; import { Menu, MenuItem } from '@affine/component';
import { LOCALES } from '@affine/i18n';
import { useTranslation } from '@affine/i18n';
import { ArrowDownIcon } from '@blocksuite/icons';
const LanguageMenuContent = () => { const LanguageMenuContent = () => {
const { i18n } = useTranslation(); const { i18n } = useTranslation();

View File

@@ -1,16 +1,18 @@
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar'; import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { useCallback } from 'react';
import { import {
JoinedWorkspaceIcon,
LocalWorkspaceIcon,
CloudWorkspaceIcon, CloudWorkspaceIcon,
JoinedWorkspaceIcon,
LocalDataIcon, LocalDataIcon,
LocalWorkspaceIcon,
PublishIcon, PublishIcon,
} from '@/components/icons'; } from '@/components/icons';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { StyleWorkspaceInfo, StyleWorkspaceTitle, StyledCard } from './styles';
import { useTranslation } from '@affine/i18n';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { useCallback } from 'react';
import { StyledCard, StyleWorkspaceInfo, StyleWorkspaceTitle } from './styles';
const WorkspaceType = ({ workspaceData }: { workspaceData: WorkspaceUnit }) => { const WorkspaceType = ({ workspaceData }: { workspaceData: WorkspaceUnit }) => {
const user = useGlobalState(store => store.user); const user = useGlobalState(store => store.user);

View File

@@ -1,33 +1,31 @@
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { useState } from 'react';
import { CreateWorkspaceModal } from '../create-workspace';
import { Tooltip } from '@affine/component'; import { Tooltip } from '@affine/component';
import { PlusIcon, HelpIcon } from '@blocksuite/icons';
import { useRouter } from 'next/router';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { LanguageMenu } from './SelectLanguageMenu'; import { HelpIcon, PlusIcon } from '@blocksuite/icons';
import { useRouter } from 'next/router';
import { useState } from 'react';
import { useGlobalState } from '@/store/app';
import { CreateWorkspaceModal } from '../create-workspace';
import { LoginModal } from '../login-modal'; import { LoginModal } from '../login-modal';
import { LogoutModal } from '../logout-modal'; import { LogoutModal } from '../logout-modal';
import { Footer } from './Footer';
import { LanguageMenu } from './SelectLanguageMenu';
import { import {
StyledCard, StyledCard,
StyledSplitLine,
StyleWorkspaceInfo,
StyleWorkspaceTitle,
StyledModalHeaderLeft,
StyledModalTitle,
StyledHelperContainer, StyledHelperContainer,
StyledModalContent, StyledModalContent,
StyledOperationWrapper,
StyleWorkspaceAdd,
StyledModalHeader, StyledModalHeader,
StyledModalHeaderLeft,
StyledModalTitle,
StyledOperationWrapper,
StyledSplitLine,
StyleWorkspaceAdd,
StyleWorkspaceInfo,
StyleWorkspaceTitle,
} from './styles'; } from './styles';
import { WorkspaceCard } from './WorkspaceCard'; import { WorkspaceCard } from './WorkspaceCard';
import { Footer } from './Footer';
import { useGlobalState } from '@/store/app';
interface WorkspaceModalProps { interface WorkspaceModalProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,7 +1,7 @@
import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { Wrapper } from '@affine/component'; import { Wrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
export const ExportPage = ({ workspace }: { workspace: WorkspaceUnit }) => { export const ExportPage = ({ workspace }: { workspace: WorkspaceUnit }) => {
const { t } = useTranslation(); const { t } = useTranslation();
console.log(workspace); console.log(workspace);

View File

@@ -1,11 +1,12 @@
import { useState } from 'react';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Input } from '@affine/component'; import { Input } from '@affine/component';
import { toast } from '@affine/component'; import { toast } from '@affine/component';
import { Content, FlexWrapper, Wrapper } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { Wrapper, Content, FlexWrapper } from '@affine/component'; import { useState } from 'react';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { useModal } from '@/store/globalModal'; import { useModal } from '@/store/globalModal';
export const PublishPage = ({ workspace }: { workspace: WorkspaceUnit }) => { export const PublishPage = ({ workspace }: { workspace: WorkspaceUnit }) => {
const shareUrl = window.location.host + '/public-workspace/' + workspace.id; const shareUrl = window.location.host + '/public-workspace/' + workspace.id;

View File

@@ -1,10 +1,12 @@
import { StyledWorkspaceName } from './style'; import { Button, Content, FlexWrapper, Wrapper } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation, Trans } from '@affine/i18n'; import { Trans, useTranslation } from '@affine/i18n';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar'; import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { FlexWrapper, Content, Wrapper, Button } from '@affine/component';
import { useModal } from '@/store/globalModal';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { useModal } from '@/store/globalModal';
import { StyledWorkspaceName } from './style';
// // FIXME: Temporary solution, since the @blocksuite/icons is broken // // FIXME: Temporary solution, since the @blocksuite/icons is broken
// const ActiveIcon = () => { // const ActiveIcon = () => {

View File

@@ -1,30 +1,31 @@
import {
StyledInput,
StyledWorkspaceInfo,
StyledAvatar,
StyledEditButton,
} from './style';
import { StyledSettingKey, StyledRow } from '../style';
import { FlexWrapper, MuiAvatar } from '@affine/component'; import { FlexWrapper, MuiAvatar } from '@affine/component';
import { useCallback, useState } from 'react';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { WorkspaceDelete } from './delete'; import { MuiFade } from '@affine/component';
import { WorkspaceLeave } from './leave'; import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { EmailIcon } from '@blocksuite/icons';
import { useCallback, useState } from 'react';
import { Upload } from '@/components/file-upload';
import { import {
JoinedWorkspaceIcon,
CloudWorkspaceIcon, CloudWorkspaceIcon,
JoinedWorkspaceIcon,
LocalWorkspaceIcon, LocalWorkspaceIcon,
} from '@/components/icons'; } from '@/components/icons';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar'; import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { WorkspaceUnit } from '@affine/datacenter';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { useTranslation } from '@affine/i18n';
import { CameraIcon } from './icons';
import { Upload } from '@/components/file-upload';
import { MuiFade } from '@affine/component';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { EmailIcon } from '@blocksuite/icons';
import { StyledRow, StyledSettingKey } from '../style';
import { WorkspaceDelete } from './delete';
import { CameraIcon } from './icons';
import { WorkspaceLeave } from './leave';
import {
StyledAvatar,
StyledEditButton,
StyledInput,
StyledWorkspaceInfo,
} from './style';
export const GeneralPage = ({ workspace }: { workspace: WorkspaceUnit }) => { export const GeneralPage = ({ workspace }: { workspace: WorkspaceUnit }) => {
const [showDelete, setShowDelete] = useState<boolean>(false); const [showDelete, setShowDelete] = useState<boolean>(false);
const [showLeave, setShowLeave] = useState<boolean>(false); const [showLeave, setShowLeave] = useState<boolean>(false);

View File

@@ -1,22 +1,23 @@
import { useRouter } from 'next/router';
import { Modal } from '@affine/component'; import { Modal } from '@affine/component';
import { Input } from '@affine/component'; import { Input } from '@affine/component';
import {
StyledModalHeader,
StyledTextContent,
StyledModalWrapper,
StyledInputContent,
StyledButtonContent,
StyledWorkspaceName,
} from './style';
import { useState } from 'react';
import { ModalCloseButton } from '@affine/component'; import { ModalCloseButton } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { Trans, useTranslation } from '@affine/i18n'; import { Trans, useTranslation } from '@affine/i18n';
import { useRouter } from 'next/router';
import { useState } from 'react';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import {
StyledButtonContent,
StyledInputContent,
StyledModalHeader,
StyledModalWrapper,
StyledTextContent,
StyledWorkspaceName,
} from './style';
interface WorkspaceDeleteProps { interface WorkspaceDeleteProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,14 +1,16 @@
import { Modal } from '@affine/component'; import { Modal } from '@affine/component';
import {
StyledModalHeader,
StyledTextContent,
StyledModalWrapper,
StyledButtonContent,
} from './style';
import { ModalCloseButton } from '@affine/component'; import { ModalCloseButton } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import {
StyledButtonContent,
StyledModalHeader,
StyledModalWrapper,
StyledTextContent,
} from './style';
// import { getDataCenter } from '@affine/datacenter'; // import { getDataCenter } from '@affine/datacenter';
// import { useAppState } from '@/providers/app-state-provider'; // import { useAppState } from '@/providers/app-state-provider';

View File

@@ -1,5 +1,5 @@
export * from './general';
export * from './ExportPage'; export * from './ExportPage';
export * from './general';
export * from './member'; export * from './member';
export * from './SyncPage';
export * from './PublishPage'; export * from './PublishPage';
export * from './SyncPage';

View File

@@ -1,13 +1,14 @@
import { EmailIcon } from '@blocksuite/icons';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { Modal, ModalWrapper, ModalCloseButton } from '@affine/component'; import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component';
import { Button } from '@affine/component'; import { Button } from '@affine/component';
import { Input } from '@affine/component'; import { Input } from '@affine/component';
import { useState } from 'react';
import { MuiAvatar } from '@affine/component'; import { MuiAvatar } from '@affine/component';
import useMembers from '@/hooks/use-members';
import { User } from '@affine/datacenter'; import { User } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { EmailIcon } from '@blocksuite/icons';
import { useState } from 'react';
import useMembers from '@/hooks/use-members';
interface LoginModalProps { interface LoginModalProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;

View File

@@ -1,6 +1,23 @@
import { Wrapper } from '@affine/component';
import { Button, IconButton } from '@affine/component';
import { Menu, MenuItem } from '@affine/component';
import { Empty } from '@affine/component';
import { toast } from '@affine/component';
import { FlexWrapper } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { EmailIcon, MoreVerticalIcon, TrashIcon } from '@blocksuite/icons';
import { useState } from 'react';
import Loading from '@/components/loading';
import useMembers from '@/hooks/use-members';
import { useModal } from '@/store/globalModal';
import { InviteMemberModal } from './InviteMemberModal';
import { import {
StyledMemberAvatar, StyledMemberAvatar,
StyledMemberButtonContainer, StyledMemberButtonContainer,
StyledMemberContainer,
StyledMemberEmail, StyledMemberEmail,
StyledMemberInfo, StyledMemberInfo,
StyledMemberListContainer, StyledMemberListContainer,
@@ -10,22 +27,7 @@ import {
StyledMemberRoleContainer, StyledMemberRoleContainer,
StyledMemberTitleContainer, StyledMemberTitleContainer,
StyledMoreVerticalButton, StyledMoreVerticalButton,
StyledMemberContainer,
} from './style'; } from './style';
import { Wrapper } from '@affine/component';
import { MoreVerticalIcon, EmailIcon, TrashIcon } from '@blocksuite/icons';
import { useState } from 'react';
import { Button, IconButton } from '@affine/component';
import { InviteMemberModal } from './InviteMemberModal';
import { Menu, MenuItem } from '@affine/component';
import { Empty } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter';
import { toast } from '@affine/component';
import useMembers from '@/hooks/use-members';
import Loading from '@/components/loading';
import { FlexWrapper } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import { useModal } from '@/store/globalModal';
export const MembersPage = ({ workspace }: { workspace: WorkspaceUnit }) => { export const MembersPage = ({ workspace }: { workspace: WorkspaceUnit }) => {
const [isInviteModalShow, setIsInviteModalShow] = useState(false); const [isInviteModalShow, setIsInviteModalShow] = useState(false);

View File

@@ -1,6 +1,7 @@
import type { ReactNode } from 'react';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { WorkspaceItemWrapper, WorkspaceItemContent } from './styles'; import type { ReactNode } from 'react';
import { WorkspaceItemContent, WorkspaceItemWrapper } from './styles';
interface ListItemProps { interface ListItemProps {
name: string; name: string;

View File

@@ -1,9 +1,11 @@
import { useModal } from '@/store/globalModal';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { useModal } from '@/store/globalModal';
import { AffineIcon } from '../../icons/Icons'; import { AffineIcon } from '../../icons/Icons';
import { import {
WorkspaceItemAvatar,
LoginItemWrapper, LoginItemWrapper,
WorkspaceItemAvatar,
WorkspaceItemContent, WorkspaceItemContent,
} from './styles'; } from './styles';

View File

@@ -1,9 +1,11 @@
import { WorkspaceName, SelectorWrapper } from './styles';
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { WorkspaceModal } from '@/components/workspace-modal';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar'; import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { WorkspaceModal } from '@/components/workspace-modal';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { SelectorWrapper, WorkspaceName } from './styles';
export const WorkspaceSelector = () => { export const WorkspaceSelector = () => {
const [workspaceListShow, setWorkspaceListShow] = useState(false); const [workspaceListShow, setWorkspaceListShow] = useState(false);
const currentWorkspace = useGlobalState( const currentWorkspace = useGlobalState(

View File

@@ -1,5 +1,26 @@
import React, { useCallback, useState } from 'react'; import { MuiCollapse } from '@affine/component';
import { Tooltip } from '@affine/component';
import { IconButton } from '@affine/component';
import { useTranslation } from '@affine/i18n';
import {
AllPagesIcon,
ArrowDownIcon,
FavouritesIcon,
PlusIcon,
SearchIcon,
SettingsIcon,
TrashIcon,
} from '@blocksuite/icons';
import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useCallback, useState } from 'react';
import useLocalStorage from '@/hooks/use-local-storage';
import { usePageHelper } from '@/hooks/use-page-helper';
import { useGlobalState } from '@/store/app';
import { useModal } from '@/store/globalModal';
import { Arrow } from './icons';
import { import {
StyledArrowButton, StyledArrowButton,
StyledLink, StyledLink,
@@ -9,26 +30,7 @@ import {
StyledSliderBarWrapper, StyledSliderBarWrapper,
StyledSubListItem, StyledSubListItem,
} from './style'; } from './style';
import { Arrow } from './icons';
import {
ArrowDownIcon,
SearchIcon,
AllPagesIcon,
FavouritesIcon,
TrashIcon,
PlusIcon,
SettingsIcon,
} from '@blocksuite/icons';
import Link from 'next/link';
import { MuiCollapse } from '@affine/component';
import { Tooltip } from '@affine/component';
import { useModal } from '@/store/globalModal';
import { IconButton } from '@affine/component';
import useLocalStorage from '@/hooks/use-local-storage';
import { usePageHelper } from '@/hooks/use-page-helper';
import { useTranslation } from '@affine/i18n';
import { WorkspaceSelector } from './WorkspaceSelector/WorkspaceSelector'; import { WorkspaceSelector } from './WorkspaceSelector/WorkspaceSelector';
import { useGlobalState } from '@/store/app';
const FavoriteList = ({ showList }: { showList: boolean }) => { const FavoriteList = ({ showList }: { showList: boolean }) => {
const { openPage } = usePageHelper(); const { openPage } = usePageHelper();

View File

@@ -1,4 +1,5 @@
import { useCallback } from 'react'; import { useCallback } from 'react';
import { PageMeta } from '@/providers/app-state-provider'; import { PageMeta } from '@/providers/app-state-provider';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';

View File

@@ -1,4 +1,5 @@
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { PageMeta } from '@/providers/app-state-provider'; import { PageMeta } from '@/providers/app-state-provider';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';

View File

@@ -1,7 +1,8 @@
import { assertEquals } from '@blocksuite/global/utils';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { assertEquals } from '@blocksuite/global/utils';
// todo: refactor with suspense mode // todo: refactor with suspense mode
// It is a fully effective hook // It is a fully effective hook

View File

@@ -1,5 +1,6 @@
import { Page } from '@blocksuite/store'; import { Page } from '@blocksuite/store';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export type EventCallBack<T> = (callback: (props: T) => void) => void; export type EventCallBack<T> = (callback: (props: T) => void) => void;

View File

@@ -1,5 +1,6 @@
import { useCallback, useEffect, useState } from 'react';
import { Member } from '@affine/datacenter'; import { Member } from '@affine/datacenter';
import { useCallback, useEffect, useState } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export const useMembers = () => { export const useMembers = () => {
const dataCenter = useGlobalState(store => store.dataCenter); const dataCenter = useGlobalState(store => store.dataCenter);

View File

@@ -1,13 +1,15 @@
import { uuidv4, Workspace } from '@blocksuite/store';
import { QueryContent } from '@blocksuite/store/dist/workspace/search';
import { PageMeta } from '@/providers/app-state-provider';
import { EditorContainer } from '@blocksuite/editor';
import { useChangePageMeta } from '@/hooks/use-change-page-meta';
import { useRouter } from 'next/router';
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { useGlobalState } from '@/store/app'; import { EditorContainer } from '@blocksuite/editor';
import { uuidv4, Workspace } from '@blocksuite/store';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import type { QueryContent } from '@blocksuite/store/dist/workspace/search';
import { useRouter } from 'next/router';
import { useCallback } from 'react'; import { useCallback } from 'react';
import { useChangePageMeta } from '@/hooks/use-change-page-meta';
import { PageMeta } from '@/providers/app-state-provider';
import { useGlobalState } from '@/store/app';
export type EditorHandlers = { export type EditorHandlers = {
createPage: (params?: { createPage: (params?: {
pageId?: string; pageId?: string;

View File

@@ -1,5 +1,6 @@
import { useEffect, useRef } from 'react';
import { EditorContainer } from '@blocksuite/editor'; import { EditorContainer } from '@blocksuite/editor';
import { useEffect, useRef } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export type EventCallBack<T> = (callback: (props: T) => void) => void; export type EventCallBack<T> = (callback: (props: T) => void) => void;

View File

@@ -1,7 +1,8 @@
import { WorkspaceUnit } from '@affine/datacenter'; import { WorkspaceUnit } from '@affine/datacenter';
import { useGlobalState } from '@/store/app';
import { useCallback } from 'react'; import { useCallback } from 'react';
import { useGlobalState } from '@/store/app';
export const useWorkspaceHelper = () => { export const useWorkspaceHelper = () => {
const dataCenter = useGlobalState(store => store.dataCenter); const dataCenter = useGlobalState(store => store.dataCenter);
const currentWorkspace = useGlobalState( const currentWorkspace = useGlobalState(

View File

@@ -1,6 +1,7 @@
import NotfoundPage from '@/components/404';
import Head from 'next/head'; import Head from 'next/head';
import NotfoundPage from '@/components/404';
export default function Custom404() { export default function Custom404() {
return ( return (
<> <>

View File

@@ -1,30 +1,31 @@
import type { AppProps } from 'next/app';
import dynamic from 'next/dynamic';
import '../../public/globals.css'; import '../../public/globals.css';
import '../../public/variable.css'; import '../../public/variable.css';
import './temporary.css'; import './temporary.css';
import { Logger } from '@toeverything/pathfinder-logger';
import '@fontsource/space-mono'; import '@fontsource/space-mono';
import '@fontsource/poppins'; import '@fontsource/poppins';
import '../utils/print-build-info'; import '../utils/print-build-info';
import ProviderComposer from '@/components/provider-composer'; import '@affine/i18n';
import type { PropsWithChildren, ReactElement, ReactNode } from 'react';
import { useTranslation } from '@affine/i18n';
import { Logger } from '@toeverything/pathfinder-logger';
import type { NextPage } from 'next'; import type { NextPage } from 'next';
import type { AppProps } from 'next/app';
import dynamic from 'next/dynamic';
import Head from 'next/head';
// import AppStateProvider2 from '@/providers/app-state-provider2/provider';
import { useRouter } from 'next/router';
import type { PropsWithChildren, ReactElement, ReactNode } from 'react';
import { Suspense, useEffect } from 'react';
import React from 'react';
import { PageLoading } from '@/components/loading';
import { MessageCenterHandler } from '@/components/message-center-handler';
import ProviderComposer from '@/components/provider-composer';
import { AppStateProvider } from '@/providers/app-state-provider'; import { AppStateProvider } from '@/providers/app-state-provider';
import ConfirmProvider from '@/providers/ConfirmProvider'; import ConfirmProvider from '@/providers/ConfirmProvider';
import { ModalProvider } from '@/store/globalModal';
// import AppStateProvider2 from '@/providers/app-state-provider2/provider';
import { useRouter } from 'next/router';
import { Suspense, useEffect } from 'react';
import { PageLoading } from '@/components/loading';
import Head from 'next/head';
import '@affine/i18n';
import { useTranslation } from '@affine/i18n';
import React from 'react';
import { GlobalAppProvider } from '@/store/app'; import { GlobalAppProvider } from '@/store/app';
import { DataCenterPreloader } from '@/store/app/datacenter'; import { DataCenterPreloader } from '@/store/app/datacenter';
import { MessageCenterHandler } from '@/components/message-center-handler'; import { ModalProvider } from '@/store/globalModal';
const ThemeProvider = dynamic(() => import('@/providers/ThemeProvider'), { const ThemeProvider = dynamic(() => import('@/providers/ThemeProvider'), {
ssr: false, ssr: false,

View File

@@ -1,12 +1,11 @@
import createEmotionServer from '@emotion/server/create-instance';
import { cache } from '@emotion/css'; import { cache } from '@emotion/css';
import createEmotionServer from '@emotion/server/create-instance';
import Document, { import Document, {
Html, DocumentContext,
Head, Head,
Html,
Main, Main,
NextScript, NextScript,
DocumentContext,
} from 'next/document'; } from 'next/document';
import * as React from 'react'; import * as React from 'react';

View File

@@ -1,9 +1,10 @@
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { styled } from '@affine/component'; import { styled } from '@affine/component';
import { Empty } from '@affine/component'; import { Empty } from '@affine/component';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { PageLoading } from '@/components/loading'; import { PageLoading } from '@/components/loading';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
// const User = ({ name, avatar }: { name: string; avatar?: string }) => { // const User = ({ name, avatar }: { name: string; avatar?: string }) => {
// return ( // return (

View File

@@ -1,17 +1,19 @@
import { ReactElement, useEffect, useMemo } from 'react';
import type { NextPageWithLayout } from '../..//_app';
import { displayFlex, styled } from '@affine/component'; import { displayFlex, styled } from '@affine/component';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/router';
import { PageLoading } from '@/components/loading';
import { Breadcrumbs } from '@affine/component'; import { Breadcrumbs } from '@affine/component';
import { IconButton } from '@affine/component'; import { IconButton } from '@affine/component';
import NextLink from 'next/link';
import { PaperIcon, SearchIcon } from '@blocksuite/icons';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { useModal } from '@/store/globalModal';
import { useLoadPublicWorkspace } from '@/hooks/use-load-public-workspace';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { PaperIcon, SearchIcon } from '@blocksuite/icons';
import dynamic from 'next/dynamic';
import NextLink from 'next/link';
import { useRouter } from 'next/router';
import { ReactElement, useEffect, useMemo } from 'react';
import { PageLoading } from '@/components/loading';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { useLoadPublicWorkspace } from '@/hooks/use-load-public-workspace';
import { useModal } from '@/store/globalModal';
import type { NextPageWithLayout } from '../..//_app';
const DynamicBlocksuite = dynamic(() => import('@/components/editor'), { const DynamicBlocksuite = dynamic(() => import('@/components/editor'), {
ssr: false, ssr: false,

View File

@@ -1,19 +1,21 @@
import { Breadcrumbs } from '@affine/component';
import { SearchIcon } from '@blocksuite/icons';
import { useRouter } from 'next/router';
import { ReactElement, useEffect, useMemo } from 'react';
import { PageLoading } from '@/components/loading';
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { WorkspaceUnitAvatar } from '@/components/workspace-avatar'; import { WorkspaceUnitAvatar } from '@/components/workspace-avatar';
import { useLoadPublicWorkspace } from '@/hooks/use-load-public-workspace'; import { useLoadPublicWorkspace } from '@/hooks/use-load-public-workspace';
import { PageMeta } from '@/providers/app-state-provider'; import { PageMeta } from '@/providers/app-state-provider';
import { useModal } from '@/store/globalModal'; import { useModal } from '@/store/globalModal';
import { Breadcrumbs } from '@affine/component';
import { SearchIcon } from '@blocksuite/icons';
import { useRouter } from 'next/router';
import { ReactElement, useMemo, useEffect } from 'react';
import { import {
NavContainer, NavContainer,
PageContainer, PageContainer,
SearchButton, SearchButton,
StyledBreadcrumbs, StyledBreadcrumbs,
} from './[pageId]'; } from './[pageId]';
import { PageLoading } from '@/components/loading';
const All = () => { const All = () => {
const router = useRouter(); const router = useRouter();

View File

@@ -1,3 +1,8 @@
import { useTranslation } from '@affine/i18n';
import { assertEquals } from '@blocksuite/store';
import dynamic from 'next/dynamic';
import Head from 'next/head';
import { useRouter } from 'next/router';
import { import {
PropsWithChildren, PropsWithChildren,
ReactElement, ReactElement,
@@ -5,18 +10,15 @@ import {
useEffect, useEffect,
useState, useState,
} from 'react'; } from 'react';
import { EditorHeader } from '@/components/header'; import { EditorHeader } from '@/components/header';
import MobileModal from '@/components/mobile-modal'; import MobileModal from '@/components/mobile-modal';
import type { NextPageWithLayout } from '../..//_app';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useRouter } from 'next/router';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
import dynamic from 'next/dynamic';
import Head from 'next/head';
import { useTranslation } from '@affine/i18n';
import { useGlobalState, useGlobalStateApi } from '@/store/app'; import { useGlobalState, useGlobalStateApi } from '@/store/app';
import exampleMarkdown from '@/templates/Welcome-to-AFFiNE-Alpha-Downhills.md'; import exampleMarkdown from '@/templates/Welcome-to-AFFiNE-Alpha-Downhills.md';
import { assertEquals } from '@blocksuite/store';
import type { NextPageWithLayout } from '../..//_app';
const DynamicBlocksuite = dynamic(() => import('@/components/editor'), { const DynamicBlocksuite = dynamic(() => import('@/components/editor'), {
ssr: false, ssr: false,

View File

@@ -1,10 +1,11 @@
import { PageList } from '@/components/page-list';
import { AllPagesIcon } from '@blocksuite/icons';
import { PageListHeader } from '@/components/header';
import { ReactElement, useCallback } from 'react';
import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { AllPagesIcon } from '@blocksuite/icons';
import Head from 'next/head'; import Head from 'next/head';
import { ReactElement, useCallback } from 'react';
import { PageListHeader } from '@/components/header';
import { PageList } from '@/components/page-list';
import WorkspaceLayout from '@/components/workspace-layout';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
const All = () => { const All = () => {

View File

@@ -1,10 +1,11 @@
import { useTranslation } from '@affine/i18n';
import { FavouritesIcon } from '@blocksuite/icons';
import Head from 'next/head';
import { ReactElement } from 'react';
import { PageListHeader } from '@/components/header'; import { PageListHeader } from '@/components/header';
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { FavouritesIcon } from '@blocksuite/icons';
import { ReactElement } from 'react';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n';
import Head from 'next/head';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export const Favorite = () => { export const Favorite = () => {

View File

@@ -1,7 +1,8 @@
import { useCallback, useEffect } from 'react';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import useEnsureWorkspace from '@/hooks/use-ensure-workspace'; import { useCallback, useEffect } from 'react';
import { PageLoading } from '@/components/loading'; import { PageLoading } from '@/components/loading';
import useEnsureWorkspace from '@/hooks/use-ensure-workspace';
import usePageHelper from '@/hooks/use-page-helper'; import usePageHelper from '@/hooks/use-page-helper';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';

View File

@@ -1,31 +1,32 @@
import { styled } from '@affine/component';
import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { SettingsIcon } from '@blocksuite/icons';
import Head from 'next/head';
import {
CSSProperties,
ReactElement,
ReactNode,
startTransition,
useCallback,
useEffect,
useState,
} from 'react';
import { PageListHeader } from '@/components/header';
import WorkspaceLayout from '@/components/workspace-layout';
import {
ExportPage,
GeneralPage,
MembersPage,
PublishPage,
SyncPage,
} from '@/components/workspace-setting';
import { import {
StyledSettingContainer, StyledSettingContainer,
StyledSettingContent, StyledSettingContent,
WorkspaceSettingTagItem, WorkspaceSettingTagItem,
} from '@/components/workspace-setting/style'; } from '@/components/workspace-setting/style';
import {
ReactElement,
ReactNode,
useState,
CSSProperties,
useEffect,
startTransition,
useCallback,
} from 'react';
import {
GeneralPage,
MembersPage,
PublishPage,
ExportPage,
SyncPage,
} from '@/components/workspace-setting';
import { SettingsIcon } from '@blocksuite/icons';
import WorkspaceLayout from '@/components/workspace-layout';
import { WorkspaceUnit } from '@affine/datacenter';
import { useTranslation } from '@affine/i18n';
import { PageListHeader } from '@/components/header';
import Head from 'next/head';
import { styled } from '@affine/component';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
const useTabMap = () => { const useTabMap = () => {

View File

@@ -1,10 +1,11 @@
import { useTranslation } from '@affine/i18n';
import { TrashIcon } from '@blocksuite/icons';
import Head from 'next/head';
import { ReactElement, useCallback } from 'react';
import { PageListHeader } from '@/components/header'; import { PageListHeader } from '@/components/header';
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { TrashIcon } from '@blocksuite/icons';
import { ReactElement, useCallback } from 'react';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n';
import Head from 'next/head';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export const Trash = () => { export const Trash = () => {

View File

@@ -1,7 +1,8 @@
import { useCallback, useEffect } from 'react';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import useEnsureWorkspace from '@/hooks/use-ensure-workspace'; import { useCallback, useEffect } from 'react';
import { PageLoading } from '@/components/loading'; import { PageLoading } from '@/components/loading';
import useEnsureWorkspace from '@/hooks/use-ensure-workspace';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
export const WorkspaceIndex = () => { export const WorkspaceIndex = () => {

View File

@@ -1,6 +1,6 @@
import { createContext, useContext, useMemo } from 'react';
import type { PropsWithChildren } from 'react';
import { Confirm, ConfirmProps } from '@affine/component'; import { Confirm, ConfirmProps } from '@affine/component';
import type { PropsWithChildren } from 'react';
import { createContext, useContext, useMemo } from 'react';
import { createStore, useStore } from 'zustand'; import { createStore, useStore } from 'zustand';
import { combine, subscribeWithSelector } from 'zustand/middleware'; import { combine, subscribeWithSelector } from 'zustand/middleware';
import { UseBoundStore } from 'zustand/react'; import { UseBoundStore } from 'zustand/react';

View File

@@ -1,10 +1,3 @@
import { createContext, useContext, useEffect, useState } from 'react';
import { Global, css } from '@emotion/react';
import {
ThemeProvider as MuiThemeProvider,
createTheme as MuiCreateTheme,
} from '@mui/material/styles';
import type { PropsWithChildren } from 'react';
import { import {
Theme, Theme,
ThemeMode, ThemeMode,
@@ -12,12 +5,20 @@ import {
ThemeProviderValue, ThemeProviderValue,
} from '@affine/component'; } from '@affine/component';
import { import {
getLightTheme,
getDarkTheme, getDarkTheme,
getLightTheme,
globalThemeVariables, globalThemeVariables,
ThemeProvider as ComponentThemeProvider, ThemeProvider as ComponentThemeProvider,
} from '@affine/component'; } from '@affine/component';
import { SystemThemeHelper, localStorageThemeHelper } from '@affine/component'; import { localStorageThemeHelper, SystemThemeHelper } from '@affine/component';
import { css, Global } from '@emotion/react';
import {
createTheme as MuiCreateTheme,
ThemeProvider as MuiThemeProvider,
} from '@mui/material/styles';
import type { PropsWithChildren } from 'react';
import { createContext, useContext, useEffect, useState } from 'react';
import useCurrentPageMeta from '@/hooks/use-current-page-meta'; import useCurrentPageMeta from '@/hooks/use-current-page-meta';
export const ThemeContext = createContext<ThemeProviderValue>({ export const ThemeContext = createContext<ThemeProviderValue>({

View File

@@ -1,9 +1,11 @@
import { createContext, useContext, useEffect, useState } from 'react';
import type { PropsWithChildren } from 'react';
import { AppStateContext } from './interface';
import type { Disposable } from '@blocksuite/global/utils'; import type { Disposable } from '@blocksuite/global/utils';
import type { PropsWithChildren } from 'react';
import { createContext, useContext, useEffect, useState } from 'react';
import { useGlobalState } from '@/store/app'; import { useGlobalState } from '@/store/app';
import { AppStateContext } from './interface';
type AppStateContextProps = PropsWithChildren<Record<string, unknown>>; type AppStateContextProps = PropsWithChildren<Record<string, unknown>>;
export const AppState = createContext<AppStateContext>({} as AppStateContext); export const AppState = createContext<AppStateContext>({} as AppStateContext);

View File

@@ -1,2 +1,2 @@
export * from './Provider';
export * from './interface'; export * from './interface';
export * from './Provider';

View File

@@ -1,5 +1,4 @@
import type { EditorContainer } from '@blocksuite/editor'; import type { EditorContainer } from '@blocksuite/editor';
import type { import type {
Page as StorePage, Page as StorePage,
PageMeta as StorePageMeta, PageMeta as StorePageMeta,

View File

@@ -1,6 +1,7 @@
import { Page, Workspace } from '@blocksuite/store';
import { EditorContainer } from '@blocksuite/editor';
import { BlockHub } from '@blocksuite/blocks'; import { BlockHub } from '@blocksuite/blocks';
import { EditorContainer } from '@blocksuite/editor';
import { Page, Workspace } from '@blocksuite/store';
import { GlobalActionsCreator } from '@/store/app'; import { GlobalActionsCreator } from '@/store/app';
export interface BlockSuiteState { export interface BlockSuiteState {

View File

@@ -1,14 +1,15 @@
import type { DataCenter } from '@affine/datacenter';
import { getDataCenter, WorkspaceUnit } from '@affine/datacenter';
import { DisposableGroup } from '@blocksuite/global/utils';
import React, { useCallback, useEffect } from 'react';
import { PageMeta } from '@/providers/app-state-provider';
import { createDefaultWorkspace } from '@/providers/app-state-provider/utils';
import { import {
GlobalActionsCreator, GlobalActionsCreator,
useGlobalState, useGlobalState,
useGlobalStateApi, useGlobalStateApi,
} from '@/store/app'; } from '@/store/app';
import type { DataCenter } from '@affine/datacenter';
import { PageMeta } from '@/providers/app-state-provider';
import { getDataCenter, WorkspaceUnit } from '@affine/datacenter';
import { createDefaultWorkspace } from '@/providers/app-state-provider/utils';
import React, { useCallback, useEffect } from 'react';
import { DisposableGroup } from '@blocksuite/global/utils';
export type DataCenterState = { export type DataCenterState = {
readonly dataCenter: DataCenter; readonly dataCenter: DataCenter;

Some files were not shown because too many files have changed in this diff Show More