diff --git a/docs/wiki/Premium/premium.md b/docs/wiki/Premium/premium.md index 13cdb5c..ba584e5 100644 --- a/docs/wiki/Premium/premium.md +++ b/docs/wiki/Premium/premium.md @@ -3,6 +3,9 @@ sidebar_position: 3 sidebar_label: Premium Features --- +import DateFormatter from '@site/src/components/DateFormatter/dateFormatter.js'; +import FundingCalculator from '@site/src/components/FundingCalculator/fundingCalculator.js'; + # Donations and Cosmetics ## About Our Donation System @@ -21,6 +24,20 @@ Consider donating. You get some nice cosmetics and a big Thank You from the comm On the sidebar on the left you can explore a comprehensive documentation of all features and cosmetics you get when you buy a rank. ::: +--- + +## Funds secured until... + + + + +--- + ## FAQ ### Running Costs of Survival-Pi diff --git a/src/components/DateFormatter/dateFormatter.js b/src/components/DateFormatter/dateFormatter.js new file mode 100644 index 0000000..d31f312 --- /dev/null +++ b/src/components/DateFormatter/dateFormatter.js @@ -0,0 +1,18 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const DateFormatter = ({ date, color }) => { + const formattedDate = new Intl.DateTimeFormat('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' }).format(new Date(date)); + return
{formattedDate}
; +}; + +DateFormatter.propTypes = { + date: PropTypes.string.isRequired, + options: PropTypes.object, + color: PropTypes.string +}; + +export default DateFormatter; diff --git a/src/components/FundingCalculator/fundingCalculator.js b/src/components/FundingCalculator/fundingCalculator.js new file mode 100644 index 0000000..2f3b9d5 --- /dev/null +++ b/src/components/FundingCalculator/fundingCalculator.js @@ -0,0 +1,51 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const FundingCalculator = ({ transactions, monthlyCost }) => { + const calculateEndDate = (transactions, monthlyCost) => { + // Calculate total funds available as of the latest transaction date + let totalFunds = 0; + let latestDate = new Date(Math.max(...transactions.map(tx => new Date(tx.date)))); + + transactions.forEach(transaction => { + const transactionDate = new Date(transaction.date); + if (transactionDate <= latestDate) { + totalFunds += transaction.amount; + } + }); + + // Determine how many months the total funds will cover + const monthsCovered = totalFunds / monthlyCost; + const endDate = new Date(latestDate); + endDate.setMonth(endDate.getMonth() + Math.floor(monthsCovered)); + const remainingDays = (monthsCovered - Math.floor(monthsCovered)) * 30; + endDate.setDate(endDate.getDate() + remainingDays); + + return endDate; + }; + + const securedUntilDate = calculateEndDate(transactions, monthlyCost); + const currentDate = new Date(); + + const dateStyle = { + color: securedUntilDate >= currentDate ? 'green' : 'red', + fontSize: '2.5em', + textAlign: 'center' + }; + + return ( +
{securedUntilDate.toDateString()}
+ ); +}; + +FundingCalculator.propTypes = { + transactions: PropTypes.arrayOf( + PropTypes.shape({ + date: PropTypes.string.isRequired, + amount: PropTypes.number.isRequired, + }) + ).isRequired, + monthlyCost: PropTypes.number.isRequired, +}; + +export default FundingCalculator;