diff --git a/src/api/chat.js b/src/api/chat.js
new file mode 100644
index 00000000..7a3bd66c
--- /dev/null
+++ b/src/api/chat.js
@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+import { getToken } from '@/utils/auth'
+import { baseName } from './utils'
+
+export async function deleteChatMessage(id, message_id, authHost, token) {
+ return await request({
+ baseURL: baseName(authHost),
+ url: `/api/pleroma/admin/chats/{id}/messages/${message_id}`,
+ method: 'delete',
+ headers: authHeaders(token)
+ })
+}
+
+export async function fetchChat(id, authHost, token) {
+ return await request({
+ baseURL: baseName(authHost),
+ url: `/api/pleroma/admin/chats/${id}`,
+ method: 'get',
+ headers: authHeaders(token)
+ })
+}
+
+export async function fetchChatMessages(id, authHost, token) {
+ return await request({
+ baseURL: baseName(authHost),
+ url: `/api/pleroma/admin/chats/${id}/messages`,
+ method: 'get',
+ headers: authHeaders(token)
+ })
+}
+
+const authHeaders = (token) => token ? { 'Authorization': `Bearer ${getToken()}` } : {}
diff --git a/src/components/ChatMessage/index.vue b/src/components/ChatMessage/index.vue
new file mode 100644
index 00000000..b23325aa
--- /dev/null
+++ b/src/components/ChatMessage/index.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+ {{ message.content }}
+
+
+
+
+
+
+
+
diff --git a/src/lang/en.js b/src/lang/en.js
index a3d6ce02..76f8b879 100644
--- a/src/lang/en.js
+++ b/src/lang/en.js
@@ -67,6 +67,7 @@ export default {
reports: 'Reports',
invites: 'Invites',
statuses: 'Statuses',
+ chats: 'Chats',
settings: 'Settings',
moderationLog: 'Moderation Log',
mediaProxyCache: 'MediaProxy Cache',
@@ -299,6 +300,11 @@ export default {
unlisted: 'Unlisted',
openStatusInInstance: 'Open status in instance'
},
+ chats: {
+ chats: 'Chats',
+ loadMore: 'Load more',
+ chatHistory: 'Chat History'
+ },
userProfile: {
tags: 'Tags',
moderator: 'Moderator',
diff --git a/src/router/index.js b/src/router/index.js
index 60be0f88..ca765efc 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -35,6 +35,21 @@ const statuses = {
]
}
+const chatsDisabled = disabledFeatures.includes('chats')
+const chats = {
+ path: '/chats',
+ component: Layout,
+ children: [
+ {
+ path: 'index',
+ component: () => import('@/views/chats/index'),
+ name: 'Chats',
+ meta: { title: 'chats', icon: 'form', noCache: true }
+ }
+ ],
+ hidden: true
+}
+
const reportsDisabled = disabledFeatures.includes('reports')
const reports = {
path: '/reports',
@@ -169,6 +184,7 @@ export const asyncRouterMap = [
]
},
...(statusesDisabled ? [] : [statuses]),
+ ...(chatsDisabled ? [] : [chats]),
...(reportsDisabled ? [] : [reports]),
...(invitesDisabled ? [] : [invites]),
...(emojiPacksDisabled ? [] : [emojiPacks]),
@@ -211,5 +227,17 @@ export const asyncRouterMap = [
],
hidden: true
},
+ {
+ path: '/chats/:id',
+ component: Layout,
+ children: [
+ {
+ path: '',
+ name: 'ChatsShow',
+ component: () => import('@/views/chats/show')
+ }
+ ],
+ hidden: true
+ },
{ path: '*', redirect: '/404', hidden: true }
]
diff --git a/src/store/index.js b/src/store/index.js
index bd4a6e5b..6e9d3b7e 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -13,6 +13,7 @@ import relays from './modules/relays'
import reports from './modules/reports'
import settings from './modules/settings'
import status from './modules/status'
+import chat from './modules/chat'
import tagsView from './modules/tagsView'
import user from './modules/user'
import userProfile from './modules/userProfile'
@@ -34,6 +35,7 @@ const store = new Vuex.Store({
reports,
settings,
status,
+ chat,
tagsView,
user,
userProfile,
diff --git a/src/store/modules/chat.js b/src/store/modules/chat.js
new file mode 100644
index 00000000..0cee17d1
--- /dev/null
+++ b/src/store/modules/chat.js
@@ -0,0 +1,39 @@
+import { fetchChat, fetchChatMessages } from '@/api/chat'
+
+const chat = {
+ state: {
+ fetchedChat: {},
+ fetchedChatMessages: {},
+ loading: false,
+ chatAuthor: {}
+ },
+ mutations: {
+ SET_LOADING: (state, status) => {
+ state.loading = status
+ },
+ SET_CHAT: (state, chat) => {
+ state.fetchedChat = chat
+ },
+ SET_CHAT_MESSAGES: (state, chatMessages) => {
+ state.fetchedChatMessages = chatMessages
+ }
+ },
+ actions: {
+ async FetchChat({ commit, dispatch, getters, state }, id) {
+ commit('SET_LOADING', true)
+ const chat = await fetchChat(id, getters.authHost, getters.token)
+
+ commit('SET_CHAT', chat.data)
+ commit('SET_LOADING', false)
+ },
+ async FetchChatMessages({ commit, dispatch, getters, state }, id) {
+ commit('SET_LOADING', true)
+ const chat = await fetchChatMessages(id, getters.authHost, getters.token)
+
+ commit('SET_CHAT_MESSAGES', chat.data)
+ commit('SET_LOADING', false)
+ }
+ }
+}
+
+export default chat
diff --git a/src/views/chats/index.vue b/src/views/chats/index.vue
new file mode 100644
index 00000000..ec64212d
--- /dev/null
+++ b/src/views/chats/index.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chats/show.vue b/src/views/chats/show.vue
new file mode 100644
index 00000000..be99d0f4
--- /dev/null
+++ b/src/views/chats/show.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
diff --git a/src/views/users/show.vue b/src/views/users/show.vue
index 5813405b..1a57582b 100644
--- a/src/views/users/show.vue
+++ b/src/views/users/show.vue
@@ -120,19 +120,21 @@
-
+
+ {{ chat.last_message.content }}
+
+
|