index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import thread from './modules/thread'
  4. import category from './modules/category'
  5. import moderation from './modules/moderation'
  6. Vue.use(Vuex)
  7. export default new Vuex.Store({
  8. state: {
  9. meta: {
  10. name: '',
  11. title: '',
  12. categories: [
  13. { name: 'All', value: 'ALL', color: '#1565C0' }
  14. ]
  15. },
  16. accountTabs: 0,
  17. accountModal: false,
  18. username: '',
  19. admin: false,
  20. token: null,
  21. show404Page: false,
  22. ajaxErrors: [],
  23. ajaxErrorsModal: false,
  24. MinQueryLength: 2
  25. },
  26. getters: {
  27. categoriesWithoutAll (state) {
  28. let categories =
  29. state.meta.categories
  30. .filter(category => ['ALL', 'OTHER'].indexOf(category.value) === -1 )
  31. categories.unshift({
  32. name: 'Select a category',
  33. disabled: true
  34. })
  35. return categories.filter(category => category.value !== 'ALL' )
  36. },
  37. title (state) {
  38. if(state.meta.title.trim().length) {
  39. return state.meta.name + ' | ' + state.meta.title
  40. } else {
  41. return state.meta.name
  42. }
  43. },
  44. alphabetizedCategories (state) {
  45. return state.meta.categories.sort((a, b) => {
  46. if(a.name === 'All') return -1
  47. if(a.name === 'Other' || b.name === 'Other') return -1
  48. if(a.name < b.name) {
  49. return -1
  50. } else if (a.name > b.name) {
  51. return 1
  52. }
  53. return 0
  54. })
  55. }
  56. },
  57. actions: {
  58. setTitle ({ state, getters }, value) {
  59. state.meta.title = value
  60. document.title = getters.title
  61. }
  62. },
  63. mutations: {
  64. setToken (state, token) {
  65. state.token = token
  66. },
  67. set404Page (state, value) {
  68. state.show404Page = value
  69. },
  70. setAccountTabs (state, index) {
  71. state.accountTabs = index;
  72. },
  73. setSelectOptions (state, payload) {
  74. state.selectOptions[payload.name] = payload.value;
  75. },
  76. setAccountModalState (state, value) {
  77. state.accountModal = value;
  78. },
  79. setAjaxErrorsModalState (state, value) {
  80. state.ajaxErrorsModal = value;
  81. },
  82. setAjaxErrors (state, value) {
  83. state.ajaxErrors = value
  84. },
  85. setUsername (state, value) {
  86. state.username = value
  87. },
  88. setAdmin (state, value) {
  89. state.admin = value
  90. },
  91. setSettings (state, value) {
  92. state.meta.name = value.forumName
  93. state.meta.description = value.forumDescription
  94. state.meta.showDescription = value.showDescription
  95. },
  96. addCategories (state, value) {
  97. if(Array.isArray(value)) {
  98. state.meta.categories.push(...value)
  99. } else {
  100. state.meta.categories.push(value)
  101. }
  102. },
  103. removeCategory (state, id) {
  104. let category = state.meta.categories.filter(c => c.id === id)
  105. let index = state.meta.categories.indexOf(category)
  106. state.meta.categories.splice(index, 1)
  107. },
  108. updateCategory (state, updated) {
  109. let category = state.meta.categories.filter(c => c.id === updated.id)
  110. let index = state.meta.categories.indexOf(category)
  111. state.meta.categories.splice(index, 1, updated)
  112. }
  113. },
  114. modules: { thread, category, moderation }
  115. })