diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-09-28 17:21:16 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-09-28 17:21:16 +0900 |
| commit | c106db89e1d54c20c6466e42dde540e0d5c5c4eb (patch) | |
| tree | abc852e58a43294b7a70cca69217dd4d0fb22912 /packages/frontend/src | |
| parent | Update CHANGELOG.md (diff) | |
| download | misskey-c106db89e1d54c20c6466e42dde540e0d5c5c4eb.tar.gz misskey-c106db89e1d54c20c6466e42dde540e0d5c5c4eb.tar.bz2 misskey-c106db89e1d54c20c6466e42dde540e0d5c5c4eb.zip | |
feat: note edit
Diffstat (limited to 'packages/frontend/src')
| -rw-r--r-- | packages/frontend/src/components/MkPostForm.vue | 8 | ||||
| -rw-r--r-- | packages/frontend/src/components/MkPostFormDialog.vue | 1 | ||||
| -rw-r--r-- | packages/frontend/src/const.ts | 1 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.editor.vue | 20 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.vue | 8 | ||||
| -rw-r--r-- | packages/frontend/src/scripts/get-note-menu.ts | 9 | ||||
| -rw-r--r-- | packages/frontend/src/scripts/use-note-capture.ts | 6 |
7 files changed, 50 insertions, 3 deletions
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 1f4f75d5ed..b82ca3ef19 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -143,6 +143,7 @@ const props = withDefaults(defineProps<{ fixed?: boolean; autofocus?: boolean; freezeAfterPosted?: boolean; + updateMode?: boolean; }>(), { initialVisibleUsers: () => [], autofocus: true, @@ -698,17 +699,18 @@ async function post(ev?: MouseEvent) { } let postData = { - text: text === '' ? undefined : text, + text: text === '' ? null : text, fileIds: files.length > 0 ? files.map(f => f.id) : undefined, replyId: props.reply ? props.reply.id : undefined, renoteId: props.renote ? props.renote.id : quoteId ? quoteId : undefined, channelId: props.channel ? props.channel.id : undefined, poll: poll, - cw: useCw ? cw ?? '' : undefined, + cw: useCw ? cw ?? '' : null, localOnly: localOnly, visibility: visibility, visibleUserIds: visibility === 'specified' ? visibleUsers.map(u => u.id) : undefined, reactionAcceptance, + noteId: props.updateMode ? props.initialNote?.id : undefined, }; if (withHashtags && hashtags && hashtags.trim() !== '') { @@ -731,7 +733,7 @@ async function post(ev?: MouseEvent) { } posting = true; - os.api('notes/create', postData, token).then(() => { + os.api(props.updateMode ? 'notes/update' : 'notes/create', postData, token).then(() => { if (props.freezeAfterPosted) { posted = true; } else { diff --git a/packages/frontend/src/components/MkPostFormDialog.vue b/packages/frontend/src/components/MkPostFormDialog.vue index c07a166a83..f33d498f93 100644 --- a/packages/frontend/src/components/MkPostFormDialog.vue +++ b/packages/frontend/src/components/MkPostFormDialog.vue @@ -30,6 +30,7 @@ const props = defineProps<{ instant?: boolean; fixed?: boolean; autofocus?: boolean; + updateMode?: boolean; }>(); const emit = defineEmits<{ diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts index 15038b1063..9fd6d40d72 100644 --- a/packages/frontend/src/const.ts +++ b/packages/frontend/src/const.ts @@ -61,6 +61,7 @@ export const ROLE_POLICIES = [ 'gtlAvailable', 'ltlAvailable', 'canPublicNote', + 'canEditNote', 'canInvite', 'inviteLimit', 'inviteLimitCycle', diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue index 2ef3e254cd..1b72e1d332 100644 --- a/packages/frontend/src/pages/admin/roles.editor.vue +++ b/packages/frontend/src/pages/admin/roles.editor.vue @@ -160,6 +160,26 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canEditNote, 'canEditNote'])"> + <template #label>{{ i18n.ts._role._options.canEditNote }}</template> + <template #suffix> + <span v-if="role.policies.canEditNote.useDefault" :class="$style.useDefaultLabel">{{ i18n.ts._role.useBaseValue }}</span> + <span v-else>{{ role.policies.canEditNote.value ? i18n.ts.yes : i18n.ts.no }}</span> + <span :class="$style.priorityIndicator"><i :class="getPriorityIcon(role.policies.canEditNote)"></i></span> + </template> + <div class="_gaps"> + <MkSwitch v-model="role.policies.canEditNote.useDefault" :readonly="readonly"> + <template #label>{{ i18n.ts._role.useBaseValue }}</template> + </MkSwitch> + <MkSwitch v-model="role.policies.canEditNote.value" :disabled="role.policies.canEditNote.useDefault" :readonly="readonly"> + <template #label>{{ i18n.ts.enable }}</template> + </MkSwitch> + <MkRange v-model="role.policies.canEditNote.priority" :min="0" :max="2" :step="1" easing :textConverter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''"> + <template #label>{{ i18n.ts._role.priority }}</template> + </MkRange> + </div> + </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canInvite, 'canInvite'])"> <template #label>{{ i18n.ts._role._options.canInvite }}</template> <template #suffix> diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue index 8d23335430..e1306d04b9 100644 --- a/packages/frontend/src/pages/admin/roles.vue +++ b/packages/frontend/src/pages/admin/roles.vue @@ -48,6 +48,14 @@ SPDX-License-Identifier: AGPL-3.0-only </MkSwitch> </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canEditNote, 'canEditNote'])"> + <template #label>{{ i18n.ts._role._options.canEditNote }}</template> + <template #suffix>{{ policies.canEditNote ? i18n.ts.yes : i18n.ts.no }}</template> + <MkSwitch v-model="policies.canEditNote"> + <template #label>{{ i18n.ts.enable }}</template> + </MkSwitch> + </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canInvite, 'canInvite'])"> <template #label>{{ i18n.ts._role._options.canInvite }}</template> <template #suffix>{{ policies.canInvite ? i18n.ts.yes : i18n.ts.no }}</template> diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts index 0948741fc5..45fb622069 100644 --- a/packages/frontend/src/scripts/get-note-menu.ts +++ b/packages/frontend/src/scripts/get-note-menu.ts @@ -172,6 +172,10 @@ export function getNoteMenu(props: { }); } + function edit(): void { + os.post({ initialNote: appearNote, renote: appearNote.renote, reply: appearNote.reply, channel: appearNote.channel, updateMode: true }); + } + function toggleFavorite(favorite: boolean): void { claimAchievement('noteFavorited1'); os.apiWithDialog(favorite ? 'notes/favorites/create' : 'notes/favorites/delete', { @@ -352,6 +356,11 @@ export function getNoteMenu(props: { ), ...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [ null, + appearNote.userId === $i.id && $i.policies.canEditNote ? { + icon: 'ti ti-edit', + text: i18n.ts.edit, + action: edit, + } : undefined, appearNote.userId === $i.id ? { icon: 'ti ti-edit', text: i18n.ts.deleteAndEdit, diff --git a/packages/frontend/src/scripts/use-note-capture.ts b/packages/frontend/src/scripts/use-note-capture.ts index c618532570..e815e74444 100644 --- a/packages/frontend/src/scripts/use-note-capture.ts +++ b/packages/frontend/src/scripts/use-note-capture.ts @@ -71,6 +71,12 @@ export function useNoteCapture(props: { break; } + case 'updated': { + note.value.cw = body.cw; + note.value.text = body.text; + break; + } + case 'deleted': { props.isDeletedRef.value = true; break; |