diff --git a/src/components/bitcoinConnect/PaymentButton.js b/src/components/bitcoinConnect/ResourcePaymentButton.js
similarity index 100%
rename from src/components/bitcoinConnect/PaymentButton.js
rename to src/components/bitcoinConnect/ResourcePaymentButton.js
diff --git a/src/components/course/CourseDetails.js b/src/components/content/courses/CourseDetails.js
similarity index 100%
rename from src/components/course/CourseDetails.js
rename to src/components/content/courses/CourseDetails.js
diff --git a/src/components/course/CourseLesson.js b/src/components/content/courses/CourseLesson.js
similarity index 100%
rename from src/components/course/CourseLesson.js
rename to src/components/content/courses/CourseLesson.js
diff --git a/src/components/course/DraftCourseDetails.js b/src/components/content/courses/DraftCourseDetails.js
similarity index 100%
rename from src/components/course/DraftCourseDetails.js
rename to src/components/content/courses/DraftCourseDetails.js
diff --git a/src/components/course/DraftCourseLesson.js b/src/components/content/courses/DraftCourseLesson.js
similarity index 100%
rename from src/components/course/DraftCourseLesson.js
rename to src/components/content/courses/DraftCourseLesson.js
diff --git a/src/components/content/resources/ResourceDetails.js b/src/components/content/resources/ResourceDetails.js
new file mode 100644
index 0000000..a364b20
--- /dev/null
+++ b/src/components/content/resources/ResourceDetails.js
@@ -0,0 +1,78 @@
+import React, { useEffect, useState } from "react";
+import { Tag } from "primereact/tag";
+import Image from "next/image";
+import { useRouter } from "next/router";
+import ResourcePaymentButton from "@/components/bitcoinConnect/ResourcePaymentButton";
+import ZapDisplay from "@/components/zaps/ZapDisplay";
+import { useImageProxy } from "@/hooks/useImageProxy";
+
+const ResourceDetails = ({processedEvent,topics, title, summary, image, price, author, paidResource, decryptedContent, zapAmount, zapsLoading, handlePaymentSuccess, handlePaymentError}) => {
+ const router = useRouter();
+ const { slug } = router.query;
+ const { returnImageProxy } = useImageProxy();
+
+
+ return (
+
+
router.push('/')} />
+
+
+
+ {topics && topics.length > 0 && (
+ topics.map((topic, index) => (
+
+ ))
+ )
+ }
+
+
{title}
+
{summary}
+
+
+
+ {image && (
+
+
+
+ {paidResource && !decryptedContent &&
}
+
+ {/* if the resource has been paid for show a green paid x sats text */}
+ {paidResource && decryptedContent &&
Paid {processedEvent.price} sats
}
+
+
+
+
+ )}
+
+
+
+ )
+}
+
+export default ResourceDetails;
\ No newline at end of file
diff --git a/src/pages/course/[slug]/draft.js b/src/pages/course/[slug]/draft.js
index f6985bf..22755d4 100644
--- a/src/pages/course/[slug]/draft.js
+++ b/src/pages/course/[slug]/draft.js
@@ -2,8 +2,8 @@ import React, { useEffect, useState, useCallback } from "react";
import { useRouter } from "next/router";
import axios from "axios";
import { parseEvent, findKind0Fields } from "@/utils/nostr";
-import DraftCourseDetails from "@/components/course/DraftCourseDetails";
-import DraftCourseLesson from "@/components/course/DraftCourseLesson";
+import DraftCourseDetails from "@/components/content/courses/DraftCourseDetails";
+import DraftCourseLesson from "@/components/content/courses/DraftCourseLesson";
import dynamic from 'next/dynamic';
import { useNDKContext } from "@/context/NDKContext";
diff --git a/src/pages/course/[slug]/index.js b/src/pages/course/[slug]/index.js
index eee777c..19ef294 100644
--- a/src/pages/course/[slug]/index.js
+++ b/src/pages/course/[slug]/index.js
@@ -1,8 +1,8 @@
import React, { useEffect, useState, useCallback } from "react";
import { useRouter } from "next/router";
import { parseCourseEvent, parseEvent, findKind0Fields } from "@/utils/nostr";
-import CourseDetails from "@/components/course/CourseDetails";
-import CourseLesson from "@/components/course/CourseLesson";
+import CourseDetails from "@/components/content/courses/CourseDetails";
+import CourseLesson from "@/components/courses/CourseLesson";
import dynamic from 'next/dynamic';
import { useNDKContext } from "@/context/NDKContext";
diff --git a/src/pages/details/[slug]/index.js b/src/pages/details/[slug]/index.js
index 443a1f9..21f69d0 100644
--- a/src/pages/details/[slug]/index.js
+++ b/src/pages/details/[slug]/index.js
@@ -14,9 +14,9 @@ import dynamic from 'next/dynamic';
import ZapThreadsWrapper from '@/components/ZapThreadsWrapper';
import { useToast } from '@/hooks/useToast';
import { useNDKContext } from '@/context/NDKContext';
+import ResourceDetails from '@/components/content/resources/ResourceDetails';
import { useZapsSubscription } from '@/hooks/nostrQueries/zaps/useZapsSubscription';
-import { LightningAddress } from "@getalby/lightning-tools";
-import PaymentButton from '@/components/bitcoinConnect/PaymentButton';
+import ResourcePaymentButton from '@/components/bitcoinConnect/ResourcePaymentButton';
import 'primeicons/primeicons.css';
const MDDisplay = dynamic(
@@ -26,13 +26,6 @@ const MDDisplay = dynamic(
}
);
-const BitcoinConnectPayButton = dynamic(
- () => import('@getalby/bitcoin-connect-react').then((mod) => mod.PayButton),
- {
- ssr: false,
- }
-);
-
const privkey = process.env.NEXT_PUBLIC_APP_PRIV_KEY;
const pubkey = process.env.NEXT_PUBLIC_APP_PUBLIC_KEY;
@@ -139,9 +132,10 @@ export default function Details() {
authors: [pubkey]
}
- const author = await ndk.fetchEvent(filter);
+ const author = await ndk.fetchEvent(filter);
if (author) {
const fields = await findKind0Fields(JSON.parse(author.content));
+ console.log("fields", fields);
setAuthor(fields);
}
} catch (error) {
@@ -206,6 +200,20 @@ export default function Details() {
}
}
+ const handlePaymentSuccess = async (response, newResource) => {
+ if (response && response?.preimage) {
+ console.log("newResource", newResource);
+ const updated = await update();
+ console.log("session after update", updated);
+ } else {
+ showToast('error', 'Error', 'Failed to purchase resource. Please try again.');
+ }
+ }
+
+ const handlePaymentError = (error) => {
+ showToast('error', 'Payment Error', `Failed to purchase resource. Please try again. Error: ${error}`);
+ }
+
const renderContent = () => {
if (decryptedContent) {
return ;
@@ -217,85 +225,25 @@ export default function Details() {
return ;
}
return null;
- };
-
- const handlePaymentSuccess = async (response, newResource) => {
- if (response && response?.preimage) {
- console.log("newResource", newResource)
- // Refetch session to get the latest user data
- const updated = await update();
- console.log("session after update", updated)
- // router.reload(); // Optionally, reload the page if necessary
- } else {
- showToast('error', 'Error', 'Failed to purchase resource. Please try again.');
- }
- }
-
- const handlePaymentError = (error) => {
- showToast('error', 'Payment Error', `Failed to purchase resource. Please try again. Error: ${error}`);
}
return (
-
-
router.push('/')} />
-
-
-
- {processedEvent && processedEvent.topics && processedEvent.topics.length > 0 && (
- processedEvent.topics.map((topic, index) => (
-
- ))
- )
- }
-
-
{processedEvent?.title}
-
{processedEvent?.summary}
-
-
-
- {processedEvent && (
-
-
-
- {paidResource && !decryptedContent &&
}
-
- {/* if the resource has been paid for show a green paid x sats text */}
- {paidResource && decryptedContent &&
Paid {processedEvent.price} sats
}
-
-
-
-
- )}
-
-
-
+
{authorView && (