// Appli V.1 démo
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
import {
View,
Text,
SafeAreaView,
Pressable,
StatusBar,
FlatList,
TextInput,
ScrollView,
Animated,
Easing,
Dimensions,
Platform,
Alert,
Image,
} from "react-native";
import MapView, { Marker, Callout } from "react-native-maps";
import * as Location from "expo-location";
import AsyncStorage from "@react-native-async-storage/async-storage";
import QRCode from "react-native-qrcode-svg";
const { width: SCREEN_W } = Dimensions.get("window");
const LOGO = require("./actifs/logo.png");
const COMPOST_IMG = require("./actifs/compost.png");
const ADMIN = { username: "admin", role: "ADMIN" };
const COMPOST_RATIO = 0.4;
const MATURATION_DAYS = 20;
const DEFAULT_USER_COORDS = { latitude: 48.8719, longitude: 2.2255 };
const DEFAULT_ADMIN_PIN = "1234";
function pointsFromDepositKg(kg) {
const n = Number(kg);
if (!Number.isFinite(n) || n <= 0) return 0;
return Math.round(n * 100);
}
const K_COMPOSTERS = "greenloop_composters_v3";
const K_DEPOSITS = "greenloop_deposits_v3";
const K_SESSION = "greenloop_session_v3";
const K_PROFILE = "greenloop_profile_v3";
const K_USERS = "greenloop_users_v1";
const K_CURRENT_USER = "greenloop_current_user_v1";
const K_THEME = "greenloop_theme_v3";
const K_ADMIN_PIN = "greenloop_admin_pin_v3";
const K_SPENT_POINTS = "greenloop_spent_points_v1";
const VAT_MODES = [
{ key: "REMPLISSAGE", label: "Remplissage" },
{ key: "RAMOLLISSEMENT", label: "Ramollissement" },
{ key: "DIGESTION_ACTIVE", label: "Digestion active" },
{ key: "MATURATION", label: "Maturation" },
{ key: "STOCKAGE", label: "Stockage" },
];
export default function App() {
const [themeMode, setThemeMode] = useState("dark");
const [screen, setScreen] = useState("MAIN");
const [session, setSession] = useState(null);
const [composters, setComposters] = useState([]);
const [deposits, setDeposits] = useState([]);
const [selectedComposterId, setSelectedComposterId] = useState(null);
const [remoteConfig, setRemoteConfig] = useState({});
useEffect(() => {
// chargement des données locales
// géolocalisation utilisateur
// initialisation des composteurs et de la session
}, []);
function onCreateDeposit() {
// création d’un dépôt
// calcul du compost estimé et des points
}
function sendRemoteConfigToComposter(composterId) {
// envoi de la configuration au composteur sélectionné
}
return (
GreenLoop
Carte, dépôts, classement, boutique, suivi en temps réel
);
}
Cette zone reprend visuellement le code de l’application pour montrer sa structure sans alourdir le site. Elle met en valeur les dépendances, la logique de dépôt, la carte, les points, le QR code, le suivi temps réel et l’administration du composteur.