clean up & small fixes

This commit is contained in:
Ren Amamiya
2023-08-26 14:52:02 +07:00
parent 0f212828a7
commit fe28cd95bd
15 changed files with 247 additions and 264 deletions

View File

@@ -93,7 +93,7 @@
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"csstype": "^3.1.2", "csstype": "^3.1.2",
"encoding": "^0.1.13", "encoding": "^0.1.13",
"eslint": "^8.47.0", "eslint": "^8.48.0",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.33.2", "eslint-plugin-react": "^7.33.2",

255
pnpm-lock.yaml generated
View File

@@ -203,10 +203,10 @@ devDependencies:
version: 5.5.7 version: 5.5.7
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^6.4.1 specifier: ^6.4.1
version: 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) version: 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^6.4.1 specifier: ^6.4.1
version: 6.4.1(eslint@8.47.0)(typescript@5.2.2) version: 6.4.1(eslint@8.48.0)(typescript@5.2.2)
'@vitejs/plugin-react-swc': '@vitejs/plugin-react-swc':
specifier: ^3.3.2 specifier: ^3.3.2
version: 3.3.2(vite@4.4.9) version: 3.3.2(vite@4.4.9)
@@ -226,20 +226,20 @@ devDependencies:
specifier: ^0.1.13 specifier: ^0.1.13
version: 0.1.13 version: 0.1.13
eslint: eslint:
specifier: ^8.47.0 specifier: ^8.48.0
version: 8.47.0 version: 8.48.0
eslint-config-prettier: eslint-config-prettier:
specifier: ^9.0.0 specifier: ^9.0.0
version: 9.0.0(eslint@8.47.0) version: 9.0.0(eslint@8.48.0)
eslint-plugin-jsx-a11y: eslint-plugin-jsx-a11y:
specifier: ^6.7.1 specifier: ^6.7.1
version: 6.7.1(eslint@8.47.0) version: 6.7.1(eslint@8.48.0)
eslint-plugin-react: eslint-plugin-react:
specifier: ^7.33.2 specifier: ^7.33.2
version: 7.33.2(eslint@8.47.0) version: 7.33.2(eslint@8.48.0)
eslint-plugin-simple-import-sort: eslint-plugin-simple-import-sort:
specifier: ^10.0.0 specifier: ^10.0.0
version: 10.0.0(eslint@8.47.0) version: 10.0.0(eslint@8.48.0)
husky: husky:
specifier: ^8.0.3 specifier: ^8.0.3
version: 8.0.3 version: 8.0.3
@@ -811,17 +811,17 @@ packages:
dev: true dev: true
optional: true optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.47.0): /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies: dependencies:
eslint: 8.47.0 eslint: 8.48.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
/@eslint-community/regexpp@4.7.0: /@eslint-community/regexpp@4.8.0:
resolution: {integrity: sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==} resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
/@eslint/eslintrc@2.1.2: /@eslint/eslintrc@2.1.2:
@@ -840,8 +840,8 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
/@eslint/js@8.47.0: /@eslint/js@8.48.0:
resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
/@floating-ui/core@1.4.1: /@floating-ui/core@1.4.1:
@@ -991,15 +991,15 @@ packages:
dependencies: dependencies:
'@noble/hashes': 1.3.2 '@noble/hashes': 1.3.2
'@noble/secp256k1': 2.0.0 '@noble/secp256k1': 2.0.0
'@scure/base': 1.1.1 '@scure/base': 1.1.2
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
esbuild: 0.17.19 esbuild: 0.17.19
esbuild-plugin-alias: 0.2.1 esbuild-plugin-alias: 0.2.1
eslint: 8.47.0 eslint: 8.48.0
eslint-config-prettier: 8.10.0(eslint@8.47.0) eslint-config-prettier: 8.10.0(eslint@8.48.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.47.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)
esm-loader-typescript: 1.0.5 esm-loader-typescript: 1.0.5
eventemitter3: 5.0.1 eventemitter3: 5.0.1
light-bolt11-decoder: 3.0.0 light-bolt11-decoder: 3.0.0
@@ -1717,6 +1717,10 @@ packages:
resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==}
dev: false dev: false
/@scure/base@1.1.2:
resolution: {integrity: sha512-sSCrnIdaUZQHhBxZThMuk7Wm1TWzMD3uJNdGgx3JS23xSqevu0tAOsg8k66nL3R2NwQe65AI9GgqpPOgZys/eA==}
dev: false
/@scure/bip32@1.3.1: /@scure/bip32@1.3.1:
resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==}
dependencies: dependencies:
@@ -1743,8 +1747,8 @@ packages:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
dev: false dev: false
/@swc/core-darwin-arm64@1.3.78: /@swc/core-darwin-arm64@1.3.80:
resolution: {integrity: sha512-596KRua/d5Gx1buHKKchSyHuwoIL4S1BRD/wCvYNLNZ3xOzcuBBmXOjrDVigKi1ztNDeS07p30RO5UyYur0XAA==} resolution: {integrity: sha512-rhoFTcQMUGfO7IkfOnopPSF6O0/aVJ58B7KueIKbvrMe6YvSfFj9QfObELFjYCcrJZTvUWBhig0QrsfPIiUphA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -1752,8 +1756,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-darwin-x64@1.3.78: /@swc/core-darwin-x64@1.3.80:
resolution: {integrity: sha512-w0RsD1onQAj0vuLAoOVi48HgnW6D6oBEIZP17l0HYejCDBZ+FRZLjml7wgNAWMqHcd2qNRqgtZ+v7aLza2JtBQ==} resolution: {integrity: sha512-0dOLedFpVXe+ugkKHXsqSxMKqvQYfFtibWbrZ7j8wOaErzSGPr0VpyWvepNVb9s046725kPXSw+fsGhqZR8wrw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -1761,8 +1765,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-linux-arm-gnueabihf@1.3.78: /@swc/core-linux-arm-gnueabihf@1.3.80:
resolution: {integrity: sha512-v1CpRn+H6fha1WIqmdRvJM40pFdjUHrGfhf4Ygci72nlAU41l5XimN8Iwkm8FgIwf2wnv0lLzedSM4IHvpq/yA==} resolution: {integrity: sha512-QIjwP3PtDeHBDkwF6+ZZqdUsqAhORbMpxrw2jq3mHe4lQrxBttSFTq018vlMRo2mFEorOvXdadzaD9m+NymPrw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@@ -1770,8 +1774,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-linux-arm64-gnu@1.3.78: /@swc/core-linux-arm64-gnu@1.3.80:
resolution: {integrity: sha512-Sis17dz9joJRFVvR/gteOZSUNrrrioo81RQzani0Zr5ZZOfWLMTB9DA+0MVlfnVa2taYcsJHJZFoAv9JkLwbzg==} resolution: {integrity: sha512-cg8WriIueab58ZwkzXmIACnjSzFLzOBwxlC9k65gPXMNgCjab2YbqEYvAbjBqneuqaao02gW6tad2uhjgYaExw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -1779,8 +1783,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-linux-arm64-musl@1.3.78: /@swc/core-linux-arm64-musl@1.3.80:
resolution: {integrity: sha512-E5F8/qp+QupnfBnsP4vN1PKyCmAHYHDG1GMyPE/zLFOUYLgw+jK4C9rfyLBR0o2bWo1ay2WCIjusBZD9XHGOSA==} resolution: {integrity: sha512-AhdCQ7QKx5mWrtpaOA1mFRiWWvuiiUtspvo0QSpspDetRKTND1rlf/3UB5+gp0kCeCNUTsVmJWU7fIA9ICZtXA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -1788,8 +1792,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-linux-x64-gnu@1.3.78: /@swc/core-linux-x64-gnu@1.3.80:
resolution: {integrity: sha512-iDxa+RknnTQlyy+WfPor1FM6y44ERNI2E0xiUV6gV6uPwegCngi8LFC+E7IvP6+p+yXtAkesunAaiZ8nn0s+rw==} resolution: {integrity: sha512-+2e5oni1vOrLIjM5Q2/GIzK/uS2YEtuJqnjPvCK8SciRJsSl8OgVsRvyCDbmKeZNtJ2Q+o/O2AQ2w1qpAJG6jg==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -1797,8 +1801,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-linux-x64-musl@1.3.78: /@swc/core-linux-x64-musl@1.3.80:
resolution: {integrity: sha512-dWtIYUFL5sMTE2UKshkXTusHcK8+zAhhGzvqWq1wJS45pqTlrAbzpyqB780fle880x3A6DMitWmsAFARdNzpuQ==} resolution: {integrity: sha512-8OK9IlI1zpWOm7vIp1iXmZSEzLAwFpqhsGSEhxPavpOx2m54kLFdPcw/Uv3n461f6TCtszIxkGq1kSqBUdfUBA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -1806,8 +1810,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-win32-arm64-msvc@1.3.78: /@swc/core-win32-arm64-msvc@1.3.80:
resolution: {integrity: sha512-CXFaGEc2M9Su3UoUMC8AnzKb9g+GwPxXfakLWZsjwS448h6jcreExq3nwtBNdVGzQ26xqeVLMFfb1l/oK99Hwg==} resolution: {integrity: sha512-RKhatwiAGlffnF6z2Mm3Ddid0v3KB+uf5m/Gc7N9zO/EUAV0PnHRuYuZSGyqodHmGFC+mK8YrCooFCEmHL9n+w==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@@ -1815,8 +1819,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-win32-ia32-msvc@1.3.78: /@swc/core-win32-ia32-msvc@1.3.80:
resolution: {integrity: sha512-FaH1jwWnJpWkdImpMoiZpMg9oy9UUyZwltzN7hFwjR48e3Li82cRFb+9PifIBHCUSBM+CrrsJXbHP213IMVAyw==} resolution: {integrity: sha512-3jiiZzU/kaw7k4zUp1yMq1QiUe4wJVtCEXIhf+fKuBsIwm7rdvyK/+PIx5KHnZy4TGQnYczKBRhJA5nuBcrUCQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@@ -1824,8 +1828,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core-win32-x64-msvc@1.3.78: /@swc/core-win32-x64-msvc@1.3.80:
resolution: {integrity: sha512-oYxa+tPdhlx1aH14AIoF6kvVjo49tEOW0drNqoEaVHufvgH0y43QU2Jum3b2+xXztmMRtzK2CSN3GPOAXDKKKg==} resolution: {integrity: sha512-2eZtIoIWQBWqykfms92Zd37lveYOBWQTZjdooBGlsLHtcoQLkNpf1NXmR6TKY0yy8q6Yl3OhPvY+izjmO08MSg==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -1833,8 +1837,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@swc/core@1.3.78: /@swc/core@1.3.80:
resolution: {integrity: sha512-y6DQP571v7fbUUY7nz5G4lNIRGofuO48K5pGhD9VnuOCTuptfooCdi8wnigIrIhM/M4zQ53m/YCMDCbOtDgEww==} resolution: {integrity: sha512-yX2xV5I/lYswHHR+44TPvzBgq3/Y8N1YWpTQADYuvSiX3Jxyvemk5Jpx3rRtigYb8WBkWAAf2i5d5ZJ2M7hhgw==}
engines: {node: '>=10'} engines: {node: '>=10'}
requiresBuild: true requiresBuild: true
peerDependencies: peerDependencies:
@@ -1842,17 +1846,23 @@ packages:
peerDependenciesMeta: peerDependenciesMeta:
'@swc/helpers': '@swc/helpers':
optional: true optional: true
dependencies:
'@swc/types': 0.1.4
optionalDependencies: optionalDependencies:
'@swc/core-darwin-arm64': 1.3.78 '@swc/core-darwin-arm64': 1.3.80
'@swc/core-darwin-x64': 1.3.78 '@swc/core-darwin-x64': 1.3.80
'@swc/core-linux-arm-gnueabihf': 1.3.78 '@swc/core-linux-arm-gnueabihf': 1.3.80
'@swc/core-linux-arm64-gnu': 1.3.78 '@swc/core-linux-arm64-gnu': 1.3.80
'@swc/core-linux-arm64-musl': 1.3.78 '@swc/core-linux-arm64-musl': 1.3.80
'@swc/core-linux-x64-gnu': 1.3.78 '@swc/core-linux-x64-gnu': 1.3.80
'@swc/core-linux-x64-musl': 1.3.78 '@swc/core-linux-x64-musl': 1.3.80
'@swc/core-win32-arm64-msvc': 1.3.78 '@swc/core-win32-arm64-msvc': 1.3.80
'@swc/core-win32-ia32-msvc': 1.3.78 '@swc/core-win32-ia32-msvc': 1.3.80
'@swc/core-win32-x64-msvc': 1.3.78 '@swc/core-win32-x64-msvc': 1.3.80
dev: true
/@swc/types@0.1.4:
resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==}
dev: true dev: true
/@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3):
@@ -2424,7 +2434,7 @@ packages:
resolution: {integrity: sha512-W8F4eoTIvzXeNrT3JroQPimZLXnlJA8smYygHZUKFPVoYwgs/OhJkA1VBhL3iSs57OQkuINqHlY4SmMT5wtnJg==} resolution: {integrity: sha512-W8F4eoTIvzXeNrT3JroQPimZLXnlJA8smYygHZUKFPVoYwgs/OhJkA1VBhL3iSs57OQkuINqHlY4SmMT5wtnJg==}
dev: true dev: true
/@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -2435,13 +2445,13 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.7.0 '@eslint-community/regexpp': 4.8.0
'@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/type-utils': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/type-utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.2.4
natural-compare-lite: 1.4.0 natural-compare-lite: 1.4.0
@@ -2452,7 +2462,7 @@ packages:
- supports-color - supports-color
dev: false dev: false
/@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==} resolution: {integrity: sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@@ -2463,14 +2473,14 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.7.0 '@eslint-community/regexpp': 4.8.0
'@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.4.1(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.4.1 '@typescript-eslint/scope-manager': 6.4.1
'@typescript-eslint/type-utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/type-utils': 6.4.1(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.4.1(eslint@8.48.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.4.1 '@typescript-eslint/visitor-keys': 6.4.1
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.2.4
natural-compare: 1.4.0 natural-compare: 1.4.0
@@ -2481,7 +2491,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@5.62.0(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/parser@5.62.0(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -2495,13 +2505,13 @@ packages:
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: false dev: false
/@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/parser@6.4.1(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==} resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@@ -2516,7 +2526,7 @@ packages:
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.4.1 '@typescript-eslint/visitor-keys': 6.4.1
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -2538,7 +2548,7 @@ packages:
'@typescript-eslint/visitor-keys': 6.4.1 '@typescript-eslint/visitor-keys': 6.4.1
dev: true dev: true
/@typescript-eslint/type-utils@5.62.0(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/type-utils@5.62.0(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -2549,16 +2559,16 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
tsutils: 3.21.0(typescript@5.2.2) tsutils: 3.21.0(typescript@5.2.2)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: false dev: false
/@typescript-eslint/type-utils@6.4.1(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/type-utils@6.4.1(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==} resolution: {integrity: sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@@ -2569,9 +2579,9 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
'@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.4.1(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.47.0 eslint: 8.48.0
ts-api-utils: 1.0.2(typescript@5.2.2) ts-api-utils: 1.0.2(typescript@5.2.2)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
@@ -2630,19 +2640,19 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@5.62.0(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
'@types/json-schema': 7.0.12 '@types/json-schema': 7.0.12
'@types/semver': 7.5.0 '@types/semver': 7.5.0
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
eslint: 8.47.0 eslint: 8.48.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
semver: 7.5.4 semver: 7.5.4
transitivePeerDependencies: transitivePeerDependencies:
@@ -2650,19 +2660,19 @@ packages:
- typescript - typescript
dev: false dev: false
/@typescript-eslint/utils@6.4.1(eslint@8.47.0)(typescript@5.2.2): /@typescript-eslint/utils@6.4.1(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==} resolution: {integrity: sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
'@types/json-schema': 7.0.12 '@types/json-schema': 7.0.12
'@types/semver': 7.5.0 '@types/semver': 7.5.0
'@typescript-eslint/scope-manager': 6.4.1 '@typescript-eslint/scope-manager': 6.4.1
'@typescript-eslint/types': 6.4.1 '@typescript-eslint/types': 6.4.1
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
eslint: 8.47.0 eslint: 8.48.0
semver: 7.5.4 semver: 7.5.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -2690,7 +2700,7 @@ packages:
peerDependencies: peerDependencies:
vite: ^4 vite: ^4
dependencies: dependencies:
'@swc/core': 1.3.78 '@swc/core': 1.3.80
vite: 4.4.9(@types/node@20.5.6) vite: 4.4.9(@types/node@20.5.6)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/helpers' - '@swc/helpers'
@@ -2892,7 +2902,7 @@ packages:
postcss: ^8.1.0 postcss: ^8.1.0
dependencies: dependencies:
browserslist: 4.21.10 browserslist: 4.21.10
caniuse-lite: 1.0.30001522 caniuse-lite: 1.0.30001523
fraction.js: 4.2.1 fraction.js: 4.2.1
normalize-range: 0.1.2 normalize-range: 0.1.2
picocolors: 1.0.0 picocolors: 1.0.0
@@ -2944,8 +2954,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true hasBin: true
dependencies: dependencies:
caniuse-lite: 1.0.30001522 caniuse-lite: 1.0.30001523
electron-to-chromium: 1.4.501 electron-to-chromium: 1.4.503
node-releases: 2.0.13 node-releases: 2.0.13
update-browserslist-db: 1.0.11(browserslist@4.21.10) update-browserslist-db: 1.0.11(browserslist@4.21.10)
dev: true dev: true
@@ -2955,7 +2965,7 @@ packages:
engines: {node: '>=6.14.2'} engines: {node: '>=6.14.2'}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
node-gyp-build: 4.6.0 node-gyp-build: 4.6.1
dev: false dev: false
/call-bind@1.0.2: /call-bind@1.0.2:
@@ -2987,8 +2997,8 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
dev: false dev: false
/caniuse-lite@1.0.30001522: /caniuse-lite@1.0.30001523:
resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} resolution: {integrity: sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA==}
dev: true dev: true
/case-anything@2.1.13: /case-anything@2.1.13:
@@ -3330,8 +3340,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true dev: true
/electron-to-chromium@1.4.501: /electron-to-chromium@1.4.503:
resolution: {integrity: sha512-NCF5hZUg73MEP0guvIM+BjPs9W07UeAuc5XCNqRZZTKJxLjE0ZS/Zo5UsV8bbs2y/jeKRPFPzdWdBfOGEZTXKg==} resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==}
dev: true dev: true
/emoji-regex@8.0.0: /emoji-regex@8.0.0:
@@ -3555,22 +3565,22 @@ packages:
engines: {node: '>=12'} engines: {node: '>=12'}
dev: false dev: false
/eslint-config-prettier@8.10.0(eslint@8.47.0): /eslint-config-prettier@8.10.0(eslint@8.48.0):
resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
eslint: '>=7.0.0' eslint: '>=7.0.0'
dependencies: dependencies:
eslint: 8.47.0 eslint: 8.48.0
dev: false dev: false
/eslint-config-prettier@9.0.0(eslint@8.47.0): /eslint-config-prettier@9.0.0(eslint@8.48.0):
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
eslint: '>=7.0.0' eslint: '>=7.0.0'
dependencies: dependencies:
eslint: 8.47.0 eslint: 8.48.0
dev: true dev: true
/eslint-formatter-pretty@4.1.0: /eslint-formatter-pretty@4.1.0:
@@ -3597,7 +3607,7 @@ packages:
- supports-color - supports-color
dev: false dev: false
/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.47.0): /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.48.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@@ -3618,15 +3628,15 @@ packages:
eslint-import-resolver-webpack: eslint-import-resolver-webpack:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 3.2.7 debug: 3.2.7
eslint: 8.47.0 eslint: 8.48.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: false dev: false
/eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.47.0): /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@@ -3636,16 +3646,16 @@ packages:
'@typescript-eslint/parser': '@typescript-eslint/parser':
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
array-includes: 3.1.6 array-includes: 3.1.6
array.prototype.findlastindex: 1.2.2 array.prototype.findlastindex: 1.2.2
array.prototype.flat: 1.3.1 array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1 array.prototype.flatmap: 1.3.1
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.47.0 eslint: 8.48.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.47.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.48.0)
has: 1.0.3 has: 1.0.3
is-core-module: 2.13.0 is-core-module: 2.13.0
is-glob: 4.0.3 is-glob: 4.0.3
@@ -3661,7 +3671,7 @@ packages:
- supports-color - supports-color
dev: false dev: false
/eslint-plugin-jsx-a11y@6.7.1(eslint@8.47.0): /eslint-plugin-jsx-a11y@6.7.1(eslint@8.48.0):
resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
peerDependencies: peerDependencies:
@@ -3676,7 +3686,7 @@ packages:
axobject-query: 3.2.1 axobject-query: 3.2.1
damerau-levenshtein: 1.0.8 damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2 emoji-regex: 9.2.2
eslint: 8.47.0 eslint: 8.48.0
has: 1.0.3 has: 1.0.3
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
language-tags: 1.0.5 language-tags: 1.0.5
@@ -3686,7 +3696,7 @@ packages:
semver: 6.3.1 semver: 6.3.1
dev: true dev: true
/eslint-plugin-react@7.33.2(eslint@8.47.0): /eslint-plugin-react@7.33.2(eslint@8.48.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@@ -3697,7 +3707,7 @@ packages:
array.prototype.tosorted: 1.1.1 array.prototype.tosorted: 1.1.1
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.0.13 es-iterator-helpers: 1.0.13
eslint: 8.47.0 eslint: 8.48.0
estraverse: 5.3.0 estraverse: 5.3.0
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
minimatch: 3.1.2 minimatch: 3.1.2
@@ -3711,12 +3721,12 @@ packages:
string.prototype.matchall: 4.0.8 string.prototype.matchall: 4.0.8
dev: true dev: true
/eslint-plugin-simple-import-sort@10.0.0(eslint@8.47.0): /eslint-plugin-simple-import-sort@10.0.0(eslint@8.48.0):
resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==}
peerDependencies: peerDependencies:
eslint: '>=5.0.0' eslint: '>=5.0.0'
dependencies: dependencies:
eslint: 8.47.0 eslint: 8.48.0
dev: true dev: true
/eslint-rule-docs@1.1.235: /eslint-rule-docs@1.1.235:
@@ -3742,15 +3752,15 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
/eslint@8.47.0: /eslint@8.48.0:
resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
'@eslint-community/regexpp': 4.7.0 '@eslint-community/regexpp': 4.8.0
'@eslint/eslintrc': 2.1.2 '@eslint/eslintrc': 2.1.2
'@eslint/js': 8.47.0 '@eslint/js': 8.48.0
'@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/config-array': 0.11.10
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
@@ -3893,7 +3903,7 @@ packages:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0} engines: {node: ^10.12.0 || >=12.0.0}
dependencies: dependencies:
flat-cache: 3.0.4 flat-cache: 3.1.0
/fill-range@7.0.1: /fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
@@ -3916,11 +3926,12 @@ packages:
locate-path: 6.0.0 locate-path: 6.0.0
path-exists: 4.0.0 path-exists: 4.0.0
/flat-cache@3.0.4: /flat-cache@3.1.0:
resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==}
engines: {node: ^10.12.0 || >=12.0.0} engines: {node: '>=12.0.0'}
dependencies: dependencies:
flatted: 3.2.7 flatted: 3.2.7
keyv: 4.5.3
rimraf: 3.0.2 rimraf: 3.0.2
/flatted@3.2.7: /flatted@3.2.7:
@@ -4502,6 +4513,9 @@ packages:
hasBin: true hasBin: true
dev: true dev: true
/json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
/json-parse-better-errors@1.0.2: /json-parse-better-errors@1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
dev: false dev: false
@@ -4533,6 +4547,11 @@ packages:
object.values: 1.1.6 object.values: 1.1.6
dev: true dev: true
/keyv@4.5.3:
resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==}
dependencies:
json-buffer: 3.0.1
/kind-of@6.0.3: /kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -5253,8 +5272,8 @@ packages:
formdata-polyfill: 4.0.10 formdata-polyfill: 4.0.10
dev: false dev: false
/node-gyp-build@4.6.0: /node-gyp-build@4.6.1:
resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==}
hasBin: true hasBin: true
dev: false dev: false
@@ -6999,7 +7018,7 @@ packages:
engines: {node: '>=6.14.2'} engines: {node: '>=6.14.2'}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
node-gyp-build: 4.6.0 node-gyp-build: 4.6.1
dev: false dev: false
/utf8-buffer@1.0.0: /utf8-buffer@1.0.0:

20
src-tauri/Cargo.lock generated
View File

@@ -1475,7 +1475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"rustix 0.38.8", "rustix 0.38.9",
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]
@@ -3415,9 +3415,9 @@ dependencies = [
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.12" version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]] [[package]]
name = "pin-utils" name = "pin-utils"
@@ -3972,9 +3972,9 @@ dependencies = [
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.8" version = "0.38.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49"
dependencies = [ dependencies = [
"bitflags 2.4.0", "bitflags 2.4.0",
"errno", "errno",
@@ -4117,18 +4117,18 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.186" version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f5db24220c009de9bd45e69fb2938f4b6d2df856aa9304ce377b3180f83b7c1" checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.186" version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ad697f7e0b65af4983a4ce8f56ed5b357e8d3c36651bf6a7e13639c17b8e670" checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -5387,7 +5387,7 @@ dependencies = [
"cfg-if", "cfg-if",
"fastrand 2.0.0", "fastrand 2.0.0",
"redox_syscall 0.3.5", "redox_syscall 0.3.5",
"rustix 0.38.8", "rustix 0.38.9",
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]

View File

@@ -28,7 +28,7 @@ export function User({ pubkey, fallback }: { pubkey: string; fallback?: string }
/> />
</div> </div>
<div className="flex w-full flex-1 flex-col items-start text-start"> <div className="flex w-full flex-1 flex-col items-start text-start">
<p className="truncate font-medium leading-tight text-white"> <p className="max-w-[15rem] truncate font-medium leading-tight text-white">
{user?.name || user?.display_name || user?.nip05} {user?.name || user?.display_name || user?.nip05}
</p> </p>
<span className="max-w-[15rem] truncate text-base leading-tight text-white/50"> <span className="max-w-[15rem] truncate text-base leading-tight text-white/50">

View File

@@ -28,6 +28,10 @@ export function FeedWidgetForm({ params }: { params: Widget }) {
setGroups(arr); setGroups(arr);
}; };
const cancel = () => {
removeWidget(db, params.id);
};
const submit = async () => { const submit = async () => {
setWidget(db, { setWidget(db, {
kind: WidgetKinds.feed, kind: WidgetKinds.feed,
@@ -39,7 +43,7 @@ export function FeedWidgetForm({ params }: { params: Widget }) {
}; };
return ( return (
<div className="flex h-full shrink-0 grow-0 basis-[400px] flex-col items-center justify-center"> <div className="flex h-full shrink-0 grow-0 basis-[400px] flex-col items-center justify-center bg-white/10">
<div className="w-full px-5"> <div className="w-full px-5">
<h3 className="mb-4 text-center text-lg font-semibold"> <h3 className="mb-4 text-center text-lg font-semibold">
Choose account you want to add to group feeds Choose account you want to add to group feeds
@@ -70,7 +74,7 @@ export function FeedWidgetForm({ params }: { params: Widget }) {
</button> </button>
))} ))}
</div> </div>
<div className="flex items-center justify-center"> <div className="flex flex-col items-center justify-center gap-2">
<button <button
type="submit" type="submit"
disabled={groups.length < 1} disabled={groups.length < 1}
@@ -81,6 +85,13 @@ export function FeedWidgetForm({ params }: { params: Widget }) {
<span>Add {groups.length} account to group feed</span> <span>Add {groups.length} account to group feed</span>
<ArrowRightCircleIcon className="h-5 w-5" /> <ArrowRightCircleIcon className="h-5 w-5" />
</button> </button>
<button
type="button"
onClick={cancel}
className="inline-flex h-11 w-full items-center justify-center gap-2 rounded-lg bg-white/10 px-6 font-medium leading-none text-white hover:bg-white/20 focus:outline-none disabled:opacity-50"
>
Cancel
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -40,6 +40,10 @@ export function HashTagWidgetForm({ params }: { params: Widget }) {
formState: { errors, isDirty, isValid }, formState: { errors, isDirty, isValid },
} = useForm<FormValues>({ resolver }); } = useForm<FormValues>({ resolver });
const cancel = () => {
removeWidget(db, params.id);
};
const onSubmit = async (data: FormValues) => { const onSubmit = async (data: FormValues) => {
try { try {
setWidget(db, { setWidget(db, {
@@ -58,7 +62,7 @@ export function HashTagWidgetForm({ params }: { params: Widget }) {
}; };
return ( return (
<div className="flex h-full shrink-0 grow-0 basis-[400px] flex-col items-center justify-center"> <div className="flex h-full shrink-0 grow-0 basis-[400px] flex-col items-center justify-center bg-white/10">
<div className="w-full px-5"> <div className="w-full px-5">
<h3 className="mb-4 text-center text-lg font-semibold"> <h3 className="mb-4 text-center text-lg font-semibold">
Enter hashtag you want to follow Enter hashtag you want to follow
@@ -74,7 +78,7 @@ export function HashTagWidgetForm({ params }: { params: Widget }) {
{errors.hashtag && <p>{errors.hashtag.message}</p>} {errors.hashtag && <p>{errors.hashtag.message}</p>}
</span> </span>
</div> </div>
<div className="flex items-center justify-center"> <div className="flex flex-col items-center justify-center gap-2">
<button <button
type="submit" type="submit"
disabled={!isDirty || !isValid} disabled={!isDirty || !isValid}
@@ -84,6 +88,13 @@ export function HashTagWidgetForm({ params }: { params: Widget }) {
<span>Create</span> <span>Create</span>
<ArrowRightCircleIcon className="h-5 w-5" /> <ArrowRightCircleIcon className="h-5 w-5" />
</button> </button>
<button
type="button"
onClick={cancel}
className="inline-flex h-11 w-full items-center justify-center gap-2 rounded-lg bg-white/10 px-6 font-medium leading-none text-white hover:bg-white/20 focus:outline-none disabled:opacity-50"
>
Cancel
</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -1,10 +1,12 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { FollowIcon, LoaderIcon, UnfollowIcon } from '@shared/icons'; import { useStorage } from '@libs/storage/provider';
import { FollowIcon, UnfollowIcon } from '@shared/icons';
import { Image } from '@shared/image'; import { Image } from '@shared/image';
import { useSocial } from '@utils/hooks/useSocial'; import { useNostr } from '@utils/hooks/useNostr';
import { compactNumber } from '@utils/number'; import { compactNumber } from '@utils/number';
import { shortenKey } from '@utils/shortenKey'; import { shortenKey } from '@utils/shortenKey';
@@ -14,7 +16,8 @@ export interface Profile {
} }
export function UserProfile({ data }: { data: Profile }) { export function UserProfile({ data }: { data: Profile }) {
const { status: socialStatus, userFollows, follow, unfollow } = useSocial(); const { db } = useStorage();
const { addContact, removeContact } = useNostr();
const { status, data: userStats } = useQuery( const { status, data: userStats } = useQuery(
['user-stats', data.pubkey], ['user-stats', data.pubkey],
async () => { async () => {
@@ -36,7 +39,7 @@ export function UserProfile({ data }: { data: Profile }) {
const followUser = (pubkey: string) => { const followUser = (pubkey: string) => {
try { try {
follow(pubkey); addContact(pubkey);
// update state // update state
setFollowed(true); setFollowed(true);
} catch (error) { } catch (error) {
@@ -46,7 +49,7 @@ export function UserProfile({ data }: { data: Profile }) {
const unfollowUser = (pubkey: string) => { const unfollowUser = (pubkey: string) => {
try { try {
unfollow(pubkey); removeContact(pubkey);
// update state // update state
setFollowed(false); setFollowed(false);
} catch (error) { } catch (error) {
@@ -55,12 +58,10 @@ export function UserProfile({ data }: { data: Profile }) {
}; };
useEffect(() => { useEffect(() => {
if (status === 'success' && userFollows) { if (db.account.follows.includes(data.pubkey)) {
if (userFollows.includes(data.pubkey)) {
setFollowed(true); setFollowed(true);
} }
} }, []);
}, [status]);
if (!profile) { if (!profile) {
return ( return (
@@ -88,14 +89,7 @@ export function UserProfile({ data }: { data: Profile }) {
</div> </div>
</div> </div>
<div className="inline-flex items-center gap-2"> <div className="inline-flex items-center gap-2">
{socialStatus === 'loading' ? ( {followed ? (
<button
type="button"
className="inline-flex h-8 w-8 items-center justify-center rounded-md bg-white/10 hover:bg-fuchsia-500"
>
<LoaderIcon className="h-4 w-4 animate-spin text-white" />
</button>
) : followed ? (
<button <button
type="button" type="button"
onClick={() => unfollowUser(data.pubkey)} onClick={() => unfollowUser(data.pubkey)}

View File

@@ -8,21 +8,20 @@ import { useStorage } from '@libs/storage/provider';
import { EditProfileModal } from '@shared/editProfileModal'; import { EditProfileModal } from '@shared/editProfileModal';
import { Image } from '@shared/image'; import { Image } from '@shared/image';
import { useNostr } from '@utils/hooks/useNostr';
import { useProfile } from '@utils/hooks/useProfile'; import { useProfile } from '@utils/hooks/useProfile';
import { useSocial } from '@utils/hooks/useSocial';
import { shortenKey } from '@utils/shortenKey'; import { shortenKey } from '@utils/shortenKey';
export function UserProfile({ pubkey }: { pubkey: string }) { export function UserProfile({ pubkey }: { pubkey: string }) {
const { db } = useStorage(); const { db } = useStorage();
const { user } = useProfile(pubkey); const { user } = useProfile(pubkey);
const { status, userFollows, follow, unfollow } = useSocial(); const { addContact, removeContact } = useNostr();
const [followed, setFollowed] = useState(false); const [followed, setFollowed] = useState(false);
const followUser = (pubkey: string) => { const followUser = (pubkey: string) => {
try { try {
follow(pubkey); addContact(pubkey);
// update state // update state
setFollowed(true); setFollowed(true);
} catch (error) { } catch (error) {
@@ -32,8 +31,7 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
const unfollowUser = (pubkey: string) => { const unfollowUser = (pubkey: string) => {
try { try {
unfollow(pubkey); removeContact(pubkey);
// update state // update state
setFollowed(false); setFollowed(false);
} catch (error) { } catch (error) {
@@ -42,12 +40,10 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
}; };
useEffect(() => { useEffect(() => {
if (status === 'success' && userFollows) { if (db.account.follows.includes(pubkey)) {
if (userFollows.includes(pubkey)) {
setFollowed(true); setFollowed(true);
} }
} }, []);
}, [status]);
if (!user) return <p>Loading...</p>; if (!user) return <p>Loading...</p>;
@@ -92,14 +88,7 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
</div> </div>
</div> </div>
<div className="inline-flex items-center justify-center gap-2"> <div className="inline-flex items-center justify-center gap-2">
{status === 'loading' ? ( {followed ? (
<button
type="button"
className="inline-flex h-10 w-36 items-center justify-center rounded-md bg-white/10 text-sm font-medium hover:bg-fuchsia-500"
>
Loading...
</button>
) : followed ? (
<button <button
type="button" type="button"
onClick={() => unfollowUser(pubkey)} onClick={() => unfollowUser(pubkey)}

View File

@@ -26,7 +26,7 @@ export function UserStats({ pubkey }: { pubkey: string }) {
} }
return ( return (
<div className="flex w-full items-center gap-10"> <div className="flex w-full items-center justify-center gap-10">
<div className="inline-flex flex-col items-center gap-1"> <div className="inline-flex flex-col items-center gap-1">
<span className="font-semibold leading-none text-white"> <span className="font-semibold leading-none text-white">
{compactNumber.format(data.stats[pubkey].followers_pubkey_count) ?? 0} {compactNumber.format(data.stats[pubkey].followers_pubkey_count) ?? 0}

View File

@@ -37,7 +37,7 @@ export function UserScreen() {
count: data ? data.length : 0, count: data ? data.length : 0,
getScrollElement: () => parentRef.current, getScrollElement: () => parentRef.current,
estimateSize: () => 650, estimateSize: () => 650,
overscan: 2, overscan: 4,
}); });
const items = virtualizer.getVirtualItems(); const items = virtualizer.getVirtualItems();

View File

@@ -11,10 +11,13 @@ export function RepliesList({ id }: { id: string }) {
const [data, setData] = useState<null | NDKEventWithReplies[]>(null); const [data, setData] = useState<null | NDKEventWithReplies[]>(null);
useEffect(() => { useEffect(() => {
let isCancelled = false;
async function fetchRepliesAndSub() { async function fetchRepliesAndSub() {
const events = await fetchAllReplies(id); const events = await fetchAllReplies(id);
if (!isCancelled) {
setData(events); setData(events);
}
// subscribe for new replies // subscribe for new replies
sub( sub(
{ {
@@ -26,9 +29,12 @@ export function RepliesList({ id }: { id: string }) {
false false
); );
} }
fetchRepliesAndSub(); fetchRepliesAndSub();
}, []);
return () => {
isCancelled = true;
};
}, [id]);
if (!data) { if (!data) {
return ( return (

View File

@@ -72,7 +72,7 @@ export function NoteStats({ id }: { id: string }) {
<span className="font-semibold text-white"> <span className="font-semibold text-white">
{compactNumber.format(data.reposts)} {compactNumber.format(data.reposts)}
</span>{' '} </span>{' '}
reposts repostrs
</p> </p>
<span className="text-white/50">·</span> <span className="text-white/50">·</span>
<p className="text-white/50"> <p className="text-white/50">

View File

@@ -3,21 +3,24 @@ import { Link } from 'react-router-dom';
import { UserStats } from '@app/users/components/stats'; import { UserStats } from '@app/users/components/stats';
import { useStorage } from '@libs/storage/provider';
import { Image } from '@shared/image'; import { Image } from '@shared/image';
import { useNostr } from '@utils/hooks/useNostr';
import { useProfile } from '@utils/hooks/useProfile'; import { useProfile } from '@utils/hooks/useProfile';
import { useSocial } from '@utils/hooks/useSocial';
import { displayNpub } from '@utils/shortenKey'; import { displayNpub } from '@utils/shortenKey';
export function UserProfile({ pubkey }: { pubkey: string }) { export function UserProfile({ pubkey }: { pubkey: string }) {
const { db } = useStorage();
const { user } = useProfile(pubkey); const { user } = useProfile(pubkey);
const { status, userFollows, follow, unfollow } = useSocial(); const { addContact, removeContact } = useNostr();
const [followed, setFollowed] = useState(false); const [followed, setFollowed] = useState(false);
const followUser = (pubkey: string) => { const followUser = (pubkey: string) => {
try { try {
follow(pubkey); addContact(pubkey);
// update state // update state
setFollowed(true); setFollowed(true);
@@ -28,7 +31,7 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
const unfollowUser = (pubkey: string) => { const unfollowUser = (pubkey: string) => {
try { try {
unfollow(pubkey); removeContact(pubkey);
// update state // update state
setFollowed(false); setFollowed(false);
@@ -38,12 +41,10 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
}; };
useEffect(() => { useEffect(() => {
if (status === 'success' && userFollows) { if (db.account.follows.includes(pubkey)) {
if (userFollows.includes(pubkey)) {
setFollowed(true); setFollowed(true);
} }
} }, []);
}, [status]);
return ( return (
<div> <div>
@@ -68,14 +69,7 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
<UserStats pubkey={pubkey} /> <UserStats pubkey={pubkey} />
</div> </div>
<div className="mt-4 inline-flex items-center gap-2"> <div className="mt-4 inline-flex items-center gap-2">
{status === 'loading' ? ( {followed ? (
<button
type="button"
className="inline-flex h-10 w-36 items-center justify-center rounded-md bg-white/10 text-sm font-medium hover:bg-fuchsia-500"
>
Loading...
</button>
) : followed ? (
<button <button
type="button" type="button"
onClick={() => unfollowUser(pubkey)} onClick={() => unfollowUser(pubkey)}

View File

@@ -98,6 +98,32 @@ export function useNostr() {
} }
}; };
const addContact = async (pubkey: string) => {
const list = new Set(db.account.follows);
list.add(pubkey);
const tags = [];
list.forEach((item) => {
tags.push(['p', item]);
});
// publish event
publish({ content: '', kind: NDKKind.Contacts, tags: tags });
};
const removeContact = async (pubkey: string) => {
const list = new Set(db.account.follows);
list.delete(pubkey);
const tags = [];
list.forEach((item) => {
tags.push(['p', item]);
});
// publish event
publish({ content: '', kind: NDKKind.Contacts, tags: tags });
};
const prefetchEvents = async () => { const prefetchEvents = async () => {
try { try {
const fetcher = NostrFetcher.withCustomPool(ndkAdapter(ndk)); const fetcher = NostrFetcher.withCustomPool(ndkAdapter(ndk));
@@ -309,6 +335,8 @@ export function useNostr() {
return { return {
sub, sub,
fetchUserData, fetchUserData,
addContact,
removeContact,
prefetchEvents, prefetchEvents,
fetchActivities, fetchActivities,
fetchNIP04Chats, fetchNIP04Chats,

View File

@@ -1,69 +0,0 @@
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { useNostr } from '@utils/hooks/useNostr';
export function useSocial() {
const queryClient = useQueryClient();
const { publish } = useNostr();
const { ndk } = useNDK();
const { db } = useStorage();
const { status, data: userFollows } = useQuery(
['userFollows', db.account.pubkey],
async () => {
const keys = [];
const user = ndk.getUser({ hexpubkey: db.account.pubkey });
const follows = await user.follows();
follows.forEach((item) => {
keys.push(item.hexpubkey);
});
return keys;
},
{
refetchOnReconnect: false,
refetchOnMount: false,
refetchOnWindowFocus: false,
}
);
const unfollow = (pubkey: string) => {
const followsAsSet = new Set(userFollows);
followsAsSet.delete(pubkey);
const tags = [];
followsAsSet.forEach((item) => {
tags.push(['p', item]);
});
// publish event
publish({ content: '', kind: 3, tags: tags });
// invalid cache
queryClient.invalidateQueries({
queryKey: ['userFollows', db.account.pubkey],
});
};
const follow = async (pubkey: string) => {
const followsAsSet = new Set(userFollows);
followsAsSet.add(pubkey);
const tags = [];
followsAsSet.forEach((item) => {
tags.push(['p', item]);
});
// publish event
publish({ content: '', kind: 3, tags: tags });
// invalid cache
queryClient.invalidateQueries({
queryKey: ['userFollows', db.account.pubkey],
});
};
return { status, userFollows, follow, unfollow };
}