たころぐ

興味の向くままに

【BotUI】action.select のsearchselect設定のバグ修正(プルリク送信済み)

はじめに

以前の記事でもちらっと取り上げていた、BotUI でSelect(dropdown list) を利用するときにsearchselect の設定値に true / false のどちらを設定しても挙動がかわらない問題について Githubでプルリクを出していた。
そのプルリクがマージされたらブログに書こうと思っていたけれど、いっこうに反応されない(というかリポジトリが放置されている気配。Issueやプルリクは追加されるのに作者は全然反応しない)ので、やったことをまとめてみる。

→2018.11.21に無事にMergeされました。作者さんが最近また活発に更新させるようになりました。

問題の現象

action.selectにおいて、選択肢の中から入力補完を行ってくれる設定値であるsearchselecttrue / 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となり、利用者の設定によらずsearchselecttrueとして動作してしまう(今回の問題の挙動)。

解決策(プルリク送信済み)

ということで、上記の★印の行の処理を利用者が設定していればその値に、設定されていなければデフォルト値の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だと思うのでアップデートされることを期待!