From 8b462d91512866fa04222befa9fb93966c0ddc8f Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 08:19:10 -0400 Subject: [PATCH 01/21] Initial pinia addition --- client/package.json | 1 + client/yarn.lock | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/client/package.json b/client/package.json index bac4e937718..2d9ef77b1ac 100644 --- a/client/package.json +++ b/client/package.json @@ -66,6 +66,7 @@ "markdown-it": "^12.3.2", "markdown-it-regexp": "^0.4.0", "object-hash": "^3.0.0", + "pinia": "^2.0.17", "popper.js": "^1.16.1", "pretty-bytes": "^6.0.0", "pyre-to-regexp": "^0.0.5", diff --git a/client/yarn.lock b/client/yarn.lock index 2a9e06df4fb..06b3267b929 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1981,6 +1981,11 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" +"@vue/devtools-api@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" + integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== + "@vue/test-utils@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15" @@ -7737,6 +7742,14 @@ pikaday@1.5.1: optionalDependencies: moment "2.x" +pinia@^2.0.17: + version "2.0.17" + resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.17.tgz#f925e5e4f73c15e16dfb4838176a9ca50752f26b" + integrity sha512-AtwLwEWQgIjofjgeFT+nxbnK5lT2QwQjaHNEDqpsi2AiCwf/NY78uWTeHUyEhiiJy8+sBmw0ujgQMoQbWiZDfA== + dependencies: + "@vue/devtools-api" "^6.2.1" + vue-demi "*" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -9935,6 +9948,11 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +vue-demi@*: + version "0.13.6" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.6.tgz#f9433cbd75e68a970dec066647f4ba6c08ced48f" + integrity sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ== + vue-eslint-parser@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz#0c17a89e0932cc94fa6a79f0726697e13bfe3c96" From 2e59be6befa06e4243af89607f3abf19481c1dab Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 15:18:15 -0400 Subject: [PATCH 02/21] Add @vue/composition-api --- client/package.json | 1 + client/yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/client/package.json b/client/package.json index 2d9ef77b1ac..5e1fb4d912c 100644 --- a/client/package.json +++ b/client/package.json @@ -33,6 +33,7 @@ "@johmun/vue-tags-input": "^2.1.0", "@popperjs/core": "^2.11.5", "@sentry/browser": "^6.17.4", + "@vue/composition-api": "^1.7.0", "assert": "^2.0.0", "axios": "^0.25.0", "babel-runtime": "^6.26.0", diff --git a/client/yarn.lock b/client/yarn.lock index 06b3267b929..7d045cd07c9 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1981,6 +1981,11 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" +"@vue/composition-api@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.7.0.tgz#26fae79e5023fc6c9dfd99ca5d3d357e1c5b9c60" + integrity sha512-hxOgLYR+wjuPX9bkP2pAPlqUs98XxBoa9DSLyp1z6+YR92wC42PZcZKs4d+VRtcv4udOv041Kss+F6ap5nj8YA== + "@vue/devtools-api@^6.2.1": version "6.2.1" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" From e394cdf65ecb3d115eb21d539777778c3cde9e1c Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 15:18:30 -0400 Subject: [PATCH 03/21] Test conversion of dbKeyStore to pinia --- .../components/providers/storeProviders.js | 11 +++--- client/src/store/dbKeyStore.js | 34 ------------------- client/src/store/index.js | 2 -- client/src/stores/dbKeyStore.js | 23 +++++++++++++ 4 files changed, 30 insertions(+), 40 deletions(-) delete mode 100644 client/src/store/dbKeyStore.js create mode 100644 client/src/stores/dbKeyStore.js diff --git a/client/src/components/providers/storeProviders.js b/client/src/components/providers/storeProviders.js index 441daa77272..3cc1c2f2b64 100644 --- a/client/src/components/providers/storeProviders.js +++ b/client/src/components/providers/storeProviders.js @@ -1,10 +1,13 @@ // Simple dataset provider, looks at api for result, renders to slot prop import axios from "axios"; import { prependPath } from "utils/redirect"; -import { mapActions, mapGetters } from "vuex"; +import { mapActions as vuexMapActions, mapGetters } from "vuex"; import { mapCacheActions } from "vuex-cache"; import { HasAttributesMixin } from "./utils"; +import { useDbKeyStore } from "stores/dbKeyStore"; +import { mapActions, mapState } from "pinia"; + export const SimpleProviderMixin = { props: { id: { type: String, required: true }, @@ -57,7 +60,7 @@ export const DbKeyProvider = { await this.load(); }, methods: { - ...mapCacheActions(["fetchUploadDbKeys"]), + ...mapActions(useDbKeyStore, ["fetchUploadDbKeys"]), async load() { this.loading = true; let dbKeys = this.getUploadDbKeys(); @@ -70,7 +73,7 @@ export const DbKeyProvider = { }, }, computed: { - ...mapGetters(["getUploadDbKeys"]), + ...mapState(useDbKeyStore, ["uploadDbKeys"]), }, }; @@ -171,7 +174,7 @@ export const StoreProvider = (storeAction, storeGetter, storeCountGetter = undef }); }, methods: { - ...mapActions([storeAction]), + ...vuexMapActions([storeAction]), async load() { this.loading = true; try { diff --git a/client/src/store/dbKeyStore.js b/client/src/store/dbKeyStore.js deleted file mode 100644 index b6882ee5b92..00000000000 --- a/client/src/store/dbKeyStore.js +++ /dev/null @@ -1,34 +0,0 @@ -export const state = { - uploadDbKeys: [], -}; -import UploadUtils from "mvc/upload/upload-utils"; - -const getters = { - getUploadDbKeys: (state) => () => { - return state.uploadDbKeys; - }, -}; - -const actions = { - fetchUploadDbKeys: async ({ commit }) => { - try { - const data = await UploadUtils.getUploadDbKeys(UploadUtils.DEFAULT_DBKEY); - commit("saveUploadDbKeys", { dbKeys: data }); - } catch (err) { - console.log("Error: unable to load Database/Builds", err); - } - }, -}; - -const mutations = { - saveUploadDbKeys: (state, { dbKeys }) => { - state.uploadDbKeys = dbKeys; - }, -}; - -export const dbKeyStore = { - state, - getters, - actions, - mutations, -}; diff --git a/client/src/store/index.js b/client/src/store/index.js index bb9dc60f12e..e3174cbbe51 100644 --- a/client/src/store/index.js +++ b/client/src/store/index.js @@ -24,7 +24,6 @@ import { datasetPathDestinationStore } from "./datasetPathDestinationStore"; import { datasetExtFilesStore } from "./datasetExtFilesStore"; import { jobStore } from "./jobStore"; import { collectionAttributesStore } from "./collectionAttributesStore"; -import { dbKeyStore } from "./dbKeyStore"; import { datatypeStore } from "./datatypeStore"; import { panelStore } from "./panelStore"; @@ -69,7 +68,6 @@ export function createStore() { informationStore: jobStore, invocations: invocationStore, jobMetrics: jobMetricsStore, - dbkeyStore: dbKeyStore, gridSearch: gridSearchStore, history: historyStore, historyItems: historyItemsStore, diff --git a/client/src/stores/dbKeyStore.js b/client/src/stores/dbKeyStore.js new file mode 100644 index 00000000000..ef1c53143e5 --- /dev/null +++ b/client/src/stores/dbKeyStore.js @@ -0,0 +1,23 @@ +import { defineStore } from "pinia"; +import UploadUtils from "mvc/upload/upload-utils"; + +export const useDbKeyStore = defineStore(" dbKeyStore", { + state: () => ({ + uploadDbKeys: [], + }), + getters: { + getUploadDbKeys: (state) => { + return state.uploadDbKeys; + }, + }, + actions: { + async fetchUploadDbKeys() { + try { + const data = await UploadUtils.getUploadDbKeys(UploadUtils.DEFAULT_DBKEY); + this.uploadDbKeys = data; + } catch (err) { + console.log("Error: unable to load Database/Builds", err); + } + }, + }, +}); From eb9fce81d92ce3574c924eb0e0f7a54db625add5 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 15:37:24 -0400 Subject: [PATCH 04/21] Strap pinia onto app entrypoint --- client/src/entry/analysis/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/src/entry/analysis/index.js b/client/src/entry/analysis/index.js index 31d03a70596..29a8f2ea5d4 100644 --- a/client/src/entry/analysis/index.js +++ b/client/src/entry/analysis/index.js @@ -4,6 +4,10 @@ import Vue, { provide } from "vue"; import App from "./App.vue"; import store from "store"; import { getRouter } from "./router"; +import { createPinia, PiniaVuePlugin } from "pinia"; + +Vue.use(PiniaVuePlugin); +const pinia = createPinia(); addInitialization((Galaxy) => { console.log("App setup"); @@ -16,6 +20,7 @@ addInitialization((Galaxy) => { }, router: router, store: store, + pinia: pinia, }); }); From 76b46a9b5660bf57308274611f8cd140fa2c16b7 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 15:39:05 -0400 Subject: [PATCH 05/21] Adjust access to state from DbKeyProvider --- client/src/components/providers/storeProviders.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/components/providers/storeProviders.js b/client/src/components/providers/storeProviders.js index 3cc1c2f2b64..72c9441de08 100644 --- a/client/src/components/providers/storeProviders.js +++ b/client/src/components/providers/storeProviders.js @@ -63,17 +63,17 @@ export const DbKeyProvider = { ...mapActions(useDbKeyStore, ["fetchUploadDbKeys"]), async load() { this.loading = true; - let dbKeys = this.getUploadDbKeys(); + let dbKeys = this.getUploadDbKeys; if (dbKeys == null || dbKeys.length == 0) { await this.fetchUploadDbKeys(); - dbKeys = this.getUploadDbKeys(); + dbKeys = this.getUploadDbKeys; } this.item = dbKeys; this.loading = false; }, }, computed: { - ...mapState(useDbKeyStore, ["uploadDbKeys"]), + ...mapState(useDbKeyStore, ["getUploadDbKeys"]), }, }; From 7594581cb72219567ad68cd5fca8437bbb643e84 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 15:49:28 -0400 Subject: [PATCH 06/21] Typo in store name --- client/src/stores/dbKeyStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/stores/dbKeyStore.js b/client/src/stores/dbKeyStore.js index ef1c53143e5..1dadf6d0c28 100644 --- a/client/src/stores/dbKeyStore.js +++ b/client/src/stores/dbKeyStore.js @@ -1,7 +1,7 @@ import { defineStore } from "pinia"; import UploadUtils from "mvc/upload/upload-utils"; -export const useDbKeyStore = defineStore(" dbKeyStore", { +export const useDbKeyStore = defineStore("dbKeyStore", { state: () => ({ uploadDbKeys: [], }), From 87f1f9547e9a835859bd0b8c5c6280bb36a88faa Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 27 Jul 2022 16:13:17 -0400 Subject: [PATCH 07/21] Convert datatypeStore over to pinia --- .../components/providers/storeProviders.js | 9 ++--- client/src/store/datatypeStore.js | 34 ------------------- client/src/store/index.js | 2 -- client/src/stores/datatypeStore.js | 23 +++++++++++++ 4 files changed, 28 insertions(+), 40 deletions(-) delete mode 100644 client/src/store/datatypeStore.js create mode 100644 client/src/stores/datatypeStore.js diff --git a/client/src/components/providers/storeProviders.js b/client/src/components/providers/storeProviders.js index 72c9441de08..a35255b2006 100644 --- a/client/src/components/providers/storeProviders.js +++ b/client/src/components/providers/storeProviders.js @@ -7,6 +7,7 @@ import { HasAttributesMixin } from "./utils"; import { useDbKeyStore } from "stores/dbKeyStore"; import { mapActions, mapState } from "pinia"; +import { useDatatypeStore } from "../../stores/datatypeStore"; export const SimpleProviderMixin = { props: { @@ -86,20 +87,20 @@ export const DatatypesProvider = { await this.load(); }, methods: { - ...mapCacheActions(["fetchUploadDatatypes"]), + ...mapActions(useDatatypeStore, ["fetchUploadDatatypes"]), async load() { this.loading = true; - let datatypes = this.getUploadDatatypes(); + let datatypes = this.getUploadDatatypes; if (datatypes == null || datatypes.length == 0) { await this.fetchUploadDatatypes(); - datatypes = this.getUploadDatatypes(); + datatypes = this.getUploadDatatypes; } this.item = datatypes; this.loading = false; }, }, computed: { - ...mapGetters(["getUploadDatatypes"]), + ...mapState(useDatatypeStore, ["getUploadDatatypes"]), }, }; diff --git a/client/src/store/datatypeStore.js b/client/src/store/datatypeStore.js deleted file mode 100644 index 85dadbd4e3d..00000000000 --- a/client/src/store/datatypeStore.js +++ /dev/null @@ -1,34 +0,0 @@ -export const state = { - uploadDatatypes: [], -}; -import UploadUtils from "mvc/upload/upload-utils"; - -const getters = { - getUploadDatatypes: (state) => () => { - return state.uploadDatatypes; - }, -}; - -const actions = { - fetchUploadDatatypes: async ({ commit }) => { - try { - const data = await UploadUtils.getUploadDatatypes(false, UploadUtils.AUTO_EXTENSION); - commit("saveUploadDatatypes", { datatypes: data }); - } catch (err) { - console.log("Error: unable to load datatypes", err); - } - }, -}; - -const mutations = { - saveUploadDatatypes: (state, { datatypes }) => { - state.uploadDatatypes = datatypes; - }, -}; - -export const datatypeStore = { - state, - getters, - actions, - mutations, -}; diff --git a/client/src/store/index.js b/client/src/store/index.js index e3174cbbe51..d121a7065da 100644 --- a/client/src/store/index.js +++ b/client/src/store/index.js @@ -24,7 +24,6 @@ import { datasetPathDestinationStore } from "./datasetPathDestinationStore"; import { datasetExtFilesStore } from "./datasetExtFilesStore"; import { jobStore } from "./jobStore"; import { collectionAttributesStore } from "./collectionAttributesStore"; -import { datatypeStore } from "./datatypeStore"; import { panelStore } from "./panelStore"; // Syncs vuex to Galaxy store until Galaxy vals to not exist @@ -64,7 +63,6 @@ export function createStore() { dataset: datasetStore, datasetExtFiles: datasetExtFilesStore, datasetPathDestination: datasetPathDestinationStore, - datatypeStore: datatypeStore, informationStore: jobStore, invocations: invocationStore, jobMetrics: jobMetricsStore, diff --git a/client/src/stores/datatypeStore.js b/client/src/stores/datatypeStore.js new file mode 100644 index 00000000000..e785e35f848 --- /dev/null +++ b/client/src/stores/datatypeStore.js @@ -0,0 +1,23 @@ +import { defineStore } from "pinia"; +import UploadUtils from "mvc/upload/upload-utils"; + +export const useDatatypeStore = defineStore("datatypeStore", { + state: () => ({ + uploadDatatypes: [], + }), + getters: { + getUploadDatatypes: (state) => { + return state.uploadDatatypes; + }, + }, + actions: { + async fetchUploadDatatypes() { + try { + const data = await UploadUtils.getUploadDatatypes(false, UploadUtils.AUTO_EXTENSION); + this.uploadDatatypes = data; + } catch (err) { + console.log("Error: unable to load datatypes", err); + } + }, + }, +}); From 3bf4ff89f40832e230c812e60f2b529b7a649bcf Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Thu, 28 Jul 2022 10:43:24 -0400 Subject: [PATCH 08/21] First pass at pinia workflow store; need to fix getters still --- .../src/components/Workflow/Invocations.vue | 11 +++-- .../WorkflowInvocationDetails.vue | 8 ++-- .../components/providers/storeProviders.js | 1 - client/src/store/index.js | 2 - client/src/store/workflowStore.js | 46 ------------------- client/src/stores/workflowStore.js | 38 +++++++++++++++ 6 files changed, 49 insertions(+), 57 deletions(-) delete mode 100644 client/src/store/workflowStore.js create mode 100644 client/src/stores/workflowStore.js diff --git a/client/src/components/Workflow/Invocations.vue b/client/src/components/Workflow/Invocations.vue index 6b010de3d4d..429f7fdcfa1 100644 --- a/client/src/components/Workflow/Invocations.vue +++ b/client/src/components/Workflow/Invocations.vue @@ -80,14 +80,17 @@ diff --git a/client/src/components/admin/ActiveInvocations.vue b/client/src/components/admin/ActiveInvocations.vue index eedb0558e59..6da88975276 100644 --- a/client/src/components/admin/ActiveInvocations.vue +++ b/client/src/components/admin/ActiveInvocations.vue @@ -1,17 +1,17 @@ From 4f0894768fb8fa06bb3d115c4d65efa33451ed00 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Thu, 28 Jul 2022 12:30:59 -0400 Subject: [PATCH 10/21] Standardize InvocationsList PascalCase usage. --- client/src/components/admin/ActiveInvocations.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/components/admin/ActiveInvocations.vue b/client/src/components/admin/ActiveInvocations.vue index 6da88975276..c94b30fbf2e 100644 --- a/client/src/components/admin/ActiveInvocations.vue +++ b/client/src/components/admin/ActiveInvocations.vue @@ -1,9 +1,9 @@ From 70ace727f9dee94925ca8c872a2dfb1292de72ad Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 16 Nov 2022 16:56:59 -0500 Subject: [PATCH 20/21] Fix computed access --- .../WorkflowInvocationDetails.vue | 79 ++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue b/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue index 2b7802eb07c..35667b4c6ed 100644 --- a/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue +++ b/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue @@ -1,3 +1,45 @@ + - From edf7588d7d96f244a3e828b8e9744cd5d2dec361 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 16 Nov 2022 20:27:39 -0500 Subject: [PATCH 21/21] Fix reactivity in WorkflowInvocationState, only fetch on mounted if it's not already in the store. --- .../WorkflowInvocationDetails.vue | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue b/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue index 35667b4c6ed..fcf9af8baba 100644 --- a/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue +++ b/client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue @@ -1,6 +1,5 @@