damus.io

damus.io website
git clone git://jb55.com/damus.io
Log | Files | Refs | README | LICENSE

commit 1007f44f86563a046eb869bfde8e7d37303b8080
parent e5b824c0b089b16034bef76ea0cc472ca3ba46c9
Author: Daniel D’Aquino <daniel@daquino.me>
Date:   Thu,  2 Jan 2025 11:18:15 +0900

Merge pull request #32 from danieldaquino/#31

Add Purple checkout maintenance mode option
Diffstat:
MREADME.md | 14++++++++++++++
Mcontent/compiled-locales/en.json | 18++++++++++++++++++
Mcontent/locales/en.json | 9+++++++++
Msrc/components/pages/purple-checkout.tsx | 20+++++++++++++++++++-
Asrc/components/sections/PurpleCheckoutMaintenance.tsx | 29+++++++++++++++++++++++++++++
5 files changed, 89 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md @@ -48,6 +48,20 @@ The project is roughly structured as follows: - `postcss.config.js` - The [PostCSS](https://postcss.org/) configuration file, which is used to configure the PostCSS compiler. PostCSS is used to compile Tailwind CSS to regular CSS. - `src/pages/api` - The [Next.js API routes](https://nextjs.org/docs/api-routes/introduction), which can used to implement server-side (serverless) functions. +## Operations + +### Putting Purple checkout under maintenance mode + +To put the Purple checkout under maintenance mode, simply make a route called `/purple-checkout-maintenance` available (returns HTTP 200). + +In a static build, this can be done by creating a file called `purple-checkout-maintenance` at the root of wherever the static files are being hosted: + +```bash +touch /path/to/static/files/purple-checkout-maintenance +``` + +When present, the checkout page will be replaced with a maintenance message. + ## Contributing You can send me patches over nostr or [email][email] at jb55@jb55.com diff --git a/content/compiled-locales/en.json b/content/compiled-locales/en.json @@ -905,6 +905,24 @@ "value": "Get more from Damus." } ], + "purple.checkout-maintenance.description": [ + { + "type": 0, + "value": "Under maintenance" + } + ], + "purple.checkout-maintenance.description-2": [ + { + "type": 0, + "value": "We are working on some fixes, please come back later. Thank you for your patience." + } + ], + "purple.checkout-maintenance.title": [ + { + "type": 0, + "value": "Checkout" + } + ], "purple.checkout.continue": [ { "type": 0, diff --git a/content/locales/en.json b/content/locales/en.json @@ -446,6 +446,15 @@ "purple.benefits.headline": { "string": "Get more from Damus." }, + "purple.checkout-maintenance.description": { + "string": "Under maintenance" + }, + "purple.checkout-maintenance.description-2": { + "string": "We are working on some fixes, please come back later. Thank you for your patience." + }, + "purple.checkout-maintenance.title": { + "string": "Checkout" + }, "purple.checkout.continue": { "string": "Continue in the app" }, diff --git a/src/components/pages/purple-checkout.tsx b/src/components/pages/purple-checkout.tsx @@ -2,17 +2,35 @@ import Head from "next/head"; import { useIntl } from 'react-intl' import { Footer } from '@/components/sections/Footer'; import { PurpleCheckout as CheckoutSection } from '@/components/sections/PurpleCheckout'; +import { useEffect, useState } from "react"; +import { PurpleCheckoutMaintenance } from "../sections/PurpleCheckoutMaintenance"; export function PurpleCheckout() { const intl = useIntl() + const [underMaintenance, setUnderMaintenance] = useState(false); + + // Declare the function to check maintenance status + const checkIfUnderMaintenance = async () => { + const response = await fetch('/purple-checkout-maintenance'); + // If response is 200 OK, return true, if 404 Not Found, return false + return response.status === 200; + } + + useEffect(() => { + checkIfUnderMaintenance().then((isUnderMaintenance: boolean) => { + setUnderMaintenance(isUnderMaintenance); + }).catch(error => { + console.error('Failed to check maintenance status:', error); + }); + }, []); return (<> <Head> <title>Damus Purple checkout</title> </Head> <main style={{ scrollBehavior: "smooth" }}> - <CheckoutSection /> + {underMaintenance ? <PurpleCheckoutMaintenance /> : <CheckoutSection />} <Footer /> </main> </>) diff --git a/src/components/sections/PurpleCheckoutMaintenance.tsx b/src/components/sections/PurpleCheckoutMaintenance.tsx @@ -0,0 +1,29 @@ +import { Construction } from "lucide-react"; +import { PurpleLayout } from "../PurpleLayout"; +import { useIntl } from "react-intl"; + + +export function PurpleCheckoutMaintenance() { + const intl = useIntl() + + // MARK: - Render + + return (<> + <PurpleLayout> + <h2 className="text-2xl text-left text-purple-200 font-semibold break-keep mb-2"> + {intl.formatMessage({ id: "purple.checkout-maintenance.title", defaultMessage: "Checkout" })} + </h2> + <div className="text-purple-200/70 text-normal text-left mb-6 font-semibold flex flex-col md:flex-row gap-3 rounded-lg bg-purple-200/10 p-3 items-center md:items-start"> + <Construction className="w-6 h-6 shrink-0 mt-0 md:mt-1" /> + <div className="flex flex-col text-center md:text-left"> + <span className="text-normal md:text-lg mb-2"> + {intl.formatMessage({ id: "purple.checkout-maintenance.description", defaultMessage: "Under maintenance" })} + </span> + <span className="text-xs text-purple-200/50"> + {intl.formatMessage({ id: "purple.checkout-maintenance.description-2", defaultMessage: "We are working on some fixes, please come back later. Thank you for your patience." })} + </span> + </div> + </div> + </PurpleLayout> + </>) +}