-
{map(renderSpec)(specs)}
+
+
-
- {map(renderTabNav)(tabNav)}
-
- {eq(0, tab) && }
- {eq(1, tab) && }
+
+
+
{map(renderSpec)(specs)}
+
+ {map(renderTabNav)(tabNav)}
+
+ {tabs[tab]}
);
};
diff --git a/src/v2/components/Programs/Detail/styles.js b/src/v2/components/Programs/Detail/styles.js
index c6ae70a8..a49a4fd1 100644
--- a/src/v2/components/Programs/Detail/styles.js
+++ b/src/v2/components/Programs/Detail/styles.js
@@ -41,4 +41,7 @@ export default makeStyles(theme => ({
indicator: {
display: 'none',
},
+ loader: {
+ marginTop: 40,
+ },
}));
diff --git a/src/v2/stores/programs/detail.js b/src/v2/stores/programs/detail.js
index 885ea1bf..9a5af1a7 100644
--- a/src/v2/stores/programs/detail.js
+++ b/src/v2/stores/programs/detail.js
@@ -1,8 +1,14 @@
import {action, flow, observable, decorate} from 'mobx';
import {apiGetProgramDetail} from 'v2/api/programs';
+import {LAMPORT_SOL_RATIO} from 'v2/constants';
+
+const extendAccountInfo = (account = {}) => ({
+ ...account,
+ balance: ((account.lamports || 0) * LAMPORT_SOL_RATIO).toFixed(8),
+});
class Store {
- isLoading = false;
+ isLoading = true;
programId = null;
programView = {};
accountInfo = {};
@@ -13,16 +19,13 @@ class Store {
this.setLoading(true);
this.programId = programId;
- if (this.accountInfo.pubkey) {
- return this.accountInfo;
- }
-
const res = yield apiGetProgramDetail({programId});
+ const {accountInfo, programAccounts, timestamp} = res.data;
this.programView = res.data;
- this.accountInfo = res.data.accountInfo;
- this.programAccounts.replace(res.data.programAccounts);
- this.timestamp = res.data.timestamp;
+ this.accountInfo = extendAccountInfo(accountInfo);
+ this.programAccounts.replace(programAccounts);
+ this.timestamp = timestamp;
this.setLoading(false);
return res;
@@ -35,6 +38,7 @@ class Store {
decorate(Store, {
setLoading: action.bound,
+ init: action.bound,
isLoading: observable,
accountInfo: observable,
programAccounts: observable,