()
| 44 | } |
| 45 | |
| 46 | function App() { |
| 47 | |
| 48 | // --- For header --- |
| 49 | const [value, setValue] = useState<number>(0); |
| 50 | const [numDaysAlive, setNumDaysAlive] = useState<number>(0); |
| 51 | const [percentChange, setPercentChange] = useState<number>(0); |
| 52 | |
| 53 | // --- For middle section --- |
| 54 | const [rockyStatusData, setRockyStatusData] = useState<RockyGraphData[]>([]); |
| 55 | const [actionListData, setActionListData] = useState<ActionContributionListData[]>([]); |
| 56 | const [contributionListData, setContributionListData] = useState<ActionContributionListData[]>([]); |
| 57 | |
| 58 | // --- For wallet/donation stuff --- |
| 59 | const [donateValue, setDonateValue] = useState<number>(0.001); |
| 60 | const [donateType, setDonateType] = useState<DonationToken>("WETH"); |
| 61 | const [walletAddr, setWalletAddr] = useState<string>(""); |
| 62 | |
| 63 | // --- Modal state variables --- |
| 64 | const [modalIsOpen, setModalIsOpen] = useState<boolean>(false); |
| 65 | const [modalText, setModalText] = useState<string>(""); |
| 66 | const [modalDismissVisible, setModalDismissVisible] = useState<boolean>(true); |
| 67 | |
| 68 | // --- Firebase storage --- |
| 69 | const firebaseDbRef = useRef<Firestore | null>(null); |
| 70 | |
| 71 | useEffect(useCallback(() => { |
| 72 | const app = initializeApp(firebaseConfig); |
| 73 | const db = getFirestore(app); |
| 74 | firebaseDbRef.current = db; |
| 75 | loadDonationData(); |
| 76 | loadActionData(); |
| 77 | loadNetWorth(); |
| 78 | }, []), []); |
| 79 | |
| 80 | // --- Data loading --- |
| 81 | const compareDonations = (d1: RockyDonationsDocument, d2: RockyDonationsDocument): number => { |
| 82 | // --- First convert to "native" units --- |
| 83 | const d1HumanAmt = convertToHumanUnits(parseFloat(d1.amount), d1.token); |
| 84 | const d2HumanAmt = convertToHumanUnits(parseFloat(d2.amount), d2.token); |
| 85 | // --- Convert into equivalent USDC amounts --- |
| 86 | const d1USDCAmt = d1.token === "USDC" ? d1HumanAmt : d1HumanAmt * WETH_USDC_CONVERSION_RATE; |
| 87 | const d2USDCAmt = d2.token === "USDC" ? d2HumanAmt : d2HumanAmt * WETH_USDC_CONVERSION_RATE; |
| 88 | return d1USDCAmt > d2USDCAmt ? -1 : 1; |
| 89 | } |
| 90 | |
| 91 | const loadDonationData = () => { |
| 92 | if (firebaseDbRef.current != null) { |
| 93 | getDocs(collection(firebaseDbRef.current, "rocky_donations")) |
| 94 | .then((result) => { |
| 95 | |
| 96 | // --- Sort by raw data first --- |
| 97 | const rockyDonationsList: RockyDonationsDocument[] = result.docs.map((doc) => { |
| 98 | return (doc.data() as RockyDonationsDocument); |
| 99 | }); |
| 100 | rockyDonationsList.sort(compareDonations); |
| 101 | |
| 102 | // --- To print out a UNIQUE list of all of the people who have donated --- |
| 103 | const contentList = rockyDonationsList.map((rawDonationEntry) => { |
nothing calls this directly
no test coverage detected