@oxyhq/services 6.9.31 → 6.9.32
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/lib/commonjs/ui/components/FollowButton.js +3 -28
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +3 -28
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ui/components/FollowButton.tsx +4 -28
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = exports.FollowButton = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
-
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
10
9
|
var _OxyContext = require("../context/OxyContext.js");
|
|
11
10
|
var _fonts = require("../styles/fonts.js");
|
|
12
11
|
var _sonner = require("../../lib/sonner");
|
|
@@ -14,8 +13,6 @@ var _useFollow = require("../hooks/useFollow.js");
|
|
|
14
13
|
var _theme2 = require("@oxyhq/bloom/theme");
|
|
15
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
15
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
17
|
-
// Create animated TouchableOpacity
|
|
18
|
-
const AnimatedTouchableOpacity = _reactNativeReanimated.default.createAnimatedComponent(_reactNative.TouchableOpacity);
|
|
19
16
|
/**
|
|
20
17
|
* Inner component that handles all hooks and rendering.
|
|
21
18
|
*
|
|
@@ -54,9 +51,6 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
54
51
|
fetchStatus
|
|
55
52
|
} = (0, _useFollow.useFollowForButton)(userId, oxyServices);
|
|
56
53
|
|
|
57
|
-
// Animation values
|
|
58
|
-
const scale = (0, _reactNativeReanimated.useSharedValue)(1);
|
|
59
|
-
|
|
60
54
|
// Stable press handler — depends on primitives only
|
|
61
55
|
const handlePress = (0, _react.useCallback)(async event => {
|
|
62
56
|
if (preventParentActions && event && event.preventDefault) {
|
|
@@ -64,18 +58,6 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
64
58
|
event.stopPropagation?.();
|
|
65
59
|
}
|
|
66
60
|
if (disabled || isLoading) return;
|
|
67
|
-
|
|
68
|
-
// Press animation
|
|
69
|
-
scale.value = (0, _reactNativeReanimated.withTiming)(0.95, {
|
|
70
|
-
duration: 100
|
|
71
|
-
}, finished => {
|
|
72
|
-
if (finished) {
|
|
73
|
-
scale.value = (0, _reactNativeReanimated.withSpring)(1, {
|
|
74
|
-
damping: 15,
|
|
75
|
-
stiffness: 200
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
61
|
try {
|
|
80
62
|
await toggleFollow();
|
|
81
63
|
if (onFollowChange) onFollowChange(!isFollowing);
|
|
@@ -83,7 +65,7 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
83
65
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
84
66
|
_sonner.toast.error(error.message || 'Failed to update follow status');
|
|
85
67
|
}
|
|
86
|
-
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions
|
|
68
|
+
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions]);
|
|
87
69
|
|
|
88
70
|
// Set initial follow status on mount if provided and not already set
|
|
89
71
|
(0, _react.useEffect)(() => {
|
|
@@ -101,13 +83,6 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
101
83
|
}
|
|
102
84
|
}, [userId, fetchStatus]);
|
|
103
85
|
|
|
104
|
-
// Scale-only animated style
|
|
105
|
-
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
106
|
-
transform: [{
|
|
107
|
-
scale: scale.value
|
|
108
|
-
}]
|
|
109
|
-
}));
|
|
110
|
-
|
|
111
86
|
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
112
87
|
// Not following: bg-primary, border-primary, text white
|
|
113
88
|
// Following: bg-background, border-border, text-foreground
|
|
@@ -121,8 +96,8 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
121
96
|
const textColor = isFollowing ? colors.text : '#FFFFFF';
|
|
122
97
|
const baseButtonStyle = getBaseButtonStyle(size, style);
|
|
123
98
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
124
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
125
|
-
style: [baseButtonStyle, buttonColorStyle
|
|
99
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
100
|
+
style: [baseButtonStyle, buttonColorStyle],
|
|
126
101
|
onPress: handlePress,
|
|
127
102
|
disabled: disabled || isLoading,
|
|
128
103
|
activeOpacity: 0.8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_OxyContext","_fonts","_sonner","_useFollow","_theme2","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FollowButtonInner","memo","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","theme","_theme","bloomTheme","useTheme","colors","isFollowing","isLoading","toggleFollow","setFollowStatus","fetchStatus","useFollowForButton","handlePress","useCallback","event","preventDefault","stopPropagation","err","error","Error","String","toast","message","useEffect","buttonColorStyle","backgroundColor","background","borderColor","border","primary","textColor","text","baseButtonStyle","getBaseButtonStyle","baseTextStyle","getBaseTextStyle","jsx","TouchableOpacity","onPress","activeOpacity","children","ActivityIndicator","color","Text","FollowButton","props","isAuthenticated","user","currentUser","useOxy","currentUserId","id","trim","targetUserId","exports","baseStyle","flexDirection","alignItems","justifyContent","borderWidth","Platform","select","web","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","sizeStyle","paddingVertical","paddingHorizontal","minWidth","borderRadius","fontFamily","fontFamilies","interSemiBold","fontWeight","sizeTextStyle","fontSize","_default"],"sourceRoot":"../../../../src","sources":["ui/components/FollowButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,15 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useEffect, useCallback, memo } from 'react';
|
|
4
4
|
import { TouchableOpacity, Text, Platform, ActivityIndicator } from 'react-native';
|
|
5
|
-
import Animated, { useSharedValue, useAnimatedStyle, withSpring, withTiming } from 'react-native-reanimated';
|
|
6
5
|
import { useOxy } from "../context/OxyContext.js";
|
|
7
6
|
import { fontFamilies } from "../styles/fonts.js";
|
|
8
7
|
import { toast } from '../../lib/sonner';
|
|
9
8
|
import { useFollowForButton } from "../hooks/useFollow.js";
|
|
10
9
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
11
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
-
// Create animated TouchableOpacity
|
|
13
|
-
const AnimatedTouchableOpacity = Animated.createAnimatedComponent(TouchableOpacity);
|
|
14
11
|
/**
|
|
15
12
|
* Inner component that handles all hooks and rendering.
|
|
16
13
|
*
|
|
@@ -49,9 +46,6 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
49
46
|
fetchStatus
|
|
50
47
|
} = useFollowForButton(userId, oxyServices);
|
|
51
48
|
|
|
52
|
-
// Animation values
|
|
53
|
-
const scale = useSharedValue(1);
|
|
54
|
-
|
|
55
49
|
// Stable press handler — depends on primitives only
|
|
56
50
|
const handlePress = useCallback(async event => {
|
|
57
51
|
if (preventParentActions && event && event.preventDefault) {
|
|
@@ -59,18 +53,6 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
59
53
|
event.stopPropagation?.();
|
|
60
54
|
}
|
|
61
55
|
if (disabled || isLoading) return;
|
|
62
|
-
|
|
63
|
-
// Press animation
|
|
64
|
-
scale.value = withTiming(0.95, {
|
|
65
|
-
duration: 100
|
|
66
|
-
}, finished => {
|
|
67
|
-
if (finished) {
|
|
68
|
-
scale.value = withSpring(1, {
|
|
69
|
-
damping: 15,
|
|
70
|
-
stiffness: 200
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
56
|
try {
|
|
75
57
|
await toggleFollow();
|
|
76
58
|
if (onFollowChange) onFollowChange(!isFollowing);
|
|
@@ -78,7 +60,7 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
78
60
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
79
61
|
toast.error(error.message || 'Failed to update follow status');
|
|
80
62
|
}
|
|
81
|
-
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions
|
|
63
|
+
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions]);
|
|
82
64
|
|
|
83
65
|
// Set initial follow status on mount if provided and not already set
|
|
84
66
|
useEffect(() => {
|
|
@@ -96,13 +78,6 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
96
78
|
}
|
|
97
79
|
}, [userId, fetchStatus]);
|
|
98
80
|
|
|
99
|
-
// Scale-only animated style
|
|
100
|
-
const animatedStyle = useAnimatedStyle(() => ({
|
|
101
|
-
transform: [{
|
|
102
|
-
scale: scale.value
|
|
103
|
-
}]
|
|
104
|
-
}));
|
|
105
|
-
|
|
106
81
|
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
107
82
|
// Not following: bg-primary, border-primary, text white
|
|
108
83
|
// Following: bg-background, border-border, text-foreground
|
|
@@ -116,8 +91,8 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
116
91
|
const textColor = isFollowing ? colors.text : '#FFFFFF';
|
|
117
92
|
const baseButtonStyle = getBaseButtonStyle(size, style);
|
|
118
93
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
119
|
-
return /*#__PURE__*/_jsx(
|
|
120
|
-
style: [baseButtonStyle, buttonColorStyle
|
|
94
|
+
return /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
95
|
+
style: [baseButtonStyle, buttonColorStyle],
|
|
121
96
|
onPress: handlePress,
|
|
122
97
|
disabled: disabled || isLoading,
|
|
123
98
|
activeOpacity: 0.8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useCallback","memo","TouchableOpacity","Text","Platform","ActivityIndicator","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useCallback","memo","TouchableOpacity","Text","Platform","ActivityIndicator","useOxy","fontFamilies","toast","useFollowForButton","useTheme","jsx","_jsx","FollowButtonInner","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","theme","_theme","bloomTheme","colors","isFollowing","isLoading","toggleFollow","setFollowStatus","fetchStatus","handlePress","event","preventDefault","stopPropagation","err","error","Error","String","message","buttonColorStyle","backgroundColor","background","borderColor","border","primary","textColor","text","baseButtonStyle","getBaseButtonStyle","baseTextStyle","getBaseTextStyle","onPress","activeOpacity","children","color","FollowButton","props","isAuthenticated","user","currentUser","currentUserId","id","trim","targetUserId","baseStyle","flexDirection","alignItems","justifyContent","borderWidth","select","web","default","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","sizeStyle","paddingVertical","paddingHorizontal","minWidth","borderRadius","fontFamily","interSemiBold","fontWeight","sizeTextStyle","fontSize"],"sourceRoot":"../../../../src","sources":["ui/components/FollowButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FollowButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"FollowButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FollowButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAyGD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkB7C,CAAC;AAmDF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FollowButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"FollowButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FollowButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAyGD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkB7C,CAAC;AAmDF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,eAAe,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -8,12 +8,6 @@ import {
|
|
|
8
8
|
Platform,
|
|
9
9
|
ActivityIndicator
|
|
10
10
|
} from 'react-native';
|
|
11
|
-
import Animated, {
|
|
12
|
-
useSharedValue,
|
|
13
|
-
useAnimatedStyle,
|
|
14
|
-
withSpring,
|
|
15
|
-
withTiming
|
|
16
|
-
} from 'react-native-reanimated';
|
|
17
11
|
import { useOxy } from '../context/OxyContext';
|
|
18
12
|
import { fontFamilies } from '../styles/fonts';
|
|
19
13
|
import { toast } from '../../lib/sonner';
|
|
@@ -21,9 +15,6 @@ import { useFollowForButton } from '../hooks/useFollow';
|
|
|
21
15
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
22
16
|
import type { OxyServices } from '@oxyhq/core';
|
|
23
17
|
|
|
24
|
-
// Create animated TouchableOpacity
|
|
25
|
-
const AnimatedTouchableOpacity = Animated.createAnimatedComponent(TouchableOpacity);
|
|
26
|
-
|
|
27
18
|
export interface FollowButtonProps {
|
|
28
19
|
userId: string;
|
|
29
20
|
initiallyFollowing?: boolean;
|
|
@@ -75,9 +66,6 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
75
66
|
fetchStatus,
|
|
76
67
|
} = useFollowForButton(userId, oxyServices);
|
|
77
68
|
|
|
78
|
-
// Animation values
|
|
79
|
-
const scale = useSharedValue(1);
|
|
80
|
-
|
|
81
69
|
// Stable press handler — depends on primitives only
|
|
82
70
|
const handlePress = useCallback(async (event?: { preventDefault?: () => void; stopPropagation?: () => void }) => {
|
|
83
71
|
if (preventParentActions && event && event.preventDefault) {
|
|
@@ -86,13 +74,6 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
86
74
|
}
|
|
87
75
|
if (disabled || isLoading) return;
|
|
88
76
|
|
|
89
|
-
// Press animation
|
|
90
|
-
scale.value = withTiming(0.95, { duration: 100 }, (finished) => {
|
|
91
|
-
if (finished) {
|
|
92
|
-
scale.value = withSpring(1, { damping: 15, stiffness: 200 });
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
77
|
try {
|
|
97
78
|
await toggleFollow();
|
|
98
79
|
if (onFollowChange) onFollowChange(!isFollowing);
|
|
@@ -100,7 +81,7 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
100
81
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
101
82
|
toast.error(error.message || 'Failed to update follow status');
|
|
102
83
|
}
|
|
103
|
-
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions
|
|
84
|
+
}, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions]);
|
|
104
85
|
|
|
105
86
|
// Set initial follow status on mount if provided and not already set
|
|
106
87
|
useEffect(() => {
|
|
@@ -118,11 +99,6 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
118
99
|
}
|
|
119
100
|
}, [userId, fetchStatus]);
|
|
120
101
|
|
|
121
|
-
// Scale-only animated style
|
|
122
|
-
const animatedStyle = useAnimatedStyle(() => ({
|
|
123
|
-
transform: [{ scale: scale.value }],
|
|
124
|
-
}));
|
|
125
|
-
|
|
126
102
|
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
127
103
|
// Not following: bg-primary, border-primary, text white
|
|
128
104
|
// Following: bg-background, border-border, text-foreground
|
|
@@ -135,8 +111,8 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
135
111
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
136
112
|
|
|
137
113
|
return (
|
|
138
|
-
<
|
|
139
|
-
style={[baseButtonStyle, buttonColorStyle
|
|
114
|
+
<TouchableOpacity
|
|
115
|
+
style={[baseButtonStyle, buttonColorStyle]}
|
|
140
116
|
onPress={handlePress}
|
|
141
117
|
disabled={disabled || isLoading}
|
|
142
118
|
activeOpacity={0.8}
|
|
@@ -151,7 +127,7 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
151
127
|
{isFollowing ? 'Following' : 'Follow'}
|
|
152
128
|
</Text>
|
|
153
129
|
)}
|
|
154
|
-
</
|
|
130
|
+
</TouchableOpacity>
|
|
155
131
|
);
|
|
156
132
|
});
|
|
157
133
|
|