استان و شهر

address-pickerکامپوننت

دو کمبوباکس به‌هم‌وصل برای ۳۱ استان و شهرهاشون. فهرست شهر دنبال استان میاد، با عوض شدن استان خالی میشه و فقط اسم‌های داخل فهرست قبول میشن.

ده رقم، بدون خط تیره هم قبول میشه

نصب

  1. با CLI

    اگر هنوز init نکردید، اول از راهنمای نصب پروژه را آماده کنید. بعد این دستور کامپوننت و وابستگی‌هاش را می‌نویسه.

    $ npx vibefarsi add address-picker
  2. نصب دستی

    محتوای تب «کد» را در components/ui/address-picker.tsx بگذارید. پیش‌نیاز: combobox.

    $ npm i lucide-react
    کپی کل فایلregistry json

استفاده

usage.tsx
1import { AddressPicker } from "@/components/ui/address-picker"2import { PostalCodeInput } from "@/components/ui/postal-code-input"34<AddressPicker onChange={(addr, complete) => complete && setAddress(addr)} />5<PostalCodeInput onChange={(digits, valid) => setPostal(valid ? digits : null)} />67// فقط استان‌هایی که ارسال دارید:8<AddressPicker provinces={["تهران", "البرز"]} name="ship" />

پراپ‌ها

پراپنوعپیش‌فرضتوضیح
value / defaultValue{ province, city }-اسم استان و شهر، همون‌طور که در lib/iran-divisions.ts نوشته شده.
onChange(value, complete) => void-complete وقتی هر دو انتخاب شده باشن و شهر مال همون استان باشه.
provincesstring[]-محدود کردن فهرست استان‌ها، مثلاً برای ارسال فقط به چند استان.
namestring-دو ورودی مخفی name-province و name-city برای فرم معمولی می‌سازه.
invalidboolean-بعد از ثبت فرم true بدید تا زیر فیلد خالی خطا نشون داده بشه.
layout"row" | "stack""row"row از sm به بالا دوستونی میشه.

نکته‌های راست‌چین

  • داده‌ها مراکز شهرستان و شهرهای بزرگ‌تر هر استان هستن و مرکز استان همیشه اول فهرست میاد. اگه همه‌ی شهرها و روستاها را لازم دارید فهرست را از سرور بگیرید و به Combobox بدید.
  • تایپ با ي و ك عربی یا بدون نیم‌فاصله هم شهر را پیدا می‌کنه، چون Combobox قبل از مقایسه حروف را یکسان می‌کنه.