mirror of
https://github.com/lumehq/lume.git
synced 2025-09-28 21:43:59 +02:00
clean up and fix build error
This commit is contained in:
@@ -28,7 +28,6 @@
|
|||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-hook-form": "^7.43.9",
|
"react-hook-form": "^7.43.9",
|
||||||
"react-loading-skeleton": "^3.2.1",
|
|
||||||
"react-string-replace": "^1.1.0",
|
"react-string-replace": "^1.1.0",
|
||||||
"react-virtuoso": "^4.3.1",
|
"react-virtuoso": "^4.3.1",
|
||||||
"react-youtube": "^10.1.0",
|
"react-youtube": "^10.1.0",
|
||||||
|
12
pnpm-lock.yaml
generated
12
pnpm-lock.yaml
generated
@@ -43,9 +43,6 @@ dependencies:
|
|||||||
react-hook-form:
|
react-hook-form:
|
||||||
specifier: ^7.43.9
|
specifier: ^7.43.9
|
||||||
version: 7.43.9(react@18.2.0)
|
version: 7.43.9(react@18.2.0)
|
||||||
react-loading-skeleton:
|
|
||||||
specifier: ^3.2.1
|
|
||||||
version: 3.2.1(react@18.2.0)
|
|
||||||
react-string-replace:
|
react-string-replace:
|
||||||
specifier: ^1.1.0
|
specifier: ^1.1.0
|
||||||
version: 1.1.0
|
version: 1.1.0
|
||||||
@@ -3543,15 +3540,6 @@ packages:
|
|||||||
resolution:
|
resolution:
|
||||||
{ integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== }
|
{ integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== }
|
||||||
|
|
||||||
/react-loading-skeleton@3.2.1(react@18.2.0):
|
|
||||||
resolution:
|
|
||||||
{ integrity: sha512-e1KwEOuBa1REXWoseELIJXlsqWTCHL5IQnqhVhI33WmnuTK7LK1DXl4mmcOLsWVcwqXeOATU9VFJEjz2ytZSng== }
|
|
||||||
peerDependencies:
|
|
||||||
react: '>=16.8.0'
|
|
||||||
dependencies:
|
|
||||||
react: 18.2.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/react-string-replace@1.1.0:
|
/react-string-replace@1.1.0:
|
||||||
resolution:
|
resolution:
|
||||||
{ integrity: sha512-N6RalSDFGbOHs0IJi1H611WbZsvk3ZT47Jl2JEXFbiS3kTwsdCYij70Keo/tWtLy7sfhDsYm7CwNM/WmjXIaMw== }
|
{ integrity: sha512-N6RalSDFGbOHs0IJi1H611WbZsvk3ZT47Jl2JEXFbiS3kTwsdCYij70Keo/tWtLy7sfhDsYm7CwNM/WmjXIaMw== }
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
import { useChannelMetadata } from '@utils/hooks/useChannelMetadata';
|
import { useChannelMetadata } from '@utils/hooks/useChannelMetadata';
|
||||||
import { usePageContext } from '@utils/hooks/usePageContext';
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
|
||||||
import Skeleton from 'react-loading-skeleton';
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
export const ChannelListItem = ({ data }: { data: any }) => {
|
export const ChannelListItem = ({ data }: { data: any }) => {
|
||||||
@@ -20,10 +21,10 @@ export const ChannelListItem = ({ data }: { data: any }) => {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="relative h-5 w-5 shrink-0 rounded bg-zinc-900">
|
<div className="relative h-5 w-5 shrink-0 rounded bg-zinc-900">
|
||||||
<img src={channel?.picture || <Skeleton />} alt={data.event_id} className="h-5 w-5 rounded object-contain" />
|
<img src={channel?.picture || DEFAULT_AVATAR} alt={data.event_id} className="h-5 w-5 rounded object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h5 className="truncate text-sm font-medium text-zinc-400">{channel?.name || <Skeleton />}</h5>
|
<h5 className="truncate text-sm font-medium text-zinc-400">{channel?.name}</h5>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
|
@@ -1,32 +1,39 @@
|
|||||||
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
import { useChannelMetadata } from '@utils/hooks/useChannelMetadata';
|
import { useChannelMetadata } from '@utils/hooks/useChannelMetadata';
|
||||||
|
|
||||||
import { Copy } from 'iconoir-react';
|
import { Copy } from 'iconoir-react';
|
||||||
import { nip19 } from 'nostr-tools';
|
import { nip19 } from 'nostr-tools';
|
||||||
import Skeleton from 'react-loading-skeleton';
|
|
||||||
|
|
||||||
export const ChannelProfile = ({ id, pubkey }: { id: string; pubkey: string }) => {
|
export const ChannelProfile = ({ id, pubkey }: { id: string; pubkey: string }) => {
|
||||||
const metadata = useChannelMetadata(id, pubkey);
|
const metadata = useChannelMetadata(id, pubkey);
|
||||||
const noteID = nip19.noteEncode(id);
|
const noteID = id ? nip19.noteEncode(id) : null;
|
||||||
|
|
||||||
const copyNoteID = async () => {
|
const copyNoteID = async () => {
|
||||||
const { writeText } = await import('@tauri-apps/api/clipboard');
|
const { writeText } = await import('@tauri-apps/api/clipboard');
|
||||||
|
if (noteID) {
|
||||||
await writeText(noteID);
|
await writeText(noteID);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="inline-flex items-center gap-2">
|
<div className="inline-flex items-center gap-2">
|
||||||
<div className="relative shrink-0 rounded-md">
|
<div className="relative shrink-0 rounded-md">
|
||||||
<img src={metadata?.picture || <Skeleton />} alt={id} className="h-8 w-8 rounded bg-zinc-900 object-contain" />
|
<img
|
||||||
|
src={metadata?.picture || DEFAULT_AVATAR}
|
||||||
|
alt={id}
|
||||||
|
className="h-8 w-8 rounded bg-zinc-900 object-contain"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-1">
|
<div className="flex flex-col gap-1">
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
<h5 className="truncate text-sm font-medium leading-none text-zinc-100">{metadata?.name || <Skeleton />}</h5>
|
<h5 className="truncate text-sm font-medium leading-none text-zinc-100">{metadata?.name}</h5>
|
||||||
<button onClick={() => copyNoteID()}>
|
<button onClick={() => copyNoteID()}>
|
||||||
<Copy width={14} height={14} className="text-zinc-400" />
|
<Copy width={14} height={14} className="text-zinc-400" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-xs leading-none text-zinc-400">
|
<p className="text-xs leading-none text-zinc-400">
|
||||||
{metadata?.about || noteID.substring(0, 24) + '...' || <Skeleton />}
|
{metadata?.about || (noteID && noteID.substring(0, 24) + '...')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
import { ChannelMessageItem } from '@components/channels/messages/item';
|
import { ChannelMessageItem } from '@components/channels/messages/item';
|
||||||
|
import { Placeholder } from '@components/note/placeholder';
|
||||||
|
|
||||||
import { sortedChannelMessagesAtom } from '@stores/channel';
|
import { sortedChannelMessagesAtom } from '@stores/channel';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useCallback, useRef } from 'react';
|
import { useCallback, useRef } from 'react';
|
||||||
import Skeleton from 'react-loading-skeleton';
|
|
||||||
import { Virtuoso } from 'react-virtuoso';
|
import { Virtuoso } from 'react-virtuoso';
|
||||||
|
|
||||||
export default function ChannelMessages() {
|
export default function ChannelMessages() {
|
||||||
@@ -45,5 +45,5 @@ export default function ChannelMessages() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const COMPONENTS = {
|
const COMPONENTS = {
|
||||||
EmptyPlaceholder: () => <Skeleton />,
|
EmptyPlaceholder: () => <Placeholder />,
|
||||||
};
|
};
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
import { AccountContext } from '@components/accountProvider';
|
import { AccountContext } from '@components/accountProvider';
|
||||||
import { MessageListItem } from '@components/chats/messageListItem';
|
import { MessageListItem } from '@components/chats/messageListItem';
|
||||||
|
import { Placeholder } from '@components/note/placeholder';
|
||||||
|
|
||||||
import { sortedChatMessagesAtom } from '@stores/chat';
|
import { sortedChatMessagesAtom } from '@stores/chat';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useCallback, useContext, useRef } from 'react';
|
import { useCallback, useContext, useRef } from 'react';
|
||||||
import Skeleton from 'react-loading-skeleton';
|
|
||||||
import { Virtuoso } from 'react-virtuoso';
|
import { Virtuoso } from 'react-virtuoso';
|
||||||
|
|
||||||
export default function MessageList() {
|
export default function MessageList() {
|
||||||
@@ -50,5 +50,5 @@ export default function MessageList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const COMPONENTS = {
|
const COMPONENTS = {
|
||||||
EmptyPlaceholder: () => <Skeleton />,
|
EmptyPlaceholder: () => <Placeholder />,
|
||||||
};
|
};
|
||||||
|
@@ -5,7 +5,6 @@ import ChatList from '@components/chats/chatList';
|
|||||||
import { Disclosure } from '@headlessui/react';
|
import { Disclosure } from '@headlessui/react';
|
||||||
import { Bonfire, NavArrowUp, PeopleTag } from 'iconoir-react';
|
import { Bonfire, NavArrowUp, PeopleTag } from 'iconoir-react';
|
||||||
import { Suspense } from 'react';
|
import { Suspense } from 'react';
|
||||||
import Skeleton from 'react-loading-skeleton';
|
|
||||||
|
|
||||||
export default function Navigation() {
|
export default function Navigation() {
|
||||||
return (
|
return (
|
||||||
@@ -60,7 +59,7 @@ export default function Navigation() {
|
|||||||
<h3 className="text-[11px] font-bold uppercase tracking-widest text-zinc-600">Channels</h3>
|
<h3 className="text-[11px] font-bold uppercase tracking-widest text-zinc-600">Channels</h3>
|
||||||
</Disclosure.Button>
|
</Disclosure.Button>
|
||||||
<Disclosure.Panel>
|
<Disclosure.Panel>
|
||||||
<Suspense fallback={<Skeleton count={2} />}>
|
<Suspense fallback={<p>Loading...</p>}>
|
||||||
<ChannelList />
|
<ChannelList />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</Disclosure.Panel>
|
</Disclosure.Panel>
|
||||||
|
Reference in New Issue
Block a user