diff --git a/src/components/settings_modal/admin_tabs/admin_card.js b/src/components/settings_modal/admin_tabs/admin_card.js
new file mode 100644
index 000000000..7339e420e
--- /dev/null
+++ b/src/components/settings_modal/admin_tabs/admin_card.js
@@ -0,0 +1,25 @@
+import BasicUserCard from '../../basic_user_card/basic_user_card.vue'
+
+const AdminCard = {
+ props: ['userId'],
+ data () {
+ return {
+ progress: false
+ }
+ },
+ computed: {
+ user () {
+ return this.$store.getters.findUser(this.userId)
+ },
+ relationship () {
+ return this.$store.getters.relationship(this.userId)
+ },
+ },
+ components: {
+ BasicUserCard
+ },
+ methods: {
+ }
+}
+
+export default AdminCard
diff --git a/src/components/settings_modal/admin_tabs/admin_card.vue b/src/components/settings_modal/admin_tabs/admin_card.vue
new file mode 100644
index 000000000..cc7b7b4f5
--- /dev/null
+++ b/src/components/settings_modal/admin_tabs/admin_card.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/settings_modal/admin_tabs/users_tab.js b/src/components/settings_modal/admin_tabs/users_tab.js
new file mode 100644
index 000000000..4b875cc93
--- /dev/null
+++ b/src/components/settings_modal/admin_tabs/users_tab.js
@@ -0,0 +1,100 @@
+//import get from 'lodash/get'
+import Checkbox from 'src/components/checkbox/checkbox.vue'
+import Select from 'src/components/select/select.vue'
+import BasicUserCard from 'src/components/basic_user_card/basic_user_card.vue'
+import withLoadMore from 'src/components/../hocs/with_load_more/with_load_more'
+import SelectableList from 'src/components/selectable_list/selectable_list.vue'
+import ProgressButton from 'src/components/progress_button/progress_button.vue'
+import AdminCard from 'src/components/settings_modal/admin_tabs/admin_card.vue'
+//import { ref } from 'vue'
+
+const UserList = withLoadMore({
+ fetch: (props, $store) => {
+ console.log('fetch', props)
+ return $store.dispatch('fetchAdminUsers')
+ },
+ select: (props, $store) => {
+ console.log('select', props)
+ const filterMethod = typeof props.filterMethod === 'function' ? props.filterMethod : () => true
+ const users = $store.state.users.users.filter(user => user.id !== $store.state.users.currentUser.id && filterMethod(user))
+ console.log('users', users)
+ return users
+ },
+ destroy: () => {},
+ childPropName: 'items'
+})(SelectableList)
+
+const UserSortStrategy = Object.freeze({
+ NONE: 0,
+ NICKNAME: 1,
+ DISPLAYNAME: 2,
+ JOINED: 3
+})
+
+const UsersTab = {
+ provide () {
+ return {
+ defaultDraftMode: true,
+ defaultSource: 'admin'
+ }
+ },
+ data() {
+ return {
+ filterTerms: [],
+ users: [],
+ sortStrategy: UserSortStrategy.NONE,
+ sortAscending: true,
+ expandedUser: null,
+ filterActive: 'active_only',
+ filterLocal: 'local_only',
+ loading: false
+ }
+ },
+ components: {
+ Checkbox,
+ Select,
+ BasicUserCard,
+ UserList,
+ ProgressButton,
+ AdminCard,
+ },
+ computed: {
+ knownDomains () {
+ return this.$store.state.instance.knownDomains
+ },
+ user () {
+ return this.$store.state.users.currentUser
+ }
+ },
+ methods: {
+ },
+ mounted() {
+ console.log("mounted")
+ /*const store = this.$store;
+ const moduleTree = buildModuleTree(store._modules.root);
+ console.log(JSON.stringify(moduleTree, null, 2));*/
+ }
+}
+/*function buildModuleTree(module, path = []) {
+ const fullPath = path.join('/') || 'root';
+
+ const moduleInfo = {
+ path: fullPath,
+ namespaced: module.namespaced,
+ state: Object.keys(module.state),
+ actions: module._rawModule.actions ? Object.keys(module._rawModule.actions) : [],
+ mutations: module._rawModule.mutations ? Object.keys(module._rawModule.mutations) : [],
+ getters: module._rawModule.getters ? Object.keys(module._rawModule.getters) : [],
+ modules: []
+ };
+
+ if (module._children) {
+ for (const key in module._children) {
+ const child = module._children[key];
+ moduleInfo.modules.push(buildModuleTree(child, path.concat(key)));
+ }
+ }
+
+ return moduleInfo;
+}*/
+export default UsersTab
diff --git a/src/components/settings_modal/admin_tabs/users_tab.vue b/src/components/settings_modal/admin_tabs/users_tab.vue
new file mode 100644
index 000000000..0f9d681bf
--- /dev/null
+++ b/src/components/settings_modal/admin_tabs/users_tab.vue
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/src/components/settings_modal/settings_modal_admin_content.js b/src/components/settings_modal/settings_modal_admin_content.js
index 593318ec4..0102bbc8f 100644
--- a/src/components/settings_modal/settings_modal_admin_content.js
+++ b/src/components/settings_modal/settings_modal_admin_content.js
@@ -1,6 +1,7 @@
import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'
import InstanceTab from './admin_tabs/instance_tab.vue'
+import UsersTab from './admin_tabs/users_tab.vue'
import LimitsTab from './admin_tabs/limits_tab.vue'
import FrontendsTab from './admin_tabs/frontends_tab.vue'
import EmojiTab from './admin_tabs/emoji_tab.vue'
@@ -34,6 +35,7 @@ const SettingsModalAdminContent = {
TabSwitcher,
InstanceTab,
+ UsersTab,
LimitsTab,
FrontendsTab,
EmojiTab
diff --git a/src/components/settings_modal/settings_modal_admin_content.vue b/src/components/settings_modal/settings_modal_admin_content.vue
index 39ef74f64..c56f11548 100644
--- a/src/components/settings_modal/settings_modal_admin_content.vue
+++ b/src/components/settings_modal/settings_modal_admin_content.vue
@@ -48,6 +48,14 @@
>
+
+
+
users.forEach(user => store.dispatch('fetchUserIfMissing', user.id)))
+ },
loadFrontendsStuff ({ rootState, commit }) {
rootState.api.backendInteractor.fetchAvailableFrontends()
.then(frontends => commit('setAvailableFrontends', { frontends }))
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 117c621d9..f88c3a6e5 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -115,6 +115,7 @@ const PLEROMA_ADMIN_CONFIG_URL = '/api/pleroma/admin/config'
const PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/pleroma/admin/config/descriptions'
const PLEROMA_ADMIN_FRONTENDS_URL = '/api/pleroma/admin/frontends'
const PLEROMA_ADMIN_FRONTENDS_INSTALL_URL = '/api/pleroma/admin/frontends/install'
+const PLEROMA_ADMIN_USERS_URL = '/api/v1/pleroma/admin/users'
const PLEROMA_EMOJI_RELOAD_URL = '/api/pleroma/admin/reload_emoji'
const PLEROMA_EMOJI_IMPORT_FS_URL = '/api/pleroma/emoji/packs/import'
@@ -1440,6 +1441,12 @@ const dismissAnnouncement = ({ id, credentials }) => {
})
}
+const adminListUsers = ({ credentials }) => {
+ // the reported list is hardly useful because standards are for dating i guess,
+ // so make sure to fetchIfMissing right afterward using this call
+ return promisedRequest({ url: PLEROMA_ADMIN_USERS_URL, credentials }).then((data) => data.users.map(parseUser))
+}
+
const announcementToPayload = ({ content, startsAt, endsAt, allDay }) => {
const payload = { content }
@@ -2111,7 +2118,8 @@ const apiService = {
fetchBookmarkFolders,
createBookmarkFolder,
updateBookmarkFolder,
- deleteBookmarkFolder
+ deleteBookmarkFolder,
+ adminListUsers,
}
export default apiService