diff --git a/package.json b/package.json
index a91ce78..299ed2c 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,8 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-vue": "^9.21.1",
+ "mobx": "^6.12.0",
+ "mobx-vue-lite": "^0.4.2",
"postcss": "^8.4.33",
"prettier": "^3.2.4",
"tailwindcss": "^3.4.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 08aeb99..70651c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -55,6 +55,12 @@ devDependencies:
eslint-plugin-vue:
specifier: ^9.21.1
version: 9.21.1(eslint@8.56.0)
+ mobx:
+ specifier: ^6.12.0
+ version: 6.12.0
+ mobx-vue-lite:
+ specifier: ^0.4.2
+ version: 0.4.2(mobx@6.12.0)(vue@3.4.15)
postcss:
specifier: ^8.4.33
version: 8.4.33
@@ -616,6 +622,10 @@ packages:
resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
dev: true
+ /@types/web-bluetooth@0.0.20:
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+ dev: true
+
/@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -982,6 +992,31 @@ packages:
/@vue/shared@3.4.15:
resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==}
+ /@vueuse/core@10.7.2(vue@3.4.15):
+ resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.7.2
+ '@vueuse/shared': 10.7.2(vue@3.4.15)
+ vue-demi: 0.14.7(vue@3.4.15)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: true
+
+ /@vueuse/metadata@10.7.2:
+ resolution: {integrity: sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==}
+ dev: true
+
+ /@vueuse/shared@10.7.2(vue@3.4.15):
+ resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==}
+ dependencies:
+ vue-demi: 0.14.7(vue@3.4.15)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: true
+
/acorn-jsx@5.3.2(acorn@8.11.3):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -2003,6 +2038,23 @@ packages:
ufo: 1.3.2
dev: true
+ /mobx-vue-lite@0.4.2(mobx@6.12.0)(vue@3.4.15):
+ resolution: {integrity: sha512-Xx5blLWvbH8S+XZqBkQ+5RKUyFmtJZ1r//vQo/Npol3h0ByCbCaxRcf2Icnj2CGt8h/9jPdTLjJEkezoo/OHzw==}
+ peerDependencies:
+ mobx: ^6.1.0
+ vue: ^3.2.0
+ dependencies:
+ '@vueuse/core': 10.7.2(vue@3.4.15)
+ mobx: 6.12.0
+ vue: 3.4.15(typescript@5.3.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ dev: true
+
+ /mobx@6.12.0:
+ resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==}
+ dev: true
+
/mrmime@2.0.0:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
@@ -2812,6 +2864,21 @@ packages:
- terser
dev: true
+ /vue-demi@0.14.7(vue@3.4.15):
+ resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.15(typescript@5.3.3)
+ dev: true
+
/vue-eslint-parser@9.4.2(eslint@8.56.0):
resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
engines: {node: ^14.17.0 || >=16.0.0}
diff --git a/src/stores/index.ts b/src/stores/index.ts
new file mode 100644
index 0000000..6dd2ac5
--- /dev/null
+++ b/src/stores/index.ts
@@ -0,0 +1,9 @@
+import { createGlobalObservable, useLocalObservable } from "mobx-vue-lite";
+import { ProposalsStore } from "./proposals";
+
+const useProposalsStore = createGlobalObservable(() =>
+ useLocalObservable(() => {
+ return new ProposalsStore();
+ }),
+);
+export { useProposalsStore };
diff --git a/src/stores/proposals.ts b/src/stores/proposals.ts
new file mode 100644
index 0000000..6536e2c
--- /dev/null
+++ b/src/stores/proposals.ts
@@ -0,0 +1,18 @@
+import { makeAutoObservable } from "mobx";
+
+export class ProposalsStore {
+ proposals = [];
+
+ constructor() {
+ makeAutoObservable(this);
+ }
+
+ async fetchProposals() {
+ //Fetch proposals
+ const props = [];
+ this.setProposals(props);
+ }
+ setProposals(proposals) {
+ this.proposals = proposals;
+ }
+}
diff --git a/src/views/ProposalView.vue b/src/views/ProposalView.vue
index e7d1f3a..7195baf 100644
--- a/src/views/ProposalView.vue
+++ b/src/views/ProposalView.vue
@@ -1,4 +1,8 @@
-
+ {{ route.params.id }}
-
+