From 39288db4ae28d8ddd1439ab9d0e41868a98fb4cd Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 14:01:34 +0200 Subject: [PATCH 1/9] shorter order id --- src/api/create_order.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/create_order.js b/src/api/create_order.js index bb52d3d..ffbac8f 100644 --- a/src/api/create_order.js +++ b/src/api/create_order.js @@ -81,5 +81,5 @@ export default async function handler(req, res) { } function createOrderId() { - return crypto.randomBytes(16).toString('hex'); + return crypto.randomBytes(8).toString('hex'); } From 2a48786a7948151f9fec92e5a3fc6dd32f66fda0 Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 14:01:41 +0200 Subject: [PATCH 2/9] include total payable in confirmation --- src/pages/confirmation.js | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/pages/confirmation.js b/src/pages/confirmation.js index f6cf26b..cc8c05c 100644 --- a/src/pages/confirmation.js +++ b/src/pages/confirmation.js @@ -12,6 +12,9 @@ export const query = graphql` scholarship_info contact_email confirmation_message + currency { + symbol + } payment_options { bank_transfer mobile_money_transfer @@ -29,15 +32,18 @@ export default function Confirmation({ data }) { contact_email, confirmation_message, payment_options, + currency, } = data.allRetreatsYaml.edges[0].node; const [needScholarship, setNeedScholarship] = useState(false); const [paymentMethod, setPaymentMethod] = useState(); + const [totalPayable, setTotalPayable] = useState(0); useEffect(() => { const params = new URLSearchParams(location.search); setNeedScholarship(params.get('need_scholarship') === 'true'); setPaymentMethod(params.get('payment_method')); - }, [needScholarship, paymentMethod]); + setTotalPayable(parseInt(params.get('total_payable') || 0, 10)); + }, [needScholarship, paymentMethod, totalPayable]); return (
@@ -56,14 +62,22 @@ export default function Confirmation({ data }) { />
)} - {paymentMethod && payment_options[paymentMethod] && ( -
- Payment -
- {payment_options[paymentMethod]} + {!needScholarship && + paymentMethod && + payment_options[paymentMethod] && ( +
+ Payment +
+ {payment_options[paymentMethod]} +
+ {totalPayable > 0 && ( +
+ Total Payable: {totalPayable} + {currency.symbol} +
+ )}
-
- )} + )}
Contact us From 67b674364745f02aeaec70a9f5d0521e94ad60f6 Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 16:36:17 +0200 Subject: [PATCH 3/9] get country data server side --- src/pages/index.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/pages/index.js b/src/pages/index.js index 8a8fa78..8f7cfac 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { graphql } from 'gatsby'; import { GatsbyImage, getImage } from 'gatsby-plugin-image'; import classnames from 'classnames'; +import axios from 'axios'; import marked from '../lib/marked'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import format from 'date-fns/format'; @@ -10,6 +11,22 @@ import format from 'date-fns/format'; import Nav from '../components/Nav'; import RegistrationForm from '../components/RegistrationForm'; +// @todo may be rename DOMAIN_HOST to BASE_URL + +export async function getServerData({ headers }) { + try { + const { data } = await axios.get('/api/get_country', { + headers: Object.fromEntries(headers), + }); + return { props: data, status: 200 }; + } catch (error) { + console.log(error.toString()); + return { + props: { country: '', status: 200 }, + }; + } +} + // get the latest retreat by sorting latest export const query = graphql` query { @@ -106,7 +123,7 @@ export const query = graphql` } `; -export default function Home({ data }) { +export default function Home({ data, serverData }) { // display the latest retreat const { title, @@ -352,6 +369,7 @@ export default function Home({ data }) { currency={currency} contact_email={contact_email} registration_info={marked(registration.text)} + country={serverData.country} />
@@ -362,6 +380,7 @@ export default function Home({ data }) { Home.propTypes = { data: PropTypes.object, + serverData: PropTypes.object, }; /* eslint-disable */ From 06e2bf90d6a85286ea6259af91aff867ab42c86f Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 18:43:10 +0200 Subject: [PATCH 4/9] use absolute url for ssr request --- src/pages/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index 8f7cfac..564f9f2 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -15,9 +15,12 @@ import RegistrationForm from '../components/RegistrationForm'; export async function getServerData({ headers }) { try { - const { data } = await axios.get('/api/get_country', { - headers: Object.fromEntries(headers), - }); + const { data } = await axios.get( + process.env.DOMAIN_HOST + '/api/get_country', + { + headers: Object.fromEntries(headers), + }, + ); return { props: data, status: 200 }; } catch (error) { console.log(error.toString()); From b946672b2630f6421773097814dffe18593fb6cb Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 19:45:13 +0200 Subject: [PATCH 5/9] remove get_country and use ssr function --- src/api/get_country.js | 17 ----------------- src/pages/index.js | 17 ++++++++--------- 2 files changed, 8 insertions(+), 26 deletions(-) delete mode 100644 src/api/get_country.js diff --git a/src/api/get_country.js b/src/api/get_country.js deleted file mode 100644 index fab7053..0000000 --- a/src/api/get_country.js +++ /dev/null @@ -1,17 +0,0 @@ -const axios = require('axios'); -const requestIp = require('request-ip'); - -const IP_API_URL = 'http://ip-api.com/json/'; - -export default async function getCountry(req, res) { - const clientIp = requestIp.getClientIp(req); - - try { - const { data } = await axios.get(IP_API_URL + clientIp); - if (data.status === 'fail') throw new Error(data.message); - res.json({ country: data.countryCode }); - } catch (e) { - console.log(e); - res.status(400).json({ error: e.toString() }); - } -} diff --git a/src/pages/index.js b/src/pages/index.js index 564f9f2..362a99a 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -3,10 +3,11 @@ import PropTypes from 'prop-types'; import { graphql } from 'gatsby'; import { GatsbyImage, getImage } from 'gatsby-plugin-image'; import classnames from 'classnames'; -import axios from 'axios'; -import marked from '../lib/marked'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import axios from 'axios'; +import requestIp from 'request-ip'; import format from 'date-fns/format'; +import marked from '../lib/marked'; import Nav from '../components/Nav'; import RegistrationForm from '../components/RegistrationForm'; @@ -15,13 +16,11 @@ import RegistrationForm from '../components/RegistrationForm'; export async function getServerData({ headers }) { try { - const { data } = await axios.get( - process.env.DOMAIN_HOST + '/api/get_country', - { - headers: Object.fromEntries(headers), - }, - ); - return { props: data, status: 200 }; + const IP_API_URL = 'http://ip-api.com/json/'; + const clientIp = requestIp.getClientIp({ headers }); + const { data } = await axios.get(IP_API_URL + clientIp); + if (data.status === 'fail') throw new Error(data.message); + return { props: data.countryCode, status: 200 }; } catch (error) { console.log(error.toString()); return { From 313b577c6ed9a363da35bf21d11449aca07a01f1 Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 22:03:17 +0200 Subject: [PATCH 6/9] get country info from netlify edge functions --- package-lock.json | 11 ----------- package.json | 1 - src/netlify/edge-functions/get_country.js | 6 ++++++ src/pages/index.js | 13 ++++++------- 4 files changed, 12 insertions(+), 19 deletions(-) create mode 100644 src/netlify/edge-functions/get_country.js diff --git a/package-lock.json b/package-lock.json index 2b59fb4..200b041 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "reactstrap": "^9.2.0", - "request-ip": "^3.3.0", "sass": "^1.68.0", "styled-components": "^6.0.8", "yup": "^1.3.2" @@ -24044,11 +24043,6 @@ "node": ">=0.10.0" } }, - "node_modules/request-ip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", - "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -44695,11 +44689,6 @@ } } }, - "request-ip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", - "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", diff --git a/package.json b/package.json index 98ba582..57f3904 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "reactstrap": "^9.2.0", - "request-ip": "^3.3.0", "sass": "^1.68.0", "styled-components": "^6.0.8", "yup": "^1.3.2" diff --git a/src/netlify/edge-functions/get_country.js b/src/netlify/edge-functions/get_country.js new file mode 100644 index 0000000..74c858d --- /dev/null +++ b/src/netlify/edge-functions/get_country.js @@ -0,0 +1,6 @@ +export default async (req, { geo }) => { + console.log('am here'); + return Response.json({ country: geo?.country?.code }); +}; + +export const config = { path: '/api/get_country' }; diff --git a/src/pages/index.js b/src/pages/index.js index 362a99a..364555b 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -5,7 +5,7 @@ import { GatsbyImage, getImage } from 'gatsby-plugin-image'; import classnames from 'classnames'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import axios from 'axios'; -import requestIp from 'request-ip'; +// import requestIp from 'request-ip'; import format from 'date-fns/format'; import marked from '../lib/marked'; @@ -14,13 +14,12 @@ import RegistrationForm from '../components/RegistrationForm'; // @todo may be rename DOMAIN_HOST to BASE_URL -export async function getServerData({ headers }) { +export async function getServerData() { try { - const IP_API_URL = 'http://ip-api.com/json/'; - const clientIp = requestIp.getClientIp({ headers }); - const { data } = await axios.get(IP_API_URL + clientIp); - if (data.status === 'fail') throw new Error(data.message); - return { props: data.countryCode, status: 200 }; + const { data } = await axios.get( + process.env.DOMAIN_URL + '/.netlify/edge-functions/get_country', + ); + return { props: data.country, status: 200 }; } catch (error) { console.log(error.toString()); return { From 950552f9df69e5fb7ad8548da013a2b1357240c8 Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 22:05:01 +0200 Subject: [PATCH 7/9] use specified route path --- src/pages/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.js b/src/pages/index.js index 364555b..310b144 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -17,7 +17,7 @@ import RegistrationForm from '../components/RegistrationForm'; export async function getServerData() { try { const { data } = await axios.get( - process.env.DOMAIN_URL + '/.netlify/edge-functions/get_country', + process.env.DOMAIN_HOST + '/api/get_country', ); return { props: data.country, status: 200 }; } catch (error) { From babcbb6d9a4de381842703c2ef07765bf99c2452 Mon Sep 17 00:00:00 2001 From: madhums Date: Sun, 8 Oct 2023 22:30:20 +0200 Subject: [PATCH 8/9] move edge-function dir --- {src/netlify => netlify}/edge-functions/get_country.js | 1 - 1 file changed, 1 deletion(-) rename {src/netlify => netlify}/edge-functions/get_country.js (85%) diff --git a/src/netlify/edge-functions/get_country.js b/netlify/edge-functions/get_country.js similarity index 85% rename from src/netlify/edge-functions/get_country.js rename to netlify/edge-functions/get_country.js index 74c858d..1650d5a 100644 --- a/src/netlify/edge-functions/get_country.js +++ b/netlify/edge-functions/get_country.js @@ -1,5 +1,4 @@ export default async (req, { geo }) => { - console.log('am here'); return Response.json({ country: geo?.country?.code }); }; From d322e6de30c866a8b2fd6294575fae0b3757afbe Mon Sep 17 00:00:00 2001 From: madhums Date: Mon, 9 Oct 2023 15:42:17 +0200 Subject: [PATCH 9/9] update content path --- gatsby-config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gatsby-config.js b/gatsby-config.js index bc37e70..906a952 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -42,7 +42,8 @@ module.exports = { { resolve: 'gatsby-source-filesystem', options: { - path: 'content/', + name: 'content', + path: `${__dirname}/content`, }, }, {