fix(client): コントロールパネルのユーザー、ファイルにて、インスタンスの表示範囲切り替えが機能しない問題を修正

Fix #8252
This commit is contained in:
syuilo 2022-02-09 13:38:54 +09:00
parent ff59984ff4
commit 5c5d3c1a24
3 changed files with 124 additions and 156 deletions

View file

@ -35,6 +35,7 @@ You should also include the user name that made the change.
- Client: UIのサイズがおかしくなる問題の修正 @tamaina - Client: UIのサイズがおかしくなる問題の修正 @tamaina
- Client: Setting instance information of notes to always show breaks the timeline @Johann150 - Client: Setting instance information of notes to always show breaks the timeline @Johann150
- Client: 環境に依っては返信する際のカーソル位置が正しくない問題を修正 @syuilo - Client: 環境に依っては返信する際のカーソル位置が正しくない問題を修正 @syuilo
- Client: コントロールパネルのユーザー、ファイルにて、インスタンスの表示範囲切り替えが機能しない問題を修正 @syuilo
- Client: Follows/Followers Visibility changes won't be saved unless clicking on an other checkbox @Johann150 - Client: Follows/Followers Visibility changes won't be saved unless clicking on an other checkbox @Johann150
- API: Fix API cast @mei23 - API: Fix API cast @mei23
- チャートの定期resyncが動作していない問題を修正 @syuilo - チャートの定期resyncが動作していない問題を修正 @syuilo

View file

@ -28,7 +28,7 @@
<template #label>MIME type</template> <template #label>MIME type</template>
</MkInput> </MkInput>
</div> </div>
<MkPagination v-slot="{items}" ref="files" :pagination="pagination" class="urempief"> <MkPagination v-slot="{items}" :pagination="pagination" class="urempief">
<button v-for="file in items" :key="file.id" class="file _panel _button _gap" @click="show(file, $event)"> <button v-for="file in items" :key="file.id" class="file _panel _button _gap" @click="show(file, $event)">
<MkDriveFileThumbnail class="thumbnail" :file="file" fit="contain"/> <MkDriveFileThumbnail class="thumbnail" :file="file" fit="contain"/>
<div class="body"> <div class="body">
@ -54,8 +54,8 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { computed, defineComponent } from 'vue'; import { computed } from 'vue';
import MkButton from '@/components/ui/button.vue'; import MkButton from '@/components/ui/button.vue';
import MkInput from '@/components/form/input.vue'; import MkInput from '@/components/form/input.vue';
import MkSelect from '@/components/form/select.vue'; import MkSelect from '@/components/form/select.vue';
@ -65,80 +65,63 @@ import MkDriveFileThumbnail from '@/components/drive-file-thumbnail.vue';
import bytes from '@/filters/bytes'; import bytes from '@/filters/bytes';
import * as os from '@/os'; import * as os from '@/os';
import * as symbols from '@/symbols'; import * as symbols from '@/symbols';
import { i18n } from '@/i18n';
export default defineComponent({ let q = $ref(null);
components: { let origin = $ref('local');
MkButton, let type = $ref(null);
MkInput, let searchHost = $ref('');
MkSelect, const pagination = {
MkPagination, endpoint: 'admin/drive/files' as const,
MkContainer, limit: 10,
MkDriveFileThumbnail, params: computed(() => ({
}, type: (type && type !== '') ? type : null,
origin: origin,
hostname: (searchHost && searchHost !== '') ? searchHost : null,
})),
};
emits: ['info'], function clear() {
os.confirm({
type: 'warning',
text: i18n.ts.clearCachedFilesConfirm,
}).then(({ canceled }) => {
if (canceled) return;
data() { os.apiWithDialog('admin/drive/clean-remote-files', {});
return { });
[symbols.PAGE_INFO]: { }
title: this.$ts.files,
icon: 'fas fa-cloud', function show(file) {
bg: 'var(--bg)', os.popup(import('./file-dialog.vue'), {
actions: [{ fileId: file.id
text: this.$ts.clearCachedFiles, }, {}, 'closed');
icon: 'fas fa-trash-alt', }
handler: this.clear
}] function find() {
}, os.api('admin/drive/show-file', q.startsWith('http://') || q.startsWith('https://') ? { url: q.trim() } : { fileId: q.trim() }).then(file => {
q: null, show(file);
origin: 'local', }).catch(err => {
type: null, if (err.code === 'NO_SUCH_FILE') {
searchHost: '', os.alert({
pagination: { type: 'error',
endpoint: 'admin/drive/files' as const, text: i18n.ts.notFound
limit: 10, });
params: computed(() => ({
type: (this.type && this.type !== '') ? this.type : null,
origin: this.origin,
hostname: (this.searchHost && this.searchHost !== '') ? this.searchHost : null,
})),
},
} }
}, });
}
methods: { defineExpose({
clear() { [symbols.PAGE_INFO]: computed(() => ({
os.confirm({ title: i18n.ts.files,
type: 'warning', icon: 'fas fa-cloud',
text: this.$ts.clearCachedFilesConfirm, bg: 'var(--bg)',
}).then(({ canceled }) => { actions: [{
if (canceled) return; text: i18n.ts.clearCachedFiles,
icon: 'fas fa-trash-alt',
os.apiWithDialog('admin/drive/clean-remote-files', {}); handler: clear,
}); }],
}, })),
show(file, ev) {
os.popup(import('./file-dialog.vue'), {
fileId: file.id
}, {}, 'closed');
},
find() {
os.api('admin/drive/show-file', this.q.startsWith('http://') || this.q.startsWith('https://') ? { url: this.q.trim() } : { fileId: this.q.trim() }).then(file => {
this.show(file);
}).catch(e => {
if (e.code === 'NO_SUCH_FILE') {
os.alert({
type: 'error',
text: this.$ts.notFound
});
}
});
},
bytes
}
}); });
</script> </script>

View file

@ -36,7 +36,7 @@
</MkInput> </MkInput>
</div> </div>
<MkPagination v-slot="{items}" ref="users" :pagination="pagination" class="users"> <MkPagination v-slot="{items}" ref="paginationComponent" :pagination="pagination" class="users">
<button v-for="user in items" :key="user.id" class="user _panel _button _gap" @click="show(user)"> <button v-for="user in items" :key="user.id" class="user _panel _button _gap" @click="show(user)">
<MkAvatar class="avatar" :user="user" :disable-link="true" :show-indicator="true"/> <MkAvatar class="avatar" :user="user" :disable-link="true" :show-indicator="true"/>
<div class="body"> <div class="body">
@ -61,9 +61,8 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { computed, defineComponent } from 'vue'; import { computed } from 'vue';
import MkButton from '@/components/ui/button.vue';
import MkInput from '@/components/form/input.vue'; import MkInput from '@/components/form/input.vue';
import MkSelect from '@/components/form/select.vue'; import MkSelect from '@/components/form/select.vue';
import MkPagination from '@/components/ui/pagination.vue'; import MkPagination from '@/components/ui/pagination.vue';
@ -71,94 +70,79 @@ import { acct } from '@/filters/user';
import * as os from '@/os'; import * as os from '@/os';
import * as symbols from '@/symbols'; import * as symbols from '@/symbols';
import { lookupUser } from '@/scripts/lookup-user'; import { lookupUser } from '@/scripts/lookup-user';
import { i18n } from '@/i18n';
export default defineComponent({ let paginationComponent = $ref<InstanceType<typeof MkPagination>>();
components: {
MkButton,
MkInput,
MkSelect,
MkPagination,
},
emits: ['info'], let sort = $ref('+createdAt');
let state = $ref('all');
let origin = $ref('local');
let searchUsername = $ref('');
let searchHost = $ref('');
const pagination = {
endpoint: 'admin/show-users' as const,
limit: 10,
params: computed(() => ({
sort: sort,
state: state,
origin: origin,
username: searchUsername,
hostname: searchHost,
})),
offsetMode: true
};
data() { function searchUser() {
return { os.selectUser().then(user => {
[symbols.PAGE_INFO]: { show(user);
title: this.$ts.users, });
icon: 'fas fa-users', }
bg: 'var(--bg)',
actions: [{
icon: 'fas fa-search',
text: this.$ts.search,
handler: this.searchUser
}, {
asFullButton: true,
icon: 'fas fa-plus',
text: this.$ts.addUser,
handler: this.addUser
}, {
asFullButton: true,
icon: 'fas fa-search',
text: this.$ts.lookup,
handler: this.lookupUser
}],
},
sort: '+createdAt',
state: 'all',
origin: 'local',
searchUsername: '',
searchHost: '',
pagination: {
endpoint: 'admin/show-users' as const,
limit: 10,
params: computed(() => ({
sort: this.sort,
state: this.state,
origin: this.origin,
username: this.searchUsername,
hostname: this.searchHost,
})),
offsetMode: true
},
}
},
methods: { async function addUser() {
lookupUser, const { canceled: canceled1, result: username } = await os.inputText({
title: i18n.ts.username,
});
if (canceled1) return;
searchUser() { const { canceled: canceled2, result: password } = await os.inputText({
os.selectUser().then(user => { title: i18n.ts.password,
this.show(user); type: 'password'
}); });
}, if (canceled2) return;
async addUser() { os.apiWithDialog('admin/accounts/create', {
const { canceled: canceled1, result: username } = await os.inputText({ username: username,
title: this.$ts.username, password: password,
}); }).then(res => {
if (canceled1) return; paginationComponent.reload();
});
}
const { canceled: canceled2, result: password } = await os.inputText({ function show(user) {
title: this.$ts.password, os.pageWindow(`/user-info/${user.id}`);
type: 'password' }
});
if (canceled2) return;
os.apiWithDialog('admin/accounts/create', { defineExpose({
username: username, [symbols.PAGE_INFO]: computed(() => ({
password: password, title: i18n.ts.users,
}).then(res => { icon: 'fas fa-users',
this.$refs.users.reload(); bg: 'var(--bg)',
}); actions: [{
}, icon: 'fas fa-search',
text: i18n.ts.search,
show(user) { handler: searchUser
os.pageWindow(`/user-info/${user.id}`); }, {
}, asFullButton: true,
icon: 'fas fa-plus',
acct text: i18n.ts.addUser,
} handler: addUser
}, {
asFullButton: true,
icon: 'fas fa-search',
text: i18n.ts.lookup,
handler: lookupUser
}],
})),
}); });
</script> </script>