过滤器
Filters是一个复合组件,用于过滤列表或表中的项。
进口{ChoiceList,文本框,RangeSlider,卡,ResourceList,过滤器,《阿凡达》,文本,}从“@shopify /北极星”;进口{useState,useCallback}从“反应”;函数ResourceListFiltersExample(){常量[accountStatus,setAccountStatus]=useState(零);常量[moneySpent,setMoneySpent]=useState(零);常量[taggedWith,setTaggedWith]=useState(零);常量[queryValue,setQueryValue]=useState(零);常量handleAccountStatusChange=useCallback((价值)= >setAccountStatus(价值),[],);常量handleMoneySpentChange=useCallback((价值)= >setMoneySpent(价值),[],);常量handleTaggedWithChange=useCallback((价值)= >setTaggedWith(价值),[],);常量handleFiltersQueryChange=useCallback((价值)= >setQueryValue(价值),[],);常量handleAccountStatusRemove=useCallback(()= >setAccountStatus(零),[],);常量handleMoneySpentRemove=useCallback(()= >setMoneySpent(零),[]);常量handleTaggedWithRemove=useCallback(()= >setTaggedWith(零),[]);常量handleQueryValueRemove=useCallback(()= >setQueryValue(零),[]);常量handleFiltersClearAll=useCallback(()= >{handleAccountStatusRemove();handleMoneySpentRemove();handleTaggedWithRemove();handleQueryValueRemove();},[handleAccountStatusRemove,handleMoneySpentRemove,handleQueryValueRemove,handleTaggedWithRemove,]);常量过滤器=[{关键:“accountStatus”,标签:“账户状态”,过滤器:(<ChoiceList标题=“账户状态”titleHidden选择={[{标签:“启用”,价值:“启用”},{标签:没有被邀请的,价值:没有被邀请的},{标签:“邀请”,价值:“邀请”},{标签:“拒绝”,价值:“拒绝”},]}选择={accountStatus||[]}onChange={handleAccountStatusChange}allowMultiple/>),快捷方式:真正的,},{关键:“taggedWith”,标签:“标记”,过滤器:(<文本字段标签=“标记”价值={taggedWith}onChange={handleTaggedWithChange}自动完成=“关闭”labelHidden/>),快捷方式:真正的,},{关键:“moneySpent”,标签:“花费”,过滤器:(<RangeSlider标签=“钱花在了之间”labelHidden价值={moneySpent||[0,500]}前缀=“$”输出最小={0}马克斯={2000}一步={1}onChange={handleMoneySpentChange}/>),},];常量appliedFilters=[];如果(!isEmpty(accountStatus)){常量关键=“accountStatus”;appliedFilters.推({关键,标签:disambiguateLabel(关键,accountStatus),onRemove:handleAccountStatusRemove,});}如果(!isEmpty(moneySpent)){常量关键=“moneySpent”;appliedFilters.推({关键,标签:disambiguateLabel(关键,moneySpent),onRemove:handleMoneySpentRemove,});}如果(!isEmpty(taggedWith)){常量关键=“taggedWith”;appliedFilters.推({关键,标签:disambiguateLabel(关键,taggedWith),onRemove:handleTaggedWithRemove,});}返回(<div风格={{高度:“568 px”}}><卡><ResourceList resourceName={{单数:“客户”,复数:“客户”}}filterControl={<过滤器queryValue={queryValue}过滤器={过滤器}appliedFilters={appliedFilters}onQueryChange={handleFiltersQueryChange}onQueryClear={handleQueryValueRemove}onClearAll={handleFiltersClearAll}/>}项目={[{id:341,url:“客户/ 341”,的名字:“美Jemison”,位置:美国迪凯特的,},{id:256,url:“客户/ 256”,的名字:“艾伦·奥乔亚”,位置:“美国洛杉矶”,},]}renderItem={(项)= >{常量{id,url,的名字,位置}=项;常量媒体=<客户规模=“媒介”的名字={的名字}/>;返回(<ResourceList.项id={id}url={url}媒体={媒体}accessibilityLabel={`查看详细信息$ {的名字}`}><文本作为=“h3”变体=“bodyMd”fontWeight=“大胆”>{的名字}</文本><div>{位置}</div></ResourceList.项>);}}/></卡></div>);函数disambiguateLabel(关键,价值){开关(关键){情况下“moneySpent”:返回`花的钱在$$ {价值[0]}和$$ {价值[1]}`;情况下“taggedWith”:返回`标记$ {价值}`;情况下“accountStatus”:返回价值.地图((瓦尔)= >`客户$ {瓦尔}`).加入(”、“);默认的:返回价值;}}函数isEmpty(价值){如果(数组.isArray(价值)){返回价值.长度= = =0;}其他的{返回价值= = =”||价值= =零;}}}
道具
想要帮助完善这个功能吗?请<!-- -->分享你的反馈.
接口<!-- -->
FiltersProps<!-- -->
- queryValue? 字符串
-
查询字段中当前输入的文本。
- queryPlaceholder? 字符串
-
查询字段的占位符文本。
- 集中? 布尔
-
查询字段是否集中。
- 过滤器 []
-
将可用过滤器添加到工作表中。快捷过滤器暴露在工作表的外部。
- appliedFilters? []
-
应用的过滤器被呈现为标签。使用相应的键调用remove回调函数。
- onQueryChange (queryValue:字符串) = >无效
-
当查询字段被更改时返回。
- onQueryClear () = >无效
-
当clear按钮被触发时。
- onClearAll () = >无效
-
当全部重置按钮被按下时回调。
- onQueryBlur? () = >无效
-
当查询字段模糊时返回。
- onQueryFocus? () = >无效
-
当查询字段集中时调用。
- 孩子们? 反应.ReactNode
-
要与控件内联显示的内容。
- 禁用? 布尔
-
禁用所有过滤器。
- helpText? 任何
-
要在过滤器下面显示的其他提示文本。
- hideTags? 布尔
-
隐藏应用过滤器的标记。
- hideQueryField? 布尔
-
隐藏查询字段。
- disableQueryField? 布尔
-
禁用查询字段。
商家使用过滤器:
- 在列表或表格中查看项目的不同子集
- 通过输入文本字段进行过滤
- 通过选择过滤器或提升过滤器进行过滤
商家与过滤器交互的方式取决于您决定合并的组件。在最简单的形式中,过滤器包括一个文本字段和一组过滤器,它们可以以不同的方式显示。例如,您可以显示提升过滤器和一个More按钮,打开一个表包含更多的过滤器。过滤器是什么以及它们如何暴露给商家是灵活的。
可访问性
filters组件依赖于多个其他组件的可访问性特性:
使用自定义功能维护可访问性
由于自定义HTML可以传递给组件以进行其他操作,因此要确保构建的过滤系统整体上是可访问的。
所有商户必须:
- 能够识别和理解所有控件的标签
- 收到状态更改的通知
- 能够用键盘完成所有操作
最佳实践
filters组件应该:
- 通过推广最常用的过滤类别,帮助减少商家的工作
- 包含不超过2到3个推广过滤器
- 在为每个过滤器和要包含的过滤器总数设计界面时,考虑较小的屏幕尺寸
- 只对与过滤相关的内容使用子元素
内容的指导方针
文本字段
文本字段应该被清晰地标记,这样商家就可以很明显地进入该字段。
做
- 过滤器订单
不
- 在这里输入文本
过滤器徽章
如果筛选器名称本身的用途很明确,则使用该名称。例如,当您看到一个过滤器徽章,上面写着实现了,很直观地,它属于履行状态类别。
做
- 完成,实现
不
- 实现:实现,未实现
如果筛选器名称本身不明确,请添加与状态相关的描述性单词。例如,低断章取义是说不通的。添加单词“风险”,这样商家就知道它来自风险类别。
做
- 高风险,低风险
不
- 高,低
将来自同一类别的标签分组在一起。
做
- (未实现,完成)
不
- (未实现)(完成)
如果所有标签丸都被选中:在中间截断
做
- 有报酬,没有报酬
不
- 所有支付状态过滤器选择,已支付,未付款…