توسيع النظام

import"@truvar-ai/design-system"

توسيع النظام

عندما تحتاج إلى شيء لا توفره React Aria، إما أن تضيف سلوكًا إلى مكوّن موجود أو تبني مكوّنًا جديدًا من عناصرها الأساسية. وفي الحالتين تبقى إمكانية الوصول مضمونة.

سلوك مخصص

مبني على Button + local state

يغلّف ConfirmButton الزر الأساسي. الضغطة الأولى تجهّزه والثانية تؤكد الإجراء. يعود لحالته بعد ٤ ثوانٍ أو عند انتقال التركيز.

export function ConfirmButton({ onConfirm, children }) {
  const [armed, setArmed] = useState(false);
  const m = useMessages(); // built-in English + Arabic strings
  return (
    <Button variant="danger"
      onPress={() => armed ? onConfirm() : setArmed(true)}
      onBlur={() => setArmed(false)}>
      {armed ? m.pressAgain : children}
    </Button>
  );
}

مكوّن جديد

مبني على RadioGroup + Radio

لا توفر React Aria مكوّن تقييم، لذلك بنينا Rating من RadioGroup، فتعمل مفاتيح الأسهم وقيم النماذج وتسميات قارئات الشاشة دون أي كود إضافي. ويُرسم بنقاط المدار المأخوذة من الشعار.

ما مدى فائدة هذه النتيجة؟
لم تُقيَّم بعد
export function Rating({ label, max = 5, onChange }) {
  return (
    <RadioGroup orientation="horizontal" onChange={onChange}>
      <Label>{label}</Label>
      {range(1, max).map((n) => (
        <Radio key={n} value={String(n)} aria-label={m.of(n, max)}
          className="tv-rating-dot" />
      ))}
    </RadioGroup>
  );
}