enh: filter by untagged chat

This commit is contained in:
Timothy J. Baek 2024-10-19 21:16:59 -07:00
parent 86999157de
commit 7476bcaa2b
3 changed files with 32 additions and 3 deletions

View File

@ -480,7 +480,18 @@ class ChatTable:
) )
# Check if there are any tags to filter, it should have all the tags # Check if there are any tags to filter, it should have all the tags
if tag_ids: if "none" in tag_ids:
query = query.filter(
text(
"""
NOT EXISTS (
SELECT 1
FROM json_each(Chat.meta, '$.tags') AS tag
)
"""
)
)
elif tag_ids:
query = query.filter( query = query.filter(
and_( and_(
*[ *[
@ -518,7 +529,18 @@ class ChatTable:
) )
# Check if there are any tags to filter, it should have all the tags # Check if there are any tags to filter, it should have all the tags
if tag_ids: if "none" in tag_ids:
query = query.filter(
text(
"""
NOT EXISTS (
SELECT 1
FROM json_array_elements_text(Chat.meta->'tags') AS tag
)
"""
)
)
elif tag_ids:
query = query.filter( query = query.filter(
and_( and_(
*[ *[

View File

@ -197,6 +197,7 @@
return; return;
} else { } else {
searchDebounceTimeout = setTimeout(async () => { searchDebounceTimeout = setTimeout(async () => {
allChatsLoaded = false;
currentChatPage.set(1); currentChatPage.set(1);
await chats.set(await getChatListBySearchText(localStorage.token, search)); await chats.set(await getChatListBySearchText(localStorage.token, search));

View File

@ -30,7 +30,13 @@
let filteredTags = []; let filteredTags = [];
$: filteredTags = lastWord.startsWith('tag:') $: filteredTags = lastWord.startsWith('tag:')
? $tags.filter((tag) => { ? [
...$tags,
{
id: 'none',
name: $i18n.t('Untagged')
}
].filter((tag) => {
const tagName = lastWord.slice(4); const tagName = lastWord.slice(4);
if (tagName) { if (tagName) {
const tagId = tagName.replace(' ', '_').toLowerCase(); const tagId = tagName.replace(' ', '_').toLowerCase();