enhance: タグ検索においてローカルのみやファイル付きを指定できるように (MisskeyIO#527)
cheery-picked from TeamNijimiss/misskey@4fe36c8eb9 Co-authored-by: Nafu Satsuki <satsuki@nafusoft.dev>
This commit is contained in:
parent
5c019eec04
commit
c2e1f60943
|
@ -30,6 +30,7 @@ export const meta = {
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
|
local: { type: 'boolean', nullable: true, default: null },
|
||||||
reply: { type: 'boolean', nullable: true, default: null },
|
reply: { type: 'boolean', nullable: true, default: null },
|
||||||
renote: { type: 'boolean', nullable: true, default: null },
|
renote: { type: 'boolean', nullable: true, default: null },
|
||||||
withFiles: {
|
withFiles: {
|
||||||
|
@ -105,6 +106,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ps.local != null) {
|
||||||
|
if (ps.local) {
|
||||||
|
query.andWhere('user.host IS NULL');
|
||||||
|
} else {
|
||||||
|
query.andWhere('user.host IS NOT NULL');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ps.reply != null) {
|
if (ps.reply != null) {
|
||||||
if (ps.reply) {
|
if (ps.reply) {
|
||||||
query.andWhere('note.replyId IS NOT NULL');
|
query.andWhere('note.replyId IS NOT NULL');
|
||||||
|
|
|
@ -5,9 +5,17 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<MkStickyContainer>
|
<MkStickyContainer>
|
||||||
<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template>
|
<template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template>
|
||||||
<MkSpacer :contentMax="800">
|
<MkSpacer :contentMax="800">
|
||||||
<MkNotes ref="notes" class="" :pagination="pagination"/>
|
<div v-if="tab === 'all'">
|
||||||
|
<MkNotes class="" :pagination="pagination"/>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="tab === 'localOnly'">
|
||||||
|
<MkNotes class="" :pagination="localOnlyPagination"/>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="tab === 'withFiles'">
|
||||||
|
<MkNotes class="" :pagination="withFilesPagination"/>
|
||||||
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
<template v-if="$i" #footer>
|
<template v-if="$i" #footer>
|
||||||
<div :class="$style.footer">
|
<div :class="$style.footer">
|
||||||
|
@ -29,6 +37,8 @@ import { $i } from '@/account.js';
|
||||||
import { defaultStore } from '@/store.js';
|
import { defaultStore } from '@/store.js';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
|
|
||||||
|
const tab = ref('all');
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
tag: string;
|
tag: string;
|
||||||
}>();
|
}>();
|
||||||
|
@ -42,6 +52,24 @@ const pagination = {
|
||||||
};
|
};
|
||||||
const notes = ref<InstanceType<typeof MkNotes>>();
|
const notes = ref<InstanceType<typeof MkNotes>>();
|
||||||
|
|
||||||
|
const localOnlyPagination = {
|
||||||
|
endpoint: 'notes/search-by-tag' as const,
|
||||||
|
limit: 10,
|
||||||
|
params: computed(() => ({
|
||||||
|
tag: props.tag,
|
||||||
|
local: true,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
|
const withFilesPagination = {
|
||||||
|
endpoint: 'notes/search-by-tag' as const,
|
||||||
|
limit: 10,
|
||||||
|
params: computed(() => ({
|
||||||
|
tag: props.tag,
|
||||||
|
withFiles: true,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
async function post() {
|
async function post() {
|
||||||
defaultStore.set('postFormHashtags', props.tag);
|
defaultStore.set('postFormHashtags', props.tag);
|
||||||
defaultStore.set('postFormWithHashtags', true);
|
defaultStore.set('postFormWithHashtags', true);
|
||||||
|
@ -53,7 +81,16 @@ async function post() {
|
||||||
|
|
||||||
const headerActions = computed(() => []);
|
const headerActions = computed(() => []);
|
||||||
|
|
||||||
const headerTabs = computed(() => []);
|
const headerTabs = computed(() => [{
|
||||||
|
key: 'all',
|
||||||
|
title: i18n.ts.all,
|
||||||
|
}, {
|
||||||
|
key: 'localOnly',
|
||||||
|
title: i18n.ts.localOnly,
|
||||||
|
}, {
|
||||||
|
key: 'withFiles',
|
||||||
|
title: i18n.ts.withFiles,
|
||||||
|
}]);
|
||||||
|
|
||||||
definePageMetadata(() => ({
|
definePageMetadata(() => ({
|
||||||
title: props.tag,
|
title: props.tag,
|
||||||
|
|
|
@ -22447,6 +22447,8 @@ export type operations = {
|
||||||
requestBody: {
|
requestBody: {
|
||||||
content: {
|
content: {
|
||||||
'application/json': {
|
'application/json': {
|
||||||
|
/** @default null */
|
||||||
|
local?: boolean | null;
|
||||||
/** @default null */
|
/** @default null */
|
||||||
reply?: boolean | null;
|
reply?: boolean | null;
|
||||||
/** @default null */
|
/** @default null */
|
||||||
|
|
Loading…
Reference in New Issue