mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-16 13:57:02 +08:00
fix(editor): adjustment of scaled and folded synced doc (#12294)
Close [BS-3418](https://linear.app/affine-design/issue/BS-3418/折叠的embed-doc调整宽度时,会出现一个最小高度,不需要这个) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for dynamically scaling the height of embedded synced document blocks, including proper handling when folding and unfolding. - Introduced a new property to track the scaled height of folded synced document blocks. - **Bug Fixes** - Improved accuracy of height calculations for synced document blocks by accounting for both viewport zoom and block scale. - **Tests** - Enhanced end-to-end tests to consistently apply scaling before running size adjustment checks. - Added a utility function to simulate scaling elements with keyboard shortcuts during test execution. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -52,23 +52,25 @@ export const EmbedSyncedDocInteraction =
|
||||
scale = newBound.w / realWidth;
|
||||
}
|
||||
|
||||
const newWidth = newBound.w / scale;
|
||||
|
||||
newBound.w =
|
||||
clamp(newWidth, constraint.minWidth, constraint.maxWidth) * scale;
|
||||
clamp(
|
||||
newBound.w / scale,
|
||||
constraint.minWidth,
|
||||
constraint.maxWidth
|
||||
) * scale;
|
||||
newBound.h =
|
||||
clamp(newBound.h, constraint.minHeight, constraint.maxHeight) *
|
||||
scale;
|
||||
clamp(
|
||||
newBound.h / scale,
|
||||
constraint.minHeight,
|
||||
constraint.maxHeight
|
||||
) * scale;
|
||||
|
||||
const newHeight = newBound.h / scale;
|
||||
|
||||
// only adjust height check the fold state
|
||||
if (originalBound.w === newBound.w) {
|
||||
let preFoldHeight = 0;
|
||||
if (newHeight === constraint.minHeight) {
|
||||
preFoldHeight = initHeight;
|
||||
}
|
||||
model.props.preFoldHeight = preFoldHeight;
|
||||
if (model.isFolded && newHeight > constraint.minHeight) {
|
||||
model.props.preFoldHeight = 0;
|
||||
} else if (!model.isFolded && newHeight <= constraint.minHeight) {
|
||||
model.props.preFoldHeight = initHeight;
|
||||
}
|
||||
|
||||
model.props.scale = scale;
|
||||
|
||||
@@ -76,6 +76,8 @@ export function calcSyncedDocFullHeight(block: BlockComponent) {
|
||||
const bottomPadding = 8;
|
||||
|
||||
return (
|
||||
(headerHeight + contentHeight + bottomPadding) / block.gfx.viewport.zoom
|
||||
(headerHeight + contentHeight + bottomPadding) /
|
||||
block.gfx.viewport.zoom /
|
||||
(block.model.props.scale ?? 1)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,10 @@ export type EmbedSyncedDocBlockProps = {
|
||||
style: EmbedCardStyle;
|
||||
caption?: string | null;
|
||||
scale?: number;
|
||||
/**
|
||||
* Record the scaled height of the synced doc block when it is folded,
|
||||
* a.k.a the fourth number of the `xywh`
|
||||
*/
|
||||
preFoldHeight?: number;
|
||||
} & ReferenceInfo &
|
||||
GfxCompatibleProps;
|
||||
|
||||
Reference in New Issue
Block a user