agora-appbuilder-core 2.2.0 → 2.3.0-beta.10
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/Readme.md +7 -1
- package/package.json +4 -3
- package/template/Gulpfile.js +389 -82
- package/template/_gitignore +4 -1
- package/template/_package-lock.json +32214 -3080
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
- package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +22 -3
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
- package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
- package/template/agora-rn-uikit/src/index.ts +12 -12
- package/template/babel.config.js +17 -1
- package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
- package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
- package/template/bridge/rtc/webNg/Types.ts +14 -0
- package/template/bridge/rtc/webNg/index.ts +5 -2
- package/template/bridge/rtm/web/index.ts +13 -7
- package/template/electron-builder.js +3 -2
- package/template/esbuild.rsdk.go +240 -0
- package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
- package/template/fpe-api/components.ts +43 -0
- package/template/fpe-api/context.ts +45 -0
- package/template/fpe-api/fpeEvents.ts +9 -0
- package/template/fpe-api/index.ts +21 -0
- package/template/fpe-api/install.ts +138 -0
- package/template/fpe-api/typeDefinition.ts +144 -0
- package/template/fpe-api/useFpe.tsx +35 -0
- package/template/fpe-api/utils.ts +61 -0
- package/template/fpe-implementation/createHook.ts +33 -0
- package/template/fpe-implementation/dummyFpe.ts +17 -0
- package/template/fpe-implementation/index.ts +1 -0
- package/template/fpe-todo.txt +14 -0
- package/template/fpe.config.js +29 -0
- package/template/global.d.ts +4 -0
- package/template/index.rsdk.tsx +27 -0
- package/template/index.wsdk.tsx +27 -0
- package/template/package.json +30 -13
- package/template/react-native-toast-message/src/index.js +9 -10
- package/template/react-native-toast-message/src/index.wsdk.js +419 -0
- package/template/src/App.tsx +97 -65
- package/template/src/AppWrapper.tsx +79 -0
- package/template/src/SDKAppWrapper.tsx +67 -0
- package/template/src/atoms/PrimaryButton.tsx +14 -8
- package/template/src/atoms/TextInput.tsx +13 -5
- package/template/src/components/Chat.tsx +178 -137
- package/template/src/components/ChatContext.ts +18 -22
- package/template/src/components/ColorConfigure.tsx +2 -2
- package/template/src/components/Controls.native.tsx +72 -62
- package/template/src/components/Controls.tsx +90 -69
- package/template/src/components/DeviceConfigure.tsx +1 -1
- package/template/src/components/DeviceContext.tsx +14 -7
- package/template/src/components/GraphQLProvider.tsx +9 -2
- package/template/src/components/GridVideo.tsx +20 -159
- package/template/src/components/HostControlView.tsx +54 -15
- package/template/src/components/Navbar.tsx +408 -157
- package/template/src/components/NetworkQualityContext.tsx +29 -22
- package/template/src/components/ParticipantsView.tsx +91 -115
- package/template/src/components/PinnedVideo.tsx +41 -188
- package/template/src/components/Precall.native.tsx +131 -97
- package/template/src/components/Precall.tsx +193 -158
- package/template/src/components/RTMConfigure.tsx +309 -415
- package/template/src/components/Router.sdk.ts +20 -0
- package/template/src/components/SessionContext.tsx +6 -3
- package/template/src/components/Settings.native.tsx +3 -0
- package/template/src/components/Settings.tsx +65 -31
- package/template/src/components/SettingsView.tsx +14 -8
- package/template/src/components/Share.tsx +188 -220
- package/template/src/components/StorageContext.tsx +5 -5
- package/template/src/components/StoreToken.tsx +5 -1
- package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
- package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
- package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
- package/template/src/components/common/Error.tsx +54 -0
- package/template/src/components/common/Logo.tsx +35 -0
- package/template/src/components/common/index.tsx +8 -0
- package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
- package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
- package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
- package/template/src/components/dimension/DimensionContext.ts +27 -0
- package/template/src/components/dimension/DimensionProvider.tsx +34 -0
- package/template/src/components/livestream/LiveStreamContext.tsx +297 -273
- package/template/src/components/livestream/Types.ts +26 -7
- package/template/src/components/livestream/index.ts +13 -2
- package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
- package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
- package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
- package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
- package/template/src/components/participants/AllHostParticipants.tsx +41 -53
- package/template/src/components/participants/MeParticipant.tsx +9 -10
- package/template/src/components/participants/ParticipantName.tsx +2 -1
- package/template/src/components/participants/RemoteParticipants.tsx +3 -3
- package/template/src/components/precall/LocalMute.native.tsx +91 -0
- package/template/src/components/precall/LocalMute.tsx +90 -0
- package/template/src/components/precall/VideoPreview.native.tsx +35 -0
- package/template/src/components/precall/VideoPreview.tsx +33 -0
- package/template/src/components/precall/index.tsx +28 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
- package/template/src/components/precall/joinCallBtn.tsx +91 -0
- package/template/src/components/precall/meetingTitle.tsx +26 -0
- package/template/src/components/precall/selectDevice.tsx +46 -0
- package/template/src/components/precall/textInput.tsx +43 -0
- package/template/src/components/precall/usePreCall.tsx +41 -0
- package/template/src/components/styles.ts +20 -3
- package/template/src/components/useShareLink.tsx +237 -0
- package/template/src/components/useUserPreference.tsx +125 -0
- package/template/src/components/useWakeLock.tsx +3 -3
- package/template/src/custom-events/CustomEvents.ts +238 -0
- package/template/src/custom-events/index.tsx +4 -0
- package/template/src/custom-events/types.ts +51 -0
- package/template/src/language/default-labels/commonLabels.ts +21 -0
- package/template/src/language/default-labels/createScreenLabels.ts +22 -0
- package/template/src/language/default-labels/index.ts +38 -0
- package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
- package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
- package/template/src/language/default-labels/videoCallScreenLabels.ts +191 -0
- package/template/src/language/i18nTypes.ts +10 -0
- package/template/src/language/index.ts +18 -0
- package/template/src/language/useLanguage.tsx +92 -0
- package/template/src/pages/Authenticate.tsx +21 -15
- package/template/src/pages/Create.tsx +180 -159
- package/template/src/pages/Join.tsx +47 -32
- package/template/src/pages/VideoCall.tsx +138 -407
- package/template/src/pages/create/useCreate.tsx +37 -0
- package/template/src/pages/video-call/CustomLayout.ts +17 -0
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +20 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
- package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
- package/template/src/pages/video-call/RenderComponent.tsx +52 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
- package/template/src/pages/video-call/VideoComponent.tsx +34 -0
- package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
- package/template/src/pages/video-call/index.ts +20 -0
- package/template/src/rtm/RTMEngine.ts +58 -0
- package/template/src/rtm/utils.ts +44 -0
- package/template/src/rtm-events/EventUtils.ts +267 -0
- package/template/src/rtm-events/EventsQueue.ts +38 -0
- package/template/src/rtm-events/constants.ts +42 -0
- package/template/src/rtm-events/index.tsx +8 -0
- package/template/src/rtm-events/types.ts +7 -0
- package/template/src/subComponents/ChatBubble.tsx +21 -12
- package/template/src/subComponents/ChatContainer.tsx +79 -30
- package/template/src/subComponents/ChatInput.tsx +146 -70
- package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
- package/template/src/subComponents/Error.tsx +35 -24
- package/template/src/subComponents/LanguageSelector.tsx +85 -0
- package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
- package/template/src/subComponents/LocalAudioMute.tsx +52 -30
- package/template/src/subComponents/LocalEndCall.tsx +52 -0
- package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
- package/template/src/subComponents/LocalVideoMute.tsx +48 -30
- package/template/src/subComponents/LogoutButton.tsx +20 -5
- package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
- package/template/src/subComponents/Recording.tsx +46 -138
- package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
- package/template/src/subComponents/RemoteEndCall.tsx +18 -7
- package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
- package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
- package/template/src/subComponents/SelectDevice.tsx +88 -45
- package/template/src/subComponents/SelectOAuth.tsx +30 -6
- package/template/src/subComponents/SidePanelButtons.ts +39 -0
- package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
- package/template/src/subComponents/TextWithTooltip.tsx +15 -20
- package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
- package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
- package/template/src/subComponents/livestream/index.ts +10 -2
- package/template/src/subComponents/recording/useRecording.tsx +209 -0
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +104 -144
- package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
- package/template/src/subComponents/toastConfig.tsx +25 -20
- package/template/src/utils/IsAttendeeUser.ts +34 -0
- package/template/src/utils/SdkEvents.ts +68 -0
- package/template/src/utils/common.tsx +40 -0
- package/template/src/utils/eventEmitter.ts +29 -0
- package/template/src/utils/getMeetingInvite.ts +53 -0
- package/template/src/utils/index.tsx +11 -2
- package/template/src/utils/isAudioEnabled.ts +29 -0
- package/template/src/utils/isHostUser.ts +33 -0
- package/template/src/utils/isMobileOrTablet.native.ts +5 -0
- package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
- package/template/src/utils/isPSTNUser.ts +30 -0
- package/template/src/utils/isSDK.sdk.ts +5 -0
- package/template/src/utils/isSDK.ts +5 -0
- package/template/src/utils/isScreenShareUser.ts +31 -0
- package/template/src/utils/isVideoEnabled.ts +29 -0
- package/template/src/utils/useButtonTemplate.tsx +43 -0
- package/template/src/utils/useCreateMeeting.ts +74 -0
- package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
- package/template/src/utils/useGetMeetingPhrase.ts +68 -0
- package/template/src/utils/useGetName.ts +19 -0
- package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
- package/template/src/utils/useJoinMeeting.ts +128 -0
- package/template/src/utils/useLayout.tsx +40 -0
- package/template/src/utils/useLiveStreamingUids.ts +26 -0
- package/template/src/utils/useLocalShareScreenUid.ts +19 -0
- package/template/src/utils/useMutePSTN.ts +43 -0
- package/template/src/utils/useMuteToggleLocal.ts +109 -0
- package/template/src/utils/useNavParams.ts +6 -0
- package/template/src/utils/useNavigateTo.ts +8 -0
- package/template/src/utils/usePrivateMessages.ts +33 -0
- package/template/src/utils/useRemoteEndCall.ts +27 -0
- package/template/src/utils/useRemoteMute.ts +64 -0
- package/template/src/utils/useSendControlMessage.ts +51 -0
- package/template/src/utils/useSendMessage.ts +40 -0
- package/template/src/utils/useSetName.ts +18 -0
- package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
- package/template/src/utils/useSidePanel.tsx +41 -0
- package/template/src/utils/useString.ts +61 -0
- package/template/src/utils/useUnreadMessageCount.ts +50 -0
- package/template/src/utils/useUserList.ts +26 -0
- package/template/tsconfig.json +4 -4
- package/template/tsconfig_fpeApi.json +103 -0
- package/template/tsconfig_rsdk_index.json +105 -0
- package/template/tsconfig_wsdk_index.json +104 -0
- package/template/webpack.commons.js +40 -16
- package/template/webpack.main.config.js +2 -1
- package/template/webpack.renderer.config.js +1 -1
- package/template/webpack.rsdk.config.js +33 -0
- package/template/webpack.ts.config.js +89 -0
- package/template/webpack.web.config.js +8 -1
- package/template/webpack.wsdk.config.js +34 -0
- package/template/agora-rn-uikit/.git/HEAD +0 -1
- package/template/agora-rn-uikit/.git/config +0 -16
- package/template/agora-rn-uikit/.git/description +0 -1
- package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
- package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
- package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
- package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
- package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
- package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
- package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
- package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
- package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
- package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
- package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
- package/template/agora-rn-uikit/.git/index +0 -0
- package/template/agora-rn-uikit/.git/info/exclude +0 -6
- package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
- package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
- package/template/agora-rn-uikit/.git/packed-refs +0 -24
- package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.gitignore +0 -63
- package/template/agora-rn-uikit/package-lock.json +0 -7612
- package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
- package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
- package/template/package-lock.json +0 -22923
- package/template/react-native-toast-message/.gitignore +0 -5
- package/template/react-native-toast-message/.npmignore +0 -5
- package/template/react-native-toast-message/package-lock.json +0 -10553
- package/template/src/.DS_Store +0 -0
- package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
- package/template/src/subComponents/.DS_Store +0 -0
- package/template/src/subComponents/ScreenshareButton.tsx +0 -257
- package/template/src/subComponents/SwitchCamera.tsx +0 -35
- package/template/src/utils/hasBrandLogo.tsx +0 -3
- package/template/src/utils/mobileWebTest.native.tsx +0 -5
- package/template/src/utils/shouldAuthenticate.tsx +0 -7
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import {FpeApiInterface} from './typeDefinition';
|
|
13
|
+
import ReactIs from 'react-is';
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param config FPE options to override the UI components and customize the application
|
|
17
|
+
* @returns config options
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
function isString(data: any) {
|
|
21
|
+
if (data && typeof data === 'string') {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isFunction(data: any) {
|
|
28
|
+
if (data && typeof data === 'function') {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function isObject(data: any) {
|
|
35
|
+
if (data && typeof data === 'object') {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function isComponent(data: any) {
|
|
42
|
+
if (data && ReactIs.isValidElementType(data)) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//These keys value are not react component. so doing indexOf and checking whether its function or not
|
|
49
|
+
const ignoreTheseKeys = ['customLayout', 'useUserContext'];
|
|
50
|
+
|
|
51
|
+
function validateComponents(components: any) {
|
|
52
|
+
for (const key in components) {
|
|
53
|
+
if (ignoreTheseKeys.indexOf(key) === -1) {
|
|
54
|
+
let comp = components[key];
|
|
55
|
+
if (comp) {
|
|
56
|
+
if (isComponent(comp) || isObject(comp)) {
|
|
57
|
+
if (isObject(comp)) {
|
|
58
|
+
validateComponents(comp);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
console.error(
|
|
62
|
+
`InstallFPE:Error ${key} should be a react component or object`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
let comp = components[key];
|
|
68
|
+
if (comp && !isFunction(comp)) {
|
|
69
|
+
console.error(`InstallFPE:Error ${key} should be an function`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function validateLifecycle(data: any) {
|
|
76
|
+
for (const key in data) {
|
|
77
|
+
const callback = data[key];
|
|
78
|
+
if (callback && !isFunction(callback)) {
|
|
79
|
+
console.error(
|
|
80
|
+
`InstallFPE:Error ${key} should be a function that return async function`,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function validateCustomRoutes(routes: any) {
|
|
87
|
+
if (routes && !Array.isArray(routes)) {
|
|
88
|
+
console.error(`InstallFPE:Error customRoutes should be an array`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function validateAppRoot(data: any) {
|
|
93
|
+
if (data && !isComponent(data)) {
|
|
94
|
+
console.error(`InstallFPE:Error appRoot should be a react component`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function validatei18n(data: any) {
|
|
99
|
+
if (data) {
|
|
100
|
+
if (!Array.isArray(data)) {
|
|
101
|
+
console.error(`InstallFPE:Error i18n should be an array`);
|
|
102
|
+
} else {
|
|
103
|
+
data.map((item) => {
|
|
104
|
+
const langData = item.data;
|
|
105
|
+
for (const key in langData) {
|
|
106
|
+
const value = langData[key];
|
|
107
|
+
if (value) {
|
|
108
|
+
if (!(isString(value) || isFunction(value))) {
|
|
109
|
+
console.error(
|
|
110
|
+
`InstallFPE:Error ${item.locale} ${key} should be a string or function`,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export const installFPE = (config: FpeApiInterface) => {
|
|
120
|
+
//validating the components
|
|
121
|
+
config?.components && validateComponents(config.components);
|
|
122
|
+
|
|
123
|
+
//validating the custom routes
|
|
124
|
+
//commented for v1 release
|
|
125
|
+
//config?.customRoutes && validateCustomRoutes(config.customRoutes);
|
|
126
|
+
|
|
127
|
+
//validating the app root
|
|
128
|
+
config?.appRoot && validateAppRoot(config.appRoot);
|
|
129
|
+
|
|
130
|
+
//validating the i18n
|
|
131
|
+
config?.i18n && validatei18n(config.i18n);
|
|
132
|
+
|
|
133
|
+
//validating the lifecycle
|
|
134
|
+
//commented for v1 release
|
|
135
|
+
//config?.lifecycle && validateLifecycle(config?.lifecycle);
|
|
136
|
+
|
|
137
|
+
return config;
|
|
138
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import React from 'react';
|
|
13
|
+
export type {ChatBubbleProps} from '../src/components/ChatContext';
|
|
14
|
+
import {ChatBubbleProps} from '../src/components/ChatContext';
|
|
15
|
+
import {
|
|
16
|
+
RenderInterface,
|
|
17
|
+
RenderStateInterface,
|
|
18
|
+
UidType,
|
|
19
|
+
} from '../agora-rn-uikit';
|
|
20
|
+
import {i18nInterface} from '../src/language/i18nTypes';
|
|
21
|
+
import {IconsInterface} from '../agora-rn-uikit/src/Controls/Icons';
|
|
22
|
+
export type {
|
|
23
|
+
ChatTextInputProps,
|
|
24
|
+
ChatSendButtonProps,
|
|
25
|
+
} from '../src/subComponents/ChatInput';
|
|
26
|
+
import {
|
|
27
|
+
ChatTextInputProps,
|
|
28
|
+
ChatSendButtonProps,
|
|
29
|
+
} from '../src/subComponents/ChatInput';
|
|
30
|
+
|
|
31
|
+
export const CUSTOM_ROUTES_PREFIX = '/r/';
|
|
32
|
+
|
|
33
|
+
interface BeforeAndAfterInterface {
|
|
34
|
+
// commented for v1 release
|
|
35
|
+
// before?: React.ComponentType;
|
|
36
|
+
// after?: React.ComponentType;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface PreCallInterface extends BeforeAndAfterInterface {
|
|
40
|
+
preview?: React.ComponentType;
|
|
41
|
+
audioMute?: React.ComponentType;
|
|
42
|
+
videoMute?: React.ComponentType;
|
|
43
|
+
meetingName?: React.ComponentType;
|
|
44
|
+
deviceSelect?: React.ComponentType;
|
|
45
|
+
joinButton?: React.ComponentType;
|
|
46
|
+
textBox?: React.ComponentType;
|
|
47
|
+
}
|
|
48
|
+
export interface ChatCmpInterface {
|
|
49
|
+
//commented for v1 release
|
|
50
|
+
//extends BeforeAndAfterInterface
|
|
51
|
+
chatBubble?: React.ComponentType<ChatBubbleProps>;
|
|
52
|
+
//commented for v1 release
|
|
53
|
+
//chatInput?: React.ComponentType<ChatTextInputProps>;
|
|
54
|
+
//chatSentButton?: React.ComponentType<ChatSendButtonProps>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface renderComponentInterface {
|
|
58
|
+
user: RenderInterface;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface renderComponentObjectInterface {
|
|
62
|
+
[key: string]: React.ComponentType<renderComponentInterface>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type layoutComponent = React.ComponentType<{
|
|
66
|
+
renderData: RenderStateInterface['renderPosition'];
|
|
67
|
+
}>;
|
|
68
|
+
|
|
69
|
+
export interface layoutObjectBase {
|
|
70
|
+
name: string;
|
|
71
|
+
label: string;
|
|
72
|
+
component: layoutComponent;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface layoutObjectWithIcon extends layoutObjectBase {
|
|
76
|
+
icon: string;
|
|
77
|
+
iconName?: never;
|
|
78
|
+
}
|
|
79
|
+
export interface layoutObjectWithIconName extends layoutObjectBase {
|
|
80
|
+
icon?: never;
|
|
81
|
+
iconName: keyof IconsInterface;
|
|
82
|
+
}
|
|
83
|
+
export type layoutObjectType = layoutObjectWithIcon | layoutObjectWithIconName;
|
|
84
|
+
|
|
85
|
+
export interface VideoCallInterface extends BeforeAndAfterInterface {
|
|
86
|
+
// commented for v1 release
|
|
87
|
+
//topBar?: React.ComponentType;
|
|
88
|
+
//settingsPanel?: React.ComponentType;
|
|
89
|
+
participantsPanel?: React.ComponentType;
|
|
90
|
+
bottomBar?: React.ComponentType;
|
|
91
|
+
chat?: ChatCmpInterface;
|
|
92
|
+
customContent?: renderComponentObjectInterface;
|
|
93
|
+
customLayout?: (layouts: layoutObjectType[]) => layoutObjectType[];
|
|
94
|
+
useUserContext?: () => void;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type ComponentsInterface = {
|
|
98
|
+
// commented for v1 release
|
|
99
|
+
//precall?: PreCallInterface | React.ComponentType;
|
|
100
|
+
//create?: React.ComponentType;
|
|
101
|
+
//share?: React.ComponentType;
|
|
102
|
+
//join?: React.ComponentType;
|
|
103
|
+
videoCall?: VideoCallInterface | React.ComponentType;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export interface CustomRoutesInterface {
|
|
107
|
+
path: string;
|
|
108
|
+
component: React.ComponentType;
|
|
109
|
+
exact?: boolean;
|
|
110
|
+
componentProps?: object;
|
|
111
|
+
isPrivateRoute?: boolean;
|
|
112
|
+
routeProps?: object;
|
|
113
|
+
failureRedirectTo?: string;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export type CustomHookType = () => () => Promise<void>;
|
|
117
|
+
|
|
118
|
+
export interface FpeApiInterface {
|
|
119
|
+
/**
|
|
120
|
+
* components used to replace whole screen or subcomponents
|
|
121
|
+
*/
|
|
122
|
+
components?: ComponentsInterface;
|
|
123
|
+
/**
|
|
124
|
+
* custom routes used to add new page/routes
|
|
125
|
+
*/
|
|
126
|
+
// commented for v1 release
|
|
127
|
+
//customRoutes?: CustomRoutesInterface[];
|
|
128
|
+
/**
|
|
129
|
+
* Custom context/api provider wrapped in root level
|
|
130
|
+
*/
|
|
131
|
+
appRoot?: React.ComponentType;
|
|
132
|
+
/**
|
|
133
|
+
* Internationlization
|
|
134
|
+
*/
|
|
135
|
+
i18n?: i18nInterface[];
|
|
136
|
+
/**
|
|
137
|
+
* Life cycle events
|
|
138
|
+
*/
|
|
139
|
+
// commented for v1 release
|
|
140
|
+
// lifecycle?: {
|
|
141
|
+
// useBeforeJoin?: CustomHookType;
|
|
142
|
+
// useBeforeCreate?: CustomHookType;
|
|
143
|
+
// };
|
|
144
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import fpeConfig from 'test-fpe';
|
|
14
|
+
import {FpeApiInterface} from './typeDefinition';
|
|
15
|
+
import {createHook} from 'fpe-implementation';
|
|
16
|
+
|
|
17
|
+
const FpeContext: React.Context<FpeApiInterface> =
|
|
18
|
+
React.createContext(fpeConfig);
|
|
19
|
+
|
|
20
|
+
export interface FpeProviderInterface {
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
value: FpeApiInterface;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const FpeProvider = (props: FpeProviderInterface) => {
|
|
26
|
+
return (
|
|
27
|
+
<FpeContext.Provider value={props.value}>
|
|
28
|
+
{props.children}
|
|
29
|
+
</FpeContext.Provider>
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const useFpe = createHook(FpeContext);
|
|
34
|
+
|
|
35
|
+
export {useFpe, FpeProvider};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
// commented for v1 release
|
|
13
|
+
//export {default as useIsScreenShare} from '../src/utils/isScreenShareUser';
|
|
14
|
+
export {default as useIsHost} from '../src/utils/isHostUser';
|
|
15
|
+
export {default as useIsAttendee} from '../src/utils/IsAttendeeUser';
|
|
16
|
+
export {default as useIsPSTN} from '../src/utils/isPSTNUser';
|
|
17
|
+
export {default as useUserList} from '../src/utils/useUserList';
|
|
18
|
+
// commented for v1 release
|
|
19
|
+
//export {default as useGroupMessages} from '../src/utils/useGroupMessages';
|
|
20
|
+
//export {default as usePrivateMessages} from '../src/utils/usePrivateMessages';
|
|
21
|
+
export {default as useIsAudioEnabled} from '../src/utils/isAudioEnabled';
|
|
22
|
+
export {default as useIsVideoEnabled} from '../src/utils/isVideoEnabled';
|
|
23
|
+
export {default as useSetName} from '../src/utils/useSetName';
|
|
24
|
+
export {default as useGetName} from '../src/utils/useGetName';
|
|
25
|
+
export {useSidePanel} from '../src/utils/useSidePanel';
|
|
26
|
+
// commented for v1 release
|
|
27
|
+
// export {
|
|
28
|
+
// default as useUnreadMessageCount,
|
|
29
|
+
// UNREAD_MESSAGE_COUNT_TYPE,
|
|
30
|
+
// } from '../src/utils/useUnreadMessageCount';
|
|
31
|
+
// export {
|
|
32
|
+
// default as useSetUnreadMessageCount,
|
|
33
|
+
// SET_UNREAD_MESSAGE_COUNT_TYPE,
|
|
34
|
+
// } from '../src/utils/useSetUnreadMessageCount';
|
|
35
|
+
export {default as useNavigateTo} from '../src/utils/useNavigateTo';
|
|
36
|
+
export {default as useNavParams} from '../src/utils/useNavParams';
|
|
37
|
+
export {default as useCreateMeeting} from '../src/utils/useCreateMeeting';
|
|
38
|
+
export {default as useJoinMeeting} from '../src/utils/useJoinMeeting';
|
|
39
|
+
// commented for v1 release
|
|
40
|
+
// export {
|
|
41
|
+
// default as useSendMessage,
|
|
42
|
+
// MESSAGE_TYPE,
|
|
43
|
+
// } from '../src/utils/useSendMessage';
|
|
44
|
+
// export {controlMessageEnum} from '../src/components/ChatContext';
|
|
45
|
+
// export {
|
|
46
|
+
// default as useSendControlMessage,
|
|
47
|
+
// CONTROL_MESSAGE_TYPE,
|
|
48
|
+
// } from '../src/utils/useSendControlMessage';
|
|
49
|
+
export {
|
|
50
|
+
MUTE_LOCAL_TYPE,
|
|
51
|
+
default as useMuteToggleLocal,
|
|
52
|
+
} from '../src/utils/useMuteToggleLocal';
|
|
53
|
+
export {default as useRemoteEndcall} from '../src/utils/useRemoteEndCall';
|
|
54
|
+
export {
|
|
55
|
+
default as useRemoteMute,
|
|
56
|
+
MUTE_REMOTE_TYPE,
|
|
57
|
+
} from '../src/utils/useRemoteMute';
|
|
58
|
+
export {ToggleState} from '../agora-rn-uikit/src/Contexts/PropsContext';
|
|
59
|
+
|
|
60
|
+
//export common function
|
|
61
|
+
export * from '../src/utils/common';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import React, { useContext } from 'react';
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* @param context - any context data which we want to extract the data.
|
|
16
|
+
* @returns useContextWithSelector in which we can pass selector function to extract data from the context that we passed.
|
|
17
|
+
*/
|
|
18
|
+
function createHook<T>(context: React.Context<T>) {
|
|
19
|
+
|
|
20
|
+
function useContextWithSelector<U>(contextSelector: (data: T) => U): U;
|
|
21
|
+
function useContextWithSelector(): T;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param contextSelector is used to pass callback function used to select data from the context data
|
|
25
|
+
* @returns the data selected from the context
|
|
26
|
+
*/
|
|
27
|
+
function useContextWithSelector<U>(contextSelector?: (data: T) => U): U | T {
|
|
28
|
+
const data = useContext(context);
|
|
29
|
+
return contextSelector ? contextSelector(data) : data
|
|
30
|
+
}
|
|
31
|
+
return useContextWithSelector;
|
|
32
|
+
}
|
|
33
|
+
export default createHook;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import { installFPE } from "fpe-api/install";
|
|
13
|
+
/**
|
|
14
|
+
* Dummy FPE used to load when project doesn't have the FPE.
|
|
15
|
+
*/
|
|
16
|
+
const data = installFPE({});
|
|
17
|
+
export default data;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as createHook } from './createHook';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
1. test-fpe name should be changed
|
|
2
|
+
- template/_gitignore
|
|
3
|
+
- babel.config.js
|
|
4
|
+
- webpack.config.js
|
|
5
|
+
- fpe.config.js
|
|
6
|
+
- fpe-api index.ts
|
|
7
|
+
- fpe-api useFPE
|
|
8
|
+
2. What if user called custom context without wrapping provider
|
|
9
|
+
- useContext will return the default vaule. so we can't identify whether is wrapped with the provider or not.
|
|
10
|
+
3. CustomUserContext
|
|
11
|
+
4. Add sibling into view without overriding
|
|
12
|
+
5. Translation labels
|
|
13
|
+
- some of keys
|
|
14
|
+
6.Layout dropdown implementation
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
getFpePath - will return test-fpe if exists otherwise it will return the dummy fpe path
|
|
15
|
+
*/
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const FpePathTs = './test-fpe/index.ts';
|
|
18
|
+
const FpePathTsx = './test-fpe/index.tsx';
|
|
19
|
+
const FpeDummyPath = './fpe-implementation/dummyFpe.ts';
|
|
20
|
+
const getFpePath = () => {
|
|
21
|
+
if (fs.existsSync(FpePathTs)) {
|
|
22
|
+
return FpePathTs;
|
|
23
|
+
}
|
|
24
|
+
if (fs.existsSync(FpePathTsx)) {
|
|
25
|
+
return FpePathTsx;
|
|
26
|
+
}
|
|
27
|
+
return FpeDummyPath;
|
|
28
|
+
};
|
|
29
|
+
module.exports = getFpePath;
|
package/template/global.d.ts
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @format
|
|
14
|
+
*/
|
|
15
|
+
import SDKAppWrapper,{AppBuilderSdkApi,AppBuilderSdkApiInterface} from './src/SDKAppWrapper';
|
|
16
|
+
import React from 'react';
|
|
17
|
+
export * from 'fpe-api';
|
|
18
|
+
|
|
19
|
+
interface AppBuilderReactSdkInterface extends AppBuilderSdkApiInterface {
|
|
20
|
+
View: React.FC;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const AppBuilderReactSdkApi: AppBuilderReactSdkInterface = {
|
|
24
|
+
...AppBuilderSdkApi,
|
|
25
|
+
View: SDKAppWrapper,
|
|
26
|
+
}
|
|
27
|
+
export default AppBuilderReactSdkApi;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {AppRegistry} from 'react-native';
|
|
2
|
+
import SDKAppWrapper,{AppBuilderSdkApi,AppBuilderSdkApiInterface} from './src/SDKAppWrapper';
|
|
3
|
+
export * from 'fpe-api';
|
|
4
|
+
|
|
5
|
+
interface AppBuilderWebSdkInterface extends AppBuilderSdkApiInterface {
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const AppBuilderWebSdkApi: AppBuilderWebSdkInterface = AppBuilderSdkApi;
|
|
9
|
+
|
|
10
|
+
// init code
|
|
11
|
+
class AppBuilder extends HTMLElement {
|
|
12
|
+
connectedCallback() {
|
|
13
|
+
this.style.height = '100%';
|
|
14
|
+
this.style.width = '100%';
|
|
15
|
+
this.style.display = 'flex';
|
|
16
|
+
this.style.flex = '1';
|
|
17
|
+
AppRegistry.registerComponent('App', () => SDKAppWrapper);
|
|
18
|
+
AppRegistry.runApplication('App', {
|
|
19
|
+
// initialProps: {passphrase: this.getAttribute('passphrase')},
|
|
20
|
+
rootTag: this,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
customElements.define('app-builder', AppBuilder);
|
|
26
|
+
|
|
27
|
+
export default AppBuilderWebSdkApi;
|
package/template/package.json
CHANGED
|
@@ -6,15 +6,20 @@
|
|
|
6
6
|
"scripts": {
|
|
7
7
|
"android": "react-native run-android",
|
|
8
8
|
"android:build": "npm run android:build:unix",
|
|
9
|
-
"android:build:unix": "
|
|
10
|
-
"android:build:windows": "
|
|
9
|
+
"android:build:unix": "cross-env TARGET=android gulp androidUnix",
|
|
10
|
+
"android:build:windows": "cross-env TARGET=android gulp androidWin",
|
|
11
11
|
"ios": "cd ios && ls | grep .xcworkspace | xargs open",
|
|
12
12
|
"ios:build": "cd ios && ls | grep .xcworkspace | xargs open",
|
|
13
13
|
"start": "react-native start",
|
|
14
14
|
"web": "cross-env TARGET=web NODE_ENV=development webpack-dev-server --hot --open --config webpack.web.config.js",
|
|
15
|
+
"ts": "cross-env TARGET=web NODE_ENV=production webpack --config webpack.ts.config.js",
|
|
15
16
|
"web:build": "cross-env TARGET=web NODE_ENV=production webpack --config webpack.web.config.js",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
17
|
+
"web-sdk": "cross-env TARGET=wsdk NODE_ENV=development gulp webSdk",
|
|
18
|
+
"web-sdk:build": "cross-env TARGET=wsdk NODE_ENV=production gulp webSdk",
|
|
19
|
+
"react-sdk": "cross-env TARGET=rsdk NODE_ENV=development gulp reactSdk",
|
|
20
|
+
"react-sdk:build": "cross-env TARGET=rsdk NODE_ENV=production gulp reactSdk",
|
|
21
|
+
"electron:start": "cross-env NODE_ENV=development gulp electron_development",
|
|
22
|
+
"electron:build": "cross-env NODE_ENV=production gulp electron_build",
|
|
18
23
|
"windows": "cross-env TARGET=windows npm run electron:start",
|
|
19
24
|
"windows:build": "cross-env TARGET=windows npm run electron:build",
|
|
20
25
|
"mac": "cross-env TARGET=mac npm run electron:start",
|
|
@@ -26,7 +31,9 @@
|
|
|
26
31
|
"icons:android": "react-native set-icon --path ./build/icon.png",
|
|
27
32
|
"icons:ios": "react-native set-icon --path ./build/icon.png",
|
|
28
33
|
"package:mac": "npm run mac:build && electron-builder --publish=always",
|
|
29
|
-
"release": "electron-builder --mac --windows --linux --publish always --config ./electron-builder.js "
|
|
34
|
+
"release": "electron-builder --mac --windows --linux --publish always --config ./electron-builder.js ",
|
|
35
|
+
"make-rsdk-ts-defs": "cross-env TARGET=rsdk NODE_ENV=production gulp makeRsdkTsDefs",
|
|
36
|
+
"make-wsdk-ts-defs": "cross-env TARGET=wsdk NODE_ENV=production gulp makeWsdkTsDefs"
|
|
30
37
|
},
|
|
31
38
|
"publish": [
|
|
32
39
|
{
|
|
@@ -58,6 +65,7 @@
|
|
|
58
65
|
"nosleep.js": "0.12.0",
|
|
59
66
|
"react": "16.13.1",
|
|
60
67
|
"react-dom": "16.13.1",
|
|
68
|
+
"react-is": "18.0.0",
|
|
61
69
|
"react-native": "0.63.3",
|
|
62
70
|
"react-native-agora": "3.4.2",
|
|
63
71
|
"react-native-hyperlink": "0.0.19",
|
|
@@ -78,20 +86,23 @@
|
|
|
78
86
|
"@babel/preset-typescript": "7.13.0",
|
|
79
87
|
"@babel/runtime": "7.14.0",
|
|
80
88
|
"@bam.tech/react-native-make": "3.0.3",
|
|
81
|
-
"@pmmmwh/react-refresh-webpack-plugin": "0.
|
|
89
|
+
"@pmmmwh/react-refresh-webpack-plugin": "0.5.5",
|
|
82
90
|
"@react-native-community/eslint-config": "1.1.0",
|
|
83
91
|
"@types/jest": "25.2.3",
|
|
92
|
+
"@types/react-is": "17.0.3",
|
|
84
93
|
"@types/react-native": "0.67.6",
|
|
85
94
|
"@types/react-native-keep-awake": "2.0.2",
|
|
86
95
|
"@types/react-router-dom": "5.1.7",
|
|
87
96
|
"@types/react-router-native": "5.1.0",
|
|
88
97
|
"@types/react-test-renderer": "16.9.5",
|
|
89
98
|
"@types/webpack-dev-server": "3.11.4",
|
|
99
|
+
"@types/webpack-env": "^1.16.4",
|
|
90
100
|
"@typescript-eslint/eslint-plugin": "2.34.0",
|
|
91
101
|
"@typescript-eslint/parser": "2.34.0",
|
|
92
|
-
"babel-jest": "
|
|
93
|
-
"babel-loader": "8.2.
|
|
94
|
-
"babel-plugin-
|
|
102
|
+
"babel-jest": "27.5.1",
|
|
103
|
+
"babel-loader": "8.2.4",
|
|
104
|
+
"babel-plugin-module-resolver": "4.1.0",
|
|
105
|
+
"babel-plugin-transform-define": "2.0.1",
|
|
95
106
|
"cross-env": "7.0.3",
|
|
96
107
|
"del": "5.1.0",
|
|
97
108
|
"electron": "16.0.1",
|
|
@@ -100,18 +111,24 @@
|
|
|
100
111
|
"eslint": "6.8.0",
|
|
101
112
|
"file-loader": "6.2.0",
|
|
102
113
|
"gulp": "4.0.2",
|
|
114
|
+
"gulp-concat": "^2.6.1",
|
|
115
|
+
"gulp-header": "^2.0.9",
|
|
116
|
+
"gulp-replace": "^1.1.3",
|
|
103
117
|
"html-webpack-plugin": "4.5.2",
|
|
118
|
+
"ignore-loader": "^0.1.2",
|
|
104
119
|
"jest": "25.5.4",
|
|
105
120
|
"metro-react-native-babel-preset": "0.59.0",
|
|
106
121
|
"prettier": "2.3.1",
|
|
107
122
|
"react-devtools-electron": "4.7.0",
|
|
108
|
-
"react-refresh": "0.
|
|
123
|
+
"react-refresh": "0.12.0",
|
|
109
124
|
"react-test-renderer": "16.13.1",
|
|
125
|
+
"ts-loader": "^8.3.0",
|
|
110
126
|
"typescript": "3.9.9",
|
|
111
|
-
"webpack": "
|
|
112
|
-
"webpack-cli": "
|
|
113
|
-
"webpack-dev-server": "
|
|
127
|
+
"webpack": "5.72.0",
|
|
128
|
+
"webpack-cli": "^4.10.0",
|
|
129
|
+
"webpack-dev-server": "4.8.1",
|
|
114
130
|
"webpack-merge": "5.8.0",
|
|
131
|
+
"webpack-node-externals": "3.0.0",
|
|
115
132
|
"yargs": "15.4.1"
|
|
116
133
|
},
|
|
117
134
|
"jest": {
|