Installment Options

Example Implementation

// Sample payment plans data structure
const samplePaymentPlans = [
  {
    "resource": "plan",
    "planId": "pln_456",
    "mode": "live",
    "duration": "6",
    "frequency": "month",
    "installment": {
      "value": "100.00",
      "currency": "QAR"
    },
    "rate": "0",
    "processingFee": {
      "value": "10.00",
      "currency": "QAR"
    },
    "tnc": {
      "en": {
        "text": "From [Issuing Bank]: You are selecting a 6-month installment plan...",
        "url": "https://abcbank.com/en/installments/tnc"
      }
    }
  }
];

// Implementation with TnC checkbox
function InstallmentOptions({ paymentPlans }) {
  // State management for selection and terms acceptance
  const [selectedPlan, setSelectedPlan] = useState(null);
  const [acceptedTerms, setAcceptedTerms] = useState(false);
  
  return (
    <div>
      {/* Payment options */}
      <div>
        {paymentPlans.map((plan, i) => (
          <label key={i}>
            <input 
              type="radio" 
              name="paymentPlan" 
              onChange={() => {
                setSelectedPlan(plan);
                setAcceptedTerms(false); // Reset terms acceptance when plan changes
              }}
            />
            <div>
              {/* DATA MAPPING: plan.duration → "PAY IN X" */}
              <div>PAY IN {plan.duration}</div>
              {/* DATA MAPPING: plan.installment → "X QAR/month" */}
              <div>{plan.installment.value} {plan.installment.currency}/{plan.frequency}</div>
              <div>
                {/* DATA MAPPING: plan.rate → "Monthly rate: X%" */}
                Monthly rate: {plan.rate}% 
                {/* DATA MAPPING: plan.processingFee → "Processing Fee: X QAR" */}
                Processing Fee: {plan.processingFee.value} {plan.processingFee.currency}
              </div>
            </div>
          </label>
        ))}
      </div>
      
      {/* Terms and conditions with checkbox */}
      {selectedPlan?.tnc && (
        <div>
          <label>
            <input 
              type="checkbox" 
              checked={acceptedTerms}
              onChange={(e) => setAcceptedTerms(e.target.checked)}
            />
            {/* DATA MAPPING: plan.tnc.en.text → Terms text */}
            {selectedPlan.tnc.en.text} 
            {/* DATA MAPPING: plan.tnc.en.url → "Learn more" link */}
            <a href={selectedPlan.tnc.en.url}>Learn more</a>
          </label>
        </div>
      )}

      {/* Pay button - disabled until plan selected AND terms accepted */}
      <button disabled={!selectedPlan || !acceptedTerms}>
        Pay
      </button>
    </div>
  );
}