diff --git a/client/src/App.tsx b/client/src/App.tsx index 0a7a4e6..3f2fef7 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -5,6 +5,7 @@ import Settings from './components/Settings'; import SwipeableViews from 'react-swipeable-views'; import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; import Thread from './components/Thread/Thread'; +import { useState, useEffect } from 'react'; function App() { const [index, setIndex] = React.useState(1); diff --git a/client/src/components/Home.tsx b/client/src/components/Home.tsx index 89547d2..7eab46e 100644 --- a/client/src/components/Home.tsx +++ b/client/src/components/Home.tsx @@ -41,10 +41,26 @@ const Home = () => { return uniqEvents.filter(e => e.tags.some(tag => tag[0] === 'e' && tag[1] === event.id)).length; } + const [messageFromWorker, setMessageFromWorker] = useState(''); + + useEffect(() => { + const worker = new Worker(new URL('../myWorker', import.meta.url)); + + worker.onmessage = (event) => { + setMessageFromWorker(event.data); + }; + + worker.postMessage('Start worker'); + return () => { + worker.terminate(); + }; + }, []); + return (
+

Message from worker: {messageFromWorker}

{filteredAndSortedEvents.map((event, index) => ( ))} diff --git a/client/src/components/Modals/TextModal.tsx b/client/src/components/Modals/TextModal.tsx index 3fe93dd..6110058 100644 --- a/client/src/components/Modals/TextModal.tsx +++ b/client/src/components/Modals/TextModal.tsx @@ -17,11 +17,11 @@ const ContentPreview = ({ key, comment }: { key: string, comment: string }) => { }; useEffect(() => { - const findUrl = comment.match(/\bhttps?:\/\/\S+/gi); - if (findUrl && findUrl.length > 0) { - setUrl(findUrl[0]) - setFinalComment(finalComment.replace(findUrl[0], '').trim()) - } + // const findUrl = comment.match(/\bhttps?:\/\/\S+/gi); + // if (findUrl && findUrl.length > 0) { + // setUrl(findUrl[0]) + // setFinalComment(finalComment.replace(findUrl[0], '').trim()) + // } const match = comment.match(/\bnostr:([a-z0-9]+)/i); const nostrQuoteID = match && match[1]; diff --git a/client/src/custom.d.ts b/client/src/custom.d.ts new file mode 100644 index 0000000..a0f6808 --- /dev/null +++ b/client/src/custom.d.ts @@ -0,0 +1,15 @@ +// Make TypeScript treat *.worker.ts as a module +declare module 'worker-loader!*' { + class WebpackWorker extends Worker { + constructor(); + } + + export = WebpackWorker; + } + + // Extend the default Worker type with the properties used in the worker + interface Worker { + new (stringUrl: string, options?: WorkerOptions): Worker; + postMessage: (message: any) => void; + } + \ No newline at end of file diff --git a/client/src/myWorker.ts b/client/src/myWorker.ts new file mode 100644 index 0000000..ae51552 --- /dev/null +++ b/client/src/myWorker.ts @@ -0,0 +1,11 @@ +// eslint-disable-next-line no-restricted-globals +const ctx: Worker = self as any; + +// Respond to message from parent thread +ctx.addEventListener('message', (event) => { + setTimeout(() => { + ctx.postMessage('Hello from Worker after 2 seconds'); + }, 2000); +}); + +export default ctx; diff --git a/client/tsconfig.json b/client/tsconfig.json index a273b0c..ffe6f2c 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -4,7 +4,8 @@ "lib": [ "dom", "dom.iterable", - "esnext" + "esnext", + "webworker" ], "allowJs": true, "skipLibCheck": true,