chore(editor): add edgeless scribbled style feature flag (#11127)

Closes: [BS-2805](https://linear.app/affine-design/issue/BS-2805/下掉线条样式切换功能,需添加-feature-flag)
This commit is contained in:
fundon
2025-03-24 12:55:00 +00:00
parent f914775885
commit d7eccd10ee
6 changed files with 34 additions and 6 deletions

View File

@@ -209,8 +209,7 @@ export const connectorToolbarConfig = {
}, },
{ {
id: 'b.style', id: 'b.style',
// TODO(@fundon): should add a feature flag when: ctx => ctx.features.getFlag('enable_edgeless_scribbled_style'),
when: false,
content(ctx) { content(ctx) {
const models = ctx.getSurfaceModelsByType(ConnectorElementModel); const models = ctx.getSurfaceModelsByType(ConnectorElementModel);
if (!models.length) return null; if (!models.length) return null;

View File

@@ -112,6 +112,12 @@ export const shapeToolbarConfig = {
const models = ctx.getSurfaceModelsByType(ShapeElementModel); const models = ctx.getSurfaceModelsByType(ShapeElementModel);
if (!models.length) return null; if (!models.length) return null;
const shapeStyle = ctx.features.getFlag(
'enable_edgeless_scribbled_style'
)
? (getMostCommonValue(models, 'shapeStyle') ?? ShapeStyle.General)
: ShapeStyle.General;
const shapeName = const shapeName =
getMostCommonValue<ShapeToolOption, 'shapeName'>( getMostCommonValue<ShapeToolOption, 'shapeName'>(
models.map(model => ({ models.map(model => ({
@@ -139,8 +145,10 @@ export const shapeToolbarConfig = {
items: ShapeComponentConfig.map(item => ({ items: ShapeComponentConfig.map(item => ({
key: item.tooltip, key: item.tooltip,
value: item.name, value: item.name,
// TODO(@fundon): should add a feature flag to switch style icon:
icon: item.generalIcon, shapeStyle === ShapeStyle.General
? item.generalIcon
: item.scribbledIcon,
disabled: item.disabled, disabled: item.disabled,
})), })),
currentValue: shapeName, currentValue: shapeName,
@@ -150,8 +158,7 @@ export const shapeToolbarConfig = {
}, },
{ {
id: 'd.style', id: 'd.style',
// TODO(@fundon): should add a feature flag when: ctx => ctx.features.getFlag('enable_edgeless_scribbled_style'),
when: false,
content(ctx) { content(ctx) {
const models = ctx.getSurfaceModelsByType(ShapeElementModel); const models = ctx.getSurfaceModelsByType(ShapeElementModel);
if (!models.length) return null; if (!models.length) return null;

View File

@@ -19,6 +19,7 @@ export interface BlockSuiteFlags {
enable_block_meta: boolean; enable_block_meta: boolean;
enable_callout: boolean; enable_callout: boolean;
enable_embed_iframe_block: boolean; enable_embed_iframe_block: boolean;
enable_edgeless_scribbled_style: boolean;
} }
export class FeatureFlagService extends StoreExtension { export class FeatureFlagService extends StoreExtension {
@@ -42,6 +43,7 @@ export class FeatureFlagService extends StoreExtension {
enable_block_meta: false, enable_block_meta: false,
enable_callout: false, enable_callout: false,
enable_embed_iframe_block: false, enable_embed_iframe_block: false,
enable_edgeless_scribbled_style: false,
}); });
setFlag(key: keyof BlockSuiteFlags, value: boolean) { setFlag(key: keyof BlockSuiteFlags, value: boolean) {

View File

@@ -264,6 +264,16 @@ export const AFFINE_FLAGS = {
configurable: isCanaryBuild, configurable: isCanaryBuild,
defaultState: false, defaultState: false,
}, },
enable_edgeless_scribbled_style: {
category: 'blocksuite',
bsFlag: 'enable_edgeless_scribbled_style',
displayName:
'com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.name',
description:
'com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.description',
configurable: isCanaryBuild,
defaultState: false,
},
} satisfies { [key in string]: FlagInfo }; } satisfies { [key in string]: FlagInfo };
// oxlint-disable-next-line no-redeclare // oxlint-disable-next-line no-redeclare

View File

@@ -5583,6 +5583,14 @@ export function useAFFiNEI18N(): {
* `Once enabled, the editor will be displayed in RTL mode.` * `Once enabled, the editor will be displayed in RTL mode.`
*/ */
["com.affine.settings.workspace.experimental-features.enable-editor-rtl.description"](): string; ["com.affine.settings.workspace.experimental-features.enable-editor-rtl.description"](): string;
/**
* `Edgeless scribbled style`
*/
["com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.name"](): string;
/**
* `Once enabled, you can use scribbled style in edgeless mode.`
*/
["com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.description"](): string;
/** /**
* `Only an owner can edit the workspace avatar and name. Changes will be shown for everyone.` * `Only an owner can edit the workspace avatar and name. Changes will be shown for everyone.`
*/ */

View File

@@ -1392,6 +1392,8 @@
"com.affine.settings.workspace.experimental-features.enable-audio-block.description": "Audio block allows you to play audio files globally and add notes to them.", "com.affine.settings.workspace.experimental-features.enable-audio-block.description": "Audio block allows you to play audio files globally and add notes to them.",
"com.affine.settings.workspace.experimental-features.enable-editor-rtl.name": "Editor RTL", "com.affine.settings.workspace.experimental-features.enable-editor-rtl.name": "Editor RTL",
"com.affine.settings.workspace.experimental-features.enable-editor-rtl.description": "Once enabled, the editor will be displayed in RTL mode.", "com.affine.settings.workspace.experimental-features.enable-editor-rtl.description": "Once enabled, the editor will be displayed in RTL mode.",
"com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.name": "Edgeless scribbled style",
"com.affine.settings.workspace.experimental-features.enable-edgeless-scribbled-style.description": "Once enabled, you can use scribbled style in edgeless mode.",
"com.affine.settings.workspace.not-owner": "Only an owner can edit the workspace avatar and name. Changes will be shown for everyone.", "com.affine.settings.workspace.not-owner": "Only an owner can edit the workspace avatar and name. Changes will be shown for everyone.",
"com.affine.settings.workspace.preferences": "Preference", "com.affine.settings.workspace.preferences": "Preference",
"com.affine.settings.workspace.billing": "Team's Billing", "com.affine.settings.workspace.billing": "Team's Billing",