Barista: Filterfield 2 - 需求收集

创建于 2020-05-06  ·  21评论  ·  资料来源: dynatrace-oss/barista

由于过滤器字段组件的当前实现缺少一些过去要求的功能,但很难修补到当前状态,因此我们正在考虑创建过滤器字段的第二个版本。 当我们开始第一次实现过滤器字段时,在初步实现之后添加了很多要求,这使得很难满足所有这些要求。
在这个版本中,我们希望尽早创建需求列表,以更好地满足图书馆消费者的期望。
请参与并添加到此讨论中,因为我们希望特别彻底地防止再次发生类似情况。


数据源

可以向过滤器字段的数据源添加/设置可用过滤器

应该很容易定义哪些过滤器可用,说明过滤器类型、它的子级和验证器。 在 v1 实现中,这是通过配置对象和数据源完成的

可以将可用过滤器异步附加到数据源

这是根据用户输入加载更多数据的关键功能。 这可以是在自动完成情况下过滤的特殊单词,或者是特殊过滤器的路径。 应该可以扩展当前可用的过滤器以及加载下一个过滤器步骤。 (参考#868)

选定的过滤器(标签)

选定的过滤器由键、值和可能反映标签状态的一些元数据组成。

标签键和值显示应该是可定制的

如 #1113 中所述,需要自定义显示的key和可能的value属性,这些属性显示在每个单独的标签内。

选定的过滤器应该易于以编程方式设置

在 v1 实现中,过滤器只能通过引用在数据源顶部传递的元素来设置,这似乎很乏味。 (参考#473)

https://github.com/dynatrace-oss/barista/blob/fa98ac150b6d324f5c3eaed990c6d6c5f155f318/libs/examples/src/filter-field/filter-field-programmatic-filters-example/filter-field-programmatic-filters-example.ts# L67 -L77

以编程方式更改标签的状态应该很容易

将当前设置的过滤器的状态更改为editable / disabled / read-only应该很容易。 当前的实现现在需要消费者获取当前设置的过滤器并找到他们想要操作的实例并在那里添加更改(参考#848)。

标签可以编辑

用户应该可以返回到已经设置的过滤器并编辑它的值。

标签之间的逻辑连接器

一个重复的请求是添加逻辑连接器,即NOTANDOR到标签列表。
感谢@subarroca提到这一点。

逻辑分组

作为标签之间逻辑连接器的扩展, @petrabrunner还提到逻辑连接的标签应该可以在括号内分组。

独特性

如果用户已经选择了一次过滤器,则应从可用过滤器列表中删除一些过滤器。

过滤器类型和扩展

过滤器的嵌套

过滤器应该是可嵌套的,为用户提供一个简单的路径来过滤到实际的键值对。 这很好地反映在 v1 行为中。

从一组中选择(自动完成)

这将让用户从提供的过滤器中选择一个值。 这可以嵌套直到选择最后一个过滤器,即选择一个城市给用户以下过滤器选项:国家>州>地区>城市
这些集合可以有一个不同的选项,这意味着如果选择了一个不同的集合,就不可能从同一个集合中选择另一个。 因此,该集合不应再显示为选项。

带有建议的自由文本

一些过滤器应该 _just_ 能够保存由用户定义的自由文本。 当前的实现提供了提供文本的选项。 没有迹象表明如何过滤文本。 向这种类型的过滤器添加几个模式可能是一个想法,即startWithcontainsexactMatch 。 这可以让消费者对过滤有更多的控制。

范围

在 v1 实现中,范围允许用户选择一个或两个值以及以下运算符之一: greater thanless thanequalsrange (过滤值应该在第一个和第二个提供的值之间)。
应该可以为填充在该范围内的每个字段提供默认值。
已经有人要求扩展范围以允许大于等于和小于等于运算符。 此外,在 Range 运算符模式下,每个值还应该有greater/lessgreater/less than的选择。
该范围也可以被视为扩展。

多选

消费者应该可以添加多选(类似于 _select from a tag_ 部分),但不是单选,而是多选设置。 正如@danielkaneider提到的,这已经在过滤器字段的初始模拟中,看起来很像叠加层中的复选框列表。 (参考问题 #1206)
在我看来,这也可以被视为扩展。

具有自定义语义含义的范围

这也被高度认为是作为扩展构建的。 一些用例涵盖范围选择,不遵循数字范围逻辑(即,@bmrozinski 在 #78 中提出的版本号范围

过滤器的扩展

消费者应该可以轻松地提供他们自己的过滤器版本并根据他们的需要定制覆盖。 要考虑的事情是在过滤器字段和扩展程序之间创建一个接口,以便在扩展程序和过滤器字段之间进行可靠的通信。
这将为消费者打开很多可能性来增强过滤器领域并根据他们的需要进行调整。

目前认为通过扩展(第一方或第三方)完成:

  • 范围
  • 具有语义意义的范围
  • 多选
  • 日期选择器

验证

每个提交的过滤器都应该能够再次通过验证器函数进行验证。 在 v1 实现中,这仅适用于free-text类型。

输入过滤

当用户在填写或选择过滤器时,应根据用户输入显示和过滤可用的过滤器。 v1 实现已经拥有这种行为,我们希望保持这种行为。

支持 Angular 表单集成

基于https://github.com/dynatrace-oss/barista/issues/951#issuecomment -631519841,应该调查与 Angular Forms 的集成是否可行(过滤字段值可能非常复杂)。 但这绝对是值得研究的事情。

filter-field needs discussion

最有用的评论

你好!

我们收到了一些关于另一个方面可以改进的反馈,即过滤器如何处理中/长文本输入。

目前,该小部件呈现一个大约 24-25 个字符的输入“窗口”,这使得查看一个输入或复制粘贴的文本有点困难。
例如,小部件可以扩展并利用其右侧的可用空间,尤其是在大屏幕上。

Screenshot 2020-10-23 at 09 29 30

蓝色框突出显示输入框的大小,示例文本为:_这是一个中等长度的文本_

所有21条评论

看起来很棒的家伙。 我们已经有一些需求正在酝酿中,我们想与您联系。 我看到这里已经涵盖了它们

我们被要求包括 AND、OR 和 NOT。
还有禁用状态,您已经在考虑

早期的模拟具有可视化的多项选择。 您将获得前面带有复选框的建议,而不仅仅是获得建议列表并选择一个; 所以你可以选择它们的倍数。 它是 AND 过滤器的更简单版本,并且比多次输入相同的过滤器(例如国家/地区)更好

我们被要求包括 AND、OR 和 NOT。

感谢@subarroca提出这个问题,我已将此添加到原始要求列表中。

早期的模拟具有可视化的多项选择。 您将获得前面带有复选框的建议,而不仅仅是获得建议列表并选择一个;

感谢@danielkaneider提出这个问题。 我已将此添加到原始要求列表中。

对于某些过滤器,可能会有大量建议,例如标签。 最好将它们限制为 N 条建议并显示“开始输入以查看更多信息”,这将在用户输入时异步获取 - 一种服务器端搜索。

也许值得将 #78 添加到需求中。

我还指望Filterfield v2 中的#78 实现。 范围过滤器非常适合有关版本号(例如 1.194.0)过滤的用例。

我还指望Filterfield v2 中的#78 实现。

绝对地。 我已将其添加到列表中。 虽然我认为其中很多实际上是作为扩展构建的(意思是不是由咖啡师库本身提供),但最好同时存在所有这些扩展用例,以便我们定义过滤器之间的接口-字段 v2 和自定义扩展更好。

我们有@Argeath描述的用例,在新问题视图中有很多用于过滤的标签。 我们只想从服务器返回标签的子集,匹配用户在过滤器字段中输入的查询。 我们甚至可能不得不限制那些匹配结果,因为可能有太多。 因此,一种表示“截断”结果的方法也很好。

嗨,很高兴看到您计划对过滤器字段进行改造;)

我们的用例有点复杂,我不知道上面的建议是否已经完全涵盖了它。 我们希望能够用逻辑连接器(AND、OR、...)链接过滤器术语

费:
全部显示 (creator=userx AND severity=high) OR (creator=usery AND severity=low)

我们总是将其称为“jira 让您过滤问题的方式”。
我已经看过“一种过滤器类型的多项选择”和 AND/OR 语句 - 但是是否可以用括号(或任何其他方式)定义过滤器术语并将它们与逻辑运算符结合起来?

@petrabrunner不幸的是,我认为这不是过滤器字段的用例,因为这越来越类似于查询语言模式。 您的查询类型肯定也有用例,但我会尽量不要将查询语言功能与过滤器字段混合使用。
您给出的示例可能似乎在过滤字段上下文中工作,但如果您参考_jira 让您过滤问题的方式_,这可能会很快变得更加复杂。
TBH,即使是过滤器字段中的逻辑运算符也可能对此有所延伸。 目前我正试图弄清楚人们对过滤器字段的期望,如果这里的一切都将被构建或者甚至是可行的,可能是稍后的讨论。

我将在上面的列表中添加逻辑分组,但请注意,这可能在优先级列表中非常靠后。

@tomheller感谢回复 - 待定。 我已经预料到了——因为逻辑会很广泛——但我想,如果我不告诉你我们的用例,你就不知道它;)

我们还需要将自动完成数据加载为部分的功能。 例如加载前 100 个选项,并在搜索选项时从服务器加载过滤的选项。

当前实现的 PR 可以在这里看到: https ://github.com/dynatrace-oss/barista/pull/1021

大家好,我们也有一些请愿书,按优先级从高到低排序:

  • 能够为范围过滤器类型设置默认的最小和最大数值。
  • 一种新的过滤器类型:日期选择器。

谢谢!

在过滤器字段中支持角度形式真的很酷;),所以从消费者的角度来看更容易管理。 也许为它公开一个 FilterFormControl 会有所帮助

  interface FilterFormControl {
    field: string;
    value: FilterValue // any basically
    operator?: 'AND' | 'OR' | 'NOT'
    ...
  }  

```html
formControlName="过滤器"
标签=“过滤依据”
aria-label="按表单控件过滤"
clearAllLabel="清除所有"

```ts
// comes from a saved config
initFilters = [{
  field: 'foo',
  value: 'bar'
}];
form: FormGroup({
  filter: new FormControl(initFilters)
});

你好,
拥有这个功能也很好:

默认类别:当用户开始小费时,此键被选中。 通过这样做,用户可以跳过必须选择键的步骤。 在下面的图片中,您可以看到它的一个示例,“名称”是作为过滤依据的默认类别:

  1. 过滤器未聚焦:
    image
  2. 过滤焦点(用户点击它):
    image
  3. 用户提示:
    image
  4. 用户完成小费:
    image
  5. 用户按回车键:
    image

你好团队! 我还有另一份请愿书,定义如下:

getTagsForFilterKey(key: 字符串) | DtFilterFieldTag[] | 返回一个包含所有匹配项的 DtFilterFieldTag 数组,其中DtFilterFieldTag的键包含key参数
-- | -- | --

TL;DR:当前getTagForFilter函数的新版本,以更好地满足我们的需求。

正如与 Markus Heimbach 讨论的那样,他建议增加一种可能性,即如果您最初键入并且所有选项都被过滤掉,您仍然可以将此文本作为自由文本输入提交。
换句话说,除了根级别的自动完成之外的自由文本。

正如与 Markus Heimbach 讨论的那样,他建议增加一种可能性,即如果您最初键入并且所有选项都被过滤掉,您仍然可以将此文本作为自由文本输入提交。
换句话说,除了根级别的自动完成之外的自由文本。

但我认为,这基本上就是@SaraDavilaMendez已经提到的https://github.com/dynatrace-oss/barista/issues/951#issuecomment -686365435

正如与 Markus Heimbach 讨论的那样,他建议增加一种可能性,即如果您最初键入并且所有选项都被过滤掉,您仍然可以将此文本作为自由文本输入提交。
换句话说,除了根级别的自动完成之外的自由文本。

但我认为,这基本上就是@SaraDavilaMendez#951 中提到的(评论)

谢谢你。 错过了这条评论。

你好!

我们收到了一些关于另一个方面可以改进的反馈,即过滤器如何处理中/长文本输入。

目前,该小部件呈现一个大约 24-25 个字符的输入“窗口”,这使得查看一个输入或复制粘贴的文本有点困难。
例如,小部件可以扩展并利用其右侧的可用空间,尤其是在大屏幕上。

Screenshot 2020-10-23 at 09 29 30

蓝色框突出显示输入框的大小,示例文本为:_这是一个中等长度的文本_

移至 APM-266067

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

相关问题

schobocop picture schobocop  ·  10评论

TannerGilbert picture TannerGilbert  ·  4评论

kaikcreator picture kaikcreator  ·  10评论

b-wohs picture b-wohs  ·  3评论

subarroca picture subarroca  ·  14评论