Jelajahi Sumber

fix text constructor groupIds & improve type safety (#1715)

David Luzar 5 tahun lalu
induk
melakukan
d1be2a5481
2 mengubah file dengan 15 tambahan dan 15 penghapusan
  1. 12 15
      src/element/newElement.ts
  2. 3 0
      src/global.d.ts

+ 12 - 15
src/element/newElement.ts

@@ -14,20 +14,16 @@ import { newElementWith } from "./mutateElement";
 import { getNewGroupIdsForDuplication } from "../groups";
 import { AppState } from "../types";
 
-type ElementConstructorOpts = {
-  x: ExcalidrawGenericElement["x"];
-  y: ExcalidrawGenericElement["y"];
-  strokeColor: ExcalidrawGenericElement["strokeColor"];
-  backgroundColor: ExcalidrawGenericElement["backgroundColor"];
-  fillStyle: ExcalidrawGenericElement["fillStyle"];
-  strokeWidth: ExcalidrawGenericElement["strokeWidth"];
-  strokeStyle: ExcalidrawGenericElement["strokeStyle"];
-  roughness: ExcalidrawGenericElement["roughness"];
-  opacity: ExcalidrawGenericElement["opacity"];
-  width?: ExcalidrawGenericElement["width"];
-  height?: ExcalidrawGenericElement["height"];
-  angle?: ExcalidrawGenericElement["angle"];
-};
+type ElementConstructorOpts = MarkOptional<
+  Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted">,
+  | "width"
+  | "height"
+  | "angle"
+  | "groupIds"
+  | "seed"
+  | "version"
+  | "versionNonce"
+>;
 
 const _newElementBase = <T extends ExcalidrawElement>(
   type: T["type"],
@@ -44,6 +40,7 @@ const _newElementBase = <T extends ExcalidrawElement>(
     width = 0,
     height = 0,
     angle = 0,
+    groupIds = [],
     ...rest
   }: ElementConstructorOpts & Omit<Partial<ExcalidrawGenericElement>, "type">,
 ) => ({
@@ -61,11 +58,11 @@ const _newElementBase = <T extends ExcalidrawElement>(
   strokeStyle,
   roughness,
   opacity,
+  groupIds,
   seed: rest.seed ?? randomInteger(),
   version: rest.version || 1,
   versionNonce: rest.versionNonce ?? 0,
   isDeleted: false as false,
-  groupIds: [],
 });
 
 export const newElement = (

+ 3 - 0
src/global.d.ts

@@ -25,3 +25,6 @@ type ResolutionType<T extends (...args: any) => any> = T extends (
 ) => Promise<infer R>
   ? R
   : any;
+
+// https://github.com/krzkaczor/ts-essentials
+type MarkOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;