mirror of
https://github.com/em-squared/5e-drs.git
synced 2025-10-30 05:04:21 +00:00
set filters store on page load from url params
This commit is contained in:
parent
da1547ab88
commit
f415fa8613
3 changed files with 136 additions and 12 deletions
|
|
@ -70,18 +70,27 @@ export default {
|
||||||
updateClasses: ({ commit }, payload) => {
|
updateClasses: ({ commit }, payload) => {
|
||||||
commit('setClasses', payload)
|
commit('setClasses', payload)
|
||||||
},
|
},
|
||||||
|
updateClassesFromList: ({ commit }, payload) => {
|
||||||
|
commit('setClassesFromList', payload)
|
||||||
|
},
|
||||||
resetClasses: ({ commit }) => {
|
resetClasses: ({ commit }) => {
|
||||||
commit('resetClasses')
|
commit('resetClasses')
|
||||||
},
|
},
|
||||||
updateLevels: ({ commit }, payload) => {
|
updateLevels: ({ commit }, payload) => {
|
||||||
commit('setLevels', payload)
|
commit('setLevels', payload)
|
||||||
},
|
},
|
||||||
|
updateLevelsFromList: ({ commit }, payload) => {
|
||||||
|
commit('setLevelsFromList', payload)
|
||||||
|
},
|
||||||
resetLevels: ({ commit }) => {
|
resetLevels: ({ commit }) => {
|
||||||
commit('resetLevels')
|
commit('resetLevels')
|
||||||
},
|
},
|
||||||
updateSchools: ({ commit }, payload) => {
|
updateSchools: ({ commit }, payload) => {
|
||||||
commit('setSchools', payload)
|
commit('setSchools', payload)
|
||||||
},
|
},
|
||||||
|
updateSchoolsFromLst: ({ commit }, payload) => {
|
||||||
|
commit('setSchoolsFromList', payload)
|
||||||
|
},
|
||||||
resetSchools: ({ commit }) => {
|
resetSchools: ({ commit }) => {
|
||||||
commit('resetSchools')
|
commit('resetSchools')
|
||||||
},
|
},
|
||||||
|
|
@ -109,6 +118,16 @@ export default {
|
||||||
setClasses: (state, payload) => {
|
setClasses: (state, payload) => {
|
||||||
state.classes = payload
|
state.classes = payload
|
||||||
},
|
},
|
||||||
|
setClassesFromList: (state, payload) => {
|
||||||
|
for (let i = 0; i < payload.length; i++) {
|
||||||
|
let idx = state.classes.findIndex(item => {
|
||||||
|
return item.label == payload[i]
|
||||||
|
})
|
||||||
|
if (idx > -1) {
|
||||||
|
state.classes[idx].value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
resetClasses: (state) => {
|
resetClasses: (state) => {
|
||||||
state.classes = [
|
state.classes = [
|
||||||
{ label: "Barde", value: false },
|
{ label: "Barde", value: false },
|
||||||
|
|
@ -125,6 +144,16 @@ export default {
|
||||||
setLevels: (state, payload) => {
|
setLevels: (state, payload) => {
|
||||||
state.levels = payload
|
state.levels = payload
|
||||||
},
|
},
|
||||||
|
setLevelsFromList: (state, payload) => {
|
||||||
|
for (let i = 0; i < payload.length; i++) {
|
||||||
|
let idx = state.levels.findIndex(item => {
|
||||||
|
return item.level == payload[i]
|
||||||
|
})
|
||||||
|
if (idx > -1) {
|
||||||
|
state.levels[idx].value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
resetLevels: (state) => {
|
resetLevels: (state) => {
|
||||||
state.levels = [
|
state.levels = [
|
||||||
{ level: 0, value: false },
|
{ level: 0, value: false },
|
||||||
|
|
@ -142,6 +171,16 @@ export default {
|
||||||
setSchools: (state, payload) => {
|
setSchools: (state, payload) => {
|
||||||
state.schools = payload
|
state.schools = payload
|
||||||
},
|
},
|
||||||
|
setSchoolsFromList: (state, payload) => {
|
||||||
|
for (let i = 0; i < payload.length; i++) {
|
||||||
|
let idx = state.schools.findIndex(item => {
|
||||||
|
return item.label == payload[i]
|
||||||
|
})
|
||||||
|
if (idx > -1) {
|
||||||
|
state.schools[idx].value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
resetSchools: (state) => {
|
resetSchools: (state) => {
|
||||||
state.schools = [
|
state.schools = [
|
||||||
{ label: "Abjuration", value: false },
|
{ label: "Abjuration", value: false },
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
<v-expansion-panel-header>Composantes d'incantation</v-expansion-panel-header>
|
<v-expansion-panel-header>Composantes d'incantation</v-expansion-panel-header>
|
||||||
<v-expansion-panel-content>
|
<v-expansion-panel-content>
|
||||||
<div class="d-flex mt-2 mb-4">
|
<div class="d-flex mt-2 mb-4">
|
||||||
<v-btn-toggle v-model="componentVerbal" dark>
|
<v-btn-toggle v-model="componentVerbal" @change="switchComponentVerbal" dark>
|
||||||
<v-btn :value="true" small :color="setColor(componentVerbal, true, 'green')">
|
<v-btn :value="true" small :color="setColor(componentVerbal, true, 'green')">
|
||||||
<v-icon>mdi-check</v-icon>
|
<v-icon>mdi-check</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -57,7 +57,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex mb-4">
|
<div class="d-flex mb-4">
|
||||||
<v-btn-toggle v-model="componentSomatic" dark>
|
<v-btn-toggle v-model="componentSomatic" @change="switchComponentSomatic" dark>
|
||||||
<v-btn :value="true" small :color="setColor(componentSomatic, true, 'green')">
|
<v-btn :value="true" small :color="setColor(componentSomatic, true, 'green')">
|
||||||
<v-icon>mdi-check</v-icon>
|
<v-icon>mdi-check</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<v-btn-toggle v-model="componentMaterial" dark>
|
<v-btn-toggle v-model="componentMaterial" @change="switchComponentMaterial" dark>
|
||||||
<v-btn :value="true" small :color="setColor(componentMaterial, true, 'green')">
|
<v-btn :value="true" small :color="setColor(componentMaterial, true, 'green')">
|
||||||
<v-icon>mdi-check</v-icon>
|
<v-icon>mdi-check</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
<v-expansion-panel-header>Concentration et Rituel</v-expansion-panel-header>
|
<v-expansion-panel-header>Concentration et Rituel</v-expansion-panel-header>
|
||||||
<v-expansion-panel-content>
|
<v-expansion-panel-content>
|
||||||
<div class="d-flex mt-2 mb-4">
|
<div class="d-flex mt-2 mb-4">
|
||||||
<v-btn-toggle v-model="mustBeConcentration" dark>
|
<v-btn-toggle v-model="mustBeConcentration" @change="switchMustBeConcentration" dark>
|
||||||
<v-btn :value="true" small :color="setColor(mustBeConcentration, true, 'green')">
|
<v-btn :value="true" small :color="setColor(mustBeConcentration, true, 'green')">
|
||||||
<v-icon>mdi-check</v-icon>
|
<v-icon>mdi-check</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -101,7 +101,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<v-btn-toggle v-model="mustBeRitual" dark>
|
<v-btn-toggle v-model="mustBeRitual" @change="switchMustBeRitual" dark>
|
||||||
<v-btn :value="true" small :color="setColor(mustBeRitual, true, 'green')">
|
<v-btn :value="true" small :color="setColor(mustBeRitual, true, 'green')">
|
||||||
<v-icon>mdi-check</v-icon>
|
<v-icon>mdi-check</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -122,7 +122,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// import { mapMutations } from 'vuex'
|
// import { mapMutations } from 'vuex'
|
||||||
import { setUrlParams } from '@theme/util/filterHelpers'
|
import { setUrlParams, getUrlParameter, setBooleanMutation, setListMutation } from '@theme/util/filterHelpers'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SpellFilters',
|
name: 'SpellFilters',
|
||||||
|
|
@ -248,6 +248,46 @@ export default {
|
||||||
setUrlParams('niveaux', list)
|
setUrlParams('niveaux', list)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
switchComponentVerbal () {
|
||||||
|
let value = []
|
||||||
|
if ((this.componentVerbal !== undefined)) {
|
||||||
|
value[0] = this.componentVerbal
|
||||||
|
}
|
||||||
|
setUrlParams('v', value)
|
||||||
|
},
|
||||||
|
|
||||||
|
switchComponentSomatic () {
|
||||||
|
let value = []
|
||||||
|
if ((this.componentSomatic !== undefined)) {
|
||||||
|
value[0] = this.componentSomatic
|
||||||
|
}
|
||||||
|
setUrlParams('s', value)
|
||||||
|
},
|
||||||
|
|
||||||
|
switchComponentMaterial () {
|
||||||
|
let value = []
|
||||||
|
if ((this.componentMaterial !== undefined)) {
|
||||||
|
value[0] = this.componentMaterial
|
||||||
|
}
|
||||||
|
setUrlParams('m', value)
|
||||||
|
},
|
||||||
|
|
||||||
|
switchMustBeConcentration () {
|
||||||
|
let value = []
|
||||||
|
if ((this.mustBeConcentration !== undefined)) {
|
||||||
|
value[0] = this.mustBeConcentration
|
||||||
|
}
|
||||||
|
setUrlParams('c', value)
|
||||||
|
},
|
||||||
|
|
||||||
|
switchMustBeRitual () {
|
||||||
|
let value = []
|
||||||
|
if ((this.mustBeRitual !== undefined)) {
|
||||||
|
value[0] = this.mustBeRitual
|
||||||
|
}
|
||||||
|
setUrlParams('r', value)
|
||||||
|
},
|
||||||
|
|
||||||
isSchool (school) {
|
isSchool (school) {
|
||||||
return this.schools.indexOf(school) > -1
|
return this.schools.indexOf(school) > -1
|
||||||
},
|
},
|
||||||
|
|
@ -283,6 +323,28 @@ export default {
|
||||||
this.switchSchool()
|
this.switchSchool()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
mounted () {
|
||||||
|
let selectedSchools = getUrlParameter(window.location.href, "ecoles").split(",")
|
||||||
|
let selectedClasses = getUrlParameter(window.location.href, "classes").split(",")
|
||||||
|
let selectedLevels = getUrlParameter(window.location.href, "niveaux").split(",")
|
||||||
|
let componentVerbal = getUrlParameter(window.location.href, "v")
|
||||||
|
let componentSomatic = getUrlParameter(window.location.href, "s")
|
||||||
|
let componentMaterial = getUrlParameter(window.location.href, "m")
|
||||||
|
let mustBeConcentration = getUrlParameter(window.location.href, "c")
|
||||||
|
let mustBeRitual = getUrlParameter(window.location.href, "r")
|
||||||
|
|
||||||
|
setListMutation(selectedClasses, this.$store, 'spellFilters/setClassesFromList')
|
||||||
|
setListMutation(selectedLevels, this.$store, 'spellFilters/setLevelsFromList')
|
||||||
|
setListMutation(selectedSchools, this.$store, 'spellFilters/setSchoolsFromList')
|
||||||
|
|
||||||
|
setBooleanMutation(componentVerbal, this.$store, 'spellFilters/setComponentVerbal')
|
||||||
|
setBooleanMutation(componentSomatic, this.$store, 'spellFilters/setComponentSomatic')
|
||||||
|
setBooleanMutation(componentMaterial, this.$store, 'spellFilters/setComponentMaterial')
|
||||||
|
|
||||||
|
setBooleanMutation(mustBeConcentration, this.$store, 'spellFilters/setMustBeConcentration')
|
||||||
|
setBooleanMutation(mustBeRitual, this.$store, 'spellFilters/setMustBeRitual')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ export function setUrlParams (urlParam, list) {
|
||||||
params = params + list[i]
|
params = params + list[i]
|
||||||
}
|
}
|
||||||
if (list.length == 0) {
|
if (list.length == 0) {
|
||||||
params = "null"
|
params = ''
|
||||||
}
|
}
|
||||||
history.replaceState(null, null, setUrlParameter(window.location.href, urlParam, params))
|
history.replaceState(null, null, setUrlParameter(window.location.href, urlParam, params))
|
||||||
}
|
}
|
||||||
|
|
@ -32,16 +32,16 @@ export function setUrlParameter (url, key, value) {
|
||||||
var removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');
|
var removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');
|
||||||
|
|
||||||
if (typeof value === 'undefined' || value === null || value === "") { // Remove param if value is empty
|
if (typeof value === 'undefined' || value === null || value === "") { // Remove param if value is empty
|
||||||
params = urlQueryString.replace(removeRegex, "$1");
|
params = urlQueryString.replace(removeRegex, "$1");
|
||||||
params = params.replace(/[&;]$/, "");
|
params = params.replace(/[&;]$/, "");
|
||||||
|
|
||||||
} else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it
|
} else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it
|
||||||
params = urlQueryString.replace(updateRegex, "$1" + newParam);
|
params = urlQueryString.replace(updateRegex, "$1" + newParam);
|
||||||
|
|
||||||
} else if (urlQueryString=="") { // If there are no query strings
|
} else if (urlQueryString=="") { // If there are no query strings
|
||||||
params = '?' + newParam;
|
params = '?' + newParam;
|
||||||
} else { // Otherwise, add it to end of query string
|
} else { // Otherwise, add it to end of query string
|
||||||
params = urlQueryString + '&' + newParam;
|
params = urlQueryString + '&' + newParam;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,3 +50,26 @@ export function setUrlParameter (url, key, value) {
|
||||||
|
|
||||||
return baseUrl + params;
|
return baseUrl + params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getUrlParameter (url, parameter) {
|
||||||
|
parameter = parameter.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
|
||||||
|
var regex = new RegExp('[\\?|&]' + parameter + '=([^&#]*)');
|
||||||
|
var results = regex.exec('?' + url.split('?')[1]);
|
||||||
|
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setListMutation (param, store, mutation) {
|
||||||
|
if (param.length > 0 && param[0] !== "" && param[0] !== "null") {
|
||||||
|
store.commit(mutation, param)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setBooleanMutation (param, store, mutation) {
|
||||||
|
if (param !== undefined && param !== '') {
|
||||||
|
let value = false
|
||||||
|
if (param == 'true') {
|
||||||
|
value = true
|
||||||
|
}
|
||||||
|
store.commit(mutation, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue