diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 346523f7..223d087d 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -92,7 +92,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo } if len(v.TagSearch) != 0 { for _, tag := range v.TagSearch { - where, args = append(where, "JSON_CONTAINS(JSON_EXTRACT(`memo`.`payload`, '$.property.tags'), ?)"), append(args, fmt.Sprintf(`"%s"`, tag)) + where, args = append(where, "(JSON_CONTAINS(JSON_EXTRACT(`memo`.`payload`, '$.property.tags'), ?) OR JSON_CONTAINS(JSON_EXTRACT(`memo`.`payload`, '$.property.tags'), ?))"), append(args, fmt.Sprintf(`"%s"`, tag), fmt.Sprintf(`"%s/`, tag)) } } if v.HasLink { diff --git a/store/db/postgres/memo.go b/store/db/postgres/memo.go index 6e28949f..c9ff66a8 100644 --- a/store/db/postgres/memo.go +++ b/store/db/postgres/memo.go @@ -83,7 +83,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo } if len(v.TagSearch) != 0 { for _, tag := range v.TagSearch { - where, args = append(where, "memo.payload->'property'->'tags' @> "+placeholder(len(args)+1)), append(args, fmt.Sprintf(`["%s"]`, tag)) + where, args = append(where, "EXISTS (SELECT 1 FROM jsonb_array_elements(memo.payload->'property'->'tags') AS tag WHERE tag::text = "+placeholder(len(args)+1)+" OR tag::text LIKE "+placeholder(len(args)+2)+")"), append(args, fmt.Sprintf(`"%s"`, tag), fmt.Sprintf(`"%s/%%"`, tag)) } } if v.HasLink { diff --git a/store/db/sqlite/memo.go b/store/db/sqlite/memo.go index 6ebd856b..cbde004c 100644 --- a/store/db/sqlite/memo.go +++ b/store/db/sqlite/memo.go @@ -84,7 +84,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo } if len(v.TagSearch) != 0 { for _, tag := range v.TagSearch { - where, args = append(where, "JSON_EXTRACT(`memo`.`payload`, '$.property.tags') LIKE ?"), append(args, fmt.Sprintf(`%%"%s"%%`, tag)) + where, args = append(where, "(JSON_EXTRACT(`memo`.`payload`, '$.property.tags') LIKE ? OR JSON_EXTRACT(`memo`.`payload`, '$.property.tags') LIKE ?)"), append(args, fmt.Sprintf(`%%"%s"%%`, tag), fmt.Sprintf(`%%"%s/%%`, tag)) } } if v.HasLink { diff --git a/web/src/components/PagedMemoList/PagedMemoList.tsx b/web/src/components/PagedMemoList/PagedMemoList.tsx index 0d3d8ea2..8f404fed 100644 --- a/web/src/components/PagedMemoList/PagedMemoList.tsx +++ b/web/src/components/PagedMemoList/PagedMemoList.tsx @@ -33,12 +33,12 @@ const PagedMemoList = (props: Props) => { setState((state) => ({ ...state, isRequesting })); }; - const fetchMoreMemos = async () => { + const fetchMoreMemos = async (nextPageToken: string) => { setIsRequesting(true); const response = await memoStore.fetchMemos({ filter: props.filter || "", pageSize: props.pageSize || DEFAULT_LIST_MEMOS_PAGE_SIZE, - pageToken: state.nextPageToken, + pageToken: nextPageToken, }); setState(() => ({ isRequesting: false, @@ -49,7 +49,7 @@ const PagedMemoList = (props: Props) => { useEffect(() => { memoList.reset(); setState((state) => ({ ...state, nextPageToken: "" })); - fetchMoreMemos(); + fetchMoreMemos(""); }, [props.filter, props.pageSize]); return ( @@ -67,7 +67,7 @@ const PagedMemoList = (props: Props) => { color="neutral" loading={state.isRequesting} endDecorator={} - onClick={() => fetchMoreMemos()} + onClick={() => fetchMoreMemos(state.nextPageToken)} > {t("memo.load-more")}