wip, ignore, i just want this pushed

This commit is contained in:
luce 2025-09-09 18:36:30 +02:00
commit 3a6dac7ce5
7 changed files with 254 additions and 19 deletions

View file

@ -3,8 +3,9 @@ import ConfirmModal from './confirm_modal.vue'
export default {
props: {
callback: {
type: Function
action: {
type: Function,
require: true
},
title: {
type: String
@ -31,6 +32,10 @@ export default {
hide () {
this.showing = false
this.$emit('hide')
},
doGeneric () {
this.action()
this.hide()
}
}
}

View file

@ -4,7 +4,7 @@
:title="title"
:cancel-text="cancelText"
:confirm-text="confirmText"
@accepted="callback"
@accepted="doGeneric"
@cancelled="hide"
/>
</template>

View file

@ -3,6 +3,8 @@ import Checkbox from 'src/components/checkbox/checkbox.vue'
import PageList from 'src/components/page_list/page_list.vue'
import AdminStatusCard from 'src/components/settings_modal/admin_tabs/admin_status_card.vue'
import Modal from 'src/components/modal/modal.vue'
import Popover from 'src/components/popover/popover.vue'
import GenericConfirm from 'src/components/confirm_modal/generic_confirm.vue'
const AdminCard = {
props: {
@ -124,7 +126,9 @@ const AdminCard = {
Checkbox,
PageList,
AdminStatusCard,
Modal
Modal,
Popover,
GenericConfirm
},
methods: {
/**
@ -217,6 +221,20 @@ const AdminCard = {
const u = this.$store.getters.findUser(this.userDetails.id)
const res = store.dispatch('adminListStatuses', { user: u, opts: { pageSize: opts.pageSize, godmode: true, withReblogs: true}})
return res.then(r => r.activities)
},
/**
* ...
*/
confirmAction (box) {
this.$refs[box].show()
this.$refs.dropdownuser.hidePopover()
},
/**
* ...
*/
actionConfirmed (action) {
console.log(action)
this.$store.dispatch(action, this.$store.getters.findUser(this.userDetails.id))
}
}
}

View file

@ -0,0 +1,15 @@
.inline-layout {
display: flex;
align-items: center;
width: 100%;
gap: 8px;
}
.alert {
text-shadow: none;
}
.user-role {
display: inline-block;
vertical-align: baseline;
}

View file

@ -4,20 +4,194 @@
{{ $t('admin_dash.users.loading_user') }}
</div>
<div v-else>
<BasicUserCard :user="user" />
<button
class="button button-default btn"
type="button"
@click="detailsExpanded = true"
>
{{ $t('admin_dash.users.details') }}
</button>
<div class="inline-layout">
<BasicUserCard :user="user" />
<label
v-if="isAdmin"
class="alert neutral user-role"
>
{{ $t('admin_dash.users.indicator_admin') }}
</label>
<label
v-if="isModerator"
class="alert neutral user-role"
>
{{ $t('admin_dash.users.indicator_moderator') }}
</label>
<label
v-if="isActivated"
class="alert info user-role"
>
{{ $t('admin_dash.users.indicator_active') }}
</label>
<label
v-if="!isActivated"
class="alert error user-role"
>
{{ $t('admin_dash.users.indicator_deactivated') }}
</label>
<label
v-if="isConfirmed"
class="alert neutral user-role"
>
{{ $t('admin_dash.users.indicator_confirmed') }}
</label>
<button
class="button button-default btn"
type="button"
@click="detailsExpanded = true"
>
{{ $t('admin_dash.users.title_details') }}
</button>
<Popover
ref="dropdownuser"
trigger="click"
placement="top"
>
<template #trigger>
<button
class="button button-default btn"
>
{{ $t('admin_dash.users.title_actions') }}
</button>
</template>
<template #content>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmActivate')"
>
{{ $t('admin_dash.users.activate') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmDeactivate')"
>
{{ $t('admin_dash.users.deactivate') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmDeleteUser')"
>
{{ $t('admin_dash.users.delete') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmGrantAdmin')"
>
{{ $t('admin_dash.users.grant_admin') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmRevokeAdmin')"
>
{{ $t('admin_dash.users.revoke_admin') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmGrantModerator')"
>
{{ $t('admin_dash.users.grant_moderator') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmRevokeModerator')"
>
{{ $t('admin_dash.users.revoke_moderator') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmApprove')"
>
{{ $t('admin_dash.users.approve') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmConfirm')"
>
{{ $t('admin_dash.users.confirm') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmResendConfirmationEmail')"
>
{{ $t('admin_dash.users.resend_confirmation_email') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmRequirePasswordChange')"
>
{{ $t('admin_dash.users.require_password_change') }}
</button>
</div>
</div>
<div class="dropdown-menu">
<div class="menu-item dropdown-item">
<button
class="main-button"
@click="confirmAction('confirmDisableMFA')"
>
{{ $t('admin_dash.users.disable_mfa') }}
</button>
</div>
</div>
</template>
</Popover>
</div>
<div
v-if="detailsExpanded"
>
<Modal
:no-background="false"
@backdrop-clicked="() => { detailsExpanded = false }"
>
<div style="background-color: rgb(0 0 0 / 50%)">
<ul class="setting-list">
<li> show statuses </li>
</ul>
</div>
<!--
<ul class="setting-list">
<li
v-if="isLocal"
@ -90,8 +264,10 @@
</button>
</li>
</ul>
-->
</Modal>
</div>
<!--
<div v-if="!timelineExpanded">
<button
class="button button-default btn"
@ -200,8 +376,23 @@
<h2> {{ $t('admin_dash.users.title_details') }} </h2>
<pre> {{ JSON.stringify(user_details, null, 2) }} </pre>
</div>
-->
</div>
<GenericConfirm
ref="confirmActivate"
:title="$t('admin_dash.users.bulk_actions.activate')"
:cancel-text="$t('admin_dash.users.bulk_actions.no')"
:confirm-text="$t('admin_dash.users.bulk_actions.yes')"
:action="() => actionConfirmed('adminActivateUser')"
/>
<GenericConfirm
ref="confirmDeactivate"
:title="$t('admin_dash.users.bulk_actions.deactivate')"
:cancel-text="$t('admin_dash.users.bulk_actions.no')"
:confirm-text="$t('admin_dash.users.bulk_actions.yes')"
:action="() => actionConfirmed('adminDeactivateUser')"
/>
<!--<GenericConfirm
ref="confirmDelete"
:title="$t('admin_dash.users.bulk_actions.activate')"
:cancel-text="$t('admin_dash.users.bulk_actions.no')"
@ -249,13 +440,13 @@
:cancel-text="$t('admin_dash.users.bulk_actions.no')"
:confirm-text="$t('admin_dash.users.bulk_actions.yes')"
@callback="selectionConfirmed('adminChangeStatusScope', { visiblity: 'direct' })"
/>
/>-->
</div>
</template>
<script src="./admin_card.js"></script>
<style lang="scss">
<style lang="scss" src="./admin_card.scss"></style>
<!--<style lang="scss">
.admin-card-content-container {
margin-top: 0.5em;
text-align: right;
@ -264,4 +455,4 @@
width: 10em;
}
}
</style>
</style>-->

View file

@ -109,8 +109,7 @@ const UsersTab = {
name: this.filtersName,
email: this.filtersEmail
}}
const users = store.dispatch('fetchAdminUsers', nopts)
return users
return store.dispatch('fetchAdminUsers', nopts)
},
/**
* reset the userlist explicitly

View file

@ -1229,7 +1229,14 @@
"title_database": "Database",
"title_details": "Details",
"title_users": "Users",
"user_has_no_posts": "User has no posts"
"title_actions": "Actions",
"user_has_no_posts": "User has no posts",
"indicator_admin": "Admin",
"indicator_moderator": "Moderator",
"indicator_active": "Active",
"indicator_deactivated": "Deactivated",
"indicator_approved": "Approved",
"indicator_confirmed": "Confirmed"
},
"limits": {
"arbitrary_limits": "Arbitrary limits",