snake_case to camelCase

This commit is contained in:
luce 2025-08-07 10:57:00 +02:00
commit 2630f17cd5
9 changed files with 186 additions and 182 deletions

View file

@ -5,48 +5,48 @@ const PageList = {
SelectableList SelectableList
}, },
props: { props: {
box_only: { boxOnly: {
type: Boolean, type: Boolean,
default: false default: false
}, },
page_size: { pageSize: {
type: Number, type: Number,
default: 50 default: 50
}, },
fetch_page: { fetchPage: {
type: Function, type: Function,
default: async () => [] default: async () => []
}, },
single_page: { singlePage: {
type: Boolean, type: Boolean,
default: false default: false
} }
}, },
data () { data () {
return { return {
page_index: 1, pageIndex: 1,
items: [], items: [],
can_load_more: true, canLoadMore: true,
is_loading: false isLoading: false
} }
}, },
methods: { methods: {
reset () { reset () {
this.can_load_more = true this.canLoadMore = true
this.page_index = 1 this.pageIndex = 1
this.items = [] this.items = []
this.is_loading = false this.isLoading = false
this.load_more() // load one page this.loadMore() // load one page
}, },
load_more () { loadMore () {
if (!this.is_loading && this.can_load_more) { if (!this.isLoading && this.canLoadMore) {
this.is_loading = true this.isLoading = true
this.fetch_page(this.$store, { this.fetchPage(this.$store, {
page: this.page_index++, page: this.pageIndex++,
page_size: this.page_size pageSize: this.pageSize
}).then(items => { }).then(items => {
this.items = [...this.items, ...items] this.items = [...this.items, ...items]
this.is_loading = false this.isLoading = false
}) })
} }
}, },
@ -55,7 +55,7 @@ const PageList = {
} }
}, },
mounted () { mounted () {
this.load_more() this.loadMore()
} }
} }
export default PageList export default PageList

View file

@ -20,25 +20,25 @@
</template> </template>
<template #load="slotProps"> <template #load="slotProps">
<slot <slot
v-if="is_loading" v-if="isLoading"
name="load" name="load"
v-bind="slotProps" v-bind="slotProps"
/> />
</template> </template>
<template #empty="slotProps"> <template #empty="slotProps">
<slot <slot
v-if="items.length == 0 && !is_loading" v-if="items.length == 0 && !isLoading"
name="empty" name="empty"
v-bind="slotProps" v-bind="slotProps"
/> />
</template> </template>
</SelectableList> </SelectableList>
<div v-if="!single_page"> <div v-if="!singlePage">
<button <button
v-if="can_load_more" v-if="canLoadMore"
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="load_more" @click="loadMore"
> >
{{ $t('page_list.load_more') }} {{ $t('page_list.load_more') }}
</button> </button>

View file

@ -4,16 +4,16 @@ import PageList from 'src/components/page_list/page_list.vue'
import AdminStatusCard from 'src/components/settings_modal/admin_tabs/admin_status_card.vue' import AdminStatusCard from 'src/components/settings_modal/admin_tabs/admin_status_card.vue'
const AdminCard = { const AdminCard = {
props: ['user_details'], props: ['userDetails'],
data () { data () {
return { return {
progress: false, progress: false,
top_level_expanded: false, topLevelExpanded: false,
json_expanded: false, jsonExpanded: false,
timeline_expanded: false, timelineExpanded: false,
just_approved: false, justApproved: false,
just_confirmed: false, justConfirmed: false,
just_deleted: false, justDeleted: false,
} }
}, },
computed: { computed: {
@ -21,45 +21,45 @@ const AdminCard = {
return typeof(this.user) !== 'undefined' return typeof(this.user) !== 'undefined'
}, },
user () { user () {
return this.$store.getters.findUser(this.user_details.id) return this.$store.getters.findUser(this.userDetails.id)
}, },
relationship () { relationship () {
return this.$store.getters.relationship(this.user_details.id) return this.$store.getters.relationship(this.userDetails.id)
}, },
is_local () { isLocal () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (typeof(u) !== 'undefined') { if (typeof(u) !== 'undefined') {
return u.is_local === true return u.is_local === true
} }
return false return false
}, },
is_admin () { isAdmin () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (typeof(u) !== 'undefined') { if (typeof(u) !== 'undefined') {
return u.rights.admin === true return u.rights.admin === true
} }
return false return false
}, },
is_moderator () { isModerator () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (typeof(u) !== 'undefined') { if (typeof(u) !== 'undefined') {
return u.rights.moderator === true return u.rights.moderator === true
} }
return false return false
}, },
is_activated () { isActivated () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (typeof(u) !== 'undefined') { if (typeof(u) !== 'undefined') {
return u.deactivated === false return u.deactivated === false
} }
return false return false
}, },
is_confirmed () { isConfirmed () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
return (u._original.pleroma.is_confirmed === true) || (this.just_confirmed === true) return (u._original.pleroma.is_confirmed === true) || (this.justConfirmed === true)
}, },
is_approved () { isApproved () {
return (this.user_details._original.is_approved === true) || (this.just_approved === true) return (this.userDetails._original.is_approved === true) || (this.justApproved === true)
} }
}, },
components: { components: {
@ -69,62 +69,62 @@ const AdminCard = {
AdminStatusCard, AdminStatusCard,
}, },
methods: { methods: {
toggle_admin (v) { toggleAdmin (v) {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (v === true) { if (v === true) {
this.$store.dispatch('adminAddUserToAdminGroup', u) this.$store.dispatch('adminAddUserToAdminGroup', u)
} else { } else {
this.$store.dispatch('adminRemoveUserFromAdminGroup', u) this.$store.dispatch('adminRemoveUserFromAdminGroup', u)
} }
}, },
toggle_moderator (v) { toggleModerator (v) {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (v === true) { if (v === true) {
this.$store.dispatch('adminAddUserToModeratorGroup', u) this.$store.dispatch('adminAddUserToModeratorGroup', u)
} else { } else {
this.$store.dispatch('adminRemoveUserFromModeratorGroup', u) this.$store.dispatch('adminRemoveUserFromModeratorGroup', u)
} }
}, },
toggle_activation (v) { toggleActivation (v) {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
if (v === true) { if (v === true) {
this.$store.dispatch('adminActivateUser', u) this.$store.dispatch('adminActivateUser', u)
} else { } else {
this.$store.dispatch('adminDeactivateUser', u) this.$store.dispatch('adminDeactivateUser', u)
} }
}, },
confirm_user () { confirmUser () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
this.$store.dispatch('adminConfirmUser', u) this.$store.dispatch('adminConfirmUser', u)
this.just_confirmed = true this.just_confirmed = true
}, },
resend_confirmation_email () { resendConfirmationEmail () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
this.$store.dispatch('adminResendConfirmationEmail', u) this.$store.dispatch('adminResendConfirmationEmail', u)
}, },
toggle_approval () { toggleApproval () {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
this.$store.dispatch('adminApproveUser', u) this.$store.dispatch('adminApproveUser', u)
}, },
force_update_user () { forceUpdateUser () {
this.$store.dispatch('fetchUser', this.user_details.id) this.$store.dispatch('fetchUser', this.userDetails.id)
}, },
delete_selection () { deleteSelection () {
const l = this.$refs.timelineList const l = this.$refs.timelineList
const s = l.getSelected() const s = l.getSelected()
s.forEach(p => this.$store.dispatch('deleteStatus', p)) s.forEach(p => this.$store.dispatch('deleteStatus', p))
l.reset() l.reset()
}, },
delete_user () { deleteUser () {
if (!this.just_deleted) { if (!this.justDeleted) {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
this.$store.dispatch('adminDeleteUser', u) this.$store.dispatch('adminDeleteUser', u)
this.just_deleted = true this.justDeleted = true
} }
}, },
fetch_statuses (store, opts) { fetchStatuses (store, opts) {
const u = this.$store.getters.findUser(this.user_details.id) const u = this.$store.getters.findUser(this.userDetails.id)
const res = store.dispatch('adminListStatuses', { user: u, opts: { page_size: opts.pageSize, godmode: true, with_reblogs: true}}) const res = store.dispatch('adminListStatuses', { user: u, opts: { pageSize: opts.pageSize, godmode: true, withReblogs: true}})
return Promise.resolve(res.then(r => r.activities)) return Promise.resolve(res.then(r => r.activities))
} }
} }

View file

@ -1,16 +1,16 @@
<template> <template>
<div v-if="!just_deleted"> <div v-if="!justDeleted">
<div v-if="!isLoaded"> <div v-if="!isLoaded">
{{ $t('admin_dash.users.loading_user') }} {{ $t('admin_dash.users.loading_user') }}
</div> </div>
<div v-else> <div v-else>
<div v-if="user_details.id !== $store.state.users.currentUser.id"> <div v-if="userDetails.id !== $store.state.users.currentUser.id">
<BasicUserCard :user="user" /> <BasicUserCard :user="user" />
<div v-if="!top_level_expanded"> <div v-if="!topLevelExpanded">
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="top_level_expanded = true" @click="topLevelExpanded = true"
> >
{{ $t('admin_dash.users.expand_user') }} {{ $t('admin_dash.users.expand_user') }}
</button> </button>
@ -23,68 +23,68 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="top_level_expanded = false" @click="topLevelExpanded = false"
> >
{{ $t('admin_dash.users.collapse_user') }} {{ $t('admin_dash.users.collapse_user') }}
</button> </button>
</li> </li>
<li <li
v-if="is_local" v-if="isLocal"
> >
<Checkbox <Checkbox
:model-value="is_admin" :model-value="isAdmin"
@update:model-value="v => toggle_admin(v)" @update:model-value="v => toggleAdmin(v)"
> >
{{ $t('admin_dash.users.is_admin') }} {{ $t('admin_dash.users.is_admin') }}
</Checkbox> </Checkbox>
</li> </li>
<li <li
v-if="is_local" v-if="isLocal"
> >
<Checkbox <Checkbox
:model-value="is_moderator" :model-value="isModerator"
@update:model-value="v => toggle_moderator(v)" @update:model-value="v => toggleModerator(v)"
> >
{{ $t('admin_dash.users.is_moderator') }} {{ $t('admin_dash.users.is_moderator') }}
</Checkbox> </Checkbox>
</li> </li>
<li <li
v-if="is_local && !just_confirmed && !is_confirmed" v-if="isLocal && !justConfirmed && !isConfirmed"
> >
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="confirm_user()" @click="confirmUser()"
> >
{{ $t('admin_dash.users.is_confirmed') }} {{ $t('admin_dash.users.is_confirmed') }}
</button> </button>
</li> </li>
<li <li
v-if="is_local && !just_confirmed && !is_confirmed" v-if="isLocal && !justConfirmed && !isConfirmed"
> >
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="resend_confirmation_email()" @click="resendConfirmationEmail()"
> >
{{ $t('admin_dash.users.resend_confirmation_email') }} {{ $t('admin_dash.users.resend_confirmation_email') }}
</button> </button>
</li> </li>
<li <li
v-if="is_local && !is_approved" v-if="isLocal && !isApproved"
> >
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="toggle_approval(true)" @click="toggleApproval(true)"
> >
{{ $t('admin_dash.users.approve') }} {{ $t('admin_dash.users.approve') }}
</button> </button>
</li> </li>
<li> <li>
<Checkbox <Checkbox
:model-value="is_activated" :model-value="isActivated"
@update:model-value="v => toggle_activation(v)" @update:model-value="v => toggleActivation(v)"
> >
{{ $t('admin_dash.users.is_active') }} {{ $t('admin_dash.users.is_active') }}
</Checkbox> </Checkbox>
@ -93,18 +93,18 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="delete_user()" @click="deleteUser()"
> >
{{ $t('admin_dash.users.delete_user') }} {{ $t('admin_dash.users.delete_user') }}
</button> </button>
</li> </li>
</ul> </ul>
</div> </div>
<div v-if="!timeline_expanded"> <div v-if="!timelineExpanded">
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="timeline_expanded = true" @click="timelineExpanded = true"
> >
{{ $t('admin_dash.users.expand_timeline') }} {{ $t('admin_dash.users.expand_timeline') }}
</button> </button>
@ -116,7 +116,7 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="timeline_expanded = false" @click="timelineExpanded = false"
> >
{{ $t('admin_dash.users.collapse_timeline') }} {{ $t('admin_dash.users.collapse_timeline') }}
</button> </button>
@ -124,22 +124,22 @@
ref="timelineList" ref="timelineList"
:refresh="true" :refresh="true"
:get-key="i => i" :get-key="i => i"
:box_only="true" :box-only="true"
:page_size="20" :page-size="20"
:single_page="true" :single-page="true"
:fetch_page="(store, opts) => fetch_statuses(store, opts)" :fetch-page="(store, opts) => fetchStatuses(store, opts)"
> >
<template #header> <template #header>
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="delete_selection" @click="deleteSelection"
> >
{{ $t('admin_dash.users.delete') }} {{ $t('admin_dash.users.delete') }}
</button> </button>
</template> </template>
<template #item="{item}"> <template #item="{item}">
<AdminStatusCard :status_details="item" /> <AdminStatusCard :status-details="item" />
</template> </template>
<template #empty> <template #empty>
<p> {{ $t('admin_dash.users.user_has_no_posts') }} </p> <p> {{ $t('admin_dash.users.user_has_no_posts') }} </p>
@ -149,11 +149,11 @@
</template> </template>
</PageList> </PageList>
</div> </div>
<div v-if="!json_expanded"> <div v-if="!jsonExpanded">
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="json_expanded = true" @click="jsonExpanded = true"
> >
{{ $t('admin_dash.users.expand_raw_info') }} {{ $t('admin_dash.users.expand_raw_info') }}
</button> </button>
@ -165,7 +165,7 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="json_expanded = false" @click="jsonExpanded = false"
> >
{{ $t('admin_dash.users.collapse_raw_info') }} {{ $t('admin_dash.users.collapse_raw_info') }}
</button> </button>

View file

@ -4,27 +4,27 @@ import Status from 'src/components/status/status.vue'
import { parseStatus } from 'src/services/entity_normalizer/entity_normalizer.service.js' import { parseStatus } from 'src/services/entity_normalizer/entity_normalizer.service.js'
const AdminStatusCard = { const AdminStatusCard = {
props: ['status_details'], props: ['statusDetails'],
data () { data () {
return { return {
json_expanded: false, jsonExpanded: false,
status_cache: undefined, statusCache: undefined,
} }
}, },
computed: { computed: {
is_sensitive () { isSensitive () {
return this.status_details.sensitive === true return this.statusDetails.sensitive === true
}, },
visibility () { visibility () {
return this.status_details.visibility return this.statusDetails.visibility
} }
}, },
methods: { methods: {
change_sensitivity (v) { changeSensitivity (v) {
this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.status_details.id, sensitive: v }}).then(res => parseStatus(res)).then(s => this.status_cache = s) this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.statusDetails.id, sensitive: v }}).then(res => parseStatus(res)).then(s => this.statusCache = s)
}, },
change_visibility (v) { changeVisibility (v) {
this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.status_details.id, visibility: v }}).then(res => parseStatus(res)).then(s => this.status_cache = s) this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.statusDetails.id, visibility: v }}).then(res => parseStatus(res)).then(s => this.statusCache = s)
} }
}, },
components: { components: {
@ -33,7 +33,7 @@ const AdminStatusCard = {
Status, Status,
}, },
mounted () { mounted () {
this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.status_details.id }}).then(res => parseStatus(res)).then(s => this.status_cache = s) this.$store.dispatch('adminChangeStatusScope', { opts: { id: this.statusDetails.id }}).then(res => parseStatus(res)).then(s => this.statusCache = s)
} }
} }

View file

@ -5,13 +5,13 @@
class="setting-list" class="setting-list"
> >
<li> <li>
<span> {{ $t('admin_dash.users.status_id') }}: {{ status_details.id }} </span> <span> {{ $t('admin_dash.users.status_id') }}: {{ statusDetails.id }} </span>
</li> </li>
<li> <li>
<span> {{ $t('admin_dash.users.created_at') }}: {{ new Date(status_details.created_at).toLocaleString() }} </span> <span> {{ $t('admin_dash.users.created_at') }}: {{ new Date(statusDetails.created_at).toLocaleString() }} </span>
</li> </li>
<li> <li>
<span v-if="status_details.edited_at !== null"> {{ $t('admin_dash.users.edited_at') }}: {{ new Date(status_details.edited_at).toLocaleString() }} </span> <span v-if="statusDetails.edited_at !== null"> {{ $t('admin_dash.users.edited_at') }}: {{ new Date(statusDetails.edited_at).toLocaleString() }} </span>
</li> </li>
</ul> </ul>
<h2> {{ $t('admin_dash.users.title_content') }}: </h2> <h2> {{ $t('admin_dash.users.title_content') }}: </h2>
@ -20,10 +20,10 @@
> >
<li> <li>
<Status <Status
v-if="typeof(status_cache) !== 'undefined'" v-if="typeof(statusCache) !== 'undefined'"
class="Notification" class="Notification"
:compact="true" :compact="true"
:statusoid="status_cache" :statusoid="statusCache"
@interacted="false" @interacted="false"
/> />
</li> </li>
@ -31,15 +31,15 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="delete_status(status.id)" @click="deleteStatus(status.id)"
> >
{{ $t('admin_dash.users.delete_status') }} {{ $t('admin_dash.users.delete_status') }}
</button> </button>
</li> </li>
<li> <li>
<Checkbox <Checkbox
:model-value="is_sensitive" :model-value="isSensitive"
@update:model-value="v => change_sensitivity(v)" @update:model-value="v => changeSensitivity(v)"
> >
{{ $t('admin_dash.users.content_nsfw') }} {{ $t('admin_dash.users.content_nsfw') }}
</Checkbox> </Checkbox>
@ -47,7 +47,7 @@
<li> <li>
<Select <Select
:model-value="visibility" :model-value="visibility"
@update:model-value="v => change_visibility(v)" @update:model-value="v => changeVisibility(v)"
> >
<option <option
value="public" value="public"
@ -72,14 +72,14 @@
</Select> </Select>
</li> </li>
<li> <li>
<a :href="status_details.url"> {{ $t('admin_dash.users.link_source') }} </a> <a :href="statusDetails.url"> {{ $t('admin_dash.users.link_source') }} </a>
</li> </li>
</ul> </ul>
<div v-if="!json_expanded"> <div v-if="!jsonExpanded">
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="json_expanded = !json_expanded" @click="jsonExpanded = !jsonExpanded"
> >
{{ $t('admin_dash.users.expand_raw_info') }} {{ $t('admin_dash.users.expand_raw_info') }}
</button> </button>
@ -88,12 +88,12 @@
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="json_expanded = !json_expanded" @click="jsonExpanded = !jsonExpanded"
> >
{{ $t('admin_dash.users.collapse_raw_info') }} {{ $t('admin_dash.users.collapse_raw_info') }}
</button> </button>
<h2> {{ $t('admin_dash.users.title_details') }} </h2> <h2> {{ $t('admin_dash.users.title_details') }} </h2>
<pre> {{ JSON.stringify(status_details, null, 2) }} </pre> <pre> {{ JSON.stringify(statusDetails, null, 2) }} </pre>
</div> </div>
</div> </div>
</template> </template>

View file

@ -16,34 +16,36 @@ const UsersTab = {
data() { data() {
return { return {
init: false, init: false,
filters_origin: 'local', filtersOrigin: 'local',
filters_activity: 'all', filtersActivity: 'all',
filters_permission: 'all', filtersPermission: 'all',
filters_query: '', filtersNeedApproval: false,
filters_name: '', filtersUnconfirmed: false,
filters_email: '', filtersQuery: '',
filtersName: '',
filtersEmail: '',
expandedUser: null, expandedUser: null,
loading: false loading: false
} }
}, },
computed: { computed: {
filters_is_admin () { filtersIsAdmin () {
return this.filters_permission === 'admin' || this.filters_permission === 'modsnadmins' return this.filtersPermission === 'admin' || this.filtersPermission === 'modsnadmins'
}, },
filters_is_moderator () { filtersIsModerator () {
return this.filters_permission === 'moderator' || this.filters_permission === 'modsnadmins' return this.filtersPermission === 'moderator' || this.filtersPermission === 'modsnadmins'
}, },
filters_active () { filtersActive () {
return this.filters_activity === 'active' return this.filtersActivity === 'active'
}, },
filters_deactivated () { filtersDeactivated () {
return this.filters_activity === 'deactivated' return this.filtersActivity === 'deactivated'
}, },
filters_local () { filtersLocal () {
return this.filters_origin === 'local' return this.filtersOrigin === 'local'
}, },
filters_external () { filtersExternal () {
return this.filters_origin === 'external' return this.filtersOrigin === 'external'
} }
}, },
components: { components: {
@ -56,36 +58,38 @@ const UsersTab = {
TabSwitcher, TabSwitcher,
}, },
methods: { methods: {
fetch_page (store, opts) { fetchPage (store, opts) {
if(!this.init) return new Promise(() => []) if(!this.init) return new Promise(() => [])
const filters = { const filters = {
is_admin: this.filters_is_admin, isAdmin: this.filtersIsAdmin,
is_moderator: this.filters_is_moderator, isModerator: this.filtersIsModerator,
active: this.filters_active, active: this.filtersActive,
deactivated: this.filters_deactivated, deactivated: this.filtersDeactivated,
local: this.filters_local, local: this.filtersLocal,
external: this.filters_external external: this.filtersExternal,
needApproval: this.filtersNeedApproval,
unconfirmed: this.filtersUnconfirmeUnconfirmed
} }
const users = store.dispatch('fetchAdminUsers', { ...opts, ...{ const users = store.dispatch('fetchAdminUsers', { ...opts, ...{
query: this.filters_query, query: this.filtersQuery,
filters, filters,
name: this.filters_name, name: this.filtersName,
email: this.filters_email email: this.filtersEmail
}}) }})
return users return users
}, },
reset () { reset () {
this.$refs.userList.reset() this.$refs.userList.reset()
}, },
activate_selection () { activateSelection () {
const s = this.$refs.userList.getSelected() const s = this.$refs.userList.getSelected()
s.forEach(u => this.$store.dispatch('adminActivateUser', this.$store.getters.findUser(u.id))) s.forEach(u => this.$store.dispatch('adminActivateUser', this.$store.getters.findUser(u.id)))
}, },
deactivate_selection () { deactivateSelection () {
const s = this.$refs.userList.getSelected() const s = this.$refs.userList.getSelected()
s.forEach(u => this.$store.dispatch('adminDeactivateUser', this.$store.getters.findUser(u.id))) s.forEach(u => this.$store.dispatch('adminDeactivateUser', this.$store.getters.findUser(u.id)))
}, },
delete_selection () { deleteSelection () {
const s = this.$refs.userList.getSelected() const s = this.$refs.userList.getSelected()
s.forEach(u => this.$store.dispatch('adminDeleteUser', this.$store.getters.findUser(u.id))) s.forEach(u => this.$store.dispatch('adminDeleteUser', this.$store.getters.findUser(u.id)))
this.reset() this.reset()

View file

@ -7,7 +7,7 @@
> >
<li> <li>
<input <input
v-model="filters_query" v-model="filtersQuery"
:placeholder="$t('admin_dash.users.placeholder_query')" :placeholder="$t('admin_dash.users.placeholder_query')"
class="input string-input" class="input string-input"
@input="reset()" @input="reset()"
@ -15,7 +15,7 @@
</li> </li>
<li> <li>
<input <input
v-model="filters_name" v-model="filtersName"
:placeholder="$t('admin_dash.users.placeholder_name')" :placeholder="$t('admin_dash.users.placeholder_name')"
class="input string-input" class="input string-input"
@input="reset()" @input="reset()"
@ -23,7 +23,7 @@
</li> </li>
<li> <li>
<input <input
v-model="filters_email" v-model="filtersEmail"
:placeholder="$t('admin_dash.users.placeholder_email')" :placeholder="$t('admin_dash.users.placeholder_email')"
class="input string-input" class="input string-input"
@input="reset()" @input="reset()"
@ -31,7 +31,7 @@
</li> </li>
<li> <li>
<Select <Select
v-model="filters_origin" v-model="filtersOrigin"
@update:model-value="reset" @update:model-value="reset"
> >
<option <option
@ -53,7 +53,7 @@
</li> </li>
<li> <li>
<Select <Select
v-model="filters_activity" v-model="filtersActivity"
@update:model-value="reset" @update:model-value="reset"
> >
<option <option
@ -75,7 +75,7 @@
</li> </li>
<li> <li>
<Select <Select
v-model="filters_permission" v-model="filtersPermission"
@update:model-value="reset" @update:model-value="reset"
> >
<option <option
@ -102,14 +102,14 @@
</li> </li>
<li> <li>
<Checkbox <Checkbox
@update:model-value="v => {filters.need_approval = v; reset();}" @update:model-value="v => {filtersNneedApproval = v; reset();}"
> >
{{ $t('admin_dash.users.only_unapproved') }} {{ $t('admin_dash.users.only_unapproved') }}
</Checkbox> </Checkbox>
</li> </li>
<li> <li>
<Checkbox <Checkbox
@update:model-value="v => {filters.unconfirmed = v; reset();}" @update:model-value="v => {filtersUnconfirmed = v; reset();}"
> >
{{ $t('admin_dash.users.only_unconfirmed') }} {{ $t('admin_dash.users.only_unconfirmed') }}
</Checkbox> </Checkbox>
@ -133,35 +133,35 @@
ref="userList" ref="userList"
:refresh="true" :refresh="true"
:get-key="i => i" :get-key="i => i"
:box_only="true" :box-only="true"
:page_size="20" :page-size="20"
:fetch_page="(store, opts) => fetch_page(store, opts)" :fetch-page="(store, opts) => fetchPage(store, opts)"
> >
<template #header> <template #header>
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="activate_selection" @click="activateSelection"
> >
{{ $t('admin_dash.users.activate') }} {{ $t('admin_dash.users.activate') }}
</button> </button>
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="deactivate_selection" @click="deactivateSelection"
> >
{{ $t('admin_dash.users.deactivate') }} {{ $t('admin_dash.users.deactivate') }}
</button> </button>
<button <button
class="button button-default btn" class="button button-default btn"
type="button" type="button"
@click="delete_selection" @click="deleteSelection"
> >
{{ $t('admin_dash.users.delete') }} {{ $t('admin_dash.users.delete') }}
</button> </button>
</template> </template>
<template #item="{item}"> <template #item="{item}">
<AdminCard :user_details="item" /> <AdminCard :user-details="item" />
</template> </template>
</PageList> </PageList>
</div> </div>

View file

@ -116,34 +116,34 @@ const PLEROMA_ADMIN_CONFIG_URL = '/api/v1/pleroma/admin/config'
const PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/v1/pleroma/admin/config/descriptions' const PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/v1/pleroma/admin/config/descriptions'
const PLEROMA_ADMIN_FRONTENDS_URL = '/api/v1/pleroma/admin/frontends' const PLEROMA_ADMIN_FRONTENDS_URL = '/api/v1/pleroma/admin/frontends'
const PLEROMA_ADMIN_FRONTENDS_INSTALL_URL = '/api/v1/pleroma/admin/frontends/install' const PLEROMA_ADMIN_FRONTENDS_INSTALL_URL = '/api/v1/pleroma/admin/frontends/install'
const PLEROMA_ADMIN_USERS_URL = ({page, page_size, filters = {}, query = '', name = '', email = ''}) => { const PLEROMA_ADMIN_USERS_URL = ({page, pageSize, filters = {}, query = '', name = '', email = ''}) => {
const { const {
local = false, local = false,
external = false, external = false,
active = false, active = false,
need_approval = false, needApproval = false,
unconfirmed = false, unconfirmed = false,
deactivated = false, deactivated = false,
is_admin = true, isAdmin = true,
is_moderator = true, isModerator = true,
} = filters } = filters
const filters_str = [ const filters_str = [
local && 'local', local && 'local',
external && 'external', external && 'external',
active && 'active', active && 'active',
need_approval && 'need_approval', needApproval && 'need_approval',
unconfirmed && 'unconfirmed', unconfirmed && 'unconfirmed',
deactivated && 'deactivated', deactivated && 'deactivated',
is_admin && 'is_admin', isAdmin && 'is_admin',
is_moderator && 'is_moderator' isModerator && 'is_moderator'
].filter(x => x).join(',') ].filter(x => x).join(',')
return `/api/v1/pleroma/admin/users?page=${page}&page_size=${page_size}&filters=${filters_str}&query=${query}&name=${name}&email=${email}` return `/api/v1/pleroma/admin/users?page=${page}&page_size=${pageSize}&filters=${filters_str}&query=${query}&name=${name}&email=${email}`
} }
const PLEROMA_ADMIN_MODIFY_GROUP_URL = (nickname, group) => `/api/v1/pleroma/admin/users/${nickname}/permission_group/${group}` const PLEROMA_ADMIN_MODIFY_GROUP_URL = (nickname, group) => `/api/v1/pleroma/admin/users/${nickname}/permission_group/${group}`
const PLEROMA_ADMIN_CONFIRM_USER_URL = '/api/v1/pleroma/admin/users/confirm_email' const PLEROMA_ADMIN_CONFIRM_USER_URL = '/api/v1/pleroma/admin/users/confirm_email'
const PLEROMA_ADMIN_RESEND_CONFIRMATION_EMAIL_URL = '/api/v1/pleroma/admin/users/resend_confirmation_email' const PLEROMA_ADMIN_RESEND_CONFIRMATION_EMAIL_URL = '/api/v1/pleroma/admin/users/resend_confirmation_email'
const PLEROMA_ADMIN_APPROVE_URL = '/api/v1/pleroma/admin/users/approve' const PLEROMA_ADMIN_APPROVE_URL = '/api/v1/pleroma/admin/users/approve'
const PLEROMA_ADMIN_LIST_STATUSES_URL = (id, page_size, godmode, with_reblogs) => `/api/v1/pleroma/admin/users/${id}/statuses?page_size=${page_size}&godmode=${godmode}&with_reblogs=${with_reblogs}` const PLEROMA_ADMIN_LIST_STATUSES_URL = (id, page_size, godmode, with_reblogs) => `/api/v1/pleroma/admin/users/${id}/statuses?page_size=${pageSize}&godmode=${godmode}&with_reblogs=${withReblogs}`
const PLEROMA_ADMIN_CHANGE_STATUS_SCOPE_URL = (id) => `/api/v1/pleroma/admin/statuses/${id}` const PLEROMA_ADMIN_CHANGE_STATUS_SCOPE_URL = (id) => `/api/v1/pleroma/admin/statuses/${id}`
const PLEROMA_EMOJI_RELOAD_URL = '/api/pleroma/admin/reload_emoji' const PLEROMA_EMOJI_RELOAD_URL = '/api/pleroma/admin/reload_emoji'
@ -1563,8 +1563,8 @@ const adminApproveUser = ({user : { screen_name: nickname }, credentials }) => {
return r return r
} }
const adminListStatuses = ({user: { id }, opts: { page_size, godmode, with_reblogs }, credentials }) => { const adminListStatuses = ({user: { id }, opts: { pageSize, godmode, withReblogs }, credentials }) => {
const url = PLEROMA_ADMIN_LIST_STATUSES_URL(id, page_size, godmode, with_reblogs) const url = PLEROMA_ADMIN_LIST_STATUSES_URL(id, pageSize, godmode, withReblogs)
return promisedRequest({url: url, return promisedRequest({url: url,
credentials, credentials,
method: 'GET' method: 'GET'