将多选选项添加到过滤器组件中
目前,用户无法以分组方式为同一过滤器类型选择多个值。 多选功能将允许用户实现该目标。
可能最好的方法是创建一个新的多选面板,采用与范围过滤器类型相同的方法。 该面板可以显示一个包含所有可用建议的可滚动列表、一个用于选择某些值的复选框和一个应用按钮(因此可以取消更改)。
请参阅随附的屏幕截图。
额外数据:
像往常一样开始输入过滤键
如果是多选过滤器,则显示带有可用选项的面板
当用户更新复选框选择时,芯片中的文本也会更新
应用过滤器后,芯片会按照逗号分隔的方法反映所有应用的值
用户可以随时返回并单击芯片,以便再次打开面板以进行进一步交互
.
你好@kaikcreator ,
感谢您提出此请求,我们认为这是过滤字段的一个有用功能。 你愿意自己贡献吗?
对于选择创建此功能的人,您需要继续执行以下操作。
首先,找出一个API 提案,解释您将如何构建功能 😉。
你需要什么来实现这个功能,什么会基本改变。 过滤器字段不适合弱者,因此请准备好以批判性思维自信来解决这个问题😄。
关于某些边缘情况,出现了一些问题。 当没有选中框和选中很多框时会发生什么。
注意:使用我们的咖啡师复选框组件来实现该功能。 我们不希望看到样式调整,因为您屏幕截图中的复选框看起来与我们的有所不同。
嗨@rowa-audil ,是的。 也许不是我,但我们团队中的某个人肯定会为此功能做出贡献。
我们将尽快提供 API,但首先我们需要更好地了解 range 选项是如何实现的,因为我们认为我们应该遵循类似的方法。 @tomheller @ffriedl89 有什么建议吗?
@kaikcreator ,过滤器字段处于当前状态,不是很可扩展,这就是为什么范围通常与过滤器字段交织在一起的原因。 有很多事情决定了 _overlay_ 应该打开什么。
我想你应该遵循范围的方法,但有几个陷阱,可能需要考虑。
范围在过滤器字段的数据源定义中定义了它自己的数据类型(包括几个帮助函数,帮助识别节点是否是范围节点并比较节点)。 你肯定需要类似的功能。
范围在它的组件中实现了它自己版本的
覆盖和触发器总是在创建过滤器字段时创建,_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,但我发现我们没有在过滤器的任何地方使用它。 是否有原因所以我应该避免它或者我可以使用它? @thomasink @tomheller
如果你愿意,你可以使用它,或者像@dt-mafe 在他关于可选行的 pr 中那样从 cdk 创建你自己的 selectionModel #1052
不在我们的路线图上。