mirror of https://github.com/Qiskit/qiskit.org.git
Use Vuex modules the classic Vuex store model (#1271)
This commit is contained in:
parent
592108b1aa
commit
f6467a564f
|
@ -61,7 +61,7 @@ import AppFieldset from '~/components/ui/AppFieldset.vue'
|
||||||
import AppFiltersResultsLayout from '~/components/ui/AppFiltersResultsLayout.vue'
|
import AppFiltersResultsLayout from '~/components/ui/AppFiltersResultsLayout.vue'
|
||||||
import InfiniteScroll from '~/components/ui/InfiniteScroll.vue'
|
import InfiniteScroll from '~/components/ui/InfiniteScroll.vue'
|
||||||
import AppLink from '~/components/ui/AppLink.vue'
|
import AppLink from '~/components/ui/AppLink.vue'
|
||||||
import { Advocate, ADVOCATES_WORLD_REGION_OPTIONS, State } from '~/store/modules/advocates.ts'
|
import { Advocate, ADVOCATES_WORLD_REGION_OPTIONS, State } from '~/store/advocates.ts'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import Airtable from 'airtable'
|
||||||
import {
|
import {
|
||||||
Advocate,
|
Advocate,
|
||||||
AdvocatesWorldRegion
|
AdvocatesWorldRegion
|
||||||
} from '../store/modules/advocates'
|
} from '../store/advocates'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getImageUrl,
|
getImageUrl,
|
||||||
|
|
|
@ -8,7 +8,7 @@ import {
|
||||||
COMMUNITY_EVENT_TYPES,
|
COMMUNITY_EVENT_TYPES,
|
||||||
COMMUNITY_EVENT_TYPE_OPTIONS,
|
COMMUNITY_EVENT_TYPE_OPTIONS,
|
||||||
WORLD_REGIONS
|
WORLD_REGIONS
|
||||||
} from '../store/modules/events'
|
} from '../store/events'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getImageUrl,
|
getImageUrl,
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { mapGetters, mapActions } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { Component } from 'vue-property-decorator'
|
import { Component } from 'vue-property-decorator'
|
||||||
import QiskitPage from '~/components/logic/QiskitPage.vue'
|
import QiskitPage from '~/components/logic/QiskitPage.vue'
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ import {
|
||||||
CommunityEvent,
|
CommunityEvent,
|
||||||
WORLD_REGION_OPTIONS,
|
WORLD_REGION_OPTIONS,
|
||||||
COMMUNITY_EVENT_TYPE_OPTIONS
|
COMMUNITY_EVENT_TYPE_OPTIONS
|
||||||
} from '~/store/modules/events.ts'
|
} from '~/store/events.ts'
|
||||||
import { EVENT_REQUEST_LINK } from '~/constants/appLinks'
|
import { EVENT_REQUEST_LINK } from '~/constants/appLinks'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -100,27 +100,21 @@ import { EVENT_REQUEST_LINK } from '~/constants/appLinks'
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters('events', [
|
||||||
'filteredEvents',
|
'filteredEvents',
|
||||||
'typeFilters',
|
'typeFilters',
|
||||||
'regionFilters'
|
'regionFilters'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
|
||||||
...mapActions({
|
|
||||||
fetchEvents: 'fetchEvents'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
async fetch ({ store }) {
|
async fetch ({ store }) {
|
||||||
const upcomingEvents = await store.dispatch('fetchUpcomingEvents')
|
const upcomingEvents = await store.dispatch('events/fetchUpcomingEvents')
|
||||||
const pastEvents = await store.dispatch('fetchPastEvents')
|
const pastEvents = await store.dispatch('events/fetchPastEvents')
|
||||||
|
|
||||||
const upcomingEventsPayload = { events: 'upcomingCommunityEvents', eventsSet: upcomingEvents }
|
const upcomingEventsPayload = { events: 'upcomingCommunityEvents', eventsSet: upcomingEvents }
|
||||||
const pastEventsPayload = { events: 'pastCommunityEvents', eventsSet: pastEvents }
|
const pastEventsPayload = { events: 'pastCommunityEvents', eventsSet: pastEvents }
|
||||||
store.commit('setEvents', upcomingEventsPayload)
|
store.commit('events/setEvents', upcomingEventsPayload)
|
||||||
store.commit('setEvents', pastEventsPayload)
|
store.commit('events/setEvents', pastEventsPayload)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class EventsPage extends QiskitPage {
|
export default class EventsPage extends QiskitPage {
|
||||||
|
@ -157,7 +151,7 @@ export default class EventsPage extends QiskitPage {
|
||||||
const { commit } = this.$store
|
const { commit } = this.$store
|
||||||
const payload = { filter, filterValues }
|
const payload = { filter, filterValues }
|
||||||
|
|
||||||
commit('updateFilterSet', payload)
|
commit('events/updateFilterSet', payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
isFilterChecked (filter: string, filterValue: string): Array<CommunityEvent> {
|
isFilterChecked (filter: string, filterValue: string): Array<CommunityEvent> {
|
||||||
|
@ -174,14 +168,14 @@ export default class EventsPage extends QiskitPage {
|
||||||
const { commit } = this.$store
|
const { commit } = this.$store
|
||||||
|
|
||||||
isSelected
|
isSelected
|
||||||
? commit('addFilter', payload)
|
? commit('events/addFilter', payload)
|
||||||
: commit('removeFilter', payload)
|
: commit('events/removeFilter', payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
selectTab (selectedTab: number) {
|
selectTab (selectedTab: number) {
|
||||||
const activeSet = selectedTab === 0 ? 'upcoming' : 'past'
|
const activeSet = selectedTab === 0 ? 'upcoming' : 'past'
|
||||||
|
|
||||||
this.$store.commit('setActiveSet', activeSet)
|
this.$store.commit('events/setActiveSet', activeSet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -46,7 +46,7 @@ import {
|
||||||
TIME_SCALES,
|
TIME_SCALES,
|
||||||
LEARN_LEVEL_OPTIONS,
|
LEARN_LEVEL_OPTIONS,
|
||||||
TIME_SCALE_OPTIONS
|
TIME_SCALE_OPTIONS
|
||||||
} from '~/store/modules/learning-resources.ts'
|
} from '~/store/learning-resources.ts'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
head () {
|
head () {
|
||||||
|
@ -56,7 +56,7 @@ import {
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters('learning-resources', [
|
||||||
'filteredLearningResources',
|
'filteredLearningResources',
|
||||||
'learnLevel',
|
'learnLevel',
|
||||||
'timeScale'
|
'timeScale'
|
||||||
|
@ -67,7 +67,7 @@ import {
|
||||||
const learningResources = await $content('learning-resources')
|
const learningResources = await $content('learning-resources')
|
||||||
.sortBy('order', 'asc')
|
.sortBy('order', 'asc')
|
||||||
.fetch()
|
.fetch()
|
||||||
store.commit('setLearningResources', learningResources)
|
store.commit('learning-resources/setLearningResources', learningResources)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -92,8 +92,8 @@ export default class LearnPage extends QiskitPage {
|
||||||
_parseFilterFromUrl (route: any) {
|
_parseFilterFromUrl (route: any) {
|
||||||
const timeScale = route.query.timeScale || this.timeScales.all
|
const timeScale = route.query.timeScale || this.timeScales.all
|
||||||
const learnLevel = route.query.learnLevel || this.learnLevels.all
|
const learnLevel = route.query.learnLevel || this.learnLevels.all
|
||||||
this.$store.commit('setTimeScale', timeScale)
|
this.$store.commit('learning-resources/setTimeScale', timeScale)
|
||||||
this.$store.commit('setLearnLevel', learnLevel)
|
this.$store.commit('learning-resources/setLearnLevel', learnLevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeScale (scale: TimeScale): void {
|
setTimeScale (scale: TimeScale): void {
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
import Vuex from 'vuex'
|
|
||||||
import Vue from 'vue'
|
|
||||||
import events from './modules/events'
|
|
||||||
import advocates from './modules/advocates'
|
|
||||||
import learningResources from './modules/learning-resources'
|
|
||||||
|
|
||||||
Vue.use(Vuex)
|
|
||||||
|
|
||||||
export const storeOptions = {
|
|
||||||
modules: { events, advocates, learningResources }
|
|
||||||
}
|
|
||||||
|
|
||||||
export default () => new Vuex.Store(storeOptions)
|
|
|
@ -9,7 +9,7 @@ import {
|
||||||
getSlackUsername
|
getSlackUsername
|
||||||
} from '~/hooks/advocate-conversion-utils'
|
} from '~/hooks/advocate-conversion-utils'
|
||||||
|
|
||||||
import { AdvocatesWorldRegion, ADVOCATES_WORLD_REGIONS } from '~/store/modules/advocates'
|
import { AdvocatesWorldRegion, ADVOCATES_WORLD_REGIONS } from '~/store/advocates'
|
||||||
|
|
||||||
type RecordFields = {
|
type RecordFields = {
|
||||||
name: string,
|
name: string,
|
||||||
|
|
|
@ -10,7 +10,7 @@ import {
|
||||||
getImage
|
getImage
|
||||||
} from '~/hooks/event-conversion-utils'
|
} from '~/hooks/event-conversion-utils'
|
||||||
|
|
||||||
import { COMMUNITY_EVENT_TYPES, WORLD_REGIONS } from '~/store/modules/events'
|
import { COMMUNITY_EVENT_TYPES, WORLD_REGIONS } from '~/store/events'
|
||||||
|
|
||||||
type RecordFields = {
|
type RecordFields = {
|
||||||
name: string,
|
name: string,
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
|
import advocates from '~/store/advocates'
|
||||||
|
import events from '~/store/events'
|
||||||
|
import learningResources from '~/store/learning-resources'
|
||||||
|
|
||||||
|
const storeOptions = {
|
||||||
|
modules: {
|
||||||
|
advocates,
|
||||||
|
events,
|
||||||
|
'learning-resources': learningResources
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
const storeOptionsClone = cloneDeep(storeOptions)
|
||||||
|
|
||||||
|
return storeOptionsClone
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
|
import Vue from 'vue'
|
||||||
import Vuex, { Store } from 'vuex'
|
import Vuex, { Store } from 'vuex'
|
||||||
import cloneDeep from 'lodash/cloneDeep'
|
import storeOptions from './_store-options'
|
||||||
import { storeOptions } from '~/store'
|
|
||||||
|
Vue.use(Vuex)
|
||||||
|
|
||||||
let store: Store<any>
|
let store: Store<any>
|
||||||
|
|
||||||
|
@ -31,8 +33,7 @@ describe('filteredAdvocates', () => {
|
||||||
const mockNonMatchingRegionFilter = () => 'Moon'
|
const mockNonMatchingRegionFilter = () => 'Moon'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const initialStoreOptions = cloneDeep(storeOptions)
|
store = new Vuex.Store(storeOptions())
|
||||||
store = new Vuex.Store(initialStoreOptions)
|
|
||||||
store.commit('advocates/setAdvocates', [mockAdvocate1(), mockAdvocate2()])
|
store.commit('advocates/setAdvocates', [mockAdvocate1(), mockAdvocate2()])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -66,8 +67,7 @@ describe('setAdvocates', () => {
|
||||||
const mutationType = 'advocates/setAdvocates'
|
const mutationType = 'advocates/setAdvocates'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const initialStoreOptions = cloneDeep(storeOptions)
|
store = new Vuex.Store(storeOptions())
|
||||||
store = new Vuex.Store(initialStoreOptions)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('sets the list of advocates with one advocate', () => {
|
it('sets the list of advocates with one advocate', () => {
|
||||||
|
@ -98,8 +98,7 @@ describe('setRegionFilters', () => {
|
||||||
const mockRegionFilter2 = 'Europe'
|
const mockRegionFilter2 = 'Europe'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const initialStoreOptions = cloneDeep(storeOptions)
|
store = new Vuex.Store(storeOptions())
|
||||||
store = new Vuex.Store(initialStoreOptions)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('sets the region filters with one filter', () => {
|
it('sets the region filters with one filter', () => {
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
import createStore from '~/store'
|
import Vue from 'vue'
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
import storeOptions from './_store-options'
|
||||||
|
|
||||||
|
Vue.use(Vuex)
|
||||||
|
|
||||||
describe('module events', () => {
|
describe('module events', () => {
|
||||||
let store: any
|
let store: any
|
||||||
|
@ -33,7 +37,7 @@ describe('module events', () => {
|
||||||
const pastEvents = [hackathonInAmericas, unconferenceOnline]
|
const pastEvents = [hackathonInAmericas, unconferenceOnline]
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
store = createStore()
|
store = new Vuex.Store(storeOptions())
|
||||||
store.commit('setEvents', {
|
store.commit('setEvents', {
|
||||||
events: 'upcomingCommunityEvents',
|
events: 'upcomingCommunityEvents',
|
||||||
eventsSet: futureEvents
|
eventsSet: futureEvents
|
||||||
|
|
Loading…
Reference in New Issue