Barista: [过滤器字段]:多选选项

创建于 2020-06-25  ·  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 ,是的。 也许不是我,但我们团队中的某个人肯定会为此功能做出贡献。
我们将尽快提供 API,但首先我们需要更好地了解 range 选项是如何实现的,因为我们认为我们应该遵循类似的方法。 @tomheller @ffriedl89 有什么建议吗?

@kaikcreator ,过滤器字段处于当前状态,不是很可扩展,这就是为什么范围通常与过滤器字段交织在一起的原因。 有很多事情决定了 _overlay_ 应该打开什么。
我想你应该遵循范围的方法,但有几个陷阱,可能需要考虑。

数据类型

范围在过滤器字段的数据源定义中定义了它自己的数据类型(包括几个帮助函数,帮助识别节点是否是范围节点并比较节点)。 你肯定需要类似的功能。

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,但我发现我们没有在过滤器的任何地方使用它。 是否有原因所以我应该避免它或者我可以使用它? @thomasink @tomheller

如果你愿意,你可以使用它,或者像@dt-mafe 在他关于可选行的 pr 中那样从 cdk 创建你自己的 selectionModel #1052

不在我们的路线图上。

此页面是否有帮助?
0 / 5 - 0 等级