diff --git a/src/api/peers.js b/src/api/peers.js new file mode 100644 index 00000000..4b80d7ab --- /dev/null +++ b/src/api/peers.js @@ -0,0 +1,14 @@ +import request from '@/utils/request' +import { getToken } from '@/utils/auth' +import { baseName } from './utils' + +export async function fetchPeers(authHost, token) { + return await request({ + baseURL: baseName(authHost), + url: `/api/v1/instance/peers`, + method: 'get', + headers: authHeaders(token) + }) +} + +const authHeaders = (token) => token ? { 'Authorization': `Bearer ${getToken()}` } : {} diff --git a/src/api/status.js b/src/api/status.js index 7d931ae0..4b62da0b 100644 --- a/src/api/status.js +++ b/src/api/status.js @@ -21,4 +21,13 @@ export async function deleteStatus(id, authHost, token) { }) } +export async function fetchStatusesByInstance(instance, authHost, token) { + return await request({ + baseURL: baseName(authHost), + url: `/api/pleroma/admin/instances/${instance}/statuses`, + method: 'get', + headers: authHeaders(token) + }) +} + const authHeaders = (token) => token ? { 'Authorization': `Bearer ${getToken()}` } : {} diff --git a/src/lang/en.js b/src/lang/en.js index 41d7f54a..f9c56069 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -230,6 +230,10 @@ export default { passwordResetTokenCreated: 'Password reset token was created', accountCreated: 'New account was created!' }, + statuses: { + statuses: 'Statuses', + instanceFilter: 'Instance filter' + }, userProfile: { tags: 'Tags', moderator: 'Moderator', diff --git a/src/router/index.js b/src/router/index.js index b0e0d750..87a6295d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -21,6 +21,20 @@ const settings = { ] } +const statusesDisabled = disabledFeatures.includes('statuses') +const statuses = { + path: '/statuses', + component: Layout, + children: [ + { + path: 'index', + component: () => import('@/views/statuses/index'), + name: 'Statuses', + meta: { title: 'Statuses', icon: 'form', noCache: true } + } + ] +} + const reportsDisabled = disabledFeatures.includes('reports') const reports = { path: '/reports', @@ -126,6 +140,7 @@ export const asyncRouterMap = [ } ] }, + ...(statusesDisabled ? [] : [statuses]), ...(settingsDisabled ? [] : [settings]), ...(reportsDisabled ? [] : [reports]), ...(invitesDisabled ? [] : [invites]), diff --git a/src/store/getters.js b/src/store/getters.js index 03899ea7..159fb48c 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -49,6 +49,7 @@ const getters = { http: state => state.settings.settings['http'], httpSecurity: state => state.settings.settings['http_security'], instance: state => state.settings.settings['instance'], + instances: state => state.peers.fetchedPeers, kocaptcha: state => state.settings.settings['Pleroma.Captcha.Kocaptcha'], level: state => state.settings.settings['level'], ldap: state => state.settings.settings['ldap'], @@ -82,6 +83,7 @@ const getters = { richMedia: state => state.settings.settings['rich_media'], suggestions: state => state.settings.settings['suggestions'], scheduledActivity: state => state.settings.settings['Pleroma.ScheduledActivity'], + statuses: state => state.status.fetchedStatuses, teslaAdapter: state => state.settings.settings['adapter'], twitter: state => state.settings.settings['Ueberauth.Strategy.Twitter.OAuth'], ueberauth: state => state.settings.settings['Ueberauth'], diff --git a/src/store/index.js b/src/store/index.js index 9a3cad50..0475c748 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -3,6 +3,7 @@ import Vuex from 'vuex' import app from './modules/app' import errorLog from './modules/errorLog' import invites from './modules/invites' +import peers from './modules/peers' import permission from './modules/permission' import reports from './modules/reports' import settings from './modules/settings' @@ -21,6 +22,7 @@ const store = new Vuex.Store({ app, errorLog, invites, + peers, permission, reports, settings, diff --git a/src/store/modules/peers.js b/src/store/modules/peers.js new file mode 100644 index 00000000..fa37a1d0 --- /dev/null +++ b/src/store/modules/peers.js @@ -0,0 +1,28 @@ +import { fetchPeers } from '@/api/peers' + +const peers = { + state: { + fetchedPeers: [], + loading: true + }, + + mutations: { + SET_PEERS: (state, peers) => { + state.fetchedPeers = peers + }, + SET_LOADING: (state, status) => { + state.loading = status + } + }, + + actions: { + async FetchPeers({ commit, getters }) { + const peers = await fetchPeers(getters.authHost, getters.token) + + commit('SET_PEERS', peers.data) + commit('SET_LOADING', false) + } + } +} + +export default peers diff --git a/src/store/modules/status.js b/src/store/modules/status.js index 15d1f1f7..a1a864b3 100644 --- a/src/store/modules/status.js +++ b/src/store/modules/status.js @@ -1,6 +1,18 @@ -import { changeStatusScope, deleteStatus } from '@/api/status' +import { changeStatusScope, deleteStatus, fetchStatusesByInstance } from '@/api/status' const status = { + state: { + fetchedStatuses: [], + loading: false + }, + mutations: { + SET_STATUSES: (state, statuses) => { + state.fetchedStatuses = statuses + }, + SET_LOADING: (state, status) => { + state.loading = status + } + }, actions: { async ChangeStatusScope({ dispatch, getters }, { statusId, isSensitive, visibility, reportCurrentPage, userId, godmode }) { await changeStatusScope(statusId, isSensitive, visibility, getters.authHost, getters.token) @@ -17,6 +29,13 @@ const status = { } else if (userId.length > 0) { dispatch('FetchUserStatuses', { userId, godmode }) } + }, + async FetchStatusesByInstance({ commit, getters }, instance) { + commit('SET_LOADING', true) + const statuses = await fetchStatusesByInstance(instance, getters.authHost, getters.token) + + commit('SET_STATUSES', statuses.data) + commit('SET_LOADING', false) } } } diff --git a/src/views/statuses/index.vue b/src/views/statuses/index.vue new file mode 100644 index 00000000..adf56052 --- /dev/null +++ b/src/views/statuses/index.vue @@ -0,0 +1,66 @@ + + + + +