@tiledev/sdk-apptile-live-selling 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +443 -34
  2. package/dist/auctionComments.d.ts +25 -0
  3. package/dist/auctionComments.d.ts.map +1 -0
  4. package/dist/auctionComments.js +28 -0
  5. package/dist/auctionComments.js.map +1 -0
  6. package/dist/auctionRules.d.ts +76 -0
  7. package/dist/auctionRules.d.ts.map +1 -0
  8. package/dist/auctionRules.js +106 -0
  9. package/dist/auctionRules.js.map +1 -0
  10. package/dist/auctions.d.ts.map +1 -1
  11. package/dist/auctions.js +19 -10
  12. package/dist/auctions.js.map +1 -1
  13. package/dist/client.d.ts +51 -2
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +123 -23
  16. package/dist/client.js.map +1 -1
  17. package/dist/commentHistory.d.ts +66 -0
  18. package/dist/commentHistory.d.ts.map +1 -0
  19. package/dist/commentHistory.js +125 -0
  20. package/dist/commentHistory.js.map +1 -0
  21. package/dist/engine.native.d.ts.map +1 -1
  22. package/dist/engine.native.js +17 -845
  23. package/dist/engine.native.js.map +1 -1
  24. package/dist/giveawayPrize.d.ts +13 -0
  25. package/dist/giveawayPrize.d.ts.map +1 -0
  26. package/dist/giveawayPrize.js +18 -0
  27. package/dist/giveawayPrize.js.map +1 -0
  28. package/dist/giveawayPrizeLines.d.ts +67 -0
  29. package/dist/giveawayPrizeLines.d.ts.map +1 -0
  30. package/dist/giveawayPrizeLines.js +48 -0
  31. package/dist/giveawayPrizeLines.js.map +1 -0
  32. package/dist/giveawayRoster.d.ts +53 -0
  33. package/dist/giveawayRoster.d.ts.map +1 -0
  34. package/dist/giveawayRoster.js +93 -0
  35. package/dist/giveawayRoster.js.map +1 -0
  36. package/dist/heldComments.d.ts +29 -0
  37. package/dist/heldComments.d.ts.map +1 -0
  38. package/dist/heldComments.js +61 -0
  39. package/dist/heldComments.js.map +1 -0
  40. package/dist/hiddenShows.d.ts +34 -0
  41. package/dist/hiddenShows.d.ts.map +1 -0
  42. package/dist/hiddenShows.js +42 -0
  43. package/dist/hiddenShows.js.map +1 -0
  44. package/dist/index.d.ts +17 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +86 -3
  47. package/dist/index.js.map +1 -1
  48. package/dist/liveShow.d.ts +58 -0
  49. package/dist/liveShow.d.ts.map +1 -0
  50. package/dist/liveShow.js +55 -0
  51. package/dist/liveShow.js.map +1 -0
  52. package/dist/pipWindow.d.ts +85 -0
  53. package/dist/pipWindow.d.ts.map +1 -0
  54. package/dist/pipWindow.js +88 -0
  55. package/dist/pipWindow.js.map +1 -0
  56. package/dist/polls.d.ts.map +1 -1
  57. package/dist/polls.js +3 -0
  58. package/dist/polls.js.map +1 -1
  59. package/dist/react/LiveSellingProvider.d.ts +10 -1
  60. package/dist/react/LiveSellingProvider.d.ts.map +1 -1
  61. package/dist/react/LiveSellingProvider.js +6 -2
  62. package/dist/react/LiveSellingProvider.js.map +1 -1
  63. package/dist/react/LiveVideoTarget.d.ts.map +1 -1
  64. package/dist/react/LiveVideoTarget.js +41 -3
  65. package/dist/react/LiveVideoTarget.js.map +1 -1
  66. package/dist/react/clocks.d.ts +29 -0
  67. package/dist/react/clocks.d.ts.map +1 -0
  68. package/dist/react/clocks.js +124 -0
  69. package/dist/react/clocks.js.map +1 -0
  70. package/dist/react/index.d.ts +7 -2
  71. package/dist/react/index.d.ts.map +1 -1
  72. package/dist/react/index.js +15 -1
  73. package/dist/react/index.js.map +1 -1
  74. package/dist/react/index.web.d.ts +9 -2
  75. package/dist/react/index.web.d.ts.map +1 -1
  76. package/dist/react/index.web.js +27 -4
  77. package/dist/react/index.web.js.map +1 -1
  78. package/dist/react/startSignIn.d.ts +3 -0
  79. package/dist/react/startSignIn.d.ts.map +1 -0
  80. package/dist/react/startSignIn.js +19 -0
  81. package/dist/react/startSignIn.js.map +1 -0
  82. package/dist/react/useAuctionBidGate.d.ts +54 -4
  83. package/dist/react/useAuctionBidGate.d.ts.map +1 -1
  84. package/dist/react/useAuctionBidGate.js +169 -25
  85. package/dist/react/useAuctionBidGate.js.map +1 -1
  86. package/dist/react/useAuctionWins.d.ts +9 -1
  87. package/dist/react/useAuctionWins.d.ts.map +1 -1
  88. package/dist/react/useAuctionWins.js +9 -3
  89. package/dist/react/useAuctionWins.js.map +1 -1
  90. package/dist/react/useGiveawayEntry.d.ts +59 -0
  91. package/dist/react/useGiveawayEntry.d.ts.map +1 -0
  92. package/dist/react/useGiveawayEntry.js +170 -0
  93. package/dist/react/useGiveawayEntry.js.map +1 -0
  94. package/dist/react/useGiveawayPrize.d.ts +12 -0
  95. package/dist/react/useGiveawayPrize.d.ts.map +1 -0
  96. package/dist/react/useGiveawayPrize.js +53 -0
  97. package/dist/react/useGiveawayPrize.js.map +1 -0
  98. package/dist/react/useHiddenShows.d.ts +10 -0
  99. package/dist/react/useHiddenShows.d.ts.map +1 -0
  100. package/dist/react/useHiddenShows.js +30 -0
  101. package/dist/react/useHiddenShows.js.map +1 -0
  102. package/dist/react/useLiveSession.d.ts +7 -3
  103. package/dist/react/useLiveSession.d.ts.map +1 -1
  104. package/dist/react/useLiveSession.js +522 -157
  105. package/dist/react/useLiveSession.js.map +1 -1
  106. package/dist/react/useLiveShow.d.ts +3 -0
  107. package/dist/react/useLiveShow.d.ts.map +1 -0
  108. package/dist/react/useLiveShow.js +21 -0
  109. package/dist/react/useLiveShow.js.map +1 -0
  110. package/dist/react/useLiveStreams.d.ts.map +1 -1
  111. package/dist/react/useLiveStreams.js +6 -2
  112. package/dist/react/useLiveStreams.js.map +1 -1
  113. package/dist/react/useOngoingLive.d.ts +1 -0
  114. package/dist/react/useOngoingLive.d.ts.map +1 -1
  115. package/dist/react/useOngoingLive.js +7 -1
  116. package/dist/react/useOngoingLive.js.map +1 -1
  117. package/dist/react/useReplays.d.ts +12 -0
  118. package/dist/react/useReplays.d.ts.map +1 -1
  119. package/dist/react/useReplays.js +56 -24
  120. package/dist/react/useReplays.js.map +1 -1
  121. package/dist/react/useStreamInfo.d.ts +13 -2
  122. package/dist/react/useStreamInfo.d.ts.map +1 -1
  123. package/dist/react/useStreamInfo.js +31 -5
  124. package/dist/react/useStreamInfo.js.map +1 -1
  125. package/dist/replayPages.d.ts +31 -0
  126. package/dist/replayPages.d.ts.map +1 -0
  127. package/dist/replayPages.js +34 -0
  128. package/dist/replayPages.js.map +1 -0
  129. package/dist/replays.d.ts +7 -0
  130. package/dist/replays.d.ts.map +1 -1
  131. package/dist/replays.js +52 -22
  132. package/dist/replays.js.map +1 -1
  133. package/dist/session.d.ts +39 -6
  134. package/dist/session.d.ts.map +1 -1
  135. package/dist/session.js +209 -22
  136. package/dist/session.js.map +1 -1
  137. package/dist/sessionTypes.d.ts +190 -14
  138. package/dist/sessionTypes.d.ts.map +1 -1
  139. package/dist/sessionTypes.js +2 -1
  140. package/dist/sessionTypes.js.map +1 -1
  141. package/dist/shopifyCommerce.d.ts +149 -0
  142. package/dist/shopifyCommerce.d.ts.map +1 -0
  143. package/dist/shopifyCommerce.js +123 -0
  144. package/dist/shopifyCommerce.js.map +1 -0
  145. package/dist/shopifyIdentity.d.ts +51 -0
  146. package/dist/shopifyIdentity.d.ts.map +1 -0
  147. package/dist/shopifyIdentity.js +52 -0
  148. package/dist/shopifyIdentity.js.map +1 -0
  149. package/dist/shopifyIds.d.ts +9 -0
  150. package/dist/shopifyIds.d.ts.map +1 -0
  151. package/dist/shopifyIds.js +18 -0
  152. package/dist/shopifyIds.js.map +1 -0
  153. package/dist/showLinks.d.ts +24 -0
  154. package/dist/showLinks.d.ts.map +1 -0
  155. package/dist/showLinks.js +23 -0
  156. package/dist/showLinks.js.map +1 -0
  157. package/dist/showLots.d.ts +28 -0
  158. package/dist/showLots.d.ts.map +1 -0
  159. package/dist/showLots.js +51 -0
  160. package/dist/showLots.js.map +1 -0
  161. package/dist/showNames.d.ts +45 -0
  162. package/dist/showNames.d.ts.map +1 -0
  163. package/dist/showNames.js +74 -0
  164. package/dist/showNames.js.map +1 -0
  165. package/dist/streams.d.ts +27 -1
  166. package/dist/streams.d.ts.map +1 -1
  167. package/dist/streams.js +84 -21
  168. package/dist/streams.js.map +1 -1
  169. package/dist/types.d.ts +192 -8
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js +2 -1
  172. package/dist/types.js.map +1 -1
  173. package/dist/wire.d.ts +31 -0
  174. package/dist/wire.d.ts.map +1 -1
  175. package/dist/wire.js +25 -0
  176. package/dist/wire.js.map +1 -1
  177. package/dist/zego.d.ts +3 -1
  178. package/dist/zego.d.ts.map +1 -1
  179. package/dist/zego.js +1 -1
  180. package/dist/zegoEngine.d.ts +168 -0
  181. package/dist/zegoEngine.d.ts.map +1 -0
  182. package/dist/zegoEngine.js +1052 -0
  183. package/dist/zegoEngine.js.map +1 -0
  184. package/package.json +3 -2
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useGiveawayEntry = useGiveawayEntry;
4
+ /**
5
+ * `useGiveawayEntry` — the shopper's part in a giveaway, on one screen (0.9.0, "SDK move 8").
6
+ *
7
+ * Every live screen with a giveaway wrote the same flow around `actions.enterGiveaway`, and the copies
8
+ * drifted (Freckled Poppy's Live screen inline, ENG-583; amore-v2's `useLiveGiveawaysAndPolls`):
9
+ *
10
+ * - **The entry sheet:** open and closed by the screen, and closed by the host's draw (an Enter button
11
+ * for a giveaway that is over) or the giveaway going (retracted, the show ended).
12
+ * - **Entering needs a sign-in.** `signInToEnter()` starts the app's sign-in; once the shopper is back
13
+ * on this screen signed in (`isLoggedIn` and `screenOnShow`), the sheet opens again if the giveaway
14
+ * is still open and not drawn, and the shopper taps Enter themselves. Back on show still signed out
15
+ * (a Sign In page closed, a system sheet dismissed: `screenOnShow` false, then true), nothing reopens,
16
+ * and a later sign-in elsewhere doesn't raise it.
17
+ * - **The entry** (`enter`): `entering` while it goes, `entryFailed` when the host didn't take it. With
18
+ * a name the shopper typed ("Entering As:"), the name is saved first and the entry goes once the
19
+ * session holds it, as the session sends the entry under the name it holds at that moment.
20
+ * - **The draw** (`draw`): handed over once its roster is ready (the session waits for it, ENG-705), the
21
+ * same object until another winner; `youWon` from the session (`giveaway.result.isYou`). A draw already
22
+ * on the session as the screen opens happened while the shopper was elsewhere: it is let go rather
23
+ * than played late.
24
+ *
25
+ * It takes the session as a value rather than reading it, as the clocks take a number: a test drives it
26
+ * with a plain object, and it loads where the native session can't (an app's test runner, the web).
27
+ * The screen decides when a sheet can show (`screenOnShow`): a sheet is a `Modal`, which can't open
28
+ * over a Sign In page or while another sheet is still going.
29
+ */
30
+ const react_1 = require("react");
31
+ const client_1 = require("../client");
32
+ const sessionTypes_1 = require("../sessionTypes");
33
+ const startSignIn_1 = require("./startSignIn");
34
+ function useGiveawayEntry(options) {
35
+ var _a, _b, _c, _d, _e;
36
+ const { session, canEnter, isLoggedIn } = options;
37
+ const screenOnShow = (_a = options.screenOnShow) !== null && _a !== void 0 ? _a : true;
38
+ const giveaway = (_b = session.giveaway) !== null && _b !== void 0 ? _b : sessionTypes_1.IDLE_GIVEAWAY;
39
+ const { dismissGiveawayResult } = session.actions;
40
+ const result = giveaway.result;
41
+ const drawn = !!result;
42
+ const open = canEnter && ((_c = giveaway.active) === null || _c === void 0 ? void 0 : _c.status) === 'active' && !drawn ? giveaway.active : null;
43
+ /** What the actions read when they run, as it is now. */
44
+ const latest = (0, react_1.useRef)({ options, actions: session.actions });
45
+ latest.current = { options, actions: session.actions };
46
+ const mounted = (0, react_1.useRef)(true);
47
+ (0, react_1.useEffect)(() => () => {
48
+ mounted.current = false;
49
+ }, []);
50
+ // ─── The entry sheet ─────────────────────────────────────────────────────────────────────────────
51
+ const [sheetOpen, setSheetOpen] = (0, react_1.useState)(false);
52
+ const [entering, setEntering] = (0, react_1.useState)(false);
53
+ const [entryFailed, setEntryFailed] = (0, react_1.useState)(false);
54
+ // The host's draw closes the sheet (an Enter button for a giveaway that is over), and so does the
55
+ // giveaway going (retracted, or the show ending).
56
+ (0, react_1.useEffect)(() => {
57
+ if (drawn || !open)
58
+ setSheetOpen(false);
59
+ }, [drawn, open]);
60
+ const openSheet = (0, react_1.useCallback)(() => {
61
+ setEntryFailed(false);
62
+ setSheetOpen(true);
63
+ }, []);
64
+ const closeSheet = (0, react_1.useCallback)(() => setSheetOpen(false), []);
65
+ // ─── Entering ────────────────────────────────────────────────────────────────────────────────────
66
+ const enterNow = (0, react_1.useCallback)(async () => {
67
+ var _a;
68
+ setEntryFailed(false);
69
+ setEntering(true);
70
+ let entered = false;
71
+ try {
72
+ const answer = await latest.current.actions.enterGiveaway((_a = latest.current.options.cartId) !== null && _a !== void 0 ? _a : null);
73
+ entered = (answer === null || answer === void 0 ? void 0 : answer.entered) === true;
74
+ }
75
+ catch (caught) {
76
+ (0, client_1.getLogger)().error(caught, { at: 'giveawayEntry.enter' });
77
+ }
78
+ if (!mounted.current)
79
+ return;
80
+ setEntering(false);
81
+ if (!entered)
82
+ setEntryFailed(true);
83
+ }, []);
84
+ // "Entering As:": the name is saved first, and the entry goes once the session holds it.
85
+ const named = !!((_d = session.viewerName) === null || _d === void 0 ? void 0 : _d.trim());
86
+ const [enterOnceNamed, setEnterOnceNamed] = (0, react_1.useState)(false);
87
+ (0, react_1.useEffect)(() => {
88
+ if (!enterOnceNamed || !named)
89
+ return;
90
+ setEnterOnceNamed(false);
91
+ void enterNow();
92
+ }, [enterOnceNamed, named, enterNow]);
93
+ const enter = (0, react_1.useCallback)((typedName) => {
94
+ if (!typedName) {
95
+ void enterNow();
96
+ return;
97
+ }
98
+ setEntryFailed(false);
99
+ setEntering(true);
100
+ void (async () => {
101
+ const saved = await latest.current.actions.chooseViewerName(typedName).catch(() => null);
102
+ if (!mounted.current)
103
+ return;
104
+ if (saved)
105
+ setEnterOnceNamed(true);
106
+ else {
107
+ setEntering(false);
108
+ setEntryFailed(true);
109
+ }
110
+ })();
111
+ }, [enterNow]);
112
+ // ─── Signing in to enter, then back to the sheet ─────────────────────────────────────────────────
113
+ /** The shopper asked to enter signed out: once they are back here signed in, the sheet opens again. */
114
+ const [reopenAfterSignIn, setReopenAfterSignIn] = (0, react_1.useState)(false);
115
+ const signInToEnter = (0, react_1.useCallback)(() => {
116
+ setReopenAfterSignIn(true);
117
+ (0, startSignIn_1.startTheSignIn)(latest.current.options.startSignIn, 'giveawayEntry.startSignIn');
118
+ }, []);
119
+ const wasOnShow = (0, react_1.useRef)(screenOnShow);
120
+ (0, react_1.useEffect)(() => {
121
+ const cameBackOnShow = screenOnShow && !wasOnShow.current;
122
+ wasOnShow.current = screenOnShow;
123
+ if (!reopenAfterSignIn)
124
+ return;
125
+ // Drawn, retracted or ended meanwhile: there is nothing to enter any more.
126
+ if (!open)
127
+ setReopenAfterSignIn(false);
128
+ else if (isLoggedIn && screenOnShow) {
129
+ setReopenAfterSignIn(false);
130
+ openSheet();
131
+ }
132
+ // Back on show without signing in: nothing reopens, now or after a later sign-in elsewhere.
133
+ else if (!isLoggedIn && cameBackOnShow)
134
+ setReopenAfterSignIn(false);
135
+ }, [reopenAfterSignIn, open, isLoggedIn, screenOnShow, openSheet]);
136
+ // ─── The draw ────────────────────────────────────────────────────────────────────────────────────
137
+ const ready = !!result && result.entrantNamesReady;
138
+ const winnerName = (_e = result === null || result === void 0 ? void 0 : result.winnerName) !== null && _e !== void 0 ? _e : null;
139
+ const resultNow = (0, react_1.useRef)(result);
140
+ resultNow.current = result;
141
+ const draw = (0, react_1.useMemo)(() => {
142
+ const drawnNow = resultNow.current;
143
+ return ready && drawnNow ? { winnerName: drawnNow.winnerName, entrantNames: drawnNow.entrantNames } : null;
144
+ // A new draw only for a new winner or readiness: the roster never changes once ready (the session's
145
+ // promise), and the session hands over a new `result` object on every read of the record.
146
+ }, [ready, winnerName]);
147
+ const youWon = !!draw && !!(result === null || result === void 0 ? void 0 : result.isYou);
148
+ // A draw already on the session as the screen opens happened while the shopper was elsewhere.
149
+ const drawOnArrival = (0, react_1.useRef)(drawn);
150
+ (0, react_1.useEffect)(() => {
151
+ if (!drawOnArrival.current)
152
+ return;
153
+ drawOnArrival.current = false;
154
+ dismissGiveawayResult();
155
+ }, [dismissGiveawayResult]);
156
+ return {
157
+ open,
158
+ sheetOpen: sheetOpen && !!open,
159
+ openSheet,
160
+ closeSheet,
161
+ enter,
162
+ entering,
163
+ entryFailed,
164
+ signInToEnter,
165
+ draw,
166
+ youWon,
167
+ drawDone: dismissGiveawayResult,
168
+ };
169
+ }
170
+ //# sourceMappingURL=useGiveawayEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGiveawayEntry.js","sourceRoot":"","sources":["../../src/react/useGiveawayEntry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { LiveProduct, LiveProductVariant } from '../sessionTypes';
2
+ import type { LiveGiveaway } from '../types';
3
+ export interface UseGiveawayPrizeState<TRaw = unknown> {
4
+ /** The prize as the adapter reads it (your own product on `raw`); null until it answers, or if it can't. */
5
+ product: LiveProduct<TRaw> | null;
6
+ /** The variant given away, among the product's; null when the record names none or it's gone. */
7
+ variant: LiveProductVariant | null;
8
+ /** The read's failure, or null. Not logged. */
9
+ readError: unknown;
10
+ }
11
+ export declare function useGiveawayPrize<TRaw = unknown>(giveaway: Pick<LiveGiveaway, 'storeProductId' | 'variantId'> | null | undefined): UseGiveawayPrizeState<TRaw>;
12
+ //# sourceMappingURL=useGiveawayPrize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGiveawayPrize.d.ts","sourceRoot":"","sources":["../../src/react/useGiveawayPrize.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,qBAAqB,CAAC,IAAI,GAAG,OAAO;IACnD,4GAA4G;IAC5G,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,iGAAiG;IACjG,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAG,OAAO,EAC7C,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9E,qBAAqB,CAAC,IAAI,CAAC,CA4B7B"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useGiveawayPrize = useGiveawayPrize;
4
+ /**
5
+ * `useGiveawayPrize(giveaway)` — the giveaway's prize in the catalogue (0.9.0, "SDK move 8").
6
+ *
7
+ * The host picks a prize from the whole catalogue, kept apart from the show's lots, so it is usually
8
+ * not one of `session.products`. The record names it, its variant, its price and its photo (0.9.0), so
9
+ * a sheet is complete enough to enter from at once; the catalogue adds the description and the
10
+ * variant's price now. Freckled Poppy and amore-v2 each read it by hand.
11
+ *
12
+ * One `productsByIds` read through the configured commerce adapter when the prize changes. Cleared
13
+ * first, because the host can change the prize and the last prize's photo mustn't stand in for the new
14
+ * one; an answer for an earlier prize is dropped. `variant` is the one given away, the record's bare id
15
+ * matched to the catalogue's (`isTheVariant`). A failed read comes back in `readError`, for the app to
16
+ * report, as `streams.destinationFor`'s does; nothing is logged here. No adapter: nothing is read.
17
+ */
18
+ const react_1 = require("react");
19
+ const client_1 = require("../client");
20
+ const giveawayPrize_1 = require("../giveawayPrize");
21
+ function useGiveawayPrize(giveaway) {
22
+ var _a, _b;
23
+ const prizeId = (_a = giveaway === null || giveaway === void 0 ? void 0 : giveaway.storeProductId) !== null && _a !== void 0 ? _a : null;
24
+ const recordVariantId = (_b = giveaway === null || giveaway === void 0 ? void 0 : giveaway.variantId) !== null && _b !== void 0 ? _b : null;
25
+ const [answer, setAnswer] = (0, react_1.useState)(null);
26
+ const [readError, setReadError] = (0, react_1.useState)(null);
27
+ (0, react_1.useEffect)(() => {
28
+ setAnswer(null);
29
+ setReadError(null);
30
+ const commerce = (0, client_1.getCommerce)();
31
+ if (!prizeId || !commerce)
32
+ return;
33
+ let stillWanted = true;
34
+ commerce
35
+ .productsByIds([prizeId])
36
+ .then(([product]) => {
37
+ var _a;
38
+ if (stillWanted)
39
+ setAnswer({ prizeId, product: (_a = product) !== null && _a !== void 0 ? _a : null });
40
+ })
41
+ .catch((caught) => {
42
+ if (stillWanted)
43
+ setReadError(caught);
44
+ });
45
+ return () => {
46
+ stillWanted = false;
47
+ };
48
+ }, [prizeId]);
49
+ const product = answer && answer.prizeId === prizeId ? answer.product : null;
50
+ const variant = (0, react_1.useMemo)(() => (0, giveawayPrize_1.givenAwayVariant)(product, recordVariantId), [product, recordVariantId]);
51
+ return (0, react_1.useMemo)(() => ({ product, variant, readError }), [product, variant, readError]);
52
+ }
53
+ //# sourceMappingURL=useGiveawayPrize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGiveawayPrize.js","sourceRoot":"","sources":["../../src/react/useGiveawayPrize.ts"],"names":[],"mappings":";;AA8BA,4CA8BC;AA5DD;;;;;;;;;;;;;GAaG;AACH,iCAAqD;AAErD,sCAAwC;AACxC,oDAAoD;AAapD,SAAgB,gBAAgB,CAC9B,QAA+E;;IAE/E,MAAM,OAAO,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,mCAAI,IAAI,CAAC;IACjD,MAAM,eAAe,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,mCAAI,IAAI,CAAC;IACpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAgE,IAAI,CAAC,CAAC;IAC1G,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,IAAI,CAAC,CAAC;IAE1D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,QAAQ;aACL,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;aACxB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE;;YAClB,IAAI,WAAW;gBAAE,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAC,OAAyC,mCAAI,IAAI,EAAE,CAAC,CAAC;QACvG,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE;YACzB,IAAI,WAAW;gBAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,gCAAgB,EAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IACtG,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface HiddenShowsForViewer {
2
+ isHidden: (show: {
3
+ title: string;
4
+ } | null | undefined) => boolean;
5
+ visible: <Show extends {
6
+ title: string;
7
+ }>(shows: Show[]) => Show[];
8
+ }
9
+ export declare function useHiddenShows(): HiddenShowsForViewer;
10
+ //# sourceMappingURL=useHiddenShows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHiddenShows.d.ts","sourceRoot":"","sources":["../../src/react/useHiddenShows.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,KAAK,OAAO,CAAC;IAClE,OAAO,EAAE,CAAC,IAAI,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;CACpE;AAED,wBAAgB,cAAc,IAAI,oBAAoB,CAYrD"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useHiddenShows = useHiddenShows;
4
+ /**
5
+ * `useHiddenShows()` — the shows this viewer may see (0.9.0), for the hooks that hand out shows
6
+ * (`useReplays`, `useOngoingLive`, `useLiveStreams`, `useStreamInfo`) and an app's own lists: the viewer
7
+ * from `LiveSellingProvider`'s `viewerEmail`, the rule from the config's `hiddenShows`.
8
+ *
9
+ * `isHidden(show)` is true for a show they must not be shown; `visible(shows)` leaves those out, in the
10
+ * same order (the same array when none is). The object changes only when the viewer or the rule does,
11
+ * so a memo that depends on it filters again on a sign-in or sign-out, and not otherwise.
12
+ *
13
+ * Its own file rather than the provider's, so a test that stands in for the provider module
14
+ * (`useLiveSelling` alone) still gets it.
15
+ */
16
+ const react_1 = require("react");
17
+ const client_1 = require("../client");
18
+ const hiddenShows_1 = require("../hiddenShows");
19
+ const LiveSellingProvider_1 = require("./LiveSellingProvider");
20
+ function useHiddenShows() {
21
+ const { ready, viewerEmail } = (0, LiveSellingProvider_1.useLiveSelling)();
22
+ // Read once the client is configured; before that nothing is handed out anyway.
23
+ const rule = ready ? (0, client_1.hiddenShowsRule)() : null;
24
+ const email = viewerEmail !== null && viewerEmail !== void 0 ? viewerEmail : null;
25
+ return (0, react_1.useMemo)(() => ({
26
+ isHidden: (show) => (0, hiddenShows_1.isHiddenFrom)(show, email, rule),
27
+ visible: (shows) => (0, hiddenShows_1.withoutHiddenShows)(shows, email, rule),
28
+ }), [email, rule]);
29
+ }
30
+ //# sourceMappingURL=useHiddenShows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHiddenShows.js","sourceRoot":"","sources":["../../src/react/useHiddenShows.ts"],"names":[],"mappings":";;AAuBA,wCAYC;AAnCD;;;;;;;;;;;GAWG;AACH,iCAAgC;AAEhC,sCAA4C;AAC5C,gDAAkE;AAClE,+DAAuD;AAOvD,SAAgB,cAAc;IAC5B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAA,oCAAc,GAAE,CAAC;IAChD,gFAAgF;IAChF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,wBAAe,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC;IAClC,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAY,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QACnD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gCAAkB,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;KAC3D,CAAC,EACF,CAAC,KAAK,EAAE,IAAI,CAAC,CACd,CAAC;AACJ,CAAC"}
@@ -17,9 +17,13 @@ export interface LiveSessionProviderProps {
17
17
  /** Shown next to this viewer's own comments and sent with them. Overrides the identity adapter. */
18
18
  viewerName?: string | null;
19
19
  /**
20
- * Called when the user taps the system PIP window to come back. Navigate to your live screen — the
21
- * window *is* that screen as far as they are concerned. The SDK cannot do this itself: it lives
22
- * above the navigator and has no route context.
20
+ * Called when the system PIP window gives the picture back to a full-screen player: the user expanded
21
+ * a window that the player opened (or, on iOS, came back to the app with it still up). Navigate to
22
+ * your live screen — the window *is* that screen as far as they are concerned. The SDK cannot do this
23
+ * itself: it lives above the navigator and has no route context.
24
+ *
25
+ * Not called for a window that opened from your in-app bubble: coming back puts the picture in the
26
+ * bubble again (`pipMode` `'inapp'`), where it was, and there is nowhere to navigate.
23
27
  */
24
28
  onPipRestore?: (streamingId: string | undefined) => void;
25
29
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"useLiveSession.d.ts","sourceRoot":"","sources":["../../src/react/useLiveSession.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,OAAO,KAAK,EAMV,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAiCzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAG,OAAO,KAAK,WAAW,CAAC,IAAI,CAAC,CAIlE;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,SAAS,CAAC;CACrB;AA6nCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,+FAwCnF"}
1
+ {"version":3,"file":"useLiveSession.d.ts","sourceRoot":"","sources":["../../src/react/useLiveSession.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA4CvC,OAAO,KAAK,EASV,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAiCzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAG,OAAO,KAAK,WAAW,CAAC,IAAI,CAAC,CAIlE;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAy9CD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,+FA0CnF"}