Subscription

This commit is contained in:
Vins 2024-04-04 10:30:47 +02:00
parent 75a279711a
commit 6c687b5dde
5 changed files with 565 additions and 432 deletions

931
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev -p 5005",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
@ -25,7 +25,7 @@
"eslint-config-next": "13.2.4",
"form-data": "^4.0.0",
"jwt-decode": "^3.1.2",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.119",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.126",
"next": "13.2.4",
"prettier": "^2.8.7",
"react": "18.2.0",

View File

@ -0,0 +1,40 @@
import { EType } from "le-coffre-resources/dist/Admin/Subscription";
import BaseAdmin from "../BaseAdmin";
export interface IPostStripeParams {
type: EType;
nb_seats: number;
}
export type IPostStripeResponse = {
url: string;
};
export default class Stripe extends BaseAdmin {
private static instance: Stripe;
private readonly baseURl = this.namespaceUrl.concat("/stripe");
private constructor() {
super();
}
public static getInstance() {
if (!this.instance) {
return new Stripe();
} else {
return this.instance;
}
}
public async post(body: IPostStripeParams) {
const url = new URL(this.baseURl);
try {
console.log(body);
return await this.postRequest<IPostStripeResponse>(url, body as any);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
}

View File

@ -5,6 +5,9 @@ import { useEffect, useState } from "react";
import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Button from "@Front/Components/DesignSystem/Button";
import classnames from "classnames";
import { EType } from "le-coffre-resources/dist/Admin/Subscription";
import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe";
import { useRouter } from "next/router";
export const forfeitsPrices: Record<EForfeitType, number> = {
[EForfeitType.standard]: 99,
@ -25,6 +28,7 @@ export enum EPaymentFrequency {
}
export default function SubscribeCheckoutTicket(props: IProps) {
const router = useRouter();
const { forfeitType, numberOfCollaborators } = props;
const [paymentFrequency, setPaymentFrequency] = useState<EPaymentFrequency>(props.defaultFrequency ?? EPaymentFrequency.monthly);
const [multiplier, setMultiplier] = useState<number>(1);
@ -41,6 +45,20 @@ export default function SubscribeCheckoutTicket(props: IProps) {
return value.toFixed(2).replace(".", ",");
};
const handleSubmitPayment = async () => {
console.log("handleSubmitPayment");
const stripeCheckout = {
type: EType.Standard,
nb_seats: numberOfCollaborators,
};
try {
const newStripeCheckout = await Stripe.getInstance().post(stripeCheckout);
router.push(newStripeCheckout.url);
} catch (error) {}
};
return (
<div className={classes["root"]}>
<div className={classes["container"]}>
@ -169,7 +187,7 @@ export default function SubscribeCheckoutTicket(props: IProps) {
)}
</div>
</div>
<Button fullwidth className={classes["payment-button"]}>
<Button onClick={handleSubmitPayment} fullwidth className={classes["payment-button"]}>
Passer au paiement
</Button>
</div>

View File

@ -11,6 +11,8 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import useOpenable from "@Front/Hooks/useOpenable";
// import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe";
// import { EType } from "le-coffre-resources/dist/Admin/Subscription";
export default function SubscribeStandard() {
const [numberOfCollaborators, setNumberOfCollaborators] = useState(1);