I'm tired of writing commit message, sorry!

This commit is contained in:
Ren Amamiya 2023-03-22 10:37:07 +07:00
parent 27fe32d748
commit ca87624727
7 changed files with 49 additions and 172 deletions

View File

@ -15,28 +15,23 @@
"@radix-ui/react-collapsible": "^1.0.2",
"@radix-ui/react-dialog": "^1.0.3",
"@radix-ui/react-dropdown-menu": "^2.0.4",
"@radix-ui/react-icons": "^1.2.0",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-popover": "^1.0.5",
"@radix-ui/react-tabs": "^1.0.3",
"@rehooks/local-storage": "^2.4.4",
"@supabase/supabase-js": "^2.12.0",
"@tanstack/query-core": "^4.27.0",
"@tanstack/react-virtual": "3.0.0-beta.54",
"@tauri-apps/api": "^1.2.0",
"@uiw/react-markdown-preview": "^4.1.10",
"@uiw/react-md-editor": "^3.20.5",
"bitcoin-address-validation": "^2.2.1",
"boring-avatars": "^1.7.0",
"dayjs": "^1.11.7",
"destr": "^1.2.2",
"framer-motion": "^9.1.7",
"jotai": "^2.0.3",
"jotai-tanstack-query": "^0.6.0",
"moment": "^2.29.4",
"next": "^13.2.4",
"next-remove-imports": "^1.0.10",
"nostr-relaypool": "^0.5.18",
"nostr-tools": "^1.7.5",
"qrcode.react": "^3.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.43.7",
@ -66,7 +61,7 @@
"husky": "^8.0.3",
"lint-staged": "^13.2.0",
"postcss": "^8.4.21",
"prettier": "^2.8.5",
"prettier": "^2.8.6",
"prettier-plugin-tailwindcss": "^0.2.5",
"prop-types": "^15.8.1",
"tailwindcss": "^3.2.7",

View File

@ -4,14 +4,12 @@ specifiers:
'@radix-ui/react-collapsible': ^1.0.2
'@radix-ui/react-dialog': ^1.0.3
'@radix-ui/react-dropdown-menu': ^2.0.4
'@radix-ui/react-icons': ^1.2.0
'@radix-ui/react-icons': ^1.3.0
'@radix-ui/react-popover': ^1.0.5
'@radix-ui/react-tabs': ^1.0.3
'@rehooks/local-storage': ^2.4.4
'@supabase/supabase-js': ^2.12.0
'@tailwindcss/typography': ^0.5.9
'@tanstack/query-core': ^4.27.0
'@tanstack/react-virtual': 3.0.0-beta.54
'@tauri-apps/api': ^1.2.0
'@tauri-apps/cli': ^1.2.3
'@trivago/prettier-plugin-sort-imports': ^4.1.1
@ -23,10 +21,10 @@ specifiers:
'@uiw/react-markdown-preview': ^4.1.10
'@uiw/react-md-editor': ^3.20.5
autoprefixer: ^10.4.14
bitcoin-address-validation: ^2.2.1
boring-avatars: ^1.7.0
csstype: ^3.1.1
dayjs: ^1.11.7
destr: ^1.2.2
eslint: ^8.36.0
eslint-config-next: ^13.2.4
eslint-config-prettier: ^8.8.0
@ -35,18 +33,15 @@ specifiers:
framer-motion: ^9.1.7
husky: ^8.0.3
jotai: ^2.0.3
jotai-tanstack-query: ^0.6.0
lint-staged: ^13.2.0
moment: ^2.29.4
next: ^13.2.4
next-remove-imports: ^1.0.10
nostr-relaypool: ^0.5.18
nostr-tools: ^1.7.5
postcss: ^8.4.21
prettier: ^2.8.5
prettier: ^2.8.6
prettier-plugin-tailwindcss: ^0.2.5
prop-types: ^15.8.1
qrcode.react: ^3.1.0
react: ^18.2.0
react-dom: ^18.2.0
react-hook-form: ^7.43.7
@ -63,28 +58,23 @@ dependencies:
'@radix-ui/react-collapsible': 1.0.2_biqbaboplfbrettd7655fr4n2y
'@radix-ui/react-dialog': 1.0.3_zula6vjvt3wdocc4mwcxqa6nzi
'@radix-ui/react-dropdown-menu': 2.0.4_zula6vjvt3wdocc4mwcxqa6nzi
'@radix-ui/react-icons': 1.2.0_react@18.2.0
'@radix-ui/react-icons': 1.3.0_react@18.2.0
'@radix-ui/react-popover': 1.0.5_zula6vjvt3wdocc4mwcxqa6nzi
'@radix-ui/react-tabs': 1.0.3_biqbaboplfbrettd7655fr4n2y
'@rehooks/local-storage': 2.4.4_react@18.2.0
'@supabase/supabase-js': 2.12.0
'@tanstack/query-core': 4.27.0
'@tanstack/react-virtual': 3.0.0-beta.54_react@18.2.0
'@tauri-apps/api': 1.2.0
'@uiw/react-markdown-preview': 4.1.10_zula6vjvt3wdocc4mwcxqa6nzi
'@uiw/react-md-editor': 3.20.5_zula6vjvt3wdocc4mwcxqa6nzi
bitcoin-address-validation: 2.2.1
boring-avatars: 1.7.0
dayjs: 1.11.7
destr: 1.2.2
framer-motion: 9.1.7_biqbaboplfbrettd7655fr4n2y
jotai: 2.0.3_react@18.2.0
jotai-tanstack-query: 0.6.0_jqgumvl52k2nlr5n23qdneaa6y
moment: 2.29.4
next: 13.2.4_biqbaboplfbrettd7655fr4n2y
next-remove-imports: 1.0.10
nostr-relaypool: 0.5.18_ws@8.13.0
nostr-tools: 1.7.5
qrcode.react: 3.1.0_react@18.2.0
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
react-hook-form: 7.43.7_react@18.2.0
@ -98,7 +88,7 @@ dependencies:
devDependencies:
'@tailwindcss/typography': 0.5.9_tailwindcss@3.2.7
'@tauri-apps/cli': 1.2.3
'@trivago/prettier-plugin-sort-imports': 4.1.1_prettier@2.8.5
'@trivago/prettier-plugin-sort-imports': 4.1.1_prettier@2.8.6
'@types/node': 18.15.5
'@types/react': 18.0.28
'@types/react-dom': 18.0.11
@ -114,8 +104,8 @@ devDependencies:
husky: 8.0.3
lint-staged: 13.2.0
postcss: 8.4.21
prettier: 2.8.5
prettier-plugin-tailwindcss: 0.2.5_wgxk27ud2vbqu6hanimyzzegte
prettier: 2.8.6
prettier-plugin-tailwindcss: 0.2.5_c5px7p3j4kcmt2ngqd44w4h7we
prop-types: 15.8.1
tailwindcss: 3.2.7_postcss@8.4.21
typescript: 4.9.5
@ -922,9 +912,9 @@ packages:
react-dom: 18.2.0_react@18.2.0
dev: false
/@radix-ui/react-icons/1.2.0_react@18.2.0:
/@radix-ui/react-icons/1.3.0_react@18.2.0:
resolution:
{ integrity: sha512-NqrZxn+Ig6c6MypUt84/Nab9WBFXH75T1mhEhFjPlIYaNkp113pqlo6QdK5r7zb3b7RckDAPgUQACes0aKwcFA== }
{ integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== }
peerDependencies:
react: ^16.x || ^17.x || ^18.x
dependencies:
@ -1235,9 +1225,9 @@ packages:
- encoding
dev: false
/@supabase/gotrue-js/2.15.0:
/@supabase/gotrue-js/2.16.0:
resolution:
{ integrity: sha512-cu3JRGEK03Aa+yWf7YPyDibVYoMYM8apc5HwsnjnVgLtFuIqaVKFrlIBWgzBOSabxaP//6i/pd39oXo9uDH3Ew== }
{ integrity: sha512-k7curH5xxnQmUiG8AeFW7KEJST99vhFnBCidWFhuSSyLP1Ja8Ix3g4bmLUv209mhX8LmAaDMGKNQs8gG0MOKCw== }
dependencies:
cross-fetch: 3.1.5
transitivePeerDependencies:
@ -1278,7 +1268,7 @@ packages:
{ integrity: sha512-tHV4KqlPHuPt4uPu+nYwQTEp+mU7Qc0h42EyRW7rsAGGo8bmKIOGnZjyDDc5lxg0CW7OF5R5oMQWmtuuXZh00Q== }
dependencies:
'@supabase/functions-js': 2.1.0
'@supabase/gotrue-js': 2.15.0
'@supabase/gotrue-js': 2.16.0
'@supabase/postgrest-js': 1.4.1
'@supabase/realtime-js': 2.7.1
'@supabase/storage-js': 2.3.1
@ -1308,26 +1298,6 @@ packages:
tailwindcss: 3.2.7_postcss@8.4.21
dev: true
/@tanstack/query-core/4.27.0:
resolution:
{ integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA== }
dev: false
/@tanstack/react-virtual/3.0.0-beta.54_react@18.2.0:
resolution:
{ integrity: sha512-D1mDMf4UPbrtHRZZriCly5bXTBMhylslm4dhcHqTtDJ6brQcgGmk8YD9JdWBGWfGSWPKoh2x1H3e7eh+hgPXtQ== }
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
'@tanstack/virtual-core': 3.0.0-beta.54
react: 18.2.0
dev: false
/@tanstack/virtual-core/3.0.0-beta.54:
resolution:
{ integrity: sha512-jtkwqdP2rY2iCCDVAFuaNBH3fiEi29aTn2RhtIoky8DTTiCdc48plpHHreLwmv1PICJ4AJUUESaq3xa8fZH8+g== }
dev: false
/@tauri-apps/api/1.2.0:
resolution:
{ integrity: sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw== }
@ -1441,7 +1411,7 @@ packages:
'@tauri-apps/cli-win32-x64-msvc': 1.2.3
dev: true
/@trivago/prettier-plugin-sort-imports/4.1.1_prettier@2.8.5:
/@trivago/prettier-plugin-sort-imports/4.1.1_prettier@2.8.6:
resolution:
{ integrity: sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw== }
peerDependencies:
@ -1457,7 +1427,7 @@ packages:
'@babel/types': 7.17.0
javascript-natural-sort: 0.7.1
lodash: 4.17.21
prettier: 2.8.5
prettier: 2.8.6
transitivePeerDependencies:
- supports-color
dev: true
@ -1983,7 +1953,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.21.5
caniuse-lite: 1.0.30001468
caniuse-lite: 1.0.30001469
fraction.js: 4.2.0
normalize-range: 0.1.2
picocolors: 1.0.0
@ -2042,37 +2012,17 @@ packages:
{ integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== }
dev: true
/base58-js/1.0.5:
resolution:
{ integrity: sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA== }
engines: { node: '>= 8' }
dev: false
/bcp-47-match/2.0.3:
resolution:
{ integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== }
dev: false
/bech32/2.0.0:
resolution:
{ integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== }
dev: false
/binary-extensions/2.2.0:
resolution:
{ integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== }
engines: { node: '>=8' }
dev: true
/bitcoin-address-validation/2.2.1:
resolution:
{ integrity: sha512-f6LXNpvRKlTbHWb37N9tHoAbYGbshzM8FPWvCtloh++hxZ0/dmkokvKNVLz6HkG82zVwo8w6Sq4JmfO2timzyg== }
dependencies:
base58-js: 1.0.5
bech32: 2.0.0
sha256-uint8array: 0.10.5
dev: false
/boolbase/1.0.0:
resolution:
{ integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== }
@ -2105,8 +2055,8 @@ packages:
engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
hasBin: true
dependencies:
caniuse-lite: 1.0.30001468
electron-to-chromium: 1.4.334
caniuse-lite: 1.0.30001469
electron-to-chromium: 1.4.335
node-releases: 2.0.10
update-browserslist-db: 1.0.10_browserslist@4.21.5
@ -2138,9 +2088,9 @@ packages:
engines: { node: '>= 6' }
dev: true
/caniuse-lite/1.0.30001468:
/caniuse-lite/1.0.30001469:
resolution:
{ integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A== }
{ integrity: sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g== }
/ccount/2.0.1:
resolution:
@ -2454,6 +2404,11 @@ packages:
engines: { node: '>=6' }
dev: false
/destr/1.2.2:
resolution:
{ integrity: sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA== }
dev: false
/detect-node-es/1.1.0:
resolution:
{ integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== }
@ -2521,9 +2476,9 @@ packages:
{ integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== }
dev: true
/electron-to-chromium/1.4.334:
/electron-to-chromium/1.4.335:
resolution:
{ integrity: sha512-laZ1odk+TRen6q0GeyQx/JEkpD3iSZT7ewopCpKqg9bTjP1l8XRfU3Bg20CFjNPZkp5+NDBl3iqd4o/kPO+Vew== }
{ integrity: sha512-l/eowQqTnrq3gu+WSrdfkhfNHnPgYqlKAwxz7MTOj6mom19vpEDHNXl6dxDxyTiYuhemydprKr/HCrHfgk+OfQ== }
/emoji-regex/8.0.0:
resolution:
@ -3862,17 +3817,6 @@ packages:
{ integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== }
dev: true
/jotai-tanstack-query/0.6.0_jqgumvl52k2nlr5n23qdneaa6y:
resolution:
{ integrity: sha512-87oD6MnjrgfLWeCJXB/dQt4xyCmyFYZeG9jw4Y2lIprtwLKS5s/vCEjNP5fnYG2nuPBkopiRECTEqtIysvHSxg== }
peerDependencies:
'@tanstack/query-core': '*'
jotai: '>=1.11.0'
dependencies:
'@tanstack/query-core': 4.27.0
jotai: 2.0.3_react@18.2.0
dev: false
/jotai/2.0.3_react@18.2.0:
resolution:
{ integrity: sha512-MMjhSPAL3RoeZD9WbObufRT2quThEAEknHHridf2ma8Ml7ZVQmUiHk0ssdbR3F0h3kcwhYqSGJ59OjhPge7RRg== }
@ -4587,11 +4531,6 @@ packages:
{ integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== }
dev: true
/moment/2.29.4:
resolution:
{ integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== }
dev: false
/mri/1.2.0:
resolution:
{ integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== }
@ -4669,7 +4608,7 @@ packages:
dependencies:
'@next/env': 13.2.4
'@swc/helpers': 0.4.14
caniuse-lite: 1.0.30001468
caniuse-lite: 1.0.30001469
postcss: 8.4.14
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
@ -4749,7 +4688,7 @@ packages:
'@scure/base': 1.1.1
'@scure/bip32': 1.2.0
'@scure/bip39': 1.1.1
prettier: 2.8.5
prettier: 2.8.6
dev: false
/not/0.1.0:
@ -5143,7 +5082,7 @@ packages:
engines: { node: '>= 0.8.0' }
dev: true
/prettier-plugin-tailwindcss/0.2.5_wgxk27ud2vbqu6hanimyzzegte:
/prettier-plugin-tailwindcss/0.2.5_c5px7p3j4kcmt2ngqd44w4h7we:
resolution:
{ integrity: sha512-vZ/iKieyCx0WTxHbkf5E1rBlv/ybFk8WTT4hL5W2jlVxum2Zbe0jMUpuQdDrpa4z2vnPiJ5KIWCqL/kd16fKYg== }
engines: { node: '>=12.17.0' }
@ -5196,13 +5135,13 @@ packages:
prettier-plugin-twig-melody:
optional: true
dependencies:
'@trivago/prettier-plugin-sort-imports': 4.1.1_prettier@2.8.5
prettier: 2.8.5
'@trivago/prettier-plugin-sort-imports': 4.1.1_prettier@2.8.6
prettier: 2.8.6
dev: true
/prettier/2.8.5:
/prettier/2.8.6:
resolution:
{ integrity: sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ== }
{ integrity: sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ== }
engines: { node: '>=10.13.0' }
hasBin: true
@ -5224,15 +5163,6 @@ packages:
{ integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== }
engines: { node: '>=6' }
/qrcode.react/3.1.0_react@18.2.0:
resolution:
{ integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== }
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
react: 18.2.0
dev: false
/queue-microtask/1.2.3:
resolution:
{ integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== }
@ -5708,11 +5638,6 @@ packages:
lru-cache: 6.0.0
dev: true
/sha256-uint8array/0.10.5:
resolution:
{ integrity: sha512-KjYP8M6y8VvV62lnSSZwzutuwqphVOOVQamP+GmmClZcYhbq1HSIw/M2tlKgHndiaIwe3tFG5X38YYsQfUdItw== }
dev: false
/shebang-command/2.0.0:
resolution:
{ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== }

View File

@ -3,6 +3,7 @@ import NotePreview from '@components/note/content/preview';
import { UserExtend } from '@components/user/extend';
import { UserMention } from '@components/user/mention';
import destr from 'destr';
import { memo, useMemo } from 'react';
import reactStringReplace from 'react-string-replace';
@ -10,7 +11,7 @@ export const Content = memo(function Content({ data }: { data: any }) {
const content = useMemo(() => {
let parsedContent;
// get data tags
const tags = JSON.parse(data.tags);
const tags = destr(data.tags);
// remove all image urls
parsedContent = data.content.replace(/(https?:\/\/.*\.(jpg|jpeg|gif|png|webp|mp4|webm)((\?.*)$|$))/gim, '');
// handle urls

View File

@ -1,10 +1,11 @@
import { Content } from '@components/note/content';
import { RootNote } from '@components/note/root';
import destr from 'destr';
import { memo, useMemo } from 'react';
export const Note = memo(function Note({ event }: { event: any }) {
const tags = JSON.parse(event.tags);
const tags = destr(event.tags);
const fetchRootEvent = useMemo(() => {
if (tags.length > 0) {

View File

@ -1,47 +1,10 @@
import BaseLayout from '@layouts/base';
import WithSidebarLayout from '@layouts/withSidebar';
import { Note } from '@components/note';
import { initialNotesAtom } from '@stores/note';
import { useVirtualizer } from '@tanstack/react-virtual';
import { useAtom } from 'jotai';
import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useMemo, useRef } from 'react';
import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal } from 'react';
export default function Page() {
const [data]: any = useAtom(initialNotesAtom);
const parentRef = useRef(null);
const count = useMemo(() => data.length, [data]);
const virtualizer = useVirtualizer({
count,
getScrollElement: () => parentRef.current,
getItemKey: (index: number) => data[index].id,
estimateSize: () => 500,
overscan: 5,
});
const items = virtualizer.getVirtualItems();
return (
<div className="h-full w-full">
{items.length > 0 && (
<div ref={parentRef} className="scrollbar-hide h-full w-full overflow-y-auto" style={{ contain: 'strict' }}>
<div className={`relative w-full h-${virtualizer.getTotalSize()}px`}>
<div className="absolute top-0 left-0 w-full" style={{ transform: `translateY(${items[0].start}px)` }}>
{items.map((virtualRow) => (
<div key={virtualRow.key} data-index={virtualRow.index} ref={virtualizer.measureElement}>
<Note event={data[virtualRow.index]} />
</div>
))}
</div>
</div>
</div>
)}
</div>
);
return <></>;
}
Page.getLayout = function getLayout(

View File

@ -32,7 +32,7 @@ export default function Page() {
const result = await db.select(
`SELECT * FROM
cache_notes
WHERE created_at <= ${dateToUnix(now.current)}
WHERE created_at <= ${dateToUnix(now.current)} AND is_root = 0
ORDER BY created_at DESC
LIMIT ${limit.current} OFFSET ${offset.current}`
);
@ -43,7 +43,7 @@ export default function Page() {
const result = await db.select(
`SELECT * FROM
cache_notes
WHERE created_at > ${dateToUnix(now.current)}
WHERE created_at > ${dateToUnix(now.current)} AND is_root = 0
ORDER BY created_at DESC
LIMIT ${limit.current}`
);
@ -65,14 +65,16 @@ export default function Page() {
const computeItemKey = useCallback(
(index: Key) => {
return data[index].id;
return data[index].id + data[index].created_at;
},
[data]
);
useEffect(() => {
const getData = async () => {
const result = await db.select(`SELECT * FROM cache_notes ORDER BY created_at DESC LIMIT ${limit.current}`);
const result = await db.select(
`SELECT * FROM cache_notes WHERE is_root = 0 ORDER BY created_at DESC LIMIT ${limit.current}`
);
if (result.length > 0) {
setData(result);
} else {

View File

@ -1,14 +1,4 @@
import { atom } from 'jotai';
import { atomsWithQuery } from 'jotai-tanstack-query';
import Database from 'tauri-plugin-sql-api';
// usecase: notify user that connector has receive newer note
export const hasNewerNoteAtom = atom(false);
// usecase: get all notes (limit 1000)
export const [initialNotesAtom] = atomsWithQuery(() => ({
queryFn: async () => {
const db = await Database.load('sqlite:lume.db');
const result = await db.select(`SELECT * FROM cache_notes ORDER BY created_at DESC LIMIT 1000`);
return result;
},
}));