+
+
+ dexorder
+
+
+
-
-
-
+
+
+ {{title}}
+
+
+
@@ -19,21 +28,17 @@ import {timestamp} from "@/misc.js";
import {ShapeType} from "@/charts/shape.js";
import {computed, ref} from "vue";
import {useTheme} from "vuetify";
+import ToolbarButton from "@/components/chart/ToolbarButton.vue";
+
+const props = defineProps(['title', 'icon'])
const s = useStore()
const co = useChartOrderStore()
-const showCancel = ref(false)
-
const theme = useTheme().current
-function cancelOrder() {
- showCancel.value = true
-}
-
-
-function placeOrder() {
-
+function showCorp() {
+ window.open('https://dexorder.trade', 'dexorder')
}
diff --git a/src/components/chart/ToolbarButton.vue b/src/components/chart/ToolbarButton.vue
new file mode 100644
index 0000000..bed88e0
--- /dev/null
+++ b/src/components/chart/ToolbarButton.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index b543f1e..5e407a8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -11,7 +11,7 @@ const routes = [
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
- component: () => import(/* webpackChunkName: "chartorder" */ '@/components/chart/ChartOrderPane.vue'),
+ component: () => import(/* webpackChunkName: "chartorder" */ '@/components/chart/ChartPlaceOrder.vue'),
},
{
path: '/place',
@@ -19,7 +19,7 @@ const routes = [
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
- component: () => import(/* webpackChunkName: "chartorder" */ '@/components/chart/ChartOrderPane.vue'),
+ component: () => import(/* webpackChunkName: "chartorder" */ '@/components/chart/ChartPlaceOrder.vue'),
},
{
path: '/vault',
@@ -27,7 +27,7 @@ const routes = [
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
- component: () => import(/* webpackChunkName: "vaultview" */ '@/views/VaultView.vue'),
+ component: () => import(/* webpackChunkName: "vaultview" */ '@/components/chart/ChartVault.vue'),
},
{
path: '/orders',
@@ -35,13 +35,13 @@ const routes = [
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
- component: () => import(/* webpackChunkName: "ordersview" */ '@/views/OrdersView.vue'),
+ component: () => import(/* webpackChunkName: "ordersview" */ '@/components/chart/ChartOrders.vue'),
},
/*
{
path: '/create',
name: 'Create',
- component: () => import(/!* webpackChunkName: "chartorder" *!/ '@/components/chart/ChartOrderPane.vue'),
+ component: () => import(/!* webpackChunkName: "chartorder" *!/ '@/components/chart/ChartPlaceOrder.vue'),
},
{
path: '/twap',
diff --git a/src/socket.js b/src/socket.js
index d333a6b..840ca90 100644
--- a/src/socket.js
+++ b/src/socket.js
@@ -17,7 +17,7 @@ socket.on('disconnect', () => {
socket.on('p', async (chainId, pool, price) => {
console.log('pool price from message', chainId, pool, price)
const s = useStore()
- if( s.chainId.value !== chainId )
+ if( s.chainId !== chainId )
return
s.poolPrices[[chainId,pool]] = price
})
@@ -29,7 +29,7 @@ socket.on('ohlc', async (chainId, pool, ohlcs) => {
socket.on('vb', async (chainId, vault, balances) => {
const s = useStore()
- if( s.chainId.value !== chainId )
+ if( s.chainId !== chainId )
return
console.log('vb', vault, balances)
s.vaultBalances[vault] = JSON.parse(balances)
@@ -39,7 +39,7 @@ socket.on('vb', async (chainId, vault, balances) => {
socket.on('vaults', (chainId, owner, vaults)=>{
const s = useStore()
console.log('vaults', vaults)
- if( s.chainId.value !== chainId || s.account !== owner )
+ if( s.chainId !== chainId || s.account !== owner )
return
if( vaults.length > s.vaults.length ) {
s.vaults = vaults
@@ -53,7 +53,7 @@ socket.on('vaults', (chainId, owner, vaults)=>{
function handleOrderStatus(chainId, vault, orderIndex, status) {
const s = useStore()
- if( s.chainId.value !== chainId )
+ if( s.chainId !== chainId )
return
// message 'o' is a single order status
const parsed = parseOrderStatus(status);
@@ -74,7 +74,7 @@ socket.on( 'o', handleOrderStatus)
socket.on( 'of', (chainId, vault, orderIndex, filled)=>{
const s = useStore()
- if( s.chainId.value !== chainId )
+ if( s.chainId !== chainId )
return
console.log('of', chainId, vault, orderIndex, filled)
if( !(vault in s.orders) ) {
diff --git a/src/store/store.js b/src/store/store.js
index 52f6fa8..d8e21d5 100644
--- a/src/store/store.js
+++ b/src/store/store.js
@@ -3,6 +3,8 @@ import {defineStore} from 'pinia'
import {knownTokens} from "@/knownTokens.js";
import {computed, ref} from "vue";
import {version} from "@/version.js";
+import {ethers} from "ethers";
+import {updateAccounts} from "@/blockchain/wallet.js";
// USING THE STORE:
//
@@ -31,11 +33,15 @@ function timestamp() {
return Math.round(new Date().getTime() / 1000)
}
+
+const UNKNOWN_PROVIDER = {}
+
+
export const useStore = defineStore('app', ()=> {
const clock = ref(timestamp())
const nav = ref(false) // controls opening navigation drawer
- const _chainId = ref(Object.keys(version.chainInfo)[0])
+ const _chainId = ref(Number(Object.keys(version.chainInfo)[0]))
const _chainInfo = ref(version.chainInfo)
function getTokenList() {
@@ -54,25 +60,42 @@ export const useStore = defineStore('app', ()=> {
result[token.address] = token
return result
}
- function refreshChain() {
- useOrderStore().setDefaultTokens(getTokenList())
- }
const chainId = computed({
- get() {return _chainId},
- set(v) {_chainId.value=v; refreshChain()}
+ get() {return _chainId.value},
+ set(v) {
+ console.log('setting chainid',_chainId.value, v)
+ if (_chainId.value!==v) {
+ console.log('do set')
+ _chainId.value = v
+ account.value = null
+ }
+ if (_chainId.value!==v || _provider.value === null) {
+ console.log('update provider')
+ _provider.value = UNKNOWN_PROVIDER
+ }
+ }
})
const chainInfo = computed({
- get() {return _chainInfo},
- set(v) {_chainInfo.value=v; refreshChain()}
+ get() {return _chainInfo.value},
+ set(v) {_chainInfo.value=v}
})
const chain = computed(() => !_chainId.value ? null : (_chainInfo.value[_chainId.value] || null))
- // making the provider directly reactive causes exceptions (calling private method...) when calling provider
- // functions, so we use a separate ref to signal changes
- let _provider = null
- const _providerTouch = ref(false)
- const provider = computed({
- get() {_providerTouch.value; return _provider},
- set(v) {_provider=v; _providerTouch.value = !_providerTouch.value}
+ // this provider is for the app's chainId not the wallet's chainId.
+ let _provider = UNKNOWN_PROVIDER // null indicates a known-unavailable provider whereas undefined means provider status is unknown
+ const provider = computed(()=>{
+ if (_provider===UNKNOWN_PROVIDER) {
+ // unknown provider status
+ try {
+ _provider = new ethers.BrowserProvider(window.ethereum, _chainId.value);
+ updateAccounts(_chainId.value, _provider)
+ }
+ catch (e) {
+ console.error('could not get provider', _chainId.value, e)
+ _provider = null
+ }
+ }
+ // if _provider is null then it is known to be an unavailable chain
+ return _provider
})
const vaultInitCodeHash = computed(() => !chain.value ? null : chain.value.vaultInitCodeHash)
const account = ref(null)
diff --git a/src/styles/style.scss b/src/styles/style.scss
index 156252a..b87e785 100644
--- a/src/styles/style.scss
+++ b/src/styles/style.scss
@@ -7,6 +7,12 @@
font-size: 24px;
}
+ .title {
+ font-family: v.$heading-font-family;
+ font-weight: 500;
+ font-size: 21px;
+ }
+
.clickable {
:hover {
cursor: pointer;
diff --git a/src/version.js b/src/version.js
index 06116e2..aa7b299 100644
--- a/src/version.js
+++ b/src/version.js
@@ -25,6 +25,6 @@ for (const [chain, info] of Object.entries(metadata)) {
map[poolMeta.a] = poolMeta
for (const tokenMeta of info.t)
map[tokenMeta.a] = tokenMeta
- metadataMap[chain] = map
+ metadataMap[Number(chain)] = map
}
console.log('metadataMap', metadataMap)
diff --git a/src/views/VaultView.vue b/src/views/VaultView.vue
index 21c1c9c..3f68fd8 100644
--- a/src/views/VaultView.vue
+++ b/src/views/VaultView.vue
@@ -1,8 +1,11 @@
-
-
-
+
+
+
+
+
+
@@ -14,6 +17,7 @@ import NeedsSigner from "@/components/NeedsSigner.vue";
import Faucet from "@/components/Faucet.vue";
import NeedsProvider from "@/components/NeedsProvider.vue";
import NewOrder from "@/components/NewOrder.vue";
+import PhoneCard from "@/components/PhoneCard.vue";
const s = useStore()