This commit is contained in:
syuilo 2021-02-19 21:40:09 +09:00
parent 5c6e389cd5
commit eefbe097c0
4 changed files with 29 additions and 2 deletions

View file

@ -704,6 +704,7 @@ editCode: "コードを編集"
apply: "適用" apply: "適用"
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る" receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
emailNotification: "メール通知" emailNotification: "メール通知"
inChannelSearch: "チャンネル内検索"
_email: _email:
_follow: _follow:

View file

@ -28,6 +28,7 @@ export default defineComponent({
limit: 10, limit: 10,
params: () => ({ params: () => ({
query: this.$route.query.q, query: this.$route.query.q,
channelId: this.$route.query.channel,
}) })
}, },
}; };

View file

@ -99,7 +99,10 @@
<div class="right"> <div class="right">
<div class="instance">{{ instanceName }}</div> <div class="instance">{{ instanceName }}</div>
<XHeaderClock class="clock"/> <XHeaderClock class="clock"/>
<button class="_button button search" @click="search" v-tooltip="$ts.search"> <button class="_button button search" v-if="tl.startsWith('channel:') && currentChannel" @click="inChannelSearch" v-tooltip="$ts.inChannelSearch">
<Fa :icon="faSearch"/>
</button>
<button class="_button button search" v-else @click="search" v-tooltip="$ts.search">
<Fa :icon="faSearch"/> <Fa :icon="faSearch"/>
</button> </button>
<button class="_button button follow" v-if="tl.startsWith('channel:') && currentChannel" :class="{ followed: currentChannel.isFollowing }" @click="toggleChannelFollow" v-tooltip="currentChannel.isFollowing ? $ts.unfollow : $ts.follow"> <button class="_button button follow" v-if="tl.startsWith('channel:') && currentChannel" :class="{ followed: currentChannel.isFollowing }" @click="toggleChannelFollow" v-tooltip="currentChannel.isFollowing ? $ts.unfollow : $ts.follow">
@ -249,6 +252,15 @@ export default defineComponent({
search(); search();
}, },
async inChannelSearch() {
const { canceled, result: query } = await os.dialog({
title: this.$ts.inChannelSearch,
input: true
});
if (canceled || query == null || query === '') return;
router.push(`/search?q=${encodeURIComponent(query)}&channel=${this.currentChannel.id}`);
},
top() { top() {
window.scroll({ top: 0, behavior: 'smooth' }); window.scroll({ top: 0, behavior: 'smooth' });
}, },

View file

@ -46,6 +46,11 @@ export const meta = {
validator: $.optional.nullable.type(ID), validator: $.optional.nullable.type(ID),
default: null default: null
}, },
channelId: {
validator: $.optional.nullable.type(ID),
default: null
},
}, },
res: { res: {
@ -64,7 +69,15 @@ export const meta = {
export default define(meta, async (ps, me) => { export default define(meta, async (ps, me) => {
if (es == null) { if (es == null) {
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId);
if (ps.userId) {
query.andWhere('note.userId = :userId', { userId: ps.userId });
} else if (ps.channelId) {
query.andWhere('note.channelId = :channelId', { channelId: ps.channelId });
}
query
.andWhere('note.text ILIKE :q', { q: `%${ps.query}%` }) .andWhere('note.text ILIKE :q', { q: `%${ps.query}%` })
.leftJoinAndSelect('note.user', 'user'); .leftJoinAndSelect('note.user', 'user');