summaryrefslogtreecommitdiff
path: root/packages/client/src
diff options
context:
space:
mode:
authorCyberRex <hspwinx86@gmail.com>2022-07-05 00:21:01 +0900
committerGitHub <noreply@github.com>2022-07-05 00:21:01 +0900
commitcd07eb222e1990b30cae74b5fab9f12277322ef6 (patch)
tree5fdcbffd59e009ad667d68705e27a77f50065b64 /packages/client/src
parentfix lint @typescript-eslint/ban-types (diff)
downloadsharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.tar.gz
sharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.tar.bz2
sharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.zip
Add additional drive capacity change support (#8867)
* Add additional drive capacity change support * Update packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts Co-authored-by: Johann150 <johann@qwertqwefsday.eu> * :art: * show instance default capacity in placeholder * fix * update api/drive * fix * remove : * fix lint Co-authored-by: Johann150 <johann@qwertqwefsday.eu> Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'packages/client/src')
-rw-r--r--packages/client/src/pages/user-info.vue38
1 files changed, 35 insertions, 3 deletions
diff --git a/packages/client/src/pages/user-info.vue b/packages/client/src/pages/user-info.vue
index 204ece7eb6..51d224dfdd 100644
--- a/packages/client/src/pages/user-info.vue
+++ b/packages/client/src/pages/user-info.vue
@@ -85,6 +85,17 @@
</FormSection>
</div>
<div v-else-if="tab === 'moderation'" class="_formRoot">
+ <FormSection>
+ <template #label>Drive Capacity Override</template>
+
+ <FormInput v-if="user.host == null" v-model="driveCapacityOverrideMb" inline :manual-save="true" type="number" :placeholder="i18n.t('defaultValueIs', { value: instance.driveCapacityPerLocalUserMb })" @update:model-value="applyDriveCapacityOverride">
+ <template #label>{{ i18n.ts.driveCapOverrideLabel }}</template>
+ <template #suffix>MB</template>
+ <template #caption>
+ {{ i18n.ts.driveCapOverrideCaption }}
+ </template>
+ </FormInput>
+ </FormSection>
<FormSwitch v-if="user.host == null && $i.isAdmin && (moderator || !user.isAdmin)" v-model="moderator" class="_formBlock" @update:modelValue="toggleModerator">{{ $ts.moderator }}</FormSwitch>
<FormSwitch v-model="silenced" class="_formBlock" @update:modelValue="toggleSilence">{{ $ts.silence }}</FormSwitch>
<FormSwitch v-model="suspended" class="_formBlock" @update:modelValue="toggleSuspend">{{ $ts.suspend }}</FormSwitch>
@@ -141,7 +152,7 @@
</template>
<script lang="ts" setup>
-import { computed, defineAsyncComponent, defineComponent, watch } from 'vue';
+import { computed, watch } from 'vue';
import * as misskey from 'misskey-js';
import MkChart from '@/components/chart.vue';
import MkObjectView from '@/components/object-view.vue';
@@ -150,6 +161,8 @@ import FormSwitch from '@/components/form/switch.vue';
import FormLink from '@/components/form/link.vue';
import FormSection from '@/components/form/section.vue';
import FormButton from '@/components/ui/button.vue';
+import FormInput from '@/components/form/input.vue';
+import FormSplit from '@/components/form/split.vue';
import FormFolder from '@/components/form/folder.vue';
import MkKeyValue from '@/components/key-value.vue';
import MkSelect from '@/components/form/select.vue';
@@ -164,6 +177,7 @@ import { userPage, acct } from '@/filters/user';
import { definePageMetadata } from '@/scripts/page-metadata';
import { i18n } from '@/i18n';
import { iAmAdmin, iAmModerator } from '@/account';
+import { instance } from '@/instance';
const props = defineProps<{
userId: string;
@@ -172,13 +186,14 @@ const props = defineProps<{
let tab = $ref('overview');
let chartSrc = $ref('per-user-notes');
let user = $ref<null | misskey.entities.UserDetailed>();
-let init = $ref();
+let init = $ref<ReturnType<typeof createFetcher>>();
let info = $ref();
let ips = $ref(null);
let ap = $ref(null);
let moderator = $ref(false);
let silenced = $ref(false);
let suspended = $ref(false);
+let driveCapacityOverrideMb: number | null = $ref(0);
let moderationNote = $ref('');
const filesPagination = {
endpoint: 'admin/drive/files' as const,
@@ -203,6 +218,7 @@ function createFetcher() {
moderator = info.isModerator;
silenced = info.isSilenced;
suspended = info.isSuspended;
+ driveCapacityOverrideMb = user.driveCapacityOverrideMb;
moderationNote = info.moderationNote;
watch($$(moderationNote), async () => {
@@ -289,6 +305,22 @@ async function deleteAllFiles() {
await refreshUser();
}
+async function applyDriveCapacityOverride() {
+ let driveCapOrMb = driveCapacityOverrideMb;
+ if (driveCapacityOverrideMb && driveCapacityOverrideMb < 0) {
+ driveCapOrMb = null;
+ }
+ try {
+ await os.apiWithDialog('admin/drive-capacity-override', { userId: user.id, overrideMb: driveCapOrMb });
+ await refreshUser();
+ } catch (e) {
+ os.alert({
+ type: 'error',
+ text: e.toString(),
+ });
+ }
+}
+
async function deleteAccount() {
const confirm = await os.confirm({
type: 'warning',
@@ -319,7 +351,7 @@ watch(() => props.userId, () => {
immediate: true,
});
-watch(() => user, () => {
+watch($$(user), () => {
os.api('ap/get', {
uri: user.uri ?? `${url}/users/${user.id}`,
}).then(res => {