"use client"; import { discountPercentageAtom, formulaResultAtom, initialPriceAtom, numberOfDaysAtom, numberOfDevicesAtom, } from "@/lib/atoms"; import { useAtom } from "jotai"; import { Minus, Plus } from "lucide-react"; import { useEffect } from "react"; import { Button, Group, Input, Label, NumberField, } from "react-aria-components"; export default function PriceCalculator() { const [initialPrice, setInitialPrice] = useAtom(initialPriceAtom); const [discountPercentage, setDiscountPercentage] = useAtom( discountPercentageAtom, ); const [numberOfDevices, setNumberOfDevices] = useAtom(numberOfDevicesAtom); const [numberOfDays, setNumberOfDays] = useAtom(numberOfDaysAtom); const [formulaResult, setFormulaResult] = useAtom(formulaResultAtom); useEffect(() => { const basePrice = initialPrice + (numberOfDevices - 1) * discountPercentage; setFormulaResult( `Price for ${numberOfDevices} device(s) over ${numberOfDays} day(s): MVR ${basePrice.toFixed(2)}`, ); }, [ initialPrice, discountPercentage, numberOfDevices, numberOfDays, setFormulaResult, ]); return (

Price Calculator

{/* Initial Price Input */} setInitialPrice(value)} /> {/* Number of Devices Input */} setNumberOfDevices(value)} /> {/* Number of Days Input */} setNumberOfDays(value)} /> {/* Discount Percentage Input */} setDiscountPercentage(value)} />
); } // Dependencies: pnpm install lucide-react react-aria-components function NumberInput({ label, value, onChange, }: { label: string; value: number; onChange: (value: number) => void }) { return (
); }