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: () => {},