إضافة خيار متعدد التحديد إلى عنصر التصفية
في الوقت الحالي ، لا يمكن للمستخدم تحديد عدة قيم لنوع عامل التصفية نفسه بطريقة مجمعة. ستسمح ميزة التحديد المتعدد للمستخدم بتحقيق هذا الهدف.
من المحتمل أن يكون أفضل نهج هو إنشاء لوحة جديدة للاختيار المتعدد ، باتباع نفس النهج المستخدم مع نوع مرشح النطاق. يمكن أن تعرض هذه اللوحة قائمة قابلة للتمرير بها جميع الاقتراحات المتاحة ، ومربع اختيار لتحديد بعض القيم ، وزر تطبيق (بحيث يمكن رفض التغييرات بخلاف ذلك).
انظر الصور المرفقة.
بيانات اضافية:
ابدأ بكتابة مفتاح التصفية ، كالمعتاد
إذا كان مرشحًا متعدد التحديد ، فقم بعرض لوحة بالخيارات المتاحة
عندما يقوم المستخدم بتحديث تحديد مربعات الاختيار ، يتم أيضًا تحديث النص الموجود في الشريحة
بمجرد تطبيق المرشح ، تعكس الشريحة جميع القيم المطبقة باتباع نهج مفصول بفواصل
يمكن للمستخدم العودة في أي وقت والنقر على الشريحة حتى يتم فتح اللوحة مرة أخرى لمزيد من التفاعل
.
مرحبا kaikcreator ،
شكرًا لك على اقتراح هذا الطلب ، نعتقد أن هذه ميزة مفيدة لحقل الفلتر. هل ستكون على استعداد للمساهمة في ذلك بنفسك؟
بالنسبة إلى الشخص الذي تم اختياره لإنشاء هذه الميزة ، إليك ما ستحتاجه للمتابعة.
أولاً ، اكتشف اقتراح واجهة برمجة التطبيقات (API) الذي يشرح كيفية إنشاء الميزة 😉.
ما الذي ستحتاجه لتحقيق هذه الميزة وما الذي سيتغير بشكل أساسي. مجال التصفية ليس للأرواح الضعيفة لذا جهز نفسك للتعامل مع هذا بثقة تفكير نقدي 😄.
تظهر بعض الأسئلة فيما يتعلق ببعض الحالات الحادة. ماذا يحدث عندما لا يتم تحديد المربعات وعندما يتم تحديد الكثير من المربعات.
ملاحظة: استخدم مكون مربع اختيار باريستا الخاص بنا لتنفيذ هذه الميزة. لا نرغب في رؤية تعديلات النمط نظرًا لأن مربع الاختيار في لقطات الشاشة الخاصة بك يبدو مختلفًا بالفعل عن مربعنا.
مرحبًا @ rowa-audil ، نعم. ربما لست أنا ، لكن شخصًا ما في فريقنا سيساهم في هذه الميزة بالتأكيد.
سنوفر واجهة برمجة تطبيقات في أسرع وقت ممكن ، لكننا نحتاج أولاً إلى فهم كيفية تنفيذ خيار النطاق بشكل أفضل قليلاً ، لأننا اعتقدنا أنه يجب علينا اتباع نهج مماثل. أي اقتراح هنا tomheller @ ffriedl89 ؟
kaikcreator ، حقل المرشح في حالته الحالية غير قابل للتمديد بشكل كبير ، ولهذا السبب أيضًا يكون النطاق متشابكًا جدًا مع حقل المرشح بشكل عام. هناك الكثير من الأشياء التي تحدد ما يجب أن يتم فتحه.
أعتقد أنه يجب عليك اتباع نهج النطاق ، ولكن هناك بعض المزالق ، التي قد تحتاج إلى أخذها في الاعتبار.
يحدد النطاق نوع البيانات الخاص به ضمن تعريفات مصدر البيانات لحقل المرشح (بما في ذلك وظيفتان مساعدتان ، تساعدان في تحديد ما إذا كانت العقدة عقدة نطاق أم لا وتقارن أيضًا العقد). ستحتاج بالتأكيد إلى وظائف مماثلة من هذا القبيل.
يطبق النطاق نسخته الخاصة من سلوك الإكمال التلقائي داخل مكونه ، وأعتقد أن هذا سيكون بالتأكيد أسلوبًا جيدًا هنا أيضًا.
يتم دائمًا إنشاء التراكب والمشغل عند إنشاء حقل التصفية ، ويتم فتح _overlays_ برمجيًا بواسطة حقل التصفية. (إذا كان يجب عدم عرض التراكب ، فسيتم تعطيله على المشغل لمنع ظهوره بشكل مرئي).
يعد وضع التحرير داخل حقل المرشح صعبًا بعض الشيء فيما يتعلق بإدارة الحالة ، حيث تحتاج إلى استعادة مرشح التحرير باعتباره المرشح الحالي. ربما ستحتاج إلى بعض التعديلات في هذه الوظيفة للقيام بذلك بشكل صحيح للتحديد المتعدد.
شكرًا tomheller ،
بالتفكير في المجموعات المحتملة ، سيكون من الجيد اعتماد خيارات ومجموعات الإكمال التلقائي
ts
export interface DtMultiSelectDef<OpGr = unknown> {
optionsOrGroups: DtNodeDef<OpGr>[];
}
تحديث DtNodeFlags
بنوع جديد
ts
export enum DtNodeFlags {
None = 0,
TypeAutocomplete = 1 << 0,
TypeFreeText = 1 << 1,
TypeOption = 1 << 2,
TypeGroup = 1 << 3,
TypeRange = 1 << 4,
TypeMultiSelect = 1 << 5,
RenderTypes = TypeAutocomplete | TypeFreeText | TypeRange | TypeMultiSelect,
Types = TypeAutocomplete | TypeFreeText | TypeOption | TypeGroup,
}
ts
export function isDtMultiSelectDef<D = unknown>(
def: DtNodeDef<D> | null,
): def is DtNodeDef<D> & DtMultiSelectDef {
return isDtNodeDef(def) && !!(def.nodeFlags & DtNodeFlags.TypeMultiSelect);
}
| الاسم | النوع | الوصف |
| - | - | - |
| خيارات أو مجموعات | DtNodeDef<OpGr>[]
| الخيارات المحددة بالفعل |
| الاسم | ينبعث | الوصف |
| - | - | - |
| فتح | void
| لوحة مفتوحة |
| مغلق | void
| اللوحة مغلقة |
| الخيارات المقدمة | DtNodeDef<OpGr>[]
| الخيارات التي حددها المستخدم |
| الاسم | النوع | الوصف |
| - | - | - |
| dtFilterFieldMultiSelect | DtFilterFieldMultiSelect
| لوحة التحديد المتعدد لحقول المرشح التي سيتم إرفاقها بهذا المشغل. |
| dtFilterFieldMultiSelectDisabled | boolean
| ما إذا كان يجب تعطيل لوحة التحديد المتعدد لحقول المرشح. |
tomheller سأبدأ هذا الأسبوع القادم
بالنسبة إلى قائمة مربعات الاختيار ، أفكر في استخدام ReactiveFormsModule ، لكنني أرى أننا لا نستخدمها في أي مكان على الفلتر. وهل هناك سبب لذلك يجب علي تجنبه أم يمكنني استخدامه؟ تضمين التغريدة
يمكنك استخدامه إذا كنت ترغب في ذلك ، أو إنشاء نموذج خاص بك من cdk كما يفعل @ dt-mafe في العلاقات العامة الخاصة به حول الصفوف القابلة للتحديد # 1052
ليس في خارطة الطريق الخاصة بنا.