@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckReferralCode.d.ts","sourceRoot":"","sources":["../../src/referral/useCheckReferralCode.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,UACxB,MAAM;;WAGJ,GAAG;eACC,OAAO;CAqBrB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useQuery } from "../useQuery";
|
|
2
|
+
export const useCheckReferralCode = (code)=>{
|
|
3
|
+
if (typeof code === "undefined") {
|
|
4
|
+
return {
|
|
5
|
+
isExist: false,
|
|
6
|
+
error: "The code is undefined",
|
|
7
|
+
isLoading: false
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const { data, error, isLoading } = useQuery(`/v1/public/referral/verify_ref_code?referral_code=${code}`);
|
|
11
|
+
return {
|
|
12
|
+
isExist: data?.exist,
|
|
13
|
+
error,
|
|
14
|
+
isLoading
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=useCheckReferralCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/referral/useCheckReferralCode.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useCheckReferralCode = (\n code?: string\n):{\n isExist?: boolean;\n error: any;\n isLoading: boolean;\n } => {\n \n if (typeof code === \"undefined\") {\n return {\n isExist: false,\n error: \"The code is undefined\",\n isLoading: false,\n };\n }\n\n const { data, error, isLoading } = useQuery<{exist?: boolean}>(\n `/v1/public/referral/verify_ref_code?referral_code=${code}`\n );\n \n\n return {\n isExist: data?.exist,\n error,\n isLoading,\n };\n};\n"],"names":["useQuery","useCheckReferralCode","code","isExist","error","isLoading","data","exist"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,MAAMC,uBAAuB,CAClCC;IAOA,IAAI,OAAOA,SAAS,aAAa;QAC/B,OAAO;YACHC,SAAS;YACTC,OAAO;YACPC,WAAW;QACf;IACF;IAEA,MAAM,EAAEC,IAAI,EAAEF,KAAK,EAAEC,SAAS,EAAE,GAAGL,SACjC,CAAC,kDAAkD,EAAEE,KAAK,CAAC;IAI7D,OAAO;QACLC,SAASG,MAAMC;QACfH;QACAC;IACF;AACF,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetReferralCode.d.ts","sourceRoot":"","sources":["../../src/referral/useGetReferralCode.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,eACf,MAAM;;WAGX,GAAG;eACC,OAAO;CAmBrB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useQuery } from "../useQuery";
|
|
2
|
+
export const useGetReferralCode = (accountId)=>{
|
|
3
|
+
if (typeof accountId === "undefined") {
|
|
4
|
+
return {
|
|
5
|
+
referral_code: undefined,
|
|
6
|
+
error: "The account id is empty or undefined",
|
|
7
|
+
isLoading: false
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const { data, error, isLoading } = useQuery(`/v1/public/referral/check_ref_code?account_id=${accountId}`);
|
|
11
|
+
return {
|
|
12
|
+
referral_code: data?.referral_code,
|
|
13
|
+
error,
|
|
14
|
+
isLoading
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=useGetReferralCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/referral/useGetReferralCode.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useGetReferralCode = (\n accountId?: string\n):{\n referral_code?: string;\n error: any;\n isLoading: boolean;\n } => {\n if (typeof accountId === \"undefined\" ) {\n return {\n referral_code: undefined,\n error: \"The account id is empty or undefined\",\n isLoading: false,\n };\n }\n const { data, error, isLoading } = useQuery<{referral_code?: string}>(\n `/v1/public/referral/check_ref_code?account_id=${accountId}`\n );\n \n\n return {\n referral_code: data?.referral_code,\n error,\n isLoading,\n };\n};\n"],"names":["useQuery","useGetReferralCode","accountId","referral_code","undefined","error","isLoading","data"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,MAAMC,qBAAqB,CAC9BC;IAMF,IAAI,OAAOA,cAAc,aAAc;QACrC,OAAO;YACLC,eAAeC;YACbC,OAAO;YACPC,WAAW;QACf;IACF;IACA,MAAM,EAAEC,IAAI,EAAEF,KAAK,EAAEC,SAAS,EAAE,GAAGN,SACjC,CAAC,8CAA8C,EAAEE,UAAU,CAAC;IAI9D,OAAO;QACLC,eAAeI,MAAMJ;QACrBE;QACAC;IACF;AACF,EAAE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RefferalAPI } from "./api";
|
|
2
|
+
export declare const useReferralInfo: () => {
|
|
3
|
+
data?: RefferalAPI.ReferralInfo | undefined;
|
|
4
|
+
isTrader?: boolean | undefined;
|
|
5
|
+
isAffiliate?: boolean | undefined;
|
|
6
|
+
error: any;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
getFirstRefCode: () => RefferalAPI.ReferralCode | undefined;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=useReferralInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReferralInfo.d.ts","sourceRoot":"","sources":["../../src/referral/useReferralInfo.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,eAAO,MAAM,eAAe;;;;WAInB,GAAG;eACC,OAAO;qBACD,MAAM,YAAY,YAAY,GAAG,SAAS;CAyD5D,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useCallback, useMemo } from "react";
|
|
2
|
+
import { usePrivateQuery } from "../usePrivateQuery";
|
|
3
|
+
import { useLocalStorage } from "../useLocalStorage";
|
|
4
|
+
export const useReferralInfo = ()=>{
|
|
5
|
+
const { data, mutate, isLoading, error } = usePrivateQuery("/v1/referral/info", {
|
|
6
|
+
revalidateOnFocus: true
|
|
7
|
+
});
|
|
8
|
+
const isTrader = useMemo(()=>{
|
|
9
|
+
if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;
|
|
10
|
+
return (data?.referee_info?.referer_code?.length || 0) > 0;
|
|
11
|
+
}, [
|
|
12
|
+
data?.referee_info
|
|
13
|
+
]);
|
|
14
|
+
const isAffiliate = useMemo(()=>{
|
|
15
|
+
if (typeof data?.referrer_info?.referral_codes === 'undefined') return undefined;
|
|
16
|
+
return (data?.referrer_info?.referral_codes?.length || 0) > 0;
|
|
17
|
+
}, [
|
|
18
|
+
data?.referrer_info
|
|
19
|
+
]);
|
|
20
|
+
const [pinCodes] = useLocalStorage("orderly_referral_codes", []);
|
|
21
|
+
const getFirstRefCode = useCallback(()=>{
|
|
22
|
+
if (!data?.referrer_info.referral_codes) return undefined;
|
|
23
|
+
const referralCodes = [
|
|
24
|
+
...data?.referrer_info.referral_codes
|
|
25
|
+
];
|
|
26
|
+
const pinedItems = [];
|
|
27
|
+
for(let i = 0; i < pinCodes.length; i++){
|
|
28
|
+
const code = pinCodes[i];
|
|
29
|
+
const index = referralCodes.findIndex((item)=>item.code === code);
|
|
30
|
+
if (index !== -1) {
|
|
31
|
+
pinedItems.push({
|
|
32
|
+
...referralCodes[index]
|
|
33
|
+
});
|
|
34
|
+
referralCodes.splice(index, 1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const newCodes = [
|
|
38
|
+
...pinedItems,
|
|
39
|
+
...referralCodes
|
|
40
|
+
];
|
|
41
|
+
return newCodes?.[0];
|
|
42
|
+
}, [
|
|
43
|
+
pinCodes,
|
|
44
|
+
data
|
|
45
|
+
]);
|
|
46
|
+
return {
|
|
47
|
+
data,
|
|
48
|
+
isTrader,
|
|
49
|
+
isAffiliate,
|
|
50
|
+
error,
|
|
51
|
+
isLoading,
|
|
52
|
+
getFirstRefCode
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=useReferralInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/referral/useReferralInfo.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { useLocalStorage } from \"../useLocalStorage\";\n\nexport const useReferralInfo = ():{\n data?: RefferalAPI.ReferralInfo;\n isTrader?: boolean;\n isAffiliate?: boolean;\n error: any;\n isLoading: boolean;\n getFirstRefCode: () => RefferalAPI.ReferralCode | undefined;\n} => {\n const {\n data,\n mutate,\n isLoading,\n error,\n } = usePrivateQuery<RefferalAPI.ReferralInfo>(\"/v1/referral/info\", {\n revalidateOnFocus: true,\n });\n\n const isTrader = useMemo(() => {\n if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;\n return (data?.referee_info?.referer_code?.length || 0) > 0;\n }, [data?.referee_info]);\n \n const isAffiliate = useMemo(() => {\n if (typeof data?.referrer_info?.referral_codes === 'undefined') return undefined;\n return (data?.referrer_info?.referral_codes?.length || 0) > 0;\n }, [data?.referrer_info]);\n\n\n const [pinCodes] = useLocalStorage<string[]>(\"orderly_referral_codes\", [] as string[]);\n\n const getFirstRefCode = useCallback(() : RefferalAPI.ReferralCode | undefined => {\n\n if (!data?.referrer_info.referral_codes) return undefined;\n const referralCodes = [...data?.referrer_info.referral_codes];\n\n const pinedItems: RefferalAPI.ReferralCode[] = [];\n\n for (let i = 0; i < pinCodes.length; i++) {\n const code = pinCodes[i];\n\n const index = referralCodes.findIndex((item) => item.code === code);\n if (index !== -1) {\n\n pinedItems.push({ ...referralCodes[index]});\n referralCodes.splice(index, 1);\n }\n\n }\n\n const newCodes = [...pinedItems, ...referralCodes];\n\n return newCodes?.[0];\n }, [pinCodes, data]);\n \n\n return {\n data,\n isTrader,\n isAffiliate,\n error,\n isLoading,\n getFirstRefCode,\n };\n};\n"],"names":["useCallback","useMemo","usePrivateQuery","useLocalStorage","useReferralInfo","data","mutate","isLoading","error","revalidateOnFocus","isTrader","referee_info","referer_code","undefined","length","isAffiliate","referrer_info","referral_codes","pinCodes","getFirstRefCode","referralCodes","pinedItems","i","code","index","findIndex","item","push","splice","newCodes"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,QAAQ;AAE7C,SAASC,eAAe,QAAQ,qBAAqB;AAErD,SAASC,eAAe,QAAQ,qBAAqB;AAErD,OAAO,MAAMC,kBAAkB;IAQ7B,MAAM,EACJC,IAAI,EACJC,MAAM,EACNC,SAAS,EACTC,KAAK,EACN,GAAGN,gBAA0C,qBAAqB;QACjEO,mBAAmB;IACrB;IAEA,MAAMC,WAAWT,QAAQ;QACvB,IAAI,OAAOI,MAAMM,cAAcC,iBAAiB,aAAa,OAAOC;QACpE,OAAO,AAACR,CAAAA,MAAMM,cAAcC,cAAcE,UAAU,CAAA,IAAK;IAC3D,GAAG;QAACT,MAAMM;KAAa;IAEvB,MAAMI,cAAcd,QAAQ;QAC1B,IAAI,OAAOI,MAAMW,eAAeC,mBAAmB,aAAa,OAAOJ;QACvE,OAAO,AAACR,CAAAA,MAAMW,eAAeC,gBAAgBH,UAAU,CAAA,IAAK;IAC9D,GAAG;QAACT,MAAMW;KAAc;IAGxB,MAAM,CAACE,SAAS,GAAGf,gBAA0B,0BAA0B,EAAE;IAEzE,MAAMgB,kBAAkBnB,YAAY;QAElC,IAAI,CAACK,MAAMW,cAAcC,gBAAgB,OAAOJ;QAChD,MAAMO,gBAAgB;eAAIf,MAAMW,cAAcC;SAAe;QAE7D,MAAMI,aAAyC,EAAE;QAEjD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,SAASJ,MAAM,EAAEQ,IAAK;YACtC,MAAMC,OAAOL,QAAQ,CAACI,EAAE;YAExB,MAAME,QAAQJ,cAAcK,SAAS,CAAC,CAACC,OAASA,KAAKH,IAAI,KAAKA;YAC9D,IAAIC,UAAU,CAAC,GAAG;gBAEdH,WAAWM,IAAI,CAAC;oBAAE,GAAGP,aAAa,CAACI,MAAM;gBAAA;gBACzCJ,cAAcQ,MAAM,CAACJ,OAAO;YAChC;QAEJ;QAEA,MAAMK,WAAW;eAAIR;eAAeD;SAAc;QAElD,OAAOS,UAAU,CAAC,EAAE;IACtB,GAAG;QAACX;QAAUb;KAAK;IAGnB,OAAO;QACLA;QACAK;QACAK;QACAP;QACAD;QACAY;IACF;AACF,EAAE"}
|
|
@@ -4,6 +4,7 @@ export declare class AlgoOrderMergeHandler extends BaseMergeHandler<WSMessage.Al
|
|
|
4
4
|
get orderId(): number;
|
|
5
5
|
get status(): string;
|
|
6
6
|
pre(message: WSMessage.AlgoOrder[], prevData?: API.OrderResponse[]): API.AlgoOrder;
|
|
7
|
+
isFullFilled(): boolean;
|
|
7
8
|
static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=algoOrderMergeHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algoOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,qBAAsB,SAAQ,gBAAgB,CACzD,SAAS,CAAC,SAAS,EAAE,EACrB,GAAG,CAAC,SAAS,CACd;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAeD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,EAC9B,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAC7B,GAAG,CAAC,SAAS;IAIhB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS;CAsBjE"}
|
|
1
|
+
{"version":3,"file":"algoOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,qBAAsB,SAAQ,gBAAgB,CACzD,SAAS,CAAC,SAAS,EAAE,EACrB,GAAG,CAAC,SAAS,CACd;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAeD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,EAC9B,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAC7B,GAAG,CAAC,SAAS;IAIhB,YAAY,IAAI,OAAO;IAkBvB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS;CAsBjE"}
|
|
@@ -22,6 +22,14 @@ export class AlgoOrderMergeHandler extends BaseMergeHandler {
|
|
|
22
22
|
pre(message, prevData) {
|
|
23
23
|
return AlgoOrderMergeHandler.groupOrders(message);
|
|
24
24
|
}
|
|
25
|
+
isFullFilled() {
|
|
26
|
+
if ("total_executed_quantity" in this.data && this.data.total_executed_quantity !== 0) {
|
|
27
|
+
return this.data.total_executed_quantity === this.data.quantity;
|
|
28
|
+
} else if ("total_executed_quantity" in this.data.child_orders[0]) {
|
|
29
|
+
return this.data.child_orders[0].total_executed_quantity === this.data.child_orders[0].quantity;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
25
33
|
static groupOrders(orders) {
|
|
26
34
|
const rootOrderIndex = orders.findIndex((order)=>order.parentAlgoOrderId === 0 && order.algoOrderId === order.rootAlgoOrderId);
|
|
27
35
|
if (rootOrderIndex === -1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class AlgoOrderMergeHandler extends BaseMergeHandler<\n WSMessage.AlgoOrder[],\n API.AlgoOrder\n> {\n get orderId(): number {\n return this.data.algo_order_id;\n }\n\n get status(): string {\n return this.data.root_algo_status;\n }\n\n // merge(\n // key: string,\n // message: WSMessage.AlgoOrder[],\n // prevData: API.OrderResponse[]\n // ): API.OrderResponse[] | undefined {\n // switch (this.status) {\n // case \"TRIGGER\": {\n // }\n // default:\n // return super.merge(key, message, prevData);\n // }\n // }\n\n pre(\n message: WSMessage.AlgoOrder[],\n prevData?: API.OrderResponse[]\n ): API.AlgoOrder {\n return AlgoOrderMergeHandler.groupOrders(message);\n }\n\n static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const rootOrderIndex = orders.findIndex(\n (order) =>\n order.parentAlgoOrderId === 0 &&\n order.algoOrderId === order.rootAlgoOrderId\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"Root order not found\");\n }\n\n const rootOrder_ = object2underscore(\n orders[rootOrderIndex]\n ) as unknown as API.AlgoOrder;\n\n rootOrder_.child_orders = orders\n .filter((_, index) => index !== rootOrderIndex)\n .map((order) => {\n return object2underscore(order) as unknown as API.AlgoOrder;\n });\n\n return rootOrder_;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","AlgoOrderMergeHandler","orderId","data","algo_order_id","status","root_algo_status","pre","message","prevData","groupOrders","orders","rootOrderIndex","findIndex","order","parentAlgoOrderId","algoOrderId","rootAlgoOrderId","Error","rootOrder_","
|
|
1
|
+
{"version":3,"sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class AlgoOrderMergeHandler extends BaseMergeHandler<\n WSMessage.AlgoOrder[],\n API.AlgoOrder\n> {\n get orderId(): number {\n return this.data.algo_order_id;\n }\n\n get status(): string {\n return this.data.root_algo_status;\n }\n\n // merge(\n // key: string,\n // message: WSMessage.AlgoOrder[],\n // prevData: API.OrderResponse[]\n // ): API.OrderResponse[] | undefined {\n // switch (this.status) {\n // case \"TRIGGER\": {\n // }\n // default:\n // return super.merge(key, message, prevData);\n // }\n // }\n\n pre(\n message: WSMessage.AlgoOrder[],\n prevData?: API.OrderResponse[]\n ): API.AlgoOrder {\n return AlgoOrderMergeHandler.groupOrders(message);\n }\n\n isFullFilled(): boolean {\n if (\n \"total_executed_quantity\" in this.data &&\n this.data.total_executed_quantity !== 0\n ) {\n return this.data.total_executed_quantity === this.data.quantity;\n } else if (\n \"total_executed_quantity\" in (this.data as API.AlgoOrder).child_orders[0]\n ) {\n return (\n (this.data as API.AlgoOrder).child_orders[0].total_executed_quantity ===\n (this.data as API.AlgoOrder).child_orders[0].quantity\n );\n }\n\n return false;\n }\n\n static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const rootOrderIndex = orders.findIndex(\n (order) =>\n order.parentAlgoOrderId === 0 &&\n order.algoOrderId === order.rootAlgoOrderId\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"Root order not found\");\n }\n\n const rootOrder_ = object2underscore(\n orders[rootOrderIndex]\n ) as unknown as API.AlgoOrder;\n\n rootOrder_.child_orders = orders\n .filter((_, index) => index !== rootOrderIndex)\n .map((order) => {\n return object2underscore(order) as unknown as API.AlgoOrder;\n });\n\n return rootOrder_;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","AlgoOrderMergeHandler","orderId","data","algo_order_id","status","root_algo_status","pre","message","prevData","groupOrders","isFullFilled","total_executed_quantity","quantity","child_orders","orders","rootOrderIndex","findIndex","order","parentAlgoOrderId","algoOrderId","rootAlgoOrderId","Error","rootOrder_","filter","_","index","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,8BAA8BF;IAIzC,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,aAAa;IAChC;IAEA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACG,gBAAgB;IACnC;IAEA,WAAW;IACX,mBAAmB;IACnB,sCAAsC;IACtC,oCAAoC;IACpC,yCAAyC;IACzC,6BAA6B;IAC7B,0BAA0B;IAC1B,UAAU;IACV,iBAAiB;IACjB,sDAAsD;IACtD,QAAQ;IACR,MAAM;IAENC,IACEC,OAA8B,EAC9BC,QAA8B,EACf;QACf,OAAOR,sBAAsBS,WAAW,CAACF;IAC3C;IAEAG,eAAwB;QACtB,IACE,6BAA6B,IAAI,CAACR,IAAI,IACtC,IAAI,CAACA,IAAI,CAACS,uBAAuB,KAAK,GACtC;YACA,OAAO,IAAI,CAACT,IAAI,CAACS,uBAAuB,KAAK,IAAI,CAACT,IAAI,CAACU,QAAQ;QACjE,OAAO,IACL,6BAA6B,AAAC,IAAI,CAACV,IAAI,CAAmBW,YAAY,CAAC,EAAE,EACzE;YACA,OACE,AAAC,IAAI,CAACX,IAAI,CAAmBW,YAAY,CAAC,EAAE,CAACF,uBAAuB,KACpE,AAAC,IAAI,CAACT,IAAI,CAAmBW,YAAY,CAAC,EAAE,CAACD,QAAQ;QAEzD;QAEA,OAAO;IACT;IAEA,OAAOH,YAAYK,MAA6B,EAAiB;QAC/D,MAAMC,iBAAiBD,OAAOE,SAAS,CACrC,CAACC,QACCA,MAAMC,iBAAiB,KAAK,KAC5BD,MAAME,WAAW,KAAKF,MAAMG,eAAe;QAE/C,IAAIL,mBAAmB,CAAC,GAAG;YACzB,MAAM,IAAIM,MAAM;QAClB;QAEA,MAAMC,aAAavB,kBACjBe,MAAM,CAACC,eAAe;QAGxBO,WAAWT,YAAY,GAAGC,OACvBS,MAAM,CAAC,CAACC,GAAGC,QAAUA,UAAUV,gBAC/BW,GAAG,CAAC,CAACT;YACJ,OAAOlB,kBAAkBkB;QAC3B;QAEF,OAAOK;IACT;AACF"}
|
|
@@ -7,6 +7,7 @@ export declare abstract class BaseMergeHandler<T extends WSMessage.AlgoOrder[] |
|
|
|
7
7
|
abstract get status(): string;
|
|
8
8
|
abstract get orderId(): number;
|
|
9
9
|
abstract pre(message: T, prevData?: API.OrderResponse[]): D;
|
|
10
|
+
abstract isFullFilled(): boolean;
|
|
10
11
|
/**
|
|
11
12
|
* format the order data;
|
|
12
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,8BAAsB,gBAAgB,CACpC,CAAC,SAAS,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,KAAK,EACjD,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CACnC,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGvB,OAAO,CAAC,OAAO;IAD3B,IAAI,EAAE,CAAC,CAAC;gBACY,OAAO,EAAE,CAAC;IAG9B,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC;IAC9B,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"baseMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,8BAAsB,gBAAgB,CACpC,CAAC,SAAS,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,KAAK,EACjD,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CACnC,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGvB,OAAO,CAAC,OAAO;IAD3B,IAAI,EAAE,CAAC,CAAC;gBACY,OAAO,EAAE,CAAC;IAG9B,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC;IAC9B,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAC3D,QAAQ,CAAC,YAAY,IAAI,OAAO;IAEhC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;IAc1B,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAC5B,GAAG,CAAC,aAAa,EAAE;IAuEtB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE;IAgBrE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAO/D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAqB1D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAiB1D,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS;IA+BjE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,OAAO;CAItD"}
|
|
@@ -48,7 +48,7 @@ export class BaseMergeHandler {
|
|
|
48
48
|
// for new list, remove the order if it exists
|
|
49
49
|
if (key.startsWith("orders:INCOMPLETE") || key.startsWith("orders:NEW")) {
|
|
50
50
|
// if fullfilled, remove from the list
|
|
51
|
-
if (
|
|
51
|
+
if (this.isFullFilled()) {
|
|
52
52
|
return this.remove(prevData);
|
|
53
53
|
}
|
|
54
54
|
// update
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"sourcesContent":["import { WSMessage, API } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\n\nexport abstract class BaseMergeHandler<\n T extends WSMessage.AlgoOrder[] | WSMessage.Order,\n D extends API.AlgoOrder | API.Order\n> implements IOrderMergeHandler<T, D>\n{\n data: D;\n constructor(private message: T) {\n this.data = this.formatOrder(message);\n }\n abstract get status(): string;\n abstract get orderId(): number;\n abstract pre(message: T, prevData?: API.OrderResponse[]): D;\n\n /**\n * format the order data;\n */\n formatOrder(message: T): D {\n const data = this.pre(message);\n\n if (!data.created_time) {\n data.created_time = (data as any).timestamp;\n }\n\n if (data.type && data.type.endsWith(\"_ORDER\")) {\n data.type = data.type.replace(\"_ORDER\", \"\");\n }\n\n return data;\n }\n\n merge(\n key: string,\n message: T,\n prevData: API.OrderResponse[]\n ): API.OrderResponse[] {\n switch (this.status) {\n case \"NEW\": {\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n return this.insetOrUpdate(prevData);\n }\n case \"CANCELLED\": {\n if (\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n if (\n key.startsWith(\"orders:NEW\") ||\n key.startsWith(\"orders:INCOMPLETE\")\n ) {\n return this.remove(prevData);\n }\n\n if (key.startsWith(\"orders:CANCELLED\")) {\n return this.insert(prevData);\n }\n\n return this.update(prevData);\n }\n\n case \"REPLACED\":\n return this.update(prevData);\n\n case \"FILLED\": {\n if (this.orderIsExisting(prevData)) {\n // for new list, remove the order if it exists\n if (\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n // if fullfilled, remove from the list\n if (
|
|
1
|
+
{"version":3,"sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"sourcesContent":["import { WSMessage, API } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\n\nexport abstract class BaseMergeHandler<\n T extends WSMessage.AlgoOrder[] | WSMessage.Order,\n D extends API.AlgoOrder | API.Order\n> implements IOrderMergeHandler<T, D>\n{\n data: D;\n constructor(private message: T) {\n this.data = this.formatOrder(message);\n }\n abstract get status(): string;\n abstract get orderId(): number;\n abstract pre(message: T, prevData?: API.OrderResponse[]): D;\n abstract isFullFilled(): boolean;\n\n /**\n * format the order data;\n */\n formatOrder(message: T): D {\n const data = this.pre(message);\n\n if (!data.created_time) {\n data.created_time = (data as any).timestamp;\n }\n\n if (data.type && data.type.endsWith(\"_ORDER\")) {\n data.type = data.type.replace(\"_ORDER\", \"\");\n }\n\n return data;\n }\n\n merge(\n key: string,\n message: T,\n prevData: API.OrderResponse[]\n ): API.OrderResponse[] {\n switch (this.status) {\n case \"NEW\": {\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n return this.insetOrUpdate(prevData);\n }\n case \"CANCELLED\": {\n if (\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n if (\n key.startsWith(\"orders:NEW\") ||\n key.startsWith(\"orders:INCOMPLETE\")\n ) {\n return this.remove(prevData);\n }\n\n if (key.startsWith(\"orders:CANCELLED\")) {\n return this.insert(prevData);\n }\n\n return this.update(prevData);\n }\n\n case \"REPLACED\":\n return this.update(prevData);\n\n case \"FILLED\": {\n if (this.orderIsExisting(prevData)) {\n // for new list, remove the order if it exists\n if (\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n // if fullfilled, remove from the list\n if (this.isFullFilled()) {\n return this.remove(prevData);\n }\n\n // update\n return this.update(prevData);\n }\n } else {\n // for filled list, insert the order if it doesn't exist\n\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n return prevData;\n }\n // if filled/history list:\n return this.insert(prevData);\n }\n }\n\n default:\n return prevData || [];\n }\n }\n\n insert(orders?: API.OrderResponse[] | undefined): API.OrderResponse[] {\n const index = lensIndex<API.OrderResponse>(0);\n return over(\n //@ts-ignore\n index,\n (item: any) => ({\n meta: {\n ...item.meta,\n total: item.meta.total + 1,\n },\n rows: [this.data, ...item.rows],\n }),\n orders\n ) as API.OrderResponse[];\n }\n\n insetOrUpdate(orders: API.OrderResponse[]): API.OrderResponse[] {\n if (this.orderIsExisting(orders)) {\n return this.update(orders);\n }\n return this.insert(orders);\n }\n\n update(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData || [];\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta },\n rows: item.rows.map((order, j) => {\n if (index === i && index2 === j) {\n return { ...order, ...this.data };\n }\n return order;\n }),\n };\n });\n }\n\n remove(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData;\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta, total: item.meta.total - 1 },\n rows:\n index === i ? item.rows.filter((_, i) => i !== index2) : item.rows,\n };\n });\n }\n\n findOrderIndex(orders: API.OrderResponse[]): number[] | undefined {\n let index: number = 0;\n let index2: number | undefined;\n\n for (; index < orders.length; index++) {\n // index = idx;\n const item = orders[index];\n\n for (let idx2 = 0; idx2 < item.rows.length; idx2++) {\n const element = item.rows[idx2];\n if (\n (element as API.AlgoOrder).algo_order_id === this.orderId ||\n (element as API.Order).order_id === this.orderId\n ) {\n index2 = idx2;\n\n break;\n }\n }\n if (typeof index2 !== \"undefined\") {\n break;\n }\n }\n\n if (typeof index2 === \"undefined\") {\n return;\n }\n\n return [index, index2];\n }\n\n orderIsExisting(orders: API.OrderResponse[]): boolean {\n const index = this.findOrderIndex(orders);\n return Array.isArray(index);\n }\n}\n"],"names":["lensIndex","over","BaseMergeHandler","data","constructor","message","formatOrder","pre","created_time","timestamp","type","endsWith","replace","merge","key","prevData","status","startsWith","insetOrUpdate","remove","insert","update","orderIsExisting","isFullFilled","orders","index","item","meta","total","rows","idx","findOrderIndex","Array","isArray","index2","map","i","order","j","filter","_","length","idx2","element","algo_order_id","orderId","order_id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -4,5 +4,6 @@ export declare class RegularOrderMergeHandler extends BaseMergeHandler<WSMessage
|
|
|
4
4
|
get orderId(): number;
|
|
5
5
|
get status(): string;
|
|
6
6
|
pre(message: WSMessage.Order, prevData?: API.OrderResponse[] | undefined): API.Order;
|
|
7
|
+
isFullFilled(): boolean;
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=regularOrderMergeHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regularOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,wBAAyB,SAAQ,gBAAgB,CAC5D,SAAS,CAAC,KAAK,EACf,GAAG,CAAC,KAAK,CACV;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GACzC,GAAG,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"regularOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,wBAAyB,SAAQ,gBAAgB,CAC5D,SAAS,CAAC,KAAK,EACf,GAAG,CAAC,KAAK,CACV;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GACzC,GAAG,CAAC,KAAK;IAGZ,YAAY,IAAI,OAAO;CAMxB"}
|
|
@@ -10,6 +10,9 @@ export class RegularOrderMergeHandler extends BaseMergeHandler {
|
|
|
10
10
|
pre(message, prevData) {
|
|
11
11
|
return object2underscore(message);
|
|
12
12
|
}
|
|
13
|
+
isFullFilled() {
|
|
14
|
+
return "total_executed_quantity" in this.data && this.data.total_executed_quantity === this.data.quantity;
|
|
15
|
+
}
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
//# sourceMappingURL=regularOrderMergeHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class RegularOrderMergeHandler extends BaseMergeHandler<\n WSMessage.Order,\n API.Order\n> {\n get orderId(): number {\n return this.data.order_id;\n }\n get status(): string {\n return this.data.status;\n }\n pre(\n message: WSMessage.Order,\n prevData?: API.OrderResponse[] | undefined\n ): API.Order {\n return object2underscore(message) as unknown as API.Order;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","RegularOrderMergeHandler","orderId","data","order_id","status","pre","message","prevData"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class RegularOrderMergeHandler extends BaseMergeHandler<\n WSMessage.Order,\n API.Order\n> {\n get orderId(): number {\n return this.data.order_id;\n }\n get status(): string {\n return this.data.status;\n }\n pre(\n message: WSMessage.Order,\n prevData?: API.OrderResponse[] | undefined\n ): API.Order {\n return object2underscore(message) as unknown as API.Order;\n }\n isFullFilled(): boolean {\n return (\n \"total_executed_quantity\" in this.data &&\n this.data.total_executed_quantity === this.data.quantity\n );\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","RegularOrderMergeHandler","orderId","data","order_id","status","pre","message","prevData","isFullFilled","total_executed_quantity","quantity"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,iCAAiCF;IAI5C,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,QAAQ;IAC3B;IACA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACE,MAAM;IACzB;IACAC,IACEC,OAAwB,EACxBC,QAA0C,EAC/B;QACX,OAAOR,kBAAkBO;IAC3B;IACAE,eAAwB;QACtB,OACE,6BAA6B,IAAI,CAACN,IAAI,IACtC,IAAI,CAACA,IAAI,CAACO,uBAAuB,KAAK,IAAI,CAACP,IAAI,CAACQ,QAAQ;IAE5D;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,GAAG;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,YAAY,CAAC,EAAE,UAAU,GAAG;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,8BAAsB,SAAS;IAE3B,SAAS,CAAC,GAAG,EAAE,wBAAwB;IACvC,SAAS,CAAC,OAAO,EAAE,aAAa;gBADtB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,aAAa;IAElC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/basePaint.ts"],"sourcesContent":["import { OrderSide } from \"@orderly.network/types\";\nimport { PosterPainter } from \"./painter\";\n\nexport type posterDataSource = {\n /**\n * slogan of the poster\n */\n message?: string;\n position: {\n symbol: string;\n // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\n /**\n * The leverage of the position\n */\n leverage: number;\n /**\n * The unrealized PnL of the position\n */\n pnl: number;\n /**\n * The return on investment of the position\n */\n ROI: number;\n /**\n * The informations of the position, such as open price, opened at, mark price, quantity and custom message.\n */\n informations: { title: string; value: string }[];\n /**\n * The quote currency of the position\n */\n currency: string;\n };\n /**\n * The domain of the application\n */\n domain: string;\n\n /**\n * The update time of the position\n */\n updateTime: string;\n};\n\nexport type layoutInfo = {\n width?: number;\n height?: number;\n // padding?: number;\n // margin?: number;\n fontSize?: number;\n\n color?: string;\n textAlign?: CanvasTextAlign;\n textBaseline?: CanvasTextBaseline;\n position: Partial<{\n left: number;\n right: number;\n top: number;\n bottom: number;\n }>;\n};\n\nexport type PosterLayoutConfig = {\n message?: layoutInfo;\n\n domain?: layoutInfo;\n position?: layoutInfo;\n unrealizedPnl?: layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n\n informations?: layoutInfo & {\n labelColor?: string;\n };\n updateTime?: layoutInfo;\n};\n\nexport type DrawOptions = {\n /**\n * Color of common text\n */\n color?: string;\n fontFamily?: string;\n /**\n * Lose color\n */\n lossColor?: string;\n /**\n * Profit color\n */\n profitColor?: string;\n /**\n * The brand color of the application\n */\n brandColor?: string;\n backgroundColor?: string;\n backgroundImg?: string;\n data?: posterDataSource;\n layout?: PosterLayoutConfig;\n};\n\nexport abstract class BasePaint {\n constructor(\n protected ctx: CanvasRenderingContext2D,\n protected painter: PosterPainter\n ) {}\n abstract draw(options: DrawOptions): Promise<void>;\n}\n"],"names":["BasePaint","constructor","ctx","painter"],"rangeMappings":";;;;;;;","mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/basePaint.ts"],"sourcesContent":["import { OrderSide } from \"@orderly.network/types\";\nimport { PosterPainter } from \"./painter\";\n\nexport type posterDataSource = {\n /**\n * slogan of the poster\n */\n message?: string;\n position: {\n symbol: string;\n // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\n /**\n * The leverage of the position\n */\n leverage: number;\n /**\n * The unrealized PnL of the position\n */\n pnl: number;\n /**\n * The return on investment of the position\n */\n ROI: number;\n /**\n * The informations of the position, such as open price, opened at, mark price, quantity and custom message.\n */\n informations: { title: string; value: string }[];\n /**\n * The quote currency of the position\n */\n currency: string;\n };\n /**\n * The domain of the application\n */\n domain: string;\n\n /**\n * The update time of the position\n */\n updateTime: string;\n\n referral?: {\n code: string;\n slogan: string;\n link: string;\n } | null;\n};\n\nexport type layoutInfo = {\n width?: number;\n height?: number;\n // padding?: number;\n // margin?: number;\n fontSize?: number;\n\n color?: string;\n textAlign?: CanvasTextAlign;\n textBaseline?: CanvasTextBaseline;\n position: Partial<{\n left: number;\n right: number;\n top: number;\n bottom: number;\n }>;\n};\n\nexport type PosterLayoutConfig = {\n message?: layoutInfo;\n\n domain?: layoutInfo;\n position?: layoutInfo;\n unrealizedPnl?: layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n\n informations?: layoutInfo & {\n labelColor?: string;\n };\n updateTime?: layoutInfo;\n};\n\nexport type DrawOptions = {\n /**\n * Color of common text\n */\n color?: string;\n fontFamily?: string;\n /**\n * Lose color\n */\n lossColor?: string;\n /**\n * Profit color\n */\n profitColor?: string;\n /**\n * The brand color of the application\n */\n brandColor?: string;\n backgroundColor?: string;\n backgroundImg?: string;\n data?: posterDataSource;\n layout?: PosterLayoutConfig;\n};\n\nexport abstract class BasePaint {\n constructor(\n protected ctx: CanvasRenderingContext2D,\n protected painter: PosterPainter\n ) {}\n abstract draw(options: DrawOptions): Promise<void>;\n}\n"],"names":["BasePaint","constructor","ctx","painter"],"rangeMappings":";;;;;;;","mappings":"AA4GA,OAAO,MAAeA;;;IACpBC,YACE,AAAUC,GAA6B,EACvC,AAAUC,OAAsB,CAChC;aAFUD,MAAAA;aACAC,UAAAA;IACT;AAEL"}
|
|
@@ -4,6 +4,7 @@ export declare class DataPaint extends BasePaint {
|
|
|
4
4
|
private DEFAULT_PROFIT_COLOR;
|
|
5
5
|
private DEFAULT_LOSS_COLOR;
|
|
6
6
|
private transformTop;
|
|
7
|
+
private QRCODE_SIZE;
|
|
7
8
|
draw(options: DrawOptions): Promise<void>;
|
|
8
9
|
private drawMessage;
|
|
9
10
|
private drawPosition;
|
|
@@ -11,7 +12,9 @@ export declare class DataPaint extends BasePaint {
|
|
|
11
12
|
private drawInformations;
|
|
12
13
|
private drawDomainUrl;
|
|
13
14
|
private drawPositionTime;
|
|
15
|
+
private drawReferralCode;
|
|
14
16
|
private _drawText;
|
|
17
|
+
private hasReferral;
|
|
15
18
|
private _ratio;
|
|
16
19
|
}
|
|
17
20
|
//# sourceMappingURL=dataPaint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAIjE,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,qBAAqB,CAAO;IAEpC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,WAAW,CAAM;IAEnB,IAAI,CAAC,OAAO,EAAE,WAAW;IAkD/B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,iBAAiB;IAyEzB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,gBAAgB;IA4DxB,OAAO,CAAC,SAAS;IA0CjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,MAAM;CAGf"}
|
|
@@ -1,36 +1,42 @@
|
|
|
1
1
|
import { commify } from "@orderly.network/utils";
|
|
2
2
|
import { BasePaint } from "./basePaint";
|
|
3
3
|
import { path } from "ramda";
|
|
4
|
+
import { qrPaint } from "./qrPaint";
|
|
4
5
|
export class DataPaint extends BasePaint {
|
|
5
6
|
positionInfoCellWidth = 110;
|
|
6
7
|
DEFAULT_PROFIT_COLOR = "rgb(0,181,159)";
|
|
7
8
|
DEFAULT_LOSS_COLOR = "rgb(255,103,194)";
|
|
8
9
|
transformTop = 0;
|
|
10
|
+
QRCODE_SIZE = 56;
|
|
9
11
|
async draw(options) {
|
|
10
12
|
const needDrawDetails = Array.isArray(options.data?.position?.informations) && (options.data?.position?.informations?.length ?? 0) > 0;
|
|
13
|
+
const hasReferral = this.hasReferral(options);
|
|
11
14
|
// const hasMessage = !!options.data?.message;
|
|
12
15
|
const hasMessage = true;
|
|
13
16
|
this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;
|
|
14
17
|
// If position details are not displayed, the position PNL information will be margin
|
|
15
18
|
// const offsetTop = hasMessage ? 50 : 100;
|
|
16
|
-
const offsetTop = 100;
|
|
19
|
+
const offsetTop = 0; // 100;
|
|
17
20
|
// const offsetMessage = hasMessage ? 0 : -50;
|
|
18
21
|
if (!!options.data?.message) {
|
|
19
22
|
this.drawMessage(options);
|
|
20
23
|
}
|
|
21
24
|
if (!!options.data?.position) {
|
|
22
|
-
this.drawPosition(options, needDrawDetails ? 0 : offsetTop);
|
|
25
|
+
this.drawPosition(options, needDrawDetails || hasReferral ? 0 : offsetTop);
|
|
23
26
|
}
|
|
24
27
|
if (needDrawDetails) {
|
|
25
28
|
this.drawInformations(options);
|
|
26
29
|
}
|
|
27
|
-
this.drawUnrealizedPnL(options, needDrawDetails ? 0 : offsetTop);
|
|
30
|
+
this.drawUnrealizedPnL(options, needDrawDetails || hasReferral ? 0 : offsetTop);
|
|
28
31
|
if (!!options.data?.domain) {
|
|
29
32
|
this.drawDomainUrl(options);
|
|
30
33
|
}
|
|
31
34
|
if (typeof options.data?.updateTime !== "undefined") {
|
|
32
35
|
this.drawPositionTime(options);
|
|
33
36
|
}
|
|
37
|
+
if (typeof options.data?.referral !== "undefined") {
|
|
38
|
+
this.drawReferralCode(options);
|
|
39
|
+
}
|
|
34
40
|
}
|
|
35
41
|
drawMessage(options) {
|
|
36
42
|
// console.log("draw message", options);
|
|
@@ -183,22 +189,24 @@ export class DataPaint extends BasePaint {
|
|
|
183
189
|
});
|
|
184
190
|
});
|
|
185
191
|
}
|
|
186
|
-
drawDomainUrl(options) {
|
|
192
|
+
drawDomainUrl(options, onlyMeasure = false) {
|
|
187
193
|
const layout = path([
|
|
188
194
|
"layout",
|
|
189
195
|
"domain"
|
|
190
196
|
], options);
|
|
197
|
+
const hasReferral = this.hasReferral(options);
|
|
191
198
|
const { position } = layout;
|
|
192
199
|
const top = this.painter.height - position.bottom;
|
|
193
|
-
this._drawText(options.data?.domain, {
|
|
194
|
-
left: this._ratio(position.left),
|
|
195
|
-
top: this._ratio(top),
|
|
200
|
+
return this._drawText(options.data?.domain, {
|
|
201
|
+
left: !hasReferral ? this._ratio(position.left) : this._ratio(this.painter.width - 20),
|
|
202
|
+
top: !hasReferral ? this._ratio(top) : this._ratio(this.painter.height - 16),
|
|
196
203
|
fontSize: this._ratio(layout.fontSize),
|
|
197
204
|
color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
|
|
198
205
|
fontFamily: options.fontFamily,
|
|
199
206
|
textBaseline: layout.textBaseline,
|
|
207
|
+
textAlign: !hasReferral ? layout.textAlign : "end",
|
|
200
208
|
fontWeight: 600
|
|
201
|
-
});
|
|
209
|
+
}, onlyMeasure);
|
|
202
210
|
}
|
|
203
211
|
drawPositionTime(options) {
|
|
204
212
|
const layout = path([
|
|
@@ -206,20 +214,79 @@ export class DataPaint extends BasePaint {
|
|
|
206
214
|
"updateTime"
|
|
207
215
|
], options);
|
|
208
216
|
const { position } = layout;
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
;
|
|
212
|
-
|
|
213
|
-
|
|
217
|
+
const hasReferral = this.hasReferral(options);
|
|
218
|
+
let top = this.painter.height - position.bottom;
|
|
219
|
+
let left = this._ratio(position.left);
|
|
220
|
+
if (hasReferral) {
|
|
221
|
+
const metrics = this.drawDomainUrl(options, true);
|
|
222
|
+
// console.log("metrics", metrics);
|
|
223
|
+
left = this._ratio(this.painter.width) - metrics.width - this._ratio(8 + position.left);
|
|
224
|
+
top = this.painter.height - position.bottom;
|
|
225
|
+
// console.log("left", left, top, metrics.width, this._ratio(top));
|
|
226
|
+
}
|
|
227
|
+
this._drawText(!hasReferral ? options.data?.updateTime : `Share on ${options.data?.updateTime} |`, {
|
|
228
|
+
left,
|
|
214
229
|
top: this._ratio(top),
|
|
230
|
+
// top: 536,
|
|
215
231
|
fontSize: this._ratio(layout.fontSize),
|
|
216
232
|
color: layout.color,
|
|
217
|
-
|
|
233
|
+
// color: "red",
|
|
234
|
+
textAlign: !hasReferral ? layout.textAlign : "end",
|
|
218
235
|
fontFamily: options.fontFamily,
|
|
219
236
|
textBaseline: layout.textBaseline
|
|
220
237
|
});
|
|
221
238
|
}
|
|
222
|
-
|
|
239
|
+
drawReferralCode(options) {
|
|
240
|
+
if (!options.data?.referral) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const layout = path([
|
|
244
|
+
"layout",
|
|
245
|
+
"updateTime"
|
|
246
|
+
], options);
|
|
247
|
+
const { position } = layout;
|
|
248
|
+
const top = this.painter.height - (position.bottom ?? 0);
|
|
249
|
+
const messageLayout = path([
|
|
250
|
+
"layout",
|
|
251
|
+
"message"
|
|
252
|
+
], options);
|
|
253
|
+
const url = new URL(options.data.referral.link);
|
|
254
|
+
const searchParams = url.searchParams;
|
|
255
|
+
searchParams.append("ref", options.data.referral.code);
|
|
256
|
+
url.search = searchParams.toString();
|
|
257
|
+
qrPaint(this.ctx, {
|
|
258
|
+
size: this._ratio(this.QRCODE_SIZE),
|
|
259
|
+
padding: this._ratio(2),
|
|
260
|
+
left: this._ratio(position.left),
|
|
261
|
+
top: this._ratio(top - this.QRCODE_SIZE),
|
|
262
|
+
data: `${url.toString()}`
|
|
263
|
+
});
|
|
264
|
+
this._drawText(options.data.referral.slogan, {
|
|
265
|
+
left: this._ratio(position.left + 66),
|
|
266
|
+
top: this._ratio(top - this.QRCODE_SIZE),
|
|
267
|
+
fontSize: this._ratio(14),
|
|
268
|
+
color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
|
|
269
|
+
fontFamily: options.fontFamily,
|
|
270
|
+
textBaseline: "top"
|
|
271
|
+
});
|
|
272
|
+
this._drawText("Referral Code", {
|
|
273
|
+
left: this._ratio(position.left + 66),
|
|
274
|
+
top: this._ratio(top - 29),
|
|
275
|
+
fontSize: this._ratio(12),
|
|
276
|
+
color: layout.color,
|
|
277
|
+
fontFamily: options.fontFamily,
|
|
278
|
+
textBaseline: "middle"
|
|
279
|
+
});
|
|
280
|
+
this._drawText(options.data.referral.code, {
|
|
281
|
+
left: this._ratio(position.left + 66),
|
|
282
|
+
top: this._ratio(top),
|
|
283
|
+
fontSize: this._ratio(16),
|
|
284
|
+
color: messageLayout.color,
|
|
285
|
+
fontFamily: options.fontFamily,
|
|
286
|
+
textBaseline: "bottom"
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
_drawText(str, options, onlyMeasure = false) {
|
|
223
290
|
let boundingBox;
|
|
224
291
|
const { left = 30, top = 30, fontSize = 13, fontWeight = 500, color = "black", textBaseline = "middle", textAlign = "start" } = options ?? {};
|
|
225
292
|
this.ctx.save();
|
|
@@ -229,10 +296,15 @@ export class DataPaint extends BasePaint {
|
|
|
229
296
|
this.ctx.textBaseline = textBaseline;
|
|
230
297
|
this.ctx.textAlign = textAlign;
|
|
231
298
|
boundingBox = this.ctx.measureText(str);
|
|
232
|
-
|
|
299
|
+
if (!onlyMeasure) {
|
|
300
|
+
this.ctx.fillText(str, left, top);
|
|
301
|
+
}
|
|
233
302
|
this.ctx.restore();
|
|
234
303
|
return boundingBox;
|
|
235
304
|
}
|
|
305
|
+
hasReferral(options) {
|
|
306
|
+
return typeof options.data?.referral !== "undefined";
|
|
307
|
+
}
|
|
236
308
|
_ratio(num) {
|
|
237
309
|
return num * this.painter.ratio;
|
|
238
310
|
}
|