react-native-unit-components 0.1.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.
Files changed (89) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +2 -0
  3. package/android/build.gradle +145 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +4 -0
  6. package/android/src/main/java/com/unitreactnativecomponents/UnitReactNativeComponentsPackage.kt +16 -0
  7. package/android/src/main/java/com/unitreactnativecomponents/UnitReactNativeComponentsViewManager.kt +19 -0
  8. package/ios/UnitReactNativeComponents-Bridging-Header.h +1 -0
  9. package/ios/UnitReactNativeComponents.xcodeproj/project.pbxproj +283 -0
  10. package/ios/UnitReactNativeComponents.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  11. package/ios/UnitReactNativeComponents.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  12. package/ios/UnitReactNativeComponents.xcodeproj/project.xcworkspace/xcuserdata/alonshprung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  13. package/ios/UnitReactNativeComponents.xcodeproj/xcuserdata/alonshprung.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  14. package/ios/UnitReactNativeComponentsViewManager.m +7 -0
  15. package/ios/UnitReactNativeComponentsViewManager.swift +36 -0
  16. package/lib/commonjs/components/BottomSheet/BottomSheetComponent.js +143 -0
  17. package/lib/commonjs/components/BottomSheet/BottomSheetComponent.js.map +1 -0
  18. package/lib/commonjs/components/Card/CardComponent.js +97 -0
  19. package/lib/commonjs/components/Card/CardComponent.js.map +1 -0
  20. package/lib/commonjs/components/index.js +32 -0
  21. package/lib/commonjs/components/index.js.map +1 -0
  22. package/lib/commonjs/helpers/BottomSheet.js +274 -0
  23. package/lib/commonjs/helpers/BottomSheet.js.map +1 -0
  24. package/lib/commonjs/helpers/EventBus.js +79 -0
  25. package/lib/commonjs/helpers/EventBus.js.map +1 -0
  26. package/lib/commonjs/index.js +19 -0
  27. package/lib/commonjs/index.js.map +1 -0
  28. package/lib/commonjs/nativeComponenet/NativeComponentExample.js +19 -0
  29. package/lib/commonjs/nativeComponenet/NativeComponentExample.js.map +1 -0
  30. package/lib/commonjs/webComponent/WebComponent.js +75 -0
  31. package/lib/commonjs/webComponent/WebComponent.js.map +1 -0
  32. package/lib/commonjs/webComponent/html.js +79 -0
  33. package/lib/commonjs/webComponent/html.js.map +1 -0
  34. package/lib/commonjs/webComponent/webMessages/cardMessage.js +13 -0
  35. package/lib/commonjs/webComponent/webMessages/cardMessage.js.map +1 -0
  36. package/lib/commonjs/webComponent/webMessages/pageMessage.js +14 -0
  37. package/lib/commonjs/webComponent/webMessages/pageMessage.js.map +1 -0
  38. package/lib/commonjs/webComponent/webMessages/unitMessages.js +17 -0
  39. package/lib/commonjs/webComponent/webMessages/unitMessages.js.map +1 -0
  40. package/lib/module/components/BottomSheet/BottomSheetComponent.js +118 -0
  41. package/lib/module/components/BottomSheet/BottomSheetComponent.js.map +1 -0
  42. package/lib/module/components/Card/CardComponent.js +75 -0
  43. package/lib/module/components/Card/CardComponent.js.map +1 -0
  44. package/lib/module/components/index.js +3 -0
  45. package/lib/module/components/index.js.map +1 -0
  46. package/lib/module/helpers/BottomSheet.js +252 -0
  47. package/lib/module/helpers/BottomSheet.js.map +1 -0
  48. package/lib/module/helpers/EventBus.js +69 -0
  49. package/lib/module/helpers/EventBus.js.map +1 -0
  50. package/lib/module/index.js +2 -0
  51. package/lib/module/index.js.map +1 -0
  52. package/lib/module/nativeComponenet/NativeComponentExample.js +10 -0
  53. package/lib/module/nativeComponenet/NativeComponentExample.js.map +1 -0
  54. package/lib/module/webComponent/WebComponent.js +49 -0
  55. package/lib/module/webComponent/WebComponent.js.map +1 -0
  56. package/lib/module/webComponent/html.js +72 -0
  57. package/lib/module/webComponent/html.js.map +1 -0
  58. package/lib/module/webComponent/webMessages/cardMessage.js +6 -0
  59. package/lib/module/webComponent/webMessages/cardMessage.js.map +1 -0
  60. package/lib/module/webComponent/webMessages/pageMessage.js +7 -0
  61. package/lib/module/webComponent/webMessages/pageMessage.js.map +1 -0
  62. package/lib/module/webComponent/webMessages/unitMessages.js +10 -0
  63. package/lib/module/webComponent/webMessages/unitMessages.js.map +1 -0
  64. package/lib/typescript/components/BottomSheet/BottomSheetComponent.d.ts +1 -0
  65. package/lib/typescript/components/Card/CardComponent.d.ts +6 -0
  66. package/lib/typescript/components/index.d.ts +2 -0
  67. package/lib/typescript/helpers/BottomSheet.d.ts +34 -0
  68. package/lib/typescript/helpers/EventBus.d.ts +15 -0
  69. package/lib/typescript/index.d.ts +1 -0
  70. package/lib/typescript/nativeComponenet/NativeComponentExample.d.ts +7 -0
  71. package/lib/typescript/webComponent/WebComponent.d.ts +23 -0
  72. package/lib/typescript/webComponent/html.d.ts +2 -0
  73. package/lib/typescript/webComponent/webMessages/cardMessage.d.ts +7 -0
  74. package/lib/typescript/webComponent/webMessages/pageMessage.d.ts +8 -0
  75. package/lib/typescript/webComponent/webMessages/unitMessages.d.ts +24 -0
  76. package/package.json +152 -0
  77. package/src/components/BottomSheet/BottomSheetComponent.tsx +113 -0
  78. package/src/components/Card/CardComponent.tsx +75 -0
  79. package/src/components/index.ts +2 -0
  80. package/src/helpers/BottomSheet.tsx +277 -0
  81. package/src/helpers/EventBus.ts +58 -0
  82. package/src/index.tsx +1 -0
  83. package/src/nativeComponenet/NativeComponentExample.tsx +26 -0
  84. package/src/webComponent/WebComponent.tsx +75 -0
  85. package/src/webComponent/html.ts +72 -0
  86. package/src/webComponent/webMessages/cardMessage.ts +10 -0
  87. package/src/webComponent/webMessages/pageMessage.ts +11 -0
  88. package/src/webComponent/webMessages/unitMessages.ts +31 -0
  89. package/unit-react-native-components.podspec +35 -0
@@ -0,0 +1,58 @@
1
+ export enum BusEvent {
2
+ REQUEST_RENDERING = 'unitRequestRendering',
3
+ CARD_STATUS_CHANGED = 'cardStatusChanged',
4
+ REQUEST_REFRESH = 'requestRefresh'
5
+ }
6
+
7
+ export default class EventBus {
8
+ private static _instance: EventBus;
9
+
10
+ private eventListeners: { [name: string]: Array<(data: any) => void> } = {}
11
+
12
+ private constructor() {
13
+ this.eventListeners = {};
14
+ }
15
+
16
+ public static get Instance() {
17
+ return this._instance || (this._instance = new this());
18
+ }
19
+
20
+ public event(event: BusEvent, data: any) {
21
+ let listeners = this.eventListeners[event.valueOf()];
22
+ if (Array.isArray(listeners)) {
23
+ listeners.map(listener => {
24
+ if (typeof listener === 'function') {
25
+ listener(data);
26
+ }
27
+ })
28
+ }
29
+ }
30
+
31
+ public addListener(event: BusEvent, listener: (data: any) => void) {
32
+ let listeners = this.eventListeners[event.valueOf()];
33
+ if (Array.isArray(listeners)) {
34
+ listeners.push(listener);
35
+ } else {
36
+ this.eventListeners[event.valueOf()] = [listener];
37
+ }
38
+ }
39
+
40
+ public removeListener(listener: (data: any) => void) {
41
+ Object.keys(this.eventListeners).map(eventName => {
42
+ let listeners = this.eventListeners[eventName];
43
+ if (listeners) {
44
+ this._remove(listeners, listener);
45
+ if (listeners.length === 0) {
46
+ delete this.eventListeners[eventName];
47
+ }
48
+ }
49
+ })
50
+ }
51
+
52
+ private _remove(array: Array<(data: any) => void>, item: (data: string) => void) {
53
+ if (!array) return;
54
+ for (let i = 0, l = array.length; i < l; i++) {
55
+ if (item === array[i]) array.splice(i, 1);
56
+ }
57
+ }
58
+ }
package/src/index.tsx ADDED
@@ -0,0 +1 @@
1
+ export * from './components'
@@ -0,0 +1,26 @@
1
+ import {
2
+ requireNativeComponent,
3
+ UIManager,
4
+ Platform,
5
+ ViewStyle,
6
+ } from 'react-native';
7
+
8
+ const LINKING_ERROR =
9
+ `The package 'unit-react-native-components' doesn't seem to be linked. Make sure: \n\n` +
10
+ Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
11
+ '- You rebuilt the app after installing the package\n' +
12
+ '- You are not using Expo managed workflow\n';
13
+
14
+ type UnitReactNativeComponentsProps = {
15
+ color: string;
16
+ style: ViewStyle;
17
+ };
18
+
19
+ const ComponentName = 'UnitReactNativeComponentsView';
20
+
21
+ export const UnitReactNativeComponentsView =
22
+ UIManager.getViewManagerConfig(ComponentName) != null
23
+ ? requireNativeComponent<UnitReactNativeComponentsProps>(ComponentName)
24
+ : () => {
25
+ throw new Error(LINKING_ERROR);
26
+ };
@@ -0,0 +1,75 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Dimensions } from 'react-native';
3
+ import {
4
+ WebView,
5
+ WebViewMessageEvent
6
+ } from 'react-native-webview'
7
+ import EventBus, { BusEvent } from '../helpers/EventBus';
8
+
9
+ import html from './html';
10
+ import type { CardEvent, CardMessage } from './webMessages/cardMessage';
11
+ import type { PageEvent, PageMessage } from './webMessages/pageMessage';
12
+ import { RequestRefreshEvent, UnitEvent, UnitMessage } from './webMessages/unitMessages';
13
+
14
+ export type WebViewMessageType =
15
+ | PageMessage
16
+ | CardMessage
17
+ | UnitMessage
18
+
19
+ type WebViewEvent =
20
+ | PageEvent
21
+ | UnitEvent
22
+ | CardEvent
23
+
24
+ export interface WebViewMessage {
25
+ type: WebViewMessageType,
26
+ details?: WebViewEvent
27
+ }
28
+
29
+ export interface WebComponentProps {
30
+ type: WebComponentType;
31
+ params?: string;
32
+ onMessage: (message: WebViewMessage) => void;
33
+ script?: string;
34
+ }
35
+
36
+ export enum WebComponentType {
37
+ card = 'unit-elements-card',
38
+ slot = 'unit-elements-sdk-slot'
39
+ }
40
+
41
+ export const WebComponent = React.forwardRef<WebView, WebComponentProps>((props, webRef) => {
42
+ const [sourceHtml, setSourceHtml] = useState<string | null>(null)
43
+
44
+ const windowWidth = Dimensions.get('window').width;
45
+
46
+ useEffect(() => {
47
+ const component: string = props.type.valueOf()
48
+ let newHtml = html.replace('<COMPONENT>', `<${component} ${props.params || ''}> </${component}>`)
49
+ newHtml = newHtml.replace('<SCRIPT_FROM_NATIVE>', props.script || '')
50
+ setSourceHtml(newHtml)
51
+ }, [props.params])
52
+
53
+ const onMessage = (e: WebViewMessageEvent) => {
54
+ const message = JSON.parse(e.nativeEvent.data) as WebViewMessage
55
+
56
+ if (message.type == UnitMessage.UNIT_REQUEST_REFRESH && message.details) {
57
+ EventBus.Instance.event(BusEvent.REQUEST_REFRESH, message.details as RequestRefreshEvent)
58
+ } else {
59
+ props.onMessage(message)
60
+ }
61
+ }
62
+
63
+ if (!sourceHtml) return null
64
+
65
+ return (
66
+ <WebView
67
+ ref={webRef}
68
+ cacheEnabled={false}
69
+ scrollEnabled={false}
70
+ overScrollMode="never"
71
+ style={{ width: windowWidth }}
72
+ source={{ html: sourceHtml }}
73
+ onMessage={onMessage} />
74
+ )
75
+ })
@@ -0,0 +1,72 @@
1
+ const htmlText = `
2
+ <!DOCTYPE html>
3
+ <html lang="en">
4
+
5
+ <head lang="en">
6
+ <title>Unit Web SDK Demo</title>
7
+ <script>
8
+ window.UnitMobileSDK = true
9
+ </script>
10
+ <script src="https://unit-white-labeled-banking.netlify.app/client-events.js"></script>
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
12
+ </html>
13
+
14
+ <body style="margin: 0">
15
+ <COMPONENT>
16
+
17
+ <script>
18
+ const postMessageToSDK = (message) => {
19
+ if ('ReactNativeWebView' in window) {
20
+ const messageString = JSON.stringify(message)
21
+ window['ReactNativeWebView'].postMessage(messageString)
22
+ }
23
+ }
24
+
25
+ const postHeight = () => {
26
+ setTimeout(() => {
27
+ const height = window.document.documentElement.getBoundingClientRect().height + 36
28
+ postMessageToSDK({ type: "pageHeight", details: { height } })
29
+ })
30
+ }
31
+
32
+ window.addEventListener('DOMContentLoaded', e => {
33
+ postMessageToSDK({ type: "pageLoaded" })
34
+ });
35
+
36
+ window.addEventListener("unitRequestRendering", (e) => {
37
+ postMessageToSDK({ type: "unitRequestRendering", details: { data: JSON.stringify(e.detail) }})
38
+ });
39
+
40
+ window.addEventListener("unitOnLoad", (e) => {
41
+ postHeight()
42
+ postMessageToSDK({ type: "unitOnLoad" })
43
+ });
44
+
45
+ window.addEventListener("unitRequestCloseFlow", (e) => {
46
+ postMessageToSDK({ type: "unitRequestCloseFlow" })
47
+ });
48
+
49
+ window.addEventListener("unitRequestOpenLink", (e) => {
50
+ postMessageToSDK({ type: "unitRequestOpenLink", details: e.detail })
51
+ });
52
+
53
+ window.addEventListener("unitCardStatusChanged", (e) => {
54
+ const response = e.detail
55
+ response.then((data) => {
56
+ postMessageToSDK({ type: "cardStatusChanged", details: { card: JSON.stringify(data.data) }})
57
+ }).catch((e) => {
58
+ console.log(e)
59
+ })
60
+ });
61
+
62
+ const dispatchRenderingEvent = (details) => {
63
+ const event = new CustomEvent("unitRequestRendering",{ detail: JSON.parse(details) })
64
+ window.dispatchEvent(event)
65
+ }
66
+
67
+ <SCRIPT_FROM_NATIVE>
68
+ </script>
69
+ </body>
70
+ `
71
+
72
+ export default htmlText
@@ -0,0 +1,10 @@
1
+ export enum CardMessage {
2
+ CARD_STATUS_CHANGE = 'cardStatusChanged'
3
+ }
4
+
5
+ export interface CardStatusChangedEvent {
6
+ card: any;
7
+ }
8
+
9
+ export type CardEvent =
10
+ | CardStatusChangedEvent
@@ -0,0 +1,11 @@
1
+ export enum PageMessage {
2
+ PAGE_LOADED = 'pageLoaded',
3
+ PAGE_HEIGHT = 'pageHeight'
4
+ }
5
+
6
+ export interface HeightEvent {
7
+ height: number;
8
+ }
9
+
10
+ export type PageEvent =
11
+ | HeightEvent
@@ -0,0 +1,31 @@
1
+ export enum UnitMessage {
2
+ UNIT_REQUEST_RENDERING = 'unitRequestRendering',
3
+ UNIT_REQUEST_REFRESH = 'unitRequestRefresh',
4
+ UNIT_REQUEST_CLOSE_FLOW = 'unitRequestCloseFlow',
5
+ UNIT_REQUEST_OPEN_LINK = 'unitRequestOpenLink',
6
+ UNIT_ON_LOAD = 'unitOnLoad'
7
+ }
8
+
9
+ export interface RequestRenderingData {
10
+ nativePlace: string;
11
+ nativeComponent: string;
12
+ }
13
+ export interface RequestRenderingEvent {
14
+ data: string;
15
+ }
16
+
17
+ export interface RequestRefreshEvent {
18
+ refEvent: string;
19
+ dependencies: string[];
20
+ resourceId: string;
21
+ }
22
+
23
+ export interface RequestOpenLinkEvent {
24
+ href: string;
25
+ target: string
26
+ }
27
+
28
+ export type UnitEvent =
29
+ | RequestRenderingEvent
30
+ | RequestRefreshEvent
31
+ | RequestOpenLinkEvent
@@ -0,0 +1,35 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
5
+
6
+ Pod::Spec.new do |s|
7
+ s.name = "unit-react-native-components"
8
+ s.version = package["version"]
9
+ s.summary = package["description"]
10
+ s.homepage = package["homepage"]
11
+ s.license = package["license"]
12
+ s.authors = package["author"]
13
+
14
+ s.platforms = { :ios => "10.0" }
15
+ s.source = { :git => "https://github.com/github_account/unit-react-native-components.git", :tag => "#{s.version}" }
16
+
17
+ s.source_files = "ios/**/*.{h,m,mm,swift}"
18
+
19
+ s.dependency "React-Core"
20
+
21
+ # Don't install the dependencies when we run `pod install` in the old architecture.
22
+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
23
+ s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
24
+ s.pod_target_xcconfig = {
25
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
26
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
27
+ }
28
+
29
+ s.dependency "React-Codegen"
30
+ s.dependency "RCT-Folly"
31
+ s.dependency "RCTRequired"
32
+ s.dependency "RCTTypeSafety"
33
+ s.dependency "ReactCommon/turbomodule/core"
34
+ end
35
+ end