Barista: [حقل الفلتر]: خيار متعدد التحديد

تم إنشاؤها على ٢٥ يونيو ٢٠٢٠  ·  10تعليقات  ·  مصدر: dynatrace-oss/barista

طلب المواصفات

ملخص

إضافة خيار متعدد التحديد إلى عنصر التصفية

ميزة الوصف

في الوقت الحالي ، لا يمكن للمستخدم تحديد عدة قيم لنوع عامل التصفية نفسه بطريقة مجمعة. ستسمح ميزة التحديد المتعدد للمستخدم بتحقيق هذا الهدف.

من المحتمل أن يكون أفضل نهج هو إنشاء لوحة جديدة للاختيار المتعدد ، باتباع نفس النهج المستخدم مع نوع مرشح النطاق. يمكن أن تعرض هذه اللوحة قائمة قابلة للتمرير بها جميع الاقتراحات المتاحة ، ومربع اختيار لتحديد بعض القيم ، وزر تطبيق (بحيث يمكن رفض التغييرات بخلاف ذلك).

انظر الصور المرفقة.

بيانات اضافية:

  • يجب أن يكون للوحة التحديد المتعدد حالتها الداخلية (بحيث يمكنها "إلغاء" عوامل التصفية التي لم يتم تطبيقها بعد).
  • نقرة خارج اللوحة تلغي التغييرات
  • سيؤدي النقر فوق مرشح التحديد المتعدد المطبق بالفعل إلى فتح اللوحة مرة أخرى لتغيير التحديد
  • يجب أن تكون لوحة التحديد المتعدد متوافقة مع لوحة المفاتيح

المرفقات

ابدأ بكتابة مفتاح التصفية ، كالمعتاد
multiselect_0

إذا كان مرشحًا متعدد التحديد ، فقم بعرض لوحة بالخيارات المتاحة
multiselect_1

عندما يقوم المستخدم بتحديث تحديد مربعات الاختيار ، يتم أيضًا تحديث النص الموجود في الشريحة
multiselect_2
multiselect_3

بمجرد تطبيق المرشح ، تعكس الشريحة جميع القيم المطبقة باتباع نهج مفصول بفواصل
multiselect_4

يمكن للمستخدم العودة في أي وقت والنقر على الشريحة حتى يتم فتح اللوحة مرة أخرى لمزيد من التفاعل
multiselect_5 .

feature filter-field help wanted needs discussion

ال 10 كومينتر

مرحبا kaikcreator ،

شكرًا لك على اقتراح هذا الطلب ، نعتقد أن هذه ميزة مفيدة لحقل الفلتر. هل ستكون على استعداد للمساهمة في ذلك بنفسك؟

بالنسبة إلى الشخص الذي تم اختياره لإنشاء هذه الميزة ، إليك ما ستحتاجه للمتابعة.

أولاً ، اكتشف اقتراح واجهة برمجة التطبيقات (API) الذي يشرح كيفية إنشاء الميزة 😉.
ما الذي ستحتاجه لتحقيق هذه الميزة وما الذي سيتغير بشكل أساسي. مجال التصفية ليس للأرواح الضعيفة لذا جهز نفسك للتعامل مع هذا بثقة تفكير نقدي 😄.
تظهر بعض الأسئلة فيما يتعلق ببعض الحالات الحادة. ماذا يحدث عندما لا يتم تحديد المربعات وعندما يتم تحديد الكثير من المربعات.

ملاحظة: استخدم مكون مربع اختيار باريستا الخاص بنا لتنفيذ هذه الميزة. لا نرغب في رؤية تعديلات النمط نظرًا لأن مربع الاختيار في لقطات الشاشة الخاصة بك يبدو مختلفًا بالفعل عن مربعنا.

مرحبًا @ rowa-audil ، نعم. ربما لست أنا ، لكن شخصًا ما في فريقنا سيساهم في هذه الميزة بالتأكيد.
سنوفر واجهة برمجة تطبيقات في أسرع وقت ممكن ، لكننا نحتاج أولاً إلى فهم كيفية تنفيذ خيار النطاق بشكل أفضل قليلاً ، لأننا اعتقدنا أنه يجب علينا اتباع نهج مماثل. أي اقتراح هنا tomheller @ ffriedl89 ؟

kaikcreator ، حقل المرشح في حالته الحالية غير قابل للتمديد بشكل كبير ، ولهذا السبب أيضًا يكون النطاق متشابكًا جدًا مع حقل المرشح بشكل عام. هناك الكثير من الأشياء التي تحدد ما يجب أن يتم فتحه.
أعتقد أنه يجب عليك اتباع نهج النطاق ، ولكن هناك بعض المزالق ، التي قد تحتاج إلى أخذها في الاعتبار.

نوع البيانات

يحدد النطاق نوع البيانات الخاص به ضمن تعريفات مصدر البيانات لحقل المرشح (بما في ذلك وظيفتان مساعدتان ، تساعدان في تحديد ما إذا كانت العقدة عقدة نطاق أم لا وتقارن أيضًا العقد). ستحتاج بالتأكيد إلى وظائف مماثلة من هذا القبيل.

https://github.com/dynatrace-oss/barista/blob/f8a00b33ec830fcf8db65ce16b4809c61b09115b/libs/barista-components/filter-field/src/types.ts#L83 -L151

https://github.com/dynatrace-oss/barista/blob/f8a00b33ec830fcf8db65ce16b4809c61b09115b/libs/barista-components/filter-field/src/filter-field-util.ts#L491 -L502

التمثيل المرئي

يطبق النطاق نسخته الخاصة من سلوك الإكمال التلقائي داخل مكونه ، وأعتقد أن هذا سيكون بالتأكيد أسلوبًا جيدًا هنا أيضًا.
يتم دائمًا إنشاء التراكب والمشغل عند إنشاء حقل التصفية ، ويتم فتح _overlays_ برمجيًا بواسطة حقل التصفية. (إذا كان يجب عدم عرض التراكب ، فسيتم تعطيله على المشغل لمنع ظهوره بشكل مرئي).

https://github.com/dynatrace-oss/barista/blob/f8a00b33ec830fcf8db65ce16b4809c61b09115b/libs/barista-components/filter-field/src/filter-field.html#L85 -L92

https://github.com/dynatrace-oss/barista/blob/f8a00b33ec830fcf8db65ce16b4809c61b09115b/libs/barista-components/filter-field/src/filter-field.ts#L434 -L474

التعامل مع وضع التحرير

يعد وضع التحرير داخل حقل المرشح صعبًا بعض الشيء فيما يتعلق بإدارة الحالة ، حيث تحتاج إلى استعادة مرشح التحرير باعتباره المرشح الحالي. ربما ستحتاج إلى بعض التعديلات في هذه الوظيفة للقيام بذلك بشكل صحيح للتحديد المتعدد.

https://github.com/dynatrace-oss/barista/blob/f8a00b33ec830fcf8db65ce16b4809c61b09115b/libs/barista-components/filter-field/src/filter-field.ts#L664 -L709

شكرًا 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); }

DtFilterFieldMultiSelect

المدخلات

| الاسم | النوع | الوصف |
| - | - | - |
| خيارات أو مجموعات | DtNodeDef<OpGr>[] | الخيارات المحددة بالفعل |

النواتج

| الاسم | ينبعث | الوصف |
| - | - | - |
| فتح | void | لوحة مفتوحة |
| مغلق | void | اللوحة مغلقة |
| الخيارات المقدمة | DtNodeDef<OpGr>[] | الخيارات التي حددها المستخدم |

DtFilterFieldMultiSelectTrigger

المدخلات

| الاسم | النوع | الوصف |
| - | - | - |
| dtFilterFieldMultiSelect | DtFilterFieldMultiSelect | لوحة التحديد المتعدد لحقول المرشح التي سيتم إرفاقها بهذا المشغل. |
| dtFilterFieldMultiSelectDisabled | boolean | ما إذا كان يجب تعطيل لوحة التحديد المتعدد لحقول المرشح. |

tomheller سأبدأ هذا الأسبوع القادم

بالنسبة إلى قائمة مربعات الاختيار ، أفكر في استخدام ReactiveFormsModule ، لكنني أرى أننا لا نستخدمها في أي مكان على الفلتر. وهل هناك سبب لذلك يجب علي تجنبه أم يمكنني استخدامه؟ تضمين التغريدة

يمكنك استخدامه إذا كنت ترغب في ذلك ، أو إنشاء نموذج خاص بك من cdk كما يفعل @ dt-mafe في العلاقات العامة الخاصة به حول الصفوف القابلة للتحديد # 1052

ليس في خارطة الطريق الخاصة بنا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات