Преглед изворни кода

app/ui/tokentable: force DRK token as the first row

epiphany пре 2 месеци
родитељ
комит
b22bedfda7
1 измењених фајлова са 35 додато и 1 уклоњено
  1. 35 1
      bin/app/src/ui/tokentable/mod.rs

+ 35 - 1
bin/app/src/ui/tokentable/mod.rs

@@ -17,7 +17,7 @@
  */
 
 use async_trait::async_trait;
-use darkfi_money_contract::model::TokenId;
+use darkfi_money_contract::model::{DARK_TOKEN_ID, TokenId};
 use darkfi_serial::{Decodable, Encodable, SerialEncodable};
 use miniquad::MouseButton;
 use parking_lot::Mutex as SyncMutex;
@@ -146,7 +146,41 @@ impl TokenTable {
         true
     }
 
+    /// Replace all rows in the token table
     pub async fn set_tokens(&self, rows: Vec<TokenRow>) {
+        // Ensure DRK token is always shown first (balance is set to 0 if not present)
+        let rows = if rows.iter().any(|row| row.id == *DARK_TOKEN_ID) {
+            let mut drk_row = None;
+            let mut other_rows = vec![];
+            for row in rows {
+                if row.id == *DARK_TOKEN_ID {
+                    drk_row = Some(row);
+                } else {
+                    other_rows.push(row);
+                }
+            }
+            match drk_row {
+                Some(drk) => {
+                    let mut result = vec![drk];
+                    result.extend(other_rows);
+                    result
+                },
+                None => vec![TokenRow {
+                    id: *DARK_TOKEN_ID,
+                    symbol: "DRK".to_string(),
+                    balance: "0".to_string(),
+                }],
+            }
+        } else {
+            let mut result = vec![TokenRow {
+                id: *DARK_TOKEN_ID,
+                symbol: "DRK".to_string(),
+                balance: "0".to_string(),
+            }];
+            result.extend(rows);
+            result
+        };
+
         *self.rows.lock() = rows;
 
         let atom = self.renderer.make_guard(gfxtag!("TokenTable::set_tokens"));