From ab61bfb2cdf06965e740a6bea663eb36bf88770d Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Wed, 16 Aug 2023 20:52:09 +0700 Subject: [PATCH] wip: clean up & refactor --- package.json | 3 - pnpm-lock.yaml | 78 ---- .../20230814083543_add_events_table.sql | 2 +- .../20230816090508_clean_up_tables.sql | 8 + src-tauri/src/main.rs | 7 +- src/app/auth/create/step-1.tsx | 10 +- src/app/auth/onboarding/step-2.tsx | 4 +- src/app/auth/reset.tsx | 2 - src/app/auth/unlock.tsx | 5 +- src/app/auth/welcome.tsx | 4 +- src/app/channel/components/blacklist.tsx | 58 --- src/app/channel/components/createModal.tsx | 269 ----------- src/app/channel/components/item.tsx | 34 -- src/app/channel/components/list.tsx | 52 --- src/app/channel/components/member.tsx | 24 - src/app/channel/components/members.tsx | 28 -- src/app/channel/components/messages/form.tsx | 115 ----- .../components/messages/hideButton.tsx | 132 ------ src/app/channel/components/messages/item.tsx | 56 --- .../components/messages/muteButton.tsx | 132 ------ .../components/messages/replyButton.tsx | 29 -- .../channel/components/messages/userMute.tsx | 40 -- .../channel/components/messages/userReply.tsx | 35 -- src/app/channel/components/metadata.tsx | 44 -- src/app/channel/components/mutedItem.tsx | 85 ---- src/app/channel/hooks/useChannelProfile.tsx | 36 -- src/app/channel/index.tsx | 149 ------ src/app/chats/components/list.tsx | 5 +- src/app/chats/index.tsx | 33 +- src/app/settings/account.tsx | 11 +- src/app/settings/components/autoStart.tsx | 8 +- src/app/settings/components/cacheTime.tsx | 9 +- src/app/space/components/modals/feed.tsx | 4 +- src/app/space/components/modals/hashtag.tsx | 4 +- src/app/space/components/modals/image.tsx | 4 +- src/app/space/components/widgets/feed.tsx | 8 +- src/app/space/components/widgets/image.tsx | 36 -- src/app/space/components/widgets/network.tsx | 26 +- src/app/space/hooks/useLiveThread.tsx | 48 -- src/app/space/hooks/useNewsfeed.tsx | 45 -- src/app/space/index.tsx | 10 +- src/app/trending/components/trendingNotes.tsx | 10 +- .../trending/components/trendingProfiles.tsx | 10 +- src/libs/ndk/cache.ts | 6 +- src/libs/ndk/instance.ts | 1 + src/libs/storage.ts | 435 ------------------ src/libs/storage/instance.ts | 32 +- src/shared/accounts/active.tsx | 77 ---- src/shared/composer/mention/suggestion.tsx | 4 +- src/shared/composer/modal.tsx | 4 - src/shared/editProfileModal.tsx | 11 +- src/shared/logout.tsx | 15 +- src/shared/notes/actions.tsx | 9 +- src/shared/notes/hashtag.tsx | 4 +- src/shared/notes/kinds/kind1.tsx | 4 +- src/shared/notes/kinds/kind1063.tsx | 4 +- src/shared/notes/kinds/sub.tsx | 2 +- src/shared/notes/kinds/thread.tsx | 4 +- src/shared/notes/kinds/unsupport.tsx | 4 +- src/shared/notes/mentions/note.tsx | 4 +- src/shared/notes/mentions/user.tsx | 4 +- src/shared/notes/metadata.tsx | 20 +- src/shared/notes/replies/item.tsx | 6 +- src/shared/notes/replies/sub.tsx | 2 +- src/shared/protected.tsx | 35 -- src/shared/titleBar.tsx | 5 +- src/shared/user.tsx | 4 +- src/stores/channels.tsx | 92 ---- src/stores/constants.tsx | 66 +-- src/stores/shortcuts.tsx | 4 - src/stores/widgets.tsx | 9 + src/utils/date.tsx | 23 - src/utils/hooks/useAccount.tsx | 31 -- src/utils/hooks/useEvent.tsx | 2 +- src/utils/hooks/useNostr.tsx | 32 +- src/utils/hooks/useOpenGraph.tsx | 3 +- src/utils/hooks/useSecureStorage.tsx | 38 -- src/utils/transform.tsx | 81 +--- vite.config.ts | 12 +- 79 files changed, 183 insertions(+), 2618 deletions(-) create mode 100644 src-tauri/migrations/20230816090508_clean_up_tables.sql delete mode 100644 src/app/channel/components/blacklist.tsx delete mode 100644 src/app/channel/components/createModal.tsx delete mode 100644 src/app/channel/components/item.tsx delete mode 100644 src/app/channel/components/list.tsx delete mode 100644 src/app/channel/components/member.tsx delete mode 100644 src/app/channel/components/members.tsx delete mode 100644 src/app/channel/components/messages/form.tsx delete mode 100644 src/app/channel/components/messages/hideButton.tsx delete mode 100644 src/app/channel/components/messages/item.tsx delete mode 100644 src/app/channel/components/messages/muteButton.tsx delete mode 100644 src/app/channel/components/messages/replyButton.tsx delete mode 100644 src/app/channel/components/messages/userMute.tsx delete mode 100644 src/app/channel/components/messages/userReply.tsx delete mode 100644 src/app/channel/components/metadata.tsx delete mode 100644 src/app/channel/components/mutedItem.tsx delete mode 100644 src/app/channel/hooks/useChannelProfile.tsx delete mode 100644 src/app/channel/index.tsx delete mode 100644 src/app/space/components/widgets/image.tsx delete mode 100644 src/app/space/hooks/useLiveThread.tsx delete mode 100644 src/app/space/hooks/useNewsfeed.tsx delete mode 100644 src/libs/storage.ts delete mode 100644 src/shared/protected.tsx delete mode 100644 src/stores/channels.tsx delete mode 100644 src/stores/shortcuts.tsx delete mode 100644 src/utils/hooks/useAccount.tsx delete mode 100644 src/utils/hooks/useSecureStorage.tsx diff --git a/package.json b/package.json index 5e32c0aa..1564f7cd 100644 --- a/package.json +++ b/package.json @@ -20,14 +20,12 @@ "@ctrl/magnet-link": "^3.1.2", "@headlessui/react": "^1.7.16", "@nostr-dev-kit/ndk": "^0.8.17", - "@nostr-fetch/adapter-ndk": "^0.12.2", "@radix-ui/react-alert-dialog": "^1.0.4", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-popover": "^1.0.6", "@radix-ui/react-tooltip": "^1.0.6", "@tanstack/react-query": "^4.32.6", - "@tanstack/react-query-devtools": "^4.32.6", "@tanstack/react-virtual": "3.0.0-beta.54", "@tauri-apps/api": "2.0.0-alpha.6", "@tauri-apps/cli": "2.0.0-alpha.11", @@ -61,7 +59,6 @@ "immer": "^10.0.2", "light-bolt11-decoder": "^3.0.0", "lru-cache": "^10.0.1", - "nostr-fetch": "^0.12.2", "nostr-tools": "^1.14.0", "qrcode.react": "^3.1.0", "react": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3056977..02c3dbdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,9 +10,6 @@ dependencies: '@nostr-dev-kit/ndk': specifier: ^0.8.17 version: 0.8.17(typescript@5.1.6) - '@nostr-fetch/adapter-ndk': - specifier: ^0.12.2 - version: 0.12.2(@nostr-dev-kit/ndk@0.8.17)(nostr-fetch@0.12.2) '@radix-ui/react-alert-dialog': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) @@ -31,9 +28,6 @@ dependencies: '@tanstack/react-query': specifier: ^4.32.6 version: 4.32.6(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-query-devtools': - specifier: ^4.32.6 - version: 4.32.6(@tanstack/react-query@4.32.6)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-virtual': specifier: 3.0.0-beta.54 version: 3.0.0-beta.54(react@18.2.0) @@ -133,9 +127,6 @@ dependencies: lru-cache: specifier: ^10.0.1 version: 10.0.1 - nostr-fetch: - specifier: ^0.12.2 - version: 0.12.2 nostr-tools: specifier: ^1.14.0 version: 1.14.0 @@ -1003,24 +994,6 @@ packages: - typescript dev: false - /@nostr-fetch/adapter-ndk@0.12.2(@nostr-dev-kit/ndk@0.8.17)(nostr-fetch@0.12.2): - resolution: {integrity: sha512-+7EVuxS5DDZvNo6qbfFp7xRHwIyjyi36hYkiQFDjbQ4gX5LKo9RIPB1P+1XGkOSDFshypTbovZCaFunscJ/zhQ==} - peerDependencies: - '@nostr-dev-kit/ndk': ^0.7.5 - nostr-fetch: ^0.12.2 - dependencies: - '@nostr-dev-kit/ndk': 0.8.17(typescript@5.1.6) - '@nostr-fetch/kernel': 0.12.2 - nostr-fetch: 0.12.2 - dev: false - - /@nostr-fetch/kernel@0.12.2: - resolution: {integrity: sha512-ja7StOV33NmdtAMGfQIS0/R0dAkLRm3QxN6u/YAQdp5mXER4BYxiQKxUS/dCoTCSX986MH2zp9Fm0f76u4VaNQ==} - dependencies: - '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.1 - dev: false - /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false @@ -1733,32 +1706,10 @@ packages: tailwindcss: 3.3.3 dev: true - /@tanstack/match-sorter-utils@8.8.4: - resolution: {integrity: sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==} - engines: {node: '>=12'} - dependencies: - remove-accents: 0.4.2 - dev: false - /@tanstack/query-core@4.32.6: resolution: {integrity: sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==} dev: false - /@tanstack/react-query-devtools@4.32.6(@tanstack/react-query@4.32.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Gd9pBkm2sbeze9P5Yp8R7y0rZVUdoIOhduomDjz138WdJuVbRS4Y8p6gX2uMJFsUFVe7jA6fX/D6NfQ9o5OS/A==} - peerDependencies: - '@tanstack/react-query': ^4.32.6 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - superjson: 1.13.1 - use-sync-external-store: 1.2.0(react@18.2.0) - dev: false - /@tanstack/react-query@4.32.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg==} peerDependencies: @@ -2998,13 +2949,6 @@ packages: engines: {node: '>=12'} dev: false - /copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} - dependencies: - is-what: 4.1.15 - dev: false - /create-esm-loader@0.2.3: resolution: {integrity: sha512-cllzD6IU/mzXBs5OdQVWL3+ne5Elpu3Wdm7h5OldMbGXk76yr9XzHlQXWJ4zfs0ZAibe26rkbs4KvMAJm7fIZA==} engines: {node: '>=14.x'} @@ -4280,11 +4224,6 @@ packages: dependencies: call-bind: 1.0.2 - /is-what@4.1.15: - resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} - engines: {node: '>=12.13'} - dev: false - /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -5124,12 +5063,6 @@ packages: engines: {node: '>=14.16'} dev: false - /nostr-fetch@0.12.2: - resolution: {integrity: sha512-0WH0LlaPcIvG5gOIwrGtzRwHpaZ+JQxH0XG7EjQcKpviePVmVKWK7UAGuzuWJj/V0iSqnDGOLSQ+HSEBjGVCEQ==} - dependencies: - '@nostr-fetch/kernel': 0.12.2 - dev: false - /nostr-tools@1.14.0: resolution: {integrity: sha512-hwq2i1z5/DneXRE5Zu/TzQuKzVLcB+gOdfT9CeoiScvNw/2dWRGJvyTXIdF92d7NQ7nMcEwqVJPDytLpEpiiKw==} dependencies: @@ -6016,10 +5949,6 @@ packages: unified: 10.1.2 dev: false - /remove-accents@0.4.2: - resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} - dev: false - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -6354,13 +6283,6 @@ packages: time-span: 5.1.0 dev: false - /superjson@1.13.1: - resolution: {integrity: sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==} - engines: {node: '>=10'} - dependencies: - copy-anything: 3.0.5 - dev: false - /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} diff --git a/src-tauri/migrations/20230814083543_add_events_table.sql b/src-tauri/migrations/20230814083543_add_events_table.sql index 31049a6c..deb8ec52 100644 --- a/src-tauri/migrations/20230814083543_add_events_table.sql +++ b/src-tauri/migrations/20230814083543_add_events_table.sql @@ -2,7 +2,7 @@ CREATE TABLE events ( id INTEGER NOT NULL PRIMARY KEY, - cache_key TEXT NOT NULL UNIQUE, + cache_key TEXT NOT NULL, event_id TEXT NOT NULL UNIQUE, event_kind INTEGER NOT NULL DEFAULT 1, event TEXT NOT NULL diff --git a/src-tauri/migrations/20230816090508_clean_up_tables.sql b/src-tauri/migrations/20230816090508_clean_up_tables.sql new file mode 100644 index 00000000..0814840b --- /dev/null +++ b/src-tauri/migrations/20230816090508_clean_up_tables.sql @@ -0,0 +1,8 @@ +-- Add migration script here +DROP TABLE IF EXISTS notes; + +DROP TABLE IF EXISTS chats; + +DROP TABLE IF EXISTS metadata; + +DROP TABLE IF EXISTS replies; \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 0ba3c818..2bb51659 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -123,6 +123,12 @@ fn main() { sql: include_str!("../migrations/20230814083543_add_events_table.sql"), kind: MigrationKind::Up, }, + Migration { + version: 20230816090508, + description: "clean up tables", + sql: include_str!("../migrations/20230816090508_clean_up_tables.sql"), + kind: MigrationKind::Up, + }, ], ) .build(), @@ -138,7 +144,6 @@ fn main() { ..Default::default() }; - // let salt = Alphanumeric.sample_string(&mut rand::thread_rng(), 12); let key = argon2::hash_raw( password.as_ref(), b"LUME_NEED_RUST_DEVELOPER_HELP_MAKE_SALT_RANDOM", diff --git a/src/app/auth/create/step-1.tsx b/src/app/auth/create/step-1.tsx index a75a52e4..bc6dce7c 100644 --- a/src/app/auth/create/step-1.tsx +++ b/src/app/auth/create/step-1.tsx @@ -42,9 +42,13 @@ export function CreateStep1Screen() { }; const download = async () => { - await writeTextFile('lume-keys.txt', `Public key: ${npub}\nPrivate key: ${nsec}`, { - dir: BaseDirectory.Download, - }); + await writeTextFile( + `nostr_keys_${new Date().toISOString().slice(0, 10)}.txt`, + `Generated by Lume (lume.nu)\nPublic key: ${npub}\nPrivate key: ${nsec}`, + { + dir: BaseDirectory.Download, + } + ); setDownloaded(true); }; diff --git a/src/app/auth/onboarding/step-2.tsx b/src/app/auth/onboarding/step-2.tsx index 5f9ebd51..f530e509 100644 --- a/src/app/auth/onboarding/step-2.tsx +++ b/src/app/auth/onboarding/step-2.tsx @@ -5,7 +5,7 @@ import { useStorage } from '@libs/storage/provider'; import { ArrowRightCircleIcon, CheckCircleIcon, LoaderIcon } from '@shared/icons'; -import { BLOCK_KINDS } from '@stores/constants'; +import { widgetKinds } from '@stores/constants'; import { useOnboarding } from '@stores/onboarding'; const data = [ @@ -52,7 +52,7 @@ export function OnboardStep2Screen() { setLoading(true); for (const tag of tags) { - await db.createWidget(BLOCK_KINDS.hashtag, tag, tag.replace('#', '')); + await db.createWidget(widgetKinds.hashtag, tag, tag.replace('#', '')); } navigate('/auth/onboarding/step-3', { replace: true }); diff --git a/src/app/auth/reset.tsx b/src/app/auth/reset.tsx index 77aaca65..52d0be9b 100644 --- a/src/app/auth/reset.tsx +++ b/src/app/auth/reset.tsx @@ -11,8 +11,6 @@ import { EyeOffIcon, EyeOnIcon, LoaderIcon } from '@shared/icons'; import { useStronghold } from '@stores/stronghold'; -import { useAccount } from '@utils/hooks/useAccount'; - type FormValues = { password: string; privkey: string; diff --git a/src/app/auth/unlock.tsx b/src/app/auth/unlock.tsx index b0a7d343..bbbfc44d 100644 --- a/src/app/auth/unlock.tsx +++ b/src/app/auth/unlock.tsx @@ -60,18 +60,19 @@ export function UnlockScreen() { // redirect to home navigate('/', { replace: true }); } catch (e) { + setLoading(false); setError('password', { type: 'custom', message: e, }); } } else { + setLoading(false); setError('password', { type: 'custom', message: 'Password is required and must be greater than 3', }); } - setLoading(false); }; return ( @@ -118,7 +119,7 @@ export function UnlockScreen() { <> Decryting... - + ) : ( <> diff --git a/src/app/auth/welcome.tsx b/src/app/auth/welcome.tsx index c623c628..d66bbd3c 100644 --- a/src/app/auth/welcome.tsx +++ b/src/app/auth/welcome.tsx @@ -1,10 +1,12 @@ -import { LogicalSize, appWindow } from '@tauri-apps/plugin-window'; +import { LogicalSize, getCurrent } from '@tauri-apps/plugin-window'; import { useEffect } from 'react'; import { Link } from 'react-router-dom'; import { ArrowRightCircleIcon } from '@shared/icons/arrowRightCircle'; export function WelcomeScreen() { + const appWindow = getCurrent(); + async function setWindow() { await appWindow.setSize(new LogicalSize(400, 500)); await appWindow.setResizable(false); diff --git a/src/app/channel/components/blacklist.tsx b/src/app/channel/components/blacklist.tsx deleted file mode 100644 index 798d898e..00000000 --- a/src/app/channel/components/blacklist.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Popover, Transition } from '@headlessui/react'; -import { Fragment } from 'react'; - -import { MutedItem } from '@app/channel/components/mutedItem'; - -import { MuteIcon } from '@shared/icons'; - -export function ChannelBlackList({ blacklist }: { blacklist: any }) { - return ( - - {({ open }) => ( - <> - - - - - -
-
-
-

- Your muted list -

-

- Currently, unmute only affect locally, when you move to new client, - muted list will loaded again -

-
-
-
- {blacklist.map((item: any) => ( - - ))} -
-
-
-
- - )} -
- ); -} diff --git a/src/app/channel/components/createModal.tsx b/src/app/channel/components/createModal.tsx deleted file mode 100644 index 62dec65e..00000000 --- a/src/app/channel/components/createModal.tsx +++ /dev/null @@ -1,269 +0,0 @@ -import { Dialog, Transition } from '@headlessui/react'; -import { NDKEvent, NDKPrivateKeySigner } from '@nostr-dev-kit/ndk'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { Fragment, useContext, useEffect, useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router-dom'; - -import { useNDK } from '@libs/ndk/provider'; -import { createChannel } from '@libs/storage'; - -import { AvatarUploader } from '@shared/avatarUploader'; -import { CancelIcon, LoaderIcon, PlusIcon } from '@shared/icons'; -import { Image } from '@shared/image'; - -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { dateToUnix } from '@utils/date'; -import { useAccount } from '@utils/hooks/useAccount'; - -export function ChannelCreateModal() { - const { ndk } = useNDK(); - const queryClient = useQueryClient(); - const navigate = useNavigate(); - - const [isOpen, setIsOpen] = useState(false); - const [loading, setLoading] = useState(false); - const [image, setImage] = useState(DEFAULT_AVATAR); - - const { account } = useAccount(); - - const closeModal = () => { - setIsOpen(false); - }; - - const openModal = () => { - setIsOpen(true); - }; - - const { - register, - handleSubmit, - reset, - setValue, - formState: { isDirty, isValid }, - } = useForm(); - - const addChannel = useMutation({ - mutationFn: (event: any) => { - return createChannel( - event.id, - event.pubkey, - event.name, - event.picture, - event.about, - event.created_at - ); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['channels'] }); - }, - }); - - const onSubmit = (data: any) => { - setLoading(true); - - try { - const signer = new NDKPrivateKeySigner(account.privkey); - ndk.signer = signer; - - const event = new NDKEvent(ndk); - // build event - event.content = JSON.stringify(data); - event.kind = 40; - event.created_at = dateToUnix(); - event.pubkey = account.pubkey; - event.tags = []; - - // publish event - event.publish(); - - // insert to database - addChannel.mutate({ - ...event, - name: data.name, - picture: data.picture, - about: data.about, - }); - - // reset form - reset(); - - setTimeout(() => { - // close modal - setIsOpen(false); - // redirect to channel page - navigate(`/channel/${event.id}`); - }, 1000); - } catch (e) { - console.log('error: ', e); - } - }; - - useEffect(() => { - setValue('picture', image); - }, [setValue, image]); - - return ( - <> - - - - -
- -
- - -
-
-
- - Create channel - - -
- - Channels are freedom square, everyone can speech freely, no one can - stop you or deceive what to speech - -
-
-
-
- -
- - Picture - -
- channel picture -
- -
-
-
-
- - -
-
- -