From d2f9816714d25fa80f6c447daebbe51d4e255352 Mon Sep 17 00:00:00 2001 From: Dolan Date: Thu, 21 Apr 2022 21:27:01 +0100 Subject: [PATCH] #1487 Create union type for IFrameOptions --- package-lock.json | 2 +- src/file/paragraph/frame/frame-properties.ts | 32 +++++++++++++------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3d1e62b37..607bad6e9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3571,7 +3571,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { "brace-expansion": "^1.1.7" diff --git a/src/file/paragraph/frame/frame-properties.ts b/src/file/paragraph/frame/frame-properties.ts index bcf3b6ac02..01a70a9579 100644 --- a/src/file/paragraph/frame/frame-properties.ts +++ b/src/file/paragraph/frame/frame-properties.ts @@ -24,15 +24,11 @@ export enum FrameWrap { TIGHT = "tight", } -export interface IFrameOptions { +interface IBaseFrameOptions { readonly anchorLock?: boolean; readonly dropCap?: DropCapType; readonly width: number; readonly height: number; - readonly position: { - readonly x: number; - readonly y: number; - }; readonly wrap?: FrameWrap; readonly lines?: number; readonly anchor: { @@ -44,19 +40,33 @@ export interface IFrameOptions { readonly vertical: number; }; readonly rule?: HeightRule; +} + +export interface IXYFrameOptions extends IBaseFrameOptions { + readonly position: { + readonly x: number; + readonly y: number; + }; +} + +export interface IAlignmentFrameOptions extends IBaseFrameOptions { readonly alignment: { readonly x: HorizontalPositionAlign; readonly y: VerticalPositionAlign; }; } +// Be wary of Typescript's Open types: +// https://stackoverflow.com/q/46370222/3481582 +export type IFrameOptions = IXYFrameOptions | IAlignmentFrameOptions; + export class FramePropertiesAttributes extends XmlAttributeComponent<{ readonly anchorLock?: boolean; readonly dropCap?: DropCapType; readonly width: number; readonly height: number; - readonly x: number; - readonly y: number; + readonly x?: number; + readonly y?: number; readonly wrap?: FrameWrap; readonly lines?: number; readonly anchorHorizontal?: FrameAnchorType; @@ -95,15 +105,15 @@ export class FrameProperties extends XmlComponent { dropCap: options.dropCap, width: options.width, height: options.height, - x: options.position.x, - y: options.position.y, + x: (options as IXYFrameOptions).position ? (options as IXYFrameOptions).position.x : undefined, + y: (options as IXYFrameOptions).position ? (options as IXYFrameOptions).position.y : undefined, anchorHorizontal: options.anchor.horizontal, anchorVertical: options.anchor.vertical, spaceHorizontal: options.space?.horizontal, spaceVertical: options.space?.vertical, rule: options.rule, - alignmentX: options.alignment.x, - alignmentY: options.alignment.y, + alignmentX: (options as IAlignmentFrameOptions).alignment.x ? (options as IAlignmentFrameOptions).alignment.x : undefined, + alignmentY: (options as IAlignmentFrameOptions).alignment.x ? (options as IAlignmentFrameOptions).alignment.y : undefined, lines: options.lines, wrap: options.wrap, }),