【BotUI】action.select のsearchselect設定のバグ修正(プルリク送信済み)
はじめに
以前の記事でもちらっと取り上げていた、BotUI でSelect(dropdown list) を利用するときにsearchselect
の設定値に true
/ false
のどちらを設定しても挙動がかわらない問題について Githubでプルリクを出していた。
そのプルリクがマージされたらブログに書こうと思っていたけれど、いっこうに反応されない(というかリポジトリが放置されている気配。Issueやプルリクは追加されるのに作者は全然反応しない)ので、やったことをまとめてみる。
→2018.11.21に無事にMergeされました。作者さんが最近また活発に更新させるようになりました。
問題の現象
action.select
において、選択肢の中から入力補完を行ってくれる設定値であるsearchselect
に true
/ false
のどちらを設定しても挙動がかわらない(true
として扱われる)。
リファレンスには、設定値によってON/OFFできるに書かれているので、そのようにしたい。
ソースコードを確認してみると
botui/src/script/botui.jsにおいて、
38行目あたりに
var _botApp, // current vue instance. _options = { debug: false, fontawesome: true, searchselect: true },
とあり、デフォルト値がtrue
で設定されている。
350行目あたりで、
select: function (_opts) { _checkAction(_opts); _opts.type = 'select'; _opts.action.label = _opts.action.label || 'text'; _opts.action.value = _opts.action.value || ''; _opts.action.searchselect = _opts.action.searchselect || _options.searchselect; // ★ _opts.action.multipleselect = _opts.action.multipleselect || false;
となっている。★印の行の処理をみると、デフォルト値(opts.action.searchselect
)もしくは利用者の設定値(_options.searchselect
)のどちらかがtrue
なら_opts.action.searchselect = ture
となる。
つまりこの実装の場合、必ず_opts.action.searchselect = ture
となり、利用者の設定によらずsearchselect
がtrue
として動作してしまう(今回の問題の挙動)。
解決策(プルリク送信済み)
ということで、上記の★印の行の処理を利用者が設定していればその値に、設定されていなければデフォルト値のtrue
になるように書き換えて上げればよいので、次のようにした(プルリク送信済み)。
select: function (_opts) { _checkAction(_opts); _opts.type = 'select'; _opts.action.label = _opts.action.label || 'text'; _opts.action.value = _opts.action.value || ''; // _opts.action.searchselect = _opts.action.searchselect || _options.searchselect; // ★ _opts.action.searchselect = typeof _opts.action.searchselect !== 'undefined' ? _opts.action.searchselect : _options.searchselect; // ★ _opts.action.multipleselect = _opts.action.multipleselect || false;
これで、仕様通りの挙動になった。
2018/07/15に送ったプルリクはこちら。
まとめ
ソースコードを読み解くことで解決できた。
作者さん、このプルリクのマージも含めてこのOSSのメンテしてくれないかなー。
よいOSSだと思うのでアップデートされることを期待!