diff --git a/packages/hooks/feed/usePremiumChannel.ts b/packages/hooks/feed/usePremiumChannel.ts
index 084fceec45..affc6a61f7 100644
--- a/packages/hooks/feed/usePremiumChannel.ts
+++ b/packages/hooks/feed/usePremiumChannel.ts
@@ -1,22 +1,24 @@
import { useQuery } from "@tanstack/react-query";
+import { parseUserId } from "@/networks";
import { mustGetCw721MembershipQueryClient } from "@/utils/feed/client";
-export const usePremiumChannel = (
+const usePremiumChannel = (
networkId: string | undefined,
- channelAddress: string | undefined,
+ channelId: string | undefined,
+ enabled?: boolean,
) => {
return useQuery(
- ["feed-premium-channel", networkId, channelAddress],
+ ["feed-premium-channel", networkId, channelId],
async () => {
- if (!networkId || !channelAddress) {
+ if (!networkId || !channelId) {
return null;
}
const client = await mustGetCw721MembershipQueryClient(networkId);
try {
- const channel = await client.channel({ channelAddr: channelAddress });
+ const channel = await client.channel({ channelId });
return channel;
} catch (error) {
if (
@@ -29,8 +31,46 @@ export const usePremiumChannel = (
}
},
{
- enabled: !!networkId && !!channelAddress,
+ enabled: (enabled ?? true) && !!networkId && !!channelId,
staleTime: Infinity,
},
);
};
+
+const usePremiumChannelsByOwner = (
+ userId: string | undefined,
+ enabled?: boolean,
+) => {
+ return useQuery(
+ ["feed-premium-channels", userId],
+ async () => {
+ if (!userId) {
+ return [];
+ }
+ const [, userAddress] = parseUserId(userId);
+ if (!userAddress) {
+ return [];
+ }
+
+ const client = await mustGetCw721MembershipQueryClient(userId);
+
+ const channels = await client.channelsByOwner({
+ ownerAddress: userAddress,
+ });
+ return channels;
+ },
+ {
+ enabled: (enabled ?? true) && !!userId,
+ staleTime: Infinity,
+ },
+ );
+};
+
+export const useMainPremiumChannel = (
+ userId: string | undefined,
+ enabled?: boolean,
+) => {
+ const [network] = parseUserId(userId);
+ const { data: channels } = usePremiumChannelsByOwner(userId, enabled);
+ return usePremiumChannel(network?.id, channels?.[0], enabled);
+};
diff --git a/packages/hooks/feed/usePremiumSubscription.ts b/packages/hooks/feed/usePremiumSubscription.ts
index d39affca61..a761d4c86e 100644
--- a/packages/hooks/feed/usePremiumSubscription.ts
+++ b/packages/hooks/feed/usePremiumSubscription.ts
@@ -1,5 +1,7 @@
import { useQuery } from "@tanstack/react-query";
+import { useMainPremiumChannel } from "./usePremiumChannel";
+
import { parseUserId } from "@/networks";
import { mustGetCw721MembershipQueryClient } from "@/utils/feed/client";
@@ -7,25 +9,26 @@ export const usePremiumSubscription = (
channelUserId: string | undefined,
subUserId: string | undefined,
) => {
+ const { data: channel } = useMainPremiumChannel(channelUserId);
return useQuery(
["premium-is-subscribed", channelUserId, subUserId],
async () => {
- const [network, channelAddr] = parseUserId(channelUserId);
+ const [network] = parseUserId(channelUserId);
const [, subAddr] = parseUserId(subUserId);
- if (!network || !channelAddr || !subAddr) {
+ if (!channel || !network || !subAddr) {
return null;
}
const client = await mustGetCw721MembershipQueryClient(network.id);
const result = await client.subscription({
- channelAddr,
+ channelId: channel.id,
subAddr,
});
return result;
},
- { staleTime: Infinity },
+ { staleTime: Infinity, enabled: !!channel },
);
};
diff --git a/packages/screens/UserPublicProfile/components/UPPIntro.tsx b/packages/screens/UserPublicProfile/components/UPPIntro.tsx
index 716882e520..d16a1d5090 100644
--- a/packages/screens/UserPublicProfile/components/UPPIntro.tsx
+++ b/packages/screens/UserPublicProfile/components/UPPIntro.tsx
@@ -21,7 +21,7 @@ import { SocialButton } from "@/components/buttons/SocialButton";
import { SocialButtonSecondary } from "@/components/buttons/SocialButtonSecondary";
import { ProfileButton } from "@/components/hub/ProfileButton";
import { UserAvatarWithFrame } from "@/components/images/AvatarWithFrame";
-import { usePremiumChannel } from "@/hooks/feed/usePremiumChannel";
+import { useMainPremiumChannel } from "@/hooks/feed/usePremiumChannel";
import { usePremiumIsSubscribed } from "@/hooks/feed/usePremiumIsSubscribed";
import { useMaxResolution } from "@/hooks/useMaxResolution";
import { useNSUserInfo } from "@/hooks/useNSUserInfo";
@@ -56,7 +56,7 @@ export const UPPIntro: React.FC<{
const [network, userAddress] = parseUserId(userId);
const { width } = useMaxResolution();
const { width: windowWidth } = useWindowDimensions();
- const { data: premiumChannel } = usePremiumChannel(network?.id, userAddress);
+ const { data: premiumChannel } = useMainPremiumChannel(userId);
const networkHasPremiumFeature = !!getNetworkFeature(
network?.id,
NetworkFeature.CosmWasmPremiumFeed,
diff --git a/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx
index d758aff880..b3b230fac6 100644
--- a/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx
+++ b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx
@@ -10,7 +10,7 @@ import { UserAvatarWithFrame } from "@/components/images/AvatarWithFrame";
import ModalBase from "@/components/modals/ModalBase";
import { SpacerColumn } from "@/components/spacer";
import { useFeedbacks } from "@/context/FeedbacksProvider";
-import { usePremiumChannel } from "@/hooks/feed/usePremiumChannel";
+import { useMainPremiumChannel } from "@/hooks/feed/usePremiumChannel";
import { useNSUserInfo } from "@/hooks/useNSUserInfo";
import useSelectedWallet from "@/hooks/useSelectedWallet";
import { getUserId, parseUserId } from "@/networks";
@@ -26,8 +26,8 @@ export const PremiumSubscriptionModal: React.FC<{
userId: string;
}> = ({ onClose, isVisible, userId }) => {
const { metadata } = useNSUserInfo(userId);
- const [network, channelAddress] = parseUserId(userId);
- const { data: channel } = usePremiumChannel(network?.id, channelAddress);
+ const [network, channelOwnerAddress] = parseUserId(userId);
+ const { data: channel } = useMainPremiumChannel(userId);
const selectedWallet = useSelectedWallet();
const { wrapWithFeedback } = useFeedbacks();
@@ -62,7 +62,7 @@ export const PremiumSubscriptionModal: React.FC<{
);
await client.subscribe(
{
- channelAddr: channelAddress,
+ channelId: channel.id,
membershipKind: selectedItemIndex,
recipientAddr: selectedWallet.address,
},
@@ -97,7 +97,7 @@ export const PremiumSubscriptionModal: React.FC<{
@@ -105,7 +105,7 @@ export const PremiumSubscriptionModal: React.FC<{
{metadata?.tokenId ? metadata?.public_name : DEFAULT_NAME}
- @{metadata?.tokenId ? metadata.tokenId : channelAddress}
+ @{metadata?.tokenId ? metadata.tokenId : channelOwnerAddress}
diff --git a/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx b/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
index 39f3e50cb9..705955c7f6 100644
--- a/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
+++ b/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
@@ -20,7 +20,7 @@ import {
ChannelResponse,
MembershipConfig,
} from "@/contracts-clients/cw721-membership";
-import { usePremiumChannel } from "@/hooks/feed/usePremiumChannel";
+import { useMainPremiumChannel } from "@/hooks/feed/usePremiumChannel";
import useSelectedWallet from "@/hooks/useSelectedWallet";
import { getNativeCurrency, getNetworkFeature, parseUserId } from "@/networks";
import { NetworkFeature } from "@/networks/features";
@@ -45,10 +45,10 @@ export const SubscriptionSetupModal: React.FC<{
isVisible: boolean;
onClose: () => void;
}> = ({ userId, isVisible, onClose }) => {
- const [network, channelAddress] = parseUserId(userId);
+ const [network] = parseUserId(userId);
const networkId = network?.id;
- const { data: channel } = usePremiumChannel(networkId, channelAddress);
+ const { data: channel } = useMainPremiumChannel(userId);
if (!networkId || channel === undefined) {
return null;