Skip to content

Refactor chat shortcuts and notifications, fix linting issues - #1830

Open
TanCodeX wants to merge 5 commits into
durdana3105:mainfrom
TanCodeX:refactor/remove-duplicate-toast-provider
Open

Refactor chat shortcuts and notifications, fix linting issues#1830
TanCodeX wants to merge 5 commits into
durdana3105:mainfrom
TanCodeX:refactor/remove-duplicate-toast-provider

Conversation

@TanCodeX

@TanCodeX TanCodeX commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Description

Closes #1826

This Pull Request addresses duplicate toast providers by standardizing the application to use Sonner exclusively. It eliminates redundant toast infrastructure, reducing bundle size and ensuring a consistent notification API and UI across the application. Additionally, it resolves all outstanding ESLint errors and warnings across the codebase.

Changes Made

1. Standardized Toast Notifications

  • Removed Duplicate Provider: Removed <Toaster /> from @/components/ui/toaster in App.tsx, retaining only <Sonner />.
  • Migrated API Usages: Updated over 18 components, pages, and hooks (e.g., Portfolio, Contact, Signup, useSessions) to use the toast function from sonner instead of the legacy useToast hook. Correctly mapped legacy parameters (like variant: "destructive") to their Sonner equivalents (toast.error(), toast.success(), etc.).
  • Deleted Legacy Code: Completely removed unused toast utilities to decrease bundle size and maintenance overhead:
    • src/components/ui/toast.tsx
    • src/components/ui/toaster.tsx
    • src/components/ui/use-toast.ts
    • src/hooks/use-toast.ts
  • Updated Tests: Rewrote Vitest mocks in Contact.test.tsx and useSkillEndorsements.test.ts to correctly mock sonner methods and updated expectations.

2. Linting & Code Quality Improvements

  • Resolved Parsing Error: Deleted supabase_types.ts from the root directory, which incorrectly contained a Supabase CLI JSON error message, causing an ESLint parsing error.
  • Fixed Hook Dependencies: Cleaned up toast from useCallback, useMemo, and useEffect dependency arrays across multiple files, as the Sonner toast function is stable and does not require tracking.
  • Resolved React Fast Refresh Warnings: Added /* eslint-disable react-refresh/only-export-components */ to files legitimately exporting non-component items (like MarkdownRenderer.tsx and theme-provider.tsx).
  • Fixed useMemo in Testimonials.tsx: Moved the static seedTestimonials array outside of the component to prevent unnecessary re-renders and satisfy the exhaustive-deps rule.
  • Automated Fixes: Auto-fixed 32 minor warnings related to unused eslint-disable directives.

Impact

  • Bundle Size: Reduced by removing a secondary toast library and its utilities.
  • Consistency: Ensures all UI notifications look and behave identically.
  • Code Quality: Achieved 0 ESLint errors and 0 warnings, improving the DX and catching potential bugs earlier.

Verification

  • Verified that npm run lint completes with zero errors or warnings.
  • Ran the entire vitest test suite (npm run test); all 260 tests pass successfully.
  • Verified that notifications still render correctly in impacted components.

Summary by CodeRabbit

  • New Features
    • Introduced a refreshed notification experience with clearer success and error messages across the app.
    • Improved testimonial fallback content shown when live testimonials are unavailable.
  • Bug Fixes
    • Corrected recent activity filtering so uploaded sessions appear as expected.
    • Improved error feedback for actions such as messaging, authentication, resource loading, and submissions.
  • Refactor
    • Standardized in-app notifications for a more consistent display and interaction experience.

@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

@TanCodeX is attempting to deploy a commit to the durdana3105's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@TanCodeX, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 57 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 40c4cbbd-4281-4189-9c09-8e0bd2cb5774

📥 Commits

Reviewing files that changed from the base of the PR and between 2e16db3 and e3039e2.

📒 Files selected for processing (11)
  • src/App.tsx
  • src/components/AvatarUpload.tsx
  • src/components/Whiteboard/Canvas.tsx
  • src/components/landing/Testimonials.tsx
  • src/components/mentor/MentorForm.tsx
  • src/features/notifications/useNotifications.ts
  • src/hooks/useRoomPresence.ts
  • src/hooks/useSessions.ts
  • src/hooks/useSkillEndorsements.ts
  • src/pages/SubmitForReview.tsx
  • src/pages/aipage.tsx
📝 Walkthrough

Walkthrough

This PR standardizes application notifications on Sonner, removes the previous toast infrastructure, adds generated Supabase database typings, updates testimonial and activity data handling, relocates chat shortcut wiring, and applies lint-suppression cleanup automation.

Changes

Notification migration

Layer / File(s) Summary
Sonner provider and call-site migration
src/App.tsx, src/components/ui/sonner.tsx, src/components/*, src/hooks/*, src/pages/*
Adds the styled Sonner provider and converts notification calls from the local toast API to Sonner methods.
Toast infrastructure removal
src/components/ui/toast.tsx, src/components/ui/toaster.tsx, src/components/ui/use-toast.ts, src/hooks/use-toast.ts
Removes the previous toast primitives, provider, hook, and state store.
Notification test updates
src/hooks/useSkillEndorsements.test.ts, src/pages/Contact.test.tsx
Mocks Sonner notifications and updates notification assertions.

Supabase typing and targeted updates

Layer / File(s) Summary
Supabase schema contracts
src/integrations/supabase/types.ts, temp*_types.ts
Adds database schema types, JSON types, table helpers, function signatures, and constants.
Application data and UI adjustments
src/components/dashboard/RecentActivity.tsx, src/components/landing/Testimonials.tsx, src/pages/Chat.tsx, src/components/AvatarUpload.tsx
Changes the activity filter, moves testimonial seed data to module scope, relocates chat shortcut wiring, and adds the API base URL import.
Lint cleanup automation
fix_lint.mjs, src/**, tailwind.config.ts
Adds scripted lint-related edits and removes or adds targeted ESLint directives.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: gssoc26, gssoc:approved, quality:clean, type:bug, level:intermediate

Suggested reviewers: arshvermagit

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR also changes unrelated areas like Supabase type generation, Testimonials data, and many lint-only edits beyond the toast-provider issue. Split the lint cleanup, Supabase type changes, and unrelated refactors into separate PRs so this one stays focused on the Sonner migration.
Docstring Coverage ⚠️ Warning Docstring coverage is 6.25% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR's main theme: Sonner notification migration plus lint cleanup, with chat-shortcut refactoring as a secondary detail.
Linked Issues check ✅ Passed The PR removes the extra Toaster, migrates notifications to Sonner, and deletes legacy toast utilities, satisfying the issue's acceptance criteria.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/pages/aipage.tsx (1)

7-14: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Replace any with a proper interface.

Since the file-level eslint-disable for any was removed, please consider defining a proper type for your messages array to benefit from TypeScript's type safety and avoid lingering lint warnings.

♻️ Proposed refactor

Define a type for the messages above the component and use it for the state:

+interface ChatMessage {
+  role: "assistant" | "user" | "system";
+  content: string;
+}
+
 const AIPage = () => {
-  const [messages, setMessages] = useState<any[]>([
+  const [messages, setMessages] = useState<ChatMessage[]>([
    {
      role: "assistant",

You can then remove the any casts from your state updater functions (e.g., setMessages((prev) => ...) instead of setMessages((prev: any) => ...)) and mapping callbacks throughout the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/aipage.tsx` around lines 7 - 14, Define a message interface above
the AIPage component containing the fields used by message state and render
logic, then type the messages useState with that interface instead of any.
Update setMessages updater functions and message mapping callbacks to infer or
explicitly use the new type, removing all remaining any annotations in AIPage.
fix_lint.mjs (1)

15-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use syntax-aware or narrowly scoped rewrites.

These regexes can silently remove toast from any matching array, or append seedTestimonials to unrelated [searchTerm, categoryFilter] arrays. Restrict replacements to verified dependency arrays and assert the expected replacement count.

Also applies to: 39-43

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@fix_lint.mjs` around lines 15 - 20, Restrict the rewrite loop over toastFiles
to verified dependency arrays rather than applying broad regexes to every array
containing toast or related entries. Use syntax-aware parsing or narrowly
targeted patterns tied to the intended dependency-array forms, and assert the
expected replacement count so unrelated arrays remain unchanged and unexpected
matches fail loudly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/FloatingAI.tsx`:
- Line 1: Remove all explicit any usages across the listed sites: replace
FloatingAI.tsx:1-1 useState<any[]>; NotificationsDropdown.tsx:1-1 Supabase casts
and payload; ChatBox.tsx:12-13 messages; InviteMenu.tsx:17-18 rpc cast;
pushNotifications.ts:1-1 and useNotifications.ts:1-1 Supabase casts;
useRoomChat.ts:7-13,33-34 state and cast; useRoomDetails.ts:8-16 state and cast;
and Discover.tsx:1-1 usages. Use the appropriate existing domain, component, or
generated Supabase types and preserve each current behavior without weakening
type safety.

In `@temp_types.ts`:
- Around line 1-9: Delete the unused Supabase type snapshot files temp_types.ts
(lines 1-9) and temp2_types.ts (lines 1-9); no application code changes are
needed.

---

Nitpick comments:
In `@fix_lint.mjs`:
- Around line 15-20: Restrict the rewrite loop over toastFiles to verified
dependency arrays rather than applying broad regexes to every array containing
toast or related entries. Use syntax-aware parsing or narrowly targeted patterns
tied to the intended dependency-array forms, and assert the expected replacement
count so unrelated arrays remain unchanged and unexpected matches fail loudly.

In `@src/pages/aipage.tsx`:
- Around line 7-14: Define a message interface above the AIPage component
containing the fields used by message state and render logic, then type the
messages useState with that interface instead of any. Update setMessages updater
functions and message mapping callbacks to infer or explicitly use the new type,
removing all remaining any annotations in AIPage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 93279f14-30c5-470d-b65e-61b89c8b7049

📥 Commits

Reviewing files that changed from the base of the PR and between 4518872 and 2e16db3.

⛔ Files ignored due to path filters (8)
  • uploads/profiles/profile-user-948-test-1784561617295-464135339.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561617302-351406894.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561651066-713364992.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561651074-10055956.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561670283-611470428.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561670289-914776455.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561692897-404468012.png is excluded by !**/*.png
  • uploads/profiles/profile-user-948-test-1784561692905-19697109.png is excluded by !**/*.png
📒 Files selected for processing (58)
  • fix_lint.mjs
  • src/App.tsx
  • src/components/AvatarUpload.tsx
  • src/components/FloatingAI.tsx
  • src/components/FocusTimer.tsx
  • src/components/GroupPomodoro.tsx
  • src/components/NotificationsDropdown.tsx
  • src/components/Room/ChatBox.tsx
  • src/components/Room/InviteMenu.tsx
  • src/components/Sparkles.tsx
  • src/components/StudyRooms.tsx
  • src/components/Whiteboard/Canvas.tsx
  • src/components/dashboard/RecentActivity.tsx
  • src/components/landing/Testimonials.tsx
  • src/components/markdown/MarkdownRenderer.tsx
  • src/components/mentor/MentorForm.tsx
  • src/components/theme-provider.tsx
  • src/components/ui/sonner.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/toast.tsx
  • src/components/ui/toaster.tsx
  • src/components/ui/use-toast.ts
  • src/features/notifications/pushNotifications.ts
  • src/features/notifications/useNotifications.ts
  • src/hooks/use-toast.ts
  • src/hooks/useAwardXP.ts
  • src/hooks/useCreateSession.ts
  • src/hooks/useMessages.ts
  • src/hooks/useResources.ts
  • src/hooks/useRoomChat.ts
  • src/hooks/useRoomDetails.ts
  • src/hooks/useRoomPresence.ts
  • src/hooks/useSessions.ts
  • src/hooks/useSkillEndorsements.test.ts
  • src/hooks/useSkillEndorsements.ts
  • src/integrations/supabase/types.ts
  • src/lib/http.ts
  • src/lib/rewardXP.ts
  • src/lib/streakSystem.ts
  • src/pages/Chat.tsx
  • src/pages/Contact.test.tsx
  • src/pages/Contact.tsx
  • src/pages/ContributorDashboard.tsx
  • src/pages/Dashboard.tsx
  • src/pages/Discover.tsx
  • src/pages/Leaderboard.tsx
  • src/pages/Login.tsx
  • src/pages/MentorDashboard.tsx
  • src/pages/Notifications.tsx
  • src/pages/Onboarding.tsx
  • src/pages/Portfolio.tsx
  • src/pages/ReviewSubmission.tsx
  • src/pages/Signup.tsx
  • src/pages/SubmitForReview.tsx
  • src/pages/aipage.tsx
  • tailwind.config.ts
  • temp2_types.ts
  • temp_types.ts
💤 Files with no reviewable changes (5)
  • src/components/ui/toaster.tsx
  • src/components/ui/use-toast.ts
  • src/components/ui/toast.tsx
  • src/App.tsx
  • src/hooks/use-toast.ts

@@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

files=(
  src/components/FloatingAI.tsx
  src/components/NotificationsDropdown.tsx
  src/components/Room/ChatBox.tsx
  src/components/Room/InviteMenu.tsx
  src/features/notifications/pushNotifications.ts
  src/features/notifications/useNotifications.ts
  src/hooks/useRoomChat.ts
  src/hooks/useRoomDetails.ts
  src/pages/Discover.tsx
)

for f in "${files[@]}"; do
  echo "===== $f ====="
  if [ -f "$f" ]; then
    wc -l "$f"
    sed -n '1,220p' "$f" | cat -n
  else
    echo "missing"
  fi
  echo
done

Repository: durdana3105/peer-learning

Length of output: 42061


Replace the remaining any usages

The no-explicit-any suppressions were removed, but these files still contain explicit any types/casts:

  • src/components/FloatingAI.tsx: useState<any[]>
  • src/components/NotificationsDropdown.tsx: (supabase as any) / payload: any
  • src/components/Room/ChatBox.tsx: messages: any[]
  • src/components/Room/InviteMenu.tsx: (supabase.rpc as any)
  • src/features/notifications/pushNotifications.ts: (supabase as any)
  • src/features/notifications/useNotifications.ts: (supabase as any)
  • src/hooks/useRoomChat.ts: useState<any[]> / as any
  • src/hooks/useRoomDetails.ts: useState<any> / as any
  • src/pages/Discover.tsx: multiple any usages
📍 Affects 9 files
  • src/components/FloatingAI.tsx#L1-L1 (this comment)
  • src/components/NotificationsDropdown.tsx#L1-L1
  • src/components/Room/ChatBox.tsx#L12-L13
  • src/components/Room/InviteMenu.tsx#L17-L18
  • src/features/notifications/pushNotifications.ts#L1-L1
  • src/features/notifications/useNotifications.ts#L1-L1
  • src/hooks/useRoomChat.ts#L7-L13
  • src/hooks/useRoomChat.ts#L33-L34
  • src/hooks/useRoomDetails.ts#L8-L16
  • src/pages/Discover.tsx#L1-L1
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/FloatingAI.tsx` at line 1, Remove all explicit any usages
across the listed sites: replace FloatingAI.tsx:1-1 useState<any[]>;
NotificationsDropdown.tsx:1-1 Supabase casts and payload; ChatBox.tsx:12-13
messages; InviteMenu.tsx:17-18 rpc cast; pushNotifications.ts:1-1 and
useNotifications.ts:1-1 Supabase casts; useRoomChat.ts:7-13,33-34 state and
cast; useRoomDetails.ts:8-16 state and cast; and Discover.tsx:1-1 usages. Use
the appropriate existing domain, component, or generated Supabase types and
preserve each current behavior without weakening type safety.

Comment thread temp_types.ts
Comment on lines +1 to +9
export type Json =
| string
| number
| boolean
| null
| { [key: string]: Json | undefined }
| Json[]

export type Database = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Confirm neither temp types file is referenced before deletion.
rg -n --type=ts -e 'temp_types' -e 'temp2_types' -g '!temp_types.ts' -g '!temp2_types.ts'

Repository: durdana3105/peer-learning

Length of output: 163


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== tracked files ==\n'
git ls-files | rg '(^|/)(temp_types\.ts|temp2_types\.ts|src/integrations/supabase/types\.ts|client\.ts)$'

printf '\n== line counts ==\n'
wc -l temp_types.ts temp2_types.ts src/integrations/supabase/types.ts 2>/dev/null || true

printf '\n== temp_types.ts (head) ==\n'
sed -n '1,120p' temp_types.ts

printf '\n== temp2_types.ts (head) ==\n'
sed -n '1,120p' temp2_types.ts

printf '\n== canonical types (head) ==\n'
sed -n '1,120p' src/integrations/supabase/types.ts

printf '\n== imports of canonical types ==\n'
rg -n "src/integrations/supabase/types|from ['\"].*supabase/types['\"]|from ['\"].*temp_types|from ['\"].*temp2_types" .

Repository: durdana3105/peer-learning

Length of output: 9920


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== tracked files =='
git ls-files -- 'temp_types.ts' 'temp2_types.ts' 'src/integrations/supabase/types.ts' 'client.ts' || true

echo
echo '== references to temp files =='
rg -n --hidden --glob '!temp_types.ts' --glob '!temp2_types.ts' '\btemp_types\b|\btemp2_types\b' . || true

echo
echo '== reference to canonical types =='
rg -n --hidden "src/integrations/supabase/types" . || true

echo
echo '== compare hashes if files exist =='
for f in temp_types.ts temp2_types.ts src/integrations/supabase/types.ts; do
  if [ -f "$f" ]; then
    printf '%s %s\n' "$f" "$(sha256sum "$f" | awk '{print $1}')"
  else
    printf '%s MISSING\n' "$f"
  fi
done

Repository: durdana3105/peer-learning

Length of output: 551


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
files = [Path('temp_types.ts'), Path('temp2_types.ts'), Path('src/integrations/supabase/types.ts')]
contents = [p.read_text() for p in files]

for i, a in enumerate(files):
    for j, b in enumerate(files):
        if i < j:
            print(f'== {a} vs {b} ==')
            print('same:', contents[i] == contents[j])
            if contents[i] != contents[j]:
                ai = contents[i].splitlines()
                bi = contents[j].splitlines()
                # find first differing line
                for idx, (la, lb) in enumerate(zip(ai, bi), 1):
                    if la != lb:
                        print('first diff line:', idx)
                        print('A:', la)
                        print('B:', lb)
                        break
                else:
                    if len(ai) != len(bi):
                        print('same prefix; lengths:', len(ai), len(bi))
            print()
PY

Repository: durdana3105/peer-learning

Length of output: 579


Remove the stray Supabase type snapshots. temp_types.ts and temp2_types.ts aren’t referenced by app code, and they’ve already drifted from src/integrations/supabase/types.ts; deleting them avoids further schema confusion.

📍 Affects 2 files
  • temp_types.ts#L1-L9 (this comment)
  • temp2_types.ts#L1-L9
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@temp_types.ts` around lines 1 - 9, Delete the unused Supabase type snapshot
files temp_types.ts (lines 1-9) and temp2_types.ts (lines 1-9); no application
code changes are needed.

@durdana3105

Copy link
Copy Markdown
Owner

RESOLVE MERGE CONFLICTS

@TanCodeX TanCodeX left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reviewed

@durdana3105

Copy link
Copy Markdown
Owner

RESOLVE MERGE CONFLICTS

@TanCodeX

Copy link
Copy Markdown
Contributor Author

RESOLVE MERGE CONFLICTS

@durdana3105 Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Redundant Toast Providers Cause Unnecessary Bundle Size and Inconsistent Notifications

2 participants