@oxyhq/services 6.9.30 → 6.9.31
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 +23 -30
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +24 -31
- 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 +2 -2
- package/src/ui/components/FollowButton.tsx +15 -41
|
@@ -16,7 +16,6 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
16
16
|
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
17
|
// Create animated TouchableOpacity
|
|
18
18
|
const AnimatedTouchableOpacity = _reactNativeReanimated.default.createAnimatedComponent(_reactNative.TouchableOpacity);
|
|
19
|
-
const AnimatedText = _reactNativeReanimated.default.createAnimatedComponent(_reactNative.Text);
|
|
20
19
|
/**
|
|
21
20
|
* Inner component that handles all hooks and rendering.
|
|
22
21
|
*
|
|
@@ -56,7 +55,6 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
56
55
|
} = (0, _useFollow.useFollowForButton)(userId, oxyServices);
|
|
57
56
|
|
|
58
57
|
// Animation values
|
|
59
|
-
const animationProgress = (0, _reactNativeReanimated.useSharedValue)(isFollowing ? 1 : 0);
|
|
60
58
|
const scale = (0, _reactNativeReanimated.useSharedValue)(1);
|
|
61
59
|
|
|
62
60
|
// Stable press handler — depends on primitives only
|
|
@@ -103,43 +101,38 @@ const FollowButtonInner = /*#__PURE__*/(0, _react.memo)(function FollowButtonInn
|
|
|
103
101
|
}
|
|
104
102
|
}, [userId, fetchStatus]);
|
|
105
103
|
|
|
106
|
-
//
|
|
107
|
-
(0,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}, [isFollowing, animationProgress]);
|
|
104
|
+
// Scale-only animated style
|
|
105
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
106
|
+
transform: [{
|
|
107
|
+
scale: scale.value
|
|
108
|
+
}]
|
|
109
|
+
}));
|
|
113
110
|
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}, [colors]);
|
|
126
|
-
const animatedTextStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
127
|
-
return {
|
|
128
|
-
color: (0, _reactNativeReanimated.interpolateColor)(animationProgress.value, [0, 1], ['#FFFFFF', colors.text])
|
|
129
|
-
};
|
|
130
|
-
}, [colors]);
|
|
111
|
+
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
112
|
+
// Not following: bg-primary, border-primary, text white
|
|
113
|
+
// Following: bg-background, border-border, text-foreground
|
|
114
|
+
const buttonColorStyle = isFollowing ? {
|
|
115
|
+
backgroundColor: colors.background,
|
|
116
|
+
borderColor: colors.border
|
|
117
|
+
} : {
|
|
118
|
+
backgroundColor: colors.primary,
|
|
119
|
+
borderColor: colors.primary
|
|
120
|
+
};
|
|
121
|
+
const textColor = isFollowing ? colors.text : '#FFFFFF';
|
|
131
122
|
const baseButtonStyle = getBaseButtonStyle(size, style);
|
|
132
123
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
133
124
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimatedTouchableOpacity, {
|
|
134
|
-
style: [baseButtonStyle,
|
|
125
|
+
style: [baseButtonStyle, buttonColorStyle, animatedStyle],
|
|
135
126
|
onPress: handlePress,
|
|
136
127
|
disabled: disabled || isLoading,
|
|
137
128
|
activeOpacity: 0.8,
|
|
138
129
|
children: showLoadingState && isLoading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
139
130
|
size: "small",
|
|
140
|
-
color:
|
|
141
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
142
|
-
style: [baseTextStyle,
|
|
131
|
+
color: textColor
|
|
132
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
133
|
+
style: [baseTextStyle, {
|
|
134
|
+
color: textColor
|
|
135
|
+
}],
|
|
143
136
|
children: isFollowing ? 'Following' : 'Follow'
|
|
144
137
|
})
|
|
145
138
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_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","AnimatedTouchableOpacity","Animated","createAnimatedComponent","TouchableOpacity","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_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","AnimatedTouchableOpacity","Animated","createAnimatedComponent","TouchableOpacity","FollowButtonInner","memo","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","theme","_theme","bloomTheme","useTheme","colors","isFollowing","isLoading","toggleFollow","setFollowStatus","fetchStatus","useFollowForButton","scale","useSharedValue","handlePress","useCallback","event","preventDefault","stopPropagation","value","withTiming","duration","finished","withSpring","damping","stiffness","err","error","Error","String","toast","message","useEffect","animatedStyle","useAnimatedStyle","transform","buttonColorStyle","backgroundColor","background","borderColor","border","primary","textColor","text","baseButtonStyle","getBaseButtonStyle","baseTextStyle","getBaseTextStyle","jsx","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,7 +2,7 @@
|
|
|
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,
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withSpring, withTiming } from 'react-native-reanimated';
|
|
6
6
|
import { useOxy } from "../context/OxyContext.js";
|
|
7
7
|
import { fontFamilies } from "../styles/fonts.js";
|
|
8
8
|
import { toast } from '../../lib/sonner';
|
|
@@ -11,7 +11,6 @@ import { useTheme } from '@oxyhq/bloom/theme';
|
|
|
11
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
12
|
// Create animated TouchableOpacity
|
|
13
13
|
const AnimatedTouchableOpacity = Animated.createAnimatedComponent(TouchableOpacity);
|
|
14
|
-
const AnimatedText = Animated.createAnimatedComponent(Text);
|
|
15
14
|
/**
|
|
16
15
|
* Inner component that handles all hooks and rendering.
|
|
17
16
|
*
|
|
@@ -51,7 +50,6 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
51
50
|
} = useFollowForButton(userId, oxyServices);
|
|
52
51
|
|
|
53
52
|
// Animation values
|
|
54
|
-
const animationProgress = useSharedValue(isFollowing ? 1 : 0);
|
|
55
53
|
const scale = useSharedValue(1);
|
|
56
54
|
|
|
57
55
|
// Stable press handler — depends on primitives only
|
|
@@ -98,43 +96,38 @@ const FollowButtonInner = /*#__PURE__*/memo(function FollowButtonInner({
|
|
|
98
96
|
}
|
|
99
97
|
}, [userId, fetchStatus]);
|
|
100
98
|
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}, [isFollowing, animationProgress]);
|
|
99
|
+
// Scale-only animated style
|
|
100
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
101
|
+
transform: [{
|
|
102
|
+
scale: scale.value
|
|
103
|
+
}]
|
|
104
|
+
}));
|
|
108
105
|
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}, [colors]);
|
|
121
|
-
const animatedTextStyle = useAnimatedStyle(() => {
|
|
122
|
-
return {
|
|
123
|
-
color: interpolateColor(animationProgress.value, [0, 1], ['#FFFFFF', colors.text])
|
|
124
|
-
};
|
|
125
|
-
}, [colors]);
|
|
106
|
+
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
107
|
+
// Not following: bg-primary, border-primary, text white
|
|
108
|
+
// Following: bg-background, border-border, text-foreground
|
|
109
|
+
const buttonColorStyle = isFollowing ? {
|
|
110
|
+
backgroundColor: colors.background,
|
|
111
|
+
borderColor: colors.border
|
|
112
|
+
} : {
|
|
113
|
+
backgroundColor: colors.primary,
|
|
114
|
+
borderColor: colors.primary
|
|
115
|
+
};
|
|
116
|
+
const textColor = isFollowing ? colors.text : '#FFFFFF';
|
|
126
117
|
const baseButtonStyle = getBaseButtonStyle(size, style);
|
|
127
118
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
128
119
|
return /*#__PURE__*/_jsx(AnimatedTouchableOpacity, {
|
|
129
|
-
style: [baseButtonStyle,
|
|
120
|
+
style: [baseButtonStyle, buttonColorStyle, animatedStyle],
|
|
130
121
|
onPress: handlePress,
|
|
131
122
|
disabled: disabled || isLoading,
|
|
132
123
|
activeOpacity: 0.8,
|
|
133
124
|
children: showLoadingState && isLoading ? /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
134
125
|
size: "small",
|
|
135
|
-
color:
|
|
136
|
-
}) : /*#__PURE__*/_jsx(
|
|
137
|
-
style: [baseTextStyle,
|
|
126
|
+
color: textColor
|
|
127
|
+
}) : /*#__PURE__*/_jsx(Text, {
|
|
128
|
+
style: [baseTextStyle, {
|
|
129
|
+
color: textColor
|
|
130
|
+
}],
|
|
138
131
|
children: isFollowing ? 'Following' : 'Follow'
|
|
139
132
|
})
|
|
140
133
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useCallback","memo","TouchableOpacity","Text","Platform","ActivityIndicator","Animated","useSharedValue","useAnimatedStyle","withSpring","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useCallback","memo","TouchableOpacity","Text","Platform","ActivityIndicator","Animated","useSharedValue","useAnimatedStyle","withSpring","withTiming","useOxy","fontFamilies","toast","useFollowForButton","useTheme","jsx","_jsx","AnimatedTouchableOpacity","createAnimatedComponent","FollowButtonInner","userId","oxyServices","initiallyFollowing","size","onFollowChange","style","textStyle","disabled","showLoadingState","preventParentActions","theme","_theme","bloomTheme","colors","isFollowing","isLoading","toggleFollow","setFollowStatus","fetchStatus","scale","handlePress","event","preventDefault","stopPropagation","value","duration","finished","damping","stiffness","err","error","Error","String","message","animatedStyle","transform","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,
|
|
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;AAiBtB,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;AAwHD;;;;;;;;;;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,
|
|
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;AAiBtB,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;AAwHD;;;;;;;;;;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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "6.9.
|
|
3
|
+
"version": "6.9.31",
|
|
4
4
|
"description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@lottiefiles/dotlottie-react": "^0.13.5",
|
|
74
|
-
"@oxyhq/bloom": "0.1.
|
|
74
|
+
"@oxyhq/bloom": "0.1.22",
|
|
75
75
|
"@oxyhq/core": "*",
|
|
76
76
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
77
77
|
"@react-native-community/netinfo": "^11.4.1",
|
|
@@ -2,7 +2,6 @@ import React, { useEffect, useCallback, memo } from 'react';
|
|
|
2
2
|
import {
|
|
3
3
|
TouchableOpacity,
|
|
4
4
|
Text,
|
|
5
|
-
StyleSheet,
|
|
6
5
|
type ViewStyle,
|
|
7
6
|
type TextStyle,
|
|
8
7
|
type StyleProp,
|
|
@@ -13,8 +12,6 @@ import Animated, {
|
|
|
13
12
|
useSharedValue,
|
|
14
13
|
useAnimatedStyle,
|
|
15
14
|
withSpring,
|
|
16
|
-
interpolateColor,
|
|
17
|
-
Easing,
|
|
18
15
|
withTiming
|
|
19
16
|
} from 'react-native-reanimated';
|
|
20
17
|
import { useOxy } from '../context/OxyContext';
|
|
@@ -26,7 +23,6 @@ import type { OxyServices } from '@oxyhq/core';
|
|
|
26
23
|
|
|
27
24
|
// Create animated TouchableOpacity
|
|
28
25
|
const AnimatedTouchableOpacity = Animated.createAnimatedComponent(TouchableOpacity);
|
|
29
|
-
const AnimatedText = Animated.createAnimatedComponent(Text);
|
|
30
26
|
|
|
31
27
|
export interface FollowButtonProps {
|
|
32
28
|
userId: string;
|
|
@@ -80,7 +76,6 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
80
76
|
} = useFollowForButton(userId, oxyServices);
|
|
81
77
|
|
|
82
78
|
// Animation values
|
|
83
|
-
const animationProgress = useSharedValue(isFollowing ? 1 : 0);
|
|
84
79
|
const scale = useSharedValue(1);
|
|
85
80
|
|
|
86
81
|
// Stable press handler — depends on primitives only
|
|
@@ -123,46 +118,25 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
123
118
|
}
|
|
124
119
|
}, [userId, fetchStatus]);
|
|
125
120
|
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Animated styles
|
|
132
|
-
// When not following (progress=0): primary filled button (bg-primary, text white)
|
|
133
|
-
// When following (progress=1): outlined button (bg-background, border-border, text-foreground)
|
|
134
|
-
const animatedButtonStyle = useAnimatedStyle(() => {
|
|
135
|
-
return {
|
|
136
|
-
transform: [{ scale: scale.value }],
|
|
137
|
-
backgroundColor: interpolateColor(
|
|
138
|
-
animationProgress.value,
|
|
139
|
-
[0, 1],
|
|
140
|
-
[colors.primary, colors.background]
|
|
141
|
-
),
|
|
142
|
-
borderColor: interpolateColor(
|
|
143
|
-
animationProgress.value,
|
|
144
|
-
[0, 1],
|
|
145
|
-
[colors.primary, colors.border]
|
|
146
|
-
),
|
|
147
|
-
};
|
|
148
|
-
}, [colors]);
|
|
121
|
+
// Scale-only animated style
|
|
122
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
123
|
+
transform: [{ scale: scale.value }],
|
|
124
|
+
}));
|
|
149
125
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
};
|
|
158
|
-
}, [colors]);
|
|
126
|
+
// Colors from bloom theme — follows NativeWind convention via useTheme()
|
|
127
|
+
// Not following: bg-primary, border-primary, text white
|
|
128
|
+
// Following: bg-background, border-border, text-foreground
|
|
129
|
+
const buttonColorStyle: ViewStyle = isFollowing
|
|
130
|
+
? { backgroundColor: colors.background, borderColor: colors.border }
|
|
131
|
+
: { backgroundColor: colors.primary, borderColor: colors.primary };
|
|
132
|
+
const textColor = isFollowing ? colors.text : '#FFFFFF';
|
|
159
133
|
|
|
160
134
|
const baseButtonStyle = getBaseButtonStyle(size, style);
|
|
161
135
|
const baseTextStyle = getBaseTextStyle(size, textStyle);
|
|
162
136
|
|
|
163
137
|
return (
|
|
164
138
|
<AnimatedTouchableOpacity
|
|
165
|
-
style={[baseButtonStyle,
|
|
139
|
+
style={[baseButtonStyle, buttonColorStyle, animatedStyle]}
|
|
166
140
|
onPress={handlePress}
|
|
167
141
|
disabled={disabled || isLoading}
|
|
168
142
|
activeOpacity={0.8}
|
|
@@ -170,12 +144,12 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
170
144
|
{showLoadingState && isLoading ? (
|
|
171
145
|
<ActivityIndicator
|
|
172
146
|
size="small"
|
|
173
|
-
color={
|
|
147
|
+
color={textColor}
|
|
174
148
|
/>
|
|
175
149
|
) : (
|
|
176
|
-
<
|
|
150
|
+
<Text style={[baseTextStyle, { color: textColor }]}>
|
|
177
151
|
{isFollowing ? 'Following' : 'Follow'}
|
|
178
|
-
</
|
|
152
|
+
</Text>
|
|
179
153
|
)}
|
|
180
154
|
</AnimatedTouchableOpacity>
|
|
181
155
|
);
|