@mamrp/components 1.0.34 → 1.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/charts/index.d.mts +146 -0
- package/dist/charts/index.d.ts +146 -0
- package/dist/charts/index.js +193 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/index.mjs +164 -0
- package/dist/charts/index.mjs.map +1 -0
- package/dist/index.d.mts +10 -63
- package/dist/index.d.ts +10 -63
- package/dist/index.js +15 -134
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -133
- package/dist/index.mjs.map +1 -1
- package/dist/selectors/index.d.mts +227 -0
- package/dist/selectors/index.d.ts +227 -0
- package/dist/selectors/index.js +509 -0
- package/dist/selectors/index.js.map +1 -0
- package/dist/selectors/index.mjs +470 -0
- package/dist/selectors/index.mjs.map +1 -0
- package/package.json +13 -3
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Control } from 'react-hook-form';
|
|
3
|
+
|
|
4
|
+
interface OptionType$1 {
|
|
5
|
+
title: string;
|
|
6
|
+
key: string | number;
|
|
7
|
+
[x: string]: any;
|
|
8
|
+
}
|
|
9
|
+
interface AutocompleteRenderOptionState {
|
|
10
|
+
inputValue: string;
|
|
11
|
+
index: number;
|
|
12
|
+
selected: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface MultipleSelectChipProps$1<T extends OptionType$1> {
|
|
15
|
+
name: string;
|
|
16
|
+
control: Control<any>;
|
|
17
|
+
label?: string;
|
|
18
|
+
data?: T[];
|
|
19
|
+
isLoading?: boolean;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
size?: "small" | "medium";
|
|
22
|
+
clear?: boolean;
|
|
23
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 📦 MultipleSelector — کامپوننت انتخاب چندگزینهای پیشرفته
|
|
27
|
+
*
|
|
28
|
+
* @component MultipleSelector
|
|
29
|
+
*
|
|
30
|
+
* @template T — نوع دادهی گزینهها که باید شامل فیلدهای `title` و `key` باشد.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).
|
|
33
|
+
* @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.
|
|
34
|
+
* @param {string} [label] - برچسب ورودی.
|
|
35
|
+
* @param {T[]} [data] - آرایهای از گزینهها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.
|
|
36
|
+
* @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.
|
|
37
|
+
* @param {boolean} [disabled=false] - غیرفعالکردن ورودی.
|
|
38
|
+
* @param {"small" | "medium"} [size="medium"] - سایز ورودی MUI Autocomplete.
|
|
39
|
+
* @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال میشود.
|
|
40
|
+
* @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.
|
|
41
|
+
*
|
|
42
|
+
* @description
|
|
43
|
+
* این کامپوننت یک `Autocomplete` چندگزینهای با قابلیتهای زیر است:
|
|
44
|
+
* - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)
|
|
45
|
+
* - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)
|
|
46
|
+
* - نمایش تعداد آیتمهای انتخاب شده به جای تگهای جداگانه
|
|
47
|
+
* - پشتیبانی از حالت لودینگ و غیرفعال بودن
|
|
48
|
+
* - امکان سفارشیسازی رندر آیتمها (`renderOption`)
|
|
49
|
+
* - آیکونهای سفارشی برای انتخابها و گزینههای ویژه
|
|
50
|
+
* - جلوگیری از بستن لیست هنگام انتخاب آیتمها (`disableCloseOnSelect`)
|
|
51
|
+
* - مدیریت موقعیت Popper با MUI modifiers
|
|
52
|
+
*
|
|
53
|
+
* @returns {Array<string | number>} آرایهای از کلیدهای آیتمهای انتخاب شده.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* import { useForm, Controller } from "react-hook-form";
|
|
58
|
+
*
|
|
59
|
+
* type MyOption = { title: string; key: number };
|
|
60
|
+
*
|
|
61
|
+
* const options: MyOption[] = [
|
|
62
|
+
* { title: "محصول ۱", key: 1 },
|
|
63
|
+
* { title: "محصول ۲", key: 2 },
|
|
64
|
+
* ];
|
|
65
|
+
*
|
|
66
|
+
* export default function MyForm() {
|
|
67
|
+
* const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });
|
|
68
|
+
*
|
|
69
|
+
* const onSubmit = (data: any) => {
|
|
70
|
+
* console.log("انتخاب شدهها:", data.productIds);
|
|
71
|
+
* };
|
|
72
|
+
*
|
|
73
|
+
* return (
|
|
74
|
+
* <form onSubmit={handleSubmit(onSubmit)}>
|
|
75
|
+
* <MultipleSelector<MyOption>
|
|
76
|
+
* name="productIds"
|
|
77
|
+
* label="محصولات"
|
|
78
|
+
* control={control}
|
|
79
|
+
* data={options}
|
|
80
|
+
* isLoading={false}
|
|
81
|
+
* size="small"
|
|
82
|
+
* renderOption={(props, option, state) => (
|
|
83
|
+
* <li {...props} key={option.key}>
|
|
84
|
+
* <strong style={{ color: state.selected ? "green" : "black" }}>
|
|
85
|
+
* {option.title}
|
|
86
|
+
* </strong>
|
|
87
|
+
* </li>
|
|
88
|
+
* )}
|
|
89
|
+
* />
|
|
90
|
+
* <button type="submit">ثبت</button>
|
|
91
|
+
* </form>
|
|
92
|
+
* );
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
declare function MultiCheckSelector<T extends OptionType$1>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps$1<T>): React.JSX.Element;
|
|
97
|
+
|
|
98
|
+
interface OptionType {
|
|
99
|
+
title: string;
|
|
100
|
+
key: string | number;
|
|
101
|
+
[x: string]: any;
|
|
102
|
+
}
|
|
103
|
+
interface MultipleSelectChipProps<T extends OptionType> {
|
|
104
|
+
name: string;
|
|
105
|
+
control: Control<any>;
|
|
106
|
+
label?: string;
|
|
107
|
+
data?: T[];
|
|
108
|
+
isLoading?: boolean;
|
|
109
|
+
disabled?: boolean;
|
|
110
|
+
size?: "small" | "medium";
|
|
111
|
+
clear?: boolean;
|
|
112
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 📦 کامپوننت انتخاب چند گزینهای با پشتیبانی از react-hook-form و MUI Autocomplete
|
|
116
|
+
*
|
|
117
|
+
* @component MultipleSelector
|
|
118
|
+
*
|
|
119
|
+
* @param {string} name - نام فیلدی که در فرم ثبت میشود.
|
|
120
|
+
* @param {string} [label] - برچسب نمایشی برای فیلد.
|
|
121
|
+
* @param {Control<any>} control - کنترل فرم از react-hook-form.
|
|
122
|
+
* @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینهها شامل `title` (متن) و `key` (مقدار).
|
|
123
|
+
* @param {boolean} [isLoading=false] - آیا دادهها در حال بارگذاری هستند.
|
|
124
|
+
* @param {boolean} [disabled=false] - غیرفعالسازی ورودی.
|
|
125
|
+
* @param {"small" | "medium"} [size="medium"] - سایز ورودی.
|
|
126
|
+
* @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.
|
|
127
|
+
* @param {string} [tooltip] - متن راهنما هنگام هاور.
|
|
128
|
+
* @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتمها در لیست.
|
|
129
|
+
*
|
|
130
|
+
* @returns {Array<{ key: string | number }>} لیستی از آیتمهای انتخابشده ( فقط آیدیها).
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* <MultipleSelector<{title:string; key:number;}>
|
|
135
|
+
* name="productIds"
|
|
136
|
+
* label="محصولات"
|
|
137
|
+
* control={control}
|
|
138
|
+
* data={[{ title: "محصول ۱", key: 1 }, { title: "محصول ۲", key: 2 }]}
|
|
139
|
+
* />
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @description
|
|
143
|
+
* کامپوننتی چندانتخابی با قابلیت انتخاب همهی موارد، سفارشیسازی گزینهها،
|
|
144
|
+
* نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکتهای انتخابشده.
|
|
145
|
+
*
|
|
146
|
+
* برای سفارشیسازی نحوه نمایش آیتمها:
|
|
147
|
+
* ```tsx
|
|
148
|
+
* renderOption={(props, option) => (
|
|
149
|
+
* <li {...props} key={`${option.key}`}>
|
|
150
|
+
* <span style={{ color: "green" }}>{option.title}</span>
|
|
151
|
+
* </li>
|
|
152
|
+
* )}
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
|
|
156
|
+
|
|
157
|
+
interface BaseOption {
|
|
158
|
+
key: number | string | "false" | true;
|
|
159
|
+
title: string | number;
|
|
160
|
+
[x: string]: any;
|
|
161
|
+
}
|
|
162
|
+
interface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {
|
|
163
|
+
name: string;
|
|
164
|
+
control: Control<any>;
|
|
165
|
+
label?: string;
|
|
166
|
+
data?: T[];
|
|
167
|
+
isLoading?: boolean;
|
|
168
|
+
disabled?: boolean;
|
|
169
|
+
size?: "small" | "medium";
|
|
170
|
+
clear?: boolean;
|
|
171
|
+
onChangeHandler?: (value: any, onChange: (data: any) => void) => void;
|
|
172
|
+
valueHandler?: (value: any) => any;
|
|
173
|
+
onFilterOptions: (inputValue: string) => void;
|
|
174
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 🔍 کامپوننت انتخاب تکی با قابلیت جستوجو، پشتیبانی از react-hook-form و MUI Autocomplete
|
|
178
|
+
*
|
|
179
|
+
* @component SeacrchableSelector
|
|
180
|
+
*
|
|
181
|
+
* @template T - نوع گزینهها که باید شامل `key` و `title` باشد.
|
|
182
|
+
*
|
|
183
|
+
* @param {string} name - نام فیلدی که در فرم ثبت میشود.
|
|
184
|
+
* @param {string} [label] - برچسب نمایشی برای فیلد.
|
|
185
|
+
* @param {Control<any>} control - کنترل فرم از `react-hook-form`.
|
|
186
|
+
* @param {T[]} [data] - لیستی از گزینهها شامل `key` و `title` به عنوان مقدار و متن نمایشی.
|
|
187
|
+
* @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
|
|
188
|
+
* @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
|
|
189
|
+
* @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
|
|
190
|
+
* @param {boolean} [clear=false] - فعال بودن امکان پاککردن مقدار انتخابشده.
|
|
191
|
+
* @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).
|
|
192
|
+
* @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیرهشده در فرم به مقدار نمایشی در input (مثلاً عنوان).
|
|
193
|
+
* @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن دادهها هنگام تایپ کاربر (مثلاً برای fetch کردن).
|
|
194
|
+
* @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتمها در لیست.
|
|
195
|
+
*
|
|
196
|
+
* @returns {string | number | null} مقدار انتخابشده (کلید گزینه یا null)
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```tsx
|
|
200
|
+
* <SeacrchableSelector<{ title: string; key: number }>
|
|
201
|
+
* name="categoryId"
|
|
202
|
+
* label="دستهبندی"
|
|
203
|
+
* control={control}
|
|
204
|
+
* data={[{ title: "کتاب", key: 1 }, { title: "لوازم تحریر", key: 2 }]}
|
|
205
|
+
* onFilterOptions={(input) => fetchUsers(input)}
|
|
206
|
+
* />
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @description
|
|
210
|
+
* این کامپوننت یک ورودی انتخابگر تکی با قابلیت جستوجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.
|
|
211
|
+
* قابلیتهایی مانند بارگذاری داده، سفارشیسازی نمایش گزینهها، هماهنگسازی با فرم، پاکسازی انتخاب، و پشتیبانی از جستوجوی سمت سرور را نیز داراست.
|
|
212
|
+
*
|
|
213
|
+
* اگر `freeSolo` فعال باشد، میتوان مقادیر تایپشده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخابشده است،
|
|
214
|
+
* مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت میتوان آن را مستقیم ذخیره کرد).
|
|
215
|
+
*
|
|
216
|
+
* برای سفارشیسازی گزینهها:
|
|
217
|
+
* ```tsx
|
|
218
|
+
* renderOption={(props, option) => (
|
|
219
|
+
* <li {...props} key={option.key}>
|
|
220
|
+
* <b>{option.title}</b>
|
|
221
|
+
* </li>
|
|
222
|
+
* )}
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
declare function SearchableSelector<T extends BaseOption = BaseOption>({ name, control, label, data, isLoading, disabled, size, clear, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
|
|
226
|
+
|
|
227
|
+
export { MultiCheckSelector, MultipleSelector, SearchableSelector };
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Control } from 'react-hook-form';
|
|
3
|
+
|
|
4
|
+
interface OptionType$1 {
|
|
5
|
+
title: string;
|
|
6
|
+
key: string | number;
|
|
7
|
+
[x: string]: any;
|
|
8
|
+
}
|
|
9
|
+
interface AutocompleteRenderOptionState {
|
|
10
|
+
inputValue: string;
|
|
11
|
+
index: number;
|
|
12
|
+
selected: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface MultipleSelectChipProps$1<T extends OptionType$1> {
|
|
15
|
+
name: string;
|
|
16
|
+
control: Control<any>;
|
|
17
|
+
label?: string;
|
|
18
|
+
data?: T[];
|
|
19
|
+
isLoading?: boolean;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
size?: "small" | "medium";
|
|
22
|
+
clear?: boolean;
|
|
23
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 📦 MultipleSelector — کامپوننت انتخاب چندگزینهای پیشرفته
|
|
27
|
+
*
|
|
28
|
+
* @component MultipleSelector
|
|
29
|
+
*
|
|
30
|
+
* @template T — نوع دادهی گزینهها که باید شامل فیلدهای `title` و `key` باشد.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).
|
|
33
|
+
* @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.
|
|
34
|
+
* @param {string} [label] - برچسب ورودی.
|
|
35
|
+
* @param {T[]} [data] - آرایهای از گزینهها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.
|
|
36
|
+
* @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.
|
|
37
|
+
* @param {boolean} [disabled=false] - غیرفعالکردن ورودی.
|
|
38
|
+
* @param {"small" | "medium"} [size="medium"] - سایز ورودی MUI Autocomplete.
|
|
39
|
+
* @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال میشود.
|
|
40
|
+
* @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.
|
|
41
|
+
*
|
|
42
|
+
* @description
|
|
43
|
+
* این کامپوننت یک `Autocomplete` چندگزینهای با قابلیتهای زیر است:
|
|
44
|
+
* - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)
|
|
45
|
+
* - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)
|
|
46
|
+
* - نمایش تعداد آیتمهای انتخاب شده به جای تگهای جداگانه
|
|
47
|
+
* - پشتیبانی از حالت لودینگ و غیرفعال بودن
|
|
48
|
+
* - امکان سفارشیسازی رندر آیتمها (`renderOption`)
|
|
49
|
+
* - آیکونهای سفارشی برای انتخابها و گزینههای ویژه
|
|
50
|
+
* - جلوگیری از بستن لیست هنگام انتخاب آیتمها (`disableCloseOnSelect`)
|
|
51
|
+
* - مدیریت موقعیت Popper با MUI modifiers
|
|
52
|
+
*
|
|
53
|
+
* @returns {Array<string | number>} آرایهای از کلیدهای آیتمهای انتخاب شده.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* import { useForm, Controller } from "react-hook-form";
|
|
58
|
+
*
|
|
59
|
+
* type MyOption = { title: string; key: number };
|
|
60
|
+
*
|
|
61
|
+
* const options: MyOption[] = [
|
|
62
|
+
* { title: "محصول ۱", key: 1 },
|
|
63
|
+
* { title: "محصول ۲", key: 2 },
|
|
64
|
+
* ];
|
|
65
|
+
*
|
|
66
|
+
* export default function MyForm() {
|
|
67
|
+
* const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });
|
|
68
|
+
*
|
|
69
|
+
* const onSubmit = (data: any) => {
|
|
70
|
+
* console.log("انتخاب شدهها:", data.productIds);
|
|
71
|
+
* };
|
|
72
|
+
*
|
|
73
|
+
* return (
|
|
74
|
+
* <form onSubmit={handleSubmit(onSubmit)}>
|
|
75
|
+
* <MultipleSelector<MyOption>
|
|
76
|
+
* name="productIds"
|
|
77
|
+
* label="محصولات"
|
|
78
|
+
* control={control}
|
|
79
|
+
* data={options}
|
|
80
|
+
* isLoading={false}
|
|
81
|
+
* size="small"
|
|
82
|
+
* renderOption={(props, option, state) => (
|
|
83
|
+
* <li {...props} key={option.key}>
|
|
84
|
+
* <strong style={{ color: state.selected ? "green" : "black" }}>
|
|
85
|
+
* {option.title}
|
|
86
|
+
* </strong>
|
|
87
|
+
* </li>
|
|
88
|
+
* )}
|
|
89
|
+
* />
|
|
90
|
+
* <button type="submit">ثبت</button>
|
|
91
|
+
* </form>
|
|
92
|
+
* );
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
declare function MultiCheckSelector<T extends OptionType$1>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps$1<T>): React.JSX.Element;
|
|
97
|
+
|
|
98
|
+
interface OptionType {
|
|
99
|
+
title: string;
|
|
100
|
+
key: string | number;
|
|
101
|
+
[x: string]: any;
|
|
102
|
+
}
|
|
103
|
+
interface MultipleSelectChipProps<T extends OptionType> {
|
|
104
|
+
name: string;
|
|
105
|
+
control: Control<any>;
|
|
106
|
+
label?: string;
|
|
107
|
+
data?: T[];
|
|
108
|
+
isLoading?: boolean;
|
|
109
|
+
disabled?: boolean;
|
|
110
|
+
size?: "small" | "medium";
|
|
111
|
+
clear?: boolean;
|
|
112
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 📦 کامپوننت انتخاب چند گزینهای با پشتیبانی از react-hook-form و MUI Autocomplete
|
|
116
|
+
*
|
|
117
|
+
* @component MultipleSelector
|
|
118
|
+
*
|
|
119
|
+
* @param {string} name - نام فیلدی که در فرم ثبت میشود.
|
|
120
|
+
* @param {string} [label] - برچسب نمایشی برای فیلد.
|
|
121
|
+
* @param {Control<any>} control - کنترل فرم از react-hook-form.
|
|
122
|
+
* @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینهها شامل `title` (متن) و `key` (مقدار).
|
|
123
|
+
* @param {boolean} [isLoading=false] - آیا دادهها در حال بارگذاری هستند.
|
|
124
|
+
* @param {boolean} [disabled=false] - غیرفعالسازی ورودی.
|
|
125
|
+
* @param {"small" | "medium"} [size="medium"] - سایز ورودی.
|
|
126
|
+
* @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.
|
|
127
|
+
* @param {string} [tooltip] - متن راهنما هنگام هاور.
|
|
128
|
+
* @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتمها در لیست.
|
|
129
|
+
*
|
|
130
|
+
* @returns {Array<{ key: string | number }>} لیستی از آیتمهای انتخابشده ( فقط آیدیها).
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* <MultipleSelector<{title:string; key:number;}>
|
|
135
|
+
* name="productIds"
|
|
136
|
+
* label="محصولات"
|
|
137
|
+
* control={control}
|
|
138
|
+
* data={[{ title: "محصول ۱", key: 1 }, { title: "محصول ۲", key: 2 }]}
|
|
139
|
+
* />
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @description
|
|
143
|
+
* کامپوننتی چندانتخابی با قابلیت انتخاب همهی موارد، سفارشیسازی گزینهها،
|
|
144
|
+
* نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکتهای انتخابشده.
|
|
145
|
+
*
|
|
146
|
+
* برای سفارشیسازی نحوه نمایش آیتمها:
|
|
147
|
+
* ```tsx
|
|
148
|
+
* renderOption={(props, option) => (
|
|
149
|
+
* <li {...props} key={`${option.key}`}>
|
|
150
|
+
* <span style={{ color: "green" }}>{option.title}</span>
|
|
151
|
+
* </li>
|
|
152
|
+
* )}
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
|
|
156
|
+
|
|
157
|
+
interface BaseOption {
|
|
158
|
+
key: number | string | "false" | true;
|
|
159
|
+
title: string | number;
|
|
160
|
+
[x: string]: any;
|
|
161
|
+
}
|
|
162
|
+
interface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {
|
|
163
|
+
name: string;
|
|
164
|
+
control: Control<any>;
|
|
165
|
+
label?: string;
|
|
166
|
+
data?: T[];
|
|
167
|
+
isLoading?: boolean;
|
|
168
|
+
disabled?: boolean;
|
|
169
|
+
size?: "small" | "medium";
|
|
170
|
+
clear?: boolean;
|
|
171
|
+
onChangeHandler?: (value: any, onChange: (data: any) => void) => void;
|
|
172
|
+
valueHandler?: (value: any) => any;
|
|
173
|
+
onFilterOptions: (inputValue: string) => void;
|
|
174
|
+
renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 🔍 کامپوننت انتخاب تکی با قابلیت جستوجو، پشتیبانی از react-hook-form و MUI Autocomplete
|
|
178
|
+
*
|
|
179
|
+
* @component SeacrchableSelector
|
|
180
|
+
*
|
|
181
|
+
* @template T - نوع گزینهها که باید شامل `key` و `title` باشد.
|
|
182
|
+
*
|
|
183
|
+
* @param {string} name - نام فیلدی که در فرم ثبت میشود.
|
|
184
|
+
* @param {string} [label] - برچسب نمایشی برای فیلد.
|
|
185
|
+
* @param {Control<any>} control - کنترل فرم از `react-hook-form`.
|
|
186
|
+
* @param {T[]} [data] - لیستی از گزینهها شامل `key` و `title` به عنوان مقدار و متن نمایشی.
|
|
187
|
+
* @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
|
|
188
|
+
* @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
|
|
189
|
+
* @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
|
|
190
|
+
* @param {boolean} [clear=false] - فعال بودن امکان پاککردن مقدار انتخابشده.
|
|
191
|
+
* @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).
|
|
192
|
+
* @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیرهشده در فرم به مقدار نمایشی در input (مثلاً عنوان).
|
|
193
|
+
* @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن دادهها هنگام تایپ کاربر (مثلاً برای fetch کردن).
|
|
194
|
+
* @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتمها در لیست.
|
|
195
|
+
*
|
|
196
|
+
* @returns {string | number | null} مقدار انتخابشده (کلید گزینه یا null)
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```tsx
|
|
200
|
+
* <SeacrchableSelector<{ title: string; key: number }>
|
|
201
|
+
* name="categoryId"
|
|
202
|
+
* label="دستهبندی"
|
|
203
|
+
* control={control}
|
|
204
|
+
* data={[{ title: "کتاب", key: 1 }, { title: "لوازم تحریر", key: 2 }]}
|
|
205
|
+
* onFilterOptions={(input) => fetchUsers(input)}
|
|
206
|
+
* />
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @description
|
|
210
|
+
* این کامپوننت یک ورودی انتخابگر تکی با قابلیت جستوجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.
|
|
211
|
+
* قابلیتهایی مانند بارگذاری داده، سفارشیسازی نمایش گزینهها، هماهنگسازی با فرم، پاکسازی انتخاب، و پشتیبانی از جستوجوی سمت سرور را نیز داراست.
|
|
212
|
+
*
|
|
213
|
+
* اگر `freeSolo` فعال باشد، میتوان مقادیر تایپشده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخابشده است،
|
|
214
|
+
* مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت میتوان آن را مستقیم ذخیره کرد).
|
|
215
|
+
*
|
|
216
|
+
* برای سفارشیسازی گزینهها:
|
|
217
|
+
* ```tsx
|
|
218
|
+
* renderOption={(props, option) => (
|
|
219
|
+
* <li {...props} key={option.key}>
|
|
220
|
+
* <b>{option.title}</b>
|
|
221
|
+
* </li>
|
|
222
|
+
* )}
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
declare function SearchableSelector<T extends BaseOption = BaseOption>({ name, control, label, data, isLoading, disabled, size, clear, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
|
|
226
|
+
|
|
227
|
+
export { MultiCheckSelector, MultipleSelector, SearchableSelector };
|