@orderly.network/hooks 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/orderly/orderlyHooks.d.ts +1 -0
- package/esm/orderly/orderlyHooks.d.ts.map +1 -1
- package/esm/orderly/orderlyHooks.js +1 -0
- package/esm/orderly/orderlyHooks.js.map +1 -1
- package/esm/orderly/useCollateral.d.ts.map +1 -1
- package/esm/orderly/useCollateral.js +8 -9
- package/esm/orderly/useCollateral.js.map +1 -1
- package/esm/orderly/usePositionStream/usePositionStream.d.ts +4 -0
- package/esm/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
- package/esm/orderly/usePositionStream/usePositionStream.js +9 -1
- package/esm/orderly/usePositionStream/usePositionStream.js.map +1 -1
- package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/esm/orderly/usePrivateDataObserver.js +8 -2
- package/esm/orderly/usePrivateDataObserver.js.map +1 -1
- package/esm/orderly/useSymbolLeverage.d.ts +2 -0
- package/esm/orderly/useSymbolLeverage.d.ts.map +1 -0
- package/esm/orderly/useSymbolLeverage.js +31 -0
- package/esm/orderly/useSymbolLeverage.js.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/esm/referral/index.d.ts +3 -0
- package/esm/referral/index.d.ts.map +1 -1
- package/esm/referral/index.js +3 -0
- package/esm/referral/index.js.map +1 -1
- package/esm/referral/useCheckReferralCode.d.ts +6 -0
- package/esm/referral/useCheckReferralCode.d.ts.map +1 -0
- package/esm/referral/useCheckReferralCode.js +18 -0
- package/esm/referral/useCheckReferralCode.js.map +1 -0
- package/esm/referral/useGetReferralCode.d.ts +6 -0
- package/esm/referral/useGetReferralCode.d.ts.map +1 -0
- package/esm/referral/useGetReferralCode.js +18 -0
- package/esm/referral/useGetReferralCode.js.map +1 -0
- package/esm/referral/useReferralInfo.d.ts +10 -0
- package/esm/referral/useReferralInfo.d.ts.map +1 -0
- package/esm/referral/useReferralInfo.js +56 -0
- package/esm/referral/useReferralInfo.js.map +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/algoOrderMergeHandler.js +8 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
- package/esm/services/orderMerge/baseMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/baseMergeHandler.js +1 -1
- package/esm/services/orderMerge/baseMergeHandler.js.map +1 -1
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/regularOrderMergeHandler.js +3 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
- package/esm/services/painter/basePaint.d.ts +5 -0
- package/esm/services/painter/basePaint.d.ts.map +1 -1
- package/esm/services/painter/basePaint.js.map +1 -1
- package/esm/services/painter/dataPaint.d.ts +3 -0
- package/esm/services/painter/dataPaint.d.ts.map +1 -1
- package/esm/services/painter/dataPaint.js +88 -16
- package/esm/services/painter/dataPaint.js.map +1 -1
- package/esm/services/painter/layout.config.js +1 -1
- package/esm/services/painter/layout.config.js.map +1 -1
- package/esm/services/painter/painter.d.ts.map +1 -1
- package/esm/services/painter/painter.js +7 -2
- package/esm/services/painter/painter.js.map +1 -1
- package/esm/services/painter/qrPaint.d.ts +8 -0
- package/esm/services/painter/qrPaint.d.ts.map +1 -0
- package/esm/services/painter/qrPaint.js +39 -0
- package/esm/services/painter/qrPaint.js.map +1 -0
- package/esm/useLocalStorage.js +2 -2
- package/esm/useLocalStorage.js.map +1 -1
- package/esm/useMediaQuery.js +7 -7
- package/esm/useMediaQuery.js.map +1 -1
- package/esm/usePoster.d.ts.map +1 -1
- package/esm/usePoster.js +18 -15
- package/esm/usePoster.js.map +1 -1
- package/esm/useSessionStorage.js +2 -2
- package/esm/useSessionStorage.js.map +1 -1
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +1 -0
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/orderEntryHelper.d.ts +1 -0
- package/esm/utils/orderEntryHelper.d.ts.map +1 -1
- package/esm/utils/orderEntryHelper.js +27 -2
- package/esm/utils/orderEntryHelper.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/orderly/orderlyHooks.d.ts +1 -0
- package/lib/orderly/orderlyHooks.d.ts.map +1 -1
- package/lib/orderly/orderlyHooks.js +4 -0
- package/lib/orderly/orderlyHooks.js.map +1 -1
- package/lib/orderly/useCollateral.d.ts.map +1 -1
- package/lib/orderly/useCollateral.js +8 -9
- package/lib/orderly/useCollateral.js.map +1 -1
- package/lib/orderly/usePositionStream/usePositionStream.d.ts +4 -0
- package/lib/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
- package/lib/orderly/usePositionStream/usePositionStream.js +9 -1
- package/lib/orderly/usePositionStream/usePositionStream.js.map +1 -1
- package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/lib/orderly/usePrivateDataObserver.js +8 -2
- package/lib/orderly/usePrivateDataObserver.js.map +1 -1
- package/lib/orderly/useSymbolLeverage.d.ts +2 -0
- package/lib/orderly/useSymbolLeverage.d.ts.map +1 -0
- package/lib/orderly/useSymbolLeverage.js +41 -0
- package/lib/orderly/useSymbolLeverage.js.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/lib/referral/index.d.ts +3 -0
- package/lib/referral/index.d.ts.map +1 -1
- package/lib/referral/index.js +12 -0
- package/lib/referral/index.js.map +1 -1
- package/lib/referral/useCheckReferralCode.d.ts +6 -0
- package/lib/referral/useCheckReferralCode.d.ts.map +1 -0
- package/lib/referral/useCheckReferralCode.js +28 -0
- package/lib/referral/useCheckReferralCode.js.map +1 -0
- package/lib/referral/useGetReferralCode.d.ts +6 -0
- package/lib/referral/useGetReferralCode.d.ts.map +1 -0
- package/lib/referral/useGetReferralCode.js +28 -0
- package/lib/referral/useGetReferralCode.js.map +1 -0
- package/lib/referral/useReferralInfo.d.ts +10 -0
- package/lib/referral/useReferralInfo.d.ts.map +1 -0
- package/lib/referral/useReferralInfo.js +66 -0
- package/lib/referral/useReferralInfo.js.map +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/algoOrderMergeHandler.js +8 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
- package/lib/services/orderMerge/baseMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/baseMergeHandler.js +1 -1
- package/lib/services/orderMerge/baseMergeHandler.js.map +1 -1
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/regularOrderMergeHandler.js +3 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
- package/lib/services/painter/basePaint.d.ts +5 -0
- package/lib/services/painter/basePaint.d.ts.map +1 -1
- package/lib/services/painter/basePaint.js.map +1 -1
- package/lib/services/painter/dataPaint.d.ts +3 -0
- package/lib/services/painter/dataPaint.d.ts.map +1 -1
- package/lib/services/painter/dataPaint.js +88 -16
- package/lib/services/painter/dataPaint.js.map +1 -1
- package/lib/services/painter/layout.config.js +1 -1
- package/lib/services/painter/layout.config.js.map +1 -1
- package/lib/services/painter/painter.d.ts.map +1 -1
- package/lib/services/painter/painter.js +7 -2
- package/lib/services/painter/painter.js.map +1 -1
- package/lib/services/painter/qrPaint.d.ts +8 -0
- package/lib/services/painter/qrPaint.d.ts.map +1 -0
- package/lib/services/painter/qrPaint.js +49 -0
- package/lib/services/painter/qrPaint.js.map +1 -0
- package/lib/useLocalStorage.js +2 -2
- package/lib/useLocalStorage.js.map +1 -1
- package/lib/useMediaQuery.js +7 -7
- package/lib/useMediaQuery.js.map +1 -1
- package/lib/usePoster.d.ts.map +1 -1
- package/lib/usePoster.js +18 -15
- package/lib/usePoster.js.map +1 -1
- package/lib/useSessionStorage.js +2 -2
- package/lib/useSessionStorage.js.map +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/orderEntryHelper.d.ts +1 -0
- package/lib/utils/orderEntryHelper.d.ts.map +1 -1
- package/lib/utils/orderEntryHelper.js +29 -2
- package/lib/utils/orderEntryHelper.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +10 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/dataPaint.ts"],"sourcesContent":["import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\n\nexport class DataPaint extends BasePaint {\n private positionInfoCellWidth = 110;\n\n private DEFAULT_PROFIT_COLOR = \"rgb(0,181,159)\";\n private DEFAULT_LOSS_COLOR = \"rgb(255,103,194)\";\n\n private transformTop = 0;\n\n async draw(options: DrawOptions) {\n const needDrawDetails =\n Array.isArray(options.data?.position?.informations) &&\n (options.data?.position?.informations?.length ?? 0) > 0;\n\n // const hasMessage = !!options.data?.message;\n const hasMessage = true;\n\n this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;\n\n // If position details are not displayed, the position PNL information will be margin\n // const offsetTop = hasMessage ? 50 : 100;\n const offsetTop = 100;\n // const offsetMessage = hasMessage ? 0 : -50;\n\n if (!!options.data?.message) {\n this.drawMessage(options);\n }\n\n if (!!options.data?.position) {\n this.drawPosition(options, needDrawDetails ? 0 : offsetTop);\n }\n\n if (needDrawDetails) {\n this.drawInformations(options);\n }\n\n this.drawUnrealizedPnL(options, needDrawDetails ? 0 : offsetTop);\n\n if (!!options.data?.domain) {\n this.drawDomainUrl(options);\n }\n\n if (typeof options.data?.updateTime !== \"undefined\") {\n this.drawPositionTime(options);\n }\n }\n\n private drawMessage(options: DrawOptions) {\n // console.log(\"draw message\", options);\n\n const layout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n\n this._drawText(`\"${options.data?.message!}\"`, {\n color: layout.color,\n fontSize: this._ratio(layout.fontSize as number),\n top: this._ratio(position.top!),\n left: this._ratio(position.left!),\n textBaseline: \"top\",\n fontFamily: options.fontFamily,\n });\n }\n private drawPosition(options: DrawOptions, offsetTop: number = 0) {\n const layout = path<layoutInfo>(\n [\"layout\", \"position\"],\n options\n ) as layoutInfo;\n const { position, fontSize = 14 } = layout;\n let left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\n }\n\n private drawUnrealizedPnL(options: DrawOptions, offsetTop: number = 0) {\n // reset left value;\n const layout = path<layoutInfo>(\n [\"layout\", \"unrealizedPnl\"],\n options\n ) as layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n const { position } = layout;\n let left = this._ratio(position.left!);\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n const top = (position.top ?? 0) + offsetTop + this.transformTop;\n\n // ROI\n if (typeof options.data?.position.ROI !== \"undefined\") {\n const prefix = options.data?.position.ROI! > 0 ? \"+\" : \"\";\n prevElementBoundingBox = this._drawText(\n `${prefix}${commify(options.data?.position.ROI)}%`,\n {\n color:\n prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\n }\n );\n }\n // unrelPnL\n if (typeof options.data?.position.pnl !== \"undefined\") {\n const prefix = options.data?.position.pnl! > 0 ? \"+\" : \"\";\n let text = `${prefix}${commify(options.data?.position.pnl)} ${\n options.data?.position.currency\n }`;\n let fontWeight = 600;\n\n if (prevElementBoundingBox.width) {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(position.left!);\n fontWeight = 700;\n }\n\n const color =\n typeof options.data.position.ROI === \"undefined\"\n ? prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR\n : layout.secondaryColor;\n\n const fontSize =\n typeof options.data.position.ROI === \"undefined\"\n ? this._ratio(layout.fontSize as number)\n : this._ratio(layout.secondaryFontSize as number);\n\n prevElementBoundingBox = this._drawText(text, {\n color,\n left,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\n });\n }\n }\n\n private drawInformations(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"informations\"],\n options\n ) as layoutInfo & {\n labelColor?: string;\n };\n const { position } = layout;\n\n const isVertical = (options.data?.position.informations.length ?? 0) === 2;\n\n options.data?.position.informations.forEach((info, index) => {\n // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % 2) * this.positionInfoCellWidth;\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / 2) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\n top: this._ratio(top + 17),\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 500,\n color: layout.color as string,\n fontFamily: options.fontFamily,\n });\n });\n }\n\n private drawDomainUrl(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"domain\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n\n this._drawText(options.data?.domain!, {\n left: this._ratio(position.left!),\n top: this._ratio(top),\n fontSize: this._ratio(layout.fontSize as number),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n fontWeight: 600,\n });\n }\n\n private drawPositionTime(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n const left = position.left!;\n\n console.log(\"*******\", left, top, options.data?.updateTime);\n\n this._drawText(options.data?.updateTime!, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(layout.fontSize as number),\n color: layout.color as string,\n textAlign: layout.textAlign,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n });\n }\n\n private _drawText(\n str: string,\n options?: {\n left?: number;\n top?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: number;\n color?: string;\n textBaseline?: CanvasTextBaseline;\n textAlign?: CanvasTextAlign;\n }\n ): TextMetrics {\n let boundingBox: TextMetrics;\n const {\n left = 30,\n top = 30,\n fontSize = 13,\n fontWeight = 500,\n color = \"black\",\n textBaseline = \"middle\",\n textAlign = \"start\",\n } = options ?? {};\n\n this.ctx.save();\n // \"Nunito Sans\",-apple-system,\"San Francisco\",BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Helvetica,Arial,sans-serif\n this.ctx.font = `${fontWeight} ${fontSize}px ${options?.fontFamily}`;\n\n this.ctx.fillStyle = color;\n this.ctx.textBaseline = textBaseline;\n this.ctx.textAlign = textAlign;\n boundingBox = this.ctx.measureText(str);\n\n this.ctx.fillText(str, left, top);\n this.ctx.restore();\n\n return boundingBox;\n }\n\n private _ratio(num: number) {\n return num * this.painter.ratio;\n }\n}\n"],"names":["commify","BasePaint","path","DataPaint","positionInfoCellWidth","DEFAULT_PROFIT_COLOR","DEFAULT_LOSS_COLOR","transformTop","draw","options","needDrawDetails","Array","isArray","data","position","informations","length","hasMessage","offsetTop","message","drawMessage","drawPosition","drawInformations","drawUnrealizedPnL","domain","drawDomainUrl","updateTime","drawPositionTime","layout","_drawText","color","fontSize","_ratio","top","left","textBaseline","fontFamily","prevElementBoundingBox","side","toUpperCase","symbol","width","leverage","ROI","prefix","profitColor","lossColor","fontWeight","pnl","text","currency","secondaryColor","secondaryFontSize","isVertical","forEach","info","index","Math","floor","title","labelColor","value","painter","height","bottom","brandColor","textAlign","str","boundingBox","ctx","save","font","fillStyle","measureText","fillText","restore","num","ratio"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,OAAO,QAAQ,yBAAyB;AACjD,SAASC,SAAS,QAAiC,cAAc;AACjE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,OAAO,MAAMC,kBAAkBF;IACrBG,wBAAwB,IAAI;IAE5BC,uBAAuB,iBAAiB;IACxCC,qBAAqB,mBAAmB;IAExCC,eAAe,EAAE;IAEzB,MAAMC,KAAKC,OAAoB,EAAE;QAC/B,MAAMC,kBACJC,MAAMC,OAAO,CAACH,QAAQI,IAAI,EAAEC,UAAUC,iBACtC,AAACN,CAAAA,QAAQI,IAAI,EAAEC,UAAUC,cAAcC,UAAU,CAAA,IAAK;QAExD,8CAA8C;QAC9C,MAAMC,aAAa;QAEnB,IAAI,CAACV,YAAY,GAAGU,aAAa,IAAIP,kBAAkB,CAAC,KAAK,CAAC;QAE9D,qFAAqF;QACrF,2CAA2C;QAC3C,MAAMQ,YAAY;QAClB,8CAA8C;QAE9C,IAAI,CAAC,CAACT,QAAQI,IAAI,EAAEM,SAAS;YAC3B,IAAI,CAACC,WAAW,CAACX;QACnB;QAEA,IAAI,CAAC,CAACA,QAAQI,IAAI,EAAEC,UAAU;YAC5B,IAAI,CAACO,YAAY,CAACZ,SAASC,kBAAkB,IAAIQ;QACnD;QAEA,IAAIR,iBAAiB;YACnB,IAAI,CAACY,gBAAgB,CAACb;QACxB;QAEA,IAAI,CAACc,iBAAiB,CAACd,SAASC,kBAAkB,IAAIQ;QAEtD,IAAI,CAAC,CAACT,QAAQI,IAAI,EAAEW,QAAQ;YAC1B,IAAI,CAACC,aAAa,CAAChB;QACrB;QAEA,IAAI,OAAOA,QAAQI,IAAI,EAAEa,eAAe,aAAa;YACnD,IAAI,CAACC,gBAAgB,CAAClB;QACxB;IACF;IAEQW,YAAYX,OAAoB,EAAE;QACxC,wCAAwC;QAExC,MAAMmB,SAAS1B,KACb;YAAC;YAAU;SAAU,EACrBO;QAEF,MAAM,EAAEK,QAAQ,EAAE,GAAGc;QAErB,IAAI,CAACC,SAAS,CAAC,CAAC,CAAC,EAAEpB,QAAQI,IAAI,EAAEM,QAAS,CAAC,CAAC,EAAE;YAC5CW,OAAOF,OAAOE,KAAK;YACnBC,UAAU,IAAI,CAACC,MAAM,CAACJ,OAAOG,QAAQ;YACrCE,KAAK,IAAI,CAACD,MAAM,CAAClB,SAASmB,GAAG;YAC7BC,MAAM,IAAI,CAACF,MAAM,CAAClB,SAASoB,IAAI;YAC/BC,cAAc;YACdC,YAAY3B,QAAQ2B,UAAU;QAChC;IACF;IACQf,aAAaZ,OAAoB,EAAES,YAAoB,CAAC,EAAE;QAChE,MAAMU,SAAS1B,KACb;YAAC;YAAU;SAAW,EACtBO;QAEF,MAAM,EAAEK,QAAQ,EAAEiB,WAAW,EAAE,EAAE,GAAGH;QACpC,IAAIM,OAAO,IAAI,CAACF,MAAM,CAAClB,SAASoB,IAAI;QAEpC,IAAID,MAAML,OAAOd,QAAQ,CAACmB,GAAG,GAAIf,YAAY,IAAI,CAACX,YAAY;QAC9D,IAAI8B,yBAAsC,CAAC;QAE3C,sBAAsB;QAEtB,IAAI,OAAO5B,QAAQI,IAAI,EAAEC,SAASwB,SAAS,aAAa;YACtDD,yBAAyB,IAAI,CAACR,SAAS,CAACpB,QAAQI,IAAI,CAACC,QAAQ,CAACwB,IAAI,EAAE;gBAClER,OACErB,QAAQI,IAAI,EAAEC,SAASwB,KAAKC,kBAAkB,SAC1C,IAAI,CAAClC,oBAAoB,GACzB,IAAI,CAACC,kBAAkB;gBAC7B4B;gBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;gBACjBF,UAAU,IAAI,CAACC,MAAM,CAACD;gBACtBK,YAAY3B,QAAQ2B,UAAU;YAChC;QACF;QAEA,IAAI,OAAO3B,QAAQI,IAAI,EAAEC,SAAS0B,WAAW,aAAa;YACxDN,QAAQ,AAACG,CAAAA,uBAAuBI,KAAK,IAAI,CAAA,IAAK,IAAI,CAACT,MAAM,CAAC;YAE1D,IAAIK,uBAAuBI,KAAK,EAAE;gBAChCJ,yBAAyB,IAAI,CAACR,SAAS,CAAC,KAAK;oBAC3CC,OAAO;oBACPI;oBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;oBACjBF,UAAU,IAAI,CAACC,MAAM,CAACD;oBACtBK,YAAY3B,QAAQ2B,UAAU;gBAChC;YACF;YAEAF,QAAQ,AAACG,CAAAA,uBAAuBI,KAAK,IAAI,CAAA,IAAK,IAAI,CAACT,MAAM,CAAC;YAC1DK,yBAAyB,IAAI,CAACR,SAAS,CAACpB,QAAQI,IAAI,EAAEC,SAAS0B,QAAS;gBACtEV,OAAOF,OAAOE,KAAK;gBACnBI,MAAMA;gBACND,KAAK,IAAI,CAACD,MAAM,CAACC;gBACjBF,UAAU,IAAI,CAACC,MAAM,CAACD;gBACtBK,YAAY3B,QAAQ2B,UAAU;YAChC;QACF;QAEA,IAAI,OAAO3B,QAAQI,IAAI,EAAEC,SAAS4B,aAAa,aAAa;YAC1DR,QAAQ,AAACG,CAAAA,uBAAuBI,KAAK,IAAI,CAAA,IAAK,IAAI,CAACT,MAAM,CAAC;YAE1D,IAAIK,uBAAuBI,KAAK,EAAE;gBAChCJ,yBAAyB,IAAI,CAACR,SAAS,CAAC,KAAK;oBAC3CC,OAAO;oBACPI;oBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;oBACjBF,UAAU,IAAI,CAACC,MAAM,CAACD;oBACtBK,YAAY3B,QAAQ2B,UAAU;gBAChC;YACF;YACAF,QAAQ,AAACG,CAAAA,uBAAuBI,KAAK,IAAI,CAAA,IAAK,IAAI,CAACT,MAAM,CAAC;YAC1DK,yBAAyB,IAAI,CAACR,SAAS,CACrC,CAAC,EAAEpB,QAAQI,IAAI,EAAEC,SAAS4B,SAAS,CAAC,CAAC,EACrC;gBACEZ,OAAOF,OAAOE,KAAK;gBACnBI;gBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;gBACjBF,UAAU,IAAI,CAACC,MAAM,CAACD;gBACtBK,YAAY3B,QAAQ2B,UAAU;YAChC;QAEJ;IACF;IAEQb,kBAAkBd,OAAoB,EAAES,YAAoB,CAAC,EAAE;QACrE,oBAAoB;QACpB,MAAMU,SAAS1B,KACb;YAAC;YAAU;SAAgB,EAC3BO;QAKF,MAAM,EAAEK,QAAQ,EAAE,GAAGc;QACrB,IAAIM,OAAO,IAAI,CAACF,MAAM,CAAClB,SAASoB,IAAI;QACpC,IAAIG,yBAAsC,CAAC;QAE3C,MAAMJ,MAAM,AAACnB,CAAAA,SAASmB,GAAG,IAAI,CAAA,IAAKf,YAAY,IAAI,CAACX,YAAY;QAE/D,MAAM;QACN,IAAI,OAAOE,QAAQI,IAAI,EAAEC,SAAS6B,QAAQ,aAAa;YACrD,MAAMC,SAASnC,QAAQI,IAAI,EAAEC,SAAS6B,MAAO,IAAI,MAAM;YACvDN,yBAAyB,IAAI,CAACR,SAAS,CACrC,CAAC,EAAEe,OAAO,EAAE5C,QAAQS,QAAQI,IAAI,EAAEC,SAAS6B,KAAK,CAAC,CAAC,EAClD;gBACEb,OACEc,WAAW,MACPnC,QAAQoC,WAAW,IAAI,IAAI,CAACxC,oBAAoB,GAChDI,QAAQqC,SAAS,IAAI,IAAI,CAACxC,kBAAkB;gBAClD4B;gBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;gBAEjBF,UAAU,IAAI,CAACC,MAAM,CAACJ,OAAOG,QAAQ;gBACrCgB,YAAY;gBACZX,YAAY3B,QAAQ2B,UAAU;YAChC;QAEJ;QACA,WAAW;QACX,IAAI,OAAO3B,QAAQI,IAAI,EAAEC,SAASkC,QAAQ,aAAa;YACrD,MAAMJ,SAASnC,QAAQI,IAAI,EAAEC,SAASkC,MAAO,IAAI,MAAM;YACvD,IAAIC,OAAO,CAAC,EAAEL,OAAO,EAAE5C,QAAQS,QAAQI,IAAI,EAAEC,SAASkC,KAAK,CAAC,EAC1DvC,QAAQI,IAAI,EAAEC,SAASoC,SACxB,CAAC;YACF,IAAIH,aAAa;YAEjB,IAAIV,uBAAuBI,KAAK,EAAE;gBAChCP,QAAQ,AAACG,CAAAA,uBAAuBI,KAAK,IAAI,CAAA,IAAK,IAAI,CAACT,MAAM,CAAC;gBAC1DiB,OAAO,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC;YACpB,OAAO;gBACLf,OAAO,IAAI,CAACF,MAAM,CAAClB,SAASoB,IAAI;gBAChCa,aAAa;YACf;YAEA,MAAMjB,QACJ,OAAOrB,QAAQI,IAAI,CAACC,QAAQ,CAAC6B,GAAG,KAAK,cACjCC,WAAW,MACTnC,QAAQoC,WAAW,IAAI,IAAI,CAACxC,oBAAoB,GAChDI,QAAQqC,SAAS,IAAI,IAAI,CAACxC,kBAAkB,GAC9CsB,OAAOuB,cAAc;YAE3B,MAAMpB,WACJ,OAAOtB,QAAQI,IAAI,CAACC,QAAQ,CAAC6B,GAAG,KAAK,cACjC,IAAI,CAACX,MAAM,CAACJ,OAAOG,QAAQ,IAC3B,IAAI,CAACC,MAAM,CAACJ,OAAOwB,iBAAiB;YAE1Cf,yBAAyB,IAAI,CAACR,SAAS,CAACoB,MAAM;gBAC5CnB;gBACAI;gBACAD,KAAK,IAAI,CAACD,MAAM,CAACC;gBACjBF;gBACAgB;gBACAX,YAAY3B,QAAQ2B,UAAU;YAChC;QACF;IACF;IAEQd,iBAAiBb,OAAoB,EAAE;QAC7C,MAAMmB,SAAS1B,KACb;YAAC;YAAU;SAAe,EAC1BO;QAIF,MAAM,EAAEK,QAAQ,EAAE,GAAGc;QAErB,MAAMyB,aAAa,AAAC5C,CAAAA,QAAQI,IAAI,EAAEC,SAASC,aAAaC,UAAU,CAAA,MAAO;QAEzEP,QAAQI,IAAI,EAAEC,SAASC,aAAauC,QAAQ,CAACC,MAAMC;YACjD,8CAA8C;YAC9C,IAAItB,OAAOpB,SAASoB,IAAI,GAAI,AAACsB,QAAQ,IAAK,IAAI,CAACpD,qBAAqB;YACpE,6EAA6E;YAC7E,IAAI6B,MACF,AAACnB,SAASmB,GAAG,GACbwB,KAAKC,KAAK,CAACF,QAAQ,KAAK,KACxB,IAAI,CAACjD,YAAY;YAEnB,IAAI,CAACsB,SAAS,CAAC0B,KAAKI,KAAK,EAAE;gBACzBzB,MAAM,IAAI,CAACF,MAAM,CAACE;gBAClBD,KAAK,IAAI,CAACD,MAAM,CAACC;gBACjBF,UAAU,IAAI,CAACC,MAAM,CAAC;gBACtBF,OAAOF,OAAOgC,UAAU;gBACxBxB,YAAY3B,QAAQ2B,UAAU;YAChC;YAEA,IAAI,CAACP,SAAS,CAAC0B,KAAKM,KAAK,EAAE;gBACzB3B,MAAM,IAAI,CAACF,MAAM,CAACE;gBAClBD,KAAK,IAAI,CAACD,MAAM,CAACC,MAAM;gBACvBF,UAAU,IAAI,CAACC,MAAM,CAACJ,OAAOG,QAAQ;gBACrCgB,YAAY;gBACZjB,OAAOF,OAAOE,KAAK;gBACnBM,YAAY3B,QAAQ2B,UAAU;YAChC;QACF;IACF;IAEQX,cAAchB,OAAoB,EAAE;QAC1C,MAAMmB,SAAS1B,KACb;YAAC;YAAU;SAAS,EACpBO;QAEF,MAAM,EAAEK,QAAQ,EAAE,GAAGc;QACrB,MAAMK,MAAM,IAAI,CAAC6B,OAAO,CAACC,MAAM,GAAGjD,SAASkD,MAAM;QAEjD,IAAI,CAACnC,SAAS,CAACpB,QAAQI,IAAI,EAAEW,QAAS;YACpCU,MAAM,IAAI,CAACF,MAAM,CAAClB,SAASoB,IAAI;YAC/BD,KAAK,IAAI,CAACD,MAAM,CAACC;YACjBF,UAAU,IAAI,CAACC,MAAM,CAACJ,OAAOG,QAAQ;YACrCD,OAAOrB,QAAQwD,UAAU,IAAI,IAAI,CAAC5D,oBAAoB;YACtD+B,YAAY3B,QAAQ2B,UAAU;YAC9BD,cAAcP,OAAOO,YAAY;YACjCY,YAAY;QACd;IACF;IAEQpB,iBAAiBlB,OAAoB,EAAE;QAC7C,MAAMmB,SAAS1B,KACb;YAAC;YAAU;SAAa,EACxBO;QAEF,MAAM,EAAEK,QAAQ,EAAE,GAAGc;QACrB,MAAMK,MAAM,IAAI,CAAC6B,OAAO,CAACC,MAAM,GAAGjD,SAASkD,MAAM;QACjD,MAAM9B,OAAOpB,SAASoB,IAAI;;QAI1B,IAAI,CAACL,SAAS,CAACpB,QAAQI,IAAI,EAAEa,YAAa;YACxCQ,MAAM,IAAI,CAACF,MAAM,CAACE;YAClBD,KAAK,IAAI,CAACD,MAAM,CAACC;YACjBF,UAAU,IAAI,CAACC,MAAM,CAACJ,OAAOG,QAAQ;YACrCD,OAAOF,OAAOE,KAAK;YACnBoC,WAAWtC,OAAOsC,SAAS;YAC3B9B,YAAY3B,QAAQ2B,UAAU;YAC9BD,cAAcP,OAAOO,YAAY;QACnC;IACF;IAEQN,UACNsC,GAAW,EACX1D,OASC,EACY;QACb,IAAI2D;QACJ,MAAM,EACJlC,OAAO,EAAE,EACTD,MAAM,EAAE,EACRF,WAAW,EAAE,EACbgB,aAAa,GAAG,EAChBjB,QAAQ,OAAO,EACfK,eAAe,QAAQ,EACvB+B,YAAY,OAAO,EACpB,GAAGzD,WAAW,CAAC;QAEhB,IAAI,CAAC4D,GAAG,CAACC,IAAI;QACb,wHAAwH;QACxH,IAAI,CAACD,GAAG,CAACE,IAAI,GAAG,CAAC,EAAExB,WAAW,CAAC,EAAEhB,SAAS,GAAG,EAAEtB,SAAS2B,WAAW,CAAC;QAEpE,IAAI,CAACiC,GAAG,CAACG,SAAS,GAAG1C;QACrB,IAAI,CAACuC,GAAG,CAAClC,YAAY,GAAGA;QACxB,IAAI,CAACkC,GAAG,CAACH,SAAS,GAAGA;QACrBE,cAAc,IAAI,CAACC,GAAG,CAACI,WAAW,CAACN;QAEnC,IAAI,CAACE,GAAG,CAACK,QAAQ,CAACP,KAAKjC,MAAMD;QAC7B,IAAI,CAACoC,GAAG,CAACM,OAAO;QAEhB,OAAOP;IACT;IAEQpC,OAAO4C,GAAW,EAAE;QAC1B,OAAOA,MAAM,IAAI,CAACd,OAAO,CAACe,KAAK;IACjC;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/dataPaint.ts"],"sourcesContent":["import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\nimport { qrPaint } from \"./qrPaint\";\n\nexport class DataPaint extends BasePaint {\n private positionInfoCellWidth = 110;\n\n private DEFAULT_PROFIT_COLOR = \"rgb(0,181,159)\";\n private DEFAULT_LOSS_COLOR = \"rgb(255,103,194)\";\n\n private transformTop = 0;\n\n private QRCODE_SIZE = 56;\n\n async draw(options: DrawOptions) {\n const needDrawDetails =\n Array.isArray(options.data?.position?.informations) &&\n (options.data?.position?.informations?.length ?? 0) > 0;\n\n const hasReferral = this.hasReferral(options);\n\n // const hasMessage = !!options.data?.message;\n const hasMessage = true;\n\n this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;\n\n // If position details are not displayed, the position PNL information will be margin\n // const offsetTop = hasMessage ? 50 : 100;\n const offsetTop = 0; // 100;\n // const offsetMessage = hasMessage ? 0 : -50;\n\n if (!!options.data?.message) {\n this.drawMessage(options);\n }\n\n if (!!options.data?.position) {\n this.drawPosition(\n options,\n needDrawDetails || hasReferral ? 0 : offsetTop\n );\n }\n\n if (needDrawDetails) {\n this.drawInformations(options);\n }\n\n this.drawUnrealizedPnL(\n options,\n needDrawDetails || hasReferral ? 0 : offsetTop\n );\n\n if (!!options.data?.domain) {\n this.drawDomainUrl(options);\n }\n\n if (typeof options.data?.updateTime !== \"undefined\") {\n this.drawPositionTime(options);\n }\n\n if (typeof options.data?.referral !== \"undefined\") {\n this.drawReferralCode(options);\n }\n }\n\n private drawMessage(options: DrawOptions) {\n // console.log(\"draw message\", options);\n\n const layout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n\n this._drawText(`\"${options.data?.message!}\"`, {\n color: layout.color,\n fontSize: this._ratio(layout.fontSize as number),\n top: this._ratio(position.top!),\n left: this._ratio(position.left!),\n textBaseline: \"top\",\n fontFamily: options.fontFamily,\n });\n }\n private drawPosition(options: DrawOptions, offsetTop: number = 0) {\n const layout = path<layoutInfo>(\n [\"layout\", \"position\"],\n options\n ) as layoutInfo;\n const { position, fontSize = 14 } = layout;\n let left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\n }\n\n private drawUnrealizedPnL(options: DrawOptions, offsetTop: number = 0) {\n // reset left value;\n const layout = path<layoutInfo>(\n [\"layout\", \"unrealizedPnl\"],\n options\n ) as layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n const { position } = layout;\n let left = this._ratio(position.left!);\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n const top = (position.top ?? 0) + offsetTop + this.transformTop;\n\n // ROI\n if (typeof options.data?.position.ROI !== \"undefined\") {\n const prefix = options.data?.position.ROI! > 0 ? \"+\" : \"\";\n prevElementBoundingBox = this._drawText(\n `${prefix}${commify(options.data?.position.ROI)}%`,\n {\n color:\n prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\n }\n );\n }\n // unrelPnL\n if (typeof options.data?.position.pnl !== \"undefined\") {\n const prefix = options.data?.position.pnl! > 0 ? \"+\" : \"\";\n let text = `${prefix}${commify(options.data?.position.pnl)} ${\n options.data?.position.currency\n }`;\n let fontWeight = 600;\n\n if (prevElementBoundingBox.width) {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(position.left!);\n fontWeight = 700;\n }\n\n const color =\n typeof options.data.position.ROI === \"undefined\"\n ? prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR\n : layout.secondaryColor;\n\n const fontSize =\n typeof options.data.position.ROI === \"undefined\"\n ? this._ratio(layout.fontSize as number)\n : this._ratio(layout.secondaryFontSize as number);\n\n prevElementBoundingBox = this._drawText(text, {\n color,\n left,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\n });\n }\n }\n\n private drawInformations(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"informations\"],\n options\n ) as layoutInfo & {\n labelColor?: string;\n };\n const { position } = layout;\n\n const isVertical = (options.data?.position.informations.length ?? 0) === 2;\n\n options.data?.position.informations.forEach((info, index) => {\n // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % 2) * this.positionInfoCellWidth;\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / 2) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\n top: this._ratio(top + 17),\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 500,\n color: layout.color as string,\n fontFamily: options.fontFamily,\n });\n });\n }\n\n private drawDomainUrl(options: DrawOptions, onlyMeasure: boolean = false) {\n const layout = path<layoutInfo>(\n [\"layout\", \"domain\"],\n options\n ) as layoutInfo;\n\n const hasReferral = this.hasReferral(options);\n\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n\n return this._drawText(\n options.data?.domain!,\n {\n left: !hasReferral\n ? this._ratio(position.left!)\n : this._ratio(this.painter.width - 20),\n top: !hasReferral\n ? this._ratio(top)\n : this._ratio(this.painter.height - 16),\n fontSize: this._ratio(layout.fontSize as number),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n textAlign: !hasReferral ? layout.textAlign : \"end\",\n fontWeight: 600,\n },\n onlyMeasure\n );\n }\n\n private drawPositionTime(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const hasReferral = this.hasReferral(options);\n\n let top = this.painter.height - position.bottom!;\n let left = this._ratio(position.left!);\n\n if (hasReferral) {\n const metrics = this.drawDomainUrl(options, true);\n // console.log(\"metrics\", metrics);\n left =\n this._ratio(this.painter.width) -\n metrics.width -\n this._ratio(8 + position.left!);\n top = this.painter.height - position.bottom!;\n // console.log(\"left\", left, top, metrics.width, this._ratio(top));\n }\n\n this._drawText(\n !hasReferral\n ? options.data?.updateTime!\n : `Share on ${options.data?.updateTime} |`,\n {\n left,\n top: this._ratio(top),\n // top: 536,\n fontSize: this._ratio(layout.fontSize as number),\n color: layout.color as string,\n // color: \"red\",\n textAlign: !hasReferral ? layout.textAlign : \"end\",\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n }\n );\n }\n\n private drawReferralCode(options: DrawOptions) {\n if (!options.data?.referral) {\n return;\n }\n\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - (position.bottom ?? 0);\n\n const messageLayout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n\n const url = new URL(options.data.referral.link);\n\n const searchParams = url.searchParams;\n searchParams.append(\"ref\", options.data.referral.code);\n\n url.search = searchParams.toString();\n\n qrPaint(this.ctx, {\n size: this._ratio(this.QRCODE_SIZE),\n padding: this._ratio(2),\n left: this._ratio(position.left!),\n top: this._ratio(top - this.QRCODE_SIZE),\n data: `${url.toString()}`,\n });\n\n this._drawText(options.data.referral.slogan, {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top - this.QRCODE_SIZE),\n fontSize: this._ratio(14),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: \"top\",\n });\n\n this._drawText(\"Referral Code\", {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top - 29),\n fontSize: this._ratio(12),\n color: layout.color as string,\n fontFamily: options.fontFamily,\n textBaseline: \"middle\",\n });\n\n this._drawText(options.data.referral.code, {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top),\n fontSize: this._ratio(16),\n color: messageLayout.color as string,\n fontFamily: options.fontFamily,\n textBaseline: \"bottom\",\n });\n }\n\n private _drawText(\n str: string,\n options?: {\n left?: number;\n top?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: number;\n color?: string;\n textBaseline?: CanvasTextBaseline;\n textAlign?: CanvasTextAlign;\n },\n onlyMeasure: boolean = false\n ): TextMetrics {\n let boundingBox: TextMetrics;\n const {\n left = 30,\n top = 30,\n fontSize = 13,\n fontWeight = 500,\n color = \"black\",\n textBaseline = \"middle\",\n textAlign = \"start\",\n } = options ?? {};\n\n this.ctx.save();\n // \"Nunito Sans\",-apple-system,\"San Francisco\",BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Helvetica,Arial,sans-serif\n this.ctx.font = `${fontWeight} ${fontSize}px ${options?.fontFamily}`;\n\n this.ctx.fillStyle = color;\n this.ctx.textBaseline = textBaseline;\n this.ctx.textAlign = textAlign;\n boundingBox = this.ctx.measureText(str);\n\n if (!onlyMeasure) {\n this.ctx.fillText(str, left, top);\n }\n this.ctx.restore();\n\n return boundingBox;\n }\n\n private hasReferral(options: DrawOptions): boolean {\n return typeof options.data?.referral !== \"undefined\";\n }\n\n private _ratio(num: number) {\n return num * this.painter.ratio;\n }\n}\n"],"names":["commify","BasePaint","path","qrPaint","DataPaint","positionInfoCellWidth","DEFAULT_PROFIT_COLOR","DEFAULT_LOSS_COLOR","transformTop","QRCODE_SIZE","draw","options","needDrawDetails","Array","isArray","data","position","informations","length","hasReferral","hasMessage","offsetTop","message","drawMessage","drawPosition","drawInformations","drawUnrealizedPnL","domain","drawDomainUrl","updateTime","drawPositionTime","referral","drawReferralCode","layout","_drawText","color","fontSize","_ratio","top","left","textBaseline","fontFamily","prevElementBoundingBox","side","toUpperCase","symbol","width","leverage","ROI","prefix","profitColor","lossColor","fontWeight","pnl","text","currency","secondaryColor","secondaryFontSize","isVertical","forEach","info","index","Math","floor","title","labelColor","value","onlyMeasure","painter","height","bottom","brandColor","textAlign","metrics","messageLayout","url","URL","link","searchParams","append","code","search","toString","ctx","size","padding","slogan","str","boundingBox","save","font","fillStyle","measureText","fillText","restore","num","ratio"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/layout.config.ts"],"sourcesContent":["import { type PosterLayoutConfig } from \"./basePaint\";\n\nexport const DefaultLayoutConfig: PosterLayoutConfig = {\n domain: {\n fontSize: 13,\n // color: undefined,\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 32,\n },\n },\n message: {\n fontSize: 20,\n color: \"rgba(255, 255, 255, 0.98)\",\n textBaseline: \"top\",\n position: {\n left: 20,\n top: 16,\n },\n },\n position: {\n fontSize: 14,\n color: \"rgba(255,255,255,0.98)\",\n position: {\n left: 20,\n top: 70,\n },\n },\n unrealizedPnl: {\n fontSize: 36,\n color: \"rgba(255,255,255,0.5)\",\n secondaryColor: \"rgba(255,255,255,0.54)\",\n secondaryFontSize: 20,\n position: {\n left: 20,\n top: 110,\n },\n },\n informations: {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n labelColor: \"rgba(255,255,255,0.36)\",\n position: {\n left: 20,\n top: 150,\n },\n },\n\n updateTime: {\n fontSize: 10,\n color: \"rgba(255,255,255,0.3)\",\n
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/layout.config.ts"],"sourcesContent":["import { type PosterLayoutConfig } from \"./basePaint\";\n\nexport const DefaultLayoutConfig: PosterLayoutConfig = {\n domain: {\n fontSize: 13,\n // color: undefined,\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 32,\n },\n },\n message: {\n fontSize: 20,\n color: \"rgba(255, 255, 255, 0.98)\",\n textBaseline: \"top\",\n position: {\n left: 20,\n top: 16,\n },\n },\n position: {\n fontSize: 14,\n color: \"rgba(255,255,255,0.98)\",\n position: {\n left: 20,\n top: 70,\n },\n },\n unrealizedPnl: {\n fontSize: 36,\n color: \"rgba(255,255,255,0.5)\",\n secondaryColor: \"rgba(255,255,255,0.54)\",\n secondaryFontSize: 20,\n position: {\n left: 20,\n top: 110,\n },\n },\n informations: {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n labelColor: \"rgba(255,255,255,0.36)\",\n position: {\n left: 20,\n top: 150,\n },\n },\n\n updateTime: {\n fontSize: 10,\n color: \"rgba(255,255,255,0.3)\",\n textAlign: \"start\",\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 17,\n },\n },\n};\n"],"names":["DefaultLayoutConfig","domain","fontSize","textBaseline","position","left","bottom","message","color","top","unrealizedPnl","secondaryColor","secondaryFontSize","informations","labelColor","updateTime","textAlign"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,sBAA0C;IACrDC,QAAQ;QACNC,UAAU;QACV,oBAAoB;QACpBC,cAAc;QACdC,UAAU;YACRC,MAAM;YACNC,QAAQ;QACV;IACF;IACAC,SAAS;QACPL,UAAU;QACVM,OAAO;QACPL,cAAc;QACdC,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAL,UAAU;QACRF,UAAU;QACVM,OAAO;QACPJ,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAC,eAAe;QACbR,UAAU;QACVM,OAAO;QACPG,gBAAgB;QAChBC,mBAAmB;QACnBR,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAI,cAAc;QACZX,UAAU;QACVM,OAAO;QACPM,YAAY;QACZV,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IAEAM,YAAY;QACVb,UAAU;QACVM,OAAO;QACPQ,WAAW;QACXb,cAAc;QACdC,UAAU;YACRC,MAAM;YACNC,QAAQ;QACV;IACF;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/services/painter/painter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IAOtB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,GAAG,CAA2B;IACtC,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,KAAK,EAAE,MAAM,CAAC;gBAGJ,MAAM,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;KACf;
|
|
1
|
+
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/services/painter/painter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IAOtB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,GAAG,CAA2B;IACtC,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,KAAK,EAAE,MAAM,CAAC;gBAGJ,MAAM,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;KACf;IA8BH,IAAI,CAAC,OAAO,EAAE,WAAW;IAInB,KAAK,CAAC,OAAO,EAAE,WAAW;CAWjC"}
|
|
@@ -15,8 +15,13 @@ export class PosterPainter {
|
|
|
15
15
|
this.ctx = this.canvas.getContext("2d");
|
|
16
16
|
this.width = this.canvas.width;
|
|
17
17
|
this.height = this.canvas.height;
|
|
18
|
-
this.ratio =
|
|
19
|
-
|
|
18
|
+
// this.ratio =
|
|
19
|
+
// options?.ratio ||
|
|
20
|
+
// (typeof window !== "undefined"
|
|
21
|
+
// ? Math.ceil(window.devicePixelRatio)
|
|
22
|
+
// : 1) ||
|
|
23
|
+
// 1;
|
|
24
|
+
this.ratio = Math.max(options?.ratio || 1, typeof window !== "undefined" ? Math.ceil(window.devicePixelRatio) : 1);
|
|
20
25
|
// render to high resolution
|
|
21
26
|
this.canvas.width = this.width * this.ratio;
|
|
22
27
|
this.canvas.height = this.height * this.ratio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/painter.ts"],"sourcesContent":["import { BackgroundPaint } from \"./backgroundPaint\";\nimport { DrawOptions } from \"./basePaint\";\nimport { DataPaint } from \"./dataPaint\";\nexport class PosterPainter {\n private ctx: CanvasRenderingContext2D;\n width: number = 0;\n height: number = 0;\n ratio: number;\n // resourceManager: Resource;\n constructor(\n private canvas: HTMLCanvasElement,\n options?: {\n ratio: number;\n }\n ) {\n // console.log(\"PosterPainter constructor\");\n\n this.ctx = this.canvas.getContext(\"2d\")!;\n\n this.width = this.canvas.width;\n this.height = this.canvas.height;\n\n this.ratio =\n
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/painter.ts"],"sourcesContent":["import { BackgroundPaint } from \"./backgroundPaint\";\nimport { DrawOptions } from \"./basePaint\";\nimport { DataPaint } from \"./dataPaint\";\nexport class PosterPainter {\n private ctx: CanvasRenderingContext2D;\n width: number = 0;\n height: number = 0;\n ratio: number;\n // resourceManager: Resource;\n constructor(\n private canvas: HTMLCanvasElement,\n options?: {\n ratio: number;\n }\n ) {\n // console.log(\"PosterPainter constructor\");\n\n this.ctx = this.canvas.getContext(\"2d\")!;\n\n this.width = this.canvas.width;\n this.height = this.canvas.height;\n\n // this.ratio =\n // options?.ratio ||\n // (typeof window !== \"undefined\"\n // ? Math.ceil(window.devicePixelRatio)\n // : 1) ||\n // 1;\n\n this.ratio = Math.max(\n options?.ratio || 1,\n typeof window !== \"undefined\" ? Math.ceil(window.devicePixelRatio) : 1\n );\n\n // render to high resolution\n this.canvas.width = this.width * this.ratio;\n this.canvas.height = this.height * this.ratio;\n this.canvas.style.width = this.width + \"px\";\n this.canvas.style.height = this.height + \"px\";\n\n //\n }\n\n draw(options: DrawOptions) {\n requestAnimationFrame(() => this._draw.bind(this)(options));\n }\n\n async _draw(options: DrawOptions) {\n if (this.ctx === null) return;\n // console.log(\"============ DRAW ============\");\n // this.ctx.font = options.fontFamily!;\n // this.ctx.clearRect(0, 0, this.width * this.ratio, this.height * this.ratio);\n // start draw\n // background\n await new BackgroundPaint(this.ctx, this).draw(options);\n // data paint\n await new DataPaint(this.ctx, this).draw(options);\n }\n}\n"],"names":["BackgroundPaint","DataPaint","PosterPainter","ctx","width","height","ratio","constructor","canvas","options","getContext","Math","max","window","ceil","devicePixelRatio","style","draw","requestAnimationFrame","_draw","bind"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,eAAe,QAAQ,oBAAoB;AAEpD,SAASC,SAAS,QAAQ,cAAc;AACxC,OAAO,MAAMC;;IACHC,IAA8B;IACtCC,MAAkB;IAClBC,OAAmB;IACnBC,MAAc;IACd,6BAA6B;IAC7BC,YACE,AAAQC,MAAyB,EACjCC,OAEC,CACD;aAJQD,SAAAA;aALVJ,QAAgB;aAChBC,SAAiB;QASf,4CAA4C;QAE5C,IAAI,CAACF,GAAG,GAAG,IAAI,CAACK,MAAM,CAACE,UAAU,CAAC;QAElC,IAAI,CAACN,KAAK,GAAG,IAAI,CAACI,MAAM,CAACJ,KAAK;QAC9B,IAAI,CAACC,MAAM,GAAG,IAAI,CAACG,MAAM,CAACH,MAAM;QAEhC,eAAe;QACf,sBAAsB;QACtB,mCAAmC;QACnC,2CAA2C;QAC3C,cAAc;QACd,OAAO;QAEP,IAAI,CAACC,KAAK,GAAGK,KAAKC,GAAG,CACnBH,SAASH,SAAS,GAClB,OAAOO,WAAW,cAAcF,KAAKG,IAAI,CAACD,OAAOE,gBAAgB,IAAI;QAGvE,4BAA4B;QAC5B,IAAI,CAACP,MAAM,CAACJ,KAAK,GAAG,IAAI,CAACA,KAAK,GAAG,IAAI,CAACE,KAAK;QAC3C,IAAI,CAACE,MAAM,CAACH,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG,IAAI,CAACC,KAAK;QAC7C,IAAI,CAACE,MAAM,CAACQ,KAAK,CAACZ,KAAK,GAAG,IAAI,CAACA,KAAK,GAAG;QACvC,IAAI,CAACI,MAAM,CAACQ,KAAK,CAACX,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG;IAEzC,EAAE;IACJ;IAEAY,KAAKR,OAAoB,EAAE;QACzBS,sBAAsB,IAAM,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC,IAAI,EAAEX;IACpD;IAEA,MAAMU,MAAMV,OAAoB,EAAE;QAChC,IAAI,IAAI,CAACN,GAAG,KAAK,MAAM;QACvB,iDAAiD;QACjD,uCAAuC;QACvC,+EAA+E;QAC/E,aAAa;QACb,aAAa;QACb,MAAM,IAAIH,gBAAgB,IAAI,CAACG,GAAG,EAAE,IAAI,EAAEc,IAAI,CAACR;QAC/C,aAAa;QACb,MAAM,IAAIR,UAAU,IAAI,CAACE,GAAG,EAAE,IAAI,EAAEc,IAAI,CAACR;IAC3C;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/qrPaint.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QACb,wBAAwB,WACpB;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,SAgDF,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//@ts-ignore
|
|
2
|
+
// import QRious from "./qrious";
|
|
3
|
+
import { qrcode } from "@akamfoad/qr";
|
|
4
|
+
export const qrPaint = (ctx, options)=>{
|
|
5
|
+
const { size, left, top, data, padding } = options;
|
|
6
|
+
const qr = qrcode(data);
|
|
7
|
+
const canvas = document.createElement("canvas");
|
|
8
|
+
canvas.width = size;
|
|
9
|
+
canvas.height = size;
|
|
10
|
+
const ctx2 = canvas.getContext("2d");
|
|
11
|
+
// const qr = new QRious({
|
|
12
|
+
// value: data,
|
|
13
|
+
// size: 200,
|
|
14
|
+
// padding: 5,
|
|
15
|
+
// level: "L",
|
|
16
|
+
// });
|
|
17
|
+
const cells = qr.modules;
|
|
18
|
+
if (!cells) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const tileW = size / cells.length;
|
|
22
|
+
const tileH = size / cells.length;
|
|
23
|
+
for(let r = 0; r < cells.length; ++r){
|
|
24
|
+
const row = cells[r];
|
|
25
|
+
for(let c = 0; c < row.length; ++c){
|
|
26
|
+
ctx2.fillStyle = row[c] ? "#000" : "#fff";
|
|
27
|
+
const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);
|
|
28
|
+
const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);
|
|
29
|
+
ctx2.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
ctx.save();
|
|
33
|
+
ctx.fillStyle = "#fff";
|
|
34
|
+
ctx.fillRect(left - padding, top - padding, size + padding * 2, size + padding * 2);
|
|
35
|
+
ctx.restore();
|
|
36
|
+
ctx.drawImage(canvas, left, top, size, size);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=qrPaint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/qrPaint.ts"],"sourcesContent":["//@ts-ignore\n// import QRious from \"./qrious\";\nimport { qrcode } from \"@akamfoad/qr\";\n\nexport const qrPaint = (\n ctx: CanvasRenderingContext2D,\n options: {\n size: number;\n padding: number;\n left: number;\n top: number;\n data: string;\n }\n) => {\n const { size, left, top, data, padding } = options;\n\n const qr = qrcode(data);\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n const ctx2 = canvas.getContext(\"2d\");\n\n // const qr = new QRious({\n // value: data,\n // size: 200,\n // padding: 5,\n // level: \"L\",\n // });\n\n const cells = qr.modules;\n\n if (!cells) {\n return;\n }\n\n const tileW = size / cells.length;\n const tileH = size / cells.length;\n\n for (let r = 0; r < cells.length; ++r) {\n const row = cells[r];\n for (let c = 0; c < row.length; ++c) {\n ctx2!.fillStyle = row[c] ? \"#000\" : \"#fff\";\n const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);\n const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);\n ctx2!.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);\n }\n }\n\n ctx.save();\n ctx.fillStyle = \"#fff\";\n\n ctx.fillRect(\n left - padding,\n top - padding,\n size + padding * 2,\n size + padding * 2\n );\n ctx.restore();\n\n ctx.drawImage(canvas, left, top, size, size);\n};\n"],"names":["qrcode","qrPaint","ctx","options","size","left","top","data","padding","qr","canvas","document","createElement","width","height","ctx2","getContext","cells","modules","tileW","length","tileH","r","row","c","fillStyle","w","Math","ceil","floor","h","fillRect","round","save","restore","drawImage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAY;AACZ,iCAAiC;AACjC,SAASA,MAAM,QAAQ,eAAe;AAEtC,OAAO,MAAMC,UAAU,CACrBC,KACAC;IAQA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGL;IAE3C,MAAMM,KAAKT,OAAOO;IAClB,MAAMG,SAASC,SAASC,aAAa,CAAC;IACtCF,OAAOG,KAAK,GAAGT;IACfM,OAAOI,MAAM,GAAGV;IAChB,MAAMW,OAAOL,OAAOM,UAAU,CAAC;IAE/B,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,MAAM;IAEN,MAAMC,QAAQR,GAAGS,OAAO;IAExB,IAAI,CAACD,OAAO;QACV;IACF;IAEA,MAAME,QAAQf,OAAOa,MAAMG,MAAM;IACjC,MAAMC,QAAQjB,OAAOa,MAAMG,MAAM;IAEjC,IAAK,IAAIE,IAAI,GAAGA,IAAIL,MAAMG,MAAM,EAAE,EAAEE,EAAG;QACrC,MAAMC,MAAMN,KAAK,CAACK,EAAE;QACpB,IAAK,IAAIE,IAAI,GAAGA,IAAID,IAAIH,MAAM,EAAE,EAAEI,EAAG;YACnCT,KAAMU,SAAS,GAAGF,GAAG,CAACC,EAAE,GAAG,SAAS;YACpC,MAAME,IAAIC,KAAKC,IAAI,CAAC,AAACJ,CAAAA,IAAI,CAAA,IAAKL,SAASQ,KAAKE,KAAK,CAACL,IAAIL;YACtD,MAAMW,IAAIH,KAAKC,IAAI,CAAC,AAACN,CAAAA,IAAI,CAAA,IAAKD,SAASM,KAAKE,KAAK,CAACP,IAAID;YACtDN,KAAMgB,QAAQ,CAACJ,KAAKK,KAAK,CAACR,IAAIL,QAAQQ,KAAKK,KAAK,CAACV,IAAID,QAAQK,GAAGI;QAClE;IACF;IAEA5B,IAAI+B,IAAI;IACR/B,IAAIuB,SAAS,GAAG;IAEhBvB,IAAI6B,QAAQ,CACV1B,OAAOG,SACPF,MAAME,SACNJ,OAAOI,UAAU,GACjBJ,OAAOI,UAAU;IAEnBN,IAAIgC,OAAO;IAEXhC,IAAIiC,SAAS,CAACzB,QAAQL,MAAMC,KAAKF,MAAMA;AACzC,EAAE"}
|
package/esm/useLocalStorage.js
CHANGED
|
@@ -66,9 +66,9 @@ export function useLocalStorage(key, initialValue) {
|
|
|
66
66
|
}
|
|
67
67
|
setStoredValue(readValue());
|
|
68
68
|
};
|
|
69
|
-
window
|
|
69
|
+
window?.addEventListener?.("storage", handleStorageChange);
|
|
70
70
|
return ()=>{
|
|
71
|
-
window
|
|
71
|
+
window?.removeEventListener?.("storage", handleStorageChange);
|
|
72
72
|
};
|
|
73
73
|
}, [
|
|
74
74
|
key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useLocalStorage.ts"],"sourcesContent":["// https://usehooks-ts.com/react-hook/use-local-storage\nimport { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [any, (value: T) => void] {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.localStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: React.Dispatch<T> = useCallback(\n (value: T) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(newValue));\n // dispath event\n window.dispatchEvent(new Event(\"storage\"));\n\n // Save state\n setStoredValue(() => newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n // window.dispatchEvent(new Event('local-storage'))\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error);\n }\n },\n [storedValue]\n );\n\n useEffect(() => {\n setStoredValue(readValue());\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n useEffect(() => {\n const handleStorageChange = (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n };\n\n window
|
|
1
|
+
{"version":3,"sources":["../src/useLocalStorage.ts"],"sourcesContent":["// https://usehooks-ts.com/react-hook/use-local-storage\nimport { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [any, (value: T) => void] {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.localStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: React.Dispatch<T> = useCallback(\n (value: T) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(newValue));\n // dispath event\n window.dispatchEvent(new Event(\"storage\"));\n\n // Save state\n setStoredValue(() => newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n // window.dispatchEvent(new Event('local-storage'))\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error);\n }\n },\n [storedValue]\n );\n\n useEffect(() => {\n setStoredValue(readValue());\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n useEffect(() => {\n const handleStorageChange = (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n };\n\n window?.addEventListener?.(\"storage\", handleStorageChange);\n\n return () => {\n window?.removeEventListener?.(\"storage\", handleStorageChange);\n };\n }, [key]);\n\n return [storedValue, setValue];\n}\n"],"names":["useCallback","useEffect","useState","parseJSON","useLocalStorage","key","initialValue","readValue","window","item","localStorage","getItem","error","storedValue","setStoredValue","setValue","value","newValue","Function","setItem","JSON","stringify","dispatchEvent","Event","handleStorageChange","event","addEventListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,uDAAuD;AACvD,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AACzD,SAASC,SAAS,QAAQ,eAAe;AAEzC,OAAO,SAASC,gBACdC,GAAW,EACXC,YAAe;IAEf,8BAA8B;IAC9B,2CAA2C;IAC3C,MAAMC,YAAYP,YAAY;QAC5B,8DAA8D;QAC9D,IAAI,OAAOQ,WAAW,aAAa;YACjC,OAAOF;QACT;QAEA,IAAI;YACF,MAAMG,OAAOD,OAAOE,YAAY,CAACC,OAAO,CAACN;YACzC,OAAOI,OAAQN,UAAUM,QAAcH;QACzC,EAAE,OAAOM,OAAO;;YAEd,OAAON;QACT;IACF,GAAG;QAACA;QAAcD;KAAI;IAEtB,2BAA2B;IAC3B,yEAAyE;IACzE,MAAM,CAACQ,aAAaC,eAAe,GAAGZ,SAAYK;IAElD,kEAAkE;IAClE,8CAA8C;IAC9C,MAAMQ,WAA8Bf,YAClC,CAACgB;QACC,8DAA8D;QAC9D,IAAI,OAAOR,WAAW,aAAa;;QAInC;QAEA,IAAI;YACF,mEAAmE;YACnE,MAAMS,WAAWD,iBAAiBE,WAAWF,MAAMH,eAAeG;YAElE,wBAAwB;YACxBR,OAAOE,YAAY,CAACS,OAAO,CAACd,KAAKe,KAAKC,SAAS,CAACJ;YAChD,gBAAgB;YAChBT,OAAOc,aAAa,CAAC,IAAIC,MAAM;YAE/B,aAAa;YACbT,eAAe,IAAMG;QAErB,wEAAwE;QACxE,mDAAmD;QACrD,EAAE,OAAOL,OAAO;;QAEhB;IACF,GACA;QAACC;KAAY;IAGfZ,UAAU;QACRa,eAAeP;IACjB,GAAG,EAAE;IAEL,2CAA2C;IAC3C,6CAA6C;IAC7C,iFAAiF;IACjF,eAAe;IACf,QAAQ;IACR,kCAAkC;IAClC,OAAO;IACP,sBAAsB;IACtB,IAAI;IAEJN,UAAU;QACR,MAAMuB,sBAAsB,CAACC;YAC3B,IAAI,AAACA,OAAwBpB,OAAO,AAACoB,MAAuBpB,GAAG,KAAKA,KAAK;gBACvE;YACF;YACAS,eAAeP;QACjB;QAEAC,QAAQkB,mBAAmB,WAAWF;QAEtC,OAAO;YACLhB,QAAQmB,sBAAsB,WAAWH;QAC3C;IACF,GAAG;QAACnB;KAAI;IAER,OAAO;QAACQ;QAAaE;KAAS;AAChC"}
|
package/esm/useMediaQuery.js
CHANGED
|
@@ -12,20 +12,20 @@ export function useMediaQuery(query) {
|
|
|
12
12
|
setMatches(getMatches(query));
|
|
13
13
|
}
|
|
14
14
|
useEffect(()=>{
|
|
15
|
-
const matchMedia = window
|
|
15
|
+
const matchMedia = window?.matchMedia(query);
|
|
16
16
|
// Triggered at the first client-side load and if query changes
|
|
17
17
|
handleChange();
|
|
18
18
|
// Listen matchMedia
|
|
19
|
-
if (matchMedia
|
|
20
|
-
matchMedia
|
|
19
|
+
if (matchMedia?.addListener) {
|
|
20
|
+
matchMedia?.addListener(handleChange);
|
|
21
21
|
} else {
|
|
22
|
-
matchMedia
|
|
22
|
+
matchMedia?.addEventListener?.("change", handleChange);
|
|
23
23
|
}
|
|
24
24
|
return ()=>{
|
|
25
|
-
if (matchMedia
|
|
26
|
-
matchMedia
|
|
25
|
+
if (matchMedia?.removeListener) {
|
|
26
|
+
matchMedia?.removeListener(handleChange);
|
|
27
27
|
} else {
|
|
28
|
-
matchMedia
|
|
28
|
+
matchMedia?.removeEventListener?.("change", handleChange);
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/esm/useMediaQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useMediaQuery.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window
|
|
1
|
+
{"version":3,"sources":["../src/useMediaQuery.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window?.matchMedia(query);\n\n // Triggered at the first client-side load and if query changes\n handleChange();\n\n // Listen matchMedia\n if (matchMedia?.addListener) {\n matchMedia?.addListener(handleChange);\n } else {\n matchMedia?.addEventListener?.(\"change\", handleChange);\n }\n\n return () => {\n if (matchMedia?.removeListener) {\n matchMedia?.removeListener(handleChange);\n } else {\n matchMedia?.removeEventListener?.(\"change\", handleChange);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n return matches;\n}\n"],"names":["useEffect","useState","useMediaQuery","query","getMatches","window","matchMedia","matches","setMatches","handleChange","addListener","addEventListener","removeListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,OAAO,SAASC,cAAcC,KAAa;IACzC,MAAMC,aAAa,CAACD;QAClB,sBAAsB;QACtB,IAAI,OAAOE,WAAW,aAAa;YACjC,OAAOA,OAAOC,UAAU,CAACH,OAAOI,OAAO;QACzC;QACA,OAAO;IACT;IAEA,MAAM,CAACA,SAASC,WAAW,GAAGP,SAAkBG,WAAWD;IAE3D,SAASM;QACPD,WAAWJ,WAAWD;IACxB;IAEAH,UAAU;QACR,MAAMM,aAAaD,QAAQC,WAAWH;QAEtC,+DAA+D;QAC/DM;QAEA,oBAAoB;QACpB,IAAIH,YAAYI,aAAa;YAC3BJ,YAAYI,YAAYD;QAC1B,OAAO;YACLH,YAAYK,mBAAmB,UAAUF;QAC3C;QAEA,OAAO;YACL,IAAIH,YAAYM,gBAAgB;gBAC9BN,YAAYM,eAAeH;YAC7B,OAAO;gBACLH,YAAYO,sBAAsB,UAAUJ;YAC9C;QACF;IACA,uDAAuD;IACzD,GAAG;QAACN;KAAM;IAEV,OAAOI;AACT"}
|
package/esm/usePoster.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePoster.d.ts","sourceRoot":"","sources":["../src/usePoster.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,SAId,WAAW,YACP;IACR;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;
|
|
1
|
+
{"version":3,"file":"usePoster.d.ts","sourceRoot":"","sources":["../src/usePoster.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,SAId,WAAW,YACP;IACR;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;IAiHC;;OAEG;wBAnDa,iBAAiB,GAAG,IAAI;IAqDxC;;OAEG;gCA9EqB,MAAM,mBAAmB,MAAM;IAgFvD;;OAEG;6BAvEK,MAAM,mBAAmB,MAAM,KAAG,QAAQ,IAAI,GAAG,IAAI,CAAC;IAyE9D;;OAEG;kCApDQ,MAAM,SAAQ,MAAM,mBAAiC,MAAM;IAsDtE;;OAEG;;;CAIN,CAAC"}
|
package/esm/usePoster.js
CHANGED
|
@@ -23,29 +23,32 @@ import { SDKError } from "@orderly.network/types";
|
|
|
23
23
|
const [target, setTarget] = useState(null);
|
|
24
24
|
useEffect(()=>{
|
|
25
25
|
// Create the painter instance
|
|
26
|
-
if (target
|
|
27
|
-
painterRef.current
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
fontFamily: "Manrope"
|
|
34
|
-
}, data));
|
|
35
|
-
}
|
|
36
|
-
}, [
|
|
37
|
-
target
|
|
38
|
-
]);
|
|
39
|
-
useEffect(()=>{
|
|
40
|
-
if (painterRef.current) {
|
|
26
|
+
if (target) {
|
|
27
|
+
if (!painterRef.current) {
|
|
28
|
+
painterRef.current = new PosterPainter(target, {
|
|
29
|
+
ratio: options?.ratio || 1,
|
|
30
|
+
...options
|
|
31
|
+
});
|
|
32
|
+
}
|
|
41
33
|
painterRef.current.draw(mergeDeepRight({
|
|
42
34
|
layout: DefaultLayoutConfig,
|
|
43
35
|
fontFamily: "Manrope"
|
|
44
36
|
}, data));
|
|
45
37
|
}
|
|
46
38
|
}, [
|
|
39
|
+
target,
|
|
47
40
|
data
|
|
48
41
|
]);
|
|
42
|
+
// useEffect(() => {
|
|
43
|
+
// if (painterRef.current) {
|
|
44
|
+
// painterRef.current.draw(
|
|
45
|
+
// mergeDeepRight<Partial<DrawOptions>, DrawOptions>(
|
|
46
|
+
// { layout: DefaultLayoutConfig, fontFamily: "Manrope" },
|
|
47
|
+
// data
|
|
48
|
+
// )
|
|
49
|
+
// );
|
|
50
|
+
// }
|
|
51
|
+
// }, [data]);
|
|
49
52
|
const toDataURL = (type, encoderOptions)=>{
|
|
50
53
|
if (!target) {
|
|
51
54
|
throw new SDKError("The ref must be a canvas element");
|
package/esm/usePoster.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/usePoster.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { mergeDeepRight } from \"ramda\";\nimport { PosterPainter } from \"./services/painter/painter\";\nimport { type DrawOptions } from \"./services/painter/basePaint\";\nimport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nimport { SDKError } from \"@orderly.network/types\";\n\n/**\n * Generates a poster image based on position information. You can set the size, background color, font color, font size, and content position of the poster.\n * @example\n * ```tsx\n * const { ref, toDataURL, toBlob, download, copy } = usePoster({\n * backgroundColor: \"#0b8c70\",\n * backgroundImg: \"/images/poster_bg.png\",\n * color: \"rgba(255, 255, 255, 0.98)\",\n * profitColor: \"rgb(0,181,159)\",\n * ...\n * });\n */\nexport const usePoster = (\n /**\n * The options to draw the poster\n */\n data: DrawOptions,\n options?: {\n /**\n * The ratio of the poster\n */\n ratio?: number;\n }\n) => {\n const [error, setError] = useState<Error | null>(null);\n const [canCopy, setCanCopy] = useState<boolean>(\n () => typeof navigator.clipboard !== \"undefined\"\n );\n\n const painterRef = useRef<PosterPainter | null>(null);\n\n const [target, setTarget] = useState<HTMLCanvasElement | null>(null);\n\n useEffect(() => {\n // Create the painter instance\n if (target
|
|
1
|
+
{"version":3,"sources":["../src/usePoster.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { mergeDeepRight } from \"ramda\";\nimport { PosterPainter } from \"./services/painter/painter\";\nimport { type DrawOptions } from \"./services/painter/basePaint\";\nimport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nimport { SDKError } from \"@orderly.network/types\";\n\n/**\n * Generates a poster image based on position information. You can set the size, background color, font color, font size, and content position of the poster.\n * @example\n * ```tsx\n * const { ref, toDataURL, toBlob, download, copy } = usePoster({\n * backgroundColor: \"#0b8c70\",\n * backgroundImg: \"/images/poster_bg.png\",\n * color: \"rgba(255, 255, 255, 0.98)\",\n * profitColor: \"rgb(0,181,159)\",\n * ...\n * });\n */\nexport const usePoster = (\n /**\n * The options to draw the poster\n */\n data: DrawOptions,\n options?: {\n /**\n * The ratio of the poster\n */\n ratio?: number;\n }\n) => {\n const [error, setError] = useState<Error | null>(null);\n const [canCopy, setCanCopy] = useState<boolean>(\n () => typeof navigator.clipboard !== \"undefined\"\n );\n\n const painterRef = useRef<PosterPainter | null>(null);\n\n const [target, setTarget] = useState<HTMLCanvasElement | null>(null);\n\n useEffect(() => {\n // Create the painter instance\n if (target) {\n if (!painterRef.current) {\n painterRef.current = new PosterPainter(target, {\n ratio: options?.ratio || 1,\n ...options,\n });\n }\n\n painterRef.current.draw(\n mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n data\n )\n );\n }\n }, [target, data]);\n\n // useEffect(() => {\n // if (painterRef.current) {\n // painterRef.current.draw(\n // mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n // { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n // data\n // )\n // );\n // }\n // }, [data]);\n\n const toDataURL = (type?: string, encoderOptions?: number) => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n return target.toDataURL(type, encoderOptions);\n };\n\n /**\n * Converts the poster to a blob\n */\n const toBlob = useCallback(\n (type?: string, encoderOptions?: number): Promise<Blob | null> => {\n return new Promise<Blob | null>((resolve) => {\n if (!target) {\n resolve(null);\n return;\n }\n target.toBlob(resolve, type, encoderOptions);\n });\n },\n [target]\n );\n\n const ref = (ref: HTMLCanvasElement | null) => {\n if (!ref) return;\n if (ref.tagName.toUpperCase() !== \"CANVAS\") {\n // throw new Error(\"The ref must be a canvas element\");\n setError(new SDKError(\"The ref must be a canvas element\"));\n return;\n }\n setTarget(ref);\n };\n\n const download = useCallback(\n (filename: string, type: string = \"image/png\", encoderOptions?: number) => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n const img = new Image();\n img.src = target.toDataURL(type, encoderOptions);\n const link = document.createElement(\"a\");\n link.href = img.src;\n link.download = filename;\n link.click();\n },\n [target]\n );\n\n const copy = useCallback(() => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n // copy image to clipboard\n return new Promise<void>((resolve, reject) => {\n if (!navigator.clipboard) {\n reject(new SDKError(\"Clipboard API is not supported\"));\n return;\n }\n target.toBlob((blob) => {\n if (!blob) {\n reject(new SDKError(\"Failed to create blob\"));\n return;\n }\n return navigator.clipboard\n .write([new ClipboardItem({ [blob.type]: blob })])\n .then(resolve, reject);\n });\n });\n }, [target]);\n\n return {\n error,\n /**\n * The ref to the canvas element, you should pass this ref to the canvas element\n */\n ref,\n /**\n * Converts the poster to a data URL\n */\n toDataURL,\n /**\n * Converts the poster to a blob\n */\n toBlob,\n /**\n * Downloads the poster as an image\n */\n download,\n /**\n * Browser if supports copy image to clipboard\n */\n canCopy,\n copy,\n } as const;\n};\n"],"names":["useCallback","useEffect","useRef","useState","mergeDeepRight","PosterPainter","DefaultLayoutConfig","SDKError","usePoster","data","options","error","setError","canCopy","setCanCopy","navigator","clipboard","painterRef","target","setTarget","current","ratio","draw","layout","fontFamily","toDataURL","type","encoderOptions","toBlob","Promise","resolve","ref","tagName","toUpperCase","download","filename","img","Image","src","link","document","createElement","href","click","copy","reject","blob","write","ClipboardItem","then"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/esm/useSessionStorage.js
CHANGED
|
@@ -46,9 +46,9 @@ export function useSessionStorage(key, initialValue) {
|
|
|
46
46
|
if (typeof window == "undefined") {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
window.addEventListener("storage", handleStorageChange);
|
|
49
|
+
window.addEventListener?.("storage", handleStorageChange);
|
|
50
50
|
return ()=>{
|
|
51
|
-
window.removeEventListener("storage", handleStorageChange);
|
|
51
|
+
window.removeEventListener?.("storage", handleStorageChange);
|
|
52
52
|
};
|
|
53
53
|
});
|
|
54
54
|
const handleStorageChange = useCallback((event)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useSessionStorage.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T\n): [T, (data: any) => void] {\n // Get from session storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keep keep working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.sessionStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading sessionStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n const setValue: React.Dispatch<T> = (value: any) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window == \"undefined\") {\n console.warn(\n `Tried setting sessionStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to session storage\n window.sessionStorage.setItem(key, JSON.stringify(newValue));\n\n // Save state\n setStoredValue(newValue);\n\n // We dispatch a custom event so every useSessionStorage hook are notified\n // window.dispatchEvent(new Event(\"session-storage\"));\n } catch (error) {\n console.warn(`Error setting sessionStorage key “${key}”:`, error);\n }\n };\n\n useEffect(() => {\n setStoredValue(readValue());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (typeof window == \"undefined\") {\n return;\n }\n window.addEventListener(\"storage\", handleStorageChange);\n\n return () => {\n window.removeEventListener(\"storage\", handleStorageChange);\n };\n });\n\n const handleStorageChange = useCallback(\n (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n\n return [storedValue, setValue];\n}\n"],"names":["useCallback","useEffect","useState","parseJSON","useSessionStorage","key","initialValue","readValue","window","item","sessionStorage","getItem","error","storedValue","setStoredValue","setValue","value","newValue","Function","setItem","JSON","stringify","addEventListener","handleStorageChange","removeEventListener","event"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AACzD,SAASC,SAAS,QAAQ,eAAe;AAEzC,OAAO,SAASC,kBACdC,GAAW,EACXC,YAAe;IAEf,gCAAgC;IAChC,2CAA2C;IAC3C,MAAMC,YAAYP,YAAY;QAC5B,kEAAkE;QAClE,IAAI,OAAOQ,WAAW,aAAa;YACjC,OAAOF;QACT;QAEA,IAAI;YACF,MAAMG,OAAOD,OAAOE,cAAc,CAACC,OAAO,CAACN;YAC3C,OAAOI,OAAQN,UAAUM,QAAcH;QACzC,EAAE,OAAOM,OAAO;;YAEd,OAAON;QACT;IACF,GAAG;QAACA;QAAcD;KAAI;IACtB,MAAM,CAACQ,aAAaC,eAAe,GAAGZ,SAAYK;IAElD,MAAMQ,WAA8B,CAACC;QACnC,8DAA8D;QAC9D,IAAI,OAAOR,UAAU,aAAa;;QAIlC;QAEA,IAAI;YACF,mEAAmE;YACnE,MAAMS,WAAWD,iBAAiBE,WAAWF,MAAMH,eAAeG;YAElE,0BAA0B;YAC1BR,OAAOE,cAAc,CAACS,OAAO,CAACd,KAAKe,KAAKC,SAAS,CAACJ;YAElD,aAAa;YACbH,eAAeG;QAEf,0EAA0E;QAC1E,sDAAsD;QACxD,EAAE,OAAOL,OAAO;;QAEhB;IACF;IAEAX,UAAU;QACRa,eAAeP;IACf,uDAAuD;IACzD,GAAG,EAAE;IAELN,UAAU;QACR,IAAI,OAAOO,UAAU,aAAa;YAChC;QACF;QACAA,OAAOc,gBAAgB,
|
|
1
|
+
{"version":3,"sources":["../src/useSessionStorage.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T\n): [T, (data: any) => void] {\n // Get from session storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keep keep working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.sessionStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading sessionStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n const setValue: React.Dispatch<T> = (value: any) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window == \"undefined\") {\n console.warn(\n `Tried setting sessionStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to session storage\n window.sessionStorage.setItem(key, JSON.stringify(newValue));\n\n // Save state\n setStoredValue(newValue);\n\n // We dispatch a custom event so every useSessionStorage hook are notified\n // window.dispatchEvent(new Event(\"session-storage\"));\n } catch (error) {\n console.warn(`Error setting sessionStorage key “${key}”:`, error);\n }\n };\n\n useEffect(() => {\n setStoredValue(readValue());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (typeof window == \"undefined\") {\n return;\n }\n window.addEventListener?.(\"storage\", handleStorageChange);\n\n return () => {\n window.removeEventListener?.(\"storage\", handleStorageChange);\n };\n });\n\n const handleStorageChange = useCallback(\n (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n\n return [storedValue, setValue];\n}\n"],"names":["useCallback","useEffect","useState","parseJSON","useSessionStorage","key","initialValue","readValue","window","item","sessionStorage","getItem","error","storedValue","setStoredValue","setValue","value","newValue","Function","setItem","JSON","stringify","addEventListener","handleStorageChange","removeEventListener","event"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AACzD,SAASC,SAAS,QAAQ,eAAe;AAEzC,OAAO,SAASC,kBACdC,GAAW,EACXC,YAAe;IAEf,gCAAgC;IAChC,2CAA2C;IAC3C,MAAMC,YAAYP,YAAY;QAC5B,kEAAkE;QAClE,IAAI,OAAOQ,WAAW,aAAa;YACjC,OAAOF;QACT;QAEA,IAAI;YACF,MAAMG,OAAOD,OAAOE,cAAc,CAACC,OAAO,CAACN;YAC3C,OAAOI,OAAQN,UAAUM,QAAcH;QACzC,EAAE,OAAOM,OAAO;;YAEd,OAAON;QACT;IACF,GAAG;QAACA;QAAcD;KAAI;IACtB,MAAM,CAACQ,aAAaC,eAAe,GAAGZ,SAAYK;IAElD,MAAMQ,WAA8B,CAACC;QACnC,8DAA8D;QAC9D,IAAI,OAAOR,UAAU,aAAa;;QAIlC;QAEA,IAAI;YACF,mEAAmE;YACnE,MAAMS,WAAWD,iBAAiBE,WAAWF,MAAMH,eAAeG;YAElE,0BAA0B;YAC1BR,OAAOE,cAAc,CAACS,OAAO,CAACd,KAAKe,KAAKC,SAAS,CAACJ;YAElD,aAAa;YACbH,eAAeG;QAEf,0EAA0E;QAC1E,sDAAsD;QACxD,EAAE,OAAOL,OAAO;;QAEhB;IACF;IAEAX,UAAU;QACRa,eAAeP;IACf,uDAAuD;IACzD,GAAG,EAAE;IAELN,UAAU;QACR,IAAI,OAAOO,UAAU,aAAa;YAChC;QACF;QACAA,OAAOc,gBAAgB,GAAG,WAAWC;QAErC,OAAO;YACLf,OAAOgB,mBAAmB,GAAG,WAAWD;QAC1C;IACF;IAEA,MAAMA,sBAAsBvB,YAC1B,CAACyB;QACC,IAAI,AAACA,OAAwBpB,OAAO,AAACoB,MAAuBpB,GAAG,KAAKA,KAAK;YACvE;QACF;QACAS,eAAeP;IACjB,GACA;QAACF;QAAKE;KAAU;IAGlB,OAAO;QAACM;QAAaE;KAAS;AAChC"}
|
package/esm/utils/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { findTPSLFromOrder, findTPSLFromOrders, findPositionTPSLFromOrders, } fr
|
|
|
2
2
|
export { cleanStringStyle } from "./orderEntryHelper";
|
|
3
3
|
export { getPositionBySymbol } from "./swr";
|
|
4
4
|
export { priceToPnl } from "../orderly/useTakeProfitAndStopLoss/utils";
|
|
5
|
+
export { formatNumber } from "./orderEntryHelper";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/esm/utils/index.js
CHANGED
|
@@ -2,5 +2,6 @@ export { findTPSLFromOrder, findTPSLFromOrders, findPositionTPSLFromOrders } fro
|
|
|
2
2
|
export { cleanStringStyle } from "./orderEntryHelper";
|
|
3
3
|
export { getPositionBySymbol } from "./swr";
|
|
4
4
|
export { priceToPnl } from "../orderly/useTakeProfitAndStopLoss/utils";
|
|
5
|
+
export { formatNumber } from "./orderEntryHelper";
|
|
5
6
|
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/esm/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {\n findTPSLFromOrder,\n findTPSLFromOrders,\n findPositionTPSLFromOrders,\n} from \"../orderly/usePositionStream/utils\";\n\nexport { cleanStringStyle } from \"./orderEntryHelper\";\n\nexport { getPositionBySymbol } from \"./swr\";\n\nexport { priceToPnl } from \"../orderly/useTakeProfitAndStopLoss/utils\";\n"],"names":["findTPSLFromOrder","findTPSLFromOrders","findPositionTPSLFromOrders","cleanStringStyle","getPositionBySymbol","priceToPnl"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {\n findTPSLFromOrder,\n findTPSLFromOrders,\n findPositionTPSLFromOrders,\n} from \"../orderly/usePositionStream/utils\";\n\nexport { cleanStringStyle } from \"./orderEntryHelper\";\n\nexport { getPositionBySymbol } from \"./swr\";\n\nexport { priceToPnl } from \"../orderly/useTakeProfitAndStopLoss/utils\";\nexport { formatNumber } from \"./orderEntryHelper\";\n"],"names":["findTPSLFromOrder","findTPSLFromOrders","findPositionTPSLFromOrders","cleanStringStyle","getPositionBySymbol","priceToPnl","formatNumber"],"rangeMappings":";;;;","mappings":"AAAA,SACEA,iBAAiB,EACjBC,kBAAkB,EAClBC,0BAA0B,QACrB,qCAAqC;AAE5C,SAASC,gBAAgB,QAAQ,qBAAqB;AAEtD,SAASC,mBAAmB,QAAQ,QAAQ;AAE5C,SAASC,UAAU,QAAQ,4CAA4C;AACvE,SAASC,YAAY,QAAQ,qBAAqB"}
|
|
@@ -21,5 +21,6 @@ export declare function orderTypeHandle(inputs: orderEntryInputs): orderEntryInp
|
|
|
21
21
|
*/
|
|
22
22
|
export declare function orderEntityFormatHandle(baseTick: number, quoteTick: number): (inputs: orderEntryInputs) => orderEntryInputs;
|
|
23
23
|
export declare const getCalculateHandler: (fieldName: string) => orderEntryInputHandle;
|
|
24
|
+
export declare function formatNumber(qty?: string | number, dp?: number | string): string | undefined;
|
|
24
25
|
export {};
|
|
25
26
|
//# sourceMappingURL=orderEntryHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderEntryHelper.d.ts","sourceRoot":"","sources":["../../src/utils/orderEntryHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,wBAAwB,CAAC;AAGhE,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC;AAGxD,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,WAAW,CAAC;IAEpB,MAAM,WAAW;IACjB,GAAG;IACH,MAAM;IACN;QACE,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF,KAAK,qBAAqB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;AAU5E,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,MAAM,KAAG,MAavD,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA0B1E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAU1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kDA8B1E;AA2KD,eAAO,MAAM,mBAAmB,cACnB,MAAM,KAChB,qBAgBF,CAAC"}
|
|
1
|
+
{"version":3,"file":"orderEntryHelper.d.ts","sourceRoot":"","sources":["../../src/utils/orderEntryHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,wBAAwB,CAAC;AAGhE,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC;AAGxD,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,WAAW,CAAC;IAEpB,MAAM,WAAW;IACjB,GAAG;IACH,MAAM;IACN;QACE,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF,KAAK,qBAAqB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;AAU5E,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,MAAM,KAAG,MAavD,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA0B1E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAU1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kDA8B1E;AA2KD,eAAO,MAAM,mBAAmB,cACnB,MAAM,KAChB,qBAgBF,CAAC;AAGF,wBAAgB,YAAY,CAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GACnB,MAAM,GAAG,SAAS,CAwCpB"}
|
|
@@ -9,7 +9,7 @@ const needNumberOnlyFields = [
|
|
|
9
9
|
/// only save number
|
|
10
10
|
export const cleanStringStyle = (str)=>{
|
|
11
11
|
if (typeof str !== "string") {
|
|
12
|
-
str = str
|
|
12
|
+
str = `${str}`;
|
|
13
13
|
}
|
|
14
14
|
str = str.replace(/,/g, "");
|
|
15
15
|
// clear extra character expect number and .
|
|
@@ -183,7 +183,7 @@ export function orderTypeHandle(inputs) {
|
|
|
183
183
|
if (values.order_price) {
|
|
184
184
|
const price = Number(values.order_price);
|
|
185
185
|
const total = quantity.mul(price);
|
|
186
|
-
values.total = total.todp(
|
|
186
|
+
values.total = total.todp(config.quoteDP).toString();
|
|
187
187
|
} else {
|
|
188
188
|
values.total = "";
|
|
189
189
|
}
|
|
@@ -267,5 +267,30 @@ export const getCalculateHandler = (fieldName)=>{
|
|
|
267
267
|
return otherInputHandle;
|
|
268
268
|
}
|
|
269
269
|
};
|
|
270
|
+
//** format number */
|
|
271
|
+
export function formatNumber(qty, dp) {
|
|
272
|
+
if (typeof qty === "undefined") return qty;
|
|
273
|
+
if (typeof dp === "undefined") return `${qty}`;
|
|
274
|
+
// console.log("qty", qty, "dp", dp);
|
|
275
|
+
const _qty = `${qty}`.replace(/,/g, "");
|
|
276
|
+
try {
|
|
277
|
+
const _dp = new Decimal(dp);
|
|
278
|
+
const _qtyDecimal = new Decimal(_qty);
|
|
279
|
+
if (_dp.lessThan(1)) {
|
|
280
|
+
if (`${_qty}`.endsWith(".")) return `${_qty}`;
|
|
281
|
+
const numStr = dp.toString();
|
|
282
|
+
const decimalIndex = numStr.indexOf(".");
|
|
283
|
+
const digitsAfterDecimal = decimalIndex === -1 ? 0 : numStr.length - decimalIndex - 1;
|
|
284
|
+
const result = _qtyDecimal.toDecimalPlaces(digitsAfterDecimal, Decimal.ROUND_DOWN).toString();
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
if (_qtyDecimal.lessThan(_dp)) {
|
|
288
|
+
return _qty;
|
|
289
|
+
}
|
|
290
|
+
return _qtyDecimal.dividedBy(_dp).toDecimalPlaces(0, Decimal.ROUND_DOWN).mul(dp).toString();
|
|
291
|
+
} catch (e) {
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
270
295
|
|
|
271
296
|
//# sourceMappingURL=orderEntryHelper.js.map
|