From bfb5a73ed258c795ef9fe082cf2b6cfd93e93980 Mon Sep 17 00:00:00 2001 From: Jack Wilburn Date: Thu, 15 Dec 2022 14:13:30 -0700 Subject: [PATCH 01/20] Add pinia, remove vuex --- package.json | 3 +-- yarn.lock | 44 +++++++++++++++++++------------------------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 7f5b65f7..26cace11 100644 --- a/package.json +++ b/package.json @@ -26,15 +26,14 @@ "d3-scale": "^3.2.3", "d3-scale-chromatic": "^2.0.0", "d3-selection": "^2.0.0", - "direct-vuex": "^0.12.0", "eslint-import-resolver-alias": "^1.1.2", "multinet": "^0.21.4", "multinet-components": "^0.0.1", + "pinia": "^2.0.28", "unplugin-vue-components": "^0.22.12", "vite": "^4.0.1", "vue": "^2.7.0", "vuetify": "^2.6.10", - "vuex": "^3.5.1", "yorkie": "^2.0.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 42bb5c88..90e35923 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2950,6 +2950,11 @@ postcss "^8.4.14" source-map "^0.6.1" +"@vue/devtools-api@^6.4.5": + version "6.4.5" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.4.5.tgz#d54e844c1adbb1e677c81c665ecef1a2b4bb8380" + integrity sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ== + "@vue/eslint-config-airbnb@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@vue/eslint-config-airbnb/-/eslint-config-airbnb-7.0.0.tgz#eb61c44f96ce17b57dd866a4086bdf757c869e40" @@ -3136,7 +3141,7 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -3146,11 +3151,6 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.7.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" @@ -5247,11 +5247,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -direct-vuex@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/direct-vuex/-/direct-vuex-0.12.0.tgz#aba06acc5def3c5cd8e26b6dabb0557e9d074ddf" - integrity sha512-yhIlQl9nfKtP55ZEomljcEsxq9rWWc6Fo/DhuU2SIN24qIa4VfTY1dcCAAOQrYdZt4+id5hHjWMdDFa0BDGgSw== - django-s3-file-field@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/django-s3-file-field/-/django-s3-file-field-0.1.2.tgz#eeee3c4fcc9debca1c07f800d175fd8e559c076f" @@ -5937,15 +5932,6 @@ eslint@8: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - espree@^9.0.0, espree@^9.4.0: version "9.4.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" @@ -9153,6 +9139,14 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinia@^2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.28.tgz#887c982d854972042d9bdfd5bc4fad3b9d6ab02a" + integrity sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw== + dependencies: + "@vue/devtools-api" "^6.4.5" + vue-demi "*" + pirates@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -11500,6 +11494,11 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vue-demi@*: + version "0.13.11" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" + integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== + vue-eslint-parser@^7.10.0: version "7.11.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf" @@ -11573,11 +11572,6 @@ vuetify@^2.6.10: resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.6.10.tgz#b86cd7a97bf8cd3828a72c349795b5b3c539ebc2" integrity sha512-fgUeRDDCwYkwu6WGEEKGe7IdfzOsXJCZGrqkn1pcS2ycuoDL8mR2/dejH5iFNnBY6MnsT365PAGn0J+9otjfQg== -vuex@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" - integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw== - warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" From d6b2b57ed6bf89320254a2336bbe8886e64dc0d6 Mon Sep 17 00:00:00 2001 From: Jack Wilburn Date: Thu, 15 Dec 2022 14:15:50 -0700 Subject: [PATCH 02/20] Add pinia to our vue app --- src/main.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main.ts b/src/main.ts index 4bb0f7ff..36442fc2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,14 +3,19 @@ import App from '@/App.vue'; import vuetify from '@/plugins/vuetify'; import api from '@/api'; import oauthClient from '@/oauth'; +import { createPinia, PiniaVuePlugin } from 'pinia'; Vue.config.productionTip = false; +Vue.use(PiniaVuePlugin); +const pinia = createPinia(); + oauthClient.maybeRestoreLogin().then(() => { Object.assign(api.axios.defaults.headers.common, oauthClient.authHeaders); new Vue({ vuetify, + pinia, render: (h) => h(App), }).$mount('#app'); }); From 1a102eccba7fb5d4ff98b5b0520df4cfc93d57e1 Mon Sep 17 00:00:00 2001 From: Jack Wilburn Date: Thu, 15 Dec 2022 14:54:22 -0700 Subject: [PATCH 03/20] Fix on commit linting --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 26cace11..3e476676 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "serve": "vite --host 0.0.0.0 --port 8080", "build": "vite build", "lint": "eslint --ext .ts,.vue --ignore-path .gitignore --no-fix src", + "lint:file": "eslint --ext .ts,.vue --ignore-path .gitignore --no-fix", "lint:fix": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src" }, "dependencies": { @@ -61,10 +62,10 @@ }, "lint-staged": { "*.ts": [ - "yarn lint" + "yarn lint:file" ], "*.vue": [ - "yarn lint" + "yarn lint:file" ] } } From ad2d36f28606fd1f761126a04fbaaeeb48c0d969 Mon Sep 17 00:00:00 2001 From: Jack Wilburn Date: Fri, 16 Dec 2022 14:18:28 -0700 Subject: [PATCH 04/20] Migrate some components to use pinia store --- src/App.vue | 34 +++++++---- src/components/ControlPanel.vue | 101 +++++++++----------------------- src/components/LegendChart.vue | 52 +++++++++------- src/components/LegendPanel.vue | 36 +++++------- 4 files changed, 97 insertions(+), 126 deletions(-) diff --git a/src/App.vue b/src/App.vue index 1d844356..485c11ef 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,21 +1,31 @@ @@ -25,13 +35,13 @@ store.dispatch.fetchNetwork({ - + - + diff --git a/src/components/ControlPanel.vue b/src/components/ControlPanel.vue index b8ffbd74..1547da09 100644 --- a/src/components/ControlPanel.vue +++ b/src/components/ControlPanel.vue @@ -4,14 +4,30 @@ import { computed, Ref, ref } from 'vue'; import LegendPanel from '@/components/LegendPanel.vue'; import AboutDialog from '@/components/AboutDialog.vue'; -import store from '@/store'; +import { useStore } from '@/store/index'; import { internalFieldNames } from '@/types'; import oauthClient from '@/oauth'; +import { storeToRefs } from 'pinia'; + +const store = useStore(); +const { + displayCharts, + layoutVars, + fontSize, + labelVariable, + selectNeighbors, + directionalEdges, + edgeLength, + controlsWidth, + simulationRunning, + columnTypes, + network, + selectedNodes, +} = storeToRefs(store); const searchTerm = ref(''); const searchErrors: Ref = ref([]); const showMenu = ref(false); -const network = computed(() => store.state.network); const multiVariableList = computed(() => { if (network.value !== null) { @@ -30,73 +46,14 @@ const multiVariableList = computed(() => { return new Set(); }); -const displayCharts = computed({ - get() { - return store.state.displayCharts; - }, - set(value: boolean) { - return store.commit.setDisplayCharts(value); - }, -}); - -const layoutVars = computed(() => store.state.layoutVars); const markerSize = computed({ get() { - return store.state.markerSize || 0; + return store.markerSize || 0; }, set(value: number) { - store.commit.setMarkerSize({ markerSize: value, updateProv: false }); + store.setMarkerSize({ markerSize: value, updateProv: false }); }, }); - -const fontSize = computed({ - get() { - return store.state.fontSize || 0; - }, - set(value: number) { - store.commit.setFontSize({ fontSize: value, updateProv: false }); - }, -}); - -const labelVariable = computed({ - get() { - return store.state.labelVariable; - }, - set(value: string | undefined) { - store.commit.setLabelVariable(value); - }, -}); - -const selectNeighbors = computed({ - get() { - return store.state.selectNeighbors; - }, - set(value: boolean) { - store.commit.setSelectNeighbors(value); - }, -}); - -const directionalEdges = computed({ - get() { - return store.state.directionalEdges; - }, - set(value: boolean) { - store.commit.setDirectionalEdges(value); - }, -}); - -const edgeLength = computed({ - get() { - return store.state.edgeLength; - }, - set(value: number) { - store.commit.setEdgeLength({ edgeLength: value, updateProv: false }); - }, -}); - -const controlsWidth = computed(() => store.state.controlsWidth); -const simulationRunning = computed(() => store.state.simulationRunning); -const columnTypes = computed(() => store.state.columnTypes); const autocompleteItems = computed(() => { if (network.value !== null && labelVariable.value !== undefined) { return network.value.nodes.map((node) => (node[labelVariable.value || ''])); @@ -130,7 +87,7 @@ function exportNetwork() { type: 'text/json', }), ); - a.download = `${store.state.networkName}.json`; + a.download = `${store.networkName}.json`; a.click(); } @@ -142,7 +99,7 @@ function search() { .map((node) => node._id); if (nodeIDsToSelect.length > 0) { - store.commit.addSelectedNode(nodeIDsToSelect); + selectedNodes.value.add(nodeIDsToSelect); } else { searchErrors.value.push('Enter a valid node to search'); } @@ -151,15 +108,15 @@ function search() { function updateSliderProv(value: number, type: 'markerSize' | 'fontSize' | 'edgeLength') { if (type === 'markerSize') { - store.commit.setMarkerSize({ markerSize: value, updateProv: true }); + store.setMarkerSize({ markerSize: value, updateProv: true }); } else if (type === 'fontSize') { - store.commit.setFontSize({ fontSize: value, updateProv: true }); + fontSize.value = value; } else if (type === 'edgeLength') { - store.commit.setEdgeLength({ edgeLength: value, updateProv: true }); + store.setEdgeLength({ edgeLength: value, updateProv: true }); } } -const userInfo = computed(() => store.state.userInfo); +const userInfo = computed(() => store.userInfo);