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", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev -p 5005", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint", "lint": "next lint",
@ -25,7 +25,7 @@
"eslint-config-next": "13.2.4", "eslint-config-next": "13.2.4",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"jwt-decode": "^3.1.2", "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", "next": "13.2.4",
"prettier": "^2.8.7", "prettier": "^2.8.7",
"react": "18.2.0", "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 RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Button from "@Front/Components/DesignSystem/Button"; import Button from "@Front/Components/DesignSystem/Button";
import classnames from "classnames"; 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> = { export const forfeitsPrices: Record<EForfeitType, number> = {
[EForfeitType.standard]: 99, [EForfeitType.standard]: 99,
@ -25,6 +28,7 @@ export enum EPaymentFrequency {
} }
export default function SubscribeCheckoutTicket(props: IProps) { export default function SubscribeCheckoutTicket(props: IProps) {
const router = useRouter();
const { forfeitType, numberOfCollaborators } = props; const { forfeitType, numberOfCollaborators } = props;
const [paymentFrequency, setPaymentFrequency] = useState<EPaymentFrequency>(props.defaultFrequency ?? EPaymentFrequency.monthly); const [paymentFrequency, setPaymentFrequency] = useState<EPaymentFrequency>(props.defaultFrequency ?? EPaymentFrequency.monthly);
const [multiplier, setMultiplier] = useState<number>(1); const [multiplier, setMultiplier] = useState<number>(1);
@ -41,6 +45,20 @@ export default function SubscribeCheckoutTicket(props: IProps) {
return value.toFixed(2).replace(".", ","); 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 ( return (
<div className={classes["root"]}> <div className={classes["root"]}>
<div className={classes["container"]}> <div className={classes["container"]}>
@ -169,7 +187,7 @@ export default function SubscribeCheckoutTicket(props: IProps) {
)} )}
</div> </div>
</div> </div>
<Button fullwidth className={classes["payment-button"]}> <Button onClick={handleSubmitPayment} fullwidth className={classes["payment-button"]}>
Passer au paiement Passer au paiement
</Button> </Button>
</div> </div>

View File

@ -11,6 +11,8 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import RadioBox from "@Front/Components/DesignSystem/RadioBox"; import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import useOpenable from "@Front/Hooks/useOpenable"; 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() { export default function SubscribeStandard() {
const [numberOfCollaborators, setNumberOfCollaborators] = useState(1); const [numberOfCollaborators, setNumberOfCollaborators] = useState(1);