diff --git a/functions/index.js b/functions/index.js index 6c150ce..328d89a 100644 --- a/functions/index.js +++ b/functions/index.js @@ -5,8 +5,10 @@ const admin = require("firebase-admin"); admin.initializeApp(); const db = admin.firestore(); +const REGION = process.env.FIREBASE_REGION || "europe-west1"; exports.db = db; +exports.REGION = REGION; exports.refList = { projects: db.collection("projects"), @@ -21,6 +23,7 @@ exports.refList = { monthlyPayoutEntries: db.collection("monthlyPayoutEntries"), monthlyPayouts: db.collection("monthlyPayouts"), }; +exports.refsList = exports.refList; exports.ALERT_TYPE = { NEW_LIKE: "NEW_LIKE", @@ -45,4 +48,5 @@ exports.algolia = require("./src/algolia"); exports.notifications = require("./src/notifications"); exports.rankings = require("./src/rankings"); exports.payouts = require("./src/payouts"); +exports.subscription = require("./src/subscription"); exports.youtube = require("./src/youtube"); diff --git a/src/assets/art/boost.png b/src/assets/art/boost.png deleted file mode 100644 index c2f96e4..0000000 Binary files a/src/assets/art/boost.png and /dev/null differ diff --git a/src/assets/art/boostBig.png b/src/assets/art/boostBig.png deleted file mode 100644 index aee33e3..0000000 Binary files a/src/assets/art/boostBig.png and /dev/null differ diff --git a/src/assets/art/circle.png b/src/assets/art/circle.png deleted file mode 100644 index 463ee25..0000000 Binary files a/src/assets/art/circle.png and /dev/null differ diff --git a/src/assets/art/coin.png b/src/assets/art/coin.png deleted file mode 100644 index 564841e..0000000 Binary files a/src/assets/art/coin.png and /dev/null differ diff --git a/src/assets/art/gradientTriangle.png b/src/assets/art/gradientTriangle.png deleted file mode 100644 index cd84da8..0000000 Binary files a/src/assets/art/gradientTriangle.png and /dev/null differ diff --git a/src/assets/art/orbe/1.png b/src/assets/art/orbe/1.png deleted file mode 100644 index 1271ffb..0000000 Binary files a/src/assets/art/orbe/1.png and /dev/null differ diff --git a/src/assets/art/orbe/2.png b/src/assets/art/orbe/2.png deleted file mode 100644 index 361cd00..0000000 Binary files a/src/assets/art/orbe/2.png and /dev/null differ diff --git a/src/assets/art/orbe/3.png b/src/assets/art/orbe/3.png deleted file mode 100644 index cfb77d8..0000000 Binary files a/src/assets/art/orbe/3.png and /dev/null differ diff --git a/src/assets/art/square.png b/src/assets/art/square.png deleted file mode 100644 index 5aec6b0..0000000 Binary files a/src/assets/art/square.png and /dev/null differ diff --git a/src/assets/art/threeCoins.png b/src/assets/art/threeCoins.png deleted file mode 100644 index 831c452..0000000 Binary files a/src/assets/art/threeCoins.png and /dev/null differ diff --git a/src/assets/art/triangle.png b/src/assets/art/triangle.png deleted file mode 100644 index 8db94cf..0000000 Binary files a/src/assets/art/triangle.png and /dev/null differ diff --git a/src/assets/tutorial/chat.png b/src/assets/tutorial/chat.png deleted file mode 100644 index 2521a31..0000000 Binary files a/src/assets/tutorial/chat.png and /dev/null differ diff --git a/src/assets/tutorial/coins.png b/src/assets/tutorial/coins.png deleted file mode 100644 index d81ca26..0000000 Binary files a/src/assets/tutorial/coins.png and /dev/null differ diff --git a/src/assets/tutorial/followProgress.png b/src/assets/tutorial/followProgress.png deleted file mode 100644 index 4ee6c8d..0000000 Binary files a/src/assets/tutorial/followProgress.png and /dev/null differ diff --git a/src/assets/tutorial/tasks.png b/src/assets/tutorial/tasks.png deleted file mode 100644 index 360edb0..0000000 Binary files a/src/assets/tutorial/tasks.png and /dev/null differ diff --git a/src/assets/tutorial/welcome.png b/src/assets/tutorial/welcome.png deleted file mode 100644 index 7d959c4..0000000 Binary files a/src/assets/tutorial/welcome.png and /dev/null differ diff --git a/src/components/Input.js b/src/components/Input.js index 5dc1874..2273d1b 100644 --- a/src/components/Input.js +++ b/src/components/Input.js @@ -11,7 +11,7 @@ import { // import CountryPicker, { DARK_THEME } from "react-native-country-picker-modal"; import usePlaceApi from "react-native-minuit/src/hooks/usePlacesApi"; -import { art, icons } from "../assets"; +import { icons } from "../assets"; import { Fonts, Palette, Style, gutters } from "../styles"; import { FONT_FAMILY } from "../styles/Fonts"; @@ -69,11 +69,7 @@ const Input = ({ const ContainerView = isBlur ? BlurView : View; const resolvedKeyboardType = textInputProps?.keyboardType ?? - (isNumeric - ? "numeric" - : type === "email" - ? "email-address" - : "default"); + (isNumeric ? "numeric" : type === "email" ? "email-address" : "default"); return ( <> @@ -198,12 +194,6 @@ const Input = ({ setShowPassword(!showPassword)}> {showPassword ? : } - ) : type === "coinAmount" ? ( - ) : null} diff --git a/src/layouts/Page.js b/src/layouts/Page.js index bbf1ed9..2329ab3 100644 --- a/src/layouts/Page.js +++ b/src/layouts/Page.js @@ -1,5 +1,5 @@ /* eslint-disable react/display-name */ -import { Image, View } from "react-native"; +import { Image, Pressable, Text, View } from "react-native"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; import { SafeAreaView } from "react-native-safe-area-context"; import React from "reactn"; @@ -10,6 +10,11 @@ import NavigateHeader from "../components/NavigateHeader"; import ShareBtn from "../components/ShareBtn/ShareBtn"; import { isWeb } from "../hooks/useLayoutType.js"; import { gutters } from "../styles"; +import { icons } from "../assets"; +import { FONT_FAMILY } from "../styles/Fonts"; +import { useUserData } from "../providers/UserDataProvider"; +import { push } from "../navigation/NavigationService"; +import { Routes } from "../navigation"; export default ({ children, @@ -40,6 +45,53 @@ export default ({ blurIntensity = 0, backgroundColor = "#000", }) => { + const { + currentUID = null, + currentUserData = null, + } = useUserData?.() || {}; + + const coinBalance = React.useMemo(() => { + const data = currentUserData || {}; + const candidates = [ + data?.coins, + data?.coinBalance, + data?.coin, + data?.wallet?.coins, + data?.wallet?.coinBalance, + ]; + + for (const value of candidates) { + if (typeof value === "number" && Number.isFinite(value)) { + return value; + } + if (typeof value === "string") { + const parsed = Number(value); + if (Number.isFinite(parsed)) { + return parsed; + } + } + } + + return 0; + }, [currentUserData]); + + const formattedCoins = React.useMemo(() => { + try { + return new Intl.NumberFormat("fr-FR", { + maximumFractionDigits: 0, + }).format(coinBalance); + } catch (_error) { + return `${coinBalance}`; + } + }, [coinBalance]); + + const showCoinBadge = isWeb && !!currentUID; + + const handleCoinPress = React.useCallback(() => { + if (!showCoinBadge) return; + push?.(Routes?.Payments || "Payments", { pack: "packs" }); + }, [showCoinBadge]); + const PageContainer = containerType === "SAFE_AREA_VIEW" ? SafeAreaView : View; @@ -88,6 +140,41 @@ export default ({ }} /> ) : null} + {showCoinBadge ? ( + + + + {formattedCoins} + + + ) : null} { + const isFocused = useIsFocused(); const { userProjects = [], resetSelectedProject, @@ -425,6 +427,7 @@ const Home = ({ navigation, route }) => { activeIndex={activeStageIndex} onActiveIndexChange={setActiveStageIndex} backgroundImage={homeBackgroundImage} + isFocused={isFocused} /> { + navigate(Routes.Payments, { pack: "premium" }); + }, + }, { title: "Gérer mon abonnement", action: () => {},