react-native-unit-components 1.7.0 → 1.8.0
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/lib/commonjs/components/UNAccountComponent/UNAccountComponent.js +2 -3
- package/lib/commonjs/components/UNAccountComponent/UNAccountComponent.js.map +1 -1
- package/lib/commonjs/components/UNCardComponent/UNCardComponent.js +2 -3
- package/lib/commonjs/components/UNCardComponent/UNCardComponent.js.map +1 -1
- package/lib/commonjs/helpers/pushProvisioningService/hooks/useCardWallet.js.map +1 -1
- package/lib/commonjs/scripts/html/fontFaces.js +56 -0
- package/lib/commonjs/scripts/html/fontFaces.js.map +1 -0
- package/lib/commonjs/styles/fonts.js +71 -0
- package/lib/commonjs/styles/fonts.js.map +1 -0
- package/lib/commonjs/types/shared/fonts.types.js +20 -0
- package/lib/commonjs/types/shared/fonts.types.js.map +1 -0
- package/lib/commonjs/types/shared/index.js +22 -0
- package/lib/commonjs/types/shared/index.js.map +1 -1
- package/lib/commonjs/unitSdkManager/UnitSdkManager.js +6 -1
- package/lib/commonjs/unitSdkManager/UnitSdkManager.js.map +1 -1
- package/lib/commonjs/webComponent/WebComponent.js +5 -3
- package/lib/commonjs/webComponent/WebComponent.js.map +1 -1
- package/lib/commonjs/webComponent/html.js +11 -2
- package/lib/commonjs/webComponent/html.js.map +1 -1
- package/lib/module/components/UNAccountComponent/UNAccountComponent.js +3 -4
- package/lib/module/components/UNAccountComponent/UNAccountComponent.js.map +1 -1
- package/lib/module/components/UNCardComponent/UNCardComponent.js +3 -4
- package/lib/module/components/UNCardComponent/UNCardComponent.js.map +1 -1
- package/lib/module/helpers/pushProvisioningService/hooks/useCardWallet.js.map +1 -1
- package/lib/module/scripts/html/fontFaces.js +49 -0
- package/lib/module/scripts/html/fontFaces.js.map +1 -0
- package/lib/module/styles/fonts.js +64 -0
- package/lib/module/styles/fonts.js.map +1 -0
- package/lib/module/types/shared/fonts.types.js +13 -0
- package/lib/module/types/shared/fonts.types.js.map +1 -0
- package/lib/module/types/shared/index.js +2 -0
- package/lib/module/types/shared/index.js.map +1 -1
- package/lib/module/unitSdkManager/UnitSdkManager.js +6 -1
- package/lib/module/unitSdkManager/UnitSdkManager.js.map +1 -1
- package/lib/module/webComponent/WebComponent.js +5 -3
- package/lib/module/webComponent/WebComponent.js.map +1 -1
- package/lib/module/webComponent/html.js +11 -2
- package/lib/module/webComponent/html.js.map +1 -1
- package/lib/typescript/scripts/html/fontFaces.d.ts +2 -0
- package/lib/typescript/styles/fonts.d.ts +1 -0
- package/lib/typescript/types/shared/fonts.types.d.ts +23 -0
- package/lib/typescript/types/shared/index.d.ts +2 -0
- package/lib/typescript/unitSdkManager/UnitSdkManager.d.ts +4 -1
- package/lib/typescript/webComponent/WebComponent.d.ts +0 -1
- package/lib/typescript/webComponent/html.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/UNAccountComponent/UNAccountComponent.tsx +2 -4
- package/src/components/UNCardComponent/UNCardComponent.tsx +2 -4
- package/src/helpers/pushProvisioningService/hooks/useCardWallet.ts +2 -2
- package/src/scripts/html/fontFaces.ts +56 -0
- package/src/styles/fonts.ts +70 -0
- package/src/types/shared/fonts.types.ts +28 -0
- package/src/types/shared/index.ts +2 -0
- package/src/unitSdkManager/UnitSdkManager.ts +9 -1
- package/src/webComponent/WebComponent.tsx +7 -4
- package/src/webComponent/html.ts +11 -2
|
@@ -10,7 +10,8 @@ const HTML_PLACEHOLDER = {
|
|
|
10
10
|
SCRIPT_UNIT: '<SCRIPT_UNIT>',
|
|
11
11
|
BODY: '<BODY_HTML_CODE>',
|
|
12
12
|
SCRIPT_FROM_NATIVE: '<SCRIPT_FROM_NATIVE>',
|
|
13
|
-
WINDOW_PARAMS: '<WINDOW_PARAMS>'
|
|
13
|
+
WINDOW_PARAMS: '<WINDOW_PARAMS>',
|
|
14
|
+
FONT_FACES: '<FONT_FACES>'
|
|
14
15
|
};
|
|
15
16
|
exports.HTML_PLACEHOLDER = HTML_PLACEHOLDER;
|
|
16
17
|
const htmlText = `
|
|
@@ -28,9 +29,17 @@ const htmlText = `
|
|
|
28
29
|
${HTML_PLACEHOLDER.WINDOW_PARAMS}
|
|
29
30
|
</script>
|
|
30
31
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
|
|
32
|
+
|
|
33
|
+
<style type="text/css">
|
|
34
|
+
${HTML_PLACEHOLDER.FONT_FACES}
|
|
35
|
+
|
|
36
|
+
body {
|
|
37
|
+
margin: 0;
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
31
40
|
</head>
|
|
32
41
|
|
|
33
|
-
<body
|
|
42
|
+
<body>
|
|
34
43
|
${HTML_PLACEHOLDER.BODY}
|
|
35
44
|
|
|
36
45
|
<script>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_bodyScript","HTML_PLACEHOLDER","SCRIPT_UNIT","BODY","SCRIPT_FROM_NATIVE","WINDOW_PARAMS","exports","htmlText","Platform","OS","POST_MESSAGE_TO_SDK","POST_PAGE_HEIGHT","LISTENERS","isPageLoaded","onLoad","unitRequestDownload","requestRendering","requestOpenLink","requestCloseFlow","cardActivated","cardStatusChange","unitRequestExternalSdk","unitAccountChanged","unitActivityFiltersChanged","DISPATCH_RENDERING_EVENT","DISPATCH_OPEN_ACTIONS_MENU","DISPATCH_REQUEST_CARD_ACTION","DISPATCH_ACTIVITY_FILTER_CHANGED_EVENT","DISPATCH_REQUEST_ACCOUNT_ACTION","_default","default"],"sources":["html.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { DISPATCH_RENDERING_EVENT, LISTENERS, POST_MESSAGE_TO_SDK, POST_PAGE_HEIGHT, DISPATCH_REQUEST_CARD_ACTION, DISPATCH_OPEN_ACTIONS_MENU, DISPATCH_REQUEST_ACCOUNT_ACTION, DISPATCH_ACTIVITY_FILTER_CHANGED_EVENT } from '../scripts/html/bodyScript';\n\nexport const HTML_PLACEHOLDER = {\n SCRIPT_UNIT: '<SCRIPT_UNIT>',\n BODY: '<BODY_HTML_CODE>',\n SCRIPT_FROM_NATIVE: '<SCRIPT_FROM_NATIVE>',\n WINDOW_PARAMS: '<WINDOW_PARAMS>'\n};\n\nconst htmlText = `\n <!DOCTYPE html>\n <html lang=\"en\">\n\n <head lang=\"en\">\n <title>Unit Web SDK Demo</title>\n <script>\n window.UnitMobileSDK = true\n window.UnitMobileSDKConfig = {\n os: \"${Platform.OS}\",\n walletName: \"${Platform.OS === 'ios' ? 'Apple' : 'Google'}\",\n }\n ${HTML_PLACEHOLDER.WINDOW_PARAMS}\n </script>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0\">\n
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_bodyScript","HTML_PLACEHOLDER","SCRIPT_UNIT","BODY","SCRIPT_FROM_NATIVE","WINDOW_PARAMS","FONT_FACES","exports","htmlText","Platform","OS","POST_MESSAGE_TO_SDK","POST_PAGE_HEIGHT","LISTENERS","isPageLoaded","onLoad","unitRequestDownload","requestRendering","requestOpenLink","requestCloseFlow","cardActivated","cardStatusChange","unitRequestExternalSdk","unitAccountChanged","unitActivityFiltersChanged","DISPATCH_RENDERING_EVENT","DISPATCH_OPEN_ACTIONS_MENU","DISPATCH_REQUEST_CARD_ACTION","DISPATCH_ACTIVITY_FILTER_CHANGED_EVENT","DISPATCH_REQUEST_ACCOUNT_ACTION","_default","default"],"sources":["html.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { DISPATCH_RENDERING_EVENT, LISTENERS, POST_MESSAGE_TO_SDK, POST_PAGE_HEIGHT, DISPATCH_REQUEST_CARD_ACTION, DISPATCH_OPEN_ACTIONS_MENU, DISPATCH_REQUEST_ACCOUNT_ACTION, DISPATCH_ACTIVITY_FILTER_CHANGED_EVENT } from '../scripts/html/bodyScript';\n\nexport const HTML_PLACEHOLDER = {\n SCRIPT_UNIT: '<SCRIPT_UNIT>',\n BODY: '<BODY_HTML_CODE>',\n SCRIPT_FROM_NATIVE: '<SCRIPT_FROM_NATIVE>',\n WINDOW_PARAMS: '<WINDOW_PARAMS>',\n FONT_FACES: '<FONT_FACES>'\n};\n\nconst htmlText = `\n <!DOCTYPE html>\n <html lang=\"en\">\n\n <head lang=\"en\">\n <title>Unit Web SDK Demo</title>\n <script>\n window.UnitMobileSDK = true\n window.UnitMobileSDKConfig = {\n os: \"${Platform.OS}\",\n walletName: \"${Platform.OS === 'ios' ? 'Apple' : 'Google'}\",\n }\n ${HTML_PLACEHOLDER.WINDOW_PARAMS}\n </script>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0\">\n\n <style type=\"text/css\">\n ${HTML_PLACEHOLDER.FONT_FACES}\n\n body {\n margin: 0;\n }\n </style>\n </head>\n\n <body>\n ${HTML_PLACEHOLDER.BODY}\n\n <script>\n ${POST_MESSAGE_TO_SDK}\n\n ${POST_PAGE_HEIGHT}\n\n ${LISTENERS.isPageLoaded}\n\n ${LISTENERS.onLoad}\n\n ${LISTENERS.unitRequestDownload}\n\n ${LISTENERS.requestRendering}\n\n ${LISTENERS.requestOpenLink}\n\n ${LISTENERS.requestCloseFlow}\n\n ${LISTENERS.cardActivated}\n\n ${LISTENERS.cardStatusChange}\n\n ${LISTENERS.unitRequestExternalSdk}\n\n ${LISTENERS.unitAccountChanged}\n\n ${LISTENERS.unitActivityFiltersChanged}\n\n ${DISPATCH_RENDERING_EVENT}\n\n ${DISPATCH_OPEN_ACTIONS_MENU}\n\n ${DISPATCH_REQUEST_CARD_ACTION}\n\n ${DISPATCH_ACTIVITY_FILTER_CHANGED_EVENT}\n\n ${DISPATCH_REQUEST_ACCOUNT_ACTION}\n\n ${HTML_PLACEHOLDER.SCRIPT_FROM_NATIVE}\n </script>\n </body>\n </html>\n`;\n\nexport default htmlText;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEO,MAAME,gBAAgB,GAAG;EAC9BC,WAAW,EAAE,eAAe;EAC5BC,IAAI,EAAE,kBAAkB;EACxBC,kBAAkB,EAAE,sBAAsB;EAC1CC,aAAa,EAAE,iBAAiB;EAChCC,UAAU,EAAE;AACd,CAAC;AAACC,OAAA,CAAAN,gBAAA,GAAAA,gBAAA;AAEF,MAAMO,QAAQ,GAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAaC,qBAAQ,CAACC,EAAG;AACzB,qBAAqBD,qBAAQ,CAACC,EAAE,KAAK,KAAK,GAAG,OAAO,GAAG,QAAS;AAChE;AACA,MAAMT,gBAAgB,CAACI,aAAc;AACrC;AACA;AACA;AACA;AACA,QAAQJ,gBAAgB,CAACK,UAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAML,gBAAgB,CAACE,IAAK;AAC5B;AACA;AACA,QAAQQ,+BAAoB;AAC5B;AACA,QAAQC,4BAAiB;AACzB;AACA,QAAQC,qBAAS,CAACC,YAAa;AAC/B;AACA,QAAQD,qBAAS,CAACE,MAAO;AACzB;AACA,QAAQF,qBAAS,CAACG,mBAAoB;AACtC;AACA,QAAQH,qBAAS,CAACI,gBAAiB;AACnC;AACA,QAAQJ,qBAAS,CAACK,eAAgB;AAClC;AACA,QAAQL,qBAAS,CAACM,gBAAiB;AACnC;AACA,QAAQN,qBAAS,CAACO,aAAc;AAChC;AACA,QAAQP,qBAAS,CAACQ,gBAAiB;AACnC;AACA,QAAQR,qBAAS,CAACS,sBAAuB;AACzC;AACA,QAAQT,qBAAS,CAACU,kBAAmB;AACrC;AACA,QAAQV,qBAAS,CAACW,0BAA2B;AAC7C;AACA,QAAQC,oCAAyB;AACjC;AACA,QAAQC,sCAA2B;AACnC;AACA,QAAQC,wCAA6B;AACrC;AACA,QAAQC,kDAAuC;AAC/C;AACA,QAAQC,2CAAgC;AACxC;AACA,QAAQ5B,gBAAgB,CAACG,kBAAmB;AAC5C;AACA;AACA;AACA,CAAC;AAAC,IAAA0B,QAAA,GAEatB,QAAQ;AAAAD,OAAA,CAAAwB,OAAA,GAAAD,QAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { View } from 'react-native';
|
|
3
3
|
import { PageMessage } from '../..//messages/webMessages/pageMessage';
|
|
4
4
|
import { UnitMessage } from '../../messages/webMessages/unitMessages';
|
|
5
5
|
import EventBus from '../../helpers/EventBus';
|
|
@@ -18,7 +18,6 @@ export let AccountAction;
|
|
|
18
18
|
})(AccountAction || (AccountAction = {}));
|
|
19
19
|
export const UNAccountComponent = /*#__PURE__*/React.forwardRef(function UNAccountComponent(props, accountRef) {
|
|
20
20
|
const [height, setHeight] = useState(0);
|
|
21
|
-
const windowWidth = Dimensions.get('window').width;
|
|
22
21
|
const [requestRefreshEvent, setRequestRefreshEvent] = useState(null);
|
|
23
22
|
const webRef = useRef(null);
|
|
24
23
|
const handleAccountChanged = account => {
|
|
@@ -88,7 +87,8 @@ export const UNAccountComponent = /*#__PURE__*/React.forwardRef(function UNAccou
|
|
|
88
87
|
};
|
|
89
88
|
return /*#__PURE__*/React.createElement(View, {
|
|
90
89
|
style: {
|
|
91
|
-
height
|
|
90
|
+
height,
|
|
91
|
+
width: '100%'
|
|
92
92
|
}
|
|
93
93
|
}, /*#__PURE__*/React.createElement(WebComponent, {
|
|
94
94
|
ref: webRef,
|
|
@@ -99,7 +99,6 @@ export const UNAccountComponent = /*#__PURE__*/React.forwardRef(function UNAccou
|
|
|
99
99
|
theme: props.theme,
|
|
100
100
|
language: props.language,
|
|
101
101
|
onMessage: message => handleMessage(message),
|
|
102
|
-
width: windowWidth,
|
|
103
102
|
isScrollable: false
|
|
104
103
|
}));
|
|
105
104
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useImperativeHandle","useRef","useState","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useImperativeHandle","useRef","useState","View","PageMessage","UnitMessage","EventBus","WebComponent","getAccountParams","getAccountScript","injectOpenActionsMenuScript","injectRefreshEventIfNeeded","injectRequestAccountActionScript","useListenerToBus","AccountMessage","RESPONSE_KEYS","BottomSheetRenderingType","PresentationMode","WebComponentType","BottomSheetNativeMessage","AccountAction","UNAccountComponent","forwardRef","props","accountRef","height","setHeight","requestRefreshEvent","setRequestRefreshEvent","webRef","handleAccountChanged","account","onAccountChanged","requestRefresh","data","handleUnitOnLoad","response","onLoad","errors","console","error","busEventKey","UNIT_REQUEST_REFRESH","action","UNIT_ACCOUNT_CHANGED","current","openActionsMenu","openAction","handleMessage","message","type","UNIT_ON_LOAD","details","UNIT_REQUEST_RENDERING","slotData","componentName","componentResourceId","accountId","requestRenderingEvent","event","Slot","Instance","START_FLOW","PAGE_HEIGHT","createElement","style","width","ref","presentationMode","Default","params","script","theme","language","onMessage","isScrollable"],"sources":["UNAccountComponent.tsx"],"sourcesContent":["import React, { useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { View } from 'react-native';\nimport type WebView from 'react-native-webview';\nimport { HeightEvent, PageMessage } from '../..//messages/webMessages/pageMessage';\nimport { RequestRefreshEvent, RequestRenderingEvent, UnitMessage } from '../../messages/webMessages/unitMessages';\nimport EventBus from '../../helpers/EventBus';\nimport { WebComponent } from '../../webComponent/WebComponent';\nimport type { WebViewMessage } from '../../messages/webMessages';\nimport { getAccountParams, getAccountScript, injectOpenActionsMenuScript, injectRefreshEventIfNeeded, injectRequestAccountActionScript } from './UNAccountComponent.utils';\nimport type { UNError, UNOnLoadResponse, UNOnLoadResponseData } from '../../types/shared';\nimport { useListenerToBus } from '../../hooks/listenerToBus';\nimport type { UNAccountData } from '../../types/shared/account.types';\nimport { AccountMessage } from '../../messages/webMessages/accountMessage';\nimport { RESPONSE_KEYS, UnitOnLoadResponseEvent } from '../../messages/webMessages/onLoadMessage';\nimport type { UNAccountMenuAction } from '../../types/shared';\nimport { BottomSheetRenderingType, SlotRendering, type BottomSheetSlotData } from '../../types/internal/bottomSheet.types';\nimport { PresentationMode, WebComponentType } from '../../types/internal/webComponent.types';\nimport { BottomSheetNativeMessage } from '../../messages/nativeMessages/bottomSheetMessage';\n\nexport interface UNAccountComponentProps {\n // inputs\n accountId?: string;\n customerToken: string;\n\n // ui\n theme?: string;\n language?: string;\n hideActionsMenuButton?: boolean;\n hideSelectionMenuButton?: boolean;\n\n // events\n onLoad?: (response: UNOnLoadResponse<[UNAccountData]>) => void;\n onAccountChanged?: (account: UNAccountData) => void;\n}\n\nexport interface UNAccountRef {\n openActionsMenu: () => void;\n openAction: (action: UNAccountMenuAction) => void;\n}\n\nexport enum AccountAction {\n List = 'account-list',\n Menu = 'account-menu'\n}\n\nexport const UNAccountComponent = React.forwardRef<UNAccountRef, UNAccountComponentProps>(function UNAccountComponent(props, accountRef) {\n const [height, setHeight] = useState(0);\n\n const [requestRefreshEvent, setRequestRefreshEvent] = useState<RequestRefreshEvent | null>(null);\n\n const webRef = useRef<WebView>(null);\n\n const handleAccountChanged = (account: UNAccountData) => {\n props.onAccountChanged && props.onAccountChanged(account);\n };\n\n const requestRefresh = (data: RequestRefreshEvent) => {\n setRequestRefreshEvent(data);\n };\n\n const handleUnitOnLoad = (response: UnitOnLoadResponseEvent) => {\n if (!props.onLoad) {\n return;\n }\n\n if (RESPONSE_KEYS.errors in response) {\n props.onLoad(response as UNError);\n return;\n }\n\n if (RESPONSE_KEYS.account in response) {\n // AccountsOnLoadResponse;\n props.onLoad(response[RESPONSE_KEYS.account] as UNOnLoadResponseData<[UNAccountData]>);\n return;\n }\n\n console.error('On Load Error: unexpected response type.');\n return;\n };\n\n useListenerToBus({ busEventKey: UnitMessage.UNIT_REQUEST_REFRESH, action: requestRefresh });\n useListenerToBus({ busEventKey: AccountMessage.UNIT_ACCOUNT_CHANGED, action: handleAccountChanged });\n\n useEffect(() => {\n injectRefreshEventIfNeeded(webRef.current, requestRefreshEvent);\n }, [requestRefreshEvent]);\n\n useImperativeHandle(accountRef, () => ({\n openActionsMenu() {\n injectOpenActionsMenuScript(webRef.current);\n },\n openAction(action: UNAccountMenuAction) {\n injectRequestAccountActionScript(webRef.current, action);\n }\n }));\n\n const handleMessage = (message: WebViewMessage) => {\n switch (message.type) {\n case UnitMessage.UNIT_ON_LOAD:\n handleUnitOnLoad(message.details as UnitOnLoadResponseEvent);\n break;\n case UnitMessage.UNIT_REQUEST_RENDERING: {\n const slotData: BottomSheetSlotData = {\n componentName: WebComponentType.account,\n componentResourceId: props.accountId,\n requestRenderingEvent: message.details as RequestRenderingEvent\n };\n\n const event = {\n type: BottomSheetRenderingType.Slot,\n data: slotData\n } as SlotRendering;\n\n EventBus.Instance.event(BottomSheetNativeMessage.START_FLOW, event);\n break;\n }\n case PageMessage.PAGE_HEIGHT:\n setHeight((message.details as HeightEvent).height);\n break;\n }\n };\n\n return (\n <View style={{ height, width: '100%' }}>\n <WebComponent\n ref={webRef}\n type={WebComponentType.account}\n presentationMode={PresentationMode.Default}\n params={getAccountParams(props)}\n script={getAccountScript()}\n theme={props.theme}\n language={props.language}\n onMessage={message => handleMessage(message)}\n isScrollable={false}\n />\n </View>\n );\n});\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useImperativeHandle, useRef, useState, useEffect } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { View } from 'react-native';
|
|
3
3
|
import { PageMessage } from '../../messages/webMessages/pageMessage';
|
|
4
4
|
import { UnitMessage } from '../../messages/webMessages/unitMessages';
|
|
5
5
|
import EventBus from '../../helpers/EventBus';
|
|
@@ -14,7 +14,6 @@ import { UnitSDK } from '../../unitSdkManager/UnitSdkManager';
|
|
|
14
14
|
import { BottomSheetNativeMessage } from '../../messages/nativeMessages/bottomSheetMessage';
|
|
15
15
|
export const UNCardComponent = /*#__PURE__*/React.forwardRef(function UNCardComponent(props, cardRef) {
|
|
16
16
|
const [height, setHeight] = useState(0);
|
|
17
|
-
const windowWidth = Dimensions.get('window').width;
|
|
18
17
|
const webRef = useRef(null);
|
|
19
18
|
useImperativeHandle(cardRef, () => ({
|
|
20
19
|
openActionsMenu() {
|
|
@@ -100,7 +99,8 @@ export const UNCardComponent = /*#__PURE__*/React.forwardRef(function UNCardComp
|
|
|
100
99
|
}, [props.pushProvisioningModule]);
|
|
101
100
|
return /*#__PURE__*/React.createElement(View, {
|
|
102
101
|
style: {
|
|
103
|
-
height
|
|
102
|
+
height,
|
|
103
|
+
width: '100%'
|
|
104
104
|
}
|
|
105
105
|
}, /*#__PURE__*/React.createElement(WebComponent, {
|
|
106
106
|
ref: webRef,
|
|
@@ -111,7 +111,6 @@ export const UNCardComponent = /*#__PURE__*/React.forwardRef(function UNCardComp
|
|
|
111
111
|
language: props.language,
|
|
112
112
|
script: getCardScript(),
|
|
113
113
|
onMessage: message => handleMessage(message),
|
|
114
|
-
width: windowWidth,
|
|
115
114
|
isScrollable: false
|
|
116
115
|
}));
|
|
117
116
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useImperativeHandle","useRef","useState","useEffect","Dimensions","View","PageMessage","UnitMessage","EventBus","WebComponent","useListenerToBus","getCardParams","getCardScript","injectRefreshEventIfNeeded","injectOpenActionsMenuScript","injectRequestCardActionScript","CardMessage","RESPONSE_KEYS","BottomSheetRenderingType","PresentationMode","WebComponentType","UnitSDK","BottomSheetNativeMessage","UNCardComponent","forwardRef","props","cardRef","height","setHeight","windowWidth","get","width","webRef","openActionsMenu","current","openAction","action","cardStatusChanged","card","onStatusChanged","cardActivated","onCardActivated","requestRefresh","data","cardId","handleUnitOnLoad","response","onLoad","errors","console","error","busEventKey","UNIT_REQUEST_REFRESH","CARD_STATUS_CHANGED","CARD_ACTIVATED","handleMessage","message","details","type","UNIT_REQUEST_RENDERING","slotData","componentName","componentResourceId","requestRenderingEvent","event","Slot","Instance","START_FLOW","PAGE_HEIGHT","UNIT_ON_LOAD","setCustomerToken","customerToken","pushProvisioningModule","setPushProvisioningModule","createElement","style","ref","presentationMode","Default","params","theme","language","script","onMessage","isScrollable"],"sources":["UNCardComponent.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { Dimensions, View } from 'react-native';\nimport type WebView from 'react-native-webview';\nimport { HeightEvent, PageMessage } from '../../messages/webMessages/pageMessage';\nimport { RequestRefreshEvent, RequestRenderingEvent, UnitMessage } from '../../messages/webMessages/unitMessages';\nimport EventBus from '../../helpers/EventBus';\nimport { WebComponent } from '../../webComponent/WebComponent';\nimport { useListenerToBus } from '../../hooks/listenerToBus';\nimport type { WebViewMessage } from '../../messages/webMessages';\nimport { getCardParams, getCardScript, injectRefreshEventIfNeeded, injectOpenActionsMenuScript, injectRequestCardActionScript } from './UNCardComponent.utils';\nimport type { UNOnLoadResponse, UNCardData, UNError, UNCardMenuAction } from '../../types/shared';\nimport { CardMessage } from '../../messages/webMessages/cardMessage';\nimport type { NativeModules } from 'react-native';\nimport { RESPONSE_KEYS, UnitOnLoadResponseEvent } from '../../messages/webMessages/onLoadMessage';\nimport { BottomSheetRenderingType, SlotRendering, type BottomSheetSlotData } from '../../types/internal/bottomSheet.types';\nimport { PresentationMode, WebComponentType } from '../../types/internal/webComponent.types';\nimport { UnitSDK } from '../../unitSdkManager/UnitSdkManager';\nimport { BottomSheetNativeMessage } from '../../messages/nativeMessages/bottomSheetMessage';\nexport interface UNCardComponentProps {\n // inputs\n cardId: string;\n customerToken: string;\n learnMoreUrl?: string;\n\n // ui\n theme?: string;\n language?: string;\n hideActionsMenuButton?: boolean;\n hideCardTitle?: boolean;\n hideSensitiveDataButton?: boolean;\n\n // events\n onLoad?: (response: UNOnLoadResponse<UNCardData>) => void\n onStatusChanged?: (card: UNCardData) => void;\n onCardActivated?: (card: UNCardData) => void;\n pushProvisioningModule?: typeof NativeModules;\n}\nexport interface CardRef {\n openActionsMenu: () => void;\n openAction: (action: UNCardMenuAction) => void;\n}\n\nexport const UNCardComponent = React.forwardRef<CardRef, UNCardComponentProps>(function UNCardComponent(props, cardRef) {\n const [height, setHeight] = useState(0);\n const windowWidth = Dimensions.get('window').width;\n\n const webRef = useRef<WebView>(null);\n\n useImperativeHandle(cardRef, () => ({\n openActionsMenu() {\n injectOpenActionsMenuScript(webRef.current);\n },\n openAction(action: UNCardMenuAction) {\n injectRequestCardActionScript(webRef.current, action);\n }\n }));\n\n const cardStatusChanged = (card: UNCardData) => {\n if (props.onStatusChanged) {\n props.onStatusChanged(card);\n }\n };\n\n const cardActivated = (card: UNCardData) => {\n if (props.onCardActivated) {\n props.onCardActivated(card);\n }\n };\n\n const requestRefresh = (data: RequestRefreshEvent) => {\n injectRefreshEventIfNeeded(webRef.current, data, props.cardId);\n };\n\n const handleUnitOnLoad = (response: UnitOnLoadResponseEvent) => {\n if (!props.onLoad) {\n return;\n }\n\n if (RESPONSE_KEYS.errors in response) {\n props.onLoad(response as UNError);\n return;\n }\n\n if (RESPONSE_KEYS.card in response) {\n // CardOnLoadResponse\n props.onLoad(response[RESPONSE_KEYS.card] as UNOnLoadResponse<UNCardData>);\n return;\n }\n\n console.error('On Load Error: unexpected response type');\n return;\n };\n\n useListenerToBus({ busEventKey: UnitMessage.UNIT_REQUEST_REFRESH, action: requestRefresh });\n useListenerToBus({ busEventKey: CardMessage.CARD_STATUS_CHANGED, action: cardStatusChanged });\n useListenerToBus({ busEventKey: CardMessage.CARD_ACTIVATED, action: cardActivated });\n\n const handleMessage = (message: WebViewMessage) => {\n if (!message || !message.details) return;\n\n switch (message.type) {\n case UnitMessage.UNIT_REQUEST_RENDERING: {\n const slotData: BottomSheetSlotData = {\n componentName: WebComponentType.card,\n componentResourceId: props.cardId,\n requestRenderingEvent: message.details as RequestRenderingEvent\n };\n\n const event = {\n type: BottomSheetRenderingType.Slot,\n data: slotData\n } as SlotRendering;\n\n EventBus.Instance.event(BottomSheetNativeMessage.START_FLOW, event);\n break;\n }\n case PageMessage.PAGE_HEIGHT:\n setHeight((message.details as HeightEvent).height);\n break;\n case UnitMessage.UNIT_ON_LOAD:\n handleUnitOnLoad(message.details as UnitOnLoadResponseEvent);\n break;\n }\n };\n\n useEffect(() => {\n UnitSDK.setCustomerToken(props.customerToken);\n }, [props.customerToken]);\n\n useEffect(() => {\n if (props.pushProvisioningModule) {\n UnitSDK.setPushProvisioningModule(props.pushProvisioningModule);\n }\n }, [props.pushProvisioningModule]);\n\n return (\n <View style={{ height }}>\n <WebComponent\n ref={webRef}\n type={WebComponentType.card}\n presentationMode={PresentationMode.Default}\n params={getCardParams(props)}\n theme={props.theme}\n language={props.language}\n script={getCardScript()}\n onMessage={message => handleMessage(message)}\n width={windowWidth}\n isScrollable={false}\n />\n </View>\n );\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useImperativeHandle","useRef","useState","useEffect","View","PageMessage","UnitMessage","EventBus","WebComponent","useListenerToBus","getCardParams","getCardScript","injectRefreshEventIfNeeded","injectOpenActionsMenuScript","injectRequestCardActionScript","CardMessage","RESPONSE_KEYS","BottomSheetRenderingType","PresentationMode","WebComponentType","UnitSDK","BottomSheetNativeMessage","UNCardComponent","forwardRef","props","cardRef","height","setHeight","webRef","openActionsMenu","current","openAction","action","cardStatusChanged","card","onStatusChanged","cardActivated","onCardActivated","requestRefresh","data","cardId","handleUnitOnLoad","response","onLoad","errors","console","error","busEventKey","UNIT_REQUEST_REFRESH","CARD_STATUS_CHANGED","CARD_ACTIVATED","handleMessage","message","details","type","UNIT_REQUEST_RENDERING","slotData","componentName","componentResourceId","requestRenderingEvent","event","Slot","Instance","START_FLOW","PAGE_HEIGHT","UNIT_ON_LOAD","setCustomerToken","customerToken","pushProvisioningModule","setPushProvisioningModule","createElement","style","width","ref","presentationMode","Default","params","theme","language","script","onMessage","isScrollable"],"sources":["UNCardComponent.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { View } from 'react-native';\nimport type WebView from 'react-native-webview';\nimport { HeightEvent, PageMessage } from '../../messages/webMessages/pageMessage';\nimport { RequestRefreshEvent, RequestRenderingEvent, UnitMessage } from '../../messages/webMessages/unitMessages';\nimport EventBus from '../../helpers/EventBus';\nimport { WebComponent } from '../../webComponent/WebComponent';\nimport { useListenerToBus } from '../../hooks/listenerToBus';\nimport type { WebViewMessage } from '../../messages/webMessages';\nimport { getCardParams, getCardScript, injectRefreshEventIfNeeded, injectOpenActionsMenuScript, injectRequestCardActionScript } from './UNCardComponent.utils';\nimport type { UNOnLoadResponse, UNCardData, UNError, UNCardMenuAction } from '../../types/shared';\nimport { CardMessage } from '../../messages/webMessages/cardMessage';\nimport type { NativeModules } from 'react-native';\nimport { RESPONSE_KEYS, UnitOnLoadResponseEvent } from '../../messages/webMessages/onLoadMessage';\nimport { BottomSheetRenderingType, SlotRendering, type BottomSheetSlotData } from '../../types/internal/bottomSheet.types';\nimport { PresentationMode, WebComponentType } from '../../types/internal/webComponent.types';\nimport { UnitSDK } from '../../unitSdkManager/UnitSdkManager';\nimport { BottomSheetNativeMessage } from '../../messages/nativeMessages/bottomSheetMessage';\nexport interface UNCardComponentProps {\n // inputs\n cardId: string;\n customerToken: string;\n learnMoreUrl?: string;\n\n // ui\n theme?: string;\n language?: string;\n hideActionsMenuButton?: boolean;\n hideCardTitle?: boolean;\n hideSensitiveDataButton?: boolean;\n\n // events\n onLoad?: (response: UNOnLoadResponse<UNCardData>) => void\n onStatusChanged?: (card: UNCardData) => void;\n onCardActivated?: (card: UNCardData) => void;\n pushProvisioningModule?: typeof NativeModules;\n}\nexport interface CardRef {\n openActionsMenu: () => void;\n openAction: (action: UNCardMenuAction) => void;\n}\n\nexport const UNCardComponent = React.forwardRef<CardRef, UNCardComponentProps>(function UNCardComponent(props, cardRef) {\n const [height, setHeight] = useState(0);\n\n const webRef = useRef<WebView>(null);\n\n useImperativeHandle(cardRef, () => ({\n openActionsMenu() {\n injectOpenActionsMenuScript(webRef.current);\n },\n openAction(action: UNCardMenuAction) {\n injectRequestCardActionScript(webRef.current, action);\n }\n }));\n\n const cardStatusChanged = (card: UNCardData) => {\n if (props.onStatusChanged) {\n props.onStatusChanged(card);\n }\n };\n\n const cardActivated = (card: UNCardData) => {\n if (props.onCardActivated) {\n props.onCardActivated(card);\n }\n };\n\n const requestRefresh = (data: RequestRefreshEvent) => {\n injectRefreshEventIfNeeded(webRef.current, data, props.cardId);\n };\n\n const handleUnitOnLoad = (response: UnitOnLoadResponseEvent) => {\n if (!props.onLoad) {\n return;\n }\n\n if (RESPONSE_KEYS.errors in response) {\n props.onLoad(response as UNError);\n return;\n }\n\n if (RESPONSE_KEYS.card in response) {\n // CardOnLoadResponse\n props.onLoad(response[RESPONSE_KEYS.card] as UNOnLoadResponse<UNCardData>);\n return;\n }\n\n console.error('On Load Error: unexpected response type');\n return;\n };\n\n useListenerToBus({ busEventKey: UnitMessage.UNIT_REQUEST_REFRESH, action: requestRefresh });\n useListenerToBus({ busEventKey: CardMessage.CARD_STATUS_CHANGED, action: cardStatusChanged });\n useListenerToBus({ busEventKey: CardMessage.CARD_ACTIVATED, action: cardActivated });\n\n const handleMessage = (message: WebViewMessage) => {\n if (!message || !message.details) return;\n\n switch (message.type) {\n case UnitMessage.UNIT_REQUEST_RENDERING: {\n const slotData: BottomSheetSlotData = {\n componentName: WebComponentType.card,\n componentResourceId: props.cardId,\n requestRenderingEvent: message.details as RequestRenderingEvent\n };\n\n const event = {\n type: BottomSheetRenderingType.Slot,\n data: slotData\n } as SlotRendering;\n\n EventBus.Instance.event(BottomSheetNativeMessage.START_FLOW, event);\n break;\n }\n case PageMessage.PAGE_HEIGHT:\n setHeight((message.details as HeightEvent).height);\n break;\n case UnitMessage.UNIT_ON_LOAD:\n handleUnitOnLoad(message.details as UnitOnLoadResponseEvent);\n break;\n }\n };\n\n useEffect(() => {\n UnitSDK.setCustomerToken(props.customerToken);\n }, [props.customerToken]);\n\n useEffect(() => {\n if (props.pushProvisioningModule) {\n UnitSDK.setPushProvisioningModule(props.pushProvisioningModule);\n }\n }, [props.pushProvisioningModule]);\n\n return (\n <View style={{ height, width: '100%' }}>\n <WebComponent\n ref={webRef}\n type={WebComponentType.card}\n presentationMode={PresentationMode.Default}\n params={getCardParams(props)}\n theme={props.theme}\n language={props.language}\n script={getCardScript()}\n onMessage={message => handleMessage(message)}\n isScrollable={false}\n />\n </View>\n );\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","UNWalletCode","UNWalletName","UnitSDK","getMobileWalletPayload","useCardWallet","cardId","currentUNWallet","setCurrentUNWallet","getEncryptedPayload","env","getEnv","customerToken","getCustomerToken","encryptedPayload","getCardWalletData","currentProvisioningModule","getPushProvisionModule","walletsResponse","launchGetWallets","JSON","stringify","encPayload","unWallet","parseWalletsResponse","error","Promise","reject","parsedWalletsResponse","parse","wallets","code","Apple","name","status","googleWallet","filter","wallet","Google","Error"],"sources":["useCardWallet.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { UNWalletCode, type UNWallet, UNWalletName } from '../../../types/shared/wallet.types';\nimport { UnitSDK } from '../../../unitSdkManager/UnitSdkManager';\nimport { getMobileWalletPayload } from '../../../networking/requests/UNWalletPayloadRequest';\n\nexport type CardToEncryptedPayload = {\n [cardId: string]: string;\n};\n\nexport const useCardWallet = (cardId: string) => {\n const [currentUNWallet, setCurrentUNWallet] = useState<UNWallet>();\n\n useEffect(() => {\n const getEncryptedPayload = async () => {\n const env = UnitSDK.getEnv();\n const customerToken = UnitSDK.getCustomerToken();\n if (!env || !customerToken) return;\n\n const encryptedPayload = await getMobileWalletPayload(customerToken, cardId, env);\n return encryptedPayload;\n };\n\n const getCardWalletData = async ()
|
|
1
|
+
{"version":3,"names":["useEffect","useState","UNWalletCode","UNWalletName","UnitSDK","getMobileWalletPayload","useCardWallet","cardId","currentUNWallet","setCurrentUNWallet","getEncryptedPayload","env","getEnv","customerToken","getCustomerToken","encryptedPayload","getCardWalletData","currentProvisioningModule","getPushProvisionModule","walletsResponse","launchGetWallets","JSON","stringify","encPayload","unWallet","parseWalletsResponse","error","Promise","reject","parsedWalletsResponse","parse","wallets","code","Apple","name","status","googleWallet","filter","wallet","Google","Error"],"sources":["useCardWallet.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { UNWalletCode, type UNWallet, UNWalletName } from '../../../types/shared/wallet.types';\nimport { UnitSDK } from '../../../unitSdkManager/UnitSdkManager';\nimport { getMobileWalletPayload } from '../../../networking/requests/UNWalletPayloadRequest';\n\nexport type CardToEncryptedPayload = {\n [cardId: string]: string;\n};\n\nexport const useCardWallet = (cardId: string) => {\n const [currentUNWallet, setCurrentUNWallet] = useState<UNWallet>();\n\n useEffect(() => {\n const getEncryptedPayload = async () => {\n const env = UnitSDK.getEnv();\n const customerToken = UnitSDK.getCustomerToken();\n if (!env || !customerToken) return;\n\n const encryptedPayload = await getMobileWalletPayload(customerToken, cardId, env);\n return encryptedPayload;\n };\n\n const getCardWalletData = async () => {\n const currentProvisioningModule = UnitSDK.getPushProvisionModule();\n if (!currentProvisioningModule) return;\n try {\n const encryptedPayload = await getEncryptedPayload();\n const walletsResponse = await currentProvisioningModule.launchGetWallets(JSON.stringify({ encPayload: encryptedPayload }));\n\n const unWallet: UNWallet | null = parseWalletsResponse(walletsResponse);\n if (!unWallet) return;\n setCurrentUNWallet(unWallet);\n return;\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n getCardWalletData();\n\n }, [cardId]);\n\n return {\n currentUNWallet\n };\n\n};\n\nconst parseWalletsResponse = (walletsResponse: string): UNWallet | null => {\n try {\n const parsedWalletsResponse = JSON.parse(walletsResponse);\n const wallets = parsedWalletsResponse.wallets;\n\n if (!wallets) return null;\n if (wallets[0].code === UNWalletCode.Apple) {\n return ({ name: UNWalletName.Apple, code: UNWalletCode.Apple, status: wallets[0].status });\n } else {\n const googleWallet = wallets.filter((wallet: { name: UNWalletName }) => {\n return wallet.name === UNWalletName.Google;\n });\n if (!googleWallet) return null;\n return ({ name: UNWalletName.Google, code: UNWalletCode.Google, status: googleWallet[0].status });\n }\n } catch (error) {\n throw new Error('Error parsing wallet response');\n }\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,YAAY,EAAiBC,YAAY,QAAQ,oCAAoC;AAC9F,SAASC,OAAO,QAAQ,wCAAwC;AAChE,SAASC,sBAAsB,QAAQ,qDAAqD;AAM5F,OAAO,MAAMC,aAAa,GAAIC,MAAc,IAAK;EAC/C,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGR,QAAQ,EAAY;EAElED,SAAS,CAAC,MAAM;IACd,MAAMU,mBAAmB,GAAG,MAAAA,CAAA,KAAY;MACtC,MAAMC,GAAG,GAAGP,OAAO,CAACQ,MAAM,EAAE;MAC5B,MAAMC,aAAa,GAAGT,OAAO,CAACU,gBAAgB,EAAE;MAChD,IAAI,CAACH,GAAG,IAAI,CAACE,aAAa,EAAE;MAE5B,MAAME,gBAAgB,GAAG,MAAMV,sBAAsB,CAACQ,aAAa,EAAEN,MAAM,EAAEI,GAAG,CAAC;MACjF,OAAOI,gBAAgB;IACzB,CAAC;IAED,MAAMC,iBAAiB,GAAG,MAAAA,CAAA,KAAY;MACpC,MAAMC,yBAAyB,GAAGb,OAAO,CAACc,sBAAsB,EAAE;MAClE,IAAI,CAACD,yBAAyB,EAAE;MAChC,IAAI;QACF,MAAMF,gBAAgB,GAAG,MAAML,mBAAmB,EAAE;QACpD,MAAMS,eAAe,GAAG,MAAMF,yBAAyB,CAACG,gBAAgB,CAACC,IAAI,CAACC,SAAS,CAAC;UAAEC,UAAU,EAAER;QAAiB,CAAC,CAAC,CAAC;QAE1H,MAAMS,QAAyB,GAAGC,oBAAoB,CAACN,eAAe,CAAC;QACvE,IAAI,CAACK,QAAQ,EAAE;QACff,kBAAkB,CAACe,QAAQ,CAAC;QAC5B;MACF,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,OAAOC,OAAO,CAACC,MAAM,CAACF,KAAK,CAAC;MAC9B;IACF,CAAC;IAEDV,iBAAiB,EAAE;EAErB,CAAC,EAAE,CAACT,MAAM,CAAC,CAAC;EAEZ,OAAO;IACLC;EACF,CAAC;AAEH,CAAC;AAED,MAAMiB,oBAAoB,GAAIN,eAAuB,IAAsB;EACzE,IAAI;IACF,MAAMU,qBAAqB,GAAGR,IAAI,CAACS,KAAK,CAACX,eAAe,CAAC;IACzD,MAAMY,OAAO,GAAGF,qBAAqB,CAACE,OAAO;IAE7C,IAAI,CAACA,OAAO,EAAE,OAAO,IAAI;IACzB,IAAIA,OAAO,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK9B,YAAY,CAAC+B,KAAK,EAAE;MAC1C,OAAQ;QAAEC,IAAI,EAAE/B,YAAY,CAAC8B,KAAK;QAAED,IAAI,EAAE9B,YAAY,CAAC+B,KAAK;QAAEE,MAAM,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACI;MAAO,CAAC;IAC3F,CAAC,MAAM;MACL,MAAMC,YAAY,GAAGL,OAAO,CAACM,MAAM,CAAEC,MAA8B,IAAK;QACtE,OAAOA,MAAM,CAACJ,IAAI,KAAK/B,YAAY,CAACoC,MAAM;MAC5C,CAAC,CAAC;MACF,IAAI,CAACH,YAAY,EAAE,OAAO,IAAI;MAC9B,OAAQ;QAAEF,IAAI,EAAE/B,YAAY,CAACoC,MAAM;QAAEP,IAAI,EAAE9B,YAAY,CAACqC,MAAM;QAAEJ,MAAM,EAAEC,YAAY,CAAC,CAAC,CAAC,CAACD;MAAO,CAAC;IAClG;EACF,CAAC,CAAC,OAAOT,KAAK,EAAE;IACd,MAAM,IAAIc,KAAK,CAAC,+BAA+B,CAAC;EAClD;AACF,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
const getUrl = source => {
|
|
3
|
+
if (Platform.OS == 'ios') {
|
|
4
|
+
return `url('${source.fileName}')`;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// Handle '/' of dir Relative path
|
|
8
|
+
let relativeDirPath = source.assetDirRelativePath;
|
|
9
|
+
if (source.assetDirRelativePath[-1] !== '/') {
|
|
10
|
+
relativeDirPath = `${source.assetDirRelativePath}/`;
|
|
11
|
+
}
|
|
12
|
+
if (source.assetDirRelativePath[0] !== '/') {
|
|
13
|
+
relativeDirPath = `/${source.assetDirRelativePath}`;
|
|
14
|
+
}
|
|
15
|
+
return `url('file:///android_asset${relativeDirPath}${source.fileName}')`;
|
|
16
|
+
};
|
|
17
|
+
const getFontFace = (fontFamily, fontWeight, sources) => {
|
|
18
|
+
const numOfSources = sources.length;
|
|
19
|
+
const sourcesString = sources.map((source, index) => {
|
|
20
|
+
const suffix = index === numOfSources - 1 ? ';' : ',';
|
|
21
|
+
const url = getUrl(source);
|
|
22
|
+
const format = source !== null && source !== void 0 && source.format ? `format('${source.format}')` : '';
|
|
23
|
+
return `${url} ${format}${suffix}`;
|
|
24
|
+
}).join('\n');
|
|
25
|
+
return `
|
|
26
|
+
@font-face {
|
|
27
|
+
font-family: '${fontFamily}';
|
|
28
|
+
src: ${sourcesString}
|
|
29
|
+
font-weight: ${fontWeight.valueOf()};
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
};
|
|
33
|
+
export const getFontFacesString = fonts => {
|
|
34
|
+
if (!fonts) return '';
|
|
35
|
+
const fontFaces = [];
|
|
36
|
+
|
|
37
|
+
// Iterate over all the fonts and their variants
|
|
38
|
+
// create font-face for each variant
|
|
39
|
+
Object.entries(fonts).forEach(_ref => {
|
|
40
|
+
let [familyName, familyFonts] = _ref;
|
|
41
|
+
familyFonts.forEach(fontData => {
|
|
42
|
+
fontFaces.push(getFontFace(familyName, fontData.fontWeight, fontData.sources));
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Combine all the font faces into a single string
|
|
47
|
+
return fontFaces.join('\n');
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=fontFaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","getUrl","source","OS","fileName","relativeDirPath","assetDirRelativePath","getFontFace","fontFamily","fontWeight","sources","numOfSources","length","sourcesString","map","index","suffix","url","format","join","valueOf","getFontFacesString","fonts","fontFaces","Object","entries","forEach","_ref","familyName","familyFonts","fontData","push"],"sources":["fontFaces.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport type { FontWeight, UNFonts, UNFontSource, UNFontData } from '../../types/shared/fonts.types';\n\nconst getUrl = (source: UNFontSource): string => {\n if (Platform.OS == 'ios') {\n return `url('${source.fileName}')`;\n }\n\n // Handle '/' of dir Relative path\n let relativeDirPath = source.assetDirRelativePath;\n if (source.assetDirRelativePath[-1] !== '/') {\n relativeDirPath = `${source.assetDirRelativePath}/`;\n }\n if (source.assetDirRelativePath[0] !== '/') {\n relativeDirPath = `/${source.assetDirRelativePath}`;\n }\n\n return `url('file:///android_asset${relativeDirPath}${source.fileName}')`;\n};\nconst getFontFace = (fontFamily: string, fontWeight: FontWeight, sources: UNFontSource[]): string => {\n const numOfSources = sources.length;\n\n const sourcesString = sources\n .map((source, index) => {\n const suffix = index === numOfSources - 1 ? ';' : ',';\n const url = getUrl(source);\n const format = source?.format ? `format('${source.format}')` : '';\n return `${url} ${format}${suffix}`;\n })\n .join('\\n');\n\n return `\n @font-face {\n font-family: '${fontFamily}';\n src: ${sourcesString}\n font-weight: ${fontWeight.valueOf()};\n }\n `;\n};\n\nexport const getFontFacesString = (fonts?: UNFonts): string => {\n if (!fonts) return '';\n\n const fontFaces: string[] = [];\n\n // Iterate over all the fonts and their variants\n // create font-face for each variant\n Object.entries(fonts).forEach(([familyName, familyFonts]) => {\n familyFonts.forEach((fontData: UNFontData) => {\n fontFaces.push(getFontFace(familyName, fontData.fontWeight, fontData.sources));\n });\n });\n\n // Combine all the font faces into a single string\n return fontFaces.join('\\n');\n};\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AAGvC,MAAMC,MAAM,GAAIC,MAAoB,IAAa;EAC/C,IAAIF,QAAQ,CAACG,EAAE,IAAI,KAAK,EAAE;IACxB,OAAQ,QAAOD,MAAM,CAACE,QAAS,IAAG;EACpC;;EAEA;EACA,IAAIC,eAAe,GAAGH,MAAM,CAACI,oBAAoB;EACjD,IAAIJ,MAAM,CAACI,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC3CD,eAAe,GAAI,GAAEH,MAAM,CAACI,oBAAqB,GAAE;EACrD;EACA,IAAIJ,MAAM,CAACI,oBAAoB,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC1CD,eAAe,GAAI,IAAGH,MAAM,CAACI,oBAAqB,EAAC;EACrD;EAEA,OAAQ,6BAA4BD,eAAgB,GAAEH,MAAM,CAACE,QAAS,IAAG;AAC3E,CAAC;AACD,MAAMG,WAAW,GAAGA,CAACC,UAAkB,EAAEC,UAAsB,EAAEC,OAAuB,KAAa;EACnG,MAAMC,YAAY,GAAGD,OAAO,CAACE,MAAM;EAEnC,MAAMC,aAAa,GAAGH,OAAO,CAC1BI,GAAG,CAAC,CAACZ,MAAM,EAAEa,KAAK,KAAK;IACtB,MAAMC,MAAM,GAAGD,KAAK,KAAKJ,YAAY,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;IACrD,MAAMM,GAAG,GAAGhB,MAAM,CAACC,MAAM,CAAC;IAC1B,MAAMgB,MAAM,GAAGhB,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEgB,MAAM,GAAI,WAAUhB,MAAM,CAACgB,MAAO,IAAG,GAAG,EAAE;IACjE,OAAQ,GAAED,GAAI,IAAGC,MAAO,GAAEF,MAAO,EAAC;EACpC,CAAC,CAAC,CACDG,IAAI,CAAC,IAAI,CAAC;EAEb,OAAQ;AACV;AACA,sBAAsBX,UAAW;AACjC,aAAaK,aAAc;AAC3B,qBAAqBJ,UAAU,CAACW,OAAO,EAAG;AAC1C;AACA,GAAG;AACH,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAIC,KAAe,IAAa;EAC7D,IAAI,CAACA,KAAK,EAAE,OAAO,EAAE;EAErB,MAAMC,SAAmB,GAAG,EAAE;;EAE9B;EACA;EACAC,MAAM,CAACC,OAAO,CAACH,KAAK,CAAC,CAACI,OAAO,CAACC,IAAA,IAA+B;IAAA,IAA9B,CAACC,UAAU,EAAEC,WAAW,CAAC,GAAAF,IAAA;IACtDE,WAAW,CAACH,OAAO,CAAEI,QAAoB,IAAK;MAC5CP,SAAS,CAACQ,IAAI,CAACxB,WAAW,CAACqB,UAAU,EAAEE,QAAQ,CAACrB,UAAU,EAAEqB,QAAQ,CAACpB,OAAO,CAAC,CAAC;IAChF,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA,OAAOa,SAAS,CAACJ,IAAI,CAAC,IAAI,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { FontWeight } from '../types/shared';
|
|
2
|
+
import { UnitSDK } from '../unitSdkManager/UnitSdkManager';
|
|
3
|
+
const getFontWeightName = (familyFonts, fontWeight) => {
|
|
4
|
+
/**
|
|
5
|
+
* Given family variants and the required weight
|
|
6
|
+
* Return the closet font that defined by the client.
|
|
7
|
+
*/
|
|
8
|
+
if (!fontWeight || fontWeight === 'normal') return 'Regular';
|
|
9
|
+
if (fontWeight === 'bold') return 'Bold';
|
|
10
|
+
const fontWeightNumber = Number(fontWeight);
|
|
11
|
+
|
|
12
|
+
// Select the closet variant
|
|
13
|
+
let selectedFontWeight = FontWeight.Regular.valueOf();
|
|
14
|
+
let minDistance = 1000;
|
|
15
|
+
familyFonts.forEach(fontData => {
|
|
16
|
+
const currDistance = Math.abs(fontData.fontWeight - fontWeightNumber);
|
|
17
|
+
if (currDistance < minDistance) {
|
|
18
|
+
minDistance = currDistance;
|
|
19
|
+
selectedFontWeight = fontData.fontWeight.valueOf();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// FontWeight to String
|
|
24
|
+
switch (selectedFontWeight) {
|
|
25
|
+
case FontWeight.Thin:
|
|
26
|
+
return 'Thin';
|
|
27
|
+
case FontWeight.ExtraLight:
|
|
28
|
+
return 'ExtraLight';
|
|
29
|
+
case FontWeight.Light:
|
|
30
|
+
return 'Light';
|
|
31
|
+
case FontWeight.Regular:
|
|
32
|
+
return 'Regular';
|
|
33
|
+
case FontWeight.Medium:
|
|
34
|
+
return 'Medium';
|
|
35
|
+
case FontWeight.SemiBold:
|
|
36
|
+
return 'SemiBold';
|
|
37
|
+
case FontWeight.Bold:
|
|
38
|
+
return 'Bold';
|
|
39
|
+
case FontWeight.ExtraBold:
|
|
40
|
+
return 'ExtraBold';
|
|
41
|
+
case FontWeight.Black:
|
|
42
|
+
return 'Black';
|
|
43
|
+
default:
|
|
44
|
+
return 'Regular';
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
export const getFontName = (fontFamily, fontWeight) => {
|
|
48
|
+
/*
|
|
49
|
+
* Get the font family name and the font weight name from the THEME object.
|
|
50
|
+
* Then, return a possible font.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
const fontsInApp = UnitSDK.getFonts();
|
|
54
|
+
if (!fontsInApp) {
|
|
55
|
+
throw new Error('Fonts are not found in the app');
|
|
56
|
+
}
|
|
57
|
+
const familyFonts = fontsInApp[fontFamily];
|
|
58
|
+
if (!familyFonts) {
|
|
59
|
+
throw new Error(`Font family ${fontFamily} not found in the app's fonts`);
|
|
60
|
+
}
|
|
61
|
+
const fontWeightName = getFontWeightName(familyFonts, fontWeight);
|
|
62
|
+
return `${fontFamily}-${fontWeightName}`;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FontWeight","UnitSDK","getFontWeightName","familyFonts","fontWeight","fontWeightNumber","Number","selectedFontWeight","Regular","valueOf","minDistance","forEach","fontData","currDistance","Math","abs","Thin","ExtraLight","Light","Medium","SemiBold","Bold","ExtraBold","Black","getFontName","fontFamily","fontsInApp","getFonts","Error","fontWeightName"],"sources":["fonts.ts"],"sourcesContent":["import { FontWeight, UNFontData } from '../types/shared';\nimport { UnitSDK } from '../unitSdkManager/UnitSdkManager';\n\nconst getFontWeightName = (familyFonts: UNFontData[], fontWeight?: number | string) => {\n /**\n * Given family variants and the required weight\n * Return the closet font that defined by the client.\n */\n if (!fontWeight || fontWeight === 'normal') return 'Regular';\n\n if (fontWeight === 'bold') return 'Bold';\n\n const fontWeightNumber = Number(fontWeight);\n\n // Select the closet variant\n let selectedFontWeight = FontWeight.Regular.valueOf();\n let minDistance = 1000;\n\n familyFonts.forEach((fontData: UNFontData) => {\n const currDistance = Math.abs(fontData.fontWeight - fontWeightNumber);\n if (currDistance < minDistance) {\n minDistance = currDistance;\n selectedFontWeight = fontData.fontWeight.valueOf();\n }\n });\n\n // FontWeight to String\n switch (selectedFontWeight) {\n case FontWeight.Thin:\n return 'Thin';\n case FontWeight.ExtraLight:\n return 'ExtraLight';\n case FontWeight.Light:\n return 'Light';\n case FontWeight.Regular:\n return 'Regular';\n case FontWeight.Medium:\n return 'Medium';\n case FontWeight.SemiBold:\n return 'SemiBold';\n case FontWeight.Bold:\n return 'Bold';\n case FontWeight.ExtraBold:\n return 'ExtraBold';\n case FontWeight.Black:\n return 'Black';\n default:\n return 'Regular';\n }\n};\n\nexport const getFontName = (fontFamily: string, fontWeight: number | string): string => {\n /*\n * Get the font family name and the font weight name from the THEME object.\n * Then, return a possible font.\n */\n\n const fontsInApp = UnitSDK.getFonts();\n if (!fontsInApp) {\n throw new Error('Fonts are not found in the app');\n }\n\n const familyFonts = fontsInApp[fontFamily];\n if (!familyFonts) {\n throw new Error(`Font family ${fontFamily} not found in the app's fonts`);\n }\n\n const fontWeightName = getFontWeightName(familyFonts, fontWeight);\n return `${fontFamily}-${fontWeightName}`;\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAoB,iBAAiB;AACxD,SAASC,OAAO,QAAQ,kCAAkC;AAE1D,MAAMC,iBAAiB,GAAGA,CAACC,WAAyB,EAAEC,UAA4B,KAAK;EACrF;AACF;AACA;AACA;EACE,IAAI,CAACA,UAAU,IAAIA,UAAU,KAAK,QAAQ,EAAE,OAAO,SAAS;EAE5D,IAAIA,UAAU,KAAK,MAAM,EAAE,OAAO,MAAM;EAExC,MAAMC,gBAAgB,GAAGC,MAAM,CAACF,UAAU,CAAC;;EAE3C;EACA,IAAIG,kBAAkB,GAAGP,UAAU,CAACQ,OAAO,CAACC,OAAO,EAAE;EACrD,IAAIC,WAAW,GAAG,IAAI;EAEtBP,WAAW,CAACQ,OAAO,CAAEC,QAAoB,IAAK;IAC5C,MAAMC,YAAY,GAAGC,IAAI,CAACC,GAAG,CAACH,QAAQ,CAACR,UAAU,GAAGC,gBAAgB,CAAC;IACrE,IAAIQ,YAAY,GAAGH,WAAW,EAAE;MAC9BA,WAAW,GAAGG,YAAY;MAC1BN,kBAAkB,GAAGK,QAAQ,CAACR,UAAU,CAACK,OAAO,EAAE;IACpD;EACF,CAAC,CAAC;;EAEF;EACA,QAAQF,kBAAkB;IACxB,KAAKP,UAAU,CAACgB,IAAI;MAClB,OAAO,MAAM;IACf,KAAMhB,UAAU,CAACiB,UAAU;MACzB,OAAO,YAAY;IACrB,KAAKjB,UAAU,CAACkB,KAAK;MACnB,OAAO,OAAO;IAChB,KAAKlB,UAAU,CAACQ,OAAO;MACrB,OAAO,SAAS;IAClB,KAAKR,UAAU,CAACmB,MAAM;MACpB,OAAO,QAAQ;IACjB,KAAKnB,UAAU,CAACoB,QAAQ;MACtB,OAAO,UAAU;IACnB,KAAKpB,UAAU,CAACqB,IAAI;MAClB,OAAO,MAAM;IACf,KAAKrB,UAAU,CAACsB,SAAS;MACvB,OAAO,WAAW;IACpB,KAAKtB,UAAU,CAACuB,KAAK;MACnB,OAAO,OAAO;IAChB;MACE,OAAO,SAAS;EAAC;AAEvB,CAAC;AAED,OAAO,MAAMC,WAAW,GAAGA,CAACC,UAAkB,EAAErB,UAA2B,KAAa;EACtF;AACF;AACA;AACA;;EAEE,MAAMsB,UAAU,GAAGzB,OAAO,CAAC0B,QAAQ,EAAE;EACrC,IAAI,CAACD,UAAU,EAAE;IACf,MAAM,IAAIE,KAAK,CAAC,gCAAgC,CAAC;EACnD;EAEA,MAAMzB,WAAW,GAAGuB,UAAU,CAACD,UAAU,CAAC;EAC1C,IAAI,CAACtB,WAAW,EAAE;IAChB,MAAM,IAAIyB,KAAK,CAAE,eAAcH,UAAW,+BAA8B,CAAC;EAC3E;EAEA,MAAMI,cAAc,GAAG3B,iBAAiB,CAACC,WAAW,EAAEC,UAAU,CAAC;EACjE,OAAQ,GAAEqB,UAAW,IAAGI,cAAe,EAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export let FontWeight;
|
|
2
|
+
(function (FontWeight) {
|
|
3
|
+
FontWeight[FontWeight["Thin"] = 100] = "Thin";
|
|
4
|
+
FontWeight[FontWeight["ExtraLight"] = 200] = "ExtraLight";
|
|
5
|
+
FontWeight[FontWeight["Light"] = 300] = "Light";
|
|
6
|
+
FontWeight[FontWeight["Regular"] = 400] = "Regular";
|
|
7
|
+
FontWeight[FontWeight["Medium"] = 500] = "Medium";
|
|
8
|
+
FontWeight[FontWeight["SemiBold"] = 600] = "SemiBold";
|
|
9
|
+
FontWeight[FontWeight["Bold"] = 700] = "Bold";
|
|
10
|
+
FontWeight[FontWeight["ExtraBold"] = 800] = "ExtraBold";
|
|
11
|
+
FontWeight[FontWeight["Black"] = 900] = "Black";
|
|
12
|
+
})(FontWeight || (FontWeight = {}));
|
|
13
|
+
//# sourceMappingURL=fonts.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FontWeight"],"sources":["fonts.types.ts"],"sourcesContent":["export type UNFonts = {\n [fontFamily: string]: UNFontData[];\n}\n\nexport type UNFontData = {\n // Using 'field' instead of 'key' to account for potential variants unrelated to font weight.\n fontWeight: FontWeight;\n sources: UNFontSource[];\n}\n\nexport type UNFontSource = {\n // using the fileName for iOS and relative path for Android\n fileName: string;\n assetDirRelativePath: string;\n format?: string;\n}\n\nexport enum FontWeight {\n Thin = 100,\n ExtraLight = 200,\n Light = 300,\n Regular = 400,\n Medium = 500,\n SemiBold = 600,\n Bold = 700,\n ExtraBold = 800,\n Black = 900\n}\n"],"mappings":"AAiBA,WAAYA,UAAU;AAUrB,WAVWA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;AAAA,GAAVA,UAAU,KAAVA,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from './bookPayment.types';\nexport * from './card.types';\nexport * from './onLoadResponse.types';\nexport * from './achCredit.types';\nexport * from './payments.types';\nexport * from './account.types';\nexport * from './checkDeposit.types';\n"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,wBAAwB;AACtC,cAAc,mBAAmB;AACjC,cAAc,kBAAkB;AAChC,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB"}
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from './bookPayment.types';\nexport * from './card.types';\nexport * from './onLoadResponse.types';\nexport * from './achCredit.types';\nexport * from './payments.types';\nexport * from './account.types';\nexport * from './checkDeposit.types';\nexport * from './activity.types';\nexport * from './fonts.types';\n"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,wBAAwB;AACtC,cAAc,mBAAmB;AACjC,cAAc,kBAAkB;AAChC,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB;AACpC,cAAc,kBAAkB;AAChC,cAAc,eAAe"}
|
|
@@ -20,14 +20,16 @@ _defineProperty(UnitSDK, "env", void 0);
|
|
|
20
20
|
_defineProperty(UnitSDK, "customerToken", void 0);
|
|
21
21
|
_defineProperty(UnitSDK, "theme", void 0);
|
|
22
22
|
_defineProperty(UnitSDK, "language", void 0);
|
|
23
|
+
_defineProperty(UnitSDK, "fonts", void 0);
|
|
23
24
|
_defineProperty(UnitSDK, "signedNonce", void 0);
|
|
24
25
|
_defineProperty(UnitSDK, "pushProvisionModule", void 0);
|
|
25
26
|
_defineProperty(UnitSDK, "ui", void 0);
|
|
26
|
-
_defineProperty(UnitSDK, "init", async (env, theme, language) => {
|
|
27
|
+
_defineProperty(UnitSDK, "init", async (env, theme, language, fonts) => {
|
|
27
28
|
try {
|
|
28
29
|
UnitSDK.env = env;
|
|
29
30
|
UnitSDK.theme = theme;
|
|
30
31
|
UnitSDK.language = language;
|
|
32
|
+
UnitSDK.fonts = fonts;
|
|
31
33
|
UnitSDK.ui = new UnitUiManager();
|
|
32
34
|
await fetchUnitScript();
|
|
33
35
|
EventBus.Instance.event(SDKMessage.IS_SDK_INITIALIZED, {});
|
|
@@ -53,6 +55,9 @@ _defineProperty(UnitSDK, "getTheme", () => {
|
|
|
53
55
|
_defineProperty(UnitSDK, "getLanguage", () => {
|
|
54
56
|
return UnitSDK.language;
|
|
55
57
|
});
|
|
58
|
+
_defineProperty(UnitSDK, "getFonts", () => {
|
|
59
|
+
return UnitSDK.fonts;
|
|
60
|
+
});
|
|
56
61
|
_defineProperty(UnitSDK, "getSignedNonce", () => {
|
|
57
62
|
return UnitSDK.signedNonce;
|
|
58
63
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EventBus","SDKMessage","fetchUnitScript","UnitUiManager","UNEnvironment","UNIT_WEB_VERSION","UNIT_SCRIPT_URL","sandbox","production","UnitSDK","_defineProperty","env","theme","language","ui","Instance","event","IS_SDK_INITIALIZED","e","console","log","pushProvisionModule","signedNonce","customerToken"],"sources":["UnitSdkManager.ts"],"sourcesContent":["import type { NativeModules } from 'react-native';\nimport EventBus from '../helpers/EventBus';\nimport { SDKMessage } from '../messages/nativeMessages/sdkMessage';\nimport { fetchUnitScript } from './UnitSdk.api';\nimport { UnitUiManager } from './unitUiManager/unitUiManager';\n\nexport enum UNEnvironment {\n sandbox = 'sandbox',\n production = 'production'\n}\n\nconst UNIT_WEB_VERSION = '1';\n\nexport const UNIT_SCRIPT_URL = {\n [UNEnvironment.sandbox]: `https://ui.s.unit.sh/release/${UNIT_WEB_VERSION}/components.js`,\n [UNEnvironment.production]: `https://ui.unit.co/release/${UNIT_WEB_VERSION}/components.js`\n};\nexport class UnitSDK {\n protected static env?: UNEnvironment;\n protected static customerToken?: string;\n protected static theme?: string;\n protected static language?: string;\n\n protected static signedNonce?: string;\n protected static pushProvisionModule?: typeof NativeModules;\n\n public static ui: UnitUiManager;\n\n public static init = async (env: UNEnvironment, theme?: string, language?: string) => {\n try {\n this.env = env;\n this.theme = theme;\n this.language = language;\n this.ui = new UnitUiManager();\n await fetchUnitScript();\n EventBus.Instance.event(SDKMessage.IS_SDK_INITIALIZED, {});\n } catch (e) {\n console.log(e);\n }\n };\n\n public static setPushProvisioningModule = (pushProvisionModule: typeof NativeModules) => {\n this.pushProvisionModule = pushProvisionModule;\n };\n\n public static getPushProvisionModule = () => {\n return this.pushProvisionModule;\n };\n\n public static setSignedNonce = (signedNonce: string) => {\n this.signedNonce = signedNonce;\n };\n\n public static getEnv = () => {\n return this.env;\n };\n\n public static getTheme = () => {\n return this.theme;\n };\n\n public static getLanguage = () => {\n return this.language;\n };\n\n public static getSignedNonce = () => {\n return this.signedNonce;\n };\n\n public static setCustomerToken = (customerToken: string) => {\n this.customerToken = customerToken;\n };\n\n public static getCustomerToken = () => {\n return this.customerToken;\n };\n}\n"],"mappings":";;;AACA,OAAOA,QAAQ,MAAM,qBAAqB;AAC1C,SAASC,UAAU,QAAQ,uCAAuC;AAClE,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,aAAa,QAAQ,+BAA+B;
|
|
1
|
+
{"version":3,"names":["EventBus","SDKMessage","fetchUnitScript","UnitUiManager","UNEnvironment","UNIT_WEB_VERSION","UNIT_SCRIPT_URL","sandbox","production","UnitSDK","_defineProperty","env","theme","language","fonts","ui","Instance","event","IS_SDK_INITIALIZED","e","console","log","pushProvisionModule","signedNonce","customerToken"],"sources":["UnitSdkManager.ts"],"sourcesContent":["import type { NativeModules } from 'react-native';\nimport EventBus from '../helpers/EventBus';\nimport { SDKMessage } from '../messages/nativeMessages/sdkMessage';\nimport { fetchUnitScript } from './UnitSdk.api';\nimport { UnitUiManager } from './unitUiManager/unitUiManager';\nimport type { UNFonts } from '../types/shared/fonts.types';\n\nexport enum UNEnvironment {\n sandbox = 'sandbox',\n production = 'production'\n}\n\nconst UNIT_WEB_VERSION = '1';\n\nexport const UNIT_SCRIPT_URL = {\n [UNEnvironment.sandbox]: `https://ui.s.unit.sh/release/${UNIT_WEB_VERSION}/components.js`,\n [UNEnvironment.production]: `https://ui.unit.co/release/${UNIT_WEB_VERSION}/components.js`\n};\nexport class UnitSDK {\n protected static env?: UNEnvironment;\n protected static customerToken?: string;\n protected static theme?: string;\n protected static language?: string;\n protected static fonts?: UNFonts;\n\n protected static signedNonce?: string;\n protected static pushProvisionModule?: typeof NativeModules;\n\n public static ui: UnitUiManager;\n\n public static init = async (env: UNEnvironment, theme?: string, language?: string, fonts?: UNFonts) => {\n try {\n this.env = env;\n this.theme = theme;\n this.language = language;\n this.fonts = fonts;\n\n this.ui = new UnitUiManager();\n await fetchUnitScript();\n EventBus.Instance.event(SDKMessage.IS_SDK_INITIALIZED, {});\n } catch (e) {\n console.log(e);\n }\n };\n\n public static setPushProvisioningModule = (pushProvisionModule: typeof NativeModules) => {\n this.pushProvisionModule = pushProvisionModule;\n };\n\n public static getPushProvisionModule = () => {\n return this.pushProvisionModule;\n };\n\n public static setSignedNonce = (signedNonce: string) => {\n this.signedNonce = signedNonce;\n };\n\n public static getEnv = () => {\n return this.env;\n };\n\n public static getTheme = () => {\n return this.theme;\n };\n\n public static getLanguage = () => {\n return this.language;\n };\n\n public static getFonts = () => {\n return this.fonts;\n };\n\n public static getSignedNonce = () => {\n return this.signedNonce;\n };\n\n public static setCustomerToken = (customerToken: string) => {\n this.customerToken = customerToken;\n };\n\n public static getCustomerToken = () => {\n return this.customerToken;\n };\n}\n"],"mappings":";;;AACA,OAAOA,QAAQ,MAAM,qBAAqB;AAC1C,SAASC,UAAU,QAAQ,uCAAuC;AAClE,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,aAAa,QAAQ,+BAA+B;AAG7D,WAAYC,aAAa;AAGxB,WAHWA,aAAa;EAAbA,aAAa;EAAbA,aAAa;AAAA,GAAbA,aAAa,KAAbA,aAAa;AAKzB,MAAMC,gBAAgB,GAAG,GAAG;AAE5B,OAAO,MAAMC,eAAe,GAAG;EAC7B,CAACF,aAAa,CAACG,OAAO,GAAI,gCAA+BF,gBAAiB,gBAAe;EACzF,CAACD,aAAa,CAACI,UAAU,GAAI,8BAA6BH,gBAAiB;AAC7E,CAAC;AACD,OAAO,MAAMI,OAAO,CAAC;AAkEpBC,eAAA,CAlEYD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO;AAAAC,eAAA,CAAPD,OAAO,UAYG,OAAOE,GAAkB,EAAEC,KAAc,EAAEC,QAAiB,EAAEC,KAAe,KAAK;EACrG,IAAI;IAbKL,OAAO,CAcTE,GAAG,GAAGA,GAAG;IAdPF,OAAO,CAeTG,KAAK,GAAGA,KAAK;IAfXH,OAAO,CAgBTI,QAAQ,GAAGA,QAAQ;IAhBjBJ,OAAO,CAiBTK,KAAK,GAAGA,KAAK;IAjBXL,OAAO,CAmBTM,EAAE,GAAG,IAAIZ,aAAa,EAAE;IAC7B,MAAMD,eAAe,EAAE;IACvBF,QAAQ,CAACgB,QAAQ,CAACC,KAAK,CAAChB,UAAU,CAACiB,kBAAkB,EAAE,CAAC,CAAC,CAAC;EAC5D,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVC,OAAO,CAACC,GAAG,CAACF,CAAC,CAAC;EAChB;AACF,CAAC;AAAAT,eAAA,CAzBUD,OAAO,+BA2ByBa,mBAAyC,IAAK;EA3B9Eb,OAAO,CA4BXa,mBAAmB,GAAGA,mBAAmB;AAChD,CAAC;AAAAZ,eAAA,CA7BUD,OAAO,4BA+BqB,MAAM;EAC3C,OAhCSA,OAAO,CAgCJa,mBAAmB;AACjC,CAAC;AAAAZ,eAAA,CAjCUD,OAAO,oBAmCcc,WAAmB,IAAK;EAnC7Cd,OAAO,CAoCXc,WAAW,GAAGA,WAAW;AAChC,CAAC;AAAAb,eAAA,CArCUD,OAAO,YAuCK,MAAM;EAC3B,OAxCSA,OAAO,CAwCJE,GAAG;AACjB,CAAC;AAAAD,eAAA,CAzCUD,OAAO,cA2CO,MAAM;EAC7B,OA5CSA,OAAO,CA4CJG,KAAK;AACnB,CAAC;AAAAF,eAAA,CA7CUD,OAAO,iBA+CU,MAAM;EAChC,OAhDSA,OAAO,CAgDJI,QAAQ;AACtB,CAAC;AAAAH,eAAA,CAjDUD,OAAO,cAmDO,MAAM;EAC7B,OApDSA,OAAO,CAoDJK,KAAK;AACnB,CAAC;AAAAJ,eAAA,CArDUD,OAAO,oBAuDa,MAAM;EACnC,OAxDSA,OAAO,CAwDJc,WAAW;AACzB,CAAC;AAAAb,eAAA,CAzDUD,OAAO,sBA2DgBe,aAAqB,IAAK;EA3DjDf,OAAO,CA4DXe,aAAa,GAAGA,aAAa;AACpC,CAAC;AAAAd,eAAA,CA7DUD,OAAO,sBA+De,MAAM;EACrC,OAhESA,OAAO,CAgEJe,aAAa;AAC3B,CAAC"}
|
|
@@ -11,6 +11,7 @@ import { fetchUnitScript, globalUnitScript } from '../unitSdkManager/UnitSdk.api
|
|
|
11
11
|
import { UnitSDK } from '../unitSdkManager/UnitSdkManager';
|
|
12
12
|
import { SDKMessage } from '../messages/nativeMessages/sdkMessage';
|
|
13
13
|
import { handleRequestDownload } from './WebComponent.utils';
|
|
14
|
+
import { getFontFacesString } from '../scripts/html/fontFaces';
|
|
14
15
|
const {
|
|
15
16
|
UNAppInfo
|
|
16
17
|
} = NativeModules;
|
|
@@ -20,7 +21,6 @@ export const WebComponent = /*#__PURE__*/React.forwardRef(function WebComponent(
|
|
|
20
21
|
const [componentCurrentTheme, setComponentCurrentTheme] = useState(props.theme ?? UnitSDK.getTheme());
|
|
21
22
|
const [componentCurrentLanguage, setComponentCurrentLanguage] = useState(props.language ?? UnitSDK.getLanguage());
|
|
22
23
|
const [baseName, setBaseName] = useState();
|
|
23
|
-
const width = props.width ?? '100%';
|
|
24
24
|
const updateUnitScript = data => {
|
|
25
25
|
setUnitScript(data.unitScript);
|
|
26
26
|
};
|
|
@@ -62,7 +62,9 @@ export const WebComponent = /*#__PURE__*/React.forwardRef(function WebComponent(
|
|
|
62
62
|
const themeParam = componentCurrentTheme ? ` theme="${componentCurrentTheme}"` : '';
|
|
63
63
|
const languageParam = componentCurrentLanguage ? ` language="${componentCurrentLanguage}"` : '';
|
|
64
64
|
const componentParams = (props.params || '') + themeParam + languageParam;
|
|
65
|
+
const fontFaces = getFontFacesString(UnitSDK.getFonts());
|
|
65
66
|
let newHtml = html.replace(HTML_PLACEHOLDER.BODY, getHtmlBody(props.type.valueOf(), componentParams, props.presentationMode));
|
|
67
|
+
newHtml = newHtml.replace(HTML_PLACEHOLDER.FONT_FACES, fontFaces);
|
|
66
68
|
newHtml = newHtml.replace(HTML_PLACEHOLDER.SCRIPT_FROM_NATIVE, props.script || '');
|
|
67
69
|
newHtml = newHtml.replace(HTML_PLACEHOLDER.WINDOW_PARAMS, props.windowParams || '');
|
|
68
70
|
setSourceHtml(newHtml);
|
|
@@ -104,14 +106,14 @@ export const WebComponent = /*#__PURE__*/React.forwardRef(function WebComponent(
|
|
|
104
106
|
overScrollMode: "never",
|
|
105
107
|
injectedJavaScript: unitScript,
|
|
106
108
|
style: {
|
|
107
|
-
width:
|
|
109
|
+
width: '100%',
|
|
108
110
|
flex: 1,
|
|
109
111
|
opacity: 0.99,
|
|
110
112
|
backgroundColor: 'transparent'
|
|
111
113
|
},
|
|
112
114
|
source: {
|
|
113
115
|
html: sourceHtml,
|
|
114
|
-
baseUrl: `https://${baseName}`
|
|
116
|
+
baseUrl: Platform.OS === 'android' ? `https://${baseName}` : ''
|
|
115
117
|
},
|
|
116
118
|
onMessage: onMessage,
|
|
117
119
|
androidHardwareAccelerationDisabled: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","NativeModules","Platform","WebView","EventBus","html","HTML_PLACEHOLDER","UnitMessage","useListenerToBus","getHtmlBody","fetchUnitScript","globalUnitScript","UnitSDK","SDKMessage","handleRequestDownload","UNAppInfo","WebComponent","forwardRef","props","webRef","unitScript","setUnitScript","sourceHtml","setSourceHtml","componentCurrentTheme","setComponentCurrentTheme","theme","getTheme","componentCurrentLanguage","setComponentCurrentLanguage","language","getLanguage","baseName","setBaseName","width","updateUnitScript","data","updateInitializedParams","busEventKey","IS_SCRIPT_FETCHED","action","IS_SDK_INITIALIZED","getAppName","OS","name","getBundleName","replace","error","console","themeParam","languageParam","componentParams","params","newHtml","BODY","type","valueOf","presentationMode","SCRIPT_FROM_NATIVE","script","WINDOW_PARAMS","windowParams","onMessage","e","message","JSON","parse","nativeEvent","UNIT_REQUEST_REFRESH","details","Instance","event","UNIT_REQUEST_DOWNLOAD","UNIT_REQUEST_CLOSE_FLOW","_onScroll","handleScroll","createElement","ref","originWhitelist","mediaPlaybackRequiresUserAction","allowsInlineMediaPlayback","cacheEnabled","scrollEnabled","isScrollable","nestedScrollEnabled","onScroll","overScrollMode","injectedJavaScript","style","flex","opacity","backgroundColor","source","baseUrl","androidHardwareAccelerationDisabled"],"sources":["WebComponent.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useState } from 'react';\nimport { NativeModules, Platform } from 'react-native';\nimport { WebView, WebViewMessageEvent } from 'react-native-webview';\nimport EventBus from '../helpers/EventBus';\nimport html, { HTML_PLACEHOLDER } from './html';\nimport { RequestRefreshEvent, UnitMessage, RequestDownloadEvent } from '../messages/webMessages/unitMessages';\nimport { useListenerToBus } from '../hooks/listenerToBus';\nimport { getHtmlBody } from '../scripts/html/bodyHtml';\nimport { fetchUnitScript, globalUnitScript } from '../unitSdkManager/UnitSdk.api';\nimport { UnitSDK } from '../unitSdkManager/UnitSdkManager';\nimport type { WebViewMessage } from '../messages/webMessages';\nimport { SDKMessage, SdkScriptFetched } from '../messages/nativeMessages/sdkMessage';\nimport { handleRequestDownload } from './WebComponent.utils';\nimport type { PresentationMode, WebComponentType } from '../types/internal/webComponent.types';\n\nconst { UNAppInfo } = NativeModules;\n\nexport interface WebComponentProps {\n type: WebComponentType;\n presentationMode?: PresentationMode,\n params?: string;\n theme?: string;\n language?: string;\n onMessage?: (message: WebViewMessage) => void;\n script?: string;\n isScrollable?: boolean,\n nestedScrollEnabled?: boolean,\n handleScroll?: (event: any) => void,\n width?: number;\n windowParams?: string;\n}\n\nexport const WebComponent = React.forwardRef<WebView, WebComponentProps>(function WebComponent(props, webRef) {\n const [unitScript, setUnitScript] = useState<string | undefined>(globalUnitScript);\n const [sourceHtml, setSourceHtml] = useState<string | null>(null);\n const [componentCurrentTheme, setComponentCurrentTheme] = useState<string | undefined>(props.theme ?? UnitSDK.getTheme());\n const [componentCurrentLanguage, setComponentCurrentLanguage] = useState<string | undefined>(props.language ?? UnitSDK.getLanguage());\n const [baseName, setBaseName] = useState<string>();\n const width = props.width ?? '100%';\n\n const updateUnitScript = (data: SdkScriptFetched) => {\n setUnitScript(data.unitScript);\n };\n\n const updateInitializedParams = () => {\n setComponentCurrentTheme(props.theme ?? UnitSDK.getTheme());\n setComponentCurrentLanguage(props.language ?? UnitSDK.getLanguage());\n };\n\n useListenerToBus({ busEventKey: SDKMessage.IS_SCRIPT_FETCHED, action: updateUnitScript });\n useListenerToBus({ busEventKey: SDKMessage.IS_SDK_INITIALIZED, action: updateInitializedParams });\n\n useEffect(() => {\n\n const getAppName = async () => {\n // For iOS, we extend the app name from the HTML to display a prettier access request message.\n // On Android, there is no request message sent from HTML.\n try {\n if (Platform.OS == 'ios') {\n const name = await UNAppInfo.getBundleName();\n setBaseName(name.replace(/ /g, '-'));\n } else { // android\n setBaseName('unit');\n }\n } catch (error: any) {\n console.error(error);\n }\n };\n\n getAppName();\n }, []);\n\n useEffect(() => {\n if (!unitScript) {\n fetchUnitScript();\n return;\n }\n\n const themeParam = componentCurrentTheme ? ` theme=\"${componentCurrentTheme}\"` : '';\n const languageParam = componentCurrentLanguage ? ` language=\"${componentCurrentLanguage}\"` : '';\n\n const componentParams = (props.params || '') + themeParam + languageParam;\n let newHtml = html.replace(HTML_PLACEHOLDER.BODY, getHtmlBody(props.type.valueOf(), componentParams, props.presentationMode));\n newHtml = newHtml.replace(HTML_PLACEHOLDER.SCRIPT_FROM_NATIVE, props.script || '');\n newHtml = newHtml.replace(HTML_PLACEHOLDER.WINDOW_PARAMS, props.windowParams || '');\n setSourceHtml(newHtml);\n }, [props.params, unitScript, props.presentationMode, componentCurrentTheme, componentCurrentLanguage, props.script, props.windowParams]);\n\n const onMessage = (e: WebViewMessageEvent) => {\n const message = JSON.parse(e.nativeEvent.data) as WebViewMessage;\n switch (message.type) {\n case UnitMessage.UNIT_REQUEST_REFRESH:\n message.details &&\n EventBus.Instance.event(UnitMessage.UNIT_REQUEST_REFRESH, message.details as RequestRefreshEvent);\n break;\n case UnitMessage.UNIT_REQUEST_DOWNLOAD:\n message.details &&\n handleRequestDownload(message.details as RequestDownloadEvent, () => {\n EventBus.Instance.event(UnitMessage.UNIT_REQUEST_CLOSE_FLOW, {});\n });\n break;\n default:\n props.onMessage && props.onMessage(message);\n }\n };\n\n if (!sourceHtml) return null;\n\n const _onScroll = (event: any) => {\n if (props.handleScroll) {\n props.handleScroll(event);\n }\n\n return null;\n };\n\n if (!baseName) {\n return null;\n }\n\n return (\n <WebView\n ref={webRef}\n originWhitelist={['*']}\n mediaPlaybackRequiresUserAction={false}\n allowsInlineMediaPlayback={true}\n cacheEnabled={false}\n scrollEnabled={props.isScrollable}\n nestedScrollEnabled={props.nestedScrollEnabled}\n onScroll={_onScroll}\n overScrollMode=\"never\"\n injectedJavaScript={unitScript}\n style={{ width: width, flex: 1, opacity: 0.99, backgroundColor: 'transparent' }}\n source={{ html: sourceHtml, baseUrl: `https://${baseName}` }}\n onMessage={onMessage}\n androidHardwareAccelerationDisabled\n />\n );\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","NativeModules","Platform","WebView","EventBus","html","HTML_PLACEHOLDER","UnitMessage","useListenerToBus","getHtmlBody","fetchUnitScript","globalUnitScript","UnitSDK","SDKMessage","handleRequestDownload","getFontFacesString","UNAppInfo","WebComponent","forwardRef","props","webRef","unitScript","setUnitScript","sourceHtml","setSourceHtml","componentCurrentTheme","setComponentCurrentTheme","theme","getTheme","componentCurrentLanguage","setComponentCurrentLanguage","language","getLanguage","baseName","setBaseName","updateUnitScript","data","updateInitializedParams","busEventKey","IS_SCRIPT_FETCHED","action","IS_SDK_INITIALIZED","getAppName","OS","name","getBundleName","replace","error","console","themeParam","languageParam","componentParams","params","fontFaces","getFonts","newHtml","BODY","type","valueOf","presentationMode","FONT_FACES","SCRIPT_FROM_NATIVE","script","WINDOW_PARAMS","windowParams","onMessage","e","message","JSON","parse","nativeEvent","UNIT_REQUEST_REFRESH","details","Instance","event","UNIT_REQUEST_DOWNLOAD","UNIT_REQUEST_CLOSE_FLOW","_onScroll","handleScroll","createElement","ref","originWhitelist","mediaPlaybackRequiresUserAction","allowsInlineMediaPlayback","cacheEnabled","scrollEnabled","isScrollable","nestedScrollEnabled","onScroll","overScrollMode","injectedJavaScript","style","width","flex","opacity","backgroundColor","source","baseUrl","androidHardwareAccelerationDisabled"],"sources":["WebComponent.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useState } from 'react';\nimport { NativeModules, Platform } from 'react-native';\nimport { WebView, WebViewMessageEvent } from 'react-native-webview';\nimport EventBus from '../helpers/EventBus';\nimport html, { HTML_PLACEHOLDER } from './html';\nimport { RequestRefreshEvent, UnitMessage, RequestDownloadEvent } from '../messages/webMessages/unitMessages';\nimport { useListenerToBus } from '../hooks/listenerToBus';\nimport { getHtmlBody } from '../scripts/html/bodyHtml';\nimport { fetchUnitScript, globalUnitScript } from '../unitSdkManager/UnitSdk.api';\nimport { UnitSDK } from '../unitSdkManager/UnitSdkManager';\nimport type { WebViewMessage } from '../messages/webMessages';\nimport { SDKMessage, SdkScriptFetched } from '../messages/nativeMessages/sdkMessage';\nimport { handleRequestDownload } from './WebComponent.utils';\nimport type { PresentationMode, WebComponentType } from '../types/internal/webComponent.types';\nimport { getFontFacesString } from '../scripts/html/fontFaces';\n\nconst { UNAppInfo } = NativeModules;\n\nexport interface WebComponentProps {\n type: WebComponentType;\n presentationMode?: PresentationMode,\n params?: string;\n theme?: string;\n language?: string;\n onMessage?: (message: WebViewMessage) => void;\n script?: string;\n isScrollable?: boolean,\n nestedScrollEnabled?: boolean,\n handleScroll?: (event: any) => void,\n windowParams?: string;\n}\n\nexport const WebComponent = React.forwardRef<WebView, WebComponentProps>(function WebComponent(props, webRef) {\n const [unitScript, setUnitScript] = useState<string | undefined>(globalUnitScript);\n const [sourceHtml, setSourceHtml] = useState<string | null>(null);\n const [componentCurrentTheme, setComponentCurrentTheme] = useState<string | undefined>(props.theme ?? UnitSDK.getTheme());\n const [componentCurrentLanguage, setComponentCurrentLanguage] = useState<string | undefined>(props.language ?? UnitSDK.getLanguage());\n const [baseName, setBaseName] = useState<string>();\n\n const updateUnitScript = (data: SdkScriptFetched) => {\n setUnitScript(data.unitScript);\n };\n\n const updateInitializedParams = () => {\n setComponentCurrentTheme(props.theme ?? UnitSDK.getTheme());\n setComponentCurrentLanguage(props.language ?? UnitSDK.getLanguage());\n };\n\n useListenerToBus({ busEventKey: SDKMessage.IS_SCRIPT_FETCHED, action: updateUnitScript });\n useListenerToBus({ busEventKey: SDKMessage.IS_SDK_INITIALIZED, action: updateInitializedParams });\n\n useEffect(() => {\n\n const getAppName = async () => {\n // For iOS, we extend the app name from the HTML to display a prettier access request message.\n // On Android, there is no request message sent from HTML.\n try {\n if (Platform.OS == 'ios') {\n const name = await UNAppInfo.getBundleName();\n setBaseName(name.replace(/ /g, '-'));\n } else { // android\n setBaseName('unit');\n }\n } catch (error: any) {\n console.error(error);\n }\n };\n\n getAppName();\n }, []);\n\n useEffect(() => {\n if (!unitScript) {\n fetchUnitScript();\n return;\n }\n\n const themeParam = componentCurrentTheme ? ` theme=\"${componentCurrentTheme}\"` : '';\n const languageParam = componentCurrentLanguage ? ` language=\"${componentCurrentLanguage}\"` : '';\n\n const componentParams = (props.params || '') + themeParam + languageParam;\n\n const fontFaces = getFontFacesString(UnitSDK.getFonts());\n\n let newHtml = html.replace(HTML_PLACEHOLDER.BODY, getHtmlBody(props.type.valueOf(), componentParams, props.presentationMode));\n newHtml = newHtml.replace(HTML_PLACEHOLDER.FONT_FACES, fontFaces);\n newHtml = newHtml.replace(HTML_PLACEHOLDER.SCRIPT_FROM_NATIVE, props.script || '');\n newHtml = newHtml.replace(HTML_PLACEHOLDER.WINDOW_PARAMS, props.windowParams || '');\n setSourceHtml(newHtml);\n }, [props.params, unitScript, props.presentationMode, componentCurrentTheme, componentCurrentLanguage, props.script, props.windowParams]);\n\n const onMessage = (e: WebViewMessageEvent) => {\n const message = JSON.parse(e.nativeEvent.data) as WebViewMessage;\n switch (message.type) {\n case UnitMessage.UNIT_REQUEST_REFRESH:\n message.details &&\n EventBus.Instance.event(UnitMessage.UNIT_REQUEST_REFRESH, message.details as RequestRefreshEvent);\n break;\n case UnitMessage.UNIT_REQUEST_DOWNLOAD:\n message.details &&\n handleRequestDownload(message.details as RequestDownloadEvent, () => {\n EventBus.Instance.event(UnitMessage.UNIT_REQUEST_CLOSE_FLOW, {});\n });\n break;\n default:\n props.onMessage && props.onMessage(message);\n }\n };\n\n if (!sourceHtml) return null;\n\n const _onScroll = (event: any) => {\n if (props.handleScroll) {\n props.handleScroll(event);\n }\n\n return null;\n };\n\n if (!baseName) {\n return null;\n }\n\n return (\n <WebView\n ref={webRef}\n originWhitelist={['*']}\n mediaPlaybackRequiresUserAction={false}\n allowsInlineMediaPlayback={true}\n cacheEnabled={false}\n scrollEnabled={props.isScrollable}\n nestedScrollEnabled={props.nestedScrollEnabled}\n onScroll={_onScroll}\n overScrollMode=\"never\"\n injectedJavaScript={unitScript}\n style={{ width: '100%', flex: 1, opacity: 0.99, backgroundColor: 'transparent' }}\n source={{ html: sourceHtml, baseUrl: Platform.OS === 'android' ? `https://${baseName}` : ''}}\n onMessage={onMessage}\n androidHardwareAccelerationDisabled\n />\n );\n});\n"],"mappings":"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"}
|