mirror of
https://github.com/YunoHost/yunohost-admin.git
synced 2024-09-03 20:06:15 +02:00
add domains as tree getters
This commit is contained in:
parent
df9ccf3dff
commit
b0077f815d
1 changed files with 53 additions and 1 deletions
|
@ -2,12 +2,26 @@ import Vue from 'vue'
|
||||||
|
|
||||||
import api from '@/api'
|
import api from '@/api'
|
||||||
import { isEmptyValue } from '@/helpers/commons'
|
import { isEmptyValue } from '@/helpers/commons'
|
||||||
|
import { stratify } from '@/helpers/data/tree'
|
||||||
|
|
||||||
|
|
||||||
|
export function getParentDomain (domain, domains, highest = false) {
|
||||||
|
const method = highest ? 'lastIndexOf' : 'indexOf'
|
||||||
|
let i = domain[method]('.')
|
||||||
|
while (i !== -1) {
|
||||||
|
const dn = domain.slice(i + 1)
|
||||||
|
if (domains.includes(dn)) return dn
|
||||||
|
i = domain[method]('.', i + (highest ? -1 : 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
domains: undefined, // Array
|
|
||||||
main_domain: undefined,
|
main_domain: undefined,
|
||||||
|
domains: undefined, // Array
|
||||||
users: undefined, // basic user data: Object {username: {data}}
|
users: undefined, // basic user data: Object {username: {data}}
|
||||||
users_details: {}, // precise user data: Object {username: {data}}
|
users_details: {}, // precise user data: Object {username: {data}}
|
||||||
groups: undefined,
|
groups: undefined,
|
||||||
|
@ -174,6 +188,44 @@ export default {
|
||||||
|
|
||||||
domains: state => state.domains,
|
domains: state => state.domains,
|
||||||
|
|
||||||
|
orderedDomains: state => {
|
||||||
|
if (!state.domains) return
|
||||||
|
|
||||||
|
const splittedDomains = Object.fromEntries(state.domains.map(domain => {
|
||||||
|
// Keep the main part of the domain and the extension together
|
||||||
|
// eg: this.is.an.example.com -> ['example.com', 'an', 'is', 'this']
|
||||||
|
domain = domain.split('.')
|
||||||
|
domain.push(domain.pop() + domain.pop())
|
||||||
|
return [domain, domain.reverse()]
|
||||||
|
}))
|
||||||
|
|
||||||
|
return state.domains.sort((a, b) => splittedDomains[a] > splittedDomains[b])
|
||||||
|
},
|
||||||
|
|
||||||
|
domainsTree: (state, getters) => {
|
||||||
|
// This getter will not return any reactive data, make sure to assign its output
|
||||||
|
// to a component's `data`.
|
||||||
|
// FIXME manage to store the result in the store to allow reactive data (trigger an
|
||||||
|
// action when state.domain change)
|
||||||
|
const domains = getters.orderedDomains
|
||||||
|
if (!domains) return
|
||||||
|
const dataset = domains.map(name => ({
|
||||||
|
// data to build a hierarchy
|
||||||
|
name,
|
||||||
|
parent: getParentDomain(name, domains),
|
||||||
|
// utility data that will be used by `RecursiveListGroup` component
|
||||||
|
to: { name: 'domain-info', params: { name } },
|
||||||
|
opened: true
|
||||||
|
}))
|
||||||
|
return stratify(dataset)
|
||||||
|
},
|
||||||
|
|
||||||
|
domain: state => name => state.domains_details[name],
|
||||||
|
|
||||||
|
highestDomainParentName: (state, getters) => name => {
|
||||||
|
return getParentDomain(name, getters.orderedDomains, true)
|
||||||
|
},
|
||||||
|
|
||||||
mainDomain: state => state.main_domain,
|
mainDomain: state => state.main_domain,
|
||||||
|
|
||||||
domainsAsChoices: state => {
|
domainsAsChoices: state => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue