feat(core): temporarily add page mode editor settings to appearance settings (#8090)
Will remove it when editor settings is released. 
This commit is contained in:
@@ -13,6 +13,7 @@ import { useCallback, useMemo } from 'react';
|
|||||||
|
|
||||||
import { useAppSettingHelper } from '../../../../../hooks/affine/use-app-setting-helper';
|
import { useAppSettingHelper } from '../../../../../hooks/affine/use-app-setting-helper';
|
||||||
import { LanguageMenu } from '../../../language-menu';
|
import { LanguageMenu } from '../../../language-menu';
|
||||||
|
import { Page } from '../editor/page';
|
||||||
import { DateFormatSetting } from './date-format-setting';
|
import { DateFormatSetting } from './date-format-setting';
|
||||||
import { settingWrapper } from './style.css';
|
import { settingWrapper } from './style.css';
|
||||||
import { ThemeEditorSetting } from './theme-editor-setting';
|
import { ThemeEditorSetting } from './theme-editor-setting';
|
||||||
@@ -119,6 +120,8 @@ export const AppearanceSettings = () => {
|
|||||||
) : null}
|
) : null}
|
||||||
{runtimeConfig.enableThemeEditor ? <ThemeEditorSetting /> : null}
|
{runtimeConfig.enableThemeEditor ? <ThemeEditorSetting /> : null}
|
||||||
</SettingWrapper>
|
</SettingWrapper>
|
||||||
|
{/* //TODO(@JimmFly): remove Page component when stable release */}
|
||||||
|
<Page />
|
||||||
{runtimeConfig.enableNewSettingUnstableApi ? (
|
{runtimeConfig.enableNewSettingUnstableApi ? (
|
||||||
<SettingWrapper title={t['com.affine.appearanceSettings.date.title']()}>
|
<SettingWrapper title={t['com.affine.appearanceSettings.date.title']()}>
|
||||||
<SettingRow
|
<SettingRow
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { useI18n } from '@affine/i18n';
|
|||||||
import {
|
import {
|
||||||
ConnectorMode,
|
ConnectorMode,
|
||||||
LineColor,
|
LineColor,
|
||||||
|
LineColorMap,
|
||||||
PointStyle,
|
PointStyle,
|
||||||
StrokeStyle,
|
StrokeStyle,
|
||||||
} from '@blocksuite/blocks';
|
} from '@blocksuite/blocks';
|
||||||
@@ -19,6 +20,7 @@ import { useCallback, useMemo } from 'react';
|
|||||||
|
|
||||||
import { DropdownMenu } from '../menu';
|
import { DropdownMenu } from '../menu';
|
||||||
import { menuTrigger, settingWrapper } from '../style.css';
|
import { menuTrigger, settingWrapper } from '../style.css';
|
||||||
|
import { useColor } from '../utils';
|
||||||
import { Point } from './point';
|
import { Point } from './point';
|
||||||
import { EdgelessSnapshot } from './snapshot';
|
import { EdgelessSnapshot } from './snapshot';
|
||||||
|
|
||||||
@@ -32,6 +34,7 @@ export const ConnectorSettings = () => {
|
|||||||
const framework = useFramework();
|
const framework = useFramework();
|
||||||
const { editorSetting } = framework.get(EditorSettingService);
|
const { editorSetting } = framework.get(EditorSettingService);
|
||||||
const settings = useLiveData(editorSetting.settings$);
|
const settings = useLiveData(editorSetting.settings$);
|
||||||
|
const getColorFromMap = useColor();
|
||||||
|
|
||||||
const connecterStyleItems = useMemo<RadioItem[]>(
|
const connecterStyleItems = useMemo<RadioItem[]>(
|
||||||
() => [
|
() => [
|
||||||
@@ -133,8 +136,8 @@ export const ConnectorSettings = () => {
|
|||||||
|
|
||||||
const currentColor = useMemo(() => {
|
const currentColor = useMemo(() => {
|
||||||
const color = settings.connector.stroke;
|
const color = settings.connector.stroke;
|
||||||
return Object.entries(LineColor).find(([, value]) => value === color);
|
return getColorFromMap(color, LineColorMap);
|
||||||
}, [settings]);
|
}, [getColorFromMap, settings.connector.stroke]);
|
||||||
|
|
||||||
const colorItems = useMemo(() => {
|
const colorItems = useMemo(() => {
|
||||||
const { stroke } = settings.connector;
|
const { stroke } = settings.connector;
|
||||||
@@ -206,9 +209,9 @@ export const ConnectorSettings = () => {
|
|||||||
trigger={
|
trigger={
|
||||||
<MenuTrigger
|
<MenuTrigger
|
||||||
className={menuTrigger}
|
className={menuTrigger}
|
||||||
prefix={<Point color={currentColor[1]} />}
|
prefix={<Point color={currentColor.value} />}
|
||||||
>
|
>
|
||||||
{currentColor[0]}
|
{currentColor.key}
|
||||||
</MenuTrigger>
|
</MenuTrigger>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { useI18n } from '@affine/i18n';
|
|||||||
import {
|
import {
|
||||||
createEnumMap,
|
createEnumMap,
|
||||||
NoteBackgroundColor,
|
NoteBackgroundColor,
|
||||||
|
NoteBackgroundColorMap,
|
||||||
NoteShadow,
|
NoteShadow,
|
||||||
NoteShadowMap,
|
NoteShadowMap,
|
||||||
StrokeStyle,
|
StrokeStyle,
|
||||||
@@ -20,6 +21,7 @@ import { useCallback, useMemo } from 'react';
|
|||||||
|
|
||||||
import { DropdownMenu } from '../menu';
|
import { DropdownMenu } from '../menu';
|
||||||
import { menuTrigger, settingWrapper } from '../style.css';
|
import { menuTrigger, settingWrapper } from '../style.css';
|
||||||
|
import { useColor } from '../utils';
|
||||||
import { Point } from './point';
|
import { Point } from './point';
|
||||||
import { EdgelessSnapshot } from './snapshot';
|
import { EdgelessSnapshot } from './snapshot';
|
||||||
|
|
||||||
@@ -46,6 +48,7 @@ export const NoteSettings = () => {
|
|||||||
const framework = useFramework();
|
const framework = useFramework();
|
||||||
const { editorSetting } = framework.get(EditorSettingService);
|
const { editorSetting } = framework.get(EditorSettingService);
|
||||||
const settings = useLiveData(editorSetting.settings$);
|
const settings = useLiveData(editorSetting.settings$);
|
||||||
|
const getColorFromMap = useColor();
|
||||||
|
|
||||||
const borderStyleItems = useMemo<RadioItem[]>(
|
const borderStyleItems = useMemo<RadioItem[]>(
|
||||||
() => [
|
() => [
|
||||||
@@ -160,10 +163,8 @@ export const NoteSettings = () => {
|
|||||||
|
|
||||||
const currentColor = useMemo(() => {
|
const currentColor = useMemo(() => {
|
||||||
const { background } = settings['affine:note'];
|
const { background } = settings['affine:note'];
|
||||||
return Object.entries(NoteBackgroundColor).find(
|
return getColorFromMap(background, NoteBackgroundColorMap);
|
||||||
([, value]) => value === background
|
}, [getColorFromMap, settings]);
|
||||||
);
|
|
||||||
}, [settings]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -185,9 +186,9 @@ export const NoteSettings = () => {
|
|||||||
trigger={
|
trigger={
|
||||||
<MenuTrigger
|
<MenuTrigger
|
||||||
className={menuTrigger}
|
className={menuTrigger}
|
||||||
prefix={<Point color={currentColor[1]} />}
|
prefix={<Point color={currentColor.value} />}
|
||||||
>
|
>
|
||||||
{currentColor[0]}
|
{currentColor.key}
|
||||||
</MenuTrigger>
|
</MenuTrigger>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ import { MenuItem, MenuTrigger, Slider } from '@affine/component';
|
|||||||
import { SettingRow } from '@affine/component/setting-components';
|
import { SettingRow } from '@affine/component/setting-components';
|
||||||
import { EditorSettingService } from '@affine/core/modules/editor-settting';
|
import { EditorSettingService } from '@affine/core/modules/editor-settting';
|
||||||
import { useI18n } from '@affine/i18n';
|
import { useI18n } from '@affine/i18n';
|
||||||
import { LineColor } from '@blocksuite/blocks';
|
import { LineColor, LineColorMap } from '@blocksuite/blocks';
|
||||||
import { useFramework, useLiveData } from '@toeverything/infra';
|
import { useFramework, useLiveData } from '@toeverything/infra';
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
|
|
||||||
import { DropdownMenu } from '../menu';
|
import { DropdownMenu } from '../menu';
|
||||||
import { menuTrigger } from '../style.css';
|
import { menuTrigger } from '../style.css';
|
||||||
|
import { useColor } from '../utils';
|
||||||
|
import { Point } from './point';
|
||||||
import { EdgelessSnapshot } from './snapshot';
|
import { EdgelessSnapshot } from './snapshot';
|
||||||
|
|
||||||
export const PenSettings = () => {
|
export const PenSettings = () => {
|
||||||
@@ -15,6 +17,11 @@ export const PenSettings = () => {
|
|||||||
const framework = useFramework();
|
const framework = useFramework();
|
||||||
const { editorSetting } = framework.get(EditorSettingService);
|
const { editorSetting } = framework.get(EditorSettingService);
|
||||||
const settings = useLiveData(editorSetting.settings$);
|
const settings = useLiveData(editorSetting.settings$);
|
||||||
|
const getColorFromMap = useColor();
|
||||||
|
|
||||||
|
const currentColor = useMemo(() => {
|
||||||
|
return getColorFromMap(settings.brush.color, LineColorMap);
|
||||||
|
}, [getColorFromMap, settings.brush.color]);
|
||||||
|
|
||||||
const colorItems = useMemo(() => {
|
const colorItems = useMemo(() => {
|
||||||
const { color } = settings.brush;
|
const { color } = settings.brush;
|
||||||
@@ -24,12 +31,17 @@ export const PenSettings = () => {
|
|||||||
};
|
};
|
||||||
const isSelected = color === value;
|
const isSelected = color === value;
|
||||||
return (
|
return (
|
||||||
<MenuItem key={name} onSelect={handler} selected={isSelected}>
|
<MenuItem
|
||||||
|
key={name}
|
||||||
|
onSelect={handler}
|
||||||
|
selected={isSelected}
|
||||||
|
prefix={<Point color={value} />}
|
||||||
|
>
|
||||||
{name}
|
{name}
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}, [editorSetting, settings]);
|
}, [editorSetting, settings.brush]);
|
||||||
|
|
||||||
const borderThickness = settings.brush.lineWidth;
|
const borderThickness = settings.brush.lineWidth;
|
||||||
const setBorderThickness = useCallback(
|
const setBorderThickness = useCallback(
|
||||||
@@ -52,14 +64,19 @@ export const PenSettings = () => {
|
|||||||
name={t['com.affine.settings.editorSettings.edgeless.pen.color']()}
|
name={t['com.affine.settings.editorSettings.edgeless.pen.color']()}
|
||||||
desc={''}
|
desc={''}
|
||||||
>
|
>
|
||||||
<DropdownMenu
|
{currentColor ? (
|
||||||
items={colorItems}
|
<DropdownMenu
|
||||||
trigger={
|
items={colorItems}
|
||||||
<MenuTrigger className={menuTrigger}>
|
trigger={
|
||||||
{String(settings.brush.color)}
|
<MenuTrigger
|
||||||
</MenuTrigger>
|
className={menuTrigger}
|
||||||
}
|
prefix={<Point color={currentColor.value} />}
|
||||||
/>
|
>
|
||||||
|
{currentColor.key}
|
||||||
|
</MenuTrigger>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingRow
|
<SettingRow
|
||||||
name={t['com.affine.settings.editorSettings.edgeless.pen.thickness']()}
|
name={t['com.affine.settings.editorSettings.edgeless.pen.thickness']()}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
FontWeight,
|
FontWeight,
|
||||||
FontWeightMap,
|
FontWeightMap,
|
||||||
LineColor,
|
LineColor,
|
||||||
|
LineColorMap,
|
||||||
TextAlign,
|
TextAlign,
|
||||||
} from '@blocksuite/blocks';
|
} from '@blocksuite/blocks';
|
||||||
import { useFramework, useLiveData } from '@toeverything/infra';
|
import { useFramework, useLiveData } from '@toeverything/infra';
|
||||||
@@ -21,6 +22,7 @@ import { useCallback, useMemo } from 'react';
|
|||||||
|
|
||||||
import { DropdownMenu } from '../menu';
|
import { DropdownMenu } from '../menu';
|
||||||
import { menuTrigger, settingWrapper } from '../style.css';
|
import { menuTrigger, settingWrapper } from '../style.css';
|
||||||
|
import { useColor } from '../utils';
|
||||||
import { Point } from './point';
|
import { Point } from './point';
|
||||||
import { EdgelessSnapshot } from './snapshot';
|
import { EdgelessSnapshot } from './snapshot';
|
||||||
|
|
||||||
@@ -29,6 +31,7 @@ export const TextSettings = () => {
|
|||||||
const framework = useFramework();
|
const framework = useFramework();
|
||||||
const { editorSetting } = framework.get(EditorSettingService);
|
const { editorSetting } = framework.get(EditorSettingService);
|
||||||
const settings = useLiveData(editorSetting.settings$);
|
const settings = useLiveData(editorSetting.settings$);
|
||||||
|
const getColorFromMap = useColor();
|
||||||
|
|
||||||
const alignItems = useMemo<RadioItem[]>(
|
const alignItems = useMemo<RadioItem[]>(
|
||||||
() => [
|
() => [
|
||||||
@@ -134,8 +137,8 @@ export const TextSettings = () => {
|
|||||||
|
|
||||||
const currentColor = useMemo(() => {
|
const currentColor = useMemo(() => {
|
||||||
const { color } = settings['affine:edgeless-text'];
|
const { color } = settings['affine:edgeless-text'];
|
||||||
return Object.entries(LineColor).find(([, value]) => value === color);
|
return getColorFromMap(color, LineColorMap);
|
||||||
}, [settings]);
|
}, [getColorFromMap, settings]);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<EdgelessSnapshot
|
<EdgelessSnapshot
|
||||||
@@ -154,9 +157,9 @@ export const TextSettings = () => {
|
|||||||
trigger={
|
trigger={
|
||||||
<MenuTrigger
|
<MenuTrigger
|
||||||
className={menuTrigger}
|
className={menuTrigger}
|
||||||
prefix={<Point color={currentColor[1]} />}
|
prefix={<Point color={currentColor.value} />}
|
||||||
>
|
>
|
||||||
{currentColor[0]}
|
{currentColor.key}
|
||||||
</MenuTrigger>
|
</MenuTrigger>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
import { useTheme } from 'next-themes';
|
||||||
|
|
||||||
|
function getColorFromMap(
|
||||||
|
color: string | { normal: string } | { light: string; dark: string },
|
||||||
|
colorMap: { [key: string]: string },
|
||||||
|
theme: 'light' | 'dark' = 'light'
|
||||||
|
):
|
||||||
|
| {
|
||||||
|
value: string;
|
||||||
|
key: string;
|
||||||
|
}
|
||||||
|
| undefined {
|
||||||
|
if (typeof color === 'string') {
|
||||||
|
return { value: color, key: colorMap[color] };
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('normal' in color) {
|
||||||
|
return {
|
||||||
|
value: color.normal,
|
||||||
|
key: colorMap[color.normal],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('light' in color && 'dark' in color) {
|
||||||
|
return {
|
||||||
|
value: color[theme],
|
||||||
|
key: colorMap[color[theme]],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useColor = () => {
|
||||||
|
const { resolvedTheme } = useTheme();
|
||||||
|
return (
|
||||||
|
color: string | { normal: string } | { light: string; dark: string },
|
||||||
|
colorMap: { [key: string]: string }
|
||||||
|
) =>
|
||||||
|
getColorFromMap(
|
||||||
|
color,
|
||||||
|
colorMap,
|
||||||
|
resolvedTheme as 'light' | 'dark' | undefined
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user