Commit Graph

2484 Commits

Author SHA1 Message Date
Ajit Mehrotra
7eb4d0b01a Merge 18f3227d9e into 9ef1cf1eca 2025-12-31 01:04:07 +00:00
Ajit Mehrotra
18f3227d9e fix: default-gray theme's header background color via a file-modifier. 2025-12-30 20:03:41 -05:00
Ajit Mehrotra
9504b4a8c5 fix(css): file-modifications for backwards compatability with 7.0 2025-12-30 18:39:49 -05:00
Ajit Mehrotra
b0ff85b2af Revert "test(notifications): update patch files"
This reverts commit 00f015f1b4.
2025-12-30 18:07:40 -05:00
Ajit Mehrotra
1c4f33e4fb Revert "fix: update header background file modification"
This reverts commit 443335ed8e.
2025-12-30 18:07:20 -05:00
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