Arc-hive-list/src/store.js
2021-11-24 14:40:53 +01:00

128 lines
3.5 KiB
JavaScript

/*
This file is part of ArciveList.
# SPDX-FileCopyrightText: 2021 Hangar.org
# SPDX-License-Identifier: AGPL-3.0-or-later
*/
import Vue from 'vue'
import Vuex from 'vuex'
import _ from 'underscore';
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
search_text: "",
sites: [],
filtered_sites: [],
page_count: 1,
},
mutations: {
setSearchText(state, text) {
state.search_text = text
},
setSites(state, payload) {
state.sites = _.sortBy(payload.sites, payload.column_name)
},
incrementPageCount(state) {
state.page_count = state.page_count +1
},
setFilteredSites(state, filtered_site_ids) {
console.log(filtered_site_ids)
var sites = []
for (const [site_id, weight] of Object.entries(filtered_site_ids)) {
var site = state.sites.find(x => x.id == site_id)
if (site) {
sites.push(site)
}
}
state.filtered_sites = sites
state.page_count = 1
},
setColumnOrder(state, payload) {
//state.sites = _.sortBy(state.sites, payload.column_name)
//state.filtered_sites = _.sortBy(state.filtered_sites, payload.column_name)
state.sites = order_items(state.sites, payload.column_name, payload.order)
state.filtered_sites = order_items(state.filtered_sites, payload.column_name, payload.order)
/*
if (payload.order == 'desc') {
state.sites.reverse()
state.filtered_sites.reverse()
}
*/
},
},
getters: {
getSitesForDisplay: state => {
if (state.search_text === "") {
return state.sites
}
return state.filtered_sites
},
getPageCount: state => {
return state.page_count
},
searchLocalSiteData: state => {
var result = {}
if (state.search_text==="") {
return result
}
for (let site in state.sites) {
var weight = 0
var found = state.sites[site].summary.toLowerCase().search(state.search_text.toLowerCase())
if (found != -1) {
weight = weight +1
}
var found = state.sites[site].collection.toLowerCase().search(state.search_text.toLowerCase())
if (found != -1) {
weight = weight +1
}
var found = state.sites[site].currator.toLowerCase().search(state.search_text.toLowerCase())
if (found != -1) {
weight = weight +1
}
var found = state.sites[site].title.toLowerCase().search(state.search_text.toLowerCase())
if (found != -1) {
weight = weight +1
}
if (weight > 0) {
var id = state.sites[site].id
result[id] = weight
}
}
console.log('load search')
console.log(result)
return result
},
}
})
function order_items(items, field_name, ascending) {
items.sort(function compareFn(first_el, second_el) {
if (field_name == 'artist') {
field_name = 'currator'
}
if (field_name == 'date') {
field_name = 'project_date'
}
console.log("sss: "+ field_name)
console.log(first_el)
if (first_el[field_name] === undefined || first_el[field_name] === ""){
return -1
}
if (second_el[field_name] === undefined || second_el[field_name] === ""){
return 1
}
first_el = first_el[field_name].toLowerCase()
second_el = second_el[field_name].toLowerCase()
if (first_el < second_el) {
return -1;
}
return 1;
})
return ascending == 'asc' ? items : items.reverse()
}
export default store