summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/my-lists
diff options
context:
space:
mode:
authorChocolate Pie <106949016+chocolate-pie@users.noreply.github.com>2023-05-19 10:06:12 +0900
committerGitHub <noreply@github.com>2023-05-19 10:06:12 +0900
commitdddbc1c894f53d6891ca7760dd9382c19931661a (patch)
treeedc57ec92a68d547c9b31e5aa139dcf61ba5095a /packages/frontend/src/pages/my-lists
parentperf: MkImgWithBlurhashとMkMediaImageを最適化 (#10782) (diff)
downloadmisskey-dddbc1c894f53d6891ca7760dd9382c19931661a.tar.gz
misskey-dddbc1c894f53d6891ca7760dd9382c19931661a.tar.bz2
misskey-dddbc1c894f53d6891ca7760dd9382c19931661a.zip
feat: 公開リスト (#10842)
* feat: まず公開できるように (misskey-dev/misskey#10447) * feat: 公開したリストのページを作成 (misskey-dev/misskey#10447) * feat: いいねできるように * feat: インポートに対応 * wip * wip * CHANGELOGを編集 * add note * refactor --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend/src/pages/my-lists')
-rw-r--r--packages/frontend/src/pages/my-lists/index.vue1
-rw-r--r--packages/frontend/src/pages/my-lists/list.vue90
2 files changed, 52 insertions, 39 deletions
diff --git a/packages/frontend/src/pages/my-lists/index.vue b/packages/frontend/src/pages/my-lists/index.vue
index 47437f3e57..6068e375ea 100644
--- a/packages/frontend/src/pages/my-lists/index.vue
+++ b/packages/frontend/src/pages/my-lists/index.vue
@@ -70,6 +70,7 @@ definePageMetadata({
padding: 16px;
border: solid 1px var(--divider);
border-radius: 6px;
+ margin-bottom: 8px;
&:hover {
border: solid 1px var(--accent);
diff --git a/packages/frontend/src/pages/my-lists/list.vue b/packages/frontend/src/pages/my-lists/list.vue
index 86201e8e0c..dd431e8dc0 100644
--- a/packages/frontend/src/pages/my-lists/list.vue
+++ b/packages/frontend/src/pages/my-lists/list.vue
@@ -1,35 +1,43 @@
<template>
<MkStickyContainer>
<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template>
- <MkSpacer :content-max="700" :class="$style.main">
- <div v-if="list" class="members _margin">
- <div class="">{{ i18n.ts.members }}</div>
- <div class="_gaps_s">
- <div v-for="user in users" :key="user.id" :class="$style.userItem">
- <MkA :class="$style.userItemBody" :to="`${userPage(user)}`">
- <MkUserCardMini :user="user"/>
- </MkA>
- <button class="_button" :class="$style.remove" @click="removeUser(user, $event)"><i class="ti ti-x"></i></button>
+ <MkSpacer :contentMax="700" :class="$style.main">
+ <div v-if="list" class="_gaps">
+ <MkFolder>
+ <template #label>{{ i18n.ts.settings }}</template>
+
+ <div class="_gaps">
+ <MkInput v-model="name">
+ <template #label>{{ i18n.ts.name }}</template>
+ </MkInput>
+ <MkSwitch v-model="isPublic">{{ i18n.ts.public }}</MkSwitch>
+ <div class="_buttons">
+ <MkButton rounded primary @click="updateSettings">{{ i18n.ts.save }}</MkButton>
+ <MkButton rounded danger @click="deleteList()">{{ i18n.ts.delete }}</MkButton>
+ </div>
</div>
- </div>
- </div>
- </MkSpacer>
- <template #footer>
- <div :class="$style.footer">
- <MkSpacer :content-max="700" :margin-min="16" :margin-max="16">
- <div class="_buttons">
- <MkButton inline rounded primary @click="addUser()">{{ i18n.ts.addUser }}</MkButton>
- <MkButton inline rounded @click="renameList()">{{ i18n.ts.rename }}</MkButton>
- <MkButton inline rounded danger @click="deleteList()">{{ i18n.ts.delete }}</MkButton>
+ </MkFolder>
+
+ <MkFolder defaultOpen>
+ <template #label>{{ i18n.ts.members }}</template>
+
+ <div class="_gaps_s">
+ <MkButton rounded primary style="margin: 0 auto;" @click="addUser()">{{ i18n.ts.addUser }}</MkButton>
+ <div v-for="user in users" :key="user.id" :class="$style.userItem">
+ <MkA :class="$style.userItemBody" :to="`${userPage(user)}`">
+ <MkUserCardMini :user="user"/>
+ </MkA>
+ <button class="_button" :class="$style.remove" @click="removeUser(user, $event)"><i class="ti ti-x"></i></button>
+ </div>
</div>
- </MkSpacer>
+ </MkFolder>
</div>
- </template>
+ </MkSpacer>
</MkStickyContainer>
</template>
<script lang="ts" setup>
-import { computed, watch } from 'vue';
+import { computed, ref, watch } from 'vue';
import MkButton from '@/components/MkButton.vue';
import * as os from '@/os';
import { mainRouter } from '@/router';
@@ -37,6 +45,9 @@ import { definePageMetadata } from '@/scripts/page-metadata';
import { i18n } from '@/i18n';
import { userPage } from '@/filters/user';
import MkUserCardMini from '@/components/MkUserCardMini.vue';
+import MkSwitch from '@/components/MkSwitch.vue';
+import MkFolder from '@/components/MkFolder.vue';
+import MkInput from '@/components/MkInput.vue';
import { userListsCache } from '@/cache';
const props = defineProps<{
@@ -45,12 +56,17 @@ const props = defineProps<{
let list = $ref(null);
let users = $ref([]);
+const isPublic = ref(false);
+const name = ref('');
function fetchList() {
os.api('users/lists/show', {
listId: props.listId,
}).then(_list => {
list = _list;
+ name.value = list.name;
+ isPublic.value = list.isPublic;
+
os.api('users/show', {
userIds: list.userIds,
}).then(_users => {
@@ -86,23 +102,6 @@ async function removeUser(user, ev) {
}], ev.currentTarget ?? ev.target);
}
-async function renameList() {
- const { canceled, result: name } = await os.inputText({
- title: i18n.ts.enterListName,
- default: list.name,
- });
- if (canceled) return;
-
- await os.api('users/lists/update', {
- listId: list.id,
- name: name,
- });
-
- userListsCache.delete();
-
- list.name = name;
-}
-
async function deleteList() {
const { canceled } = await os.confirm({
type: 'warning',
@@ -117,6 +116,19 @@ async function deleteList() {
mainRouter.push('/my/lists');
}
+async function updateSettings() {
+ await os.apiWithDialog('users/lists/update', {
+ listId: list.id,
+ name: name.value,
+ isPublic: isPublic.value,
+ });
+
+ userListsCache.delete();
+
+ list.name = name.value;
+ list.isPublic = isPublic.value;
+}
+
watch(() => props.listId, fetchList, { immediate: true });
const headerActions = $computed(() => []);