diff --git a/public/assets/css/core-extend.css b/public/assets/css/core-extend.css index 940f2065..32ebbf32 100644 --- a/public/assets/css/core-extend.css +++ b/public/assets/css/core-extend.css @@ -40,6 +40,64 @@ .text-royalblue{ color: #1796e3; } +.stepper-container { + position: relative; +} + +.timeline-horizontal { + position: relative; + padding: 0; + margin: 0; +} + +.timeline-item { + position: relative; + flex: 1; +} + +.timeline-point { + width: 20px; + height: 20px; + border-radius: 50%; + background: #dee2e6; + color: #6c757d; + display: flex; + justify-content: center; + align-items: center; + font-weight: 600; + z-index: 2; + position: relative; + padding: 3px; +} + +.timeline-point.completed { + background-color: var(--bs-success); + color: white; +} + +.timeline-point.active { + background-color: var(--bs-info); + color: white; + transform: scale(1.1); + padding: 4px; +} + +.timeline-line-horizontal { + content: ""; + position: absolute; + top: 10px; + left: 50%; + width:100% ; + height: 2px; + background-color: #dee2e6; + z-index: 1; +} + +.timeline-item.completed ~ .timeline-line-horizontal { + background-color: #28a745; +} + + .text-md { font-size: 2rem; diff --git a/src/components/UserSubscription/ProcessedPayment.jsx b/src/components/UserSubscription/ProcessedPayment.jsx new file mode 100644 index 00000000..aabaae27 --- /dev/null +++ b/src/components/UserSubscription/ProcessedPayment.jsx @@ -0,0 +1,295 @@ +import React, { useState, useMemo } from "react"; +import { useSubscription } from "../../hooks/useAuth"; +import { useParams } from "react-router-dom"; +import { useCreateTenant, useIndustries } from "../../hooks/useTenant"; +import { frequencyLabel } from "../../utils/appUtils"; +import { formatUTCToLocalTime } from "../../utils/dateUtils"; +const ProcessedPayment = () => { + const { frequency, planName } = useParams(); + const [selectedPlan, setSelectedPlan] = useState(planName); + const { + data: plans, + isError: isPlanError, + isLoading, + } = useSubscription(frequency); + const handleChange = (e) => { + setSelectedPlan(e.target.value); + }; + const visiblePlans = useMemo(() => { + if (!plans) return []; + + const planOrder = ["basic", "pro", "super"]; + const currentIndex = planOrder.indexOf(planName?.toLowerCase()); + + if (currentIndex === -1) return plans; // fallback: show all + const visibleNames = planOrder.slice(currentIndex); + + return plans.filter((p) => + visibleNames.includes(p.planName?.toLowerCase()) + ); + }, [plans, selectedPlan]); + const clients = [ + { + firstName: "Alice", + lastName: "Smith", + email: "alice.smith@example.com", + billingAddress: + "456 Elm Street, Metropolis, USA 456 Elm Street, Metropolis, USA 456 Elm Street, Metropolis, USA", + organizationName: "BetaTech Ltd.", + contactNumber: "+44 20 7946 0958", + onBoardingDate: "2025-09-15", + organizationSize: "10-50", + industryId: "c4d5e6f7-8901-2345-6789-abcdef123456", + reference: "d2e3f4a5-6789-0123-4567-89abcdef0123", + }, + ]; + return ( +
+ Select a plan that fits your team’s needs and unlock the + features that drive productivity. +
+
+ + Eos mutat malis maluisset et, agam ancillae quo te, in vim + congue pertinacia. +
+
+ In numquam omittam sea.
+
+ + Lorem ipsum dolor sit amet, virtute consequat ea qui, minim + graeco mel no. +
++ Provide organization information including name, size, industry, + and contact details. +
+- No matter which plan you choose, you’ll get access to powerful features.{" "} - Choose the best plan to fit your needs. -
{/* Frequency Switcher */}{error.message}
+{error.name}
+