diff --git a/actions/getIdentityData.ts b/actions/getIdentityData.ts index b2968f8a..17d62de2 100644 --- a/actions/getIdentityData.ts +++ b/actions/getIdentityData.ts @@ -16,7 +16,7 @@ export async function getIdentityData() { identities( *, bsky_profiles(*), - subscribers_to_publications(*), + publication_subscriptions(*), custom_domains!custom_domains_identity_id_fkey(publication_domains(*), *), home_leaflet:permission_tokens!identities_home_page_fkey(*, permission_token_rights(*)), permission_token_on_homepage( diff --git a/app/api/oauth/[route]/route.ts b/app/api/oauth/[route]/route.ts index 3ea702d8..55b69460 100644 --- a/app/api/oauth/[route]/route.ts +++ b/app/api/oauth/[route]/route.ts @@ -121,7 +121,6 @@ const handleAction = async ( else url = new URL(decodeURIComponent(redirectPath), "https://example.com"); if (action?.action === "subscribe") { let result = await subscribeToPublication(action.publication); - console.log(result); if (result.hasFeed === false) url.searchParams.set("showSubscribeSuccess", "true"); } diff --git a/app/discover/PubListing.tsx b/app/discover/PubListing.tsx index c8c9d741..582dc331 100644 --- a/app/discover/PubListing.tsx +++ b/app/discover/PubListing.tsx @@ -1,5 +1,8 @@ "use client"; import { AtUri } from "@atproto/syntax"; +import { PublicationSubscription } from "app/reader/getSubscriptions"; +import { PubIcon } from "components/ActionBar/Publications"; +import { Separator } from "components/Layout"; import { usePubTheme } from "components/ThemeManager/PublicationThemeProvider"; import { BaseThemeProvider } from "components/ThemeManager/ThemeProvider"; import { PubLeafletPublication, PubLeafletThemeColor } from "lexicons/api"; @@ -7,14 +10,11 @@ import { blobRefToSrc } from "src/utils/blobRefToSrc"; import { timeAgo } from "src/utils/timeAgo"; import { Json } from "supabase/database.types"; -export const PubListing = (props: { - record: Json; - uri: string; - documents_in_publications: { - indexed_at: string; - documents: { data: Json } | null; - }[]; -}) => { +export const PubListing = ( + props: PublicationSubscription & { + resizeHeight?: boolean; + }, +) => { let record = props.record as PubLeafletPublication.Record; let theme = usePubTheme(record); let backgroundImage = record?.theme?.backgroundImage?.image?.ref @@ -43,26 +43,28 @@ export const PubListing = (props: { hover:outline-accent-contrast hover:border-accent-contrast`} >
{record.description}
-+ {record.description} +
+ )} +- Updated {timeAgo(props.documents_in_publications[0].indexed_at)} + Updated{" "} + {timeAgo( + props.documents_in_publications?.[0]?.documents?.indexed_at || + "", + )}
- Explore publications on Leaflet ✨ Or{" "} - make your own! -
{JSON.stringify(e, undefined, 2)};
}
}
diff --git a/app/lish/[did]/[publication]/icon.ts b/app/lish/[did]/[publication]/icon.ts
index 94867461..f62000bc 100644
--- a/app/lish/[did]/[publication]/icon.ts
+++ b/app/lish/[did]/[publication]/icon.ts
@@ -46,7 +46,6 @@ export default async function Icon({
let identity = await idResolver.did.resolve(did);
let service = identity?.service?.find((f) => f.id === "#atproto_pds");
- console.log(identity);
if (!service) return null;
let cid = (record.icon.ref as unknown as { $link: string })["$link"];
const response = await fetch(
@@ -56,7 +55,6 @@ export default async function Icon({
let resizedImage = await sharp(await blob.arrayBuffer())
.resize({ width: 32, height: 32 })
.toBuffer();
- console.log("fetched favicon!");
return new Response(new Uint8Array(resizedImage), {
headers: {
"Content-Type": "image/png",
diff --git a/app/lish/subscribeToPublication.ts b/app/lish/subscribeToPublication.ts
index e9a47141..db93ed76 100644
--- a/app/lish/subscribeToPublication.ts
+++ b/app/lish/subscribeToPublication.ts
@@ -74,7 +74,6 @@ export async function subscribeToPublication(
}
export async function unsubscribeToPublication(publication: string) {
- console.log("calling unsubscribe!");
const oauthClient = await createOauthClient();
let identity = await getIdentityData();
if (!identity || !identity.atp_did) return;
diff --git a/app/reader/ReaderContent.tsx b/app/reader/ReaderContent.tsx
new file mode 100644
index 00000000..cfae2371
--- /dev/null
+++ b/app/reader/ReaderContent.tsx
@@ -0,0 +1,279 @@
+"use client";
+import { AtUri } from "@atproto/api";
+import { getPublicationURL } from "app/lish/createPub/getPublicationURL";
+import { PubIcon } from "components/ActionBar/Publications";
+import { ButtonPrimary } from "components/Buttons";
+import { CommentTiny } from "components/Icons/CommentTiny";
+import { DiscoverSmall } from "components/Icons/DiscoverSmall";
+import { QuoteTiny } from "components/Icons/QuoteTiny";
+import { Separator } from "components/Layout";
+import { SpeedyLink } from "components/SpeedyLink";
+import { usePubTheme } from "components/ThemeManager/PublicationThemeProvider";
+import { BaseThemeProvider } from "components/ThemeManager/ThemeProvider";
+import { useSmoker } from "components/Toast";
+import { PubLeafletDocument, PubLeafletPublication } from "lexicons/api";
+import { blobRefToSrc } from "src/utils/blobRefToSrc";
+import { Json } from "supabase/database.types";
+import type { Cursor, Post } from "./getReaderFeed";
+import useSWRInfinite from "swr/infinite";
+import { getReaderFeed } from "./getReaderFeed";
+import { useEffect, useRef } from "react";
+import { useRouter } from "next/navigation";
+
+export const ReaderContent = (props: {
+ root_entity: string;
+ posts: Post[];
+ nextCursor: Cursor | null;
+}) => {
+ const getKey = (
+ pageIndex: number,
+ previousPageData: { posts: Post[]; nextCursor: Cursor | null } | null,
+ ) => {
+ // Reached the end
+ if (previousPageData && !previousPageData.nextCursor) return null;
+
+ // First page, we don't have previousPageData
+ if (pageIndex === 0) return ["reader-feed", null] as const;
+
+ // Add the cursor to the key
+ return ["reader-feed", previousPageData?.nextCursor] as const;
+ };
+
+ const { data, error, size, setSize, isValidating } = useSWRInfinite(
+ getKey,
+ ([_, cursor]) => getReaderFeed(cursor),
+ {
+ fallbackData: [{ posts: props.posts, nextCursor: props.nextCursor }],
+ revalidateFirstPage: false,
+ },
+ );
+
+ const loadMoreRef = useRefSorry, we can't find this page!
++ This may be a glitch on our end. If the issue persists please{" "} + send us a note. +
+