mirror of
https://github.com/usememos/memos.git
synced 2025-03-18 11:40:09 +01:00
fix: tag query filter
This commit is contained in:
parent
308adef98d
commit
6a40be9f8e
web/src
@ -19,23 +19,36 @@ const MemoList: React.FC<Props> = () => {
|
||||
const wrapperElement = useRef<HTMLDivElement>(null);
|
||||
|
||||
const { tag: tagQuery, duration, type: memoType, text: textQuery, filter: queryId } = query;
|
||||
const showMemoFilter = Boolean(tagQuery || (duration && duration.from < duration.to) || memoType || textQuery);
|
||||
const queryFilter = queryService.getQueryById(queryId);
|
||||
const showMemoFilter = Boolean(tagQuery || (duration && duration.from < duration.to) || memoType || textQuery || queryFilter);
|
||||
|
||||
const shownMemos =
|
||||
showMemoFilter || queryId
|
||||
showMemoFilter || queryFilter
|
||||
? memos.filter((memo) => {
|
||||
let shouldShow = true;
|
||||
|
||||
const query = queryService.getQueryById(queryId);
|
||||
if (query) {
|
||||
const filters = JSON.parse(query.querystring) as Filter[];
|
||||
if (queryFilter) {
|
||||
const filters = JSON.parse(queryFilter.querystring) as Filter[];
|
||||
if (Array.isArray(filters)) {
|
||||
shouldShow = checkShouldShowMemoWithFilters(memo, filters);
|
||||
}
|
||||
}
|
||||
|
||||
if (tagQuery && !memo.content.includes(`#${tagQuery} `) && !memo.content.includes(`# ${tagQuery} `)) {
|
||||
shouldShow = false;
|
||||
if (tagQuery) {
|
||||
const tagsSet = new Set<string>();
|
||||
for (const t of Array.from(memo.content.match(TAG_REG) ?? [])) {
|
||||
const tag = t.replace(TAG_REG, "$1").trim();
|
||||
const items = tag.split("/");
|
||||
let temp = "";
|
||||
for (const i of items) {
|
||||
temp += i;
|
||||
tagsSet.add(temp);
|
||||
temp += "/";
|
||||
}
|
||||
}
|
||||
if (!tagsSet.has(tagQuery)) {
|
||||
shouldShow = false;
|
||||
}
|
||||
}
|
||||
if (
|
||||
duration &&
|
||||
|
@ -100,7 +100,7 @@ const TagItemContainer: React.FC<TagItemContainerProps> = (props: TagItemContain
|
||||
if (isActive) {
|
||||
locationService.setTagQuery("");
|
||||
} else {
|
||||
utils.copyTextToClipboard(`# ${tag.text} `);
|
||||
utils.copyTextToClipboard(`#${tag.text} `);
|
||||
if (!["/", "/recycle"].includes(locationService.getState().pathname)) {
|
||||
locationService.setPathname("/");
|
||||
}
|
||||
|
@ -119,7 +119,21 @@ export const checkShouldShowMemo = (memo: Model.Memo, filter: Filter) => {
|
||||
let shouldShow = true;
|
||||
|
||||
if (type === "TAG") {
|
||||
let contained = memo.content.includes(`#${value} `) || memo.content.includes(`# ${value} `);
|
||||
let contained = true;
|
||||
const tagsSet = new Set<string>();
|
||||
for (const t of Array.from(memo.content.match(TAG_REG) ?? [])) {
|
||||
const tag = t.replace(TAG_REG, "$1").trim();
|
||||
const items = tag.split("/");
|
||||
let temp = "";
|
||||
for (const i of items) {
|
||||
temp += i;
|
||||
tagsSet.add(temp);
|
||||
temp += "/";
|
||||
}
|
||||
}
|
||||
if (!tagsSet.has(value)) {
|
||||
contained = false;
|
||||
}
|
||||
if (operator === "NOT_CONTAIN") {
|
||||
contained = !contained;
|
||||
}
|
||||
|
@ -37,8 +37,21 @@ const MemoTrash: React.FC<Props> = () => {
|
||||
}
|
||||
}
|
||||
|
||||
if (tagQuery && !memo.content.includes(`# ${tagQuery}`)) {
|
||||
shouldShow = false;
|
||||
if (tagQuery) {
|
||||
const tagsSet = new Set<string>();
|
||||
for (const t of Array.from(memo.content.match(TAG_REG) ?? [])) {
|
||||
const tag = t.replace(TAG_REG, "$1").trim();
|
||||
const items = tag.split("/");
|
||||
let temp = "";
|
||||
for (const i of items) {
|
||||
temp += i;
|
||||
tagsSet.add(temp);
|
||||
temp += "/";
|
||||
}
|
||||
}
|
||||
if (!tagsSet.has(tagQuery)) {
|
||||
shouldShow = false;
|
||||
}
|
||||
}
|
||||
if (
|
||||
duration &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user