Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support partial update for stanzas built with Vue #42

Closed
wants to merge 8 commits into from

Conversation

darashi
Copy link
Contributor

@darashi darashi commented Sep 2, 2021

This requires that the Vue component is reactive against params (props).
Otherwise, some features may be broken.

This requires that the Vue component is reactive against `params` (props).
Otherwise, some features may be broken.
@reika0717
Copy link
Contributor

@darashi ご対応頂きありがとうございます。
こちら一通り動作確認して動きに問題はなさそうなのですが、それでも以前の打合せで教えていただいたように toRefs の追加対応した方が良いでしょうか。

@darashi
Copy link
Contributor Author

darashi commented Sep 9, 2021

@reika0717 こちら、例えば

  1. Pagination Table を表示する
  2. Customize タブの page-slider を true から false に変更する

という操作をしても、page-slider の表示/非表示が切り替わらない状態になっているかと思います。全ては確認していませんが、多くのパラメータでも同様のことが起こるかと思います。ご確認いただけますでしょうか。

@reika0717
Copy link
Contributor

@darashi パラメーターの変更がリアルタイムで反映されるかですね。
再現し、確かに反映されないことを確認しました。ご教示ありがとうございます。

@darashi
Copy link
Contributor Author

darashi commented Sep 9, 2021

@reika0717 はい、そのとおりです!

@reika0717
Copy link
Contributor

@darashi tableにおけるすべてのparameterを toRefs を使用してreactiveにしたと思うのですが、それでもリアルタイムに反映されません…
お手数ですが、一度見ていただけないでしょうか。

@darashi
Copy link
Contributor Author

darashi commented Sep 13, 2021

取り急ぎ page-slider だけ動作するようにしてみました。 params.pageSlider.value のように .value を取得してしまうと、そこで reactiveness が失われてしまいます。また、 params = toRefs(params) とするよりは、 params を分割しつつ使ったほうがよいかと思います。伝わりますでしょうか...?(ちょっとややこしそうな気もするので、後ほど他の場所も見てみます)

@darashi
Copy link
Contributor Author

darashi commented Sep 13, 2021

つづいて page-size-option を動作するようにしてみました。

    const pageSizeOption = params.pageSizeOption.value.split(",").map(Number);

としてしまうと、pageSizeOption がこの時点の値に固定されてしまいます。ここで pageSizeOptionparams.pageSizeOption が更新されるたびに計算しなおしてほしいので、computed() を使います。

ところで、

        perPage: pageSizeOption.value[0],

においては perPage はデフォルト値を与えているだけなので、ここは導出された値でなくてもよいかなと思いました。

ただ、この実装だと、 perPage10 を選んだ状態で page-size-option から 10 を消すと、空白を選択したような表示になってしまい、ややおかしな状態になります。ちゃんと対応するには、選択された perPagepage-size-option に無いケースの仕様のほうをより詳細に検討する必要がありそうです。今回のケースだと、リストには perPage で指定された値は常に存在するようにする、とかでしょうか。

@darashi
Copy link
Contributor Author

darashi commented Sep 13, 2021

padding の変更に追従するようにしました。 padding は Vue の外側にあるノードの padding を書き換えているようなので、 Vue ではなく index.js のほうで対応するようにしました。

@darashi
Copy link
Contributor Author

darashi commented Sep 14, 2021

data-urldata-type の変更に対応しました。

data-urldata-type の変更を監視し、変更があれば fetch し(初回は必ず fetch する)、完了後にその結果を state.reseponseJSON にセットします(computed ではなく watch を使ったのは、 computed は非同期処理ができないからです)。

status.columnsstatus.allRows はそれぞれ responseJSONparams から導出される値なので(status.allRows の計算にはstatus.columns が必要で、そのために結果的に params に依存している)、それぞれを computed にしました。

この変更の副作用として、columnsパラメータが設定されているときは、テーブルヘッダだけ先に表示されるようになりました。というのは、columns パラメータが設定されている場合には、データの取得完了を待たずにテーブルヘッダの表示に必要な情報が揃っているからです。

toRefsparams 全体に適用するのをやめ、必要なものだけを toRefs の結果から取り出すようにしました。

@darashi
Copy link
Contributor Author

darashi commented Oct 21, 2021

#49 で再度実装してみました

@darashi darashi closed this Oct 21, 2021
@darashi darashi deleted the support-partial-update-with-vue-stanzas branch January 25, 2022 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants