pages.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import api from '@/api'
  2. import { Page, Burger } from '@/api/queries'
  3. export default {
  4. state: {
  5. welcome: undefined,
  6. intro: undefined,
  7. kit: undefined,
  8. ids: {
  9. welcome: 263,
  10. intro: 264,
  11. kit: 265,
  12. gallery: 349
  13. },
  14. pages: {},
  15. burger: [
  16. { name: 'home' },
  17. { name: 'introduction' }
  18. ],
  19. visited: localStorage.getItem('visited') === 'true'
  20. },
  21. mutations: {
  22. 'SET_PAGE' (state, { slug, page }) {
  23. state[slug] = page
  24. },
  25. 'SET_PAGE_FROM_ID' (state, { id, page }) {
  26. state.pages[id] = page
  27. },
  28. 'SET_BURGER' (state, burger) {
  29. state.burger = [...state.burger, ...burger]
  30. },
  31. 'SET_VISITED' (state, visited) {
  32. state.visited = visited
  33. localStorage.setItem('visited', visited)
  34. }
  35. },
  36. actions: {
  37. async 'QUERY_PAGE' ({ state, commit, dispatch, getters }, slug) {
  38. if (state[slug] !== undefined) return state[slug]
  39. return api.query(Page, { id: state.ids[slug] }).then(data => {
  40. dispatch('PARSE_PAGE', data.page)
  41. commit('SET_PAGE', { slug, page: data.page })
  42. return state[slug]
  43. })
  44. },
  45. async 'QUERY_PAGE_BY_ID' ({ state, commit, dispatch, getters }, id) {
  46. if (state.pages[id] !== undefined) return state.pages[id]
  47. return api.query(Page, { id }).then(data => {
  48. commit('SET_PAGE_FROM_ID', { id, page: data.page })
  49. return state.pages[id]
  50. })
  51. },
  52. async 'GET_BURGER' ({ state, commit }) {
  53. if (state.burger.length > 2) return state.burger
  54. return api.query(Burger).then(data => {
  55. const burger = data.burger.sort((a, b) => {
  56. return a.poid > b.poid ? 1 : -1
  57. }).map(page => {
  58. return { name: 'pages', id: page.id, title: page.title }
  59. })
  60. commit('SET_BURGER', burger)
  61. return burger
  62. })
  63. },
  64. 'PARSE_PAGE' ({ rootState }, node) {
  65. if (node.notes) {
  66. node.notes.forEach(note => {
  67. if (note.links && note.links.length) {
  68. note.links = note.links.map(link => {
  69. if (!(link.id in rootState.nodes) || rootState.nodes[link.id].dataLevel < 1) {
  70. this.commit('ADD_NODES', [[link], -1])
  71. }
  72. return rootState.nodes[link.id]
  73. })
  74. }
  75. })
  76. }
  77. return node
  78. }
  79. },
  80. getters: {
  81. visited: state => state.visited,
  82. burger: state => state.burger
  83. }
  84. }