mirror of
https://github.com/luminous-devs/lume.git
synced 2024-09-19 11:43:30 +00:00
better structure
This commit is contained in:
parent
1a30c10806
commit
e7bcf6c3f8
@ -9,7 +9,6 @@
|
|||||||
"bracketSpacing": true,
|
"bracketSpacing": true,
|
||||||
"bracketSameLine": false,
|
"bracketSameLine": false,
|
||||||
"importOrder": [
|
"importOrder": [
|
||||||
"^@lume/(.*)$",
|
|
||||||
"^@app/(.*)$",
|
"^@app/(.*)$",
|
||||||
"^@shared/(.*)$",
|
"^@shared/(.*)$",
|
||||||
"^@icons/(.*)$",
|
"^@icons/(.*)$",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import MutedItem from '@lume/app/channel/components/mutedItem';
|
import MutedItem from '@app/channel/components/mutedItem';
|
||||||
import MuteIcon from '@lume/shared/icons/mute';
|
|
||||||
|
import MuteIcon from '@icons/mute';
|
||||||
|
|
||||||
import { Popover, Transition } from '@headlessui/react';
|
import { Popover, Transition } from '@headlessui/react';
|
||||||
import { Fragment } from 'react';
|
import { Fragment } from 'react';
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
import { AvatarUploader } from '@lume/shared/avatarUploader';
|
import { AvatarUploader } from '@shared/avatarUploader';
|
||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import { Image } from '@shared/image';
|
||||||
import PlusIcon from '@lume/shared/icons/plus';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { Image } from '@lume/shared/image';
|
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import CancelIcon from '@icons/cancel';
|
||||||
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import PlusIcon from '@icons/plus';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
import { createChannel } from '@lume/utils/storage';
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { createChannel } from '@utils/storage';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useChannelProfile } from '@lume/utils/hooks/useChannelProfile';
|
import { useChannelProfile } from '@app/channel/hooks/useChannelProfile';
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
|
||||||
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import ChannelCreateModal from '@lume/app/channel/components/createModal';
|
import ChannelCreateModal from '@app/channel/components/createModal';
|
||||||
import ChannelsListItem from '@lume/app/channel/components/item';
|
import ChannelsListItem from '@app/channel/components/item';
|
||||||
import { getChannels } from '@lume/utils/storage';
|
|
||||||
|
import { getChannels } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import MiniMember from '@lume/app/channel/components/miniMember';
|
import MiniMember from '@app/channel/components/miniMember';
|
||||||
import { channelMembersAtom } from '@lume/stores/channel';
|
|
||||||
|
import { channelMembersAtom } from '@stores/channel';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import ChannelMessageItem from '@lume/app/channel/components/messages/item';
|
import ChannelMessageItem from '@app/channel/components/messages/item';
|
||||||
import { sortedChannelMessagesAtom } from '@lume/stores/channel';
|
|
||||||
import { hoursAgo } from '@lume/utils/getDate';
|
import { sortedChannelMessagesAtom } from '@stores/channel';
|
||||||
|
|
||||||
|
import { getHourAgo } from '@utils/date';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useCallback, useRef } from 'react';
|
import { useCallback, useRef } from 'react';
|
||||||
@ -39,7 +41,7 @@ export default function ChannelMessageList() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="relative flex justify-center">
|
<div className="relative flex justify-center">
|
||||||
<div className="inline-flex items-center gap-x-1.5 rounded-full bg-zinc-900 px-3 py-1.5 text-xs font-medium text-zinc-400 shadow-sm ring-1 ring-inset ring-zinc-800">
|
<div className="inline-flex items-center gap-x-1.5 rounded-full bg-zinc-900 px-3 py-1.5 text-xs font-medium text-zinc-400 shadow-sm ring-1 ring-inset ring-zinc-800">
|
||||||
{hoursAgo(24, now.current).toLocaleDateString('en-US', {
|
{getHourAgo(24, now.current).toLocaleDateString('en-US', {
|
||||||
weekday: 'long',
|
weekday: 'long',
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
month: 'long',
|
month: 'long',
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
import UserReply from '@lume/app/channel/components/messages/userReply';
|
import UserReply from '@app/channel/components/messages/userReply';
|
||||||
import { ImagePicker } from '@lume/shared/form/imagePicker';
|
|
||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import { ImagePicker } from '@shared/form/imagePicker';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { channelContentAtom, channelReplyAtom } from '@lume/stores/channel';
|
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import CancelIcon from '@icons/cancel';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { channelContentAtom, channelReplyAtom } from '@stores/channel';
|
||||||
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { useAtom, useAtomValue } from 'jotai';
|
import { useAtom, useAtomValue } from 'jotai';
|
||||||
import { useResetAtom } from 'jotai/utils';
|
import { useResetAtom } from 'jotai/utils';
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import HideIcon from '@lume/shared/icons/hide';
|
import { Tooltip } from '@shared/tooltip';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { Tooltip } from '@lume/shared/tooltip';
|
import CancelIcon from '@icons/cancel';
|
||||||
import { channelMessagesAtom } from '@lume/stores/channel';
|
import HideIcon from '@icons/hide';
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
import { channelMessagesAtom } from '@stores/channel';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import MessageHideButton from '@lume/app/channel/components/messages/hideButton';
|
import MessageHideButton from '@app/channel/components/messages/hideButton';
|
||||||
import MessageMuteButton from '@lume/app/channel/components/messages/muteButton';
|
import MessageMuteButton from '@app/channel/components/messages/muteButton';
|
||||||
import MessageReplyButton from '@lume/app/channel/components/messages/replyButton';
|
import MessageReplyButton from '@app/channel/components/messages/replyButton';
|
||||||
import ChannelMessageUser from '@lume/app/channel/components/messages/user';
|
import ChannelMessageUser from '@app/channel/components/messages/user';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import MuteIcon from '@lume/shared/icons/mute';
|
import { Tooltip } from '@shared/tooltip';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { Tooltip } from '@lume/shared/tooltip';
|
import CancelIcon from '@icons/cancel';
|
||||||
import { channelMessagesAtom } from '@lume/stores/channel';
|
import MuteIcon from '@icons/mute';
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
import { channelMessagesAtom } from '@stores/channel';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import ReplyMessageIcon from '@lume/shared/icons/replyMessage';
|
import { Tooltip } from '@shared/tooltip';
|
||||||
import { Tooltip } from '@lume/shared/tooltip';
|
|
||||||
import { channelReplyAtom } from '@lume/stores/channel';
|
import ReplyMessageIcon from '@icons/replyMessage';
|
||||||
|
|
||||||
|
import { channelReplyAtom } from '@stores/channel';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
export default function UserReply({ pubkey }: { pubkey: string }) {
|
export default function UserReply({ pubkey }: { pubkey: string }) {
|
||||||
const { user, isError, isLoading } = useProfile(pubkey);
|
const { user, isError, isLoading } = useProfile(pubkey);
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
import CopyIcon from '@lume/shared/icons/copy';
|
import { useChannelProfile } from '@app/channel/hooks/useChannelProfile';
|
||||||
import { Image } from '@lume/shared/image';
|
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
import { Image } from '@shared/image';
|
||||||
import { useChannelProfile } from '@lume/utils/hooks/useChannelProfile';
|
|
||||||
|
import CopyIcon from '@icons/copy';
|
||||||
|
|
||||||
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
import { nip19 } from 'nostr-tools';
|
import { nip19 } from 'nostr-tools';
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
|
||||||
export default function MiniMember({ pubkey }: { pubkey: string }) {
|
export default function MiniMember({ pubkey }: { pubkey: string }) {
|
||||||
const { user, isError, isLoading } = useProfile(pubkey);
|
const { user, isError, isLoading } = useProfile(pubkey);
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
@ -10,7 +12,7 @@ export default function MutedItem({ data }: { data: any }) {
|
|||||||
const [status, setStatus] = useState(data.status);
|
const [status, setStatus] = useState(data.status);
|
||||||
|
|
||||||
const unmute = async () => {
|
const unmute = async () => {
|
||||||
const { updateItemInBlacklist } = await import('@lume/utils/storage');
|
const { updateItemInBlacklist } = await import('@utils/storage');
|
||||||
const res = await updateItemInBlacklist(data.content, 0);
|
const res = await updateItemInBlacklist(data.content, 0);
|
||||||
if (res) {
|
if (res) {
|
||||||
setStatus(0);
|
setStatus(0);
|
||||||
@ -18,7 +20,7 @@ export default function MutedItem({ data }: { data: any }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const mute = async () => {
|
const mute = async () => {
|
||||||
const { updateItemInBlacklist } = await import('@lume/utils/storage');
|
const { updateItemInBlacklist } = await import('@utils/storage');
|
||||||
const res = await updateItemInBlacklist(data.content, 1);
|
const res = await updateItemInBlacklist(data.content, 1);
|
||||||
if (res) {
|
if (res) {
|
||||||
setStatus(1);
|
setStatus(1);
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
import { AvatarUploader } from '@lume/shared/avatarUploader';
|
import { AvatarUploader } from '@shared/avatarUploader';
|
||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import { Image } from '@shared/image';
|
||||||
import EditIcon from '@lume/shared/icons/edit';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { Image } from '@lume/shared/image';
|
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import CancelIcon from '@icons/cancel';
|
||||||
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import EditIcon from '@icons/edit';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
import { getChannel, updateChannelMetadata } from '@lume/utils/storage';
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { getChannel, updateChannelMetadata } from '@utils/storage';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { getChannel } from '@lume/utils/storage';
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { getChannel } from '@utils/storage';
|
||||||
|
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
@ -1,6 +1,6 @@
|
|||||||
import AppHeader from '@lume/shared/appHeader';
|
import AppHeader from '@shared/appHeader';
|
||||||
import MultiAccounts from '@lume/shared/multiAccounts';
|
import MultiAccounts from '@shared/multiAccounts';
|
||||||
import Navigation from '@lume/shared/navigation';
|
import Navigation from '@shared/navigation';
|
||||||
|
|
||||||
export function LayoutChannel({ children }: { children: React.ReactNode }) {
|
export function LayoutChannel({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
import ChannelBlackList from '@lume/app/channel/components/blacklist';
|
import ChannelBlackList from '@app/channel/components/blacklist';
|
||||||
import ChannelMembers from '@lume/app/channel/components/members';
|
import ChannelMembers from '@app/channel/components/members';
|
||||||
import ChannelMessageForm from '@lume/app/channel/components/messages/form';
|
import ChannelMessageForm from '@app/channel/components/messages/form';
|
||||||
import ChannelMetadata from '@lume/app/channel/components/metadata';
|
import ChannelMetadata from '@app/channel/components/metadata';
|
||||||
import ChannelUpdateModal from '@lume/app/channel/components/updateModal';
|
import ChannelUpdateModal from '@app/channel/components/updateModal';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { channelMessagesAtom, channelReplyAtom } from '@lume/stores/channel';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { dateToUnix, hoursAgo } from '@lume/utils/getDate';
|
import { channelMessagesAtom, channelReplyAtom } from '@stores/channel';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
|
||||||
import { getActiveBlacklist, getBlacklist } from '@lume/utils/storage';
|
import { dateToUnix, getHourAgo } from '@utils/date';
|
||||||
import { arrayObjToPureArr } from '@lume/utils/transform';
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
import { getActiveBlacklist, getBlacklist } from '@utils/storage';
|
||||||
|
import { arrayObjToPureArr } from '@utils/transform';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
import { useResetAtom } from 'jotai/utils';
|
import { useResetAtom } from 'jotai/utils';
|
||||||
@ -30,7 +33,7 @@ const fetchHided = async ([, id]) => {
|
|||||||
return array;
|
return array;
|
||||||
};
|
};
|
||||||
|
|
||||||
const ChannelMessageList = lazy(() => import('@lume/app/channel/components/messageList'));
|
const ChannelMessageList = lazy(() => import('@app/channel/components/messageList'));
|
||||||
|
|
||||||
export function Page() {
|
export function Page() {
|
||||||
const pool: any = useContext(RelayContext);
|
const pool: any = useContext(RelayContext);
|
||||||
@ -57,7 +60,7 @@ export function Page() {
|
|||||||
{
|
{
|
||||||
'#e': [key],
|
'#e': [key],
|
||||||
kinds: [42],
|
kinds: [42],
|
||||||
since: dateToUnix(hoursAgo(24, now.current)),
|
since: dateToUnix(getHourAgo(24, now.current)),
|
||||||
limit: 20,
|
limit: 20,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import ChatsListItem from '@lume/app/chat/components/item';
|
import ChatsListItem from '@app/chat/components/item';
|
||||||
import ChatsListSelfItem from '@lume/app/chat/components/self';
|
import ChatsListSelfItem from '@app/chat/components/self';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
|
||||||
import { getChats } from '@lume/utils/storage';
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { getChats } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { ChatMessageItem } from '@lume/app/chat/components/messages/item';
|
import { ChatMessageItem } from '@app/chat/components/messages/item';
|
||||||
import { sortedChatMessagesAtom } from '@lume/stores/chat';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { sortedChatMessagesAtom } from '@stores/chat';
|
||||||
|
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useCallback, useRef } from 'react';
|
import { useCallback, useRef } from 'react';
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import { ImagePicker } from '@lume/shared/form/imagePicker';
|
import { ImagePicker } from '@shared/form/imagePicker';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { chatContentAtom } from '@lume/stores/chat';
|
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import { chatContentAtom } from '@stores/chat';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
import { useResetAtom } from 'jotai/utils';
|
import { useResetAtom } from 'jotai/utils';
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import ChatMessageUser from '@lume/app/chat/components/messages/user';
|
import ChatMessageUser from '@app/chat/components/messages/user';
|
||||||
import ImagePreview from '@lume/app/note/components/preview/image';
|
import { useDecryptMessage } from '@app/chat/hooks/useDecryptMessage';
|
||||||
import VideoPreview from '@lume/app/note/components/preview/video';
|
import ImagePreview from '@app/note/components/preview/image';
|
||||||
import { useDecryptMessage } from '@lume/utils/hooks/useDecryptMessage';
|
import VideoPreview from '@app/note/components/preview/video';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import AppHeader from '@lume/shared/appHeader';
|
import AppHeader from '@shared/appHeader';
|
||||||
import MultiAccounts from '@lume/shared/multiAccounts';
|
import MultiAccounts from '@shared/multiAccounts';
|
||||||
import Navigation from '@lume/shared/navigation';
|
import Navigation from '@shared/navigation';
|
||||||
|
|
||||||
export function LayoutChat({ children }: { children: React.ReactNode }) {
|
export function LayoutChat({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
import ChatMessageForm from '@lume/app/chat/components/messages/form';
|
import ChatMessageForm from '@app/chat/components/messages/form';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { chatMessagesAtom } from '@lume/stores/chat';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { chatMessagesAtom } from '@stores/chat';
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
import { useResetAtom } from 'jotai/utils';
|
import { useResetAtom } from 'jotai/utils';
|
||||||
import { Suspense, lazy, useContext, useEffect } from 'react';
|
import { Suspense, lazy, useContext, useEffect } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
|
||||||
const ChatMessageList = lazy(() => import('@lume/app/chat/components/messageList'));
|
const ChatMessageList = lazy(() => import('@app/chat/components/messageList'));
|
||||||
|
|
||||||
export function Page() {
|
export function Page() {
|
||||||
const pool: any = useContext(RelayContext);
|
const pool: any = useContext(RelayContext);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getActiveAccount } from '@lume/utils/storage';
|
import { getActiveAccount } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import { navigate } from 'vite-plugin-ssr/client/router';
|
import { navigate } from 'vite-plugin-ssr/client/router';
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
import LumeIcon from '@lume/shared/icons/lume';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import LumeIcon from '@icons/lume';
|
||||||
import { dateToUnix, hoursAgo } from '@lume/utils/getDate';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix, getHourAgo } from '@utils/date';
|
||||||
import {
|
import {
|
||||||
addToBlacklist,
|
addToBlacklist,
|
||||||
countTotalLongNotes,
|
countTotalLongNotes,
|
||||||
@ -11,8 +14,8 @@ import {
|
|||||||
getActiveAccount,
|
getActiveAccount,
|
||||||
getLastLogin,
|
getLastLogin,
|
||||||
updateLastLogin,
|
updateLastLogin,
|
||||||
} from '@lume/utils/storage';
|
} from '@utils/storage';
|
||||||
import { getParentID, nip02ToArray } from '@lume/utils/transform';
|
import { getParentID, nip02ToArray } from '@utils/transform';
|
||||||
|
|
||||||
import { useContext, useEffect, useRef } from 'react';
|
import { useContext, useEffect, useRef } from 'react';
|
||||||
import { navigate } from 'vite-plugin-ssr/client/router';
|
import { navigate } from 'vite-plugin-ssr/client/router';
|
||||||
@ -38,12 +41,12 @@ export function Page() {
|
|||||||
let sinceLongNotes: number;
|
let sinceLongNotes: number;
|
||||||
|
|
||||||
if (notes === 0) {
|
if (notes === 0) {
|
||||||
sinceNotes = dateToUnix(hoursAgo(48, now.current));
|
sinceNotes = dateToUnix(getHourAgo(48, now.current));
|
||||||
} else {
|
} else {
|
||||||
if (parseInt(lastLogin) > 0) {
|
if (parseInt(lastLogin) > 0) {
|
||||||
sinceNotes = parseInt(lastLogin);
|
sinceNotes = parseInt(lastLogin);
|
||||||
} else {
|
} else {
|
||||||
sinceNotes = dateToUnix(hoursAgo(48, now.current));
|
sinceNotes = dateToUnix(getHourAgo(48, now.current));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +177,7 @@ export function Page() {
|
|||||||
() => {
|
() => {
|
||||||
updateLastLogin(dateToUnix(now.current));
|
updateLastLogin(dateToUnix(now.current));
|
||||||
timeout = setTimeout(() => {
|
timeout = setTimeout(() => {
|
||||||
navigate('/app/daily', { overwriteLastHistoryEntry: true });
|
navigate('/app/radar', { overwriteLastHistoryEntry: true });
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import { Kind1063 } from '@lume/app/note/components/kind1063';
|
import { Kind1063 } from '@app/note/components/kind1063';
|
||||||
import NoteMetadata from '@lume/app/note/components/metadata';
|
import NoteMetadata from '@app/note/components/metadata';
|
||||||
import { NoteParent } from '@lume/app/note/components/parent';
|
import { NoteParent } from '@app/note/components/parent';
|
||||||
import { NoteDefaultUser } from '@lume/app/note/components/user/default';
|
import { NoteDefaultUser } from '@app/note/components/user/default';
|
||||||
import { NoteWrapper } from '@lume/app/note/components/wrapper';
|
import { NoteWrapper } from '@app/note/components/wrapper';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
import { isTagsIncludeID } from '@lume/utils/transform';
|
import { noteParser } from '@utils/parser';
|
||||||
|
import { isTagsIncludeID } from '@utils/transform';
|
||||||
|
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { MentionNote } from '@lume/app/note/components/mentions/note';
|
import { MentionNote } from '@app/note/components/mentions/note';
|
||||||
import { MentionUser } from '@lume/app/note/components/mentions/user';
|
import { MentionUser } from '@app/note/components/mentions/user';
|
||||||
import ImagePreview from '@lume/app/note/components/preview/image';
|
import ImagePreview from '@app/note/components/preview/image';
|
||||||
import VideoPreview from '@lume/app/note/components/preview/video';
|
import VideoPreview from '@app/note/components/preview/video';
|
||||||
|
|
||||||
import ReactMarkdown from 'react-markdown';
|
import ReactMarkdown from 'react-markdown';
|
||||||
import remarkGfm from 'remark-gfm';
|
import remarkGfm from 'remark-gfm';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
|
|
||||||
function isImage(url: string) {
|
function isImage(url: string) {
|
||||||
return /\.(jpg|jpeg|gif|png|webp|avif)$/.test(url);
|
return /\.(jpg|jpeg|gif|png|webp|avif)$/.test(url);
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import { Kind1063 } from '@lume/app/note/components/kind1063';
|
import { Kind1063 } from '@app/note/components/kind1063';
|
||||||
import { NoteSkeleton } from '@lume/app/note/components/skeleton';
|
import { NoteSkeleton } from '@app/note/components/skeleton';
|
||||||
import { NoteDefaultUser } from '@lume/app/note/components/user/default';
|
import { NoteDefaultUser } from '@app/note/components/user/default';
|
||||||
import { NoteWrapper } from '@lume/app/note/components/wrapper';
|
import { NoteWrapper } from '@app/note/components/wrapper';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { memo, useContext } from 'react';
|
import { memo, useContext } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
export function MentionUser(props: { children: any[] }) {
|
export function MentionUser(props: { children: any[] }) {
|
||||||
const pubkey = props.children[0];
|
const pubkey = props.children[0];
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
import NoteLike from '@lume/app/note/components/metadata/like';
|
import NoteLike from '@app/note/components/metadata/like';
|
||||||
import NoteReply from '@lume/app/note/components/metadata/reply';
|
import NoteReply from '@app/note/components/metadata/reply';
|
||||||
import NoteRepost from '@lume/app/note/components/metadata/repost';
|
import NoteRepost from '@app/note/components/metadata/repost';
|
||||||
import ZapIcon from '@lume/shared/icons/zap';
|
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
|
import ZapIcon from '@icons/zap';
|
||||||
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import LikeIcon from '@lume/shared/icons/like';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import LikeIcon from '@icons/like';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
import { useContext, useEffect, useState } from 'react';
|
import { useContext, useEffect, useState } from 'react';
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
import ReplyIcon from '@lume/shared/icons/reply';
|
import { Image } from '@shared/image';
|
||||||
import { Image } from '@lume/shared/image';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import ReplyIcon from '@icons/reply';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import RepostIcon from '@lume/shared/icons/repost';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
import RepostIcon from '@icons/repost';
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
import { useContext, useEffect, useState } from 'react';
|
import { useContext, useEffect, useState } from 'react';
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import { Kind1063 } from '@lume/app/note/components/kind1063';
|
import { Kind1063 } from '@app/note/components/kind1063';
|
||||||
import NoteMetadata from '@lume/app/note/components/metadata';
|
import NoteMetadata from '@app/note/components/metadata';
|
||||||
import { NoteSkeleton } from '@lume/app/note/components/skeleton';
|
import { NoteSkeleton } from '@app/note/components/skeleton';
|
||||||
import { NoteDefaultUser } from '@lume/app/note/components/user/default';
|
import { NoteDefaultUser } from '@app/note/components/user/default';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { memo, useContext } from 'react';
|
import { memo, useContext } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
|
|
||||||
export default function ImagePreview({ urls }: { urls: string[] }) {
|
export default function ImagePreview({ urls }: { urls: string[] }) {
|
||||||
return (
|
return (
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { RootNote } from '@lume/app/note/components/rootNote';
|
import { RootNote } from '@app/note/components/rootNote';
|
||||||
import { NoteRepostUser } from '@lume/app/note/components/user/repost';
|
import { NoteRepostUser } from '@app/note/components/user/repost';
|
||||||
import { NoteWrapper } from '@lume/app/note/components/wrapper';
|
import { NoteWrapper } from '@app/note/components/wrapper';
|
||||||
import { getQuoteID } from '@lume/utils/transform';
|
|
||||||
|
import { getQuoteID } from '@utils/transform';
|
||||||
|
|
||||||
export function NoteQuoteRepost({ event }: { event: any }) {
|
export function NoteQuoteRepost({ event }: { event: any }) {
|
||||||
const rootID = getQuoteID(event.tags);
|
const rootID = getQuoteID(event.tags);
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
|
||||||
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import NoteReplyUser from '@lume/app/note/components/user/reply';
|
import NoteReplyUser from '@app/note/components/user/reply';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
export default function Reply({ data }: { data: any }) {
|
export default function Reply({ data }: { data: any }) {
|
||||||
const content = noteParser(data);
|
const content = noteParser(data);
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import NoteReplyForm from '@lume/app/note/components/replies/form';
|
import NoteReplyForm from '@app/note/components/replies/form';
|
||||||
import Reply from '@lume/app/note/components/replies/item';
|
import Reply from '@app/note/components/replies/item';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { sortEvents } from '@lume/utils/transform';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { sortEvents } from '@utils/transform';
|
||||||
|
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import { Kind1063 } from '@lume/app/note/components/kind1063';
|
import { Kind1063 } from '@app/note/components/kind1063';
|
||||||
import NoteMetadata from '@lume/app/note/components/metadata';
|
import NoteMetadata from '@app/note/components/metadata';
|
||||||
import { NoteSkeleton } from '@lume/app/note/components/skeleton';
|
import { NoteSkeleton } from '@app/note/components/skeleton';
|
||||||
import { NoteDefaultUser } from '@lume/app/note/components/user/default';
|
import { NoteDefaultUser } from '@app/note/components/user/default';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { noteParser } from '@lume/utils/parser';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { memo, useContext } from 'react';
|
import { memo, useContext } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import AppHeader from '@lume/shared/appHeader';
|
import AppHeader from '@shared/appHeader';
|
||||||
import MultiAccounts from '@lume/shared/multiAccounts';
|
import MultiAccounts from '@shared/multiAccounts';
|
||||||
import Navigation from '@lume/shared/navigation';
|
import Navigation from '@shared/navigation';
|
||||||
|
|
||||||
export function LayoutNewsfeed({ children }: { children: React.ReactNode }) {
|
export function LayoutNewsfeed({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { Kind1 } from '@lume/app/note/components/kind1';
|
import { Kind1 } from '@app/note/components/kind1';
|
||||||
import NoteMetadata from '@lume/app/note/components/metadata';
|
import NoteMetadata from '@app/note/components/metadata';
|
||||||
import RepliesList from '@lume/app/note/components/replies/list';
|
import RepliesList from '@app/note/components/replies/list';
|
||||||
import { NoteDefaultUser } from '@lume/app/note/components/user/default';
|
import { NoteDefaultUser } from '@app/note/components/user/default';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
|
||||||
import { noteParser } from '@lume/utils/parser';
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
import { noteParser } from '@utils/parser';
|
||||||
|
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import useSWRSubscription from 'swr/subscription';
|
import useSWRSubscription from 'swr/subscription';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { CreateViewModal } from '@lume/app/daily/components/views/createModal';
|
import { CreateViewModal } from '@app/radar/components/views/createModal';
|
||||||
|
|
||||||
export function Header() {
|
export function Header() {
|
||||||
return (
|
return (
|
@ -1,5 +1,5 @@
|
|||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
import CancelIcon from '@icons/cancel';
|
||||||
import PlusIcon from '@lume/shared/icons/plus';
|
import PlusIcon from '@icons/plus';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { Fragment, useState } from 'react';
|
import { Fragment, useState } from 'react';
|
@ -1,6 +1,6 @@
|
|||||||
import AppHeader from '@lume/shared/appHeader';
|
import AppHeader from '@shared/appHeader';
|
||||||
import MultiAccounts from '@lume/shared/multiAccounts';
|
import MultiAccounts from '@shared/multiAccounts';
|
||||||
import Navigation from '@lume/shared/navigation';
|
import Navigation from '@shared/navigation';
|
||||||
|
|
||||||
export function LayoutNewsfeed({ children }: { children: React.ReactNode }) {
|
export function LayoutNewsfeed({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
@ -1,8 +1,9 @@
|
|||||||
import { Header } from '@lume/app/daily/components/header';
|
import { NoteBase } from '@app/note/components/base';
|
||||||
import { NoteBase } from '@lume/app/note/components/base';
|
import { NoteQuoteRepost } from '@app/note/components/quoteRepost';
|
||||||
import { NoteQuoteRepost } from '@lume/app/note/components/quoteRepost';
|
import { NoteSkeleton } from '@app/note/components/skeleton';
|
||||||
import { NoteSkeleton } from '@lume/app/note/components/skeleton';
|
import { Header } from '@app/radar/components/header';
|
||||||
import { getNotes } from '@lume/utils/storage';
|
|
||||||
|
import { getNotes } from '@utils/storage';
|
||||||
|
|
||||||
import { useInfiniteQuery } from '@tanstack/react-query';
|
import { useInfiniteQuery } from '@tanstack/react-query';
|
||||||
import { useVirtualizer } from '@tanstack/react-virtual';
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
@ -1,7 +1,7 @@
|
|||||||
export function Page() {
|
export function Page() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<p>MySpace</p>
|
<p>Space</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { useProfile } from '@lume/utils/hooks/useProfile';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
|
||||||
|
import { useProfile } from '@utils/hooks/useProfile';
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
export default function User({ pubkey }: { pubkey: string }) {
|
export default function User({ pubkey }: { pubkey: string }) {
|
||||||
const { user } = useProfile(pubkey);
|
const { user } = useProfile(pubkey);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import ArrowLeftIcon from '@lume/shared/icons/arrowLeft';
|
import ArrowLeftIcon from '@icons/arrowLeft';
|
||||||
import ArrowRightIcon from '@lume/shared/icons/arrowRight';
|
import ArrowRightIcon from '@icons/arrowRight';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import EyeOffIcon from '@lume/shared/icons/eyeOff';
|
import EyeOffIcon from '@icons/eyeOff';
|
||||||
import EyeOnIcon from '@lume/shared/icons/eyeOn';
|
import EyeOnIcon from '@icons/eyeOn';
|
||||||
import { onboardingAtom } from '@lume/stores/onboarding';
|
|
||||||
|
import { onboardingAtom } from '@stores/onboarding';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
import { generatePrivateKey, getPublicKey, nip19 } from 'nostr-tools';
|
import { generatePrivateKey, getPublicKey, nip19 } from 'nostr-tools';
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { AvatarUploader } from '@lume/shared/avatarUploader';
|
import { AvatarUploader } from '@shared/avatarUploader';
|
||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
import { onboardingAtom } from '@lume/stores/onboarding';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
import { onboardingAtom } from '@stores/onboarding';
|
||||||
|
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
import User from '@lume/auth/components/user';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import CheckCircleIcon from '@lume/shared/icons/checkCircle';
|
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import CheckCircleIcon from '@icons/checkCircle';
|
||||||
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { onboardingAtom } from '@lume/stores/onboarding';
|
import { WRITEONLY_RELAYS } from '@stores/constants';
|
||||||
import { createAccount, createPleb } from '@lume/utils/storage';
|
import { onboardingAtom } from '@stores/onboarding';
|
||||||
import { arrayToNIP02 } from '@lume/utils/transform';
|
|
||||||
|
import { createAccount, createPleb } from '@utils/storage';
|
||||||
|
import { arrayToNIP02 } from '@utils/transform';
|
||||||
|
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
import { getEventHash, signEvent } from 'nostr-tools';
|
import { getEventHash, signEvent } from 'nostr-tools';
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
import { navigate } from 'vite-plugin-ssr/client/router';
|
import { navigate } from 'vite-plugin-ssr/client/router';
|
||||||
|
|
||||||
|
import User from '../../../components/user';
|
||||||
|
|
||||||
const initialList = [
|
const initialList = [
|
||||||
{ pubkey: '82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2' },
|
{ pubkey: '82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2' },
|
||||||
{ pubkey: 'a341f45ff9758f570a21b000c17d4e53a3a497c8397f26c0e6d61e5acffc7a98' },
|
{ pubkey: 'a341f45ff9758f570a21b000c17d4e53a3a497c8397f26c0e6d61e5acffc7a98' },
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { onboardingAtom } from '@lume/stores/onboarding';
|
import { onboardingAtom } from '@stores/onboarding';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
import { getPublicKey, nip19 } from 'nostr-tools';
|
import { getPublicKey, nip19 } from 'nostr-tools';
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { DEFAULT_AVATAR, READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { onboardingAtom } from '@lume/stores/onboarding';
|
import { DEFAULT_AVATAR, READONLY_RELAYS } from '@stores/constants';
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
import { onboardingAtom } from '@stores/onboarding';
|
||||||
import { createAccount, createPleb } from '@lume/utils/storage';
|
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
import { createAccount, createPleb } from '@utils/storage';
|
||||||
|
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
import { getPublicKey } from 'nostr-tools';
|
import { getPublicKey } from 'nostr-tools';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import ArrowRightIcon from '@lume/shared/icons/arrowRight';
|
import { Image } from '@shared/image';
|
||||||
import { Image } from '@lume/shared/image';
|
|
||||||
|
import ArrowRightIcon from '@icons/arrowRight';
|
||||||
|
|
||||||
const PLEBS = [
|
const PLEBS = [
|
||||||
'https://133332.xyz/p.jpg',
|
'https://133332.xyz/p.jpg',
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import '@lume/renderer/index.css';
|
|
||||||
import { Shell } from '@lume/renderer/shell';
|
|
||||||
import { PageContextClient } from '@lume/renderer/types';
|
|
||||||
|
|
||||||
import { StrictMode } from 'react';
|
import { StrictMode } from 'react';
|
||||||
import { Root, createRoot, hydrateRoot } from 'react-dom/client';
|
import { Root, createRoot, hydrateRoot } from 'react-dom/client';
|
||||||
import 'vidstack/styles/defaults.css';
|
import 'vidstack/styles/defaults.css';
|
||||||
|
|
||||||
|
import './index.css';
|
||||||
|
import { Shell } from './shell';
|
||||||
|
import { PageContextClient } from './types';
|
||||||
|
|
||||||
export const clientRouting = true;
|
export const clientRouting = true;
|
||||||
export const hydrationCanBeAborted = true;
|
export const hydrationCanBeAborted = true;
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { Shell } from '@lume/renderer/shell';
|
|
||||||
import { PageContextServer } from '@lume/renderer/types';
|
|
||||||
|
|
||||||
import { StrictMode } from 'react';
|
import { StrictMode } from 'react';
|
||||||
import ReactDOMServer from 'react-dom/server';
|
import ReactDOMServer from 'react-dom/server';
|
||||||
import { dangerouslySkipEscape, escapeInject } from 'vite-plugin-ssr/server';
|
import { dangerouslySkipEscape, escapeInject } from 'vite-plugin-ssr/server';
|
||||||
|
|
||||||
|
import { Shell } from './shell';
|
||||||
|
import { PageContextServer } from './types';
|
||||||
|
|
||||||
export const passToClient = ['pageProps'];
|
export const passToClient = ['pageProps'];
|
||||||
|
|
||||||
export function render(pageContext: PageContextServer) {
|
export function render(pageContext: PageContextServer) {
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { PageContext } from '@lume/renderer/types';
|
import { RelayProvider } from '@shared/relayProvider';
|
||||||
import { RelayProvider } from '@lume/shared/relayProvider';
|
|
||||||
import { PageContextProvider } from '@lume/utils/hooks/usePageContext';
|
import { PageContextProvider } from '@utils/hooks/usePageContext';
|
||||||
|
|
||||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
||||||
|
|
||||||
import { LayoutDefault } from './layoutDefault';
|
import { LayoutDefault } from './layoutDefault';
|
||||||
|
import { PageContext } from './types';
|
||||||
|
|
||||||
const queryClient = new QueryClient();
|
const queryClient = new QueryClient();
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
export default function ActiveAccount({ user }: { user: any }) {
|
export default function ActiveAccount({ user }: { user: any }) {
|
||||||
const userData = JSON.parse(user.metadata);
|
const userData = JSON.parse(user.metadata);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
|
||||||
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
export default function InactiveAccount({ user }: { user: any }) {
|
export default function InactiveAccount({ user }: { user: any }) {
|
||||||
const userData = JSON.parse(user.metadata);
|
const userData = JSON.parse(user.metadata);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { usePageContext } from '@lume/utils/hooks/usePageContext';
|
import { usePageContext } from '@utils/hooks/usePageContext';
|
||||||
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import ArrowLeftIcon from '@lume/shared/icons/arrowLeft';
|
import ArrowLeftIcon from '@icons/arrowLeft';
|
||||||
import ArrowRightIcon from '@lume/shared/icons/arrowRight';
|
import ArrowRightIcon from '@icons/arrowRight';
|
||||||
import RefreshIcon from '@lume/shared/icons/refresh';
|
import RefreshIcon from '@icons/refresh';
|
||||||
|
|
||||||
export default function AppHeader() {
|
export default function AppHeader() {
|
||||||
const goBack = () => {
|
const goBack = () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { createBlobFromFile } from '@lume/utils/createBlobFromFile';
|
import { createBlobFromFile } from '@utils/createBlobFromFile';
|
||||||
|
|
||||||
import { open } from '@tauri-apps/api/dialog';
|
import { open } from '@tauri-apps/api/dialog';
|
||||||
import { Body, fetch } from '@tauri-apps/api/http';
|
import { Body, fetch } from '@tauri-apps/api/http';
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { Post } from '@lume/shared/composer/types/post';
|
import { Post } from '@shared/composer/types/post';
|
||||||
import { User } from '@lume/shared/composer/user';
|
import { User } from '@shared/composer/user';
|
||||||
import CancelIcon from '@lume/shared/icons/cancel';
|
|
||||||
import ChevronDownIcon from '@lume/shared/icons/chevronDown';
|
import CancelIcon from '@icons/cancel';
|
||||||
import ChevronRightIcon from '@lume/shared/icons/chevronRight';
|
import ChevronDownIcon from '@icons/chevronDown';
|
||||||
import ComposeIcon from '@lume/shared/icons/compose';
|
import ChevronRightIcon from '@icons/chevronRight';
|
||||||
import { composerAtom } from '@lume/stores/composer';
|
import ComposeIcon from '@icons/compose';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
|
||||||
|
import { composerAtom } from '@stores/composer';
|
||||||
|
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
|
||||||
import { Dialog, Transition } from '@headlessui/react';
|
import { Dialog, Transition } from '@headlessui/react';
|
||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@lume/stores/constants';
|
|
||||||
|
import { DEFAULT_AVATAR, IMGPROXY_URL } from '@stores/constants';
|
||||||
|
|
||||||
export function User({ data }: { data: any }) {
|
export function User({ data }: { data: any }) {
|
||||||
const metadata = JSON.parse(data.metadata);
|
const metadata = JSON.parse(data.metadata);
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import HeartBeatIcon from '@lume/shared/icons/heartbeat';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
import HeartBeatIcon from '@icons/heartbeat';
|
||||||
import { hasNewerNoteAtom } from '@lume/stores/note';
|
|
||||||
import { dateToUnix } from '@lume/utils/getDate';
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
|
import { hasNewerNoteAtom } from '@stores/note';
|
||||||
import { createChat, createNote, updateAccount } from '@lume/utils/storage';
|
|
||||||
import { getParentID, nip02ToArray } from '@lume/utils/transform';
|
import { dateToUnix } from '@utils/date';
|
||||||
|
import { useActiveAccount } from '@utils/hooks/useActiveAccount';
|
||||||
|
import { createChat, createNote, updateAccount } from '@utils/storage';
|
||||||
|
import { getParentID, nip02ToArray } from '@utils/transform';
|
||||||
|
|
||||||
import { useSetAtom } from 'jotai';
|
import { useSetAtom } from 'jotai';
|
||||||
import { useContext, useRef } from 'react';
|
import { useContext, useRef } from 'react';
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import PlusIcon from '@lume/shared/icons/plus';
|
import PlusIcon from '@icons/plus';
|
||||||
import { channelContentAtom } from '@lume/stores/channel';
|
|
||||||
import { chatContentAtom } from '@lume/stores/chat';
|
import { channelContentAtom } from '@stores/channel';
|
||||||
import { noteContentAtom } from '@lume/stores/note';
|
import { chatContentAtom } from '@stores/chat';
|
||||||
import { createBlobFromFile } from '@lume/utils/createBlobFromFile';
|
import { noteContentAtom } from '@stores/note';
|
||||||
|
|
||||||
|
import { createBlobFromFile } from '@utils/createBlobFromFile';
|
||||||
|
|
||||||
import { open } from '@tauri-apps/api/dialog';
|
import { open } from '@tauri-apps/api/dialog';
|
||||||
import { Body, fetch } from '@tauri-apps/api/http';
|
import { Body, fetch } from '@tauri-apps/api/http';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_AVATAR } from '@lume/stores/constants';
|
import { DEFAULT_AVATAR } from '@stores/constants';
|
||||||
|
|
||||||
export function Image(props) {
|
export function Image(props) {
|
||||||
const addImageFallback = (event) => {
|
const addImageFallback = (event) => {
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
import ActiveAccount from '@lume/shared/accounts/active';
|
import ActiveAccount from '@shared/accounts/active';
|
||||||
import InactiveAccount from '@lume/shared/accounts/inactive';
|
import InactiveAccount from '@shared/accounts/inactive';
|
||||||
import BellIcon from '@lume/shared/icons/bell';
|
|
||||||
import PlusIcon from '@lume/shared/icons/plus';
|
import BellIcon from '@icons/bell';
|
||||||
import { APP_VERSION } from '@lume/stores/constants';
|
import PlusIcon from '@icons/plus';
|
||||||
import { getAccounts, getActiveAccount } from '@lume/utils/storage';
|
|
||||||
|
import { APP_VERSION } from '@stores/constants';
|
||||||
|
|
||||||
|
import { getAccounts, getActiveAccount } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
import ChannelsList from '@lume/app/channel/components/list';
|
import ChannelsList from '@app/channel/components/list';
|
||||||
import ChatsList from '@lume/app/chat/components/list';
|
import ChatsList from '@app/chat/components/list';
|
||||||
import ActiveLink from '@lume/shared/activeLink';
|
|
||||||
import { ComposerModal } from '@lume/shared/composer/modal';
|
import ActiveLink from '@shared/activeLink';
|
||||||
import EventCollector from '@lume/shared/eventCollector';
|
import { ComposerModal } from '@shared/composer/modal';
|
||||||
import MyspaceIcon from '@lume/shared/icons/myspace';
|
import EventCollector from '@shared/eventCollector';
|
||||||
import NavArrowDownIcon from '@lume/shared/icons/navArrowDown';
|
|
||||||
import ThreadsIcon from '@lume/shared/icons/threads';
|
import MyspaceIcon from '@icons/myspace';
|
||||||
import WorldIcon from '@lume/shared/icons/world';
|
import NavArrowDownIcon from '@icons/navArrowDown';
|
||||||
|
import ThreadsIcon from '@icons/threads';
|
||||||
|
import WorldIcon from '@icons/world';
|
||||||
|
|
||||||
import { Disclosure } from '@headlessui/react';
|
import { Disclosure } from '@headlessui/react';
|
||||||
|
|
||||||
@ -24,14 +26,14 @@ export default function Navigation() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col text-zinc-400">
|
<div className="flex flex-col text-zinc-400">
|
||||||
<ActiveLink
|
<ActiveLink
|
||||||
href="/app/daily"
|
href="/app/radar"
|
||||||
className="flex h-8 items-center gap-2.5 rounded-md px-2.5 text-[13px] font-semibold hover:text-zinc-200"
|
className="flex h-8 items-center gap-2.5 rounded-md px-2.5 text-[13px] font-semibold hover:text-zinc-200"
|
||||||
activeClassName=""
|
activeClassName=""
|
||||||
>
|
>
|
||||||
<span className="inline-flex h-5 w-5 items-center justify-center rounded bg-zinc-900">
|
<span className="inline-flex h-5 w-5 items-center justify-center rounded bg-zinc-900">
|
||||||
<WorldIcon width={12} height={12} className="text-zinc-200" />
|
<WorldIcon width={12} height={12} className="text-zinc-200" />
|
||||||
</span>
|
</span>
|
||||||
<span>Daily</span>
|
<span>Radar</span>
|
||||||
</ActiveLink>
|
</ActiveLink>
|
||||||
<ActiveLink
|
<ActiveLink
|
||||||
href="/app/threads"
|
href="/app/threads"
|
||||||
@ -44,14 +46,14 @@ export default function Navigation() {
|
|||||||
<span>Threads</span>
|
<span>Threads</span>
|
||||||
</ActiveLink>
|
</ActiveLink>
|
||||||
<ActiveLink
|
<ActiveLink
|
||||||
href="/app/myspace"
|
href="/app/space"
|
||||||
className="flex h-8 items-center gap-2.5 rounded-md px-2.5 text-[13px] font-semibold hover:text-zinc-200"
|
className="flex h-8 items-center gap-2.5 rounded-md px-2.5 text-[13px] font-semibold hover:text-zinc-200"
|
||||||
activeClassName=""
|
activeClassName=""
|
||||||
>
|
>
|
||||||
<span className="inline-flex h-5 w-5 items-center justify-center rounded bg-zinc-900">
|
<span className="inline-flex h-5 w-5 items-center justify-center rounded bg-zinc-900">
|
||||||
<MyspaceIcon width={12} height={12} className="text-zinc-200" />
|
<MyspaceIcon width={12} height={12} className="text-zinc-200" />
|
||||||
</span>
|
</span>
|
||||||
<span>MySpace</span>
|
<span>Space</span>
|
||||||
</ActiveLink>
|
</ActiveLink>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useNetworkStatus } from '@lume/utils/hooks/useNetworkStatus';
|
import { useNetworkStatus } from '@utils/hooks/useNetworkStatus';
|
||||||
|
|
||||||
export function NetworkStatusIndicator() {
|
export function NetworkStatusIndicator() {
|
||||||
const isOnline = useNetworkStatus();
|
const isOnline = useNetworkStatus();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { RelayContext } from '@lume/shared/relaysProvider';
|
import { RelayContext } from '@shared/relaysProvider';
|
||||||
import { UserFollow } from '@lume/shared/user/follow';
|
import { UserFollow } from '@shared/user/follow';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import destr from 'destr';
|
import destr from 'destr';
|
||||||
import { Author } from 'nostr-relaypool';
|
import { Author } from 'nostr-relaypool';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { RelayContext } from '@lume/shared/relaysProvider';
|
import { RelayContext } from '@shared/relaysProvider';
|
||||||
import { UserFollow } from '@lume/shared/user/follow';
|
import { UserFollow } from '@shared/user/follow';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import { Author } from 'nostr-relaypool';
|
import { Author } from 'nostr-relaypool';
|
||||||
import { useContext, useEffect, useState } from 'react';
|
import { useContext, useEffect, useState } from 'react';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Image } from '@lume/shared/image';
|
import { Image } from '@shared/image';
|
||||||
import { RelayContext } from '@lume/shared/relayProvider';
|
import { RelayContext } from '@shared/relayProvider';
|
||||||
import { DEFAULT_AVATAR, READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
import { shortenKey } from '@lume/utils/shortenKey';
|
import { DEFAULT_AVATAR, READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
|
import { shortenKey } from '@utils/shortenKey';
|
||||||
|
|
||||||
import destr from 'destr';
|
import destr from 'destr';
|
||||||
import { Author } from 'nostr-relaypool';
|
import { Author } from 'nostr-relaypool';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { NoteBase } from '@lume/shared/note/base';
|
import { NoteBase } from '@shared/note/base';
|
||||||
import { RelayContext } from '@lume/shared/relaysProvider';
|
import { RelayContext } from '@shared/relaysProvider';
|
||||||
import { READONLY_RELAYS } from '@lume/stores/constants';
|
|
||||||
|
import { READONLY_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import { Author } from 'nostr-relaypool';
|
import { Author } from 'nostr-relaypool';
|
||||||
import { useContext, useEffect, useState } from 'react';
|
import { useContext, useEffect, useState } from 'react';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { FULL_RELAYS } from '@lume/stores/constants';
|
import { FULL_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import { RelayPool } from 'nostr-relaypool';
|
import { RelayPool } from 'nostr-relaypool';
|
||||||
import { createContext } from 'react';
|
import { createContext } from 'react';
|
||||||
|
22
src/utils/date.tsx
Normal file
22
src/utils/date.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// get X days ago with user provided date
|
||||||
|
export function getDayAgo(numOfDays, date = new Date()) {
|
||||||
|
const days = new Date(date.getTime());
|
||||||
|
days.setDate(date.getDate() - numOfDays);
|
||||||
|
|
||||||
|
return days;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get X hours ago with user provided date
|
||||||
|
export function getHourAgo(numOfHours, date = new Date()) {
|
||||||
|
const hours = new Date(date.getTime());
|
||||||
|
hours.setHours(date.getHours() - numOfHours);
|
||||||
|
|
||||||
|
return hours;
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert date to unix timestamp
|
||||||
|
export function dateToUnix(_date?: Date) {
|
||||||
|
const date = _date || new Date();
|
||||||
|
|
||||||
|
return Math.floor(date.getTime() / 1000);
|
||||||
|
}
|
@ -1,22 +0,0 @@
|
|||||||
// get X days ago with user provided date
|
|
||||||
export function daysAgo(numOfDays, date = new Date()) {
|
|
||||||
const daysAgo = new Date(date.getTime());
|
|
||||||
daysAgo.setDate(date.getDate() - numOfDays);
|
|
||||||
|
|
||||||
return daysAgo;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get X hours ago with user provided date
|
|
||||||
export function hoursAgo(numOfHours, date = new Date()) {
|
|
||||||
const hoursAgo = new Date(date.getTime());
|
|
||||||
hoursAgo.setHours(date.getHours() - numOfHours);
|
|
||||||
|
|
||||||
return hoursAgo;
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert date to unix timestamp
|
|
||||||
export function dateToUnix(_date?: Date) {
|
|
||||||
const date = _date || new Date();
|
|
||||||
|
|
||||||
return Math.floor(date.getTime() / 1000);
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
import { getActiveAccount } from '@lume/utils/storage';
|
import { getActiveAccount } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { METADATA_SERVICE } from '@lume/stores/constants';
|
import { METADATA_SERVICE } from '@stores/constants';
|
||||||
import { createPleb, getPleb } from '@lume/utils/storage';
|
|
||||||
|
import { createPleb, getPleb } from '@utils/storage';
|
||||||
|
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"baseUrl": "./",
|
"baseUrl": "./",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@lume/*": ["src/*"],
|
|
||||||
"@app/*": ["src/app/*"],
|
"@app/*": ["src/app/*"],
|
||||||
"@shared/*": ["src/shared/*"],
|
"@shared/*": ["src/shared/*"],
|
||||||
"@icons/*": ["src/shared/icons/*"],
|
"@icons/*": ["src/shared/icons/*"],
|
||||||
|
Loading…
Reference in New Issue
Block a user