From bb5388a67c80eba260e3b3ec91dcac5e90fb69bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cpsmith586=E2=80=9D?= <“psmith586@yahoo.com”>
Date: Sun, 14 Jul 2024 13:33:29 -0700
Subject: [PATCH 1/6] t shirt page and stripe setup
---
.gitignore | 1 +
app/api/checkout_sessions/route.ts | 34 +++
app/api/products/route.ts | 13 +
app/products/page.tsx | 8 +
constants/navigation.tsx | 10 +
next.config.mjs | 20 +-
package-lock.json | 302 +++++++++++++++-----
package.json | 9 +-
templates/ProductPage/Products/products.tsx | 92 ++++++
templates/ProductPage/index.tsx | 35 +++
yarn.lock | 153 ++++++++--
11 files changed, 580 insertions(+), 97 deletions(-)
create mode 100644 app/api/checkout_sessions/route.ts
create mode 100644 app/api/products/route.ts
create mode 100644 app/products/page.tsx
create mode 100644 templates/ProductPage/Products/products.tsx
create mode 100644 templates/ProductPage/index.tsx
diff --git a/.gitignore b/.gitignore
index 5056177..4fbc83f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ node_modules
.next
next-env.d.ts
.DS_Store
+.env*
diff --git a/app/api/checkout_sessions/route.ts b/app/api/checkout_sessions/route.ts
new file mode 100644
index 0000000..4f7cfea
--- /dev/null
+++ b/app/api/checkout_sessions/route.ts
@@ -0,0 +1,34 @@
+import { NextRequest, NextResponse } from 'next/server';
+import Stripe from 'stripe';
+
+const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
+
+export async function POST(req: NextRequest) {
+
+ const resp = await req.json();
+
+ try {
+
+ const data = JSON.parse(resp.body)
+ const priceId = data.priceId
+
+ const session = await stripe.checkout.sessions.create({
+ payment_method_types: ['card'],
+ line_items: [
+ {
+ price: priceId,
+ quantity: 1,
+ },
+ ],
+ mode: 'payment',
+ success_url: `${process.env.HOST}/products/success`,
+ cancel_url: `${process.env.HOST}/products/canceled`,
+ });
+
+ console.log("redirect: ", session.url)
+
+ return NextResponse.json({ session: session, ok: true });
+ } catch (err: any) {
+ return NextResponse.json({ error: err.message, ok: false }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/app/api/products/route.ts b/app/api/products/route.ts
new file mode 100644
index 0000000..7c2e871
--- /dev/null
+++ b/app/api/products/route.ts
@@ -0,0 +1,13 @@
+import { NextRequest, NextResponse } from 'next/server';
+import Stripe from 'stripe';
+
+const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
+
+export async function GET() {
+ try {
+ const products = await stripe.products.list({ limit: 10 });
+ return NextResponse.json(products.data);
+ } catch (error: any) {
+ return NextResponse.json({ error: error.message });
+ }
+}
diff --git a/app/products/page.tsx b/app/products/page.tsx
new file mode 100644
index 0000000..42fbaf6
--- /dev/null
+++ b/app/products/page.tsx
@@ -0,0 +1,8 @@
+import type { NextPage } from "next";
+import { ProductPage } from "@/templates/ProductPage";
+
+const Products: NextPage = () => {
+ return ;
+};
+
+export default Products;
\ No newline at end of file
diff --git a/constants/navigation.tsx b/constants/navigation.tsx
index b2e9d1a..519285a 100644
--- a/constants/navigation.tsx
+++ b/constants/navigation.tsx
@@ -40,6 +40,11 @@ export const navigation = [
id: "5",
title: "Contact Us",
url: "/contact-us",
+ },
+ {
+ id: "6",
+ title: "T-Shirts",
+ url: "/products"
}
];
@@ -96,6 +101,11 @@ export const menu = [
id: "5",
title: "Forms",
url: "/forms",
+ },
+ {
+ id: "6",
+ title: "T-Shirts",
+ url: "/tshirts"
}
],
},
diff --git a/next.config.mjs b/next.config.mjs
index a247a5b..ab3556e 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -2,10 +2,26 @@ const isProd = process.env.NODE_ENV === 'production';
const nextConfig = {
// Enables static exports
- output: "export",
+ //output: "export",
reactStrictMode: true,
images: {
- unoptimized: true // Disable Image Optimization
+ unoptimized: true, // Disable Image Optimization
+ domains: ["files.stripe.com"],
+
+ },
+ async headers() {
+ return [
+ {
+ source: "/:path*",
+ headers: [
+ { key: "Access-Control-Allow-Credentials", value: "true" },
+ { key: "Access-Control-Allow-Origin", value: "*" },
+ { key: "Access-Control-Allow-Methods", value: "GET,DELETE,PATCH,POST,PUT" },
+ { key: "Access-Control-Allow-Headers", value: "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" },
+ { key: "Access-Control-Max-Age", value: "1800" }
+ ]
+ }
+ ]
}
// Conditionally set basePath and assetPrefix for GitHub Pages in production
diff --git a/package-lock.json b/package-lock.json
index 5956489..ce8c906 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,10 +10,14 @@
"dependencies": {
"@headlessui/react": "^1.7.18",
"@headlessui/tailwindcss": "^0.2.0",
+ "@stripe/react-stripe-js": "^2.7.3",
+ "@stripe/stripe-js": "^4.1.0",
"@types/react-datepicker": "^4.19.5",
"@types/react-transition-group": "^4.4.10",
"@types/scroll-lock": "^2.1.3",
- "next": "14.1.0",
+ "@types/stripe": "^8.0.417",
+ "axios": "^1.7.2",
+ "next": "14.2.2",
"react": "^18",
"react-animate-height": "^3.2.3",
"react-datepicker": "^5.1.0",
@@ -23,6 +27,7 @@
"react-transition-group": "^4.4.5",
"scroll-lock": "^2.1.5",
"sharp": "^0.33.2",
+ "stripe": "^16.2.0",
"swiper": "^11.0.5",
"tailwind-merge": "^2.2.1",
"tailwind-scrollbar": "^3.0.5"
@@ -759,9 +764,10 @@
}
},
"node_modules/@next/env": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz",
- "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw=="
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.2.tgz",
+ "integrity": "sha512-sk72qRfM1Q90XZWYRoJKu/UWlTgihrASiYw/scb15u+tyzcze3bOuJ/UV6TBOQEeUaxOkRqGeuGUdiiuxc5oqw==",
+ "license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.1.0",
@@ -819,12 +825,13 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz",
- "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.2.tgz",
+ "integrity": "sha512-3iPgMhzbalizGwHNFUcGnDhFPSgVBHQ8aqSTAMxB5BvJG0oYrDf1WOJZlbXBgunOEj/8KMVbejEur/FpvFsgFQ==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -834,12 +841,13 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz",
- "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.2.tgz",
+ "integrity": "sha512-x7Afi/jt0ZBRUZHTi49yyej4o8znfIMHO4RvThuoc0P+uli8Jd99y5GKjxoYunPKsXL09xBXEM1+OQy2xEL0Ag==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -849,12 +857,13 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz",
- "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.2.tgz",
+ "integrity": "sha512-zbfPtkk7L41ODMJwSp5VbmPozPmMMQrzAc0HAUomVeVIIwlDGs/UCqLJvLNDt4jpWgc21SjjyIn762lNGrMaUA==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -864,12 +873,13 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz",
- "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.2.tgz",
+ "integrity": "sha512-wPbS3pI/JU16rm3XdLvvTmlsmm1nd+sBa2ohXgBZcShX4TgOjD4R+RqHKlI1cjo/jDZKXt6OxmcU0Iys0OC/yg==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -879,12 +889,13 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz",
- "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.2.tgz",
+ "integrity": "sha512-NqWOHqqq8iC9tuHvZxjQ2tX+jWy2X9y8NX2mcB4sj2bIccuCxbIZrU/ThFPZZPauygajZuVQ6zediejQHwZHwQ==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -894,12 +905,13 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz",
- "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.2.tgz",
+ "integrity": "sha512-lGepHhwb9sGhCcU7999+iK1ZZT+6rrIoVg40MP7DZski9GIZP80wORSbt5kJzh9v2x2ev2lxC6VgwMQT0PcgTA==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -909,12 +921,13 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz",
- "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.2.tgz",
+ "integrity": "sha512-TZSh/48SfcLEQ4rD25VVn2kdIgUWmMflRX3OiyPwGNXn3NiyPqhqei/BaqCYXViIQ+6QsG9R0C8LftMqy8JPMA==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -924,12 +937,13 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz",
- "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.2.tgz",
+ "integrity": "sha512-M0tBVNMEBJN2ZNQWlcekMn6pvLria7Sa2Fai5znm7CCJz4pP3lrvlSxhKdkCerk0D9E0bqx5yAo3o2Q7RrD4gA==",
"cpu": [
"ia32"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -939,12 +953,13 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz",
- "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.2.tgz",
+ "integrity": "sha512-a/20E/wtTJZ3Ykv3f/8F0l7TtgQa2LWHU2oNB9bsu0VjqGuGGHmm/q6waoUNQYTVPYrrlxxaHjJcDV6aiSTt/w==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -989,7 +1004,6 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
"optional": true,
"engines": {
"node": ">=14"
@@ -1010,11 +1024,42 @@
"integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==",
"dev": true
},
+ "node_modules/@stripe/react-stripe-js": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-2.7.3.tgz",
+ "integrity": "sha512-05t6oY7cmAJt7asknmeoI4z4GnutgKRZ7dcdTWCkeYclONzIRMuMTiyjBMQ/q3I2sdNizSl25YZ8G6Lg4nN1aw==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.7.2"
+ },
+ "peerDependencies": {
+ "@stripe/stripe-js": "^1.44.1 || ^2.0.0 || ^3.0.0 || ^4.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@stripe/stripe-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-4.1.0.tgz",
+ "integrity": "sha512-HhstGRUz/4JdbZpb26OcOf8Qb/cFR02arvHvgz4sPFLSnI6ZNHC53Jc6JP/FGNwxtrF719YyUnK0gGy4oyhucQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.16"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "license": "Apache-2.0"
+ },
"node_modules/@swc/helpers": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
- "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
+ "license": "Apache-2.0",
"dependencies": {
+ "@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@@ -1053,7 +1098,6 @@
"version": "20.12.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
"integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
- "dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -1105,6 +1149,16 @@
"resolved": "https://registry.npmjs.org/@types/scroll-lock/-/scroll-lock-2.1.3.tgz",
"integrity": "sha512-9Z9MIt9qF5DFEKlLI5MlNnk3SjjHEo0wjhzMEmZaJxCad981cs9Zerd8J1G2ELJVjXto1q/Cd+fNwmuscFHnpA=="
},
+ "node_modules/@types/stripe": {
+ "version": "8.0.417",
+ "resolved": "https://registry.npmjs.org/@types/stripe/-/stripe-8.0.417.tgz",
+ "integrity": "sha512-PTuqskh9YKNENnOHGVJBm4sM0zE8B1jZw1JIskuGAPkMB+OH236QeN8scclhYGPA4nG6zTtPXgwpXdp+HPDTVw==",
+ "deprecated": "This is a stub types definition. stripe provides its own type definitions, so you do not need this installed.",
+ "license": "MIT",
+ "dependencies": {
+ "stripe": "*"
+ }
+ },
"node_modules/@typescript-eslint/parser": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
@@ -1508,6 +1562,12 @@
"integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
"dev": true
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
"node_modules/autoprefixer": {
"version": "10.4.19",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
@@ -1569,6 +1629,17 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
+ "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -1662,7 +1733,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -1810,6 +1880,18 @@
"simple-swizzle": "^0.2.2"
}
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -1960,7 +2042,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -1990,6 +2071,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -2143,7 +2233,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.2.4"
},
@@ -2155,7 +2244,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -2781,6 +2869,26 @@
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
"node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -2805,6 +2913,20 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
@@ -2828,7 +2950,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2877,7 +2998,6 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
@@ -3006,7 +3126,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -3047,7 +3166,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0"
},
@@ -3059,7 +3177,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3071,7 +3188,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3772,6 +3888,27 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3841,12 +3978,13 @@
"dev": true
},
"node_modules/next": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz",
- "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.2.tgz",
+ "integrity": "sha512-oGwUaa2bCs47FbuxWMpOoXtBMPYpvTPgdZr3UAo+pu7Ns00z9otmYpoeV1HEiYL06AlRQQIA/ypK526KjJfaxg==",
+ "license": "MIT",
"dependencies": {
- "@next/env": "14.1.0",
- "@swc/helpers": "0.5.2",
+ "@next/env": "14.2.2",
+ "@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
"graceful-fs": "^4.2.11",
@@ -3860,18 +3998,19 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.1.0",
- "@next/swc-darwin-x64": "14.1.0",
- "@next/swc-linux-arm64-gnu": "14.1.0",
- "@next/swc-linux-arm64-musl": "14.1.0",
- "@next/swc-linux-x64-gnu": "14.1.0",
- "@next/swc-linux-x64-musl": "14.1.0",
- "@next/swc-win32-arm64-msvc": "14.1.0",
- "@next/swc-win32-ia32-msvc": "14.1.0",
- "@next/swc-win32-x64-msvc": "14.1.0"
+ "@next/swc-darwin-arm64": "14.2.2",
+ "@next/swc-darwin-x64": "14.2.2",
+ "@next/swc-linux-arm64-gnu": "14.2.2",
+ "@next/swc-linux-arm64-musl": "14.2.2",
+ "@next/swc-linux-x64-gnu": "14.2.2",
+ "@next/swc-linux-x64-musl": "14.2.2",
+ "@next/swc-win32-arm64-msvc": "14.2.2",
+ "@next/swc-win32-ia32-msvc": "14.2.2",
+ "@next/swc-win32-x64-msvc": "14.2.2"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.3.0"
@@ -3880,6 +4019,9 @@
"@opentelemetry/api": {
"optional": true
},
+ "@playwright/test": {
+ "optional": true
+ },
"sass": {
"optional": true
}
@@ -3928,7 +4070,6 @@
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -4372,6 +4513,12 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -4381,6 +4528,21 @@
"node": ">=6"
}
},
+ "node_modules/qs": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz",
+ "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4736,7 +4898,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -4826,7 +4987,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -5057,6 +5217,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/stripe": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/stripe/-/stripe-16.2.0.tgz",
+ "integrity": "sha512-kNHb5x6mlQJ8V92Afn+F+uyHG3U0+Mc1pOYxDkbEh/kI3oF63URnUt6dwTQthELYWBy04arerm2XjwgtzEPDEA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": ">=8.1.0",
+ "qs": "^6.11.0"
+ },
+ "engines": {
+ "node": ">=12.*"
+ }
+ },
"node_modules/styled-jsx": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
@@ -5455,8 +5628,7 @@
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/update-browserslist-db": {
"version": "1.0.13",
diff --git a/package.json b/package.json
index 547775c..da443eb 100644
--- a/package.json
+++ b/package.json
@@ -11,10 +11,14 @@
"dependencies": {
"@headlessui/react": "^1.7.18",
"@headlessui/tailwindcss": "^0.2.0",
+ "@stripe/react-stripe-js": "^2.7.3",
+ "@stripe/stripe-js": "^4.1.0",
"@types/react-datepicker": "^4.19.5",
"@types/react-transition-group": "^4.4.10",
"@types/scroll-lock": "^2.1.3",
- "next": "14.1.0",
+ "@types/stripe": "^8.0.417",
+ "axios": "^1.7.2",
+ "next": "14.2.2",
"react": "^18",
"react-animate-height": "^3.2.3",
"react-datepicker": "^5.1.0",
@@ -24,6 +28,7 @@
"react-transition-group": "^4.4.5",
"scroll-lock": "^2.1.5",
"sharp": "^0.33.2",
+ "stripe": "^16.2.0",
"swiper": "^11.0.5",
"tailwind-merge": "^2.2.1",
"tailwind-scrollbar": "^3.0.5"
@@ -39,4 +44,4 @@
"tailwindcss": "^3.3.0",
"typescript": "^5"
}
-}
+}
\ No newline at end of file
diff --git a/templates/ProductPage/Products/products.tsx b/templates/ProductPage/Products/products.tsx
new file mode 100644
index 0000000..c8a7702
--- /dev/null
+++ b/templates/ProductPage/Products/products.tsx
@@ -0,0 +1,92 @@
+"use client"
+
+import { useEffect } from "react";
+import Image from "next/image";
+import axios from "axios";
+
+export const Products = ({ products }) => {
+
+ useEffect(() => {
+ const query = new URLSearchParams(window.location.search);
+ if (query.get("success")) {
+ console.log("Order placed!");
+ }
+
+ if (query.get("canceled")) {
+ console.log(
+ "Order canceled"
+ );
+ }
+ }, []);
+
+ const handleSubmit = async (event: any, priceId: number) => {
+ event.preventDefault();
+ try {
+ const response = await axios.post("/api/checkout_sessions", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ //"Access-Control-Allow-Origin": "*"
+ },
+ body: JSON.stringify({ priceId }),
+ });
+
+ if (response.status == 200) {
+ const sessionInfo = await response.data;
+ console.log("response: ", response.data)
+ const session = sessionInfo.session
+ window.location.href = session.url;
+ }
+ } catch (err: any) {
+ console.log(err)
+ }
+ };
+
+ return (
+
+
+
T-Shirts
+
+ {products.length ? (
+
+ {products.map((product) => (
+ -
+ {/* */}
+
+ ))}
+
+ ) : (
+
No products
+ )}
+
+
+
+ );
+};
\ No newline at end of file
diff --git a/templates/ProductPage/index.tsx b/templates/ProductPage/index.tsx
new file mode 100644
index 0000000..a0de185
--- /dev/null
+++ b/templates/ProductPage/index.tsx
@@ -0,0 +1,35 @@
+"use client"
+import { useEffect, useState } from 'react';
+import Layout from "@/components/Layout";
+import { Products } from "./Products/products";
+import axios from 'axios';
+
+interface Product {
+ id: string;
+ name: string;
+ description: string;
+ images: string[];
+ price: {
+ unit_amount: number;
+ currency: string;
+ };
+}
+
+export const ProductPage = () => {
+ const [products, setProducts] = useState([]);
+
+ useEffect(() => {
+ async function fetchProducts() {
+ const { data } = await axios.get("api/products");
+ setProducts(data);
+ }
+ fetchProducts();
+ }, []);
+
+
+ return (
+
+
+
+ )
+}
diff --git a/yarn.lock b/yarn.lock
index e12fc60..7caff86 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -175,10 +175,10 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@next/env@14.1.0":
- version "14.1.0"
- resolved "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz"
- integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==
+"@next/env@14.2.2":
+ version "14.2.2"
+ resolved "https://registry.npmjs.org/@next/env/-/env-14.2.2.tgz"
+ integrity sha512-sk72qRfM1Q90XZWYRoJKu/UWlTgihrASiYw/scb15u+tyzcze3bOuJ/UV6TBOQEeUaxOkRqGeuGUdiiuxc5oqw==
"@next/eslint-plugin-next@14.1.0":
version "14.1.0"
@@ -187,10 +187,10 @@
dependencies:
glob "10.3.10"
-"@next/swc-darwin-arm64@14.1.0":
- version "14.1.0"
- resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz"
- integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==
+"@next/swc-darwin-arm64@14.2.2":
+ version "14.2.2"
+ resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.2.tgz"
+ integrity sha512-3iPgMhzbalizGwHNFUcGnDhFPSgVBHQ8aqSTAMxB5BvJG0oYrDf1WOJZlbXBgunOEj/8KMVbejEur/FpvFsgFQ==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -228,11 +228,29 @@
resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz"
integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==
-"@swc/helpers@0.5.2":
- version "0.5.2"
- resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz"
- integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==
+"@stripe/react-stripe-js@^2.7.3":
+ version "2.7.3"
+ resolved "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-2.7.3.tgz"
+ integrity sha512-05t6oY7cmAJt7asknmeoI4z4GnutgKRZ7dcdTWCkeYclONzIRMuMTiyjBMQ/q3I2sdNizSl25YZ8G6Lg4nN1aw==
dependencies:
+ prop-types "^15.7.2"
+
+"@stripe/stripe-js@^1.44.1 || ^2.0.0 || ^3.0.0 || ^4.0.0", "@stripe/stripe-js@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-4.1.0.tgz"
+ integrity sha512-HhstGRUz/4JdbZpb26OcOf8Qb/cFR02arvHvgz4sPFLSnI6ZNHC53Jc6JP/FGNwxtrF719YyUnK0gGy4oyhucQ==
+
+"@swc/counter@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
+ integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
+
+"@swc/helpers@0.5.5":
+ version "0.5.5"
+ resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz"
+ integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==
+ dependencies:
+ "@swc/counter" "^0.1.3"
tslib "^2.4.0"
"@tanstack/react-virtual@^3.0.0-beta.60":
@@ -252,7 +270,7 @@
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
-"@types/node@^20":
+"@types/node@^20", "@types/node@>=8.1.0":
version "20.12.7"
resolved "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz"
integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
@@ -301,6 +319,13 @@
resolved "https://registry.npmjs.org/@types/scroll-lock/-/scroll-lock-2.1.3.tgz"
integrity sha512-9Z9MIt9qF5DFEKlLI5MlNnk3SjjHEo0wjhzMEmZaJxCad981cs9Zerd8J1G2ELJVjXto1q/Cd+fNwmuscFHnpA==
+"@types/stripe@^8.0.417":
+ version "8.0.417"
+ resolved "https://registry.npmjs.org/@types/stripe/-/stripe-8.0.417.tgz"
+ integrity sha512-PTuqskh9YKNENnOHGVJBm4sM0zE8B1jZw1JIskuGAPkMB+OH236QeN8scclhYGPA4nG6zTtPXgwpXdp+HPDTVw==
+ dependencies:
+ stripe "*"
+
"@typescript-eslint/parser@^5.4.2 || ^6.0.0":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz"
@@ -533,6 +558,11 @@ ast-types-flow@^0.0.8:
resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz"
integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
autoprefixer@^10.0.1:
version "10.4.19"
resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz"
@@ -557,6 +587,15 @@ axe-core@=4.7.0:
resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz"
integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
+axios@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz"
+ integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
axobject-query@^3.2.1:
version "3.2.1"
resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz"
@@ -700,6 +739,13 @@ color@^4.2.3:
color-convert "^2.0.1"
color-string "^1.9.0"
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
commander@^4.0.0:
version "4.1.1"
resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz"
@@ -810,6 +856,11 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
dequal@^2.0.3:
version "2.0.3"
resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz"
@@ -1290,6 +1341,11 @@ flatted@^3.2.9:
resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz"
integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+
for-each@^0.3.3:
version "0.3.3"
resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz"
@@ -1305,6 +1361,15 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
fraction.js@^4.3.7:
version "4.3.7"
resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz"
@@ -1908,6 +1973,18 @@ micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.2"
picomatch "^2.3.1"
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
@@ -1963,28 +2040,28 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-next@14.1.0:
- version "14.1.0"
- resolved "https://registry.npmjs.org/next/-/next-14.1.0.tgz"
- integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==
+next@14.2.2:
+ version "14.2.2"
+ resolved "https://registry.npmjs.org/next/-/next-14.2.2.tgz"
+ integrity sha512-oGwUaa2bCs47FbuxWMpOoXtBMPYpvTPgdZr3UAo+pu7Ns00z9otmYpoeV1HEiYL06AlRQQIA/ypK526KjJfaxg==
dependencies:
- "@next/env" "14.1.0"
- "@swc/helpers" "0.5.2"
+ "@next/env" "14.2.2"
+ "@swc/helpers" "0.5.5"
busboy "1.6.0"
caniuse-lite "^1.0.30001579"
graceful-fs "^4.2.11"
postcss "8.4.31"
styled-jsx "5.1.1"
optionalDependencies:
- "@next/swc-darwin-arm64" "14.1.0"
- "@next/swc-darwin-x64" "14.1.0"
- "@next/swc-linux-arm64-gnu" "14.1.0"
- "@next/swc-linux-arm64-musl" "14.1.0"
- "@next/swc-linux-x64-gnu" "14.1.0"
- "@next/swc-linux-x64-musl" "14.1.0"
- "@next/swc-win32-arm64-msvc" "14.1.0"
- "@next/swc-win32-ia32-msvc" "14.1.0"
- "@next/swc-win32-x64-msvc" "14.1.0"
+ "@next/swc-darwin-arm64" "14.2.2"
+ "@next/swc-darwin-x64" "14.2.2"
+ "@next/swc-linux-arm64-gnu" "14.2.2"
+ "@next/swc-linux-arm64-musl" "14.2.2"
+ "@next/swc-linux-x64-gnu" "14.2.2"
+ "@next/swc-linux-x64-musl" "14.2.2"
+ "@next/swc-win32-arm64-msvc" "14.2.2"
+ "@next/swc-win32-ia32-msvc" "14.2.2"
+ "@next/swc-win32-x64-msvc" "14.2.2"
node-releases@^2.0.14:
version "2.0.14"
@@ -2242,11 +2319,23 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
punycode@^2.1.0:
version "2.3.1"
resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+qs@^6.11.0:
+ version "6.12.3"
+ resolved "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz"
+ integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==
+ dependencies:
+ side-channel "^1.0.6"
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
@@ -2668,6 +2757,14 @@ strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+stripe@*, stripe@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.npmjs.org/stripe/-/stripe-16.2.0.tgz"
+ integrity sha512-kNHb5x6mlQJ8V92Afn+F+uyHG3U0+Mc1pOYxDkbEh/kI3oF63URnUt6dwTQthELYWBy04arerm2XjwgtzEPDEA==
+ dependencies:
+ "@types/node" ">=8.1.0"
+ qs "^6.11.0"
+
styled-jsx@5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz"
From f1169eeab5649b3d073556798c548154281e9d98 Mon Sep 17 00:00:00 2001
From: psmith586
Date: Sun, 14 Jul 2024 15:13:15 -0700
Subject: [PATCH 2/6] require troop no. on checkout
---
app/api/checkout_sessions/route.ts | 62 +++++++++++++++++-------------
1 file changed, 36 insertions(+), 26 deletions(-)
diff --git a/app/api/checkout_sessions/route.ts b/app/api/checkout_sessions/route.ts
index 4f7cfea..114ec56 100644
--- a/app/api/checkout_sessions/route.ts
+++ b/app/api/checkout_sessions/route.ts
@@ -5,30 +5,40 @@ const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function POST(req: NextRequest) {
- const resp = await req.json();
-
- try {
-
- const data = JSON.parse(resp.body)
- const priceId = data.priceId
-
- const session = await stripe.checkout.sessions.create({
- payment_method_types: ['card'],
- line_items: [
- {
- price: priceId,
- quantity: 1,
- },
- ],
- mode: 'payment',
- success_url: `${process.env.HOST}/products/success`,
- cancel_url: `${process.env.HOST}/products/canceled`,
- });
-
- console.log("redirect: ", session.url)
-
- return NextResponse.json({ session: session, ok: true });
- } catch (err: any) {
- return NextResponse.json({ error: err.message, ok: false }, { status: 500 });
- }
+ const resp = await req.json();
+
+ try {
+
+ const data = JSON.parse(resp.body)
+ const priceId = data.priceId
+
+ const session = await stripe.checkout.sessions.create({
+ payment_method_types: ['card'],
+ line_items: [
+ {
+ price: priceId,
+ quantity: 1,
+ },
+ ],
+ mode: 'payment',
+ success_url: `${process.env.HOST}/products/success`,
+ cancel_url: `${process.env.HOST}/products/canceled`,
+ custom_fields: [
+ {
+ key: "troop_number",
+ label: {
+ type: "custom",
+ custom: "Troop Number"
+ },
+ type: "text"
+ }
+ ]
+ });
+
+ console.log("redirect: ", session.url)
+
+ return NextResponse.json({ session: session, ok: true });
+ } catch (err: any) {
+ return NextResponse.json({ error: err.message, ok: false }, { status: 500 });
+ }
}
\ No newline at end of file
From b38ea9d5b0fa66f92111a1c11d7eaa4db22f88f5 Mon Sep 17 00:00:00 2001
From: psmith586
Date: Sat, 27 Jul 2024 16:31:12 -0700
Subject: [PATCH 3/6] quantity
---
app/api/checkout_sessions/route.ts | 7 +++++--
templates/ProductPage/Products/products.tsx | 1 -
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/api/checkout_sessions/route.ts b/app/api/checkout_sessions/route.ts
index 114ec56..60a5309 100644
--- a/app/api/checkout_sessions/route.ts
+++ b/app/api/checkout_sessions/route.ts
@@ -18,6 +18,11 @@ export async function POST(req: NextRequest) {
{
price: priceId,
quantity: 1,
+ adjustable_quantity: {
+ enabled: true,
+ minimum: 1,
+ maximum: 999
+ }
},
],
mode: 'payment',
@@ -35,8 +40,6 @@ export async function POST(req: NextRequest) {
]
});
- console.log("redirect: ", session.url)
-
return NextResponse.json({ session: session, ok: true });
} catch (err: any) {
return NextResponse.json({ error: err.message, ok: false }, { status: 500 });
diff --git a/templates/ProductPage/Products/products.tsx b/templates/ProductPage/Products/products.tsx
index c8a7702..af14e2c 100644
--- a/templates/ProductPage/Products/products.tsx
+++ b/templates/ProductPage/Products/products.tsx
@@ -33,7 +33,6 @@ export const Products = ({ products }) => {
if (response.status == 200) {
const sessionInfo = await response.data;
- console.log("response: ", response.data)
const session = sessionInfo.session
window.location.href = session.url;
}
From 293b08fc41fce08f72e48d3a57107c79ffcedede Mon Sep 17 00:00:00 2001
From: psmith586
Date: Tue, 30 Jul 2024 16:41:01 -0700
Subject: [PATCH 4/6] leader guide
---
...anceCamp 2024 Leaders' Guide 7.23.24.docx} | Bin 244176 -> 244221 bytes
templates/FormsPage/Main/index.tsx | 6 +++---
2 files changed, 3 insertions(+), 3 deletions(-)
rename public/forms/{AdvanceCamp 2024 Leaders' Guide 5.16.24.docx => AdvanceCamp 2024 Leaders' Guide 7.23.24.docx} (85%)
diff --git a/public/forms/AdvanceCamp 2024 Leaders' Guide 5.16.24.docx b/public/forms/AdvanceCamp 2024 Leaders' Guide 7.23.24.docx
similarity index 85%
rename from public/forms/AdvanceCamp 2024 Leaders' Guide 5.16.24.docx
rename to public/forms/AdvanceCamp 2024 Leaders' Guide 7.23.24.docx
index 2325d2a71e777cf584542cd6c3b7e1408cec7434..3d2ece10c739a208fe2f894ec51266fa8da192f3 100644
GIT binary patch
delta 34302
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