All files / site global_view.ts

26.19% Statements 11/42
0% Branches 0/15
20% Functions 2/10
28.94% Lines 11/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73        2x   2x 2x 2x 2x 2x 2x     2x         2x     2x 2x                                                                                                  
import type Community from './index'
import type {Entities, Entity, FilterParsed, LogicalObject} from '../types'
import type {DataViewParsed} from './dataview'
 
export class GlobalView {
  site: Community
  registered: LogicalObject = {}
  selection: Entities = {}
  entities: Map<string, Entity> = new Map()
  selected: string[] = []
  select_ids: {[index: string]: boolean} = {}
  filters: Map<string, FilterParsed> = new Map()
  times: number[]
  dataview: DataViewParsed
  states = {
    id_state: 'initial',
    filter_state: 'initial',
  }
  constructor(site: Community) {
    this.site = site
  }
  init() {
    this.times = this.site.data.meta.overall.value
    this.dataview = this.site.dataviews[this.site.defaults.dataview].parsed
  }
  filter_state(q?: string[], agg?: number) {
    const as_state = !q
    Iif (as_state) q = []
    this.filters.forEach(f => {
      const component =
        'selected' === f.component
          ? this.times['undefined' === typeof agg ? this.dataview.time_agg : agg]
          : f.time_component
          ? this.times[f.component as number]
          : f.component
      Iif (f.value) q.push(f.variable + '[' + component + ']' + f.operator + f.value + (as_state ? f.active : ''))
    })
    return q.join('&')
  }
  id_state() {
    return Object.keys(this.select_ids).join(',')
  }
  id_filter() {
    const ids: {[index: string]: boolean} = {}
    this.selected = []
    this.select_ids = ids
    Iif (this.site.data.metadata.datasets) {
      const inputs = this.site.page.modal.filter.entity_inputs
      this.site.data.metadata.datasets.forEach(d => {
        Iif (d in inputs) {
          const s = inputs[d].value() as string[],
            cs: string[] = []
          Iif (Array.isArray(s)) {
            s.forEach(id => {
              const e = this.site.data.entities[id]
              Iif (e) {
                cs.push(id)
                this.selected.push(id)
                ids[id] = true
                Iif (e.relations) {
                  Object.keys(e.relations.parents).forEach(k => (ids[k] = true))
                  Object.keys(e.relations.children).forEach(k => (ids[k] = true))
                }
              }
            })
            inputs[d].source = cs
          }
        }
      })
    }
  }
}