From eff6b4bf7f83566ae09f756c0e9b17ee49469cea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 06:27:51 +0000 Subject: [PATCH 01/25] Bump graphql-middleware from 6.1.32 to 6.1.35 Bumps [graphql-middleware](https://github.com/maticzav/graphql-middleware) from 6.1.32 to 6.1.35. - [Release notes](https://github.com/maticzav/graphql-middleware/releases) - [Commits](https://github.com/maticzav/graphql-middleware/compare/v6.1.32...v6.1.35) --- updated-dependencies: - dependency-name: graphql-middleware dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 146 +++++------------------------------------------------- 1 file changed, 12 insertions(+), 134 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8bcc2ca58..988101520 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5469,40 +5469,6 @@ resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.2.0.tgz#d7a6013b8aafcc64c778a0ccb83355a11204d3b2" integrity sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ== -"@redis/bloom@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" - integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== - -"@redis/client@1.5.14": - version "1.5.14" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.14.tgz#1107893464d092f140d77c468b018a6ed306a180" - integrity sha512-YGn0GqsRBFUQxklhY7v562VMOP0DcmlrHHs3IV1mFE3cbxe31IITUkqhBcIhVSI/2JqtWAJXg5mjV4aU+zD0HA== - dependencies: - cluster-key-slot "1.1.2" - generic-pool "3.9.0" - yallist "4.0.0" - -"@redis/graph@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" - integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== - -"@redis/json@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e" - integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw== - -"@redis/search@1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756" - integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw== - -"@redis/time-series@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" - integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== - "@remusao/guess-url-type@^1.1.2": version "1.2.1" resolved "https://registry.yarnpkg.com/@remusao/guess-url-type/-/guess-url-type-1.2.1.tgz#b3e7c32abdf98d0fb4f93cc67cad580b5fe4ba57" @@ -6054,11 +6020,6 @@ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== -"@sqltools/formatter@^1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" - integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== - "@stitches/react@^1.2.5": version "1.2.8" resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.8.tgz#954f8008be8d9c65c4e58efa0937f32388ce3a38" @@ -7887,13 +7848,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.68.tgz#3155f64a961b3d8d10246c80657f9a7292e3421a" integrity sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg== -"@types/node@^20.11.0": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== - dependencies: - undici-types "~5.26.4" - "@types/nodemailer@^6.4.4": version "6.4.4" resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-6.4.4.tgz#c265f7e7a51df587597b3a49a023acaf0c741f4b" @@ -9425,11 +9379,6 @@ app-root-path@^3.0.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== -app-root-path@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" - integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== - apparatus@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/apparatus/-/apparatus-0.0.10.tgz#81ea756772ada77863db54ceee8202c109bdca3e" @@ -11745,7 +11694,7 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== -cluster-key-slot@1.1.2, cluster-key-slot@^1.1.0: +cluster-key-slot@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== @@ -12876,7 +12825,7 @@ dateformat@^3.0.0, dateformat@^3.0.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dayjs@1.x, dayjs@^1.10.4, dayjs@^1.11.7, dayjs@^1.11.9: +dayjs@1.x, dayjs@^1.10.4, dayjs@^1.11.7: version "1.11.10" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== @@ -13599,11 +13548,6 @@ dotenv@^16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== -dotenv@^16.0.3: - version "16.4.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" - integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== - dotenv@^8.0.0, dotenv@^8.2.0: version "8.6.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" @@ -15941,11 +15885,6 @@ gcp-metadata@^6.0.0: gaxios "^6.0.0" json-bigint "^1.0.0" -generic-pool@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -16250,7 +16189,7 @@ glob@7.2.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glo once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2, glob@^10.3.10: +glob@^10.2.2: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -16617,9 +16556,9 @@ graphql-fields@^2.0.3: integrity sha512-x3VE5lUcR4XCOxPIqaO4CE+bTK8u6gVouOdpQX9+EKHr+scqtK5Pp/l8nIGqIpN1TUlkKE6jDCCycm/WtLRAwA== graphql-middleware@^6.0.10: - version "6.1.32" - resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-6.1.32.tgz#1b8a121d615efcf6d4b21d63f0a4818189700e0a" - integrity sha512-4vL+o9lljc1JavXNtMZg+gwDiZ9ORhgzAxf+7ef8r9/gn6D5sWxm2w8SdG6PLkKOsSM/tDunwSpfSJinn0XPCw== + version "6.1.35" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-6.1.35.tgz#7297d41ceb35742b80640cca5cd85d1e47e8ab24" + integrity sha512-azawK7ApUYtcuPGRGBR9vDZu795pRuaFhO5fgomdJppdfKRt7jwncuh0b7+D3i574/4B+16CNWgVpnGVlg3ZCg== dependencies: "@graphql-tools/delegate" "^8.8.1" "@graphql-tools/schema" "^8.5.1" @@ -21944,11 +21883,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^2.1.3: - version "2.1.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" - integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== - mkdirp@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" @@ -26159,14 +26093,6 @@ read-pkg@^7.1.0: parse-json "^5.2.0" type-fest "^2.0.0" -read-yaml-file@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-2.1.0.tgz#c5866712db9ef5343b4d02c2413bada53c41c4a9" - integrity sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ== - dependencies: - js-yaml "^4.0.0" - strip-bom "^4.0.0" - read@1, read@^1.0.7, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -26304,28 +26230,11 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" -redis@^4.3.1: - version "4.6.13" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.13.tgz#e247267c5f3ba35ab8277b57343d3a56acb2f0a6" - integrity sha512-MHgkS4B+sPjCXpf+HfdetBwbRz6vCtsceTmw1pHNYJAsYxrfpOP6dz+piJWGos8wqG7qb3vj/Rrc5qOlmInUuA== - dependencies: - "@redis/bloom" "1.2.0" - "@redis/client" "1.5.14" - "@redis/graph" "1.1.1" - "@redis/json" "1.0.6" - "@redis/search" "1.1.6" - "@redis/time-series" "1.0.5" - reflect-metadata@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -reflect-metadata@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.1.tgz#8d5513c0f5ef2b4b9c3865287f3c0940c1f67f74" - integrity sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw== - reflect.getprototypeof@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" @@ -29351,7 +29260,7 @@ tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0: +tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -29567,27 +29476,6 @@ typeorm-naming-strategies@^4.1.0: resolved "https://registry.yarnpkg.com/typeorm-naming-strategies/-/typeorm-naming-strategies-4.1.0.tgz#1ec6eb296c8d7b69bb06764d5b9083ff80e814a9" integrity sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ== -typeorm@^0.3.19: - version "0.3.20" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.20.tgz#4b61d737c6fed4e9f63006f88d58a5e54816b7ab" - integrity sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q== - dependencies: - "@sqltools/formatter" "^1.2.5" - app-root-path "^3.1.0" - buffer "^6.0.3" - chalk "^4.1.2" - cli-highlight "^2.1.11" - dayjs "^1.11.9" - debug "^4.3.4" - dotenv "^16.0.3" - glob "^10.3.10" - mkdirp "^2.1.3" - reflect-metadata "^0.2.1" - sha.js "^2.4.11" - tslib "^2.5.0" - uuid "^9.0.0" - yargs "^17.6.2" - typeorm@^0.3.4: version "0.3.7" resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.7.tgz#5776ed5058f0acb75d64723b39ff458d21de64c1" @@ -29626,11 +29514,6 @@ typescript@^4.4.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - ua-parser-js@^0.7.30: version "0.7.33" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" @@ -29709,11 +29592,6 @@ underscore@^1.13.4, underscore@^1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.4.tgz#7886b46bbdf07f768e0052f1828e1dcab40c0dee" integrity sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - undici@^4.9.3: version "4.14.1" resolved "https://registry.yarnpkg.com/undici/-/undici-4.14.1.tgz#7633b143a8a10d6d63335e00511d071e8d52a1d9" @@ -31199,11 +31077,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@4.0.0, yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yallist@^2.0.0, yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -31214,6 +31087,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml-ast-parser@^0.0.43: version "0.0.43" resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" From 6d61e6c9ae454671e95245ca1d6ac82f52a4f1b4 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 15:26:55 +0800 Subject: [PATCH 02/25] Make browser full screen for ipad --- .../Sources/App/Views/WebReader/WebReaderContainer.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index b922c8298..639bb7c90 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -432,7 +432,7 @@ struct WebReaderContainerView: View { }, label: { Text(LocalText.readerSave) }) } #if os(iOS) - .sheet(item: $safariWebLink) { + .fullScreenCover(item: $safariWebLink) { SafariView(url: $0.url) .ignoresSafeArea(.all, edges: .bottom) } From 48dfbdd0f95e0df6afe683aa04112a98d35b62e0 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 15:28:36 +0800 Subject: [PATCH 03/25] Fix observation of items for the grid --- .../App/Views/Home/HomeFeedViewIOS.swift | 32 +++++++++++-------- .../App/Views/Home/HomeFeedViewModel.swift | 2 +- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index c581f6646..92438d1ac 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -530,8 +530,13 @@ struct AnimatingCellHeight: AnimatableModifier { ) } else { HomeFeedGridView( + listTitle: $listTitle, + isListScrolled: $isListScrolled, + prefersListLayout: $prefersListLayout, + isEditMode: $isEditMode, + selection: $selection, viewModel: viewModel, - isListScrolled: $isListScrolled + showFeatureCards: showFeatureCards ) } }.sheet(isPresented: $viewModel.showLabelsSheet) { @@ -574,10 +579,6 @@ struct AnimatingCellHeight: AnimatableModifier { .dynamicTypeSize(.small ... .accessibility1) } - func menuItems(for item: Models.LibraryItem) -> some View { - libraryItemMenu(dataService: dataService, viewModel: viewModel, item: item) - } - var featureCard: some View { VStack(spacing: 0) { if Color.isDarkMode { @@ -745,7 +746,7 @@ struct AnimatingCellHeight: AnimatableModifier { .listRowSeparatorTint(Color.thBorderColor) .listRowInsets(.init(top: 0, leading: horizontalInset, bottom: 10, trailing: horizontalInset)) .contextMenu { - menuItems(for: item) + libraryItemMenu(dataService: dataService, viewModel: viewModel, item: item) } .swipeActions(edge: .leading, allowsFullSwipe: true) { if let listConfig = viewModel.currentListConfig { @@ -938,11 +939,20 @@ struct AnimatingCellHeight: AnimatableModifier { @EnvironmentObject var dataService: DataService @EnvironmentObject var audioController: AudioController - @State var isContextMenuOpen = false + @Binding var listTitle: String + @Binding var isListScrolled: Bool + @Binding var prefersListLayout: Bool + @Binding var isEditMode: EditMode + @State private var showHideFeatureAlert = false + @Binding var selection: Set @ObservedObject var viewModel: HomeFeedViewModel - @Binding var isListScrolled: Bool + let showFeatureCards: Bool + + @State var shouldScrollToTop = false + @State var topItem: Models.LibraryItem? + @ObservedObject var networkMonitor = NetworkMonitor() func contextMenuActionHandler(item: Models.LibraryItem, action: GridCardAction) { switch action { @@ -972,10 +982,6 @@ struct AnimatingCellHeight: AnimatableModifier { .dynamicTypeSize(.small ... .accessibility1) } - func menuItems(for item: Models.LibraryItem) -> some View { - libraryItemMenu(dataService: dataService, viewModel: viewModel, item: item) - } - var body: some View { VStack(alignment: .leading) { Color.systemBackground.frame(height: 1) @@ -1018,7 +1024,7 @@ struct AnimatingCellHeight: AnimatableModifier { viewModel: viewModel ) .contextMenu { - menuItems(for: item) + libraryItemMenu(dataService: dataService, viewModel: viewModel, item: item) } .onAppear { if idx >= viewModel.fetcher.items.count - 5 { diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index ceec00508..af5d6d68c 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -13,7 +13,7 @@ enum LoadingBarStyle { @MainActor final class HomeFeedViewModel: NSObject, ObservableObject { let filterKey: String - @Published var fetcher: LibraryItemFetcher + @ObservedObject var fetcher: LibraryItemFetcher let folderConfigs: [String: LibraryListConfig] @Published var isLoading = false From 6617fa84131f77230ebe667daf079906bfed84ae Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 15:28:49 +0800 Subject: [PATCH 04/25] Add unarchive and trash to grid context menu --- .../Sources/App/Views/Home/LibraryItemMenu.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift b/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift index 2b68877bf..7e8bda89a 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift @@ -13,6 +13,14 @@ import Views action: { viewModel.itemUnderTitleEdit = item }, label: { Label("Edit Info", systemImage: "info.circle") } ) + Button( + action: { viewModel.setLinkArchived(dataService: dataService, objectID: item.objectID, archived: !item.isArchived) }, + label: { Label(item.isArchived ? "Unarchive" : "Archive", systemImage: "inbox") } + ) + Button( + action: { viewModel.removeLibraryItem(dataService: dataService, objectID: item.objectID) }, + label: { Label("Remove", systemImage: "trash") } + ) Button( action: { viewModel.itemUnderLabelEdit = item }, label: { Label(item.labels?.count == 0 ? "Add Labels" : "Edit Labels", systemImage: "tag") } From 82db51b24e4568a4d04a5075cbb24a3f3b3c993f Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 15:30:36 +0800 Subject: [PATCH 05/25] Correct the archive icon --- .../Sources/App/Views/Home/LibraryItemMenu.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift b/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift index 7e8bda89a..76b369d08 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/LibraryItemMenu.swift @@ -15,7 +15,12 @@ import Views ) Button( action: { viewModel.setLinkArchived(dataService: dataService, objectID: item.objectID, archived: !item.isArchived) }, - label: { Label(item.isArchived ? "Unarchive" : "Archive", systemImage: "inbox") } + label: { + Label( + item.isArchived ? "Unarchive" : "Archive", + systemImage: item.isArchived ? "tray.and.arrow.down.fill" : "archivebox" + ) + } ) Button( action: { viewModel.removeLibraryItem(dataService: dataService, objectID: item.objectID) }, From 23be43cb032282019677113ee00c6171adc36627 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 17:21:16 +0800 Subject: [PATCH 06/25] Bump iOS version --- apple/Omnivore.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apple/Omnivore.xcodeproj/project.pbxproj b/apple/Omnivore.xcodeproj/project.pbxproj index d943ee073..4e0f6563b 100644 --- a/apple/Omnivore.xcodeproj/project.pbxproj +++ b/apple/Omnivore.xcodeproj/project.pbxproj @@ -1389,7 +1389,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.44.0; + MARKETING_VERSION = 1.45.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.omnivore.app; @@ -1424,7 +1424,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.44.0; + MARKETING_VERSION = 1.45.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.omnivore.app; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1479,7 +1479,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.44.0; + MARKETING_VERSION = 1.45.0; PRODUCT_BUNDLE_IDENTIFIER = app.omnivore.app; PRODUCT_NAME = Omnivore; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1820,7 +1820,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.44.0; + MARKETING_VERSION = 1.45.0; PRODUCT_BUNDLE_IDENTIFIER = app.omnivore.app; PRODUCT_NAME = Omnivore; PROVISIONING_PROFILE_SPECIFIER = ""; From 84fcbce94a0a2846d2243245a71b2c91351bcc6b Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 17:22:44 +0800 Subject: [PATCH 07/25] Handle using system theme when toggling from the library --- .../components/templates/PrimaryDropdown.tsx | 27 ++++++------- packages/web/lib/hooks/useCurrentTheme.tsx | 38 +++++++++---------- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/packages/web/components/templates/PrimaryDropdown.tsx b/packages/web/components/templates/PrimaryDropdown.tsx index 98d1a4b5c..65ff189a6 100644 --- a/packages/web/components/templates/PrimaryDropdown.tsx +++ b/packages/web/components/templates/PrimaryDropdown.tsx @@ -1,8 +1,7 @@ import { useRouter } from 'next/router' import { Moon, Sun } from 'phosphor-react' -import { ReactNode, useCallback, useState } from 'react' +import { ReactNode, useCallback } from 'react' import { useGetViewerQuery } from '../../lib/networking/queries/useGetViewerQuery' -import { getCurrentLocalTheme, updateTheme } from '../../lib/themeUpdater' import { Avatar } from '../elements/Avatar' import { AvatarDropdown } from '../elements/AvatarDropdown' import { @@ -16,7 +15,7 @@ import { Box, HStack, SpanBox, VStack } from '../elements/LayoutPrimitives' import { StyledText } from '../elements/StyledText' import { styled, theme, ThemeId } from '../tokens/stitches.config' import { LayoutType } from './homeFeed/HomeFeedContainer' -import { DropdownMenu } from '@radix-ui/react-dropdown-menu' +import { useCurrentTheme, isDarkTheme } from '../../lib/hooks/useCurrentTheme' type PrimaryDropdownProps = { children?: ReactNode @@ -267,15 +266,7 @@ export const StyledToggleButton = styled('button', { }) function ThemeSection(props: PrimaryDropdownProps): JSX.Element { - const [displayTheme, setDisplayTheme] = useState(getCurrentLocalTheme()) - - const doUpdateTheme = useCallback( - (newTheme: ThemeId) => { - updateTheme(newTheme) - setDisplayTheme(newTheme) - }, - [setDisplayTheme] - ) + const { currentTheme, setCurrentTheme } = useCurrentTheme() return ( <> @@ -311,18 +302,22 @@ function ThemeSection(props: PrimaryDropdownProps): JSX.Element { }} > { - doUpdateTheme(ThemeId.Light) + setCurrentTheme(ThemeId.Light) }} > Light { - doUpdateTheme(ThemeId.Dark) + setCurrentTheme(ThemeId.Dark) }} > Dark diff --git a/packages/web/lib/hooks/useCurrentTheme.tsx b/packages/web/lib/hooks/useCurrentTheme.tsx index c37b6ad11..92bf42f47 100644 --- a/packages/web/lib/hooks/useCurrentTheme.tsx +++ b/packages/web/lib/hooks/useCurrentTheme.tsx @@ -7,6 +7,25 @@ const themeKey = 'currentTheme' const preferredDarkThemeKey = 'preferredDarkThemeKey' const preferredLightThemeKey = 'preferredLightThemeKey' +export const isDarkTheme = (themeId: string): boolean => { + if ( + themeId === 'Dark' || + themeId === 'Darker' || + themeId === 'Apollo' || + themeId == 'Black' + ) { + return true + } + return false +} + +export const isLightTheme = (themeId: string): boolean => { + if (themeId === 'Sepia' || themeId == 'Light') { + return true + } + return false +} + export function useCurrentTheme() { const isDarkMode = useDarkModeListener() const [currentThemeInternal, setCurrentThemeInternal] = usePersistedState< @@ -29,25 +48,6 @@ export function useCurrentTheme() { } ) - const isDarkTheme = (themeId: string): boolean => { - if ( - themeId === 'Dark' || - themeId === 'Darker' || - themeId === 'Apollo' || - themeId == 'Black' - ) { - return true - } - return false - } - - const isLightTheme = (themeId: string): boolean => { - if (themeId === 'Sepia' || themeId == 'Light') { - return true - } - return false - } - const currentTheme = useMemo(() => { return currentThemeInternal }, [currentThemeInternal]) From f541b8f8cadcba43783a04721b74afd79f12d90d Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 22 Feb 2024 20:22:37 +0800 Subject: [PATCH 08/25] export at most 1000 most recent items --- .../src/jobs/integration/export_all_items.ts | 44 +++++++++++-------- .../api/src/jobs/integration/export_item.ts | 2 - packages/api/src/services/library_item.ts | 23 +++++++++- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/packages/api/src/jobs/integration/export_all_items.ts b/packages/api/src/jobs/integration/export_all_items.ts index fb29b20fb..52bf636b4 100644 --- a/packages/api/src/jobs/integration/export_all_items.ts +++ b/packages/api/src/jobs/integration/export_all_items.ts @@ -1,6 +1,6 @@ import { IntegrationType } from '../../entity/integration' import { findIntegration } from '../../services/integrations' -import { searchLibraryItems } from '../../services/library_item' +import { findRecentLibraryItems } from '../../services/library_item' import { findActiveUser } from '../../services/user' import { enqueueExportItem } from '../../utils/createTask' import { logger } from '../../utils/logger' @@ -39,31 +39,37 @@ export const exportAllItems = async (jobData: ExportAllItemsJobData) => { return } - // get paginated items from the database - const first = 50 - let after = 0 - for (;;) { - console.log('searching for items...', { - userId, - first, - after, - }) - const searchResult = await searchLibraryItems( - { from: after, size: first }, - userId - ) - const libraryItems = searchResult.libraryItems - const size = libraryItems.length - if (size === 0) { - break + const maxItems = 1000 + const limit = 50 + let offset = 0 + // get max 1000 most recent items from the database + while (offset < maxItems) { + const libraryItems = await findRecentLibraryItems(userId, limit, offset) + if (libraryItems.length === 0) { + logger.info('no library items found', { + userId, + }) + return } + logger.info('enqueuing export item...', { + userId, + offset, + integrationId, + }) + await enqueueExportItem({ userId, libraryItemIds: libraryItems.map((item) => item.id), integrationId, }) - after += size + offset += libraryItems.length + + logger.info('exported items', { + userId, + offset, + integrationId, + }) } } diff --git a/packages/api/src/jobs/integration/export_item.ts b/packages/api/src/jobs/integration/export_item.ts index 896ca45b4..cd99bba5e 100644 --- a/packages/api/src/jobs/integration/export_item.ts +++ b/packages/api/src/jobs/integration/export_item.ts @@ -21,7 +21,6 @@ export const exportItem = async (jobData: ExportItemJobData) => { if (libraryItems.length === 0) { logger.error('library items not found', { userId, - libraryItemIds, }) return } @@ -40,7 +39,6 @@ export const exportItem = async (jobData: ExportItemJobData) => { integrations.map(async (integration) => { const logObject = { userId, - libraryItemIds, integrationId: integration.id, } logger.info('exporting item...', logObject) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 4cb581784..e2f73cc0e 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -652,6 +652,28 @@ export const searchLibraryItems = async ( ) } +export const findRecentLibraryItems = async ( + userId: string, + limit = 1000, + offset?: number +) => { + return authTrx( + async (tx) => + tx + .createQueryBuilder(LibraryItem, 'library_item') + .where('library_item.user_id = :userId', { userId }) + .andWhere('library_item.state = :state', { + state: LibraryItemState.Succeeded, + }) + .orderBy('library_item.saved_at', 'DESC', 'NULLS LAST') + .take(limit) + .skip(offset) + .getMany(), + undefined, + userId + ) +} + export const findLibraryItemsByIds = async (ids: string[], userId: string) => { return authTrx( async (tx) => @@ -659,7 +681,6 @@ export const findLibraryItemsByIds = async (ids: string[], userId: string) => { .createQueryBuilder(LibraryItem, 'library_item') .leftJoinAndSelect('library_item.labels', 'labels') .leftJoinAndSelect('library_item.highlights', 'highlights') - .leftJoinAndSelect('highlights.user', 'user') .where('library_item.id IN (:...ids)', { ids }) .getMany(), undefined, From b9471002785b33dbacd92107e0aef885f4d2fedc Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 22 Feb 2024 20:23:37 +0800 Subject: [PATCH 09/25] increase batch size to 100 --- packages/api/src/jobs/integration/export_all_items.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/src/jobs/integration/export_all_items.ts b/packages/api/src/jobs/integration/export_all_items.ts index 52bf636b4..930a4c8df 100644 --- a/packages/api/src/jobs/integration/export_all_items.ts +++ b/packages/api/src/jobs/integration/export_all_items.ts @@ -40,7 +40,7 @@ export const exportAllItems = async (jobData: ExportAllItemsJobData) => { } const maxItems = 1000 - const limit = 50 + const limit = 100 let offset = 0 // get max 1000 most recent items from the database while (offset < maxItems) { From aa96ccf50d87589b32d7a5b5e8e17f7c88851303 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 10:11:13 +0800 Subject: [PATCH 10/25] create a multi-column index on user_id and state columns --- .../0162.do.create_more_index_on_library_item.sql | 6 ++++++ .../0162.undo.create_more_index_on_library_item.sql | 11 +++++++++++ 2 files changed, 17 insertions(+) create mode 100755 packages/db/migrations/0162.do.create_more_index_on_library_item.sql create mode 100755 packages/db/migrations/0162.undo.create_more_index_on_library_item.sql diff --git a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql new file mode 100755 index 000000000..fea6ad7ea --- /dev/null +++ b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql @@ -0,0 +1,6 @@ +-- Type: DO +-- Name: create_more_index_on_library_item +-- Description: Create more indexes on omnivore.library_item table to improve query performance + +CREATE INDEX CONCURRENTLY IF NOT EXISTS library_item_user_id_state_idx ON omnivore.library_item (user_id, state); + diff --git a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql new file mode 100755 index 000000000..2d01a10ff --- /dev/null +++ b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql @@ -0,0 +1,11 @@ +-- Type: UNDO +-- Name: create_more_index_on_library_item +-- Description: Create more indexes on omnivore.library_item table to improve query performance + +BEGIN; + +DROP INDEX IF EXISTS library_item_user_id_state_idx; + +COMMIT; + +SELECT DISTINCT "distinctAlias"."LibraryItem_id" AS "ids_LibraryItem_id" FROM (SELECT "LibraryItem"."id" AS "LibraryItem_id", "LibraryItem"."state" AS "LibraryItem_state", "LibraryItem"."original_url" AS "LibraryItem_original_url", "LibraryItem"."download_url" AS "LibraryItem_download_url", "LibraryItem"."slug" AS "LibraryItem_slug", "LibraryItem"."title" AS "LibraryItem_title", "LibraryItem"."author" AS "LibraryItem_author", "LibraryItem"."description" AS "LibraryItem_description", "LibraryItem"."saved_at" AS "LibraryItem_saved_at", "LibraryItem"."created_at" AS "LibraryItem_created_at", "LibraryItem"."published_at" AS "LibraryItem_published_at", "LibraryItem"."archived_at" AS "LibraryItem_archived_at", "LibraryItem"."deleted_at" AS "LibraryItem_deleted_at", "LibraryItem"."read_at" AS "LibraryItem_read_at", "LibraryItem"."updated_at" AS "LibraryItem_updated_at", "LibraryItem"."item_language" AS "LibraryItem_item_language", "LibraryItem"."word_count" AS "LibraryItem_word_count", "LibraryItem"."site_name" AS "LibraryItem_site_name", "LibraryItem"."site_icon" AS "LibraryItem_site_icon", "LibraryItem"."reading_progress_last_read_anchor" AS "LibraryItem_reading_progress_last_read_anchor", "LibraryItem"."reading_progress_highest_read_anchor" AS "LibraryItem_reading_progress_highest_read_anchor", "LibraryItem"."reading_progress_top_percent" AS "LibraryItem_reading_progress_top_percent", "LibraryItem"."reading_progress_bottom_percent" AS "LibraryItem_reading_progress_bottom_percent", "LibraryItem"."thumbnail" AS "LibraryItem_thumbnail", "LibraryItem"."item_type" AS "LibraryItem_item_type", "LibraryItem"."upload_file_id" AS "LibraryItem_upload_file_id", "LibraryItem"."content_reader" AS "LibraryItem_content_reader", "LibraryItem"."readable_content" AS "LibraryItem_readable_content", "LibraryItem"."text_content_hash" AS "LibraryItem_text_content_hash", "LibraryItem"."subscription" AS "LibraryItem_subscription", "LibraryItem"."directionality" AS "LibraryItem_directionality", "LibraryItem"."note" AS "LibraryItem_note", "LibraryItem"."recommender_names" AS "LibraryItem_recommender_names", "LibraryItem"."links" AS "LibraryItem_links", "LibraryItem"."preview_content" AS "LibraryItem_preview_content", "LibraryItem"."preview_content_type" AS "LibraryItem_preview_content_type", "LibraryItem"."folder" AS "LibraryItem_folder", "LibraryItem__LibraryItem_highlights"."id" AS "LibraryItem__LibraryItem_highlights_id", "LibraryItem__LibraryItem_highlights"."short_id" AS "LibraryItem__LibraryItem_highlights_short_id", "LibraryItem__LibraryItem_highlights"."library_item_id" AS "LibraryItem__LibraryItem_highlights_library_item_id", "LibraryItem__LibraryItem_highlights"."quote" AS "LibraryItem__LibraryItem_highlights_quote", "LibraryItem__LibraryItem_highlights"."prefix" AS "LibraryItem__LibraryItem_highlights_prefix", "LibraryItem__LibraryItem_highlights"."suffix" AS "LibraryItem__LibraryItem_highlights_suffix", "LibraryItem__LibraryItem_highlights"."patch" AS "LibraryItem__LibraryItem_highlights_patch", "LibraryItem__LibraryItem_highlights"."annotation" AS "LibraryItem__LibraryItem_highlights_annotation", "LibraryItem__LibraryItem_highlights"."created_at" AS "LibraryItem__LibraryItem_highlights_created_at", "LibraryItem__LibraryItem_highlights"."updated_at" AS "LibraryItem__LibraryItem_highlights_updated_at", "LibraryItem__LibraryItem_highlights"."shared_at" AS "LibraryItem__LibraryItem_highlights_shared_at", "LibraryItem__LibraryItem_highlights"."highlight_position_percent" AS "LibraryItem__LibraryItem_highlights_highlight_position_percent", "LibraryItem__LibraryItem_highlights"."highlight_position_anchor_index" AS "e9548c8abe96aa587160cdefd70110b18d121fe7216cb09fb831f9cc05f90df", "LibraryItem__LibraryItem_highlights"."highlight_type" AS "LibraryItem__LibraryItem_highlights_highlight_type", "LibraryItem__LibraryItem_highlights"."html" AS "LibraryItem__LibraryItem_highlights_html", "LibraryItem__LibraryItem_highlights"."color" AS "LibraryItem__LibraryItem_highlights_color", "LibraryItem__LibraryItem_highlights"."user_id" AS "LibraryItem__LibraryItem_highlights_user_id", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id" AS "a84fff273966eb91f85c037157ec97f95215bc6590980995dd93965b83522b0", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."name" AS "9b274ed700800f5b7f0a3db17f07ebe509604a588fe5cc11efbd91be47a0388", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."source" AS "a801f845e7faccd5eaaef706259afc68324fee30d0ba084ce31d1d4fa7e3e5c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."email" AS "c6e3bedfbc54cea34b613343590d5eb4d223baa5f6fb53081cf3e55f468784c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."source_user_id" AS "12540500658ffe8b1a3660729d4c534c10ae5cf5a764b887ba95d4f0fee69a5", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."created_at" AS "1f2fccc6ad4beb900ccff83f41f2d00cd99bf5e67bd3bf0f920430e1c8f6751", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."updated_at" AS "966ae4e6635e696d8e7a4e1eb4525952de2547b40e5f794c24b12fed9ed756c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."password" AS "32377f9dd8be80b501c95ee2c7490723cd3da6cd543516520c311b8bd30aeae", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."status" AS "598961a7c8b781682de6111412d83515439ebe52849b7debddee94ee55be91d", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."id" AS "128b7ad5b9c36caa99dedb74e1f9be27875c3e02a3b27945bc0c1da6354a0d4", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."name" AS "9a082316b6001f218fa0732f41072093c50fbde371ce157d7e7551c427aa284", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."color" AS "314c3e66dc1732f1b78ca2de8b486951a5345f0bee409d5a710442a4e5f4126", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."description" AS "d5ef5710f3d3fe2d274064390b2786c62b6c1e67dea851e77527eb46929b44d", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."created_at" AS "df5bf352dcd59ca3929a6f9c15c8d32a63d06aa8659694b0040e8029a4f7d96", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."position" AS "0bc7af18d863d6867a28d802a5e4031552aecd5ae57252d8c707415d1c99122", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."internal" AS "dd3c15cab0e21d48df527a4a638d0a950905c8e4876d817104dff779b1bf6d3", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."updated_at" AS "be8eafc12b0af707d1fbca309fb119905af3e844bc2b3dd931470f5db76c578", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."user_id" AS "9207e9ba039402e36925b938c6a4369b0c05f2488a55e9bf46d137a8cf9522b", "LibraryItem__LibraryItem_uploadFile"."id" AS "LibraryItem__LibraryItem_uploadFile_id", "LibraryItem__LibraryItem_uploadFile"."url" AS "LibraryItem__LibraryItem_uploadFile_url", "LibraryItem__LibraryItem_uploadFile"."file_name" AS "LibraryItem__LibraryItem_uploadFile_file_name", "LibraryItem__LibraryItem_uploadFile"."content_type" AS "LibraryItem__LibraryItem_uploadFile_content_type", "LibraryItem__LibraryItem_uploadFile"."status" AS "LibraryItem__LibraryItem_uploadFile_status", "LibraryItem__LibraryItem_uploadFile"."created_at" AS "LibraryItem__LibraryItem_uploadFile_created_at", "LibraryItem__LibraryItem_uploadFile"."updated_at" AS "LibraryItem__LibraryItem_uploadFile_updated_at", "LibraryItem__LibraryItem_uploadFile"."user_id" AS "LibraryItem__LibraryItem_uploadFile_user_id", "LibraryItem__LibraryItem_recommendations"."id" AS "LibraryItem__LibraryItem_recommendations_id", "LibraryItem__LibraryItem_recommendations"."note" AS "LibraryItem__LibraryItem_recommendations_note", "LibraryItem__LibraryItem_recommendations"."created_at" AS "LibraryItem__LibraryItem_recommendations_created_at", "LibraryItem__LibraryItem_recommendations"."recommender_id" AS "LibraryItem__LibraryItem_recommendations_recommender_id", "LibraryItem__LibraryItem_recommendations"."library_item_id" AS "LibraryItem__LibraryItem_recommendations_library_item_id", "LibraryItem__LibraryItem_recommendations"."group_id" AS "LibraryItem__LibraryItem_recommendations_group_id", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id" AS "9b3bb36a2339fb26be1d67e3424a18466a21c19ca236ba94dd57e16208d7b9e", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."name" AS "131196a8142484c90e6a89b4abf3c81e22b263eddf41c16acb24f7006311400", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."source" AS "6a153ef4b78bad86cbaf29f2942aee0e2c5b225b7e866cd8b61f7ef221dd71b", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."email" AS "0decc923e5dd0c128a6c98212071bd19b140ab139d89d32dd55caa7a2c1a635", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."source_user_id" AS "6c27b57756ed08cdaf03a452ec44e133c752365c485dd49291b81fc0c49c43f", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."created_at" AS "0d545c634c311310cb701abca204169251b5ef9d0fc0f03362840d13501060d", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."updated_at" AS "67d07f0399dbbf94a304883edfc693bc2616f2004caf3a0c15441e143a3ab32", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."password" AS "c831e587f68ec2dd789a8d788d42ef3268f418c0d38701d7f7378c7ccee511d", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."status" AS "230d6dfb285a244137de6e147917cd59e5becce5f66479f5c78bf25bc23e390", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."id" AS "bcc2a4607a4617eb2cd3dc0938e9ba29d54d6e021cab70edd6987570a14d2e9", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."name" AS "d4f18dbcc71e2639c26faa7b786b3833768a95a8b5775a5c79052ca047e6cc6", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."created_at" AS "0cd60e6e5caeda07646b3354288839e4fbf270f68a5e57889e0b1b0ca8b7e24", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."updated_at" AS "915c23bfdd35d50b75603b9e386f6a372076845f16cd8e990a23f024a628c27", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."description" AS "dc4cc6d39b7c848b140dd2dfdca591f0d67955c946744d7d22685cfe9617d68", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."topics" AS "4f0de2a6946a15444033916a08400dcfd4fd9d1627e9f22dac62d26ef294746", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."only_admin_can_post" AS "fcf0960115229e96388a1cd249c1c3e03a1b936b7b3427cab855d63a05f8db5", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."only_admin_can_see_members" AS "fa39c0bd929ab29c7b4a72355e5951e24a136b011cb531dc35689dd84a78064", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."created_by_id" AS "8e71e5887409bb011c11d54f29a744683735157d4d0ff004e538883e5631aad", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."id" AS "68fb17607a4cafcce1061c2cf8bcc8a58a6283ef57143f90d70942a16f9f037", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."username" AS "7cd283a35ad9d0aeb5f2244dca7fc7c391091ca8fa3da0d79a5776e7535e074", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."bio" AS "b9c7dc843e5d88a2de4a753b95146e0a638d9c3971673d9a60f6d519c0c2010", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."picture_url" AS "902c9d3b662f9582f409b9b070ab02f02c1ce9c41015e55338046b72f2e6db2", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."created_at" AS "db9ad7b20df0413d3daadcae4b594492e18219816617aac80fcfd04b35a88f1", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."updated_at" AS "d4587b34c5c154ecb6b5718890ca1e8df464f4dcf874ecc7cab582cd947ebe5", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."private" AS "5ca7f90b5eddaf0776d328ee0cac51cb7e201e9e179245d3fe88bb9e80d65cb", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."user_id" AS "d51071d9c660f3db37310f4849871a25beed4cc49e219e8528ca078784feef8", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."id" AS "7db085bcf0a53f7c610cd752202ce151ab68596993fd3cbb8a14ebc20b8d8d9", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."username" AS "8a3956410eae42d06c8ab8786719e783641dd0e9f61ab7cba31d5a2dadc0b30", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."bio" AS "68e83b7f491f4ec8fe14c1f279e4693b732eb163962ddce14d84a470066b91d", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."picture_url" AS "16da2d835d56fcaf3289168c163e01bb6b86ccbefd6f504b0a8213947f21a5d", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."created_at" AS "db596af8a72bb8c13c089505dbbe8249fb89ede3dfb4db098dd22baf16ec79a", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."updated_at" AS "82d653131762df0f8f417c826702fdda85ed59fb98c97a9fefaf38f1b7629c0", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."private" AS "f2f24888e7cc5341606def1238c365479409fc56150f597bd9cc19ea3d5ed45", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."user_id" AS "ec33b098ec4e6089db121d51050d7f24c277026c64dd0f9d177a19e5eebfb51" FROM "omnivore"."library_item" "LibraryItem" LEFT JOIN "omnivore"."highlight" "LibraryItem__LibraryItem_highlights" ON "LibraryItem__LibraryItem_highlights"."library_item_id"="LibraryItem"."id" LEFT JOIN "omnivore"."user" "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a" ON "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id"="LibraryItem__LibraryItem_highlights"."user_id" LEFT JOIN "omnivore"."entity_labels" "777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df" ON "777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df"."highlight_id"="LibraryItem__LibraryItem_highlights"."id" LEFT JOIN "omnivore"."labels" "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d" ON "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."id"="777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df"."label_id" LEFT JOIN "omnivore"."upload_files" "LibraryItem__LibraryItem_uploadFile" ON "LibraryItem__LibraryItem_uploadFile"."id"="LibraryItem"."upload_file_id" LEFT JOIN "omnivore"."recommendation" "LibraryItem__LibraryItem_recommendations" ON "LibraryItem__LibraryItem_recommendations"."library_item_id"="LibraryItem"."id" LEFT JOIN "omnivore"."user" "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402" ON "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id"="LibraryItem__LibraryItem_recommendations"."recommender_id" LEFT JOIN "omnivore"."group" "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94" ON "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."id"="LibraryItem__LibraryItem_recommendations"."group_id" LEFT JOIN "omnivore"."user_profile" "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924" ON "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."user_id"="43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id" LEFT JOIN "omnivore"."user_profile" "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7" ON "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."user_id"="6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id" WHERE ("LibraryItem"."slug" = 'team-og-new-carry-18dd0b0d645' AND "LibraryItem"."deleted_at" IS NULL)) "distinctAlias" ORDER BY "LibraryItem_id" ASC LIMIT 1; From 7c7d594b9189f935503f0a08dddef91c2ba81453 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 10:17:18 +0800 Subject: [PATCH 11/25] use low priority queue if user saved 5 items in the last minute. previously it was created --- packages/api/src/services/create_page_save_request.ts | 6 +++--- packages/api/src/services/library_item.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/api/src/services/create_page_save_request.ts b/packages/api/src/services/create_page_save_request.ts index 084f7da3f..ce4ce137b 100644 --- a/packages/api/src/services/create_page_save_request.ts +++ b/packages/api/src/services/create_page_save_request.ts @@ -16,7 +16,7 @@ import { libraryItemToArticleSavingRequest, } from '../utils/helpers' import { logger } from '../utils/logger' -import { countByCreatedAt, createOrUpdateLibraryItem } from './library_item' +import { countBySavedAt, createOrUpdateLibraryItem } from './library_item' interface PageSaveRequest { user: User @@ -38,12 +38,12 @@ const SAVING_CONTENT = 'Your link is being saved...' const isPrivateIP = privateIpLib.default -// 5 articles added in the last minute: use low queue +// 5 items saved in the last minute: use low queue // default: use normal queue const getPriorityByRateLimit = async ( userId: string ): Promise<'low' | 'high'> => { - const count = await countByCreatedAt(userId, new Date(Date.now() - 60 * 1000)) + const count = await countBySavedAt(userId, new Date(Date.now() - 60 * 1000)) return count >= 5 ? 'low' : 'high' } diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 4cb581784..32d6f085d 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -983,7 +983,7 @@ export const findLibraryItemsByPrefix = async ( ) } -export const countByCreatedAt = async ( +export const countBySavedAt = async ( userId: string, startDate = new Date(0), endDate = new Date() @@ -993,7 +993,7 @@ export const countByCreatedAt = async ( tx .createQueryBuilder(LibraryItem, 'library_item') .where('library_item.user_id = :userId', { userId }) - .andWhere('library_item.created_at between :startDate and :endDate', { + .andWhere('library_item.saved_at between :startDate and :endDate', { startDate, endDate, }) From fe2451cca79eeccfe6f7827fe0a8795b665ed3db Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 10:21:15 +0800 Subject: [PATCH 12/25] remove unwanted line --- .../migrations/0162.undo.create_more_index_on_library_item.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql index 2d01a10ff..47d109e47 100755 --- a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql @@ -7,5 +7,3 @@ BEGIN; DROP INDEX IF EXISTS library_item_user_id_state_idx; COMMIT; - -SELECT DISTINCT "distinctAlias"."LibraryItem_id" AS "ids_LibraryItem_id" FROM (SELECT "LibraryItem"."id" AS "LibraryItem_id", "LibraryItem"."state" AS "LibraryItem_state", "LibraryItem"."original_url" AS "LibraryItem_original_url", "LibraryItem"."download_url" AS "LibraryItem_download_url", "LibraryItem"."slug" AS "LibraryItem_slug", "LibraryItem"."title" AS "LibraryItem_title", "LibraryItem"."author" AS "LibraryItem_author", "LibraryItem"."description" AS "LibraryItem_description", "LibraryItem"."saved_at" AS "LibraryItem_saved_at", "LibraryItem"."created_at" AS "LibraryItem_created_at", "LibraryItem"."published_at" AS "LibraryItem_published_at", "LibraryItem"."archived_at" AS "LibraryItem_archived_at", "LibraryItem"."deleted_at" AS "LibraryItem_deleted_at", "LibraryItem"."read_at" AS "LibraryItem_read_at", "LibraryItem"."updated_at" AS "LibraryItem_updated_at", "LibraryItem"."item_language" AS "LibraryItem_item_language", "LibraryItem"."word_count" AS "LibraryItem_word_count", "LibraryItem"."site_name" AS "LibraryItem_site_name", "LibraryItem"."site_icon" AS "LibraryItem_site_icon", "LibraryItem"."reading_progress_last_read_anchor" AS "LibraryItem_reading_progress_last_read_anchor", "LibraryItem"."reading_progress_highest_read_anchor" AS "LibraryItem_reading_progress_highest_read_anchor", "LibraryItem"."reading_progress_top_percent" AS "LibraryItem_reading_progress_top_percent", "LibraryItem"."reading_progress_bottom_percent" AS "LibraryItem_reading_progress_bottom_percent", "LibraryItem"."thumbnail" AS "LibraryItem_thumbnail", "LibraryItem"."item_type" AS "LibraryItem_item_type", "LibraryItem"."upload_file_id" AS "LibraryItem_upload_file_id", "LibraryItem"."content_reader" AS "LibraryItem_content_reader", "LibraryItem"."readable_content" AS "LibraryItem_readable_content", "LibraryItem"."text_content_hash" AS "LibraryItem_text_content_hash", "LibraryItem"."subscription" AS "LibraryItem_subscription", "LibraryItem"."directionality" AS "LibraryItem_directionality", "LibraryItem"."note" AS "LibraryItem_note", "LibraryItem"."recommender_names" AS "LibraryItem_recommender_names", "LibraryItem"."links" AS "LibraryItem_links", "LibraryItem"."preview_content" AS "LibraryItem_preview_content", "LibraryItem"."preview_content_type" AS "LibraryItem_preview_content_type", "LibraryItem"."folder" AS "LibraryItem_folder", "LibraryItem__LibraryItem_highlights"."id" AS "LibraryItem__LibraryItem_highlights_id", "LibraryItem__LibraryItem_highlights"."short_id" AS "LibraryItem__LibraryItem_highlights_short_id", "LibraryItem__LibraryItem_highlights"."library_item_id" AS "LibraryItem__LibraryItem_highlights_library_item_id", "LibraryItem__LibraryItem_highlights"."quote" AS "LibraryItem__LibraryItem_highlights_quote", "LibraryItem__LibraryItem_highlights"."prefix" AS "LibraryItem__LibraryItem_highlights_prefix", "LibraryItem__LibraryItem_highlights"."suffix" AS "LibraryItem__LibraryItem_highlights_suffix", "LibraryItem__LibraryItem_highlights"."patch" AS "LibraryItem__LibraryItem_highlights_patch", "LibraryItem__LibraryItem_highlights"."annotation" AS "LibraryItem__LibraryItem_highlights_annotation", "LibraryItem__LibraryItem_highlights"."created_at" AS "LibraryItem__LibraryItem_highlights_created_at", "LibraryItem__LibraryItem_highlights"."updated_at" AS "LibraryItem__LibraryItem_highlights_updated_at", "LibraryItem__LibraryItem_highlights"."shared_at" AS "LibraryItem__LibraryItem_highlights_shared_at", "LibraryItem__LibraryItem_highlights"."highlight_position_percent" AS "LibraryItem__LibraryItem_highlights_highlight_position_percent", "LibraryItem__LibraryItem_highlights"."highlight_position_anchor_index" AS "e9548c8abe96aa587160cdefd70110b18d121fe7216cb09fb831f9cc05f90df", "LibraryItem__LibraryItem_highlights"."highlight_type" AS "LibraryItem__LibraryItem_highlights_highlight_type", "LibraryItem__LibraryItem_highlights"."html" AS "LibraryItem__LibraryItem_highlights_html", "LibraryItem__LibraryItem_highlights"."color" AS "LibraryItem__LibraryItem_highlights_color", "LibraryItem__LibraryItem_highlights"."user_id" AS "LibraryItem__LibraryItem_highlights_user_id", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id" AS "a84fff273966eb91f85c037157ec97f95215bc6590980995dd93965b83522b0", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."name" AS "9b274ed700800f5b7f0a3db17f07ebe509604a588fe5cc11efbd91be47a0388", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."source" AS "a801f845e7faccd5eaaef706259afc68324fee30d0ba084ce31d1d4fa7e3e5c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."email" AS "c6e3bedfbc54cea34b613343590d5eb4d223baa5f6fb53081cf3e55f468784c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."source_user_id" AS "12540500658ffe8b1a3660729d4c534c10ae5cf5a764b887ba95d4f0fee69a5", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."created_at" AS "1f2fccc6ad4beb900ccff83f41f2d00cd99bf5e67bd3bf0f920430e1c8f6751", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."updated_at" AS "966ae4e6635e696d8e7a4e1eb4525952de2547b40e5f794c24b12fed9ed756c", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."password" AS "32377f9dd8be80b501c95ee2c7490723cd3da6cd543516520c311b8bd30aeae", "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."status" AS "598961a7c8b781682de6111412d83515439ebe52849b7debddee94ee55be91d", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."id" AS "128b7ad5b9c36caa99dedb74e1f9be27875c3e02a3b27945bc0c1da6354a0d4", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."name" AS "9a082316b6001f218fa0732f41072093c50fbde371ce157d7e7551c427aa284", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."color" AS "314c3e66dc1732f1b78ca2de8b486951a5345f0bee409d5a710442a4e5f4126", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."description" AS "d5ef5710f3d3fe2d274064390b2786c62b6c1e67dea851e77527eb46929b44d", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."created_at" AS "df5bf352dcd59ca3929a6f9c15c8d32a63d06aa8659694b0040e8029a4f7d96", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."position" AS "0bc7af18d863d6867a28d802a5e4031552aecd5ae57252d8c707415d1c99122", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."internal" AS "dd3c15cab0e21d48df527a4a638d0a950905c8e4876d817104dff779b1bf6d3", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."updated_at" AS "be8eafc12b0af707d1fbca309fb119905af3e844bc2b3dd931470f5db76c578", "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."user_id" AS "9207e9ba039402e36925b938c6a4369b0c05f2488a55e9bf46d137a8cf9522b", "LibraryItem__LibraryItem_uploadFile"."id" AS "LibraryItem__LibraryItem_uploadFile_id", "LibraryItem__LibraryItem_uploadFile"."url" AS "LibraryItem__LibraryItem_uploadFile_url", "LibraryItem__LibraryItem_uploadFile"."file_name" AS "LibraryItem__LibraryItem_uploadFile_file_name", "LibraryItem__LibraryItem_uploadFile"."content_type" AS "LibraryItem__LibraryItem_uploadFile_content_type", "LibraryItem__LibraryItem_uploadFile"."status" AS "LibraryItem__LibraryItem_uploadFile_status", "LibraryItem__LibraryItem_uploadFile"."created_at" AS "LibraryItem__LibraryItem_uploadFile_created_at", "LibraryItem__LibraryItem_uploadFile"."updated_at" AS "LibraryItem__LibraryItem_uploadFile_updated_at", "LibraryItem__LibraryItem_uploadFile"."user_id" AS "LibraryItem__LibraryItem_uploadFile_user_id", "LibraryItem__LibraryItem_recommendations"."id" AS "LibraryItem__LibraryItem_recommendations_id", "LibraryItem__LibraryItem_recommendations"."note" AS "LibraryItem__LibraryItem_recommendations_note", "LibraryItem__LibraryItem_recommendations"."created_at" AS "LibraryItem__LibraryItem_recommendations_created_at", "LibraryItem__LibraryItem_recommendations"."recommender_id" AS "LibraryItem__LibraryItem_recommendations_recommender_id", "LibraryItem__LibraryItem_recommendations"."library_item_id" AS "LibraryItem__LibraryItem_recommendations_library_item_id", "LibraryItem__LibraryItem_recommendations"."group_id" AS "LibraryItem__LibraryItem_recommendations_group_id", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id" AS "9b3bb36a2339fb26be1d67e3424a18466a21c19ca236ba94dd57e16208d7b9e", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."name" AS "131196a8142484c90e6a89b4abf3c81e22b263eddf41c16acb24f7006311400", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."source" AS "6a153ef4b78bad86cbaf29f2942aee0e2c5b225b7e866cd8b61f7ef221dd71b", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."email" AS "0decc923e5dd0c128a6c98212071bd19b140ab139d89d32dd55caa7a2c1a635", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."source_user_id" AS "6c27b57756ed08cdaf03a452ec44e133c752365c485dd49291b81fc0c49c43f", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."created_at" AS "0d545c634c311310cb701abca204169251b5ef9d0fc0f03362840d13501060d", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."updated_at" AS "67d07f0399dbbf94a304883edfc693bc2616f2004caf3a0c15441e143a3ab32", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."password" AS "c831e587f68ec2dd789a8d788d42ef3268f418c0d38701d7f7378c7ccee511d", "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."status" AS "230d6dfb285a244137de6e147917cd59e5becce5f66479f5c78bf25bc23e390", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."id" AS "bcc2a4607a4617eb2cd3dc0938e9ba29d54d6e021cab70edd6987570a14d2e9", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."name" AS "d4f18dbcc71e2639c26faa7b786b3833768a95a8b5775a5c79052ca047e6cc6", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."created_at" AS "0cd60e6e5caeda07646b3354288839e4fbf270f68a5e57889e0b1b0ca8b7e24", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."updated_at" AS "915c23bfdd35d50b75603b9e386f6a372076845f16cd8e990a23f024a628c27", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."description" AS "dc4cc6d39b7c848b140dd2dfdca591f0d67955c946744d7d22685cfe9617d68", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."topics" AS "4f0de2a6946a15444033916a08400dcfd4fd9d1627e9f22dac62d26ef294746", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."only_admin_can_post" AS "fcf0960115229e96388a1cd249c1c3e03a1b936b7b3427cab855d63a05f8db5", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."only_admin_can_see_members" AS "fa39c0bd929ab29c7b4a72355e5951e24a136b011cb531dc35689dd84a78064", "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."created_by_id" AS "8e71e5887409bb011c11d54f29a744683735157d4d0ff004e538883e5631aad", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."id" AS "68fb17607a4cafcce1061c2cf8bcc8a58a6283ef57143f90d70942a16f9f037", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."username" AS "7cd283a35ad9d0aeb5f2244dca7fc7c391091ca8fa3da0d79a5776e7535e074", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."bio" AS "b9c7dc843e5d88a2de4a753b95146e0a638d9c3971673d9a60f6d519c0c2010", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."picture_url" AS "902c9d3b662f9582f409b9b070ab02f02c1ce9c41015e55338046b72f2e6db2", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."created_at" AS "db9ad7b20df0413d3daadcae4b594492e18219816617aac80fcfd04b35a88f1", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."updated_at" AS "d4587b34c5c154ecb6b5718890ca1e8df464f4dcf874ecc7cab582cd947ebe5", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."private" AS "5ca7f90b5eddaf0776d328ee0cac51cb7e201e9e179245d3fe88bb9e80d65cb", "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."user_id" AS "d51071d9c660f3db37310f4849871a25beed4cc49e219e8528ca078784feef8", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."id" AS "7db085bcf0a53f7c610cd752202ce151ab68596993fd3cbb8a14ebc20b8d8d9", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."username" AS "8a3956410eae42d06c8ab8786719e783641dd0e9f61ab7cba31d5a2dadc0b30", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."bio" AS "68e83b7f491f4ec8fe14c1f279e4693b732eb163962ddce14d84a470066b91d", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."picture_url" AS "16da2d835d56fcaf3289168c163e01bb6b86ccbefd6f504b0a8213947f21a5d", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."created_at" AS "db596af8a72bb8c13c089505dbbe8249fb89ede3dfb4db098dd22baf16ec79a", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."updated_at" AS "82d653131762df0f8f417c826702fdda85ed59fb98c97a9fefaf38f1b7629c0", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."private" AS "f2f24888e7cc5341606def1238c365479409fc56150f597bd9cc19ea3d5ed45", "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."user_id" AS "ec33b098ec4e6089db121d51050d7f24c277026c64dd0f9d177a19e5eebfb51" FROM "omnivore"."library_item" "LibraryItem" LEFT JOIN "omnivore"."highlight" "LibraryItem__LibraryItem_highlights" ON "LibraryItem__LibraryItem_highlights"."library_item_id"="LibraryItem"."id" LEFT JOIN "omnivore"."user" "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a" ON "43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id"="LibraryItem__LibraryItem_highlights"."user_id" LEFT JOIN "omnivore"."entity_labels" "777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df" ON "777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df"."highlight_id"="LibraryItem__LibraryItem_highlights"."id" LEFT JOIN "omnivore"."labels" "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d" ON "3f7c4003050ba058520e50b3fe0a9909cef8a58603e018be753d66ca05d4d2d"."id"="777e6f56f59cafce03cca0cbae77236a5a725055478db4df6a84db30b6052df"."label_id" LEFT JOIN "omnivore"."upload_files" "LibraryItem__LibraryItem_uploadFile" ON "LibraryItem__LibraryItem_uploadFile"."id"="LibraryItem"."upload_file_id" LEFT JOIN "omnivore"."recommendation" "LibraryItem__LibraryItem_recommendations" ON "LibraryItem__LibraryItem_recommendations"."library_item_id"="LibraryItem"."id" LEFT JOIN "omnivore"."user" "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402" ON "6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id"="LibraryItem__LibraryItem_recommendations"."recommender_id" LEFT JOIN "omnivore"."group" "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94" ON "83de47b7419c7e553320a1b5d97c69d3c89caf1c3ac932803f190890e901e94"."id"="LibraryItem__LibraryItem_recommendations"."group_id" LEFT JOIN "omnivore"."user_profile" "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924" ON "f9ce6479c0acde2833fb26dec6617dba8eebb8190673bb14995272d2ead5924"."user_id"="43147091eb650d733be159531a3e7b98c009541143983b4e8aa8a1e895c559a"."id" LEFT JOIN "omnivore"."user_profile" "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7" ON "98b4448f59ed18da5a754f7b59e73f79312a4381f32c7a87cf866c5834a17a7"."user_id"="6751b72e28632393def6b0add13bfe2a7698e53552ed2792c2ba964da612402"."id" WHERE ("LibraryItem"."slug" = 'team-og-new-carry-18dd0b0d645' AND "LibraryItem"."deleted_at" IS NULL)) "distinctAlias" ORDER BY "LibraryItem_id" ASC LIMIT 1; From 534b28c53657f01459acdb77c2bcdc096e8736ec Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 11:06:08 +0800 Subject: [PATCH 13/25] add an index for api key --- .../db/migrations/0162.do.create_more_index_on_library_item.sql | 1 + .../migrations/0162.undo.create_more_index_on_library_item.sql | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql index fea6ad7ea..708e5e49c 100755 --- a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql @@ -4,3 +4,4 @@ CREATE INDEX CONCURRENTLY IF NOT EXISTS library_item_user_id_state_idx ON omnivore.library_item (user_id, state); +CREATE INDEX CONCURRENTLY IF NOT EXISTS api_key_key_idx ON omnivore.api_key (key); diff --git a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql index 47d109e47..82621f37e 100755 --- a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql @@ -4,6 +4,7 @@ BEGIN; +DROP INDEX IF EXISTS api_key_key_idx; DROP INDEX IF EXISTS library_item_user_id_state_idx; COMMIT; From 58e33cc4e074c62a83084904f427a10edb77e1f0 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 11:17:37 +0800 Subject: [PATCH 14/25] fix tests --- .../0162.do.create_more_index_on_library_item.sql | 6 ++---- .../0162.undo.create_more_index_on_library_item.sql | 5 ++--- packages/db/migrations/0163.do.api_key_index.sql | 5 +++++ packages/db/migrations/0163.undo.api_key_index.sql | 9 +++++++++ 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100755 packages/db/migrations/0163.do.api_key_index.sql create mode 100755 packages/db/migrations/0163.undo.api_key_index.sql diff --git a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql index 708e5e49c..942896ca1 100755 --- a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.do.create_more_index_on_library_item.sql @@ -1,7 +1,5 @@ -- Type: DO --- Name: create_more_index_on_library_item --- Description: Create more indexes on omnivore.library_item table to improve query performance +-- Name: library_item_user_id_state_index +-- Description: Create an index on omnivore.library_item table for querying by user_id and state CREATE INDEX CONCURRENTLY IF NOT EXISTS library_item_user_id_state_idx ON omnivore.library_item (user_id, state); - -CREATE INDEX CONCURRENTLY IF NOT EXISTS api_key_key_idx ON omnivore.api_key (key); diff --git a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql index 82621f37e..694962e7f 100755 --- a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql @@ -1,10 +1,9 @@ -- Type: UNDO --- Name: create_more_index_on_library_item --- Description: Create more indexes on omnivore.library_item table to improve query performance +-- Name: library_item_user_id_state_index +-- Description: Create an index on omnivore.library_item table for querying by user_id and state BEGIN; -DROP INDEX IF EXISTS api_key_key_idx; DROP INDEX IF EXISTS library_item_user_id_state_idx; COMMIT; diff --git a/packages/db/migrations/0163.do.api_key_index.sql b/packages/db/migrations/0163.do.api_key_index.sql new file mode 100755 index 000000000..03db73c1d --- /dev/null +++ b/packages/db/migrations/0163.do.api_key_index.sql @@ -0,0 +1,5 @@ +-- Type: DO +-- Name: api_key_index +-- Description: Create an index for checking key in api_key table + +CREATE INDEX CONCURRENTLY IF NOT EXISTS api_key_key_idx ON omnivore.api_key (key); diff --git a/packages/db/migrations/0163.undo.api_key_index.sql b/packages/db/migrations/0163.undo.api_key_index.sql new file mode 100755 index 000000000..453e5a565 --- /dev/null +++ b/packages/db/migrations/0163.undo.api_key_index.sql @@ -0,0 +1,9 @@ +-- Type: UNDO +-- Name: api_key_index +-- Description: Create an index for checking key in api_key table + +BEGIN; + +DROP INDEX IF EXISTS api_key_key_idx; + +COMMIT; From 8ce7550582c7515c95ebb0b55b1a4f049043d11b Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Feb 2024 11:33:48 +0800 Subject: [PATCH 15/25] create an index for upload_file_id in library_item table --- packages/api/src/services/update_pdf_content.ts | 3 +-- ....sql => 0162.do.library_item_user_id_state_index.sql} | 0 ...ql => 0162.undo.library_item_user_id_state_index.sql} | 2 +- packages/db/migrations/0163.undo.api_key_index.sql | 2 +- .../db/migrations/0164.do.library_item_file_id_index.sql | 5 +++++ .../migrations/0164.undo.library_item_file_id_index.sql | 9 +++++++++ 6 files changed, 17 insertions(+), 4 deletions(-) rename packages/db/migrations/{0162.do.create_more_index_on_library_item.sql => 0162.do.library_item_user_id_state_index.sql} (100%) rename packages/db/migrations/{0162.undo.create_more_index_on_library_item.sql => 0162.undo.library_item_user_id_state_index.sql} (73%) create mode 100755 packages/db/migrations/0164.do.library_item_file_id_index.sql create mode 100755 packages/db/migrations/0164.undo.library_item_file_id_index.sql diff --git a/packages/api/src/services/update_pdf_content.ts b/packages/api/src/services/update_pdf_content.ts index ed9822ce2..75d3e8438 100644 --- a/packages/api/src/services/update_pdf_content.ts +++ b/packages/api/src/services/update_pdf_content.ts @@ -40,8 +40,7 @@ export const updateContentForFileItem = async (msg: UpdateContentMessage) => { .withRepository(libraryItemRepository) .createQueryBuilder('item') .innerJoinAndSelect('item.uploadFile', 'file') - .where('item.user = :userId', { userId: uploadFile.user.id }) - .andWhere('file.id = :fileId', { fileId }) + .where('file.id = :fileId', { fileId }) .getOne(), undefined, uploadFile.user.id diff --git a/packages/db/migrations/0162.do.create_more_index_on_library_item.sql b/packages/db/migrations/0162.do.library_item_user_id_state_index.sql similarity index 100% rename from packages/db/migrations/0162.do.create_more_index_on_library_item.sql rename to packages/db/migrations/0162.do.library_item_user_id_state_index.sql diff --git a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql b/packages/db/migrations/0162.undo.library_item_user_id_state_index.sql similarity index 73% rename from packages/db/migrations/0162.undo.create_more_index_on_library_item.sql rename to packages/db/migrations/0162.undo.library_item_user_id_state_index.sql index 694962e7f..b3d612b9b 100755 --- a/packages/db/migrations/0162.undo.create_more_index_on_library_item.sql +++ b/packages/db/migrations/0162.undo.library_item_user_id_state_index.sql @@ -4,6 +4,6 @@ BEGIN; -DROP INDEX IF EXISTS library_item_user_id_state_idx; +DROP INDEX IF EXISTS omnivore.library_item_user_id_state_idx; COMMIT; diff --git a/packages/db/migrations/0163.undo.api_key_index.sql b/packages/db/migrations/0163.undo.api_key_index.sql index 453e5a565..46dfa8cf6 100755 --- a/packages/db/migrations/0163.undo.api_key_index.sql +++ b/packages/db/migrations/0163.undo.api_key_index.sql @@ -4,6 +4,6 @@ BEGIN; -DROP INDEX IF EXISTS api_key_key_idx; +DROP INDEX IF EXISTS omnivore.api_key_key_idx; COMMIT; diff --git a/packages/db/migrations/0164.do.library_item_file_id_index.sql b/packages/db/migrations/0164.do.library_item_file_id_index.sql new file mode 100755 index 000000000..f962642dd --- /dev/null +++ b/packages/db/migrations/0164.do.library_item_file_id_index.sql @@ -0,0 +1,5 @@ +-- Type: DO +-- Name: library_item_file_id_index +-- Description: create an index for upload_file_id column on library_item table + +CREATE INDEX CONCURRENTLY IF NOT EXISTS library_item_upload_file_id_idx ON omnivore.library_item (upload_file_id); diff --git a/packages/db/migrations/0164.undo.library_item_file_id_index.sql b/packages/db/migrations/0164.undo.library_item_file_id_index.sql new file mode 100755 index 000000000..e2db369e7 --- /dev/null +++ b/packages/db/migrations/0164.undo.library_item_file_id_index.sql @@ -0,0 +1,9 @@ +-- Type: UNDO +-- Name: library_item_file_id_index +-- Description: create an index for upload_file_id column on library_item table + +BEGIN; + +DROP INDEX IF EXISTS omnivore.library_item_upload_file_id_idx; + +COMMIT; From ccbaf402bdf5a717152c4aaf414144ce8417f517 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 22:14:12 +0800 Subject: [PATCH 16/25] Better handling of errors in the library --- .../elements/icons/ConfusedSlothIcon.tsx | 317 ++++++++++++++++++ .../elements/icons/ErrorSlothIcon.tsx | 262 +++++++++++++++ .../components/templates/PrimaryDropdown.tsx | 16 +- .../templates/homeFeed/EmptyLibrary.tsx | 2 + .../templates/homeFeed/HomeFeedContainer.tsx | 94 +++++- .../queries/useGetLibraryItemsQuery.tsx | 2 + 6 files changed, 666 insertions(+), 27 deletions(-) create mode 100644 packages/web/components/elements/icons/ConfusedSlothIcon.tsx create mode 100644 packages/web/components/elements/icons/ErrorSlothIcon.tsx diff --git a/packages/web/components/elements/icons/ConfusedSlothIcon.tsx b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx new file mode 100644 index 000000000..a75126e97 --- /dev/null +++ b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx @@ -0,0 +1,317 @@ +/* eslint-disable functional/no-class */ +/* eslint-disable functional/no-this-expression */ +import { isDarkTheme } from '../../../lib/themeUpdater' +import { IconProps } from './IconProps' + +import React from 'react' + +export function ConfusedSlothIcon(): JSX.Element { + const isDark = isDarkTheme() + return isDark ? : +} + +class ConfusedSlothIconDark extends React.Component { + render() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} + +class ConfusedSlothIconLight extends React.Component { + render() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} diff --git a/packages/web/components/elements/icons/ErrorSlothIcon.tsx b/packages/web/components/elements/icons/ErrorSlothIcon.tsx new file mode 100644 index 000000000..da38bf6d5 --- /dev/null +++ b/packages/web/components/elements/icons/ErrorSlothIcon.tsx @@ -0,0 +1,262 @@ +/* eslint-disable functional/no-class */ +/* eslint-disable functional/no-this-expression */ +import { useCurrentTheme } from '../../../lib/hooks/useCurrentTheme' +import { useDarkModeListener } from '../../../lib/hooks/useDarkModeListener' +import { IconProps } from './IconProps' + +import React from 'react' + +export function ErrorSlothIcon(): JSX.Element { + const isDarkMode = useDarkModeListener() + return isDarkMode ? : +} + +class ErrorSlothIconDark extends React.Component { + render() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} + +class ErrorSlothIconLight extends React.Component { + render() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} diff --git a/packages/web/components/templates/PrimaryDropdown.tsx b/packages/web/components/templates/PrimaryDropdown.tsx index 65ff189a6..bcf43895b 100644 --- a/packages/web/components/templates/PrimaryDropdown.tsx +++ b/packages/web/components/templates/PrimaryDropdown.tsx @@ -41,7 +41,7 @@ export type HeaderDropdownAction = | 'logout' type TriggerButtonProps = { - name: string + name?: string } const TriggerButton = (props: TriggerButtonProps): JSX.Element => { @@ -60,7 +60,7 @@ const TriggerButton = (props: TriggerButtonProps): JSX.Element => { }, }} > - + { whiteSpace: 'nowrap', }} > - {props.name} + {props.name ?? 'Settings'} ) @@ -124,15 +124,11 @@ export function PrimaryDropdown(props: PrimaryDropdownProps): JSX.Element { [router] ) - if (!viewerData?.me) { - return <> - } - return ( + props.children ?? } css={{ width: '240px', ml: '15px' }} > @@ -153,7 +149,7 @@ export function PrimaryDropdown(props: PrimaryDropdownProps): JSX.Element { }} > @@ -162,7 +158,7 @@ export function PrimaryDropdown(props: PrimaryDropdownProps): JSX.Element { alignment="start" distribution="around" > - {viewerData.me && ( + {viewerData?.me && ( <> { }, }} > + diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index f64700bca..ad17ee396 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -49,6 +49,8 @@ import { saveUrlMutation } from '../../../lib/networking/mutations/saveUrlMutati import { articleQuery } from '../../../lib/networking/queries/useGetArticleQuery' import { PinnedButtons } from './PinnedButtons' import { PinnedSearch } from '../../../pages/settings/pinned-searches' +import { ErrorSlothIcon } from '../../elements/icons/ErrorSlothIcon' +import { DEFAULT_HEADER_HEIGHT } from './HeaderSpacer' export type LayoutType = 'LIST_LAYOUT' | 'GRID_LAYOUT' export type LibraryMode = 'reads' | 'highlights' @@ -109,8 +111,11 @@ export function HomeFeedContainer(): JSX.Element { isValidating, performActionOnItem, mutate, + error: fetchItemsError, } = useGetLibraryItemsQuery(queryInputs) + console.log('fetchItemsError: ', fetchItemsError) + useEffect(() => { const handleRevalidate = () => { ;(async () => { @@ -856,6 +861,7 @@ export function HomeFeedContainer(): JSX.Element { hasData={!!itemsPages} totalItems={itemsPages?.[0].search.pageInfo.totalCount || 0} isValidating={isValidating} + fetchItemsError={!!fetchItemsError} labelsTarget={labelsTarget} setLabelsTarget={setLabelsTarget} notebookTarget={notebookTarget} @@ -880,6 +886,51 @@ export function HomeFeedContainer(): JSX.Element { ) } +const FetchItemsError = (): JSX.Element => { + return ( + + + + Something has gone wrong. + + + We have encountered unexpected problems.{' '} + Get help + + + ) +} + export type HomeFeedContentProps = { items: LibraryItem[] searchTerm?: string @@ -890,6 +941,8 @@ export type HomeFeedContentProps = { hasData: boolean totalItems: number isValidating: boolean + fetchItemsError: boolean + loadMore: () => void labelsTarget: LibraryItem | undefined setLabelsTarget: (target: LibraryItem | undefined) => void @@ -1001,24 +1054,31 @@ function HomeFeedGrid(props: HomeFeedContentProps): JSX.Element { setShowFilterMenu={setShowFilterMenu} /> )} - {!props.isValidating && props.mode == 'highlights' && ( - - )} - {props.mode == 'reads' && ( - - )} + {props.fetchItemsError && } + + {!props.isValidating && + !props.fetchItemsError && + props.mode == 'highlights' && ( + + )} + + {!props.isValidating && + !props.fetchItemsError && + props.mode == 'reads' && ( + + )} {props.showAddLinkModal && ( number) @@ -447,5 +448,6 @@ export function useGetLibraryItemsQuery({ size, setSize, mutate, + error: !!error, } } From 88aa43c34a67a68fd2433f051b078056bacaa1f6 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 22:15:17 +0800 Subject: [PATCH 17/25] Dark mode listener --- .../web/components/elements/icons/ConfusedSlothIcon.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/web/components/elements/icons/ConfusedSlothIcon.tsx b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx index a75126e97..a7c6e00d7 100644 --- a/packages/web/components/elements/icons/ConfusedSlothIcon.tsx +++ b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx @@ -1,13 +1,14 @@ /* eslint-disable functional/no-class */ /* eslint-disable functional/no-this-expression */ -import { isDarkTheme } from '../../../lib/themeUpdater' +import { useCurrentTheme } from '../../../lib/hooks/useCurrentTheme' +import { useDarkModeListener } from '../../../lib/hooks/useDarkModeListener' import { IconProps } from './IconProps' import React from 'react' export function ConfusedSlothIcon(): JSX.Element { - const isDark = isDarkTheme() - return isDark ? : + const isDarkMode = useDarkModeListener() + return isDarkMode ? : } class ConfusedSlothIconDark extends React.Component { From 9a076b608f8d9dde5a8157dae0412e630e93c5c2 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 22 Feb 2024 22:18:10 +0800 Subject: [PATCH 18/25] Fallback icon --- packages/web/components/templates/PrimaryDropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/components/templates/PrimaryDropdown.tsx b/packages/web/components/templates/PrimaryDropdown.tsx index bcf43895b..a81601d76 100644 --- a/packages/web/components/templates/PrimaryDropdown.tsx +++ b/packages/web/components/templates/PrimaryDropdown.tsx @@ -60,7 +60,7 @@ const TriggerButton = (props: TriggerButtonProps): JSX.Element => { }, }} > - + Date: Fri, 23 Feb 2024 10:13:34 +0800 Subject: [PATCH 19/25] Fix link to help --- .../web/components/templates/homeFeed/HomeFeedContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index ad17ee396..487f33cec 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -925,7 +925,7 @@ const FetchItemsError = (): JSX.Element => { }} > We have encountered unexpected problems.{' '} - Get help + Get help ) From 6543c9b0173233e5200a46be676e9510f193bb7f Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 23 Feb 2024 10:54:00 +0800 Subject: [PATCH 20/25] Improve errors layout --- .../elements/icons/ConfusedSlothIcon.tsx | 9 +- .../elements/icons/ErrorSlothIcon.tsx | 5 +- .../templates/homeFeed/EmptyLibrary.tsx | 65 +++-------- .../templates/homeFeed/FetchItemsError.tsx | 56 ++++++++++ .../templates/homeFeed/HomeFeedContainer.tsx | 102 +++++++----------- packages/web/lib/hooks/useCurrentTheme.tsx | 8 ++ 6 files changed, 126 insertions(+), 119 deletions(-) create mode 100644 packages/web/components/templates/homeFeed/FetchItemsError.tsx diff --git a/packages/web/components/elements/icons/ConfusedSlothIcon.tsx b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx index a7c6e00d7..47f300a3e 100644 --- a/packages/web/components/elements/icons/ConfusedSlothIcon.tsx +++ b/packages/web/components/elements/icons/ConfusedSlothIcon.tsx @@ -7,8 +7,13 @@ import { IconProps } from './IconProps' import React from 'react' export function ConfusedSlothIcon(): JSX.Element { - const isDarkMode = useDarkModeListener() - return isDarkMode ? : + const { currentThemeIsDark } = useCurrentTheme() + console.log('is dark mdoe: ', currentThemeIsDark) + return currentThemeIsDark ? ( + + ) : ( + + ) } class ConfusedSlothIconDark extends React.Component { diff --git a/packages/web/components/elements/icons/ErrorSlothIcon.tsx b/packages/web/components/elements/icons/ErrorSlothIcon.tsx index da38bf6d5..c6545d997 100644 --- a/packages/web/components/elements/icons/ErrorSlothIcon.tsx +++ b/packages/web/components/elements/icons/ErrorSlothIcon.tsx @@ -1,14 +1,13 @@ /* eslint-disable functional/no-class */ /* eslint-disable functional/no-this-expression */ import { useCurrentTheme } from '../../../lib/hooks/useCurrentTheme' -import { useDarkModeListener } from '../../../lib/hooks/useDarkModeListener' import { IconProps } from './IconProps' import React from 'react' export function ErrorSlothIcon(): JSX.Element { - const isDarkMode = useDarkModeListener() - return isDarkMode ? : + const { currentThemeIsDark } = useCurrentTheme() + return currentThemeIsDark ? : } class ErrorSlothIconDark extends React.Component { diff --git a/packages/web/components/templates/homeFeed/EmptyLibrary.tsx b/packages/web/components/templates/homeFeed/EmptyLibrary.tsx index bc3928057..058fb8f48 100644 --- a/packages/web/components/templates/homeFeed/EmptyLibrary.tsx +++ b/packages/web/components/templates/homeFeed/EmptyLibrary.tsx @@ -1,15 +1,12 @@ -import { Box } from '../../elements/LayoutPrimitives' +import { Box, VStack } from '../../elements/LayoutPrimitives' import { useMemo } from 'react' -import { LIBRARY_LEFT_MENU_WIDTH } from '../navMenu/LibraryMenu' -import { LayoutType } from './HomeFeedContainer' import { SuggestionBox, SuggestionAction } from '../../elements/SuggestionBox' import { ConfusedSlothIcon } from '../../elements/icons/ConfusedSlothIcon' +import { DEFAULT_HEADER_HEIGHT } from './HeaderSpacer' type EmptyLibraryProps = { searchTerm: string | undefined onAddLinkClicked: () => void - - layoutType: LayoutType } type MessageType = @@ -59,21 +56,13 @@ export const ErrorBox = (props: HelpMessageProps) => { return ( {errorTitle} @@ -182,6 +171,7 @@ export const EmptyLibrary = (props: EmptyLibraryProps) => { return 'files' case 'in:archive': return 'archive' + case 'in:following use:folders': case 'label:RSS': return 'feed' case 'has:subscriptions': @@ -194,41 +184,20 @@ export const EmptyLibrary = (props: EmptyLibraryProps) => { }, [props]) return ( - - + ) } diff --git a/packages/web/components/templates/homeFeed/FetchItemsError.tsx b/packages/web/components/templates/homeFeed/FetchItemsError.tsx new file mode 100644 index 000000000..7a6f1c2d9 --- /dev/null +++ b/packages/web/components/templates/homeFeed/FetchItemsError.tsx @@ -0,0 +1,56 @@ +import { VStack } from '../../elements/LayoutPrimitives' +import { StyledText } from '../../elements/StyledText' +import { ErrorSlothIcon } from '../../elements/icons/ErrorSlothIcon' +import { DEFAULT_HEADER_HEIGHT } from './HeaderSpacer' + +export const FetchItemsError = (): JSX.Element => { + return ( + + + + Something has gone wrong. + + + We have encountered unexpected problems.{' '} + + Get help + + + + ) +} diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index 487f33cec..e160f05f8 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -51,6 +51,7 @@ import { PinnedButtons } from './PinnedButtons' import { PinnedSearch } from '../../../pages/settings/pinned-searches' import { ErrorSlothIcon } from '../../elements/icons/ErrorSlothIcon' import { DEFAULT_HEADER_HEIGHT } from './HeaderSpacer' +import { FetchItemsError } from './FetchItemsError' export type LayoutType = 'LIST_LAYOUT' | 'GRID_LAYOUT' export type LibraryMode = 'reads' | 'highlights' @@ -886,51 +887,6 @@ export function HomeFeedContainer(): JSX.Element { ) } -const FetchItemsError = (): JSX.Element => { - return ( - - - - Something has gone wrong. - - - We have encountered unexpected problems.{' '} - Get help - - - ) -} - export type HomeFeedContentProps = { items: LibraryItem[] searchTerm?: string @@ -1007,6 +963,16 @@ function HomeFeedGrid(props: HomeFeedContentProps): JSX.Element { const [showFilterMenu, setShowFilterMenu] = useState(false) + const showItems = useMemo(() => { + if (props.fetchItemsError) { + return false + } + if (!props.isValidating && props.items.length <= 0) { + return false + } + return true + }, [props]) + return ( } + {!props.isValidating && props.items.length <= 0 && ( + { + props.setShowAddLinkModal(true) + }} + /> + )} - {!props.isValidating && - !props.fetchItemsError && - props.mode == 'highlights' && ( - - )} + {showItems && props.mode == 'highlights' && ( + + )} - {!props.isValidating && - !props.fetchItemsError && - props.mode == 'reads' && ( - - )} + {showItems && props.mode == 'reads' && ( + + )} {props.showAddLinkModal && ( { + if (currentTheme) { + return isDarkTheme(currentTheme) + } + return false + }, [currentTheme]) + return { currentTheme, setCurrentTheme, resetSystemTheme, + currentThemeIsDark, } } From f85e82614656f3f2b9e69b201ddc2fdea149dfc5 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 23 Feb 2024 11:07:57 +0800 Subject: [PATCH 21/25] Simplify empty state handling, remove obsolete test --- .../templates/homeFeed/HomeFeedContainer.tsx | 38 +++++++------------ packages/web/stories/EmptyLibrary.stories.tsx | 27 ------------- 2 files changed, 14 insertions(+), 51 deletions(-) delete mode 100644 packages/web/stories/EmptyLibrary.stories.tsx diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index e160f05f8..eeaa1411f 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -1143,30 +1143,20 @@ export function LibraryItemsLayout( }} style={{ height: '100%', width: '100%' }} > - {!props.isValidating && props.items.length == 0 ? ( - { - props.setShowAddLinkModal(true) - }} - /> - ) : ( - - )} + - -export const EmptyLibraryStory: ComponentStory = ( - args: any -) => { - return ( - { - console.log('onAddLinkClicked') - }} - /> - ) -} From 72eea42b8e2c30e435b72bc50042fe7967dfe0c0 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 23 Feb 2024 14:18:53 +0800 Subject: [PATCH 22/25] Fix embedded svg --- packages/web/components/elements/icons/ErrorSlothIcon.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/web/components/elements/icons/ErrorSlothIcon.tsx b/packages/web/components/elements/icons/ErrorSlothIcon.tsx index c6545d997..5d986c30c 100644 --- a/packages/web/components/elements/icons/ErrorSlothIcon.tsx +++ b/packages/web/components/elements/icons/ErrorSlothIcon.tsx @@ -80,7 +80,7 @@ class ErrorSlothIconDark extends React.Component { d="M79.7 33.5C79.7 33.5 81.8 28.7 93.8 30.5L85.1 34.1M106.4 33.5C106.4 33.5 109.7 29.6 117.5 29.9L112.1 33.5H106.4Z" fill="#3D3D3D" /> - + { strokeLinejoin="round" /> - + { d="M79.7 33.5C79.7 33.5 81.8 28.7 93.8 30.5L85.1 34.1M106.4 33.5C106.4 33.5 109.7 29.6 117.5 29.9L112.1 33.5H106.4Z" fill="#898989" /> - + { strokeLinejoin="round" /> - + Date: Fri, 23 Feb 2024 14:19:22 +0800 Subject: [PATCH 23/25] Use new dark theme handler for icons --- .../web/components/templates/PrimaryDropdown.tsx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/web/components/templates/PrimaryDropdown.tsx b/packages/web/components/templates/PrimaryDropdown.tsx index a81601d76..e7f2d727a 100644 --- a/packages/web/components/templates/PrimaryDropdown.tsx +++ b/packages/web/components/templates/PrimaryDropdown.tsx @@ -15,7 +15,7 @@ import { Box, HStack, SpanBox, VStack } from '../elements/LayoutPrimitives' import { StyledText } from '../elements/StyledText' import { styled, theme, ThemeId } from '../tokens/stitches.config' import { LayoutType } from './homeFeed/HomeFeedContainer' -import { useCurrentTheme, isDarkTheme } from '../../lib/hooks/useCurrentTheme' +import { useCurrentTheme } from '../../lib/hooks/useCurrentTheme' type PrimaryDropdownProps = { children?: ReactNode @@ -262,7 +262,8 @@ export const StyledToggleButton = styled('button', { }) function ThemeSection(props: PrimaryDropdownProps): JSX.Element { - const { currentTheme, setCurrentTheme } = useCurrentTheme() + const { currentTheme, setCurrentTheme, currentThemeIsDark } = + useCurrentTheme() return ( <> @@ -298,9 +299,7 @@ function ThemeSection(props: PrimaryDropdownProps): JSX.Element { }} > { setCurrentTheme(ThemeId.Light) }} @@ -309,9 +308,7 @@ function ThemeSection(props: PrimaryDropdownProps): JSX.Element { { setCurrentTheme(ThemeId.Dark) }} From 77e16027470f85b679b90b068c5269586eecbb08 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 23 Feb 2024 14:19:44 +0800 Subject: [PATCH 24/25] Handle error + empty library states --- .../components/templates/homeFeed/HomeFeedContainer.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index eeaa1411f..eab588201 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -115,7 +115,7 @@ export function HomeFeedContainer(): JSX.Element { error: fetchItemsError, } = useGetLibraryItemsQuery(queryInputs) - console.log('fetchItemsError: ', fetchItemsError) + console.log('fetchItemsError fetchItemsError: ', fetchItemsError) useEffect(() => { const handleRevalidate = () => { @@ -973,6 +973,8 @@ function HomeFeedGrid(props: HomeFeedContentProps): JSX.Element { return true }, [props]) + console.log('props.fetchItemsError', props.fetchItemsError) + return ( )} - {props.fetchItemsError && } - {!props.isValidating && props.items.length <= 0 && ( + {!showItems && props.fetchItemsError && } + {!showItems && !props.fetchItemsError && props.items.length <= 0 && ( { From 2ff00497b95bc2ab01f7a834eabc3fe4e9c94b2d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 23 Feb 2024 14:24:48 +0800 Subject: [PATCH 25/25] Remove debug line --- .../web/components/templates/homeFeed/HomeFeedContainer.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index eab588201..403656aa0 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -973,8 +973,6 @@ function HomeFeedGrid(props: HomeFeedContentProps): JSX.Element { return true }, [props]) - console.log('props.fetchItemsError', props.fetchItemsError) - return (