1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // noinspection JSIgnoredPromiseFromCall
- export default {
- data() {
- return {
- checkedList: [],
- formedMajors: {},
- majorTree: []
- }
- },
- computed: {
- majorTreeChildren() {
- // extend majorTree with children property. use name as key, and children as value.
- // put it here to avoid re-compute and re-build big-data instead of in InjectionMixin.
- const result = {}
- this.majorTree.forEach(category => {
- category.children.forEach(group => {
- result[group.name] = group.children.map(item => item.name)
- })
- })
- return result
- },
- searchingMajors() {
- // below is a structure of searchingMajors, waiting for override.
- return {
- // top search condition checked major list, for search result major highlight mark.
- checkedList: this.checkedList,
- majorTreeChildren: this.majorTreeChildren,
- // Key: majorId, Value: currentSearching copy while major is selected.
- formedMajors: this.formedMajors
- }
- }
- },
- provide() {
- return {
- getMajorTree: () => this.majorTree,
- fetchSearchingMajors: () => this.searchingMajors,
- updateCheckedList: this.updateCheckedList,
- snapshotSearchingMajorWhenApply: this.snapshotSearchingMajorWhenApply,
- isSearchingMajorFired: this.isSearchingMajorFired,
- isFormedMajorFired: this.isFormedMajorFired,
- ensureMajorFullTree: this.ensureMajorFullTree
- }
- },
- methods: {
- updateCheckedList(checkedList) {
- this.checkedList = checkedList
- },
- snapshotSearchingMajorWhenApply(major) {
- // keep currentSearching if major selected, remove if not.
- if (major.selected) {
- if (this.isSearchingMajorFired(major)) {
- // make a copy of currentSearching, and keep it.
- this.$set(this.formedMajors, major.id, [...this.checkedList])
- return
- }
- }
- // remove it if exists.
- this.$delete(this.formedMajors, major.id)
- },
- isSearchingMajorFired(major) {
- return this.checkedList.includes(major.marjorName) ||
- this.checkedList.some(item => this.majorTreeChildren[item]?.includes(major.marjorName))
- },
- isFormedMajorFired(major) {
- return this.formedMajors[major.id]?.includes(major.marjorName) ||
- this.formedMajors[major.id]?.some(item => this.majorTreeChildren[item]?.includes(major.marjorName))
- },
- async ensureMajorFullTree(batch) {
- const params = {level: 3, batch}
- this.majorTree = await this.$store.cache.dispatch('cachedData/getMajorFullTree', params)
- },
- resolveFormedMajorsFromSavedData(data) {
- const results = {}
- const highlighted = data.detail?.batch?.highlightMajorIds || []
- data.detail?.batch?.wishes?.forEach(group => {
- group.marjors.forEach(major => {
- // Do not use ===, id is not concerned with type of string or number
- if (highlighted.some(id => id == major.id)) {
- results[major.id] = [major.name]
- }
- })
- })
- return results
- }
- }
- }
|