Skip to content

Commit 2dc284b

Browse files
committed
fix(editor): should udpate icon status when formatting the entire block text
1 parent 45ae61d commit 2dc284b

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

blocksuite/affine/widget-toolbar/src/toolbar.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,14 @@ export class AffineToolbarWidget extends WidgetComponent {
109109
);
110110

111111
batch(() => {
112+
flags.toggle(Flag.Text, activated);
113+
114+
if (!activated) return;
115+
112116
const range = std.range.value ?? null;
113117
range$.value = activated ? range : null;
114118

115-
flags.toggle(Flag.Text, activated);
119+
flags.refresh(Flag.Text);
116120
});
117121
})
118122
);
@@ -240,6 +244,15 @@ export class AffineToolbarWidget extends WidgetComponent {
240244
flags.reset();
241245
return;
242246
}
247+
248+
if (
249+
flags.check(Flag.Block) &&
250+
record.type === 'update' &&
251+
record.props.key === 'text'
252+
) {
253+
flags.refresh(Flag.Block);
254+
return;
255+
}
243256
})
244257
);
245258

blocksuite/affine/widget-toolbar/src/utils.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,19 @@ export function autoUpdatePosition(
4747
const update = async () => {
4848
await Promise.race([
4949
new Promise(resolve => {
50-
if (signal.aborted) {
51-
resolve(signal.reason);
52-
return;
53-
}
54-
signal.addEventListener('abort', () => resolve(signal.reason));
50+
const listener = () => resolve(signal.reason);
51+
signal.addEventListener('abort', listener, { once: true });
52+
53+
if (signal.aborted) return;
54+
55+
signal.removeEventListener('abort', listener);
56+
resolve(null);
5557
}),
5658
toolbar.updateComplete.then(nextTick),
5759
]);
5860

61+
if (signal.aborted) return;
62+
5963
const { x, y } = await computePosition(referenceElement, toolbar, {
6064
placement,
6165
middleware: [offset(10), inline(), shift({ padding: 6 }), flip()],
@@ -75,7 +79,8 @@ export function autoUpdatePosition(
7579

7680
return () => {
7781
cleanup();
78-
!signal.aborted && abortController.abort();
82+
if (signal.aborted) return;
83+
abortController.abort();
7984
};
8085
}
8186

blocksuite/tests-legacy/e2e/format-bar.spec.ts

-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import {
2727
selectAllBlocksByKeyboard,
2828
selectAllByKeyboard,
2929
setInlineRangeInInlineEditor,
30-
setSelection,
3130
switchReadonly,
3231
type,
3332
undoByKeyboard,
@@ -332,9 +331,6 @@ test('should format quick bar be able to link text', async ({
332331
`${testInfo.title}_init.json`
333332
);
334333

335-
// FIXME: remove this
336-
await focusRichText(page);
337-
await setSelection(page, 3, 0, 3, 3);
338334
// The link button should be active after click
339335
await expect(linkBtn).toHaveAttribute('active', '');
340336
await linkBtn.click();

0 commit comments

Comments
 (0)