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 @@ - +