Repeater — ردیفهای تکرارشونده
Repeater برای گرفتن چند مجموعهٔ همساختار از کاربر است: اعضای تیم، آدرسها، شمارههای تماس. هر ردیف فیلدهای همان schema را دارد؛ کاربر با دکمهٔ افزودن ردیف جدید میسازد و با دکمهٔ حذف برمیدارد. اگر فقط یک مجموعهٔ ثابت فیلد لازم است، از Input و فرم معمولی استفاده کنید.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { Repeater } from '@tokapps/tuk/controls';نمونهٔ زنده
اعضای تیم
اعضای تیم
اعضای تیم
نامهای کاربری
- ردیف 1
اعضای تیم
- ردیف 1
کد قابل کپی
فرم ساده با سه فیلد
import { useState } from 'react';import { Repeater } from '@tokapps/tuk/controls';import type { RepeaterField, RepeaterRow } from '@tokapps/tuk/controls';const fields: RepeaterField[] = [ { name: 'name', label: 'نام و نام خانوادگی', validators: [{ type: 'required' }, { type: 'minLength', value: 2 }] }, { name: 'email', label: 'ایمیل', type: 'email', validators: [{ type: 'required' }, { type: 'email' }] }, { name: 'phone', label: 'تلفن همراه', type: 'tel', code: true, placeholder: '09123456789', validators: [{ type: 'phone' }] },];const [rows, setRows] = useState<RepeaterRow[]>([]);<Repeater label="اعضای تیم" fields={fields} value={rows} onChange={setRows} />فیلدهای هر ردیف کنار هم
<Repeater label="اعضای تیم" fields={fields} value={rows} onChange={setRows} fieldsOrientation="horizontal" />ردیف جمعشونده با حداقل ۱ و حداکثر ۳
<Repeater label="اعضای تیم" fields={fields} value={rows} onChange={setRows} model="collapsible" min={1} max={3} />یکتایی بین ردیفها
const memberFields: RepeaterField[] = [ { name: 'username', label: 'نام کاربری', code: true, validators: [ { type: 'required' }, { type: 'pattern', value: '^[a-z0-9_]{3,20}$', message: 'فقط حروف لاتین کوچک، عدد و _ (۳ تا ۲۰ نویسه)' }, { type: 'unique', message: 'این نام کاربری تکراری است' }, ], },];<Repeater label="نامهای کاربری" fields={memberFields} value={rows} onChange={setRows} validateOn="blur" />همهٔ پیکربندیها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — | عنوان فهرست؛ الزامی. |
| کپی کد | کپی کد | — | توضیح کوتاه زیر عنوان. |
| کپی کد | کپی کد | — | schema فیلدهای هر ردیف: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد. |
| کپی کد | کپی کد | — | ردیفها (کپی کد) بهصورت کنترلشده. |
| کپی کد | کپی کد | — | با افزودن، حذف یا تغییر هر فیلد. |
| کپی کد | کپی کد | کپی کد | حداقل تعداد ردیف؛ دکمهٔ حذف زیر این حد غیرفعال میشود. |
| کپی کد | کپی کد | کپی کد | حداکثر تعداد ردیف؛ دکمهٔ افزودن در این حد غیرفعال میشود. |
| کپی کد | کپی کد · کپی کد | کپی کد | نمایش هر ردیف بهصورت کارت یا جمعشونده. |
| کپی کد | کپی کد · کپی کد | کپی کد | فیلدهای هر ردیف زیر هم یا کنار هم. |
| کپی کد | کپی کد · کپی کد | کپی کد | زمان نمایش خطا: هنگام ترک فیلد یا با کپی کد. |
| کپی کد | کپی کد | کپی کد | نمایش همهٔ خطاها بدون نیاز به ترک فیلد (مثلاً بعد از تلاش ارسال). |
| کپی کد | کپی کد | کپی کد | متن دکمهٔ افزودن. |
| کپی کد | کپی کد | کپی کد | متن دکمهٔ حذف؛ کپی کد شمارهٔ ردیف است. |
| کپی کد | کپی کد | کپی کد | عنوان هر ردیف؛ کپی کد شمارهٔ ردیف است. |
| کپی کد | کپی کد | — | با تغییر وضعیت اعتبار کل فهرست صدا زده میشود. |
| کپی کد | کپی کد | کپی کد | غیرفعال کردن کل فهرست. |
اعتبارسنجهای آماده
| نوع | پارامتر | کاربرد |
|---|---|---|
| کپی کد | — | فیلد نباید خالی باشد. |
| کپی کد / کپی کد | کپی کد | طول متن. |
| کپی کد / کپی کد | کپی کد | مقدار عددی. |
| کپی کد | کپی کد | عبارت منظم؛ کپی کد اختیاری است و برای خطای خوانا توصیه میشود. |
| کپی کد | — | قالب ایمیل. |
| کپی کد | — | شماره همراه ایران. |
| کپی کد | — | یکتایی همان فیلد بین ردیفها. |
| کپی کد | کپی کد | قاعدهٔ سفارشی محصول. |
حالتها
| حالت | نمایش |
|---|---|
| پیشفرض | ردیفها با دکمهٔ افزودن و حذف؛ کیبورد کامل. |
| نامعتبر | پیام خطا زیر فیلد و علامت متنی؛ رنگ تنها نشانه نیست. |
| به حداقل رسیده | دکمهٔ حذف غیرفعال است. |
| به حداکثر رسیده | دکمهٔ افزودن غیرفعال و پیام راهنما نمایش داده میشود. |
| غیرفعال | همهٔ ورودیها و دکمهها قفلاند. |
| جمعشده | (فقط کپی کد) ردیف فقط عنوانش دیده میشود. |
دسترسپذیری و RTL
- افزودن و حذف با کیبورد کامل انجام میشود؛ بعد از حذف، فوکوس به ردیف مجاور میرود.
- تغییرات تعداد ردیف از طریق LiveRegion به صفحهخوان اعلام میشود.
- چیدمان و ترتیب فیلدها در RTL و LTR درست است؛ فیلدهای عددی و تلفن با جهت چپبهراست نمایش داده میشوند.