Slug — نامک
Slug برای ساختن آدرس یکتای محتوا است: مقاله، پروژه، صفحهٔ محصول. کاربر عنوان را مینویسد و نامک همان لحظه ساخته میشود؛ اگر نامک با دادههای سرور تکراری باشد، همانجا خبر داده میشود. اگر فقط متن آزاد لازم است، از Input استفاده کنید.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { Slug } from '@tokapps/tuk/controls';نمونهٔ زنده
حروف کوچک، فاصله به «-»
قواعد تبدیل
- حروف لاتین بزرگ به کوچک تبدیل میشوند.
- فاصله و نشانهها (کپی کد، کپی کد، کپی کد و…) به کپی کد تبدیل میشوند و خطهای تکراری یکی میشوند.
- حروف و ارقام فارسی حفظ میشوند.
- هنگام تایپ، خط ابتدا و انتها نگه داشته میشود تا کلمهٔ بعدی ادامه پیدا کند؛ هنگام ترک فیلد حذف میشود.
- طول تا کپی کد (پیشفرض ۶۴) بریده میشود.
کد قابل کپی
تبدیل ساده
import { useState } from 'react';import { Slug } from '@tokapps/tuk/controls';const [slug, setSlug] = useState('');<Slug label="نامک" description="حروف کوچک، فاصله به «-»" value={slug} onChange={setSlug} />استعلام آزادی از وبسرویس
import type { SlugAvailability } from '@tokapps/tuk/controls';async function checkAvailability(slug: string, signal: AbortSignal): Promise<SlugAvailability> { const res = await fetch(`/api/slugs/check?slug=${encodeURIComponent(slug)}`, { signal }); if (!res.ok) throw new Error('check failed'); return res.json(); // { available: boolean, suggestion?: string }}<Slug label="آدرس صفحه" value={slug} onChange={setSlug} checkAvailability={checkAvailability} />اتصال به عنوان
const [title, setTitle] = useState('');const [slug, setSlug] = useState('');<Input label="عنوان" value={title} onChange={setTitle} /><Slug label="نامک" value={slug} onChange={setSlug} sourceValue={title} checkAvailability={checkAvailability} />تا وقتی کاربر نامک را دستی تغییر نداده، با هر تایپ در عنوان نامک هم ساخته میشود. بعد از ویرایش دستی، دکمهٔ «بازتولید از عنوان» برای برگشت ظاهر میشود.
متنهای سفارشی و سقف طول کوتاهتر
<Slug label="شناسهٔ محصول" maxLength={24} value={slug} onChange={setSlug} checkAvailability={checkAvailability} labels={{ available: 'شناسه آزاد است', taken: 'این شناسه گرفته شده', suggestion: 'شناسهٔ پیشنهادی: {slug}' }}/>همهٔ پیکربندیها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — | مقدار نامک؛ کنترلشده. |
| کپی کد | کپی کد | — | با مقدار نرمالشده صدا زده میشود. |
| کپی کد | کپی کد | کپی کد | سقف طول نامک. |
| کپی کد | کپی کد | — | ورودی مرجع (مثلاً عنوان) برای اتصال همزمان. |
| کپی کد | کپی کد | — | استعلام آزادی؛ کپی کد هنگام تغییر نامک لغو میشود. |
| کپی کد | کپی کد | کپی کد | تأخیر قبل از استعلام. |
| کپی کد | کپی کد | فارسی | کپی کد، کپی کد، کپی کد، کپی کد (با کپی کد)، کپی کد، کپی کد، کپی کد. |
| کپی کد | کپی کد | — | برچسب فیلد؛ همیشه دیده میشود. |
| کپی کد | کپی کد | — | توضیح زیر فیلد. |
| کپی کد / کپی کد / کپی کد | کپی کد | کپی کد | همان رفتار Input. |
| کپی کد | کپی کد | کپی کد | خطای بیرونی؛ با نتیجهٔ «قبلاً استفاده شده» ترکیب میشود. |
| کپی کد | کپی کد | — | برای ارسال در کپی کد. |
| کپی کد / کپی کد | — | کپی کد / کپی کد | از Input به ارث میرسند. |
حالتها
| حالت | نمایش |
|---|---|
| بیکار | فقط فیلد؛ وقتی نامک خالی است استعلامی انجام نمیشود. |
| در حال بررسی | آیکون چرخان و متن «در حال بررسی…». |
| آزاد | آیکون موفقیت و متن «این نامک آزاد است». |
| قبلاً استفاده شده | خطای فیلد با متن و پیشنهاد نامک جایگزین. |
| خطا | متن خطا و دکمهٔ تلاش مجدد؛ فرم قفل نمیشود. |
| متصل به عنوان | نامک همزمان با عنوان ساخته میشود. |
| جدا از عنوان | دکمهٔ «بازتولید از عنوان» نمایش داده میشود. |
نکات پیادهسازی
- کپی کد را ثابت نگه دارید (بیرون از رندر یا با کپی کد)؛ کامپوننت آن را از ref میخواند، پس تابع inline باعث استعلامهای تکراری نمیشود، ولی بهتر است تابع پایدار باشد.
- استعلام فقط برای نامک غیرخالی و پس از کپی کد بیتغییر اجرا میشود.
- پاسخ قدیمی وقتی نامک عوض شده نادیده گرفته میشود.
- اعتبارسنجی نهایی سمت سرور همچنان لازم است؛ استعلام لحظهای فقط راهنمای کاربر است.
دسترسپذیری و RTL
- برچسب و توضیح به فیلد متصلاند؛ وضعیت استعلام با کپی کد اعلام میشود.
- رنگ تنها نشانه نیست؛ همهجا آیکون و متن هم هست.
- نامک همیشه چپبهراست نمایش داده میشود تا کپی کد و ترتیب حروف درست بماند.
- دکمهها حداقل ۴۴px و فوکوس مرئی دارند.