@tiledev/sdk-apptile-live-selling 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attribution.d.ts +2 -16
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.js +4 -10
- package/dist/attribution.js.map +1 -1
- package/dist/auctions.d.ts.map +1 -1
- package/dist/auctions.js +11 -42
- package/dist/auctions.js.map +1 -1
- package/dist/cartAttributes.d.ts +0 -10
- package/dist/cartAttributes.d.ts.map +1 -1
- package/dist/cartAttributes.js +1 -20
- package/dist/cartAttributes.js.map +1 -1
- package/dist/client.d.ts +2 -51
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -123
- package/dist/client.js.map +1 -1
- package/dist/clips.d.ts +1 -12
- package/dist/clips.d.ts.map +1 -1
- package/dist/clips.js +6 -114
- package/dist/clips.js.map +1 -1
- package/dist/commentLinks.d.ts +0 -29
- package/dist/commentLinks.d.ts.map +1 -1
- package/dist/commentLinks.js.map +1 -1
- package/dist/engine.native.d.ts.map +1 -1
- package/dist/engine.native.js +845 -17
- package/dist/engine.native.js.map +1 -1
- package/dist/index.d.ts +4 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -240
- package/dist/index.js.map +1 -1
- package/dist/polls.d.ts.map +1 -1
- package/dist/polls.js +0 -3
- package/dist/polls.js.map +1 -1
- package/dist/react/LiveSellingProvider.d.ts +1 -54
- package/dist/react/LiveSellingProvider.d.ts.map +1 -1
- package/dist/react/LiveSellingProvider.js +3 -60
- package/dist/react/LiveSellingProvider.js.map +1 -1
- package/dist/react/LiveVideoTarget.d.ts.map +1 -1
- package/dist/react/LiveVideoTarget.js +3 -41
- package/dist/react/LiveVideoTarget.js.map +1 -1
- package/dist/react/index.d.ts +3 -30
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -79
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.web.d.ts +32 -36
- package/dist/react/index.web.d.ts.map +1 -1
- package/dist/react/index.web.js +122 -102
- package/dist/react/index.web.js.map +1 -1
- package/dist/react/useAuctionBidGate.d.ts +6 -62
- package/dist/react/useAuctionBidGate.d.ts.map +1 -1
- package/dist/react/useAuctionBidGate.js +27 -228
- package/dist/react/useAuctionBidGate.js.map +1 -1
- package/dist/react/useAuctionWins.d.ts +4 -14
- package/dist/react/useAuctionWins.d.ts.map +1 -1
- package/dist/react/useAuctionWins.js +5 -16
- package/dist/react/useAuctionWins.js.map +1 -1
- package/dist/react/useClips.d.ts +1 -7
- package/dist/react/useClips.d.ts.map +1 -1
- package/dist/react/useClips.js +7 -20
- package/dist/react/useClips.js.map +1 -1
- package/dist/react/useLiveSession.d.ts +3 -15
- package/dist/react/useLiveSession.d.ts.map +1 -1
- package/dist/react/useLiveSession.js +199 -612
- package/dist/react/useLiveSession.js.map +1 -1
- package/dist/react/useLiveStreams.d.ts.map +1 -1
- package/dist/react/useLiveStreams.js +2 -6
- package/dist/react/useLiveStreams.js.map +1 -1
- package/dist/react/useOngoingLive.d.ts +0 -1
- package/dist/react/useOngoingLive.d.ts.map +1 -1
- package/dist/react/useOngoingLive.js +1 -7
- package/dist/react/useOngoingLive.js.map +1 -1
- package/dist/react/useReplays.d.ts +0 -12
- package/dist/react/useReplays.d.ts.map +1 -1
- package/dist/react/useReplays.js +24 -56
- package/dist/react/useReplays.js.map +1 -1
- package/dist/react/useStreamInfo.d.ts +2 -13
- package/dist/react/useStreamInfo.d.ts.map +1 -1
- package/dist/react/useStreamInfo.js +8 -36
- package/dist/react/useStreamInfo.js.map +1 -1
- package/dist/replays.d.ts +0 -14
- package/dist/replays.d.ts.map +1 -1
- package/dist/replays.js +22 -68
- package/dist/replays.js.map +1 -1
- package/dist/session.d.ts +6 -39
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +22 -209
- package/dist/session.js.map +1 -1
- package/dist/sessionTypes.d.ts +18 -217
- package/dist/sessionTypes.d.ts.map +1 -1
- package/dist/sessionTypes.js +1 -2
- package/dist/sessionTypes.js.map +1 -1
- package/dist/streams.d.ts +1 -27
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +21 -84
- package/dist/streams.js.map +1 -1
- package/dist/types.d.ts +10 -288
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/dist/wire.d.ts +0 -31
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +0 -25
- package/dist/wire.js.map +1 -1
- package/dist/zego.d.ts +1 -3
- package/dist/zego.d.ts.map +1 -1
- package/dist/zego.js +1 -1
- package/package.json +1 -1
- package/dist/auctionComments.d.ts +0 -25
- package/dist/auctionComments.d.ts.map +0 -1
- package/dist/auctionComments.js +0 -28
- package/dist/auctionComments.js.map +0 -1
- package/dist/auctionRules.d.ts +0 -77
- package/dist/auctionRules.d.ts.map +0 -1
- package/dist/auctionRules.js +0 -107
- package/dist/auctionRules.js.map +0 -1
- package/dist/cartExtension.d.ts +0 -39
- package/dist/cartExtension.d.ts.map +0 -1
- package/dist/cartExtension.js +0 -51
- package/dist/cartExtension.js.map +0 -1
- package/dist/checkoutRefused.d.ts +0 -9
- package/dist/checkoutRefused.d.ts.map +0 -1
- package/dist/checkoutRefused.js +0 -16
- package/dist/checkoutRefused.js.map +0 -1
- package/dist/clipsPage.d.ts +0 -29
- package/dist/clipsPage.d.ts.map +0 -1
- package/dist/clipsPage.js +0 -49
- package/dist/clipsPage.js.map +0 -1
- package/dist/commentHistory.d.ts +0 -70
- package/dist/commentHistory.d.ts.map +0 -1
- package/dist/commentHistory.js +0 -133
- package/dist/commentHistory.js.map +0 -1
- package/dist/commentLinkCards.d.ts +0 -11
- package/dist/commentLinkCards.d.ts.map +0 -1
- package/dist/commentLinkCards.js +0 -70
- package/dist/commentLinkCards.js.map +0 -1
- package/dist/giveawayPrize.d.ts +0 -13
- package/dist/giveawayPrize.d.ts.map +0 -1
- package/dist/giveawayPrize.js +0 -18
- package/dist/giveawayPrize.js.map +0 -1
- package/dist/giveawayPrizeLines.d.ts +0 -120
- package/dist/giveawayPrizeLines.d.ts.map +0 -1
- package/dist/giveawayPrizeLines.js +0 -97
- package/dist/giveawayPrizeLines.js.map +0 -1
- package/dist/giveawayPrizes.d.ts +0 -20
- package/dist/giveawayPrizes.d.ts.map +0 -1
- package/dist/giveawayPrizes.js +0 -50
- package/dist/giveawayPrizes.js.map +0 -1
- package/dist/giveawayRoster.d.ts +0 -53
- package/dist/giveawayRoster.d.ts.map +0 -1
- package/dist/giveawayRoster.js +0 -93
- package/dist/giveawayRoster.js.map +0 -1
- package/dist/heldComments.d.ts +0 -40
- package/dist/heldComments.d.ts.map +0 -1
- package/dist/heldComments.js +0 -75
- package/dist/heldComments.js.map +0 -1
- package/dist/hiddenShows.d.ts +0 -44
- package/dist/hiddenShows.d.ts.map +0 -1
- package/dist/hiddenShows.js +0 -53
- package/dist/hiddenShows.js.map +0 -1
- package/dist/linkLots.d.ts +0 -64
- package/dist/linkLots.d.ts.map +0 -1
- package/dist/linkLots.js +0 -84
- package/dist/linkLots.js.map +0 -1
- package/dist/liveHaptics.d.ts +0 -7
- package/dist/liveHaptics.d.ts.map +0 -1
- package/dist/liveHaptics.js +0 -11
- package/dist/liveHaptics.js.map +0 -1
- package/dist/liveHaptics.native.d.ts +0 -7
- package/dist/liveHaptics.native.d.ts.map +0 -1
- package/dist/liveHaptics.native.js +0 -12
- package/dist/liveHaptics.native.js.map +0 -1
- package/dist/livePages.d.ts +0 -176
- package/dist/livePages.d.ts.map +0 -1
- package/dist/livePages.js +0 -216
- package/dist/livePages.js.map +0 -1
- package/dist/liveRoom.d.ts +0 -21
- package/dist/liveRoom.d.ts.map +0 -1
- package/dist/liveRoom.js +0 -28
- package/dist/liveRoom.js.map +0 -1
- package/dist/liveShow.d.ts +0 -65
- package/dist/liveShow.d.ts.map +0 -1
- package/dist/liveShow.js +0 -65
- package/dist/liveShow.js.map +0 -1
- package/dist/missedPolls.d.ts +0 -27
- package/dist/missedPolls.d.ts.map +0 -1
- package/dist/missedPolls.js +0 -16
- package/dist/missedPolls.js.map +0 -1
- package/dist/pageOptions.d.ts +0 -149
- package/dist/pageOptions.d.ts.map +0 -1
- package/dist/pageOptions.js +0 -123
- package/dist/pageOptions.js.map +0 -1
- package/dist/pageTypes.d.ts +0 -185
- package/dist/pageTypes.d.ts.map +0 -1
- package/dist/pageTypes.js +0 -3
- package/dist/pageTypes.js.map +0 -1
- package/dist/phoneTaps.d.ts +0 -25
- package/dist/phoneTaps.d.ts.map +0 -1
- package/dist/phoneTaps.js +0 -47
- package/dist/phoneTaps.js.map +0 -1
- package/dist/pipWindow.d.ts +0 -85
- package/dist/pipWindow.d.ts.map +0 -1
- package/dist/pipWindow.js +0 -88
- package/dist/pipWindow.js.map +0 -1
- package/dist/react/clocks.d.ts +0 -29
- package/dist/react/clocks.d.ts.map +0 -1
- package/dist/react/clocks.js +0 -124
- package/dist/react/clocks.js.map +0 -1
- package/dist/react/navigation.d.ts +0 -13
- package/dist/react/navigation.d.ts.map +0 -1
- package/dist/react/navigation.js +0 -7
- package/dist/react/navigation.js.map +0 -1
- package/dist/react/platformSession.d.ts +0 -16
- package/dist/react/platformSession.d.ts.map +0 -1
- package/dist/react/platformSession.js +0 -28
- package/dist/react/platformSession.js.map +0 -1
- package/dist/react/platformSession.web.d.ts +0 -35
- package/dist/react/platformSession.web.d.ts.map +0 -1
- package/dist/react/platformSession.web.js +0 -148
- package/dist/react/platformSession.web.js.map +0 -1
- package/dist/react/replayPlayer.d.ts +0 -83
- package/dist/react/replayPlayer.d.ts.map +0 -1
- package/dist/react/replayPlayer.js +0 -315
- package/dist/react/replayPlayer.js.map +0 -1
- package/dist/react/share.d.ts +0 -22
- package/dist/react/share.d.ts.map +0 -1
- package/dist/react/share.js +0 -45
- package/dist/react/share.js.map +0 -1
- package/dist/react/shopifyProviders.d.ts +0 -82
- package/dist/react/shopifyProviders.d.ts.map +0 -1
- package/dist/react/shopifyProviders.js +0 -113
- package/dist/react/shopifyProviders.js.map +0 -1
- package/dist/react/showPages.d.ts +0 -106
- package/dist/react/showPages.d.ts.map +0 -1
- package/dist/react/showPages.js +0 -166
- package/dist/react/showPages.js.map +0 -1
- package/dist/react/showPagesOnDevice.d.ts +0 -18
- package/dist/react/showPagesOnDevice.d.ts.map +0 -1
- package/dist/react/showPagesOnDevice.js +0 -31
- package/dist/react/showPagesOnDevice.js.map +0 -1
- package/dist/react/startSignIn.d.ts +0 -3
- package/dist/react/startSignIn.d.ts.map +0 -1
- package/dist/react/startSignIn.js +0 -19
- package/dist/react/startSignIn.js.map +0 -1
- package/dist/react/systemPictureInPicture.d.ts +0 -34
- package/dist/react/systemPictureInPicture.d.ts.map +0 -1
- package/dist/react/systemPictureInPicture.js +0 -93
- package/dist/react/systemPictureInPicture.js.map +0 -1
- package/dist/react/useAccountName.d.ts +0 -8
- package/dist/react/useAccountName.d.ts.map +0 -1
- package/dist/react/useAccountName.js +0 -49
- package/dist/react/useAccountName.js.map +0 -1
- package/dist/react/useClipsPage.d.ts +0 -47
- package/dist/react/useClipsPage.d.ts.map +0 -1
- package/dist/react/useClipsPage.js +0 -130
- package/dist/react/useClipsPage.js.map +0 -1
- package/dist/react/useCommentLinkCards.d.ts +0 -6
- package/dist/react/useCommentLinkCards.d.ts.map +0 -1
- package/dist/react/useCommentLinkCards.js +0 -67
- package/dist/react/useCommentLinkCards.js.map +0 -1
- package/dist/react/useFeaturedClip.d.ts +0 -15
- package/dist/react/useFeaturedClip.d.ts.map +0 -1
- package/dist/react/useFeaturedClip.js +0 -52
- package/dist/react/useFeaturedClip.js.map +0 -1
- package/dist/react/useGiveawayEntry.d.ts +0 -59
- package/dist/react/useGiveawayEntry.d.ts.map +0 -1
- package/dist/react/useGiveawayEntry.js +0 -170
- package/dist/react/useGiveawayEntry.js.map +0 -1
- package/dist/react/useGiveawayPrize.d.ts +0 -12
- package/dist/react/useGiveawayPrize.d.ts.map +0 -1
- package/dist/react/useGiveawayPrize.js +0 -53
- package/dist/react/useGiveawayPrize.js.map +0 -1
- package/dist/react/useGiveawayPrizes.d.ts +0 -4
- package/dist/react/useGiveawayPrizes.d.ts.map +0 -1
- package/dist/react/useGiveawayPrizes.js +0 -58
- package/dist/react/useGiveawayPrizes.js.map +0 -1
- package/dist/react/useHiddenShows.d.ts +0 -10
- package/dist/react/useHiddenShows.d.ts.map +0 -1
- package/dist/react/useHiddenShows.js +0 -30
- package/dist/react/useHiddenShows.js.map +0 -1
- package/dist/react/useKeepScreenAwake.d.ts +0 -2
- package/dist/react/useKeepScreenAwake.d.ts.map +0 -1
- package/dist/react/useKeepScreenAwake.js +0 -34
- package/dist/react/useKeepScreenAwake.js.map +0 -1
- package/dist/react/useLiveAuction.d.ts +0 -106
- package/dist/react/useLiveAuction.d.ts.map +0 -1
- package/dist/react/useLiveAuction.js +0 -255
- package/dist/react/useLiveAuction.js.map +0 -1
- package/dist/react/useLiveChat.d.ts +0 -110
- package/dist/react/useLiveChat.d.ts.map +0 -1
- package/dist/react/useLiveChat.js +0 -230
- package/dist/react/useLiveChat.js.map +0 -1
- package/dist/react/useLiveGiveawaysAndPolls.d.ts +0 -95
- package/dist/react/useLiveGiveawaysAndPolls.d.ts.map +0 -1
- package/dist/react/useLiveGiveawaysAndPolls.js +0 -225
- package/dist/react/useLiveGiveawaysAndPolls.js.map +0 -1
- package/dist/react/useLivePage.d.ts +0 -136
- package/dist/react/useLivePage.d.ts.map +0 -1
- package/dist/react/useLivePage.js +0 -319
- package/dist/react/useLivePage.js.map +0 -1
- package/dist/react/useLiveShop.d.ts +0 -97
- package/dist/react/useLiveShop.d.ts.map +0 -1
- package/dist/react/useLiveShop.js +0 -197
- package/dist/react/useLiveShop.js.map +0 -1
- package/dist/react/useLiveShow.d.ts +0 -3
- package/dist/react/useLiveShow.d.ts.map +0 -1
- package/dist/react/useLiveShow.js +0 -21
- package/dist/react/useLiveShow.js.map +0 -1
- package/dist/react/useMySilentAuctionBids.d.ts +0 -29
- package/dist/react/useMySilentAuctionBids.d.ts.map +0 -1
- package/dist/react/useMySilentAuctionBids.js +0 -157
- package/dist/react/useMySilentAuctionBids.js.map +0 -1
- package/dist/react/useReplayPage.d.ts +0 -155
- package/dist/react/useReplayPage.d.ts.map +0 -1
- package/dist/react/useReplayPage.js +0 -580
- package/dist/react/useReplayPage.js.map +0 -1
- package/dist/react/useSilentAuctionLot.d.ts +0 -44
- package/dist/react/useSilentAuctionLot.d.ts.map +0 -1
- package/dist/react/useSilentAuctionLot.js +0 -168
- package/dist/react/useSilentAuctionLot.js.map +0 -1
- package/dist/react/useSilentAuctionLots.d.ts +0 -41
- package/dist/react/useSilentAuctionLots.d.ts.map +0 -1
- package/dist/react/useSilentAuctionLots.js +0 -64
- package/dist/react/useSilentAuctionLots.js.map +0 -1
- package/dist/react/useSilentAuctionRounds.d.ts +0 -15
- package/dist/react/useSilentAuctionRounds.d.ts.map +0 -1
- package/dist/react/useSilentAuctionRounds.js +0 -44
- package/dist/react/useSilentAuctionRounds.js.map +0 -1
- package/dist/replayPages.d.ts +0 -31
- package/dist/replayPages.d.ts.map +0 -1
- package/dist/replayPages.js +0 -34
- package/dist/replayPages.js.map +0 -1
- package/dist/shopifyCommerce.d.ts +0 -204
- package/dist/shopifyCommerce.d.ts.map +0 -1
- package/dist/shopifyCommerce.js +0 -217
- package/dist/shopifyCommerce.js.map +0 -1
- package/dist/shopifyIdentity.d.ts +0 -61
- package/dist/shopifyIdentity.d.ts.map +0 -1
- package/dist/shopifyIdentity.js +0 -61
- package/dist/shopifyIdentity.js.map +0 -1
- package/dist/shopifyIds.d.ts +0 -9
- package/dist/shopifyIds.d.ts.map +0 -1
- package/dist/shopifyIds.js +0 -18
- package/dist/shopifyIds.js.map +0 -1
- package/dist/showCredit.d.ts +0 -89
- package/dist/showCredit.d.ts.map +0 -1
- package/dist/showCredit.js +0 -120
- package/dist/showCredit.js.map +0 -1
- package/dist/showLinks.d.ts +0 -24
- package/dist/showLinks.d.ts.map +0 -1
- package/dist/showLinks.js +0 -23
- package/dist/showLinks.js.map +0 -1
- package/dist/showLots.d.ts +0 -44
- package/dist/showLots.d.ts.map +0 -1
- package/dist/showLots.js +0 -70
- package/dist/showLots.js.map +0 -1
- package/dist/showNames.d.ts +0 -77
- package/dist/showNames.d.ts.map +0 -1
- package/dist/showNames.js +0 -143
- package/dist/showNames.js.map +0 -1
- package/dist/showPages.d.ts +0 -56
- package/dist/showPages.d.ts.map +0 -1
- package/dist/showPages.js +0 -48
- package/dist/showPages.js.map +0 -1
- package/dist/silentAuctionFeed.d.ts +0 -49
- package/dist/silentAuctionFeed.d.ts.map +0 -1
- package/dist/silentAuctionFeed.js +0 -242
- package/dist/silentAuctionFeed.js.map +0 -1
- package/dist/silentAuctionRules.d.ts +0 -253
- package/dist/silentAuctionRules.d.ts.map +0 -1
- package/dist/silentAuctionRules.js +0 -489
- package/dist/silentAuctionRules.js.map +0 -1
- package/dist/silentAuctions.d.ts +0 -65
- package/dist/silentAuctions.d.ts.map +0 -1
- package/dist/silentAuctions.js +0 -272
- package/dist/silentAuctions.js.map +0 -1
- package/dist/storeData.d.ts +0 -16
- package/dist/storeData.d.ts.map +0 -1
- package/dist/storeData.js +0 -19
- package/dist/storeData.js.map +0 -1
- package/dist/ui/BubbleFrame.d.ts +0 -38
- package/dist/ui/BubbleFrame.d.ts.map +0 -1
- package/dist/ui/BubbleFrame.js +0 -181
- package/dist/ui/BubbleFrame.js.map +0 -1
- package/dist/ui/LiveBubble.d.ts +0 -43
- package/dist/ui/LiveBubble.d.ts.map +0 -1
- package/dist/ui/LiveBubble.js +0 -116
- package/dist/ui/LiveBubble.js.map +0 -1
- package/dist/ui/ReplayBubble.d.ts +0 -23
- package/dist/ui/ReplayBubble.d.ts.map +0 -1
- package/dist/ui/ReplayBubble.js +0 -71
- package/dist/ui/ReplayBubble.js.map +0 -1
- package/dist/ui.d.ts +0 -27
- package/dist/ui.d.ts.map +0 -1
- package/dist/ui.js +0 -34
- package/dist/ui.js.map +0 -1
- package/dist/unreadRoomMessages.d.ts +0 -26
- package/dist/unreadRoomMessages.d.ts.map +0 -1
- package/dist/unreadRoomMessages.js +0 -62
- package/dist/unreadRoomMessages.js.map +0 -1
- package/dist/viewerRules.d.ts +0 -38
- package/dist/viewerRules.d.ts.map +0 -1
- package/dist/viewerRules.js +0 -46
- package/dist/viewerRules.js.map +0 -1
- package/dist/winsAttribution.d.ts +0 -22
- package/dist/winsAttribution.d.ts.map +0 -1
- package/dist/winsAttribution.js +0 -49
- package/dist/winsAttribution.js.map +0 -1
- package/dist/zegoEngine.d.ts +0 -173
- package/dist/zegoEngine.d.ts.map +0 -1
- package/dist/zegoEngine.js +0 -1069
- package/dist/zegoEngine.js.map +0 -1
|
@@ -1,580 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useReplayPage = useReplayPage;
|
|
4
|
-
/**
|
|
5
|
-
* The Replay screen's page model (0.14.0, moved from amore-v2's `src/core/hooks/useReplayPage.ts`: old
|
|
6
|
-
* Amore's Replay, rebuilt; 0.15.0 adds its link lots and a tap on the video that pauses and plays, from
|
|
7
|
-
* amore-v2's `eng928/integration`). The routes are the app's (`LiveSellingProvider`'s `routes`); the
|
|
8
|
-
* route's `feedId` and `streamId` params are read here, and `feedId` is set as the shopper swipes.
|
|
9
|
-
*/
|
|
10
|
-
const sdk_shopify_1 = require("@tiledev/sdk-shopify");
|
|
11
|
-
const react_1 = require("react");
|
|
12
|
-
const react_native_1 = require("react-native");
|
|
13
|
-
const client_1 = require("../client");
|
|
14
|
-
const viewerRules_1 = require("../viewerRules");
|
|
15
|
-
const linkLots_1 = require("../linkLots");
|
|
16
|
-
const liveSelling_1 = require("../liveSelling");
|
|
17
|
-
const livePages_1 = require("../livePages");
|
|
18
|
-
const pageOptions_1 = require("../pageOptions");
|
|
19
|
-
const showCredit_1 = require("../showCredit");
|
|
20
|
-
const LiveSellingProvider_1 = require("./LiveSellingProvider");
|
|
21
|
-
const platformSession_1 = require("./platformSession");
|
|
22
|
-
const replayPlayer_1 = require("./replayPlayer");
|
|
23
|
-
const systemPictureInPicture_1 = require("./systemPictureInPicture");
|
|
24
|
-
const useLiveShop_1 = require("./useLiveShop");
|
|
25
|
-
const useReplays_1 = require("./useReplays");
|
|
26
|
-
const navigation_1 = require("./navigation");
|
|
27
|
-
/** Recordings per read: the gateway's own page size, as the Live tab. */
|
|
28
|
-
const PAGE_SIZE = 20;
|
|
29
|
-
/** How often the playhead is read. Product windows are seconds wide, so this is plenty. */
|
|
30
|
-
const POSITION_CHECK_MS = 500;
|
|
31
|
-
/** A seek has landed once the player reports within this of it (it plays on while it seeks). */
|
|
32
|
-
const SEEK_LANDED_WITHIN_MS = 600;
|
|
33
|
-
/** Checks a seek is held for before the player is believed anyway (about 3 s): one that never lands mustn't freeze the bar. */
|
|
34
|
-
const SEEK_GIVE_UP_CHECKS = 6;
|
|
35
|
-
function useReplayPage({ tapVideo = 'playPause', controlsShowMs } = {}) {
|
|
36
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
37
|
-
const nav = (0, navigation_1.useNavigation)();
|
|
38
|
-
const route = (0, navigation_1.useRoute)();
|
|
39
|
-
// A clip plays on its own, at its recording's id (0.16.0).
|
|
40
|
-
const routeClip = (_b = (_a = route.params) === null || _a === void 0 ? void 0 : _a.clip) !== null && _b !== void 0 ? _b : null;
|
|
41
|
-
const clipShow = (0, react_1.useMemo)(() => (routeClip ? (0, livePages_1.replayOfClip)(routeClip) : null), [routeClip]);
|
|
42
|
-
const clipWindow = (0, react_1.useMemo)(() => (routeClip && clipShow ? (0, livePages_1.replayClipWindow)(routeClip) : null), [routeClip, clipShow]);
|
|
43
|
-
const offsetMs = (_c = clipWindow === null || clipWindow === void 0 ? void 0 : clipWindow.startMs) !== null && _c !== void 0 ? _c : 0;
|
|
44
|
-
const linkedId = (_h = (_f = (_d = clipShow === null || clipShow === void 0 ? void 0 : clipShow.id) !== null && _d !== void 0 ? _d : (_e = route.params) === null || _e === void 0 ? void 0 : _e.feedId) !== null && _f !== void 0 ? _f : (_g = route.params) === null || _g === void 0 ? void 0 : _g.streamId) !== null && _h !== void 0 ? _h : '';
|
|
45
|
-
const { ready } = (0, LiveSellingProvider_1.useLiveSelling)();
|
|
46
|
-
const { routes, track, canOpenLinks } = (0, LiveSellingProvider_1.useLivePageOptions)();
|
|
47
|
-
const wishlist = (0, sdk_shopify_1.useWishlist)();
|
|
48
|
-
// `firstReadDone`: the first read has finished; until then an empty archive is still being read.
|
|
49
|
-
const archive = (0, useReplays_1.useReplays)({ pageSize: PAGE_SIZE, playableOnly: true });
|
|
50
|
-
const { loadMore, hasMore, hasRead: firstReadDone, loading: reading, error: readFailed } = archive;
|
|
51
|
-
// The recordings this shopper may see: hidden shows they can't see are left out.
|
|
52
|
-
const shows = archive.replays;
|
|
53
|
-
const { itemCount } = (0, sdk_shopify_1.useCart)();
|
|
54
|
-
// The app's one replay player: borrowed, as it outlives this screen for the bubble.
|
|
55
|
-
const replayPlayer = (0, replayPlayer_1.useReplayPlayer)();
|
|
56
|
-
const { player, bubbleShown, muted, openRecording, holdsVideo, stop, showBubble, hideBubble, setPausedByShopper, markVideoReady, setScreenShowing, screenClosed, noteSystemPictureInPicture, } = replayPlayer;
|
|
57
|
-
// ─── Which recording ───────────────────────────────────────────────────────────────────────────
|
|
58
|
-
// State, seeded from the route: a swipe moves on without a navigation, and a new link moves it again.
|
|
59
|
-
const [currentId, setCurrentId] = (0, react_1.useState)(linkedId);
|
|
60
|
-
(0, react_1.useEffect)(() => setCurrentId(linkedId), [linkedId]);
|
|
61
|
-
const index = currentId ? shows.findIndex((replay) => (0, livePages_1.isTheShow)(replay, currentId)) : -1;
|
|
62
|
-
// A recording back from the bubble shows at once: the player holds it, and a new screen reads the
|
|
63
|
-
// archive from the start, so it would otherwise wait for that read to find it again.
|
|
64
|
-
const heldRecording = replayPlayer.recording;
|
|
65
|
-
const show = clipShow
|
|
66
|
-
? clipShow
|
|
67
|
-
: index >= 0
|
|
68
|
-
? shows[index]
|
|
69
|
-
: heldRecording && currentId && (0, livePages_1.isTheShow)(heldRecording, currentId)
|
|
70
|
-
? heldRecording
|
|
71
|
-
: null;
|
|
72
|
-
// A clip has nothing to swipe to.
|
|
73
|
-
const previousShow = !clipShow && index > 0 ? shows[index - 1] : null;
|
|
74
|
-
const nextShow = !clipShow && index >= 0 ? ((_j = shows[index + 1]) !== null && _j !== void 0 ? _j : null) : null;
|
|
75
|
-
// Read on until the recording turns up (not a clip's). One read at a time: `useReplays` ignores a second.
|
|
76
|
-
const readSoFar = !!currentId && archive.replays.some((replay) => (0, livePages_1.isTheShow)(replay, currentId));
|
|
77
|
-
const searching = !clipShow && !!currentId && !readSoFar && hasMore && !readFailed;
|
|
78
|
-
(0, react_1.useEffect)(() => {
|
|
79
|
-
if (ready && firstReadDone && searching && !reading)
|
|
80
|
-
void loadMore();
|
|
81
|
-
}, [ready, firstReadDone, searching, reading, loadMore]);
|
|
82
|
-
// The next page before the shopper reaches the end, so the swipe after the last one lands.
|
|
83
|
-
const nearTheEnd = !clipShow && index >= 0 && index >= shows.length - 2;
|
|
84
|
-
(0, react_1.useEffect)(() => {
|
|
85
|
-
if (nearTheEnd && hasMore && !reading && !readFailed)
|
|
86
|
-
void loadMore();
|
|
87
|
-
}, [nearTheEnd, hasMore, reading, readFailed, loadMore]);
|
|
88
|
-
// Not in the archive (or a hidden show this shopper can't see), or the archive couldn't be read.
|
|
89
|
-
const missing = !clipShow && (!currentId || (firstReadDone && !show && !searching && !reading));
|
|
90
|
-
const goTo = (0, react_1.useCallback)((target) => {
|
|
91
|
-
if (!target)
|
|
92
|
-
return;
|
|
93
|
-
setCurrentId(target.id);
|
|
94
|
-
// The route follows, so a reload or a later link starts from the show being watched.
|
|
95
|
-
nav.setParams({ feedId: target.id, streamId: undefined });
|
|
96
|
-
}, [nav]);
|
|
97
|
-
// ─── The player ────────────────────────────────────────────────────────────────────────────────
|
|
98
|
-
const isFocused = (0, navigation_1.useIsFocused)();
|
|
99
|
-
const coveredOnlyBySheet = (0, navigation_1.useNavigationState)((state) => (0, livePages_1.isCoveredOnlyBySheet)(state, route.key, routes.sheets));
|
|
100
|
-
const onScreen = isFocused || coveredOnlyBySheet;
|
|
101
|
-
const videoUrl = (_k = show === null || show === void 0 ? void 0 : show.videoUrl) !== null && _k !== void 0 ? _k : null;
|
|
102
|
-
/** The player holds this screen's recording. It may hold another (the bubble's, until this screen takes over) or none. */
|
|
103
|
-
const holdsThisShow = !!videoUrl && replayPlayer.videoUrl === videoUrl;
|
|
104
|
-
// Put away with the video on this screen, the phone takes it into its own window (0.15.2, ENG-941): armed
|
|
105
|
-
// while the screen draws the video, so again each time it takes the picture back from the bubble.
|
|
106
|
-
const startsPictureInPictureAutomatically = (0, systemPictureInPicture_1.useAutoPictureInPicture)(holdsThisShow && !bubbleShown);
|
|
107
|
-
const playing = holdsThisShow && replayPlayer.playing;
|
|
108
|
-
const status = holdsThisShow ? replayPlayer.status : 'loading';
|
|
109
|
-
const videoReady = holdsThisShow && replayPlayer.videoReady;
|
|
110
|
-
// Back from the bubble, the player is already somewhere in the recording: start from there.
|
|
111
|
-
const [positionMs, setPositionMs] = (0, react_1.useState)(() => (holdsThisShow ? Math.max(0, (0, livePages_1.playerMs)(player.currentTime) - offsetMs) : 0));
|
|
112
|
-
/** While the shopper drags the bar: the product card and chat follow the finger, not the playhead. */
|
|
113
|
-
const [scrubMs, setScrubMs] = (0, react_1.useState)(null);
|
|
114
|
-
const [durationMs, setDurationMs] = (0, react_1.useState)(() => (holdsThisShow ? (0, livePages_1.playerMs)(player.duration) : 0));
|
|
115
|
-
/** A seek asked for and not yet reported back: the player keeps saying the old time until it lands. */
|
|
116
|
-
const pendingSeek = (0, react_1.useRef)(null);
|
|
117
|
-
const latest = (0, react_1.useRef)({ durationMs, holdsThisShow, clipWindow });
|
|
118
|
-
latest.current = { durationMs, holdsThisShow, clipWindow };
|
|
119
|
-
/** This screen just opened a clip: it goes into the clip's window once the player can seek. */
|
|
120
|
-
const intoClip = (0, react_1.useRef)(false);
|
|
121
|
-
/** ✕ was pressed: the show has stopped, and the screen slides away on its poster. */
|
|
122
|
-
const [closing, setClosing] = (0, react_1.useState)(false);
|
|
123
|
-
// On show here, this screen's recording goes into the player, from the start, unless the player
|
|
124
|
-
// already holds it (back from the bubble, it plays on where it was). Not while the bubble is still
|
|
125
|
-
// up: arriving closes it first (below), so its view never loads another recording. Not once ✕ has
|
|
126
|
-
// stopped it, while the screen is still on show for its way out. The player is asked at the moment
|
|
127
|
-
// this runs (`holdsVideo`).
|
|
128
|
-
const showToOpen = (0, react_1.useRef)(show);
|
|
129
|
-
showToOpen.current = show;
|
|
130
|
-
(0, react_1.useEffect)(() => {
|
|
131
|
-
const target = showToOpen.current;
|
|
132
|
-
if (closing || !onScreen || bubbleShown || !videoUrl || !target || holdsVideo(videoUrl))
|
|
133
|
-
return;
|
|
134
|
-
setPositionMs(0);
|
|
135
|
-
setScrubMs(null);
|
|
136
|
-
setDurationMs(0);
|
|
137
|
-
// Held at 0 until the player stops reporting the last recording's time.
|
|
138
|
-
pendingSeek.current = { targetMs: 0, checks: 0 };
|
|
139
|
-
intoClip.current = !!latest.current.clipWindow;
|
|
140
|
-
openRecording(target);
|
|
141
|
-
}, [closing, onScreen, bubbleShown, videoUrl, holdsVideo, openRecording]);
|
|
142
|
-
// Arriving here ends the bubble, however the shopper came (its tap, a link, back from the cart): the
|
|
143
|
-
// screen shows the video again. A screen ✕ couldn't take away (nothing behind it, so Home opened
|
|
144
|
-
// over it) plays again if the shopper comes back to it.
|
|
145
|
-
(0, react_1.useEffect)(() => {
|
|
146
|
-
if (!isFocused)
|
|
147
|
-
return;
|
|
148
|
-
hideBubble();
|
|
149
|
-
setClosing(false);
|
|
150
|
-
}, [isFocused, hideBubble]);
|
|
151
|
-
// One shrunk show at a time: a live show left in its bubble stops, and its pin goes with it.
|
|
152
|
-
const { pipMode: livePipMode, actions: liveActions } = (0, platformSession_1.useLiveSession)();
|
|
153
|
-
const { exitPip: closeLiveBubble, releaseStream: releaseLiveShow } = liveActions;
|
|
154
|
-
(0, react_1.useEffect)(() => {
|
|
155
|
-
if (!isFocused || livePipMode !== 'inapp')
|
|
156
|
-
return;
|
|
157
|
-
closeLiveBubble({ stopVideo: true });
|
|
158
|
-
releaseLiveShow();
|
|
159
|
-
}, [isFocused, livePipMode, closeLiveBubble, releaseLiveShow]);
|
|
160
|
-
// The player plays only while something shows it: this screen says when it does. Closing it stops
|
|
161
|
-
// the video, unless the bubble took it.
|
|
162
|
-
const screenKey = route.key;
|
|
163
|
-
const showingHere = onScreen && holdsThisShow;
|
|
164
|
-
(0, react_1.useEffect)(() => {
|
|
165
|
-
setScreenShowing(screenKey, showingHere);
|
|
166
|
-
}, [screenKey, showingHere, setScreenShowing]);
|
|
167
|
-
(0, react_1.useEffect)(() => () => screenClosed(screenKey), [screenKey, screenClosed]);
|
|
168
|
-
// The playhead, read rather than subscribed: product windows only need to land within half a second.
|
|
169
|
-
(0, react_1.useEffect)(() => {
|
|
170
|
-
const timer = setInterval(() => {
|
|
171
|
-
var _a, _b;
|
|
172
|
-
// Another recording's time (the player holds the bubble's, or nothing) isn't this one's.
|
|
173
|
-
if (!latest.current.holdsThisShow)
|
|
174
|
-
return;
|
|
175
|
-
try {
|
|
176
|
-
const clip = latest.current.clipWindow;
|
|
177
|
-
const recordingMs = (player.currentTime || 0) * 1000;
|
|
178
|
-
// Past a clip's end it is over, though the recording runs on: stopped there (not while a seek lands).
|
|
179
|
-
if ((clip === null || clip === void 0 ? void 0 : clip.endMs) != null && recordingMs >= clip.endMs && !pendingSeek.current && !intoClip.current) {
|
|
180
|
-
player.pause();
|
|
181
|
-
setPositionMs(clip.endMs - clip.startMs);
|
|
182
|
-
setDurationMs(clip.endMs - clip.startMs);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
// The clip's time, from its start; a recording's own time otherwise.
|
|
186
|
-
const reportedMs = Math.max(0, recordingMs - ((_a = clip === null || clip === void 0 ? void 0 : clip.startMs) !== null && _a !== void 0 ? _a : 0));
|
|
187
|
-
const pending = pendingSeek.current;
|
|
188
|
-
if (!pending)
|
|
189
|
-
setPositionMs(reportedMs);
|
|
190
|
-
else if (Math.abs(reportedMs - pending.targetMs) <= SEEK_LANDED_WITHIN_MS || pending.checks + 1 >= SEEK_GIVE_UP_CHECKS) {
|
|
191
|
-
pendingSeek.current = null;
|
|
192
|
-
setPositionMs(reportedMs);
|
|
193
|
-
}
|
|
194
|
-
else
|
|
195
|
-
pendingSeek.current = { targetMs: pending.targetMs, checks: pending.checks + 1 };
|
|
196
|
-
// A length that arrives late, or that the playlist revises.
|
|
197
|
-
const lengthSeconds = player.duration;
|
|
198
|
-
if ((clip === null || clip === void 0 ? void 0 : clip.endMs) != null)
|
|
199
|
-
setDurationMs(clip.endMs - clip.startMs);
|
|
200
|
-
else if (Number.isFinite(lengthSeconds) && lengthSeconds > 0)
|
|
201
|
-
setDurationMs(Math.max(0, lengthSeconds * 1000 - ((_b = clip === null || clip === void 0 ? void 0 : clip.startMs) !== null && _b !== void 0 ? _b : 0)));
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
// The player was released under the timer (the app is closing).
|
|
205
|
-
}
|
|
206
|
-
}, POSITION_CHECK_MS);
|
|
207
|
-
return () => clearInterval(timer);
|
|
208
|
-
}, [player]);
|
|
209
|
-
const seekTo = (0, react_1.useCallback)((targetMs) => {
|
|
210
|
-
var _a, _b;
|
|
211
|
-
if (!latest.current.holdsThisShow)
|
|
212
|
-
return;
|
|
213
|
-
const length = latest.current.durationMs;
|
|
214
|
-
const target = Math.max(0, length > 0 ? Math.min(targetMs, length) : targetMs);
|
|
215
|
-
pendingSeek.current = { targetMs: target, checks: 0 };
|
|
216
|
-
try {
|
|
217
|
-
// A clip's time is from its start; the player's is the recording's.
|
|
218
|
-
player.currentTime = (target + ((_b = (_a = latest.current.clipWindow) === null || _a === void 0 ? void 0 : _a.startMs) !== null && _b !== void 0 ? _b : 0)) / 1000;
|
|
219
|
-
}
|
|
220
|
-
catch {
|
|
221
|
-
pendingSeek.current = null;
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
setPositionMs(target);
|
|
225
|
-
setScrubMs(null);
|
|
226
|
-
}, [player]);
|
|
227
|
-
const shownPositionMs = scrubMs !== null && scrubMs !== void 0 ? scrubMs : positionMs;
|
|
228
|
-
// A clip this screen opened goes to its start once the player has the recording: a time set before
|
|
229
|
-
// that is dropped, and the clip would play the top of the show.
|
|
230
|
-
(0, react_1.useEffect)(() => {
|
|
231
|
-
if (!intoClip.current || !clipWindow || !holdsThisShow || status !== 'readyToPlay')
|
|
232
|
-
return;
|
|
233
|
-
intoClip.current = false;
|
|
234
|
-
seekTo(0);
|
|
235
|
-
}, [clipWindow, holdsThisShow, status, seekTo]);
|
|
236
|
-
// ─── The controls: up for 4 s (`controlsShowMs`) after they show or are touched ───────────────
|
|
237
|
-
const [controlsVisible, setControlsVisible] = (0, react_1.useState)(true);
|
|
238
|
-
const [controlsTouches, setControlsTouches] = (0, react_1.useState)(0);
|
|
239
|
-
const showControls = (0, react_1.useCallback)(() => {
|
|
240
|
-
setControlsVisible(true);
|
|
241
|
-
setControlsTouches((count) => count + 1);
|
|
242
|
-
}, []);
|
|
243
|
-
// `showControls` taps: a paused recording keeps its controls, so its play button is always there.
|
|
244
|
-
const { tapShowsControls, keptWhilePaused, showForMs } = (0, viewerRules_1.replayControlsRule)({ tapVideo, controlsShowMs }, playing);
|
|
245
|
-
(0, react_1.useEffect)(() => {
|
|
246
|
-
if (!controlsVisible || keptWhilePaused)
|
|
247
|
-
return;
|
|
248
|
-
const timer = setTimeout(() => setControlsVisible(false), showForMs);
|
|
249
|
-
return () => clearTimeout(timer);
|
|
250
|
-
}, [controlsVisible, controlsTouches, keptWhilePaused, showForMs]);
|
|
251
|
-
/**
|
|
252
|
-
* Pause or play: the controls' middle button, and a tap on the video, as the clips reel's (0.15.0;
|
|
253
|
-
* decided 2026-10-20 by amore-v2's Head of Engineering; until then a tap showed or hid the controls).
|
|
254
|
-
* Either shows the controls for their 4 s, so after a tap on the video the skips and the bar are in reach.
|
|
255
|
-
*/
|
|
256
|
-
const togglePlay = () => {
|
|
257
|
-
showControls();
|
|
258
|
-
if (!holdsThisShow)
|
|
259
|
-
return;
|
|
260
|
-
if (playing) {
|
|
261
|
-
setPausedByShopper(true);
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
setPausedByShopper(false);
|
|
265
|
-
// At the end of the recording, play means from the start.
|
|
266
|
-
if (durationMs > 0 && shownPositionMs >= durationMs - 1000)
|
|
267
|
-
seekTo(0);
|
|
268
|
-
player.play();
|
|
269
|
-
};
|
|
270
|
-
// ─── What the show sells, and its chat ─────────────────────────────────────────────────────────
|
|
271
|
-
const shoppingRead = (0, react_1.useRef)(new Map());
|
|
272
|
-
const [shopping, setShopping] = (0, react_1.useState)({ showId: '', products: [], segments: [], recordLots: null, isAuction: false });
|
|
273
|
-
const showId = (_l = show === null || show === void 0 ? void 0 : show.id) !== null && _l !== void 0 ? _l : null;
|
|
274
|
-
// A clip's reads (its own products, no windows) are kept apart from its recording's.
|
|
275
|
-
const shoppingKey = showId ? (clipShow ? `clip:${showId}` : showId) : null;
|
|
276
|
-
const productIds = show === null || show === void 0 ? void 0 : show.productIds;
|
|
277
|
-
const streamingId = (_m = show === null || show === void 0 ? void 0 : show.streamingId) !== null && _m !== void 0 ? _m : null;
|
|
278
|
-
(0, react_1.useEffect)(() => {
|
|
279
|
-
if (!showId || !shoppingKey)
|
|
280
|
-
return;
|
|
281
|
-
const kept = shoppingRead.current.get(shoppingKey);
|
|
282
|
-
if (kept) {
|
|
283
|
-
setShopping({ showId: shoppingKey, ...kept });
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
let stillThisShow = true;
|
|
287
|
-
let everythingRead = true;
|
|
288
|
-
const failed = (at) => (error) => {
|
|
289
|
-
everythingRead = false;
|
|
290
|
-
(0, pageOptions_1.reportLiveWarning)(error, { at, feedId: showId });
|
|
291
|
-
return [];
|
|
292
|
-
};
|
|
293
|
-
void Promise.all([
|
|
294
|
-
(productIds === null || productIds === void 0 ? void 0 : productIds.length) ? sdk_shopify_1.shopify.products.byIds(productIds, { imageTransform: sdk_shopify_1.CARD_IMAGE }).catch(failed('replay.products')) : Promise.resolve([]),
|
|
295
|
-
// A clip has no time windows: its own products, the first on screen.
|
|
296
|
-
clipShow ? Promise.resolve([]) : liveSelling_1.liveSelling.replays.segments(showId).catch(failed('replay.segments')),
|
|
297
|
-
// The record lists the links the host added, which the feed doesn't, and the host's order.
|
|
298
|
-
streamingId
|
|
299
|
-
? liveSelling_1.liveSelling.streams
|
|
300
|
-
.byId(streamingId)
|
|
301
|
-
.then((record) => record !== null && record !== void 0 ? record : null)
|
|
302
|
-
.catch((error) => {
|
|
303
|
-
failed('replay.record')(error);
|
|
304
|
-
return null;
|
|
305
|
-
})
|
|
306
|
-
: Promise.resolve(null),
|
|
307
|
-
]).then(([products, segments, record]) => {
|
|
308
|
-
var _a;
|
|
309
|
-
const read = { products, segments, recordLots: (_a = record === null || record === void 0 ? void 0 : record.products) !== null && _a !== void 0 ? _a : null, isAuction: (record === null || record === void 0 ? void 0 : record.isAuction) === true };
|
|
310
|
-
// Kept for the visit only when it all came back: a failed read is tried again when the shopper returns.
|
|
311
|
-
if (everythingRead)
|
|
312
|
-
shoppingRead.current.set(shoppingKey, read);
|
|
313
|
-
if (stillThisShow)
|
|
314
|
-
setShopping({ showId: shoppingKey, ...read });
|
|
315
|
-
});
|
|
316
|
-
return () => {
|
|
317
|
-
stillThisShow = false;
|
|
318
|
-
};
|
|
319
|
-
}, [showId, shoppingKey, productIds, streamingId, clipShow]);
|
|
320
|
-
const products = shopping.showId === shoppingKey ? shopping.products : [];
|
|
321
|
-
const segments = shopping.showId === shoppingKey ? shopping.segments : [];
|
|
322
|
-
const recordLots = shopping.showId === shoppingKey ? shopping.recordLots : null;
|
|
323
|
-
/** The shop in the host's order: the products and the links the host added among them. */
|
|
324
|
-
const shopItems = (0, react_1.useMemo)(() => (0, linkLots_1.recordingShopItems)(products, recordLots, client_1.toProductGid, { canOpen: canOpenLinks }), [products, recordLots, canOpenLinks]);
|
|
325
|
-
// A link's window is keyed by its lot's id, as a product's is.
|
|
326
|
-
const onScreenItem = (0, react_1.useMemo)(() => (0, livePages_1.productOnScreen)(segments, shopItems, shownPositionMs, (item) => ((0, linkLots_1.isShowLink)(item) ? (0, client_1.toProductGid)(item.id) : item.id)), [segments, shopItems, shownPositionMs]);
|
|
327
|
-
const onScreenProduct = onScreenItem && !(0, linkLots_1.isShowLink)(onScreenItem) ? onScreenItem : null;
|
|
328
|
-
const onScreenLink = onScreenItem && (0, linkLots_1.isShowLink)(onScreenItem) ? onScreenItem : null;
|
|
329
|
-
const firstShownAt = (0, react_1.useCallback)((productId) => (0, livePages_1.firstShownAt)(segments, productId), [segments]);
|
|
330
|
-
const chatRead = (0, react_1.useRef)(new Map());
|
|
331
|
-
const [chat, setChat] = (0, react_1.useState)({ streamingId: '', comments: [] });
|
|
332
|
-
(0, react_1.useEffect)(() => {
|
|
333
|
-
if (!streamingId)
|
|
334
|
-
return;
|
|
335
|
-
const kept = chatRead.current.get(streamingId);
|
|
336
|
-
if (kept) {
|
|
337
|
-
setChat({ streamingId, comments: kept });
|
|
338
|
-
return;
|
|
339
|
-
}
|
|
340
|
-
let stillThisShow = true;
|
|
341
|
-
liveSelling_1.liveSelling.replays
|
|
342
|
-
.comments(streamingId)
|
|
343
|
-
.then((comments) => {
|
|
344
|
-
chatRead.current.set(streamingId, comments);
|
|
345
|
-
if (stillThisShow)
|
|
346
|
-
setChat({ streamingId, comments });
|
|
347
|
-
})
|
|
348
|
-
.catch((error) => (0, pageOptions_1.reportLiveWarning)(error, { at: 'replay.comments', streamingId }));
|
|
349
|
-
return () => {
|
|
350
|
-
stillThisShow = false;
|
|
351
|
-
};
|
|
352
|
-
}, [streamingId]);
|
|
353
|
-
const allComments = chat.streamingId === streamingId ? chat.comments : [];
|
|
354
|
-
const saidSoFar = (0, react_1.useMemo)(() => (0, livePages_1.replayCommentsAt)(allComments, shownPositionMs + offsetMs), [allComments, shownPositionMs, offsetMs]);
|
|
355
|
-
const [chatHidden, setChatHidden] = (0, react_1.useState)(false);
|
|
356
|
-
// A swipe is a new show: its own controls showing, its chat out.
|
|
357
|
-
(0, react_1.useEffect)(() => {
|
|
358
|
-
setChatHidden(false);
|
|
359
|
-
showControls();
|
|
360
|
-
}, [showId, showControls]);
|
|
361
|
-
// ─── A view, once per recording per visit; never from the web preview ─────────────────────────
|
|
362
|
-
// A recording back from the bubble was counted when it was opened: a round trip isn't a new view
|
|
363
|
-
// (production's new Replay screen on every return counted another, amore-v2's audit L4).
|
|
364
|
-
const counted = (0, react_1.useRef)(null);
|
|
365
|
-
if (!counted.current)
|
|
366
|
-
counted.current = new Set(holdsThisShow && show ? [show.id] : []);
|
|
367
|
-
(0, react_1.useEffect)(() => {
|
|
368
|
-
const seen = counted.current;
|
|
369
|
-
if (!showId || react_native_1.Platform.OS === 'web' || !seen || seen.has(showId))
|
|
370
|
-
return;
|
|
371
|
-
seen.add(showId);
|
|
372
|
-
void liveSelling_1.liveSelling.replays.incrementViews(showId);
|
|
373
|
-
}, [showId]);
|
|
374
|
-
// ─── Buying: every add from this screen is credited to the recording ──────────────────────────
|
|
375
|
-
const isAuction = shopping.showId === shoppingKey && shopping.isAuction;
|
|
376
|
-
const credit = (0, react_1.useMemo)(() => (0, showCredit_1.replayShowCredit)(showId, streamingId, isAuction), [showId, streamingId, isAuction]);
|
|
377
|
-
const quickAdd = (0, sdk_shopify_1.useQuickAdd)((0, showCredit_1.showQuickAddOptions)((params) => routes.openVariantPage(params, nav), { credit, track }));
|
|
378
|
-
const openVariantPage = (0, react_1.useCallback)((product) => {
|
|
379
|
-
if (!credit.lineAttributes)
|
|
380
|
-
return;
|
|
381
|
-
routes.openVariantPage({ handle: product.handle, ...credit }, nav);
|
|
382
|
-
}, [routes, nav, credit]);
|
|
383
|
-
const pickFromSheet = (0, react_1.useCallback)((product) => {
|
|
384
|
-
// Shown in the recording: to where the host first showed it, playing, so the pitch goes on behind
|
|
385
|
-
// the variant page. Never shown (no time window): the player is left exactly as it was, where it
|
|
386
|
-
// was and playing or paused; only the variant page opens (2026-10-05, Head of Engineering).
|
|
387
|
-
const startMs = firstShownAt(product.id);
|
|
388
|
-
if (startMs != null) {
|
|
389
|
-
seekTo(startMs);
|
|
390
|
-
setPausedByShopper(false);
|
|
391
|
-
}
|
|
392
|
-
openVariantPage(product);
|
|
393
|
-
}, [firstShownAt, seekTo, setPausedByShopper, openVariantPage]);
|
|
394
|
-
const nowProduct = (0, react_1.useMemo)(() => {
|
|
395
|
-
var _a, _b, _c, _d;
|
|
396
|
-
return onScreenProduct
|
|
397
|
-
? {
|
|
398
|
-
id: onScreenProduct.id,
|
|
399
|
-
title: onScreenProduct.title,
|
|
400
|
-
price: (0, sdk_shopify_1.formatMoney)(onScreenProduct.priceRange.min),
|
|
401
|
-
imageUrl: (_d = (_b = (_a = onScreenProduct.featuredImage) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : (_c = onScreenProduct.images[0]) === null || _c === void 0 ? void 0 : _c.url) !== null && _d !== void 0 ? _d : null,
|
|
402
|
-
}
|
|
403
|
-
: onScreenLink
|
|
404
|
-
? {
|
|
405
|
-
id: onScreenLink.id,
|
|
406
|
-
title: onScreenLink.title,
|
|
407
|
-
price: onScreenLink.price,
|
|
408
|
-
imageUrl: onScreenLink.imageUrl,
|
|
409
|
-
isLink: true,
|
|
410
|
-
canOpen: !!onScreenLink.url,
|
|
411
|
-
}
|
|
412
|
-
: null;
|
|
413
|
-
}, [onScreenProduct, onScreenLink]);
|
|
414
|
-
const auctionProductIds = (0, react_1.useMemo)(() => products.filter(sdk_shopify_1.isAuctioned).map((product) => product.id), [products]);
|
|
415
|
-
const poster = (replay) => (replay ? { id: replay.id, posterUrl: replay.thumbnailUrl } : null);
|
|
416
|
-
// ✕, Android's back and picture-in-picture: Home, for every app (decided 2026-10-22).
|
|
417
|
-
const leave = (0, react_1.useCallback)(() => routes.openHome(nav), [nav, routes]);
|
|
418
|
-
// ✕: the show stops, with no bubble.
|
|
419
|
-
const close = (0, react_1.useCallback)(() => {
|
|
420
|
-
setClosing(true);
|
|
421
|
-
stop();
|
|
422
|
-
leave();
|
|
423
|
-
}, [stop, leave]);
|
|
424
|
-
// Android's back does what ✕ does; the iOS swipe back, which would go to the screen behind, is off here.
|
|
425
|
-
const closeNow = (0, react_1.useRef)(close);
|
|
426
|
-
closeNow.current = close;
|
|
427
|
-
(0, navigation_1.useFocusEffect)((0, react_1.useCallback)(() => {
|
|
428
|
-
const subscription = react_native_1.BackHandler.addEventListener('hardwareBackPress', () => {
|
|
429
|
-
closeNow.current();
|
|
430
|
-
return true;
|
|
431
|
-
});
|
|
432
|
-
return () => subscription.remove();
|
|
433
|
-
}, []));
|
|
434
|
-
(0, react_1.useEffect)(() => {
|
|
435
|
-
nav.setOptions({ gestureEnabled: false });
|
|
436
|
-
}, [nav]);
|
|
437
|
-
// Picture-in-picture: the show shrinks into the bubble, and the shopper goes back.
|
|
438
|
-
const shrinkIntoBubble = (0, react_1.useCallback)(() => {
|
|
439
|
-
if (holdsVideo(videoUrl))
|
|
440
|
-
showBubble();
|
|
441
|
-
leave();
|
|
442
|
-
}, [holdsVideo, videoUrl, showBubble, leave]);
|
|
443
|
-
// The cart opens under the bubble, so the show plays on over it, as production's; coming back here ends the bubble.
|
|
444
|
-
const openCart = (0, react_1.useCallback)(() => {
|
|
445
|
-
if (holdsVideo(videoUrl))
|
|
446
|
-
showBubble();
|
|
447
|
-
routes.openCart({ itemsYouWon: false }, nav);
|
|
448
|
-
}, [holdsVideo, videoUrl, showBubble, routes, nav]);
|
|
449
|
-
/**
|
|
450
|
-
* A link the host added (0.15.0): inside the app, never the phone's browser (`routes.openLink`, with the
|
|
451
|
-
* lot's title), the show in the bubble as for the cart; coming back here ends the bubble. Nothing for
|
|
452
|
-
* one that can't open (`url` null: not https, or an app with no `routes.openLink`).
|
|
453
|
-
*/
|
|
454
|
-
const openLink = (0, react_1.useCallback)((link) => {
|
|
455
|
-
if (!link.url)
|
|
456
|
-
return;
|
|
457
|
-
if (holdsVideo(videoUrl))
|
|
458
|
-
showBubble();
|
|
459
|
-
routes.openLink(link.url, link.title, nav);
|
|
460
|
-
}, [holdsVideo, videoUrl, showBubble, routes, nav]);
|
|
461
|
-
const playerShown = !missing;
|
|
462
|
-
const showing = !!show;
|
|
463
|
-
return {
|
|
464
|
-
/** The video is on screen: light status bar text over it. */
|
|
465
|
-
darkBehindStatusBar: playerShown && onScreen,
|
|
466
|
-
player: {
|
|
467
|
-
visible: playerShown,
|
|
468
|
-
show: poster(show),
|
|
469
|
-
previousShow: poster(previousShow),
|
|
470
|
-
nextShow: poster(nextShow),
|
|
471
|
-
// Drawn only once the player holds this recording, a new view per recording: on web a view still
|
|
472
|
-
// showing the last one would load the new one twice (from `replace`, then from React setting its
|
|
473
|
-
// `src`), and the second load aborts the first's `play()` (an unhandled `AbortError` inside
|
|
474
|
-
// expo-video's web player). And one view at a time: while the bubble has the video, none here.
|
|
475
|
-
player: holdsThisShow && !bubbleShown ? player : null,
|
|
476
|
-
// The poster stands in for the picture while the bubble has it (the screen sliding away, or under the cart).
|
|
477
|
-
videoReady: videoReady && !bubbleShown,
|
|
478
|
-
buffering: !closing && !!videoUrl && status !== 'error' && (status === 'loading' || !videoReady),
|
|
479
|
-
// The reel's play mark while the shopper has paused it (0.15.0).
|
|
480
|
-
paused: holdsThisShow && replayPlayer.pausedByShopper,
|
|
481
|
-
// The recording played to its end and stopped there (0.16.0, the player's `playToEnd`, so a pause in its
|
|
482
|
-
// last second isn't the end), or a clip reached its own end: for an "end of the replay" overlay. Play
|
|
483
|
-
// starts it again from the top.
|
|
484
|
-
finished: holdsThisShow && !playing && (clipWindow ? durationMs > 0 && positionMs >= durationMs - 1000 : replayPlayer.playedToEnd),
|
|
485
|
-
onVideoFirstFrame: () => {
|
|
486
|
-
if (holdsThisShow)
|
|
487
|
-
markVideoReady();
|
|
488
|
-
},
|
|
489
|
-
// The phone's own window when the app is put away (0.15.2): for the screen's `VideoView`.
|
|
490
|
-
startsPictureInPictureAutomatically,
|
|
491
|
-
onPictureInPictureStart: () => noteSystemPictureInPicture(true),
|
|
492
|
-
onPictureInPictureStop: () => noteSystemPictureInPicture(false),
|
|
493
|
-
onTapVideo: tapShowsControls ? showControls : togglePlay,
|
|
494
|
-
onSwipeToNext: () => goTo(nextShow),
|
|
495
|
-
onSwipeToPrevious: () => goTo(previousShow),
|
|
496
|
-
},
|
|
497
|
-
header: {
|
|
498
|
-
title: (_o = show === null || show === void 0 ? void 0 : show.title) !== null && _o !== void 0 ? _o : null,
|
|
499
|
-
muted,
|
|
500
|
-
canMute: showing,
|
|
501
|
-
// Something to shrink: the player holds this recording.
|
|
502
|
-
canPip: holdsThisShow,
|
|
503
|
-
cartCount: itemCount,
|
|
504
|
-
onClose: close,
|
|
505
|
-
onToggleMute: () => {
|
|
506
|
-
replayPlayer.setMuted(!muted);
|
|
507
|
-
showControls();
|
|
508
|
-
},
|
|
509
|
-
onPip: shrinkIntoBubble,
|
|
510
|
-
onCart: openCart,
|
|
511
|
-
},
|
|
512
|
-
controls: {
|
|
513
|
-
visible: showing && (controlsVisible || keptWhilePaused),
|
|
514
|
-
positionMs: shownPositionMs,
|
|
515
|
-
durationMs,
|
|
516
|
-
playing,
|
|
517
|
-
onScrub: (atMs) => {
|
|
518
|
-
setScrubMs(atMs);
|
|
519
|
-
showControls();
|
|
520
|
-
},
|
|
521
|
-
onSeek: (atMs) => {
|
|
522
|
-
seekTo(atMs);
|
|
523
|
-
showControls();
|
|
524
|
-
},
|
|
525
|
-
onSkip: (changeMs) => {
|
|
526
|
-
var _a, _b;
|
|
527
|
-
// From the time last asked for, so tapping +10 twice adds up while the first is still seeking.
|
|
528
|
-
seekTo(((_b = (_a = pendingSeek.current) === null || _a === void 0 ? void 0 : _a.targetMs) !== null && _b !== void 0 ? _b : shownPositionMs) + changeMs);
|
|
529
|
-
showControls();
|
|
530
|
-
},
|
|
531
|
-
onTogglePlay: togglePlay,
|
|
532
|
-
},
|
|
533
|
-
nowCard: {
|
|
534
|
-
visible: showing,
|
|
535
|
-
product: nowProduct,
|
|
536
|
-
favorite: !!onScreenProduct && wishlist.has(onScreenProduct.id),
|
|
537
|
-
onOpen: () => {
|
|
538
|
-
if (onScreenProduct)
|
|
539
|
-
openVariantPage(onScreenProduct);
|
|
540
|
-
else if (onScreenLink)
|
|
541
|
-
openLink(onScreenLink);
|
|
542
|
-
},
|
|
543
|
-
onToggleFavorite: () => {
|
|
544
|
-
if (onScreenProduct)
|
|
545
|
-
void wishlist.toggle(onScreenProduct);
|
|
546
|
-
},
|
|
547
|
-
onShare: () => {
|
|
548
|
-
if (onScreenProduct)
|
|
549
|
-
void (0, useLiveShop_1.shareProduct)(onScreenProduct);
|
|
550
|
-
else if (onScreenLink)
|
|
551
|
-
void (0, useLiveShop_1.shareAddress)(onScreenLink.url);
|
|
552
|
-
},
|
|
553
|
-
},
|
|
554
|
-
comments: {
|
|
555
|
-
visible: showing,
|
|
556
|
-
comments: saidSoFar,
|
|
557
|
-
hasChat: allComments.length > 0,
|
|
558
|
-
hidden: chatHidden,
|
|
559
|
-
onToggleHidden: () => setChatHidden((wasHidden) => !wasHidden),
|
|
560
|
-
},
|
|
561
|
-
shopBar: {
|
|
562
|
-
visible: showing,
|
|
563
|
-
/** The products and the links the host added (`ReplayShopLink`), in the record's order. */
|
|
564
|
-
products: shopItems,
|
|
565
|
-
onScreenProductId: (_p = onScreenItem === null || onScreenItem === void 0 ? void 0 : onScreenItem.id) !== null && _p !== void 0 ? _p : null,
|
|
566
|
-
favoriteIds: wishlist.ids,
|
|
567
|
-
auctionProductIds,
|
|
568
|
-
onPressProduct: pickFromSheet,
|
|
569
|
-
onOpenLink: openLink,
|
|
570
|
-
onToggleFavorite: (product) => void wishlist.toggle(product),
|
|
571
|
-
onQuickAdd: quickAdd.add,
|
|
572
|
-
addingProductIds: quickAdd.addingProductIds,
|
|
573
|
-
},
|
|
574
|
-
missing: {
|
|
575
|
-
visible: missing,
|
|
576
|
-
onAction: () => routes.openHome(nav),
|
|
577
|
-
},
|
|
578
|
-
};
|
|
579
|
-
}
|
|
580
|
-
//# sourceMappingURL=useReplayPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReplayPage.js","sourceRoot":"","sources":["../../src/react/useReplayPage.ts"],"names":[],"mappings":"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"}
|