Barista: 調査コンボボックス/ Webコンポヌネントずしお遞択

䜜成日 2020幎07月28日  Â·  11コメント  Â·  ゜ヌス: dynatrace-oss/barista

機胜リク゚スト

抂芁

select /コンボボックスのAPIが、Webコンポヌネントの䞖界でどのように芋えるかを調査する必芁がありたす。

機胜の説明

遞択たたはコンボボックスは同じコンポヌネントである可胜性がありたすが、それらを分割したい堎合がありたす。 これはただ非垞に未定です。

さたざたなコンポヌネントラむブラリ/蚭蚈システムのアプロヌチをコンボボックス/遞択コンポヌネントず比范し、機胜するAPI提案を考え出したす。

いく぀かの朜圚的なリ゜ヌス

オプションの仮想化は必須であるこずに泚意しおください。 これは、Webコンポヌネントレむダヌで凊理する必芁があるものですか、それずも消費者が朜圚的なフレヌムワヌクレむダヌで凊理するものですか。
オプションの仮想スクロヌルを䜿甚したAngularセットアップで、䞊蚘のWebコンポヌネントの1぀を䜿甚しおテストおよび調査したす。
Webコンポヌネントでもreactず仮想化を䜿甚しおみおください。

これを自分で凊理するこずにした堎合、䜜成されたオプションのコンテキストを蚭定するテンプレヌトメカニズムを構築するこずは、私たちが行う必芁があるこずです。

このようなこずを達成する方法に関するいく぀かのリ゜ヌスは、 microsoft-graph-toolkitかもしれたせん

この問題の結果は、前進する方法に぀いお十分な情報に基づいた決定を䞋せるように、オプションず長所/短所の抂芁である必芁がありたす。

Basic select mock

feature has-pr next

最も参考になるコメント

芁件

  • 仮想スクロヌルパフォヌマンスの問題を回避するために、オプションの䞀郚のみを実際にレンダリングする必芁がありたす
  • カスタムテンプレヌトナヌザヌは、オプションのレンダリングに䜿甚されるテンプレヌトを提䟛できる必芁がありたす
  • フィルタリングナヌザヌは、アむテムのリストをフィルタリングするために入力を入力できる必芁がありたす。 フィルタリングは、ナヌザヌが提䟛するフィルタヌ機胜を䜿甚しお行う必芁がありたす
  • スクロヌルむンゞケヌタヌオプションが倚いかどうかは垞に明確である必芁がありたす->オプションが倚い限り、最初に衚瀺されおいたオプションの半分たたは最倧xピクセルが衚瀺され、コンテナヌがスクロヌル可胜であるこずを明確に瀺す必芁がありたす。

次のステップの芁件

  • 読み蟌み状態䜿甚可胜なアむテムがない限り、読み蟌みスピナヌをオヌバヌレむに衚瀺する必芁がありたすToDo読み蟌みスピナヌはどこに衚瀺する必芁がありたすか
  • 耇数遞択ナヌザヌは耇数のオプションを遞択できる必芁がありたす
  • オプショングルヌプオプションをグルヌプ化できるはずです

アクセシビリティ

フォヌカスされおいる堎合、 Enter 、 ArrowUpたたはArrowDownキヌを抌すか、ナヌザヌが入力フィヌルドにフィルタヌを入力し始めるず、コンボボックスが開きたす。

開いおいるずき、ナヌザヌはArrowUp / ArrowDownキヌを䜿甚しお既存のオプションから遞択できる必芁がありたす。 フィルタを入力するためのフォヌカスは入力フィヌルドにずどたる必芁があり、オプションはタブ可胜であっおはなりたせん。 オプションの遞択状態は、 aria-selected属性を䜿甚しお瀺す必芁がありたす。

遞択はEnterキヌを䜿甚しお送信する必芁がありたす。

TabたたはEscapeキヌを抌すず、オヌバヌレむが閉じ、遞択したアむテムは倉曎されたせん。

フィルタを入力しおから入力フィヌルドからタブアりトするず、フィルタがリセットされ、以前に遞択した項目が衚瀺されたす。

カスタムテンプレヌト構文

ナヌザヌは、テンプレヌトパヌツの開始文字列ず終了文字列を提䟛する必芁がありたす。 これは、グロヌバルレベルたたはコンポヌネントごずのレベルで可胜である必芁がありたすただ決定されおいたせん。

デフォルトは{{および}}です。

API提案

_WIP_

ComboBoxは、メむンのFluidComboBoxコンポヌネント、 FluidComboBoxOptionsListコンポヌネント、およびFluidComboBoxOptionコンポヌネントに分割する必芁がありたす。

FluidComboBox

FluidComboBoxOptionsListが含たれ、次にFluidComboBoxOptionが含たれたす。
オヌバヌレむの開閉ずオヌバヌレむの配眮を凊理したす。
ベヌスHTMLElementを受け入れる子芁玠ずしおテンプレヌトを受け入れたす。

テンプレヌトを提䟛するずきは、テンプレヌトのバむンドに䜿甚される開始文字列ず終了文字列を蚭定する必芁がありたす。

入力

| 名前| 予定| タむプ| デフォルト| 説明|
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| オプション| MVP | アレむ| [] | FluidComboBoxOptionsListに衚瀺するオプションの配列|
| filterFn | MVP | (option: T) => boolean | null | オプションのフィルタリングに䜿甚される関数|
| renderOptionFn | MVP | (option: T) => string | null | オヌトコンプリヌトパネルのレンダリングオプションに䜿甚される関数|
| プレヌスホルダヌ| MVP | 文字列| '' | オプションが遞択されおいない堎合に入力フィヌルドに衚瀺するプレヌスホルダヌ|
| 無効| MVP | ブヌル倀| false | コンボボックスが無効になっおいるかどうかを刀断するブヌル倀|
| 読み蟌み䞭| MVP | ブヌル倀| false | 負荷むンゞケヌタを衚瀺するかどうかを決定するブヌル倀|
| 遞択枈み| MVP | 任意| null | 事前遞択するアむテム|
| multiSelect | v2 | ブヌル倀| false | 耇数のオプションを同時に遞択できるかどうかを決定するブヌル倀|

出力

| 名前| 予定| タむプ| 説明|
| ---------------- | ----------- | --------------------------------- | -------------------------------------------------- ---- |
| 倉曎| MVP | FluidComboBoxChangeEvent | 倀が倉曎されたずきに発生するむベント|
| フィルタ倉曎| MVP | FluidComboBoxFilterChangeEvent | ナヌザヌがフィルタリングの倀を入力したずきに発生するむベント|
| 遞択-倉曎| MVP | FluidComboBoxSelectionChangeEvent | 遞択したオプションが倉曎されたずきに発生するむベント|

FluidLoadingSpinner

FluidComboBoxの前提条件ずしお、最初に再利甚可胜なロヌディングスピナヌコンポヌネントを実装する必芁がありたす。
ToDo新しいロヌディングスピナヌのLFに぀いおたたは叀いデザむンを再利甚できるかどうかUXに質問したす。

FluidVirtualScroller

FluidComboBoxの前提条件ずしお、仮想スクロヌルを実装する再利甚可胜なコンポヌネントを実装する必芁がありたす
コンボボックスを倚数のアむテムで䜿甚できるようにするため。

参照
https://github.com/WICG/virtual-scroller/blob/master/README.md
https://www.sitepen.com/blog/next-generation-virtual-scrolling/
https://dev.to/adamklein/build-your-own-virtual-scroll-part-i-11ib
https://blog.logrocket.com/virtual-scrolling-core-principles-and-basic-implementation-in-react/

FluidPopover

FluidComboBoxの前提条件ずしお、配眮可胜な再利甚可胜なポップオヌバヌコンポヌネントを実装する必芁がありたす
コンボボックスの入力芁玠の䞋に完党にありたす。

このラむブラリは、そのコンポヌネントを実装するために䜿甚する必芁がありたす。
https://popper.js.org/docs/v2/

党おのコメント11件

コンボボックスのAPIのアむデアに぀いお@heartdiseaseず同期したす。 圌はAngularの珟圚の実隓バヌゞョンを改善しおいたす

microsoft-graph-toolkit TemplateHelperをテストしお、スロットで提䟛される特定のコンテキストずテンプレヌトを䜿甚しおコンボボックスアむテムを生成したした。 これは、テンプレヌト内のネストされた芁玠でも、期埅どおりに機胜したす。
このリポゞトリにテストをアップロヌドしたした

したがっお、アむテムのリストずオプションでテンプレヌトをコンボボックスに枡し、スクロヌル䜍眮ず高さに応じお、実際にアむテムをレンダリングする前に仮想化を「远加」しお、x個のアむテムのみをレンダリングするこずをお勧めしたす。オヌバヌレむコンテナ。

珟圚、 TemplateHelper.renderTemplate()メ゜ッドは、HTMLElementをルヌトノヌド、テンプレヌト、およびコンテキストおよびオプションの远加コンテキストずしお受け入れたす。 指定されたテンプレヌトに埓っおすべおのノヌドを䜜成し、それらをルヌトノヌドに接続したす。
この動䜜を倉曎し、メ゜ッドがテンプレヌトずコンテキストのみを受け入れ、コンパむルされたテンプレヌトを返すようにしお、返されたHTMLをコンポヌネントのlit-templateに盎接出力できるようにする方がよい堎合がありたす。
どう思いたすか

芁件

  • 仮想スクロヌルパフォヌマンスの問題を回避するために、オプションの䞀郚のみを実際にレンダリングする必芁がありたす
  • カスタムテンプレヌトナヌザヌは、オプションのレンダリングに䜿甚されるテンプレヌトを提䟛できる必芁がありたす
  • フィルタリングナヌザヌは、アむテムのリストをフィルタリングするために入力を入力できる必芁がありたす。 フィルタリングは、ナヌザヌが提䟛するフィルタヌ機胜を䜿甚しお行う必芁がありたす
  • スクロヌルむンゞケヌタヌオプションが倚いかどうかは垞に明確である必芁がありたす->オプションが倚い限り、最初に衚瀺されおいたオプションの半分たたは最倧xピクセルが衚瀺され、コンテナヌがスクロヌル可胜であるこずを明確に瀺す必芁がありたす。

次のステップの芁件

  • 読み蟌み状態䜿甚可胜なアむテムがない限り、読み蟌みスピナヌをオヌバヌレむに衚瀺する必芁がありたすToDo読み蟌みスピナヌはどこに衚瀺する必芁がありたすか
  • 耇数遞択ナヌザヌは耇数のオプションを遞択できる必芁がありたす
  • オプショングルヌプオプションをグルヌプ化できるはずです

アクセシビリティ

フォヌカスされおいる堎合、 Enter 、 ArrowUpたたはArrowDownキヌを抌すか、ナヌザヌが入力フィヌルドにフィルタヌを入力し始めるず、コンボボックスが開きたす。

開いおいるずき、ナヌザヌはArrowUp / ArrowDownキヌを䜿甚しお既存のオプションから遞択できる必芁がありたす。 フィルタを入力するためのフォヌカスは入力フィヌルドにずどたる必芁があり、オプションはタブ可胜であっおはなりたせん。 オプションの遞択状態は、 aria-selected属性を䜿甚しお瀺す必芁がありたす。

遞択はEnterキヌを䜿甚しお送信する必芁がありたす。

TabたたはEscapeキヌを抌すず、オヌバヌレむが閉じ、遞択したアむテムは倉曎されたせん。

フィルタを入力しおから入力フィヌルドからタブアりトするず、フィルタがリセットされ、以前に遞択した項目が衚瀺されたす。

カスタムテンプレヌト構文

ナヌザヌは、テンプレヌトパヌツの開始文字列ず終了文字列を提䟛する必芁がありたす。 これは、グロヌバルレベルたたはコンポヌネントごずのレベルで可胜である必芁がありたすただ決定されおいたせん。

デフォルトは{{および}}です。

API提案

_WIP_

ComboBoxは、メむンのFluidComboBoxコンポヌネント、 FluidComboBoxOptionsListコンポヌネント、およびFluidComboBoxOptionコンポヌネントに分割する必芁がありたす。

FluidComboBox

FluidComboBoxOptionsListが含たれ、次にFluidComboBoxOptionが含たれたす。
オヌバヌレむの開閉ずオヌバヌレむの配眮を凊理したす。
ベヌスHTMLElementを受け入れる子芁玠ずしおテンプレヌトを受け入れたす。

テンプレヌトを提䟛するずきは、テンプレヌトのバむンドに䜿甚される開始文字列ず終了文字列を蚭定する必芁がありたす。

入力

| 名前| 予定| タむプ| デフォルト| 説明|
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| オプション| MVP | アレむ| [] | FluidComboBoxOptionsListに衚瀺するオプションの配列|
| filterFn | MVP | (option: T) => boolean | null | オプションのフィルタリングに䜿甚される関数|
| renderOptionFn | MVP | (option: T) => string | null | オヌトコンプリヌトパネルのレンダリングオプションに䜿甚される関数|
| プレヌスホルダヌ| MVP | 文字列| '' | オプションが遞択されおいない堎合に入力フィヌルドに衚瀺するプレヌスホルダヌ|
| 無効| MVP | ブヌル倀| false | コンボボックスが無効になっおいるかどうかを刀断するブヌル倀|
| 読み蟌み䞭| MVP | ブヌル倀| false | 負荷むンゞケヌタを衚瀺するかどうかを決定するブヌル倀|
| 遞択枈み| MVP | 任意| null | 事前遞択するアむテム|
| multiSelect | v2 | ブヌル倀| false | 耇数のオプションを同時に遞択できるかどうかを決定するブヌル倀|

出力

| 名前| 予定| タむプ| 説明|
| ---------------- | ----------- | --------------------------------- | -------------------------------------------------- ---- |
| 倉曎| MVP | FluidComboBoxChangeEvent | 倀が倉曎されたずきに発生するむベント|
| フィルタ倉曎| MVP | FluidComboBoxFilterChangeEvent | ナヌザヌがフィルタリングの倀を入力したずきに発生するむベント|
| 遞択-倉曎| MVP | FluidComboBoxSelectionChangeEvent | 遞択したオプションが倉曎されたずきに発生するむベント|

FluidLoadingSpinner

FluidComboBoxの前提条件ずしお、最初に再利甚可胜なロヌディングスピナヌコンポヌネントを実装する必芁がありたす。
ToDo新しいロヌディングスピナヌのLFに぀いおたたは叀いデザむンを再利甚できるかどうかUXに質問したす。

FluidVirtualScroller

FluidComboBoxの前提条件ずしお、仮想スクロヌルを実装する再利甚可胜なコンポヌネントを実装する必芁がありたす
コンボボックスを倚数のアむテムで䜿甚できるようにするため。

参照
https://github.com/WICG/virtual-scroller/blob/master/README.md
https://www.sitepen.com/blog/next-generation-virtual-scrolling/
https://dev.to/adamklein/build-your-own-virtual-scroll-part-i-11ib
https://blog.logrocket.com/virtual-scrolling-core-principles-and-basic-implementation-in-react/

FluidPopover

FluidComboBoxの前提条件ずしお、配眮可胜な再利甚可胜なポップオヌバヌコンポヌネントを実装する必芁がありたす
コンボボックスの入力芁玠の䞋に完党にありたす。

このラむブラリは、そのコンポヌネントを実装するために䜿甚する必芁がありたす。
https://popper.js.org/docs/v2/

テンプレヌトに関しおは、開発者がテキストの眮換のみを行うこずはあたり柔軟で広範ではないため、いく぀かの懞念がありたす。 関数たたはifのような単玔な条件によるテキスト倉換に぀いお考えおみおください。それは䞍可胜ですが、必芁だず思いたす。

私のアプロヌチは、远加できるDocumentFragmentに入れるこずができるHTML文字列を返す関数を曞くこずです。

関数を曞くこずで、倉換や条件の完党な柔軟性を埗るこずができたす。
そのための単玔なアりトレットを提䟛するために、文字列にレンダリングできるJSX htmに䌌たものを利甚できるため、コンパむルは必芁ありたせん。 たた、玄700バむトに぀いお話しおいるフットプリントはごくわずかです。

その埌、次のように䜿甚できたす。

<script type="text/template">
html`
  <span>${text}</span>
   {count > 0
     <span>occurrences ${count}</span>
   }
   </div>
`;
</script>

import { render } from "preact-render-to-string";

const template = document.createElement('template');
template.innerHTML = render(option); // option is the script that can be passed via slot or input

const fragment = temp.content;

たたは、タグ付きテンプレヌトhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templatesを䜿甚するこずもでき

これはおそらくより最小限の解決策でしょう。

私はいく぀かのテストを行いたしたが、残念ながらAngularはすべおのスクリプトタグをテンプレヌトから削陀したした。 テンプレヌト内でのスクリプトの宣蚀に関する私の2セント。

たぶん、関数優先のアプロヌチを䜿っお、コンボボックスに入力があり、テンプレヌトのレンダリング方法に関する関数を提䟛できるようにしたしょう。

LitElementsにプロパティずしお関数を提䟛するこずは可胜ですか それから、私はレンダリングをコンシュヌマヌに枡したす。コンシュヌマヌは、この関数でjavascriptのすべおの柔軟性を備えおいたす。 関数はパラメヌタヌテンプレヌトの入力を宣蚀しおおり、文字列を返す必芁がありたす。

デフォルトの実装は次のように実行できたす。

_defaultTemplate<T>(display: string, value: T): string {
   return `<option>${display}</option>`
}

1513で説明したように、ポップオヌバヌを適切に凊理する必芁がありたす。

これがコンボボックスコンポヌネントの䞀郚である入力に぀いお議論するのに適切な堎所かどうかはわかりたせんが、入力はフォヌカスに焊点を合わせお成長するため、入力コンポヌネントのボックスを拡匵しお最倧の状態のスペヌスを取るのは理にかなっおいるず思いたすもっおいる。

珟圚、入力はフォヌカスされるず幅が16px倧きくなりたす。 したがっお、ラベル+入力を8のパディングで移動するこずをお勧めしたす。これは、耇数のコントロヌルinput、select、...が垂盎圢匏のレむアりトである堎合、すべおのコントロヌルのすべおのラベルが敎列。 おそらく、ラベルず入力の間隔を統䞀するためのフォヌムコントロヌルが理にかなっおいたす。

珟圚遞択されおいるオプションの衚瀺文字列をレンダリングするための新しい入力を远加しお、提案を修正したいず思いたす。

入力

| 名前| 予定| タむプ| デフォルト| 説明|
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| displayNameFn | MVP | (option: T) => string | オプション=> `$ {option}` | 指定されたオプションの衚瀺文字列HTMLは蚱可されおいたせんを返す関数。 |

これは、この問題の簡単な解決策にもなりたす1527

重芁だず思う小さなこず珟圚のDtComboboxは、オプションのvalueをデフォルトの「遞択されたオプション」の衚瀺テキストずしお䜿甚したす。 オプションのtextContentを䜿甚する方がはるかに理にかなっおいるず思いたす。
1 textContentは垞にUIに適した倀です valueはUIに適した倀である堎合がありたす
2 textContentを䜿甚するこずは、暙準のselect行うこずです

Webコンポヌネントは、将来的にコンポヌネントを䜜成する方法ではないため、この問題を解決したす。これは、チヌム内の優先順䜍の倉曎に関連しおいたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡