mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-31 02:28:09 +08:00
Merge pull request #10637 from assuntad23/bugfix/SavedRulesSelectorIssues
Fix saving rule builder rules when uploading in rule editing view
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<script>
|
||||
import { getGalaxyInstance } from "app";
|
||||
export default {
|
||||
data: function () {
|
||||
return {
|
||||
savedRules: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
let counter = 0;
|
||||
if (this.user == null) {
|
||||
return;
|
||||
} else {
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
if (localStorage.key(i).startsWith(this.prefix + this.user)) {
|
||||
var savedSession = localStorage.getItem(localStorage.key(i));
|
||||
if (savedSession) {
|
||||
var key = localStorage.key(i);
|
||||
this.savedRules.push({
|
||||
dateTime: key.substring(this.prefix.length + this.user.length),
|
||||
rule: savedSession,
|
||||
});
|
||||
}
|
||||
counter++;
|
||||
if (counter == 10) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
prefix: {
|
||||
type: String,
|
||||
default: "galaxy_rules_",
|
||||
},
|
||||
user: {
|
||||
type: String,
|
||||
default: getGalaxyInstance() ? getGalaxyInstance().user.id : "",
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
saveSession(jsonRulesString) {
|
||||
var dateTimeString = new Date().toISOString();
|
||||
var key = this.prefix + this.user + dateTimeString;
|
||||
localStorage.setItem(key, jsonRulesString);
|
||||
this.savedRules.push({
|
||||
dateTime: dateTimeString,
|
||||
rule: jsonRulesString,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -12,6 +12,7 @@ describe("SavedRulesSelector", () => {
|
||||
propsData: {
|
||||
// Add a unique prefix for this test run so the test is not affected by local storage values
|
||||
prefix: "test_prefix_" + new Date().toISOString() + "_",
|
||||
savedRules: [],
|
||||
},
|
||||
attachTo: getNewAttachNode(),
|
||||
});
|
||||
@@ -19,8 +20,6 @@ describe("SavedRulesSelector", () => {
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
wrapper.savedRules = [];
|
||||
|
||||
await Vue.nextTick();
|
||||
});
|
||||
|
||||
@@ -30,7 +29,6 @@ describe("SavedRulesSelector", () => {
|
||||
});
|
||||
|
||||
it("should emit a click event when a session is clicked", async () => {
|
||||
wrapper.setProps({ user: "test_user" });
|
||||
const testRules = {
|
||||
rules: [
|
||||
{
|
||||
@@ -47,8 +45,10 @@ describe("SavedRulesSelector", () => {
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
wrapper.vm.saveSession(testRules);
|
||||
wrapper.setProps({
|
||||
user: "test_user",
|
||||
savedRules: [testRules],
|
||||
});
|
||||
await Vue.nextTick();
|
||||
const sessions = wrapper.findAll("div.dropdown-menu > a.saved-rule-item");
|
||||
expect(sessions.length > 0).toBeTruthy();
|
||||
|
||||
@@ -25,47 +25,18 @@ import Vue from "vue";
|
||||
import _l from "utils/localization";
|
||||
import BootstrapVue from "bootstrap-vue";
|
||||
import moment from "moment";
|
||||
import { getGalaxyInstance } from "app";
|
||||
|
||||
Vue.use(BootstrapVue);
|
||||
export default {
|
||||
data: function () {
|
||||
return {
|
||||
savedRulesMenu: _l("Recently used rules"),
|
||||
savedRules: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
let counter = 0;
|
||||
if (this.user == null) {
|
||||
return;
|
||||
} else {
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
if (localStorage.key(i).startsWith(this.prefix + this.user)) {
|
||||
var savedSession = localStorage.getItem(localStorage.key(i));
|
||||
if (savedSession) {
|
||||
var key = localStorage.key(i);
|
||||
this.savedRules.push({
|
||||
dateTime: key.substring(this.prefix.length + this.user.length),
|
||||
rule: savedSession,
|
||||
});
|
||||
}
|
||||
counter++;
|
||||
if (counter == 10) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
prefix: {
|
||||
type: String,
|
||||
default: "galaxy_rules_",
|
||||
},
|
||||
user: {
|
||||
type: String,
|
||||
default: getGalaxyInstance() ? getGalaxyInstance().user.id : "",
|
||||
savedRules: {
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
@@ -77,15 +48,6 @@ export default {
|
||||
formatDate(dateTime) {
|
||||
return moment.utc(dateTime).from(moment().utc());
|
||||
},
|
||||
saveSession(jsonRulesString) {
|
||||
var dateTimeString = new Date().toISOString();
|
||||
var key = this.prefix + this.user + dateTimeString;
|
||||
localStorage.setItem(key, jsonRulesString);
|
||||
this.savedRules.push({
|
||||
dateTime: dateTimeString,
|
||||
rule: jsonRulesString,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -347,7 +347,11 @@
|
||||
:title="titleViewSource"
|
||||
@click="viewSource"
|
||||
></span>
|
||||
<saved-rules-selector ref="savedRulesSelector" @update-rules="restoreRules" />
|
||||
<saved-rules-selector
|
||||
ref="savedRulesSelector"
|
||||
@update-rules="restoreRules"
|
||||
:savedRules="this.savedRules"
|
||||
/>
|
||||
</span>
|
||||
<div v-if="jaggedData" class="rule-warning">
|
||||
Rows contain differing numbers of columns, there was likely a problem parsing your data.
|
||||
@@ -608,6 +612,7 @@ import RuleModalMiddle from "components/RuleBuilder/RuleModalMiddle";
|
||||
import RuleModalFooter from "components/RuleBuilder/RuleModalFooter";
|
||||
import StateDiv from "components/RuleBuilder/StateDiv";
|
||||
import SavedRulesSelector from "components/RuleBuilder/SavedRulesSelector";
|
||||
import SaveRules from "components/RuleBuilder/SaveRules";
|
||||
|
||||
Vue.use(BootstrapVue);
|
||||
|
||||
@@ -1071,6 +1076,7 @@ export default {
|
||||
return this.hotData.colHeadersPerRule;
|
||||
},
|
||||
},
|
||||
mixins: [SaveRules],
|
||||
methods: {
|
||||
restoreRules(event) {
|
||||
const json = JSON.parse(event);
|
||||
@@ -1275,7 +1281,7 @@ export default {
|
||||
this.state = "error";
|
||||
return;
|
||||
}
|
||||
this.$refs.savedRulesSelector.saveSession(JSON.stringify(asJson));
|
||||
this.saveSession(JSON.stringify(asJson));
|
||||
this.state = "wait";
|
||||
const name = this.collectionName;
|
||||
const collectionType = this.collectionType;
|
||||
|
||||
Reference in New Issue
Block a user