@oxyhq/services 27.0.0 → 27.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/commonjs/index.js +29 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/FollowButton.js +3 -5
  4. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  5. package/lib/commonjs/ui/components/FollowTargetButton.js +292 -0
  6. package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -0
  7. package/lib/commonjs/ui/hooks/useFollowTarget.js +140 -0
  8. package/lib/commonjs/ui/hooks/useFollowTarget.js.map +1 -0
  9. package/lib/commonjs/ui/screens/AccountMembersScreen.js +49 -6
  10. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  11. package/lib/commonjs/ui/stores/followTargetStore.js +113 -0
  12. package/lib/commonjs/ui/stores/followTargetStore.js.map +1 -0
  13. package/lib/commonjs/ui/stores/resetSessionScopedStores.js +2 -0
  14. package/lib/commonjs/ui/stores/resetSessionScopedStores.js.map +1 -1
  15. package/lib/module/index.js +4 -0
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/ui/components/FollowButton.js +3 -5
  18. package/lib/module/ui/components/FollowButton.js.map +1 -1
  19. package/lib/module/ui/components/FollowTargetButton.js +287 -0
  20. package/lib/module/ui/components/FollowTargetButton.js.map +1 -0
  21. package/lib/module/ui/hooks/useFollowTarget.js +136 -0
  22. package/lib/module/ui/hooks/useFollowTarget.js.map +1 -0
  23. package/lib/module/ui/screens/AccountMembersScreen.js +49 -6
  24. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  25. package/lib/module/ui/stores/followTargetStore.js +107 -0
  26. package/lib/module/ui/stores/followTargetStore.js.map +1 -0
  27. package/lib/module/ui/stores/resetSessionScopedStores.js +2 -0
  28. package/lib/module/ui/stores/resetSessionScopedStores.js.map +1 -1
  29. package/lib/typescript/commonjs/index.d.ts +5 -0
  30. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts +119 -0
  33. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -0
  34. package/lib/typescript/commonjs/ui/hooks/useFollowTarget.d.ts +41 -0
  35. package/lib/typescript/commonjs/ui/hooks/useFollowTarget.d.ts.map +1 -0
  36. package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/ui/stores/followTargetStore.d.ts +70 -0
  38. package/lib/typescript/commonjs/ui/stores/followTargetStore.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/ui/stores/resetSessionScopedStores.d.ts.map +1 -1
  40. package/lib/typescript/module/index.d.ts +5 -0
  41. package/lib/typescript/module/index.d.ts.map +1 -1
  42. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  43. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts +119 -0
  44. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -0
  45. package/lib/typescript/module/ui/hooks/useFollowTarget.d.ts +41 -0
  46. package/lib/typescript/module/ui/hooks/useFollowTarget.d.ts.map +1 -0
  47. package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  48. package/lib/typescript/module/ui/stores/followTargetStore.d.ts +70 -0
  49. package/lib/typescript/module/ui/stores/followTargetStore.d.ts.map +1 -0
  50. package/lib/typescript/module/ui/stores/resetSessionScopedStores.d.ts.map +1 -1
  51. package/package.json +3 -3
  52. package/src/index.ts +11 -0
  53. package/src/ui/components/FollowButton.tsx +3 -5
  54. package/src/ui/components/FollowTargetButton.tsx +326 -0
  55. package/src/ui/components/__tests__/followTargetButton.test.ts +132 -0
  56. package/src/ui/hooks/useFollowTarget.ts +194 -0
  57. package/src/ui/screens/AccountMembersScreen.tsx +62 -6
  58. package/src/ui/stores/__tests__/resetSessionScopedStores.test.ts +23 -0
  59. package/src/ui/stores/followTargetStore.ts +119 -0
  60. package/src/ui/stores/resetSessionScopedStores.ts +2 -0
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "FollowButton", {
39
39
  return _FollowButton.default;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "FollowTargetButton", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _FollowTargetButton.FollowTargetButton;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "IdentityBoundSessionError", {
43
49
  enumerable: true,
44
50
  get: function () {
@@ -159,6 +165,12 @@ Object.defineProperty(exports, "SurfaceHeaderAction", {
159
165
  return _SurfaceHeaderAction.SurfaceHeaderAction;
160
166
  }
161
167
  });
168
+ Object.defineProperty(exports, "UNKNOWN_FOLLOW_STATUS", {
169
+ enumerable: true,
170
+ get: function () {
171
+ return _followTargetStore.UNKNOWN_FOLLOW_STATUS;
172
+ }
173
+ });
162
174
  Object.defineProperty(exports, "clearedFieldsFromAccountUpdate", {
163
175
  enumerable: true,
164
176
  get: function () {
@@ -453,6 +465,18 @@ Object.defineProperty(exports, "useFollow", {
453
465
  return _useFollow.useFollow;
454
466
  }
455
467
  });
468
+ Object.defineProperty(exports, "useFollowTarget", {
469
+ enumerable: true,
470
+ get: function () {
471
+ return _useFollowTarget.useFollowTarget;
472
+ }
473
+ });
474
+ Object.defineProperty(exports, "useFollowTargetStore", {
475
+ enumerable: true,
476
+ get: function () {
477
+ return _followTargetStore.useFollowTargetStore;
478
+ }
479
+ });
456
480
  Object.defineProperty(exports, "useFollowerCounts", {
457
481
  enumerable: true,
458
482
  get: function () {
@@ -735,6 +759,9 @@ var _OxyOAuthCallback = require("./ui/components/OxyOAuthCallback.js");
735
759
  var _OxyConsentScreen = require("./ui/components/OxyConsentScreen.js");
736
760
  var _RequireOxyAuth = require("./ui/components/RequireOxyAuth.js");
737
761
  var _FollowButton = _interopRequireDefault(require("./ui/components/FollowButton.js"));
762
+ var _FollowTargetButton = require("./ui/components/FollowTargetButton.js");
763
+ var _useFollowTarget = require("./ui/hooks/useFollowTarget.js");
764
+ var _followTargetStore = require("./ui/stores/followTargetStore.js");
738
765
  var _OxyPayButton = _interopRequireDefault(require("./ui/components/OxyPayButton.js"));
739
766
  var _LogoIcon = require("./ui/components/logo/LogoIcon.js");
740
767
  var _LogoText = require("./ui/components/logo/LogoText.js");
@@ -872,6 +899,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
872
899
  // Gates on `useOxy().canUsePrivateApi` / `isPrivateApiPending` — never flashes the
873
900
  // wall before the device-first cold boot resolves. Opens the ONE account dialog.
874
901
 
902
+ // The follow graph (#809): follows anything registered, not just users.
903
+
875
904
  // Sidebar account trigger. Pressing `ProfileButton` opens the unified
876
905
  // `OxyAccountDialogScreen` (the single account switcher + sign-in surface) via
877
906
  // `useOxy().openAccountDialog`.
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_reactNative","_OxyProvider","_interopRequireDefault","_OxyContext","_useAuth","_identityBinding","_authStore","_accountStore","_assetStore","_useAssets","_useFileDownloadUrl","_useFollow","_useStorage","_useAccountQueries","_useServicesQueries","_useSecurityQueries","_useAuthMethods","_usePaymentQueries","_useAccountMutations","_useServicesMutations","_mutationFactory","_mutationKeys","_queryKeys","_userCache","_useMutationStatus","_useOnlineStatus","_useOxyEvent","_errorHandlers","_useFileFiltering","_OxySignInButton","_oauthPopup","_OxyAuthPrompt","_OxyOAuthCallback","_OxyConsentScreen","_RequireOxyAuth","_FollowButton","_OxyPayButton","_LogoIcon","_LogoText","_ProfileButton","_OxyAuthChooser","_OxySignInRequestSurface","_useSwitchableAccounts","_ProfileScreen","_ManageAccountScreen","_NotificationsScreen","_PreferencesScreen","_ConnectedAppsScreen","_CreateAccountScreen","_AccountMembersScreen","_AccountSettingsScreen","_bottomSheetManager","_useSurfaceHeader","_SurfaceHeaderAction","_accountDialogManager","e","__esModule","default","setPlatformOS","Platform","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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D,OAAA;AACA,IAAAsD,oBAAA,GAAAtD,OAAA;AAMA,IAAAuD,qBAAA,GAAAvD,OAAA;AAI8C,SAAAG,uBAAAqD,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhW9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAIA,IAAAG,mBAAa,EAACC,qBAAQ,CAACC,EAAgB,CAAC;;AAExC;AACA;AACA;;AAMA;AACA;AACA;;AAGA;AACA;AACA;;AAgBA;AACA;AACA;;AAOA;AACA;AACA;;AAgCA;;AAeA;AACA;AACA;;AA2BA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;;AAMA;AACA;AACA;;AASA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAQA;AACA;AACA;AACA;;AAsBA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAOA;;AAKA;AACA;AACA;;AAIA;AACA;AACA;;AAIA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_reactNative","_OxyProvider","_interopRequireDefault","_OxyContext","_useAuth","_identityBinding","_authStore","_accountStore","_assetStore","_useAssets","_useFileDownloadUrl","_useFollow","_useStorage","_useAccountQueries","_useServicesQueries","_useSecurityQueries","_useAuthMethods","_usePaymentQueries","_useAccountMutations","_useServicesMutations","_mutationFactory","_mutationKeys","_queryKeys","_userCache","_useMutationStatus","_useOnlineStatus","_useOxyEvent","_errorHandlers","_useFileFiltering","_OxySignInButton","_oauthPopup","_OxyAuthPrompt","_OxyOAuthCallback","_OxyConsentScreen","_RequireOxyAuth","_FollowButton","_FollowTargetButton","_useFollowTarget","_followTargetStore","_OxyPayButton","_LogoIcon","_LogoText","_ProfileButton","_OxyAuthChooser","_OxySignInRequestSurface","_useSwitchableAccounts","_ProfileScreen","_ManageAccountScreen","_NotificationsScreen","_PreferencesScreen","_ConnectedAppsScreen","_CreateAccountScreen","_AccountMembersScreen","_AccountSettingsScreen","_bottomSheetManager","_useSurfaceHeader","_SurfaceHeaderAction","_accountDialogManager","e","__esModule","default","setPlatformOS","Platform","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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D,sBAAA,CAAAH,OAAA;AACA,IAAAsD,sBAAA,GAAAnD,sBAAA,CAAAH,OAAA;AAKA,IAAAuD,mBAAA,GAAAvD,OAAA;AAMA,IAAAwD,iBAAA,GAAAxD,OAAA;AACA,IAAAyD,oBAAA,GAAAzD,OAAA;AAMA,IAAA0D,qBAAA,GAAA1D,OAAA;AAI8C,SAAAG,uBAAAwD,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AA3W9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAIA,IAAAG,mBAAa,EAACC,qBAAQ,CAACC,EAAgB,CAAC;;AAExC;AACA;AACA;;AAMA;AACA;AACA;;AAGA;AACA;AACA;;AAgBA;AACA;AACA;;AAOA;AACA;AACA;;AAgCA;;AAeA;AACA;AACA;;AA2BA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;;AAMA;AACA;AACA;;AASA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAQA;AACA;AACA;AACA;;AAsBA;AACA;AACA;AACA;AACA;;AAMA;;AAeA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAOA;;AAKA;AACA;AACA;;AAIA;AACA;AACA;;AAIA;AACA;AACA;AACA","ignoreList":[]}
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = exports.FollowButton = void 0;
7
7
  var _react = require("react");
8
+ var _reactNative = require("react-native");
8
9
  var _OxyContext = require("../context/OxyContext.js");
9
10
  var _toast = require("@oxyhq/bloom/toast");
10
11
  var _button = require("@oxyhq/bloom/button");
11
- var _loading = require("@oxyhq/bloom/loading");
12
12
  var _useFollow = require("../hooks/useFollow.js");
13
13
  var _followStore = require("../stores/followStore.js");
14
14
  var _theme = require("@oxyhq/bloom/theme");
@@ -89,8 +89,7 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
89
89
  disabled: disabled || isBusy,
90
90
  style: style,
91
91
  textStyle: textStyle,
92
- icon: showSpinner ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_loading.Loading, {
93
- variant: "inline",
92
+ icon: showSpinner ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
94
93
  size: "small",
95
94
  color: showFollowing ? colors.text : colors.primaryForeground
96
95
  }) : undefined,
@@ -200,8 +199,7 @@ const FollowButtonMultiInner = /*#__PURE__*/(0, _react.memo)(function FollowButt
200
199
  disabled: disabled || isLoading,
201
200
  style: style,
202
201
  textStyle: textStyle,
203
- icon: showSpinner ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_loading.Loading, {
204
- variant: "inline",
202
+ icon: showSpinner ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
205
203
  size: "small",
206
204
  color: allFollowing ? colors.text : colors.primaryForeground
207
205
  }) : undefined,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_OxyContext","_toast","_button","_loading","_useFollow","_followStore","_theme","_shallow","_jsxRuntime","DEFAULT_FOLLOW_ALL_LABEL","DEFAULT_FOLLOWED_ALL_LABEL","isMultiMode","props","Array","isArray","userIds","FollowButtonInner","memo","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","colors","useTheme","isFollowing","isKnown","isLoading","toggleFollow","resolveStatus","useFollowForButton","handlePress","useCallback","event","preventDefault","stopPropagation","err","error","Error","String","toast","message","useEffect","isBusy","showFollowing","showSpinner","jsx","Button","variant","onPress","icon","Loading","color","text","primaryForeground","undefined","children","FollowButtonMultiInner","initiallyAllFollowing","followAllLabel","followedAllLabel","onBulkFollow","onBulkUnfollow","follow","useFollow","followAllUsers","unfollowAllUsers","isAnyLoading","initialFollowStatuses","useFollowStore","useShallow","state","statuses","uid","Object","prototype","hasOwnProperty","call","followingUsers","hasKnownNotFollowing","some","storeAllFollowing","allFollowing","fetchAllStatuses","isSubmitting","setIsSubmitting","useState","result","allAlreadyFollowing","followedCount","results","length","every","entry","alreadyFollowing","anyFollowed","success","FollowButton","canUsePrivateApi","user","currentUser","useOxy","currentUserId","id","trim","rawUserIds","multiUserIds","useMemo","seen","Set","cleaned","raw","has","add","push","targetUserId","exports","_default","default"],"sourceRoot":"../../../../src","sources":["ui/components/FollowButton.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_OxyContext","_toast","_button","_useFollow","_followStore","_theme","_shallow","_jsxRuntime","DEFAULT_FOLLOW_ALL_LABEL","DEFAULT_FOLLOWED_ALL_LABEL","isMultiMode","props","Array","isArray","userIds","FollowButtonInner","memo","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","colors","useTheme","isFollowing","isKnown","isLoading","toggleFollow","resolveStatus","useFollowForButton","handlePress","useCallback","event","preventDefault","stopPropagation","err","error","Error","String","toast","message","useEffect","isBusy","showFollowing","showSpinner","jsx","Button","variant","onPress","icon","ActivityIndicator","color","text","primaryForeground","undefined","children","FollowButtonMultiInner","initiallyAllFollowing","followAllLabel","followedAllLabel","onBulkFollow","onBulkUnfollow","follow","useFollow","followAllUsers","unfollowAllUsers","isAnyLoading","initialFollowStatuses","useFollowStore","useShallow","state","statuses","uid","Object","prototype","hasOwnProperty","call","followingUsers","hasKnownNotFollowing","some","storeAllFollowing","allFollowing","fetchAllStatuses","isSubmitting","setIsSubmitting","useState","result","allAlreadyFollowing","followedCount","results","length","every","entry","alreadyFollowing","anyFollowed","success","FollowButton","canUsePrivateApi","user","currentUser","useOxy","currentUserId","id","trim","rawUserIds","multiUserIds","useMemo","seen","Set","cleaned","raw","has","add","push","targetUserId","exports","_default","default"],"sourceRoot":"../../../../src","sources":["ui/components/FollowButton.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FollowTargetButton = void 0;
7
+ exports.buildFollowMenuItems = buildFollowMenuItems;
8
+ var _react = require("react");
9
+ var _reactNative = require("react-native");
10
+ var _button = require("@oxyhq/bloom/button");
11
+ var _icons = require("@oxyhq/bloom/icons");
12
+ var _menu = require("@oxyhq/bloom/menu");
13
+ var _toast = require("@oxyhq/bloom/toast");
14
+ var _useFollowTarget = require("../hooks/useFollowTarget.js");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ /**
17
+ * `FollowTargetButton` — one button for everything an Oxy user can follow.
18
+ *
19
+ * Follows a TARGET of any registered kind: a person, a topic, a channel, a
20
+ * store, an artist. Nothing in this file branches on what the target is, which
21
+ * is the property that lets an application this package has never heard of use
22
+ * it without a release.
23
+ *
24
+ * ## Two controls, not one
25
+ *
26
+ * The main press does the obvious thing. The chevron beside it opens the
27
+ * choices that a single press cannot express — follow for a while, stop showing
28
+ * this here without giving it up everywhere — and those belong behind a
29
+ * disclosure precisely because they are not what most people want most of the
30
+ * time. Bloom's `Menu` renders as a bottom sheet on native and a dropdown on
31
+ * web, so this is one component and not a platform fork.
32
+ *
33
+ * ## Verbs
34
+ *
35
+ * "Follow" is wrong for half the things in the ecosystem: you subscribe to a
36
+ * channel, you join a community, you watch a listing. The verb is a prop with a
37
+ * small vocabulary of defaults and a full override, rather than a lookup keyed
38
+ * on kind — a kind→verb table in this package would need a release every time
39
+ * an application invents a kind, which is exactly the coupling #809 removes.
40
+ *
41
+ * ## Relationship to the legacy `FollowButton`
42
+ *
43
+ * `FollowButton` follows a USER through the Mongo-backed social graph and
44
+ * remains the correct component for that until the user graph is migrated onto
45
+ * `/v2/follows`. When it is, that component is deleted and this one takes the
46
+ * name — not aliased, not deprecated in place.
47
+ */
48
+
49
+ /**
50
+ * The small vocabulary of verbs the ecosystem actually uses. An application
51
+ * whose verb is not here passes `labels` instead — the escape hatch exists so
52
+ * this union never has to grow to accommodate one product's wording.
53
+ */
54
+
55
+ const VERB_LABELS = {
56
+ follow: {
57
+ idle: 'Follow',
58
+ active: 'Following',
59
+ pending: 'Requested',
60
+ disabled: 'Off here'
61
+ },
62
+ subscribe: {
63
+ idle: 'Subscribe',
64
+ active: 'Subscribed',
65
+ pending: 'Requested',
66
+ disabled: 'Off here'
67
+ },
68
+ join: {
69
+ idle: 'Join',
70
+ active: 'Joined',
71
+ pending: 'Requested',
72
+ disabled: 'Off here'
73
+ },
74
+ watch: {
75
+ idle: 'Watch',
76
+ active: 'Watching',
77
+ pending: 'Requested',
78
+ disabled: 'Off here'
79
+ }
80
+ };
81
+
82
+ /** A timed-follow choice offered in the menu. */
83
+
84
+ const HOUR = 60 * 60;
85
+
86
+ /**
87
+ * Defaults chosen for the cases a timed follow is actually for: a live event
88
+ * tonight, a story running this week. Not a general-purpose duration picker —
89
+ * an application that needs one passes its own.
90
+ */
91
+ const DEFAULT_DURATIONS = [{
92
+ label: '24 hours',
93
+ seconds: 24 * HOUR
94
+ }, {
95
+ label: '72 hours',
96
+ seconds: 72 * HOUR
97
+ }, {
98
+ label: 'A week',
99
+ seconds: 7 * 24 * HOUR
100
+ }];
101
+
102
+ /** One line in the disclosure menu. */
103
+
104
+ /**
105
+ * Which choices exist, given the state.
106
+ *
107
+ * Pure and exported because this is the product decision, not a rendering
108
+ * detail: a timed follow is only offered before following, turning it off here
109
+ * is only offered while following, and NEITHER is offered before the server has
110
+ * answered — every one of them addresses a relationship that does not exist
111
+ * yet, so offering them mid-write would mean sending a guessed id.
112
+ */
113
+ function buildFollowMenuItems(input) {
114
+ const items = [];
115
+ if (!input.following) {
116
+ if (input.durations === false) return items;
117
+ for (const d of input.durations) {
118
+ items.push({
119
+ key: `for-${d.seconds}`,
120
+ label: `${input.idleVerb} for ${d.label.toLowerCase()}`,
121
+ action: {
122
+ type: 'follow-timed',
123
+ seconds: d.seconds,
124
+ durationLabel: d.label
125
+ }
126
+ });
127
+ }
128
+ return items;
129
+ }
130
+ if (!input.hasRelationship || input.isPending) return items;
131
+ items.push(input.applicationMode === 'disabled' ? {
132
+ key: 'enable-here',
133
+ label: `Show in ${input.applicationName}`,
134
+ action: {
135
+ type: 'enable-here'
136
+ }
137
+ } : {
138
+ key: 'disable-here',
139
+ label: `Don’t show in ${input.applicationName}`,
140
+ action: {
141
+ type: 'disable-here'
142
+ }
143
+ });
144
+ items.push({
145
+ // Named for what it does. "Unfollow" beside "don't show here" would read as
146
+ // the same action twice, and the user would pick the wrong one.
147
+ key: 'unfollow-everywhere',
148
+ label: 'Unfollow everywhere',
149
+ action: {
150
+ type: 'unfollow'
151
+ }
152
+ });
153
+ return items;
154
+ }
155
+ const FollowTargetButton = exports.FollowTargetButton = /*#__PURE__*/(0, _react.memo)(function FollowTargetButton({
156
+ targetId,
157
+ verb = 'follow',
158
+ labels,
159
+ size = 'medium',
160
+ style,
161
+ disabled = false,
162
+ showOptions = true,
163
+ durations = DEFAULT_DURATIONS,
164
+ applicationName,
165
+ onChange
166
+ }) {
167
+ const {
168
+ status,
169
+ isFollowing,
170
+ isUnknown,
171
+ isPending,
172
+ follow,
173
+ unfollow,
174
+ disableHere,
175
+ enableHere
176
+ } = (0, _useFollowTarget.useFollowTarget)(targetId);
177
+ const text = (0, _react.useMemo)(() => ({
178
+ ...VERB_LABELS[verb],
179
+ ...labels
180
+ }), [verb, labels]);
181
+ const label = (0, _react.useMemo)(() => {
182
+ if (status.globalState === 'requested') return text.pending;
183
+ if (!isFollowing) return text.idle;
184
+ // Followed globally but switched off here. `effectiveState` reports
185
+ // `not_following` for this, correctly — the question it answers is "does
186
+ // this act here" — so the label has to be derived from the other two.
187
+ return status.applicationMode === 'disabled' ? text.disabled : text.active;
188
+ }, [isFollowing, status.globalState, status.applicationMode, text]);
189
+ const handlePrimary = (0, _react.useCallback)(async () => {
190
+ if (isFollowing) {
191
+ await unfollow();
192
+ onChange?.(false);
193
+ return;
194
+ }
195
+ await follow();
196
+ onChange?.(true);
197
+ }, [isFollowing, follow, unfollow, onChange]);
198
+ const handleTimed = (0, _react.useCallback)(async (seconds, durationLabel) => {
199
+ await follow({
200
+ expiresIn: seconds
201
+ });
202
+ onChange?.(true);
203
+ // The confirmation is the point: a follow that ends on its own is a
204
+ // promise, and a user who does not see it made will not believe it.
205
+ _toast.toast.success(`Following for ${durationLabel.toLowerCase()}`);
206
+ }, [follow, onChange]);
207
+ const menuItems = (0, _react.useMemo)(() => buildFollowMenuItems({
208
+ following: isFollowing,
209
+ applicationMode: status.applicationMode,
210
+ hasRelationship: Boolean(status.relationshipId),
211
+ isPending,
212
+ durations,
213
+ idleVerb: text.idle,
214
+ applicationName: applicationName ?? 'this app'
215
+ }), [isFollowing, status.applicationMode, status.relationshipId, isPending, durations, text.idle, applicationName]);
216
+ const runItem = (0, _react.useCallback)(item => {
217
+ switch (item.action.type) {
218
+ case 'follow-timed':
219
+ void handleTimed(item.action.seconds, item.action.durationLabel);
220
+ return;
221
+ case 'enable-here':
222
+ void enableHere();
223
+ return;
224
+ case 'disable-here':
225
+ void disableHere();
226
+ return;
227
+ case 'unfollow':
228
+ void unfollow();
229
+ onChange?.(false);
230
+ }
231
+ }, [handleTimed, enableHere, disableHere, unfollow, onChange]);
232
+ const primary = /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
233
+ variant: isFollowing ? 'secondary' : 'primary',
234
+ size: size
235
+ // Unknown is not "not following": the button stays inert until the first
236
+ // read settles rather than inviting a follow that may already exist.
237
+ ,
238
+ disabled: disabled || isUnknown,
239
+ loading: isPending,
240
+ onPress: () => void handlePrimary(),
241
+ accessibilityLabel: label,
242
+ children: label
243
+ });
244
+ if (!showOptions || menuItems.length === 0) {
245
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
246
+ style: style,
247
+ children: primary
248
+ });
249
+ }
250
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
251
+ style: [{
252
+ flexDirection: 'row',
253
+ alignItems: 'center',
254
+ gap: 4
255
+ }, style],
256
+ children: [primary, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_menu.Menu, {
257
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_menu.MenuTrigger, {
258
+ label: `${label} options`,
259
+ hint: "Opens follow options",
260
+ children: ({
261
+ props
262
+ }) =>
263
+ /*#__PURE__*/
264
+ // The trigger's props are mapped rather than spread: `MenuTrigger`
265
+ // hands back a DOM-ish bag (focus handlers, an accessibility role)
266
+ // and `Button` accepts a different set, so a spread would pass
267
+ // props it silently drops.
268
+ (0, _jsxRuntime.jsx)(_button.Button, {
269
+ variant: "secondary",
270
+ size: size === 'large' ? 'large' : 'small',
271
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.ChevronBottom_Stroke2_Corner0_Rounded, {
272
+ width: 16
273
+ }),
274
+ disabled: disabled || isUnknown,
275
+ onPress: props.onPress,
276
+ accessibilityLabel: props.accessibilityLabel,
277
+ accessibilityHint: props.accessibilityHint
278
+ })
279
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_menu.MenuContent, {
280
+ showCancel: true,
281
+ children: menuItems.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_menu.MenuItem, {
282
+ label: item.label,
283
+ onPress: () => runItem(item),
284
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_menu.MenuItemText, {
285
+ children: item.label
286
+ })
287
+ }, item.key))
288
+ })]
289
+ })]
290
+ });
291
+ });
292
+ //# sourceMappingURL=FollowTargetButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_button","_icons","_menu","_toast","_useFollowTarget","_jsxRuntime","VERB_LABELS","follow","idle","active","pending","disabled","subscribe","join","watch","HOUR","DEFAULT_DURATIONS","label","seconds","buildFollowMenuItems","input","items","following","durations","d","push","key","idleVerb","toLowerCase","action","type","durationLabel","hasRelationship","isPending","applicationMode","applicationName","FollowTargetButton","exports","memo","targetId","verb","labels","size","style","showOptions","onChange","status","isFollowing","isUnknown","unfollow","disableHere","enableHere","useFollowTarget","text","useMemo","globalState","handlePrimary","useCallback","handleTimed","expiresIn","toast","success","menuItems","Boolean","relationshipId","runItem","item","primary","jsx","Button","variant","loading","onPress","accessibilityLabel","children","length","View","jsxs","flexDirection","alignItems","gap","Menu","MenuTrigger","hint","props","icon","ChevronBottom_Stroke2_Corner0_Rounded","width","accessibilityHint","MenuContent","showCancel","map","MenuItem","MenuItemText"],"sourceRoot":"../../../../src","sources":["ui/components/FollowTargetButton.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useFollowTarget = useFollowTarget;
7
+ var _react = require("react");
8
+ var _OxyContext = require("../context/OxyContext.js");
9
+ var _followTargetStore = require("../stores/followTargetStore.js");
10
+ /**
11
+ * `useFollowTarget` — the one hook every application uses to follow anything.
12
+ *
13
+ * Wraps the `/v2/follows` SDK methods with the store above, an optimistic
14
+ * update, and a rollback. Nothing in here knows what kind of thing it is
15
+ * following, which is the property that lets an application the SDK has never
16
+ * heard of use it without a release of this package.
17
+ *
18
+ * ## Optimism, and its one limit
19
+ *
20
+ * A follow flips the button immediately and rolls back if the server refuses,
21
+ * because the round trip is long enough to feel like a bug otherwise. But an
22
+ * optimistic follow has no relationship id until the server answers, and every
23
+ * other operation addresses the relationship — so those stay disabled for the
24
+ * width of one request rather than being sent with a guessed id.
25
+ */
26
+
27
+ function useFollowTarget(targetId, options) {
28
+ const {
29
+ oxyServices,
30
+ canUsePrivateApi
31
+ } = (0, _OxyContext.useOxy)();
32
+ const status = (0, _followTargetStore.useFollowTargetStore)((0, _react.useCallback)(s => targetId ? s.statuses[targetId] : undefined, [targetId]));
33
+ const isPending = (0, _followTargetStore.useFollowTargetStore)((0, _react.useCallback)(s => targetId ? s.pending[targetId] ?? false : false, [targetId]));
34
+ const error = (0, _followTargetStore.useFollowTargetStore)((0, _react.useCallback)(s => targetId ? s.errors[targetId] : undefined, [targetId]));
35
+ const initialStatus = options?.initialStatus;
36
+
37
+ // A caller that already knows the status — a follow list, a feed payload —
38
+ // seeds it rather than making this hook re-ask once per rendered row.
39
+ (0, _react.useEffect)(() => {
40
+ if (!targetId || !initialStatus) return;
41
+ const store = _followTargetStore.useFollowTargetStore.getState();
42
+ if (!store.statuses[targetId]) store.setStatus(targetId, initialStatus);
43
+ }, [targetId, initialStatus]);
44
+ const refresh = (0, _react.useCallback)(async () => {
45
+ // Gated on `canUsePrivateApi`, not on `isAuthenticated`: during the session
46
+ // cold boot the second is true well before the first, and a read sent in
47
+ // that window 401s and would leave the button stuck reporting an error the
48
+ // user cannot act on.
49
+ if (!targetId || !canUsePrivateApi) return;
50
+ try {
51
+ const next = await oxyServices.getFollowTargetStatus(targetId);
52
+ _followTargetStore.useFollowTargetStore.getState().setStatus(targetId, next);
53
+ _followTargetStore.useFollowTargetStore.getState().setError(targetId, undefined);
54
+ } catch (e) {
55
+ _followTargetStore.useFollowTargetStore.getState().setError(targetId, e instanceof Error ? e.message : 'Could not read follow status');
56
+ }
57
+ }, [targetId, canUsePrivateApi, oxyServices]);
58
+ (0, _react.useEffect)(() => {
59
+ if (!targetId || !canUsePrivateApi) return;
60
+ if (_followTargetStore.useFollowTargetStore.getState().statuses[targetId]) return;
61
+ void refresh();
62
+ }, [targetId, canUsePrivateApi, refresh]);
63
+
64
+ /**
65
+ * Run a mutation optimistically: show `optimistic` at once, keep the previous
66
+ * value, and put it back if the server refuses. Every mutation below goes
67
+ * through this so the rollback cannot be forgotten in one of them.
68
+ */
69
+ const mutate = (0, _react.useCallback)(async (optimistic, run, failureMessage) => {
70
+ if (!targetId) return;
71
+ const store = _followTargetStore.useFollowTargetStore.getState();
72
+ const previous = store.statuses[targetId];
73
+ store.setStatus(targetId, optimistic);
74
+ store.setPending(targetId, true);
75
+ store.setError(targetId, undefined);
76
+ try {
77
+ const settled = await run();
78
+ if (settled) _followTargetStore.useFollowTargetStore.getState().setStatus(targetId, settled);
79
+ } catch (e) {
80
+ const s = _followTargetStore.useFollowTargetStore.getState();
81
+ // Back to what was true, not to a guess. Clearing the entry instead
82
+ // would make the next render ask again and flash the wrong state.
83
+ if (previous) s.setStatus(targetId, previous);
84
+ s.setError(targetId, e instanceof Error ? e.message : failureMessage);
85
+ } finally {
86
+ _followTargetStore.useFollowTargetStore.getState().setPending(targetId, false);
87
+ }
88
+ }, [targetId]);
89
+ const current = status ?? _followTargetStore.UNKNOWN_FOLLOW_STATUS;
90
+ const follow = (0, _react.useCallback)(async opts => {
91
+ if (!targetId) return;
92
+ await mutate({
93
+ ...(0, _followTargetStore.withApplicationMode)({
94
+ ...current,
95
+ globalState: 'active'
96
+ }, current.applicationMode),
97
+ ...(opts?.expiresIn ? {
98
+ expiresAt: new Date(Date.now() + opts.expiresIn * 1000).toISOString()
99
+ } : {})
100
+ },
101
+ // The server returns the whole resulting status, so store it rather
102
+ // than reconstructing one: `effectiveState`'s derivation lives there,
103
+ // and a client recomputing it is a second implementation of one rule.
104
+ async () => (await oxyServices.followTarget(targetId, opts)).status, 'Could not follow');
105
+ }, [targetId, current, mutate, oxyServices]);
106
+ const unfollow = (0, _react.useCallback)(async () => {
107
+ const relationshipId = current.relationshipId;
108
+ if (!targetId || !relationshipId) return;
109
+ await mutate({
110
+ ..._followTargetStore.UNKNOWN_FOLLOW_STATUS
111
+ }, async () => {
112
+ await oxyServices.unfollowTarget(relationshipId);
113
+ return {
114
+ ..._followTargetStore.UNKNOWN_FOLLOW_STATUS
115
+ };
116
+ }, 'Could not unfollow');
117
+ }, [targetId, current.relationshipId, mutate, oxyServices]);
118
+ const setMode = (0, _react.useCallback)(async mode => {
119
+ const relationshipId = current.relationshipId;
120
+ if (!targetId || !relationshipId) return;
121
+ await mutate((0, _followTargetStore.withApplicationMode)(current, mode), async () => {
122
+ await oxyServices.setFollowApplicationMode(relationshipId, mode);
123
+ }, 'Could not change this app’s setting for this follow');
124
+ }, [targetId, current, mutate, oxyServices]);
125
+ const disableHere = (0, _react.useCallback)(() => setMode('disabled'), [setMode]);
126
+ const enableHere = (0, _react.useCallback)(() => setMode('enabled'), [setMode]);
127
+ return {
128
+ status: current,
129
+ isFollowing: (0, _followTargetStore.isFollowedGlobally)(current),
130
+ isUnknown: status === undefined,
131
+ isPending,
132
+ error,
133
+ follow,
134
+ unfollow,
135
+ disableHere,
136
+ enableHere,
137
+ refresh
138
+ };
139
+ }
140
+ //# sourceMappingURL=useFollowTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_OxyContext","_followTargetStore","useFollowTarget","targetId","options","oxyServices","canUsePrivateApi","useOxy","status","useFollowTargetStore","useCallback","s","statuses","undefined","isPending","pending","error","errors","initialStatus","useEffect","store","getState","setStatus","refresh","next","getFollowTargetStatus","setError","e","Error","message","mutate","optimistic","run","failureMessage","previous","setPending","settled","current","UNKNOWN_FOLLOW_STATUS","follow","opts","withApplicationMode","globalState","applicationMode","expiresIn","expiresAt","Date","now","toISOString","followTarget","unfollow","relationshipId","unfollowTarget","setMode","mode","setFollowApplicationMode","disableHere","enableHere","isFollowing","isFollowedGlobally","isUnknown"],"sourceRoot":"../../../../src","sources":["ui/hooks/useFollowTarget.ts"],"mappings":"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","ignoreList":[]}