"use client"; import React, { useEffect, useState } from "react"; import classNames from "classnames"; import styles from "./PlanMetricsWidget.module.css"; import { ISubscriptionInfo } from "@core/Models/Subscription.Model"; import StorefrontOutlinedIcon from "@mui/icons-material/StorefrontOutlined"; import PeopleOutlineOutlinedIcon from "@mui/icons-material/PeopleOutlineOutlined"; import CalendarTodayOutlinedIcon from "@mui/icons-material/CalendarTodayOutlined"; import AssignmentIndOutlinedIcon from "@mui/icons-material/AssignmentIndOutlined"; import RepeatOutlinedIcon from "@mui/icons-material/RepeatOutlined"; import Button from "@core/app/components/Button/Button"; import { MP_SUBS_STATUS } from "@core/Models/Subscription.Model"; import dayjs from "dayjs"; export interface PlanMetricsWidgetProps { subscription: ISubscriptionInfo; metrics: { organizationsCount: number; employeesCount: number; clientsCount: number; appointmentsCount: number; servicesCount: number; repeatsCount: number; }; onUpgrade: () => void; onRenew?: () => void; onCancel: () => void; isOwner?: boolean; } const MetricRow = ({ icon, title, value, maxValue, }: { icon: React.ReactNode; title: string; value: number; maxValue: number; }) => { const [animatedWidth, setAnimatedWidth] = useState(0); const isInfinite = maxValue === -1; const formattedMax = isInfinite ? "∞" : maxValue; const percentage = isInfinite ? 100 : Math.min(100, (value / maxValue) * 100); let statusClass = styles.safe; if (isInfinite) { statusClass = styles.infinite; } else { if (percentage >= 100) { statusClass = styles.danger; } else if (percentage >= 80) { statusClass = styles.warning; } } useEffect(() => { const timer = setTimeout(() => { setAnimatedWidth(percentage); }, 100); return () => clearTimeout(timer); }, [percentage]); return (
La suscripción ha sido cancelada
Vigente hasta el {dayjs(subscription.endDate).format("DD/MM/YYYY")}