Skip to content

Commit

Permalink
Update README.md+3
Browse files Browse the repository at this point in the history
  • Loading branch information
azu committed Feb 26, 2024
1 parent 5d665d8 commit efd1281
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 14 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Search all your tweets.

![Overview](docs/architecture.png)

<!-- https://excalidraw.com/#json=H8Y4dxfK_Zq1Y1gjS3Svn,nHlGmcklhRCNN7o3-FNMdQ -->

## Usage

1. Click [Use this template](https://github.com/azu/mytweets/generate) and forked repository
Expand Down
9 changes: 6 additions & 3 deletions web/app/client/SearchMore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@ export const useSearchMore = (props: { searchResults: LineTweetResponse[] }) =>
isLoadingMore
} as const;
};
export const SearchMore = (props: { retPromise: Promise<FetchS3SelectResult> }) => {
const { results } = use(props.retPromise);
export const SearchMore = (props: { ret: FetchS3SelectResult }) => {
const { handlers, isLoadingMore } = useSearchMore({
searchResults: results
searchResults: props.ret.results
});
return (
<div
Expand All @@ -51,3 +50,7 @@ export const SearchMore = (props: { retPromise: Promise<FetchS3SelectResult> })
</div>
);
};
export const SearchMoreStream = (props: { retPromise: Promise<FetchS3SelectResult> }) => {
const ret = use(props.retPromise);
return <SearchMore ret={ret} />;
};
33 changes: 24 additions & 9 deletions web/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React, { Suspense, use } from "react";
import { fetchS3Select, FetchS3SelectResult } from "./server/search";
import { SiTwitter } from "react-icons/si";
import { SearchResultContent } from "./server/SearchResult";
import { SearchResultContent, SearchResultContentStream } from "./server/SearchResult";
import { SearchBox } from "./client/SearchBox";
import { SearchMore } from "./client/SearchMore";
import { SearchMore, SearchMoreStream } from "./client/SearchMore";
import { TransitionContextProvider } from "./client/TransitionContext";
import { SearchResultContentWrapper } from "./client/SearchResultContentWrapper";

Expand All @@ -14,9 +14,15 @@ export type HomPageSearchParam = {
timestamp?: string;
};

const HitCount = (props: { retPromise: Promise<FetchS3SelectResult> }) => {
const HitCount = (props: { count: number }) => {
if (Number.isNaN(props.count)) {
return <span>Hit: ___</span>;
}
return <span>Hit: {props.count}</span>;
};
const HitCountStream = (props: { retPromise: Promise<FetchS3SelectResult> }) => {
const ret = use(props.retPromise);
return <span>Hit: {ret.results.length}</span>;
return <HitCount count={ret.results.length} />;
};

async function HomePage({
Expand Down Expand Up @@ -66,18 +72,27 @@ async function HomePage({
<SearchBox query={searchParams.q} />
</div>
<div>
<Suspense fallback={<span>Hit: …</span>}>
<HitCount retPromise={retPromise} />
<Suspense fallback={<HitCount count={NaN} />}>
<HitCountStream retPromise={retPromise} />
</Suspense>
</div>
</div>
<SearchResultContentWrapper>
<Suspense fallback={<>Loading…</>}>
<SearchResultContent retPromise={retPromise} screenName={searchParams.screen_name ?? ""} />
<Suspense
fallback={
<>
<div>Loading...</div>
</>
}
>
<SearchResultContentStream
retPromise={retPromise}
screenName={searchParams.screen_name ?? ""}
/>
</Suspense>
</SearchResultContentWrapper>
<Suspense>
<SearchMore retPromise={retPromise} />
<SearchMoreStream retPromise={retPromise} />
</Suspense>
</div>
</TransitionContextProvider>
Expand Down
10 changes: 8 additions & 2 deletions web/app/server/SearchResult.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,14 @@ const StatusLink = (props: { itemId: string; children: ReactElement }) => {
);
};

export function SearchResultContent(props: { retPromise: Promise<FetchS3SelectResult>; screenName: string }) {
const { results: searchResults } = use(props.retPromise);
export const SearchResultContentStream = (props: { retPromise: Promise<FetchS3SelectResult>; screenName: string }) => {
const { retPromise, ...other } = props;
const ret = use(retPromise);
return <SearchResultContent ret={ret} {...other} />;
};

export function SearchResultContent(props: { ret: FetchS3SelectResult; screenName: string }) {
const searchResults = props.ret.results;
return (
<div>
<ul
Expand Down

0 comments on commit efd1281

Please sign in to comment.