refactor(core): move fontFamily and fullWidthLayout to editor settings (#7988)

This commit is contained in:
JimmFly
2024-08-28 02:35:24 +00:00
parent 3e810eb043
commit 03b2cda845
13 changed files with 131 additions and 135 deletions
@@ -4,6 +4,9 @@ import { EditorSetting } from './entities/editor-setting';
import { GlobalStateEditorSettingProvider } from './impls/global-state';
import { EditorSettingProvider } from './provider/editor-setting-provider';
import { EditorSettingService } from './services/editor-setting';
export type { FontFamily } from './schema';
export { EditorSettingSchema, fontStyleOptions } from './schema';
export { EditorSettingService } from './services/editor-setting';
export function configureEditorSettingModule(framework: Framework) {
framework
@@ -1,5 +1,17 @@
import { z } from 'zod';
export type FontFamily = 'Sans' | 'Serif' | 'Mono' | 'Custom';
export const fontStyleOptions = [
{ key: 'Sans', value: 'var(--affine-font-sans-family)' },
{ key: 'Serif', value: 'var(--affine-font-serif-family)' },
{ key: 'Mono', value: 'var(--affine-font-mono-family)' },
{ key: 'Custom', value: 'var(--affine-font-sans-family)' },
] satisfies {
key: FontFamily;
value: string;
}[];
const BSEditorSettingSchema = z.object({
// TODO: import from bs
connector: z.object({
@@ -14,9 +26,14 @@ const BSEditorSettingSchema = z.object({
.default('#000000'),
}),
});
const AffineEditorSettingSchema = z.object({
fontFamily: z.enum(['Sans', 'Serif', 'Mono', 'Custom']).default('Sans'),
customFontFamily: z.string().default(''),
newDocDefaultMode: z.enum(['edgeless', 'page']).default('page'),
spellCheck: z.boolean().default(false),
fullWidthLayout: z.boolean().default(false),
displayDocInfo: z.boolean().default(true),
displayBiDirectionalLink: z.boolean().default(true),
});
type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (
@@ -1,5 +1,5 @@
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import * as Dialog from '@radix-ui/react-dialog';
import { useLiveData, useService } from '@toeverything/infra';
import anime, { type AnimeInstance, type AnimeParams } from 'animejs';
import clsx from 'clsx';
import {
@@ -13,6 +13,7 @@ import {
useState,
} from 'react';
import { EditorSettingService } from '../../editor-settting';
import type { PeekViewAnimation } from '../entities/peek-view';
import * as styles from './modal-container.css';
@@ -90,7 +91,8 @@ export const PeekViewModalContainer = forwardRef<
const overlayRef = useRef<HTMLDivElement>(null);
const controlsRef = useRef<HTMLDivElement>(null);
const prevAnimeMap = useRef<Record<string, AnimeInstance | undefined>>({});
const { appSettings } = useAppSettingHelper();
const editorSettings = useService(EditorSettingService).editorSetting;
const settings = useLiveData(editorSettings.settings$);
const animateControls = useCallback((animateIn = false) => {
const controls = controlsRef.current;
@@ -320,7 +322,7 @@ export const PeekViewModalContainer = forwardRef<
>
<div
data-anime-state={animeState}
data-full-width-layout={appSettings.fullWidthLayout}
data-full-width-layout={settings.fullWidthLayout}
ref={contentClipRef}
className={styles.modalContentContainer}
>