summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzyoshoka <107108195+zyoshoka@users.noreply.github.com>2024-08-10 09:34:49 +0900
committerGitHub <noreply@github.com>2024-08-10 09:34:49 +0900
commit01a815f8a716f65dbd977d533d638eb69561136a (patch)
treed8e7f2e3eef845e0f366131676e4e87d299a94a0
parentfix: readAllNotifications message not working (#14374) (diff)
downloadmisskey-01a815f8a716f65dbd977d533d638eb69561136a.tar.gz
misskey-01a815f8a716f65dbd977d533d638eb69561136a.tar.bz2
misskey-01a815f8a716f65dbd977d533d638eb69561136a.zip
fix(general): some fixes and improvements of Play visibility (#14384)
* fix(backend): missing `visibility` param in packing flash * fix(frontend): use `visibility` value got from API * enhance(frontend): change preview appearance of private Play * Update CHANGELOG.md
-rw-r--r--CHANGELOG.md4
-rw-r--r--packages/backend/src/core/entities/FlashEntityService.ts1
-rw-r--r--packages/backend/src/models/json-schema/flash.ts5
-rw-r--r--packages/frontend/.storybook/fakes.ts35
-rw-r--r--packages/frontend/.storybook/generate.tsx1
-rw-r--r--packages/frontend/src/components/MkFlashPreview.stories.impl.ts53
-rw-r--r--packages/frontend/src/components/MkFlashPreview.vue12
-rw-r--r--packages/frontend/src/pages/flash/flash-edit.vue2
-rw-r--r--packages/misskey-js/src/autogen/types.ts2
9 files changed, 110 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa0bc6282b..7128499c79 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,12 +5,14 @@
- Enhance: モデレーターはすべてのユーザーのフォロー・フォロワーの一覧を見られるように
### Client
--
+- Enhance: 「自分のPlay」ページにおいてPlayが非公開かどうかが一目でわかるように
+- Fix: Play編集時に公開範囲が「パブリック」にリセットされる問題を修正
### Server
- Fix: WSの`readAllNotifications` メッセージが `body` を持たない場合に動作しない問題 #14374
- 通知ページや通知カラム(デッキ)を開いている状態において、新たに発生した通知が既読されない問題が修正されます。
- これにより、プッシュ通知が有効な同条件下の環境において、プッシュ通知が常に発生してしまう問題も修正されます。
+- Fix: Play各種エンドポイントの返り値に`visibility`が含まれていない問題を修正
## 2024.7.0
diff --git a/packages/backend/src/core/entities/FlashEntityService.ts b/packages/backend/src/core/entities/FlashEntityService.ts
index d110f7afc6..4aa7104c1e 100644
--- a/packages/backend/src/core/entities/FlashEntityService.ts
+++ b/packages/backend/src/core/entities/FlashEntityService.ts
@@ -49,6 +49,7 @@ export class FlashEntityService {
title: flash.title,
summary: flash.summary,
script: flash.script,
+ visibility: flash.visibility,
likedCount: flash.likedCount,
isLiked: meId ? await this.flashLikesRepository.exists({ where: { flashId: flash.id, userId: meId } }) : undefined,
});
diff --git a/packages/backend/src/models/json-schema/flash.ts b/packages/backend/src/models/json-schema/flash.ts
index 952df649ad..42b2172409 100644
--- a/packages/backend/src/models/json-schema/flash.ts
+++ b/packages/backend/src/models/json-schema/flash.ts
@@ -44,6 +44,11 @@ export const packedFlashSchema = {
type: 'string',
optional: false, nullable: false,
},
+ visibility: {
+ type: 'string',
+ optional: false, nullable: false,
+ enum: ['private', 'public'],
+ },
likedCount: {
type: 'number',
optional: false, nullable: true,
diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts
index ab04d3e60c..fc3b0334e4 100644
--- a/packages/frontend/.storybook/fakes.ts
+++ b/packages/frontend/.storybook/fakes.ts
@@ -3,6 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+import { AISCRIPT_VERSION } from '@syuilo/aiscript';
import type { entities } from 'misskey-js'
export function abuseUserReport() {
@@ -114,6 +115,40 @@ export function file(isSensitive = false) {
};
}
+const script = `/// @ ${AISCRIPT_VERSION}
+
+var name = ""
+
+Ui:render([
+ Ui:C:textInput({
+ label: "Your name"
+ onInput: @(v) { name = v }
+ })
+ Ui:C:button({
+ text: "Hello"
+ onClick: @() {
+ Mk:dialog(null, \`Hello, {name}!\`)
+ }
+ })
+])
+`;
+
+export function flash(): entities.Flash {
+ return {
+ id: 'someflashid',
+ createdAt: '2016-12-28T22:49:51.000Z',
+ updatedAt: '2016-12-28T22:49:51.000Z',
+ userId: 'someuserid',
+ user: userLite(),
+ title: 'Some Play title',
+ summary: 'Some Play summary',
+ script,
+ visibility: 'public',
+ likedCount: 0,
+ isLiked: false,
+ };
+}
+
export function folder(id = 'somefolderid', name = 'Some Folder', parentId: string | null = null): entities.DriveFolder {
return {
id,
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 52c01aaf70..490a441b70 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -398,6 +398,7 @@ function toStories(component: string): Promise<string> {
glob('src/components/global/Mk*.vue'),
glob('src/components/global/RouterView.vue'),
glob('src/components/Mk[A-E]*.vue'),
+ glob('src/components/MkFlashPreview.vue'),
glob('src/components/MkGalleryPostPreview.vue'),
glob('src/components/MkSignupServerRules.vue'),
glob('src/components/MkUserSetupDialog.vue'),
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.impl.ts b/packages/frontend/src/components/MkFlashPreview.stories.impl.ts
new file mode 100644
index 0000000000..fa5288b73d
--- /dev/null
+++ b/packages/frontend/src/components/MkFlashPreview.stories.impl.ts
@@ -0,0 +1,53 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { StoryObj } from '@storybook/vue3';
+import MkFlashPreview from './MkFlashPreview.vue';
+import { flash } from './../../.storybook/fakes.js';
+export const Public = {
+ render(args) {
+ return {
+ components: {
+ MkFlashPreview,
+ },
+ setup() {
+ return {
+ args,
+ };
+ },
+ computed: {
+ props() {
+ return {
+ ...this.args,
+ };
+ },
+ },
+ template: '<MkFlashPreview v-bind="props" />',
+ };
+ },
+ args: {
+ flash: {
+ ...flash(),
+ visibility: 'public',
+ },
+ },
+ parameters: {
+ layout: 'fullscreen',
+ },
+ decorators: [
+ () => ({
+ template: '<div style="display: flex; align-items: center; justify-content: center; height: 100vh"><div style="max-width: 700px; width: 100%; margin: 3rem"><story/></div></div>',
+ }),
+ ],
+} satisfies StoryObj<typeof MkFlashPreview>;
+export const Private = {
+ ...Public,
+ args: {
+ flash: {
+ ...flash(),
+ visibility: 'private',
+ },
+ },
+} satisfies StoryObj<typeof MkFlashPreview>;
diff --git a/packages/frontend/src/components/MkFlashPreview.vue b/packages/frontend/src/components/MkFlashPreview.vue
index 6783804cc5..8a2a438624 100644
--- a/packages/frontend/src/components/MkFlashPreview.vue
+++ b/packages/frontend/src/components/MkFlashPreview.vue
@@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
<template>
-<MkA :to="`/play/${flash.id}`" class="vhpxefrk _panel">
+<MkA :to="`/play/${flash.id}`" class="vhpxefrk _panel" :class="[{ gray: flash.visibility === 'private' }]">
<article>
<header>
<h1 :title="flash.title">{{ flash.title }}</h1>
@@ -22,11 +22,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { } from 'vue';
+import * as Misskey from 'misskey-js';
import { userName } from '@/filters/user.js';
const props = defineProps<{
- //flash: Misskey.entities.Flash;
- flash: any;
+ flash: Misskey.entities.Flash;
}>();
</script>
@@ -91,6 +91,12 @@ const props = defineProps<{
}
}
+ &:global(.gray) {
+ --c: var(--bg);
+ background-image: linear-gradient(45deg, var(--c) 16.67%, transparent 16.67%, transparent 50%, var(--c) 50%, var(--c) 66.67%, transparent 66.67%, transparent 100%);
+ background-size: 16px 16px;
+ }
+
@media (max-width: 700px) {
}
diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue
index 0b9f4dfe58..d282ed4810 100644
--- a/packages/frontend/src/pages/flash/flash-edit.vue
+++ b/packages/frontend/src/pages/flash/flash-edit.vue
@@ -369,7 +369,6 @@ const props = defineProps<{
}>();
const flash = ref<Misskey.entities.Flash | null>(null);
-const visibility = ref<'private' | 'public'>('public');
if (props.id) {
flash.value = await misskeyApi('flash/show', {
@@ -380,6 +379,7 @@ if (props.id) {
const title = ref(flash.value?.title ?? 'New Play');
const summary = ref(flash.value?.summary ?? '');
const permissions = ref(flash.value?.permissions ?? []);
+const visibility = ref<'private' | 'public'>(flash.value?.visibility ?? 'public');
const script = ref(flash.value?.script ?? PRESET_DEFAULT);
function selectPreset(ev: MouseEvent) {
diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts
index db5efd4a00..6d2f787767 100644
--- a/packages/misskey-js/src/autogen/types.ts
+++ b/packages/misskey-js/src/autogen/types.ts
@@ -4672,6 +4672,8 @@ export type components = {
title: string;
summary: string;
script: string;
+ /** @enum {string} */
+ visibility: 'private' | 'public';
likedCount: number | null;
isLiked?: boolean;
};