Commit Graph

2479 Commits

Author SHA1 Message Date
Ajit Mehrotra 00f015f1b4 test(notifications): update patch files 2025-12-30 17:37:07 -05:00
Ajit Mehrotra 443335ed8e fix: update header background file modification 2025-12-30 17:17:31 -05:00
Ajit Mehrotra ad2a5cc443 test(notifications): Update various api and web component tests 2025-12-30 16:01:26 -05:00
Ajit Mehrotra 9ed71e5df9 chore: rebase cleanup
cleaning up some incorrectly rebased files (don't remember if it was automatic or manual...either way)
2025-12-30 15:07:32 -05:00
Ajit Mehrotra 8ef00ce27f chore: lint 2025-12-29 13:32:39 -05:00
Ajit Mehrotra 716789fa00 fix: add generated files + patch + snapshot files 2025-12-29 13:19:55 -05:00
Ajit Mehrotra b456678fd8 fix: update file-modification location for default-base.css 2025-12-29 11:06:19 -05:00
Ajit Mehrotra 902307ae55 feat(notifications): add file-modification scripts for nuxtui notifications. Supports 7.0-7.2.3 2025-12-23 21:08:22 -05:00
Ajit Mehrotra 2f88228937 fix(theme): adjust logo overlap on azure/gray themes on unraid versions < 7.1 2025-12-23 21:08:05 -05:00
Ajit Mehrotra 5628bf9a0e fix(color): fix bell icon color in header to work on all themes
Azure theme causing problems because it's the only theme where the color of the icon can't be inverted (bruh)
2025-12-23 21:08:05 -05:00
Ajit Mehrotra 3c9c04d684 wip(css-modification): add DefaultBaseCssModification class for CSS scoping
- Introduced a new class to modify the default base CSS file by wrapping content after the 'body' selector in a CSS scope.
- Implemented methods to read the file, generate a patch, and apply the necessary modifications.
- Added error handling for cases where the 'body' block cannot be found.
2025-12-23 21:06:44 -05:00
Ajit Mehrotra a8578bf79b refactor(notifications): move ToastPosition type to a separate file and clean up imports
- Created a new file for ToastPosition type definitions to improve code organization.
- Removed the inline ToastPosition type definition from mount-engine.ts and updated the import accordingly.
- Added a comment in app.config.ts for clarity on toaster settings.
2025-12-23 21:06:44 -05:00
Ajit Mehrotra 88e76d7fa2 feat(notifications): update nuxtui to 4.2.1 and add new toast features
- Added optional properties `expand`, `duration`, and `max` to the Notify interface.
- Updated NotificationSettings class to include validation for new properties.
- Modified the NotificationsService to parse and return the new settings.
- Adjusted the toaster configuration in the app to utilize the new settings.
- Updated GraphQL query to fetch the new notification settings.
2025-12-23 21:06:39 -05:00
Ajit Mehrotra 1e5deccb70 Revert "Revert "fix(notifications): add support for bottom-center'd nuxtui toasts""
This reverts commit 2707f693e0.
2025-12-23 21:05:59 -05:00
Ajit Mehrotra 4c49bafe15 chore(dependencies): update @nuxt/ui to version 4.2.1 from 4.0.0 alpha 2025-12-23 21:05:59 -05:00
Ajit Mehrotra 17f0176857 fix(notifications): set 'top-right' as default toast location 2025-12-23 21:05:59 -05:00
Ajit Mehrotra 4abc79a7b5 fix(notifications): sync badges on api recovery
Updates the notification sidebar to properly refresh notification counts (badges) when the API connection is restored or when the user manually retries.

Changes:
- Emit `refetched` event from `NotificationsList` when the query successfully returns data.
- Trigger `recalculateOverview` and `refetch` in `Sidebar` when the list is refreshed or when the API status becomes 'online'.
- Fixes an issue where notification badges would remain at 0 after an API outage, even though the notification list had populated correctly.
2025-12-23 21:05:59 -05:00
Ajit Mehrotra e817d6a317 fix(notifications): add onResult handler to update online status based on notification data 2025-12-23 21:05:59 -05:00
Ajit Mehrotra c2d2fbea40 feat(notifications): introduce constants for notification icons and colors to streamline notification rendering across components 2025-12-23 21:05:59 -05:00
Ajit Mehrotra ad78a0251a feat(errors): add dbgApolloError function for enhanced GraphQL error logging and improve extractGraphQLErrorMessage to handle additional error structures 2025-12-23 21:05:59 -05:00
Ajit Mehrotra c18de73b29 refactor(notifications): center notification error button text 2025-12-23 21:05:59 -05:00
Ajit Mehrotra e61657c05b refactor(notification): use "size" for square css widths and height 2025-12-23 21:05:54 -05:00
Ajit Mehrotra 7969e44211 refactor(navigation): replace window.location with navigate helper for external URL handling across multiple components 2025-12-23 21:04:39 -05:00
Ajit Mehrotra fd1a04641a feat(notifications): integrate nuxtui toast composable for success messages in RCloneConfig component 2025-12-23 21:01:03 -05:00
Ajit Mehrotra d10e0540eb feat(notifications): replace docker toast usage with nuxtui toast composable in ConnectSettings, DockerContainersTable, and RCloneOverview components 2025-12-23 21:00:57 -05:00
Ajit Mehrotra 6458457a7f feat(components): add DockerContainerStatCell and USlideover components to type declarations 2025-12-23 20:59:09 -05:00
Ajit Mehrotra 53ee465e92 fix: resolve no-undef lint errors for auto-imported composables in Vue files
Problem:
ESLint was flagging auto-imported composables (like `useToast`) as undefined variables in `.vue` files. While TypeScript correctly identified these globals via `auto-imports.d.ts`, the default `no-undef` rule in our Vue ESLint config did not account for them, causing false positive linting errors.

Solution:
- Disable the `no-undef` rule specifically for `.vue` files in `eslint.config.mjs`.
- Rely on TypeScript (via `vue-tsc`) and `auto-imports.d.ts` to handle global variable validation, ensuring type safety without conflicting with the auto-import build process.
- Remove manual imports of `useToast` that were added as a workaround (p sure the path I used didn't even exist in node modules).
2025-12-23 20:58:49 -05:00
Ajit Mehrotra 4c42b4b810 fix(notifications): update notify script's filename sanitization to include periods. 2025-12-23 20:58:49 -05:00
Ajit Mehrotra 4a19d4d536 fix(notifications): enable user overrides for the header text color 2025-12-23 20:58:49 -05:00
Ajit Mehrotra ddd6b0b54f Revert "fix(notifications): add support for bottom-center'd nuxtui toasts"
This reverts commit b147762e8a.
2025-12-23 20:58:49 -05:00
Ajit Mehrotra 2122e6d8a2 feat(notifications): add notify script for backup and restore on plugin installation 2025-12-23 20:58:49 -05:00
Ajit Mehrotra e3bf57184b fix(notifications): resolve ID mismatches, counter bugs, and pagination drift
This commit addresses several critical stability issues in the notification system spanning the legacy PHP script, the Node.js API, and the Vue frontend.

**Backend / API:**
- **Refactor `notify` script (PHP):** Added `-u` flag to accept a custom filename/ID from the caller. Added filename length sanitization (255 chars) to prevent filesystem errors.
- **Fix ID Mismatch:** The Node API now generates a UUID and passes it to the `notify` script via `-u`. This guarantees that the API, Frontend, and Filesystem all reference the same ID, removing the need for "Risky" notification logic.
- **Fix Counter Bugs:**
    - `handleNotificationAdd` no longer ignores duplicate files in the archive.
    - `archiveNotification` now checks if a file exists in the archive before moving. If it exists, it simply deletes the unread copy without double-counting.
    - `archiveAll` now leverages the robust single-archive logic.

**Frontend (Web):**
- **Fix Infinite Scroll "Drift":**
    - Switched `List.vue` to use a **Debounced Refetch** (500ms) for subscription updates instead of manual cache manipulation. This handles rapid-fire events (mass adds) without corruption.
    - Increased `pageSize` to `50` to minimize race conditions where new items shift pagination offsets.
    - Added **Drift Detection**: If `fetchMore` returns a full page of duplicates (indicating the list has shifted), the component now automatically triggers a full refetch to self-heal.
2025-12-23 20:58:49 -05:00
Ajit Mehrotra 6a04a06a72 fix(notification): add min width to allow flex title to shrink and wrap text 2025-12-23 20:58:49 -05:00
Ajit Mehrotra 875aa0972a fix(notifications): fix color of notification button's active state 2025-12-23 20:58:49 -05:00
Ajit Mehrotra f7fe9597ef chore(gitignore): add .dev-scripts to gitignore for local dev scripts 2025-12-23 20:58:49 -05:00
Ajit Mehrotra f690c23a20 fix(notifications): add support for bottom-center'd nuxtui toasts 2025-12-23 20:58:49 -05:00
Ajit Mehrotra fe74e53cf5 fix(notifications): show full title on notification pane and truncate toasts 2025-12-23 20:58:49 -05:00
Ajit Mehrotra be1e2f5ee2 fix(notifications): add elipses to long single-word toast titles 2025-12-23 20:58:49 -05:00
Ajit Mehrotra 67ac30787f fix(notifications): add break-word styling for long words in subject and description 2025-12-23 20:58:49 -05:00
Ajit Mehrotra c21ecc7cb7 fix(notifications): override notification bell hover to maintain consistency with legacy webGUI 2025-12-23 20:58:49 -05:00
Ajit Mehrotra 1000976296 fix(app.config): update toast max duration comment for compatibility with Nuxt UI 4.0.0-alpha.0 2025-12-23 20:58:49 -05:00
Ajit Mehrotra 9f27eb787f refactor(notifications): sync toast position with legacy settings
This change ensures that Nuxt UI notifications respect the display position configured in the legacy webGUI settings.

Backend:
- Added `NotificationSettings` to the GraphQL model.
- Exposed `settings` field on the `Notifications` resolver.
- Implemented `getSettings` in `NotificationsService` to read `notify.position` from the Dynamix store.

Frontend:
- Added `getNotificationSettings` GraphQL query.
- Updated `mount-engine.ts` to fetch settings before mounting.
- Mapped legacy position values (e.g., 'center') to Nuxt UI compatible values (e.g., 'top-center').
2025-12-23 20:58:44 -05:00
Ajit Mehrotra 80bbf2dd6b fix(notification): address filenames greater than 255 bytes
- updated file watching logic to ignore initial files, improving performance.
- added duplicate check for archive notifications to prevent double counting.
- implemented retry mechanism for loading notifications, enhancing reliability.
- introduced handling for risky notifications to ensure proper file creation and avoid legacy script failures.
2025-12-23 20:56:36 -05:00
Ajit Mehrotra 4798c89a5f fix(notifications api): implement async generator for improve filtering logic
Problem this solution addresses:
Basically, when users filtered by alert, warning, or info, results were being paginated first, then filtered by the requested importance, so filtered notifications were not working properly in some (a lot) of cases.

- added a new async generator method to load notifications in batches, enhancing performance and error handling.
- refactored the notification loading logic to utilize the generator, improving readability and maintainability.
- updated filtering logic to streamline the process of matching notifications based on importance and type.
2025-12-23 20:56:36 -05:00
Ajit Mehrotra 88766adeea refactor(ui): replace vue-sonner toasts with nuxtui toasts
> [!Note] This stubs the unraid-ui/src/components/common/toast. Initially created a shim to convert vue-sonnner toasts to nuxtui. However, since there weren't that many, I just did a clean replacement.

- replace router link with window.location.assign

The `UButton` component attempts to inject the Vue Router instance when the `:to` prop is used. In the standalone component environment (where the router is not installed), this caused a "TypeError: inject(...) is undefined" crash when rendering notifications with links.

This change replaces the `:to` prop with a standard `@click` handler that uses `window.location.assign`, ensuring navigation works correctly without requiring the router context.
2025-12-23 20:56:30 -05:00
Ajit Mehrotra e80ea795fe refactor: enhance app configuration and notification components for improved UI consistency
- modified vite.config.ts to integrate app configuration into UI setup
- updated app.config.ts to include new button, tabs, and slideover variants for better theming
- cleaned up main.css by removing unused styles and ensuring proper imports
- refactored notification components to streamline structure and improve readability
2025-12-23 20:56:00 -05:00
Ajit Mehrotra 7679d71c3e refactor: update notification components to use UIcon and UButton for improved consistency
- replaced Heroicons components with UIcon for better integration
- refactored Sidebar.vue to utilize USlideover and UButton for a cleaner UI
- removed unused imports and styles in main.css for better maintainability

NOTES:
- had to change main.css variables for it to work properly. Need to make sure this doesn't ruin other people's code.
- still needs to be further refactored to align with existing ui variables
2025-12-23 20:55:55 -05:00
Ajit Mehrotra a8459c7431 fix: address notification pane infinite network request and improve error messages
commit addresses the following two bugs/issues:
1. infinite network requests
2. make error messages more accurate

bug details:
- when scrolled all the way down in the notification pane (when api is down), unraid infinitely sends network requests.
- must be scrolled all the way to the bottom and stay at the bottom of the pane while the api is down

technical details:
- for infinite loop, added try/catch that sets a canLoadMore flag to false when it encounters an error, preventing infinite loop
- errors now look at non-standard locations as well

impact:
- performance benefits
- more graceful ux on failure
2025-12-23 20:55:02 -05:00
Ajit Mehrotra 29312d78e6 refactor: replace LoadingSpinner and LoadingError with nuxtUI components
- update VSCode settings for Tailwind CSS support
2025-12-23 20:55:02 -05:00
Ajit Mehrotra a32dd2182a enhance: add ssh retry logic and SSH options in deploy script 2025-12-23 20:55:02 -05:00