From 8eb11efb3440df08f3d1bc4894cbe1d2e690f31e Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:34:26 +0700 Subject: [PATCH] update notification --- package.json | 2 +- pnpm-lock.yaml | 135 ++++++++++++++++---------------- src-tauri/Cargo.lock | 2 +- src/app/notifications/index.tsx | 29 ++----- src/app/splash.tsx | 25 +++--- src/shared/accounts/active.tsx | 6 ++ src/stores/activities.ts | 27 +++++++ 7 files changed, 121 insertions(+), 105 deletions(-) create mode 100644 src/stores/activities.ts diff --git a/package.json b/package.json index 8e3eb516..b6dd30be 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "react-player": "^2.13.0", "react-router-dom": "^6.15.0", "react-textarea-autosize": "^8.5.3", - "react-virtuoso": "^4.5.0", + "react-virtuoso": "^4.5.1", "remark-gfm": "^3.0.1", "tauri-plugin-sql-api": "github:tauri-apps/tauri-plugin-sql#v1", "tauri-plugin-store-api": "github:tauri-apps/tauri-plugin-store#v1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b71b9e1d..0b38edea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,8 +119,8 @@ dependencies: specifier: ^8.5.3 version: 8.5.3(@types/react@18.2.21)(react@18.2.0) react-virtuoso: - specifier: ^4.5.0 - version: 4.5.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.5.1 + version: 4.5.1(react-dom@18.2.0)(react@18.2.0) remark-gfm: specifier: ^3.0.1 version: 3.0.1 @@ -312,8 +312,8 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.22.15: - resolution: {integrity: sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==} + /@babel/parser@7.22.16: + resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -331,7 +331,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.15 + '@babel/parser': 7.22.16 '@babel/types': 7.22.15 dev: true @@ -345,7 +345,7 @@ packages: '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.15 + '@babel/parser': 7.22.16 '@babel/types': 7.17.0 debug: 4.3.4 globals: 11.12.0 @@ -1717,8 +1717,8 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false - /@swc/core-darwin-arm64@1.3.82: - resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==} + /@swc/core-darwin-arm64@1.3.83: + resolution: {integrity: sha512-Plz2IKeveVLivbXTSCC3OZjD2MojyKYllhPrn9RotkDIZEFRYJZtW5/Ik1tJW/2rzu5HVKuGYrDKdScVVTbOxQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -1726,8 +1726,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.82: - resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==} + /@swc/core-darwin-x64@1.3.83: + resolution: {integrity: sha512-FBGVg5IPF/8jQ6FbK60iDUHjv0H5+LwfpJHKH6wZnRaYWFtm7+pzYgreLu3NTsm3m7/1a7t0+7KURwBGUaJCCw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -1735,8 +1735,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.82: - resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==} + /@swc/core-linux-arm-gnueabihf@1.3.83: + resolution: {integrity: sha512-EZcsuRYhGkzofXtzwDjuuBC/suiX9s7zeg2YYXOVjWwyebb6BUhB1yad3mcykFQ20rTLO9JUyIaiaMYDHGobqw==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -1744,8 +1744,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.82: - resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==} + /@swc/core-linux-arm64-gnu@1.3.83: + resolution: {integrity: sha512-khI41szLHrCD/cFOcN4p2SYvZgHjhhHlcMHz5BksRrDyteSJKu0qtWRZITVom0N/9jWoAleoFhMnFTUs0H8IWA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1753,8 +1753,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.82: - resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==} + /@swc/core-linux-arm64-musl@1.3.83: + resolution: {integrity: sha512-zgT7yNOdbjHcGAwvys79mbfNLK65KBlPJWzeig+Yk7I8TVzmaQge7B6ZS/gwF9/p+8TiLYo/tZ5aF2lqlgdSVw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1762,8 +1762,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.82: - resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==} + /@swc/core-linux-x64-gnu@1.3.83: + resolution: {integrity: sha512-x+mH0Y3NC/G0YNlFmGi3vGD4VOm7IPDhh+tGrx6WtJp0BsShAbOpxtfU885rp1QweZe4qYoEmGqiEjE2WrPIdA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1771,8 +1771,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.82: - resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==} + /@swc/core-linux-x64-musl@1.3.83: + resolution: {integrity: sha512-s5AYhAOmetUwUZwS5g9qb92IYgNHHBGiY2mTLImtEgpAeBwe0LPDj6WrujxCBuZnaS55mKRLLOuiMZE5TpjBNA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1780,8 +1780,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.82: - resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==} + /@swc/core-win32-arm64-msvc@1.3.83: + resolution: {integrity: sha512-yw2rd/KVOGs95lRRB+killLWNaO1dy4uVa8Q3/4wb5txlLru07W1m041fZLzwOg/1Sh0TMjJgGxj0XHGR3ZXhQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -1789,8 +1789,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.82: - resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==} + /@swc/core-win32-ia32-msvc@1.3.83: + resolution: {integrity: sha512-POW+rgZ6KWqBpwPGIRd2/3pcf46P+UrKBm4HLt5IwbHvekJ4avIM8ixJa9kK0muJNVJcDpaZgxaU1ELxtJ1j8w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -1798,8 +1798,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.82: - resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==} + /@swc/core-win32-x64-msvc@1.3.83: + resolution: {integrity: sha512-CiWQtkFnZElXQUalaHp+Wacw0Jd+24ncRYhqaJ9YKnEQP1H82CxIIuQqLM8IFaLpn5dpY6SgzaeubWF46hjcLA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -1807,8 +1807,8 @@ packages: dev: true optional: true - /@swc/core@1.3.82: - resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==} + /@swc/core@1.3.83: + resolution: {integrity: sha512-PccHDgGQlFjpExgJxH91qA3a4aifR+axCFJ4RieCoiI0m5gURE4nBhxzTBY5YU/YKTBmPO8Gc5Q6inE3+NquWg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -1819,16 +1819,16 @@ packages: dependencies: '@swc/types': 0.1.4 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.82 - '@swc/core-darwin-x64': 1.3.82 - '@swc/core-linux-arm-gnueabihf': 1.3.82 - '@swc/core-linux-arm64-gnu': 1.3.82 - '@swc/core-linux-arm64-musl': 1.3.82 - '@swc/core-linux-x64-gnu': 1.3.82 - '@swc/core-linux-x64-musl': 1.3.82 - '@swc/core-win32-arm64-msvc': 1.3.82 - '@swc/core-win32-ia32-msvc': 1.3.82 - '@swc/core-win32-x64-msvc': 1.3.82 + '@swc/core-darwin-arm64': 1.3.83 + '@swc/core-darwin-x64': 1.3.83 + '@swc/core-linux-arm-gnueabihf': 1.3.83 + '@swc/core-linux-arm64-gnu': 1.3.83 + '@swc/core-linux-arm64-musl': 1.3.83 + '@swc/core-linux-x64-gnu': 1.3.83 + '@swc/core-linux-x64-musl': 1.3.83 + '@swc/core-win32-arm64-msvc': 1.3.83 + '@swc/core-win32-ia32-msvc': 1.3.83 + '@swc/core-win32-x64-msvc': 1.3.83 dev: true /@swc/types@0.1.4: @@ -2293,7 +2293,7 @@ packages: optional: true dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.22.15 + '@babel/parser': 7.22.16 '@babel/traverse': 7.17.3 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 @@ -2670,7 +2670,7 @@ packages: peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 vite: 4.4.9(@types/node@20.5.9) transitivePeerDependencies: - '@swc/helpers' @@ -2810,8 +2810,8 @@ packages: get-intrinsic: 1.2.1 dev: false - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2819,8 +2819,8 @@ packages: es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2838,13 +2838,14 @@ packages: get-intrinsic: 1.2.1 dev: true - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 define-properties: 1.2.0 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -2884,8 +2885,8 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /axe-core@4.7.2: - resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + /axe-core@4.8.0: + resolution: {integrity: sha512-ZtlVZobOeDQhb/y2lMK6mznDw7TJHDNcKx5/bbBkFvArIQ5CVFhSI6hWWQnMx9I8cNmNmZ30wpDyOC2E2nvgbQ==} engines: {node: '>=4'} dev: true @@ -2925,7 +2926,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001527 - electron-to-chromium: 1.4.508 + electron-to-chromium: 1.4.509 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true @@ -3284,8 +3285,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.508: - resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==} + /electron-to-chromium@1.4.509: + resolution: {integrity: sha512-G5KlSWY0zzhANtX15tkikHl4WB7zil2Y65oT52EZUL194abjUXBZym12Ht7Bhuwm/G3LJFEqMADyv2Cks56dmg==} dev: true /emoji-regex@8.0.0: @@ -3323,7 +3324,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 @@ -3350,7 +3351,7 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 @@ -3378,7 +3379,7 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.5 iterator.prototype: 1.1.1 - safe-array-concat: 1.0.0 + safe-array-concat: 1.0.1 dev: true /es-set-tostringtag@2.0.1: @@ -3568,8 +3569,8 @@ packages: '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.48.0 @@ -3599,9 +3600,9 @@ packages: '@babel/runtime': 7.22.15 aria-query: 5.3.0 array-includes: 3.1.7 - array.prototype.flatmap: 1.3.1 + array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 - axe-core: 4.7.2 + axe-core: 4.8.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -3622,7 +3623,7 @@ packages: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 - array.prototype.flatmap: 1.3.1 + array.prototype.flatmap: 1.3.2 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 @@ -4455,7 +4456,7 @@ packages: engines: {node: '>=4.0'} dependencies: array-includes: 3.1.7 - array.prototype.flat: 1.3.1 + array.prototype.flat: 1.3.2 object.assign: 4.1.4 object.values: 1.1.7 dev: true @@ -6019,8 +6020,8 @@ packages: - '@types/react' dev: false - /react-virtuoso@4.5.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OMP6XrzJMMos1vbJZC16RxGW7utAxUMP7i5PNPi6epBNVH7nz+CF/DlmecNBep5wyjLud51dQ5epjb2A0w9W/Q==} + /react-virtuoso@4.5.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Jdo9M/T5PcDAczvmXAKwvb/BW0MCMr/cb+3j2m9192zlQgQ+syMdJR42i+Sk80ln5aSNaL1fnxleJzdKsCc4lw==} engines: {node: '>=10'} peerDependencies: react: '>=16 || >=17 || >= 18' @@ -6182,8 +6183,8 @@ packages: dependencies: glob: 7.2.3 - /rollup@3.28.1: - resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + /rollup@3.29.0: + resolution: {integrity: sha512-nszM8DINnx1vSS+TpbWKMkxem0CDWk3cSit/WWCBVs9/JZ1I/XLwOsiUglYuYReaeWWSsW9kge5zE5NZtf/a4w==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -6206,8 +6207,8 @@ packages: mri: 1.2.0 dev: false - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.2 @@ -6996,7 +6997,7 @@ packages: '@types/node': 20.5.9 esbuild: 0.18.20 postcss: 8.4.29 - rollup: 3.28.1 + rollup: 3.29.0 optionalDependencies: fsevents: 2.3.3 dev: true diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 61455c4d..e21d9871 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2627,7 +2627,7 @@ dependencies = [ [[package]] name = "lume" -version = "1.2.2" +version = "1.2.3" dependencies = [ "rust-argon2 1.0.0", "serde", diff --git a/src/app/notifications/index.tsx b/src/app/notifications/index.tsx index edfc86ef..c743601d 100644 --- a/src/app/notifications/index.tsx +++ b/src/app/notifications/index.tsx @@ -1,28 +1,16 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; -import { useQuery } from '@tanstack/react-query'; import { useCallback } from 'react'; import { NotiMention } from '@app/notifications/components/mention'; import { NotiReaction } from '@app/notifications/components/reaction'; import { NotiRepost } from '@app/notifications/components/repost'; -import { useStorage } from '@libs/storage/provider'; - -import { LoaderIcon } from '@shared/icons'; import { TitleBar } from '@shared/titleBar'; -import { useNostr } from '@utils/hooks/useNostr'; +import { useActivities } from '@stores/activities'; export function NotificationScreen() { - const { db } = useStorage(); - const { fetchActivities } = useNostr(); - const { status, data } = useQuery( - ['notifications', db.account.pubkey], - async () => { - return await fetchActivities(); - }, - { refetchOnWindowFocus: false } - ); + const activities = useActivities((state) => state.activities); const renderItem = useCallback( (event: NDKEvent) => { @@ -37,7 +25,7 @@ export function NotificationScreen() { return null; } }, - [data] + [activities] ); return ( @@ -47,14 +35,7 @@ export function NotificationScreen() {
- {status === 'loading' ? ( -
-
- -

Loading

-
-
- ) : data?.length < 1 ? ( + {activities?.length < 1 ? (

🎉

@@ -62,7 +43,7 @@ export function NotificationScreen() {

) : ( - data.map((event) => renderItem(event)) + activities.map((event) => renderItem(event)) )}
diff --git a/src/app/splash.tsx b/src/app/splash.tsx index 374d02a2..517625be 100644 --- a/src/app/splash.tsx +++ b/src/app/splash.tsx @@ -7,15 +7,17 @@ import { useStorage } from '@libs/storage/provider'; import { LoaderIcon } from '@shared/icons'; +import { useActivities } from '@stores/activities'; + import { useNostr } from '@utils/hooks/useNostr'; export function SplashScreen() { const { db } = useStorage(); const { ndk } = useNDK(); - const { fetchUserData, prefetchEvents } = useNostr(); + const { fetchUserData, fetchActivities, prefetchEvents } = useNostr(); const [isLoading, setIsLoading] = useState(true); - const [errorMessage, setErrorMessage] = useState(null); + const setActivities = useActivities((state) => state.setActivities); const skip = async () => { await invoke('close_splashscreen'); @@ -29,20 +31,20 @@ export function SplashScreen() { try { const user = await fetchUserData(); const data = await prefetchEvents(); + const activities = await fetchActivities(); if (user.status === 'ok' && data.status === 'ok') { + // set activities + setActivities(activities); + // update last login = current time await db.updateLastLogin(); + // close splash screen and open main app screen await invoke('close_splashscreen'); - } else { - setIsLoading(false); - setErrorMessage(user.message); - console.log('fetch failed, error: ', user.message); } } catch (e) { setIsLoading(false); - setErrorMessage(e); - await message(`Something wrong: ${e}`, { - title: 'Lume', + await message(e, { + title: 'An unexpected error has occurred', type: 'error', }); } @@ -75,15 +77,14 @@ export function SplashScreen() { ) : (

- Something wrong! + An unexpected error has occurred

-

{errorMessage}

)} diff --git a/src/shared/accounts/active.tsx b/src/shared/accounts/active.tsx index 4414d973..2440506a 100644 --- a/src/shared/accounts/active.tsx +++ b/src/shared/accounts/active.tsx @@ -6,6 +6,8 @@ import { useStorage } from '@libs/storage/provider'; import { AccountMoreActions } from '@shared/accounts/more'; import { Image } from '@shared/image'; +import { useActivities } from '@stores/activities'; + import { useNostr } from '@utils/hooks/useNostr'; import { useProfile } from '@utils/hooks/useProfile'; import { sendNativeNotification } from '@utils/notification'; @@ -16,6 +18,8 @@ export function ActiveAccount() { const { status, user } = useProfile(db.account.pubkey); const { sub } = useNostr(); + const addActivity = useActivities((state) => state.addActivity); + useEffect(() => { const filter: NDKFilter = { '#p': [db.account.pubkey], @@ -30,6 +34,8 @@ export function ActiveAccount() { }; sub(filter, async (event) => { + addActivity(event); + switch (event.kind) { case NDKKind.Text: return await sendNativeNotification('Mention'); diff --git a/src/stores/activities.ts b/src/stores/activities.ts new file mode 100644 index 00000000..92affcd7 --- /dev/null +++ b/src/stores/activities.ts @@ -0,0 +1,27 @@ +import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { create } from 'zustand'; +import { createJSONStorage, persist } from 'zustand/middleware'; + +interface ActivitiesState { + activities: null | Array; + setActivities: (events: NDKEvent[]) => void; + addActivity: (event: NDKEvent) => void; +} + +export const useActivities = create()( + persist( + (set) => ({ + activities: null, + setActivities: (events: NDKEvent[]) => { + set(() => ({ activities: events })); + }, + addActivity: (event: NDKEvent) => { + set((state) => ({ activities: [event, ...state.activities] })); + }, + }), + { + name: 'activities', + storage: createJSONStorage(() => localStorage), + } + ) +);