Skip to content

Commit 54c1853

Browse files
hobbescodescoopbri
andauthored
Comment Replies (#135)
* chore: update generated artifacts * refactor(comments): set up recursive replies WIP * feature(comments): add functionality to reply to a comment * refactor(comments): allow for rendering replies * chore(replies): update copy * refactor: adjust styles for comments section, update pattern for infinite queries * refactor(comments): remove unnecessary return for pending comments * refactor(create-reply): simplify promise toast variables * refactor: show replies when replying, update number of replies formatting, make number of replies a button * fix: return appropriate promise from create reply mutation * chore: format * Free Tier Implementation (#136) * refactor(pricing): update pricing page * refactor: restrict feedback, comment, and reply actions for free tier subscriptions * refactor: remove unnecessary feature flags * refactor(schema): add parentheses to standardRegexSchema * refactor(feedback-card): allow admins to edit feedback * build(deps): update dependencies * refactor: add tooltips for disabled states with create comment and create feedback * refactor: prefetch queries for free tier adjustments * refactor: use getFeedback helper in dynamic feedback page * fix: add appropriate tab index to form component tooltip triggers * refactor(graphql): separate counts for comments and comments with replies * refactor: remove unnecessary null check * chore(project-overview): add comment regarding metrics query * docs(project-overview): add JSDoc * fix(project-feedback): adjust pending feedback return * refactor: adjust create org / project to align with API changes for free tier * refactor(pricing): remove per user verbiage * refactor(create-project): remove unnecessary prop drilling * chore: update copy * refactor(flags): remove dev environment bypass for tier flags * fix(pinned-orgs): fix typo * refactor(config): adjust copy for unsubscribed users * fix(comments): properly invalidate queries for optimistic updates --------- Co-authored-by: Brian Cooper <[email protected]> Co-authored-by: Brian Cooper <[email protected]> * chore: update copy * chore: update copy * refactor(feedback): remove unnecessary prefetch * docs: simplify JSDoc * refactor: update validation schema for title, update query invalidation for accept/delete invite * chore: add comment * chore: fix typo * test(unit,validation): map over inputs * feature(polar): add production free tier product IDs * test(unit, validation): map over inputs --------- Co-authored-by: Brian Cooper <[email protected]> Co-authored-by: Brian Cooper <[email protected]>
1 parent 985c971 commit 54c1853

File tree

68 files changed

+1918
-660
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1918
-660
lines changed

bun.lock

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
"@auth/core": "^0.39.0",
99
"@omnidev/sigil": "^0.15.2",
1010
"@polar-sh/sdk": "^0.32.3",
11-
"@react-email/components": "^0.0.35",
11+
"@react-email/components": "^0.0.40",
1212
"@tanstack/react-form": "^1.2.1",
13-
"@tanstack/react-pacer": "^0.3.0",
13+
"@tanstack/react-pacer": "^0.6.0",
1414
"@tanstack/react-query": "^5.70.0",
1515
"@tanstack/react-query-devtools": "^5.70.0",
1616
"@tanstack/react-table": "^8.21.2",
1717
"@theme-toggles/react": "^4.1.0",
1818
"dayjs": "^1.11.13",
19-
"flags": "^3.2.0",
19+
"flags": "^4.0.0",
2020
"graphql": "^16.10.0",
2121
"graphql-request": "^7.1.2",
2222
"ms": "^2.1.3",
@@ -26,9 +26,9 @@
2626
"nuqs": "^2.4.1",
2727
"react": "^19.1.0",
2828
"react-dom": "^19.1.0",
29-
"react-hotkeys-hook": "^4.6.1",
29+
"react-hotkeys-hook": "^5.0.1",
3030
"react-icons": "^5.5.0",
31-
"react-infinite-scroll-hook": "^5.0.1",
31+
"react-infinite-scroll-hook": "^6.0.0",
3232
"recharts": "^2.15.1",
3333
"resend": "^4.2.0",
3434
"ts-pattern": "^5.7.0",
@@ -541,13 +541,13 @@
541541

542542
"@react-email/button": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-HYHrhyVGt7rdM/ls6FuuD6XE7fa7bjZTJqB2byn6/oGsfiEZaogY77OtoLL/mrQHjHjZiJadtAMSik9XLcm7+A=="],
543543

544-
"@react-email/code-block": ["@react-email/[email protected].11", "", { "dependencies": { "prismjs": "1.29.0" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-4D43p+LIMjDzm66gTDrZch0Flkip5je91mAT7iGs6+SbPyalHgIA+lFQoQwhz/VzHHLxuD0LV6gwmU/WUQ2WEg=="],
544+
"@react-email/code-block": ["@react-email/[email protected].13", "", { "dependencies": { "prismjs": "^1.30.0" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-4DE4yPSgKEOnZMzcrDvRuD6mxsNxOex0hCYEG9F9q23geYgb2WCCeGBvIUXVzK69l703Dg4Vzrd5qUjl+JfcwA=="],
545545

546546
"@react-email/code-inline": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA=="],
547547

548548
"@react-email/column": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ=="],
549549

550-
"@react-email/components": ["@react-email/[email protected].35", "", { "dependencies": { "@react-email/body": "0.0.11", "@react-email/button": "0.0.19", "@react-email/code-block": "0.0.11", "@react-email/code-inline": "0.0.5", "@react-email/column": "0.0.13", "@react-email/container": "0.0.15", "@react-email/font": "0.0.9", "@react-email/head": "0.0.12", "@react-email/heading": "0.0.15", "@react-email/hr": "0.0.11", "@react-email/html": "0.0.11", "@react-email/img": "0.0.11", "@react-email/link": "0.0.12", "@react-email/markdown": "0.0.14", "@react-email/preview": "0.0.12", "@react-email/render": "1.0.5", "@react-email/row": "0.0.12", "@react-email/section": "0.0.16", "@react-email/tailwind": "1.0.4", "@react-email/text": "0.1.1" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-if1kLih4pfARgsXacs9eD9O3BVtRWxKRz1jjSWWiyk32eeFJLtWjBaoF8nsxQxk4w5nfqjAHVFBrxXQceB7xDQ=="],
550+
"@react-email/components": ["@react-email/[email protected].40", "", { "dependencies": { "@react-email/body": "0.0.11", "@react-email/button": "0.0.19", "@react-email/code-block": "0.0.13", "@react-email/code-inline": "0.0.5", "@react-email/column": "0.0.13", "@react-email/container": "0.0.15", "@react-email/font": "0.0.9", "@react-email/head": "0.0.12", "@react-email/heading": "0.0.15", "@react-email/hr": "0.0.11", "@react-email/html": "0.0.11", "@react-email/img": "0.0.11", "@react-email/link": "0.0.12", "@react-email/markdown": "0.0.15", "@react-email/preview": "0.0.13", "@react-email/render": "1.1.1", "@react-email/row": "0.0.12", "@react-email/section": "0.0.16", "@react-email/tailwind": "1.0.5", "@react-email/text": "0.1.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-MXBjXyjCAczWIxq12Im5ysAIp8mXeSVm9YMF7t4rMjqH6+uxrCxWWqQbaLMUtjHkhD4OmXb3ay2aMG2oGKWk+g=="],
551551

552552
"@react-email/container": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg=="],
553553

@@ -565,19 +565,19 @@
565565

566566
"@react-email/link": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ=="],
567567

568-
"@react-email/markdown": ["@react-email/[email protected].14", "", { "dependencies": { "md-to-react-email": "5.0.5" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-5IsobCyPkb4XwnQO8uFfGcNOxnsg3311GRXhJ3uKv51P7Jxme4ycC/MITnwIZ10w2zx7HIyTiqVzTj4XbuIHbg=="],
568+
"@react-email/markdown": ["@react-email/[email protected].15", "", { "dependencies": { "md-to-react-email": "^5.0.5" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag=="],
569569

570-
"@react-email/preview": ["@react-email/[email protected].12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-g/H5fa9PQPDK6WUEG7iTlC19sAktI23qyoiJtMLqQiXFCfWeQMhqjLGKeLSKkfzszqmfJCjZtpSiKtBoOdxp3Q=="],
570+
"@react-email/preview": ["@react-email/[email protected].13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w=="],
571571

572-
"@react-email/render": ["@react-email/render@1.0.5", "", { "dependencies": { "html-to-text": "9.0.5", "prettier": "3.4.2", "react-promise-suspense": "0.3.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ=="],
572+
"@react-email/render": ["@react-email/render@1.1.1", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3", "react-promise-suspense": "^0.3.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-YB7GtmfNbCqq/Jm+wYg+LD85OvPtoBFW5qOI55ap3BWw1UUggGLTqUgU0hy0qP5NrfRM//L2owBU/4DENfgnvg=="],
573573

574574
"@react-email/row": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ=="],
575575

576576
"@react-email/section": ["@react-email/[email protected]", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w=="],
577577

578-
"@react-email/tailwind": ["@react-email/[email protected].4", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-tJdcusncdqgvTUYZIuhNC6LYTfL9vNTSQpwWdTCQhQ1lsrNCEE4OKCSdzSV3S9F32pi0i0xQ+YPJHKIzGjdTSA=="],
578+
"@react-email/tailwind": ["@react-email/[email protected].5", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg=="],
579579

580-
"@react-email/text": ["@react-email/[email protected].1", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Zo9tSEzkO3fODLVH1yVhzVCiwETfeEL5wU93jXKWo2DHoMuiZ9Iabaso3T0D0UjhrCB1PBMeq2YiejqeToTyIQ=="],
580+
"@react-email/text": ["@react-email/[email protected].4", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-cMNE02y8172DocpNGh97uV5HSTawaS4CKG/zOku8Pu+m6ehBKbAjgtQZDIxhgstw8+TWraFB8ltS1DPjfG8nLA=="],
581581

582582
"@repeaterjs/repeater": ["@repeaterjs/[email protected]", "", {}, "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA=="],
583583

@@ -591,15 +591,15 @@
591591

592592
"@tanstack/form-core": ["@tanstack/[email protected]", "", { "dependencies": { "@tanstack/store": "^0.7.0" } }, "sha512-0m+F3vOplArF5yDzBOFpMeM+3cGjgRmtVgfi3z5+Bzcc4F8AkXngRay+PmzY0z8K3Trz7EAqmJWMB9T+LlZWoA=="],
593593

594-
"@tanstack/pacer": ["@tanstack/pacer@0.3.0", "", {}, "sha512-abY1NZS4RpH3eHSxhuoXQJtrqJufEz9srWeO5HsrREk7vKDikQZiGeDCaGiuaHLQCy51k1ir/h2xfKs1HDIXzQ=="],
594+
"@tanstack/pacer": ["@tanstack/pacer@0.6.0", "", {}, "sha512-uunCU7ABQoq4pgujY3gRerPa6jp+K7/taAikYcY/xJTH+PJZu0YzOulMpJRsLVBHFd2kz7cAs3eOq1jA4Q9rCQ=="],
595595

596596
"@tanstack/query-core": ["@tanstack/[email protected]", "", {}, "sha512-YuG0A0+3i9b2Gfo9fkmNnkUWh5+5cFhWBN0pJAHkHilTx6A0nv8kepkk4T4GRt4e5ahbtFj2eTtkiPcVU1xO4A=="],
597597

598598
"@tanstack/query-devtools": ["@tanstack/[email protected]", "", {}, "sha512-djaFT11mVCOW3e0Ezfyiq7T6OoHy2LRI1fUFQvj+G6+/4A1FkuRMNUhQkdP1GXlx8id0f1/zd5fgDpIy5SU/Iw=="],
599599

600600
"@tanstack/react-form": ["@tanstack/[email protected]", "", { "dependencies": { "@tanstack/form-core": "1.6.3", "@tanstack/react-store": "^0.7.0", "decode-formdata": "^0.9.0", "devalue": "^5.1.1" }, "peerDependencies": { "@tanstack/react-start": "^1.112.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "vinxi": "^0.5.0" }, "optionalPeers": ["@tanstack/react-start", "vinxi"] }, "sha512-JuooyQ1bqIn3zC0wWCJB4n1UTyFZAF1Z4IWduUt6l356CoT78KTD56umRYLv3CirJqvYoa9kWOQKyjrVTmTNqw=="],
601601

602-
"@tanstack/react-pacer": ["@tanstack/react-pacer@0.3.0", "", { "dependencies": { "@tanstack/pacer": "0.3.0" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-c0yTUmBnlt/njBzmgKBH4JQHOyQYeK29i7WO2DFeB32aAVuAO2uSl9byZJKypj4giGr5Y4Ytxbum3dQyWyJNJA=="],
602+
"@tanstack/react-pacer": ["@tanstack/react-pacer@0.6.0", "", { "dependencies": { "@tanstack/pacer": "0.6.0" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-f0U7oySn6yQKmbe+np0pxNt93PJGmhsWy5hxWpRpzVCbm/hUQyRrRXk2Ai2/KJiB0n7o/Q2KRofYWo6TthwksQ=="],
603603

604604
"@tanstack/react-query": ["@tanstack/[email protected]", "", { "dependencies": { "@tanstack/query-core": "5.74.4" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-mAbxw60d4ffQ4qmRYfkO1xzRBPUEf/72Dgo3qqea0J66nIKuDTLEqQt0ku++SDFlMGMnB6uKDnEG1xD/TDse4Q=="],
605605

@@ -1083,7 +1083,7 @@
10831083

10841084
"find-up": ["[email protected]", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="],
10851085

1086-
"flags": ["flags@3.2.0", "", { "dependencies": { "@edge-runtime/cookies": "^5.0.2", "jose": "^5.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0", "@sveltejs/kit": "*", "next": "*", "react": "*", "react-dom": "*" }, "optionalPeers": ["@opentelemetry/api", "@sveltejs/kit", "next", "react", "react-dom"] }, "sha512-rmJHXg4ijRgWNf/OdEGbd3FaqMwvKlcrtelKwTtPCzsNWuian9Tz+wXU+3XSO3ljqlpQYyzMgdwz3CBs/5DtZA=="],
1086+
"flags": ["flags@4.0.0", "", { "dependencies": { "@edge-runtime/cookies": "^5.0.2", "jose": "^5.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0", "@sveltejs/kit": "*", "next": "*", "react": "*", "react-dom": "*" }, "optionalPeers": ["@opentelemetry/api", "@sveltejs/kit", "next", "react", "react-dom"] }, "sha512-CpONOK/nflKfaTT36r+Y4SP5rb9mv3AdqY/2Ws+TScrEGlT4PK+PZNiKJgIH87HooTXDblz31807q7lZ3LpuYQ=="],
10871087

10881088
"formdata-polyfill": ["[email protected]", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
10891089

@@ -1457,7 +1457,7 @@
14571457

14581458
"pretty-ms": ["[email protected]", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg=="],
14591459

1460-
"prismjs": ["prismjs@1.29.0", "", {}, "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="],
1460+
"prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="],
14611461

14621462
"promise": ["[email protected]", "", { "dependencies": { "asap": "~2.0.3" } }, "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="],
14631463

@@ -1479,13 +1479,13 @@
14791479

14801480
"react-dom": ["[email protected]", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="],
14811481

1482-
"react-hotkeys-hook": ["react-hotkeys-hook@4.6.2", "", { "peerDependencies": { "react": ">=16.8.1", "react-dom": ">=16.8.1" } }, "sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q=="],
1482+
"react-hotkeys-hook": ["react-hotkeys-hook@5.0.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-TysTwXrUSj6QclMZIEoxCfvy/6EsoZcrfE970aUVa9fO3c3vcms+IVjv3ljbhUPM/oY1iEoun7O2W8v8INl5hw=="],
14831483

14841484
"react-icons": ["[email protected]", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="],
14851485

1486-
"react-infinite-scroll-hook": ["react-infinite-scroll-hook@5.0.2", "", { "dependencies": { "react-intersection-observer-hook": "^3.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-CappfAyRrShFF5McYWTB8sRjiiLc9Jbs6SNhIGFH+QQgQRcRuaovKwQnGGEb14fRWg2czlRxISoAO7Rtf0nbPA=="],
1486+
"react-infinite-scroll-hook": ["react-infinite-scroll-hook@6.0.0", "", { "dependencies": { "react-intersection-observer-hook": "^4.0.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-kg36byj9/YqPS9bv5u3fIUmn800NO6G4cA6d5DcsaBbm7qbMVxT8qy8Po7Xm0dWBJPFEk/g2arcMb9IorQdwsQ=="],
14871487

1488-
"react-intersection-observer-hook": ["react-intersection-observer-hook@3.0.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-nehzFUV+jVY49tc9FOm4yJHrmFFtCmsBZKiN1rUUB2675CMBf6kKu1ekuTqvCnmh4XG7RFP3bMyAevfqfV94xw=="],
1488+
"react-intersection-observer-hook": ["react-intersection-observer-hook@4.0.0", "", { "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-g9hWp741AA6w0RlGiaTtmIuceRd61q7soZmx2keB1OPstLcZffCKpTxWaYA2LVKNYME3B3ZOGwX3iuYyCBLAag=="],
14891489

14901490
"react-is": ["[email protected]", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="],
14911491

@@ -1861,7 +1861,7 @@
18611861

18621862
"@pandacss/token-dictionary/ts-pattern": ["[email protected]", "", {}, "sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA=="],
18631863

1864-
"@react-email/render/prettier": ["prettier@3.4.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ=="],
1864+
"@react-email/render/prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="],
18651865

18661866
"@swc/helpers/tslib": ["[email protected]", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
18671867

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@
5757
"@auth/core": "^0.39.0",
5858
"@omnidev/sigil": "^0.15.2",
5959
"@polar-sh/sdk": "^0.32.3",
60-
"@react-email/components": "^0.0.35",
60+
"@react-email/components": "^0.0.40",
6161
"@tanstack/react-form": "^1.2.1",
62-
"@tanstack/react-pacer": "^0.3.0",
62+
"@tanstack/react-pacer": "^0.6.0",
6363
"@tanstack/react-query": "^5.70.0",
6464
"@tanstack/react-query-devtools": "^5.70.0",
6565
"@tanstack/react-table": "^8.21.2",
6666
"@theme-toggles/react": "^4.1.0",
6767
"dayjs": "^1.11.13",
68-
"flags": "^3.2.0",
68+
"flags": "^4.0.0",
6969
"graphql": "^16.10.0",
7070
"graphql-request": "^7.1.2",
7171
"ms": "^2.1.3",
@@ -75,9 +75,9 @@
7575
"nuqs": "^2.4.1",
7676
"react": "^19.1.0",
7777
"react-dom": "^19.1.0",
78-
"react-hotkeys-hook": "^4.6.1",
78+
"react-hotkeys-hook": "^5.0.1",
7979
"react-icons": "^5.5.0",
80-
"react-infinite-scroll-hook": "^5.0.1",
80+
"react-infinite-scroll-hook": "^6.0.0",
8181
"recharts": "^2.15.1",
8282
"resend": "^4.2.0",
8383
"ts-pattern": "^5.7.0",

src/__tests__/unit/validationSchema.test.ts

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,25 @@ import { standardRegexSchema } from "lib/constants";
55
describe("Schema Validation", () => {
66
describe("Regex Schema", () => {
77
it("fails for most special characters", () => {
8-
const input1 = "Test@";
9-
const input2 = "Test#";
10-
const input3 = "Test$";
11-
const input4 = "Test%";
12-
13-
expect(standardRegexSchema.safeParse(input1).success).toBe(false);
14-
expect(standardRegexSchema.safeParse(input2).success).toBe(false);
15-
expect(standardRegexSchema.safeParse(input3).success).toBe(false);
16-
expect(standardRegexSchema.safeParse(input4).success).toBe(false);
8+
const inputs = ["Test@", "Test#", "Test$", "Test%"];
9+
10+
for (const input of inputs)
11+
expect(standardRegexSchema.safeParse(input).success).toBe(false);
1712
});
1813

19-
it("passes for certain special characters (!, ., -, ', ?)", () => {
20-
const input1 = "Test!";
21-
const input2 = "Test.";
22-
const input3 = "Test-Test";
23-
const input4 = "I'm Testing";
24-
const input5 = "Test, Test";
25-
const input6 = "Test?";
26-
27-
expect(standardRegexSchema.safeParse(input1).success).toBe(true);
28-
expect(standardRegexSchema.safeParse(input2).success).toBe(true);
29-
expect(standardRegexSchema.safeParse(input3).success).toBe(true);
30-
expect(standardRegexSchema.safeParse(input4).success).toBe(true);
31-
expect(standardRegexSchema.safeParse(input5).success).toBe(true);
32-
expect(standardRegexSchema.safeParse(input6).success).toBe(true);
14+
it("passes for certain special characters (!, ., -, ', ?, parentheses)", () => {
15+
const inputs = [
16+
"Test!",
17+
"Test.",
18+
"Test-Test",
19+
"I'm Testing",
20+
"Test, Test",
21+
"Test?",
22+
"Test()",
23+
];
24+
25+
for (const input of inputs)
26+
expect(standardRegexSchema.safeParse(input).success).toBe(true);
3327
});
3428

3529
it("passes for accented characters", () => {

0 commit comments

Comments
 (0)