From c28499bcc614ebda68a18bfac571a955fd04383c Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Fri, 4 Oct 2019 18:50:20 +0300 Subject: [PATCH] feat: support using native methods using promises instead of callbacks --- src/elements/Shape.tsx | 66 ++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/src/elements/Shape.tsx b/src/elements/Shape.tsx index abfb3f492..692906981 100644 --- a/src/elements/Shape.tsx +++ b/src/elements/Shape.tsx @@ -55,13 +55,24 @@ export default class Shape

extends Component

{ ) => { this.root && this.root.setNativeProps(props); }; - getBBox = (callback: () => void, options?: SVGBoundingBoxOptions) => { - if (!callback) { - return; - } + getBBox = (callback?: () => void, options?: SVGBoundingBoxOptions) => { const { fill = true, stroke = true, markers = true, clipped = true } = options || {}; const handle = findNodeHandle(this.root as Component); + if (!callback) { + return new Promise(resolve => { + RNSVGRenderableManager.getBBox( + handle, + { + fill, + stroke, + markers, + clipped, + }, + resolve, + ); + }); + } RNSVGRenderableManager.getBBox( handle, { @@ -72,47 +83,66 @@ export default class Shape

extends Component

{ }, callback, ); + return undefined; }; getCTM = (callback: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.getCTM(handle, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.getCTM(handle, callback); + return undefined; }; getScreenCTM = (callback: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.getScreenCTM(handle, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.getScreenCTM(handle, callback); + return undefined; }; isPointInFill = (options: DOMPointInit, callback: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.isPointInFill(handle, options, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.isPointInFill(handle, options, callback); + return undefined; }; - isPointInStroke = (options: DOMPointInit, callback: () => void) => { + isPointInStroke = (options: DOMPointInit, callback?: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.isPointInStroke(handle, options, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.isPointInStroke(handle, options, callback); + return undefined; }; - getTotalLength = (callback: () => void) => { + getTotalLength = (callback?: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.getTotalLength(handle, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.getTotalLength(handle, callback); + return undefined; }; getPointAtLength = (length: number, callback: () => void) => { + const handle = findNodeHandle(this.root as Component); if (!callback) { - return; + return new Promise(resolve => { + RNSVGRenderableManager.getPointAtLength(handle, { length }, resolve); + }); } - const handle = findNodeHandle(this.root as Component); RNSVGRenderableManager.getPointAtLength(handle, { length }, callback); + return undefined; }; }