setLocalSubscribeState("unsubscribed")}
/>
);
}
return (
setLocalSubscribeState("subscribed")}
compact={props.compact}
pub_uri={props.pub_uri}
setSuccessModalOpen={setSuccessModalOpen}
/>
{props.compact ? (
) : (
)}
);
};
export const ManageSubscription = (props: {
pub_uri: string;
subscribers: { identity: string }[];
base_url: string;
compact?: boolean;
onUnsubscribe?: () => void;
}) => {
let toaster = useToaster();
let [hasFeed] = useState(false);
let [, unsubscribe, unsubscribePending] = useActionState(async () => {
await unsubscribeToPublication(props.pub_uri);
toaster({
content: "You unsubscribed.",
type: "success",
});
props.onUnsubscribe?.();
}, null);
return (
Manage Subscription
}
>
);
};
let BlueskySubscribeButton = (props: {
pub_uri: string;
setSuccessModalOpen: (open: boolean) => void;
compact?: boolean;
setLocalSubscribeState: () => void;
}) => {
let { identity } = useIdentityData();
let toaster = useToaster();
let [oauthError, setOauthError] = useState<
import("src/atproto-oauth").OAuthSessionError | null
>(null);
let [, subscribe, subscribePending] = useActionState(async () => {
setOauthError(null);
let result = await subscribeToPublication(
props.pub_uri,
window.location.href + "?refreshAuth",
);
if (!result.success) {
if (isOAuthSessionError(result.error)) {
setOauthError(result.error);
}
return;
}
if (result.hasFeed === false) {
props.setSuccessModalOpen(true);
}
toaster({ content: You're Subscribed!
, type: "success" });
props.setLocalSubscribeState();
}, null);
let [isClient, setIsClient] = useState(false);
useEffect(() => {
setIsClient(true);
}, []);
if (!identity?.atp_did) {
return (
Subscribe with Bluesky
}
>
{isClient && (
)}
);
}
return (
{oauthError && (
)}
);
};
const SubscribeSuccessModal = ({
open,
setOpen,
}: {
open: boolean;
setOpen: (open: boolean) => void;
}) => {
let searchParams = useSearchParams();
let [loading, setLoading] = useState(false);
let toaster = useToaster();
return (
Subscribed!
You'll get updates about this publication via a Feed just for you.
{
if (loading) return;
setLoading(true);
let feedurl =
"https://bsky.app/profile/leaflet.pub/feed/subscribedPublications";
await addFeed();
toaster({ content: "Feed added!", type: "success" });
setLoading(false);
window.open(feedurl, "_blank");
}}
>
{loading ? : "Add Bluesky Feed"}
);
};
export const SubscribeOnPost = () => {
return ;
};