###・前提条件 ・発生している問題・エラーメッセージ ・実装したい機能
bubbleをAirtableと連携し、Repeating Groupで表示しているテーブルに対して、Drag&Dropで並べ替え仕様を実装しています。
並べ替えに関してはこちらのアルゴリズムを使っています。
しかし、並べ替えを繰り返すと、こちらの記事にあるように、小数点がどんどん細かくなり、行く行くは破綻してしまいます。
そこで、並べ替えを何度か実行したあとは、レコードに設けたitem_numberを1から順に整数でふり直すという仕様を実装しています。
この部分で、List Shifterを使用して、レコードの頭からデータを順次取り出し、連番を振ろうとしています。(連番はListShifterKW xxx’s current iteration indexで取り出しています)
例えば、item_numberが
[1 , 1.5 , 2 , 4] となっていた場合、
[1 , 2 , 3 , 4] となるようにしています。
List Shifterを使うにあたって参考にした記事はこちらです。
https://blog.nocodelab.jp/entry/listshifter#4-PROCESS-Listを使ってループ処理をしよう
しかし、List Shifterを動作させると、一度処理したはずのレコードを、順番が入れ替わったことによって、再度処理に行くような動きが見られます。
上記の配列を使って説明すると、
- [1 , 1.5 , 2 , 4]
- [1 , 2 , 2 , 4]
- [1 , 2 , 2 , 4] ← ここで何を基準にしてか、2同志の順番がひっくり返る
- [1 , 2 , 3 , 4] ← ここで2で処理したレコードを再度処理して3になる
という順序で動きます。
これは毎度更新されたairtableのリストを取りに行って、更新されたリストに対してListShifterが順番に処理をしているかと思うのですが、これをListShifterが最初にBEGINしたときのリストを状態を保持して単純に連番を振ることは出来ないでしょうか?
つまり、上記の処理の順番の「3」で入れ替えが起きない様な処理にする方法はありますでしょうか?
特にListShifterを使用することにこだわってはいません。
リストの入れ替え作業で、小数点が出た場所を整数に成型するのが目的です。
スクリーンショット
ListShifterに関連したWorkflowの内容はこちらです。
どうぞよろしくお願いいたします。
Drag&Dropで並べ替える部分は、Bubbleでどのように実装されているのでしょうか。
並び替える都度に、indexを小数点にした後、後続のWorkflowで小さい順に新しいindexをふり直せるのではないかと思いました。
回答になっていなくてすみません
「いいね!」 2
jansnapさん、
返信ありがとうございます!
Drag&Dropで並べ替える部分は、以下の記事を参考にして、スクリーンショットの様に組んでおります。
~参考記事~
https://blog.nocodelab.jp/entry/2019/11/05/Bubble_でドラッグ&ドロップの並び替えをする方法
~スクリーンショット~
参考記事では、縦に並んだリストのDrag&Dropですが、私の方では横に並んだリストのDrag&Dropなので、Workflowのトリガー名としてleftとrightとしています。
どちらも、DBのアイテム番号を示すFieldであるitem_numberに計算した小数点値を書き込むという処理だけをしています。
頂いたアドバイスの後続のworkflowで新たに小さい順に新しいndexを振りなおすのは、確かにやりたい事なのですが、小さい順の数値をどうやって拾ってきて、どうやって書き込むかという所に、別workflowでListShifterを使うという処理方法しか思いつかず、躓いてしまいました。
もし、全然違うアイデアなどアドバイス頂ければ、とてもありがたいです!
どうぞ、よろしくお願いいたします。
「2」がふたつあるとおかしくなるのは、おっしゃる通りListShifterが最初にBEGINしたときのリストの状態を保持できないからだと思います。
一旦、並び替え作業用のCustom stateを作って、ListShifterを使ってそこに新しい順番で入れてから、Airtableを書き換える案はいかがでしょう?
未検証なのではずしていたらすみません。
「いいね!」 2
jansnapさん
ありがとうございます!
Custom state、少し頭をよぎりましたが、実際のやり方がピンと来なく、トライしていませんでした。
結果、workflowの組み立てに少しハマりましたが出来ました!
教えて頂いたやり方とは少し違うのですが、
Custome Stateにオリジナルの順番を入れて、
Airtableに書き込むときに小数点を成型するやり方で実装しました。
Airtable-Modify a recordのRecordの所の書き方が分からずハマりました。
この書き方だと、AirtableのRecordをModifyしているように見えず、Custom stateが書き換えの対象になっているように見えるので。。。この辺りよく理解できてないです
ともかく、実装できたので大変助かりました。
ありがとうございました!
「いいね!」 2
そんなやり方があるのですね!
うまくいったようで良かったです〜
「いいね!」 2