Commit Graph

902 Commits

Author SHA1 Message Date
Abhinav Raut 60ebefebdc fix edge cases in private note soft-delete 2026-07-08 01:00:24 +05:30
Abhinav Raut 43b43a82ef Merge branch 'main' into delete-private-notes 2026-07-08 00:47:28 +05:30
Abhinav Raut d696b53c80 soft-delete private notes with a tombstone instead of removing them 2026-07-08 00:43:29 +05:30
Abhinav Raut 5a826b9c14 Merge pull request #399 from abhinavxd/reply-box-per-type-drafts
Reply box per type drafts
2026-07-08 00:26:21 +05:30
Abhinav Raut adeb4eee27 swap private-note delete to a hover 3-dot menu with confirm dialog 2026-07-07 23:55:37 +05:30
Abhinav Raut 9e0c1f332d Merge branch 'main' into delete-private-notes 2026-07-07 23:37:05 +05:30
Abhinav Raut bde6f019dc Merge pull request #401 from abhinavxd/fix-dark-highlight-css-leak
fix dark-mode mention highlight leaking a yellow background
2026-07-07 23:34:51 +05:30
Abhinav Raut 8268221ea2 fix dark-mode mention highlight leaking a yellow background onto every .dark element 2026-07-07 23:26:57 +05:30
Abhinav Raut 1d7bc67ebf stop sent drafts from coming back after a failed or reordered sync 2026-07-07 23:11:45 +05:30
Abhinav Raut 186502a4f8 open the reply/note tab matching the conversation's last-used draft 2026-07-07 22:57:50 +05:30
ahfoysal 27e8efb27b fix: update assignment notification state in UI 2026-07-06 16:47:20 +06:00
Abhinav Raut 8a68ae34a9 fix flaky reply e2e and stop draft load from wiping in-progress input 2026-07-05 23:22:50 +05:30
Abhinav Raut 79b764944a fix attachments and macros leaking across reply and private note drafts 2026-07-05 20:26:58 +05:30
Abhinav Raut ee7b829ff2 Merge branch 'main' into reply-box-per-type-drafts 2026-07-05 20:12:44 +05:30
Abhinav Raut 3feecf4296 Merge pull request #394 from abhinavxd/minor-improvements
add livechat widget preview and misc improvements
2026-07-05 20:09:25 +05:30
Abhinav Raut 0949761d04 fix contrast threshold and cache invalidation order on login 2026-07-05 20:03:31 +05:30
Abhinav Raut 18027bc0e3 fix draft races by making the store the single source of truth 2026-07-05 18:42:17 +05:30
Abhinav Raut ec3938c365 save reply and private note drafts separately per type 2026-07-03 03:37:09 +05:30
Abhinav Raut 62a1fc836e add livechat widget preview and misc improvements
Livechat:
- Add a live widget preview that renders in the inbox settings help rail.
- Warn when the primary or header colors are too close to the background.
- Require gradient/image background values and notice banner text when enabled.
- Show a default launcher logo in the widget when none is set, matching the preview.
- Drop the Beta badge from the livechat channel.

General settings:
- Add "set agents away on login". Agents log in as away and must go online manually.
- Add "show subject in conversation list" toggle.

Other:
- Add a keyboard shortcuts dialog from the user menu.
- Show a "snoozed until" badge on snoozed conversations.
- Contact search now matches emails partially instead of exact.
- Give outgoing message bubbles a secondary background.
2026-07-03 02:34:42 +05:30
Abhinav Raut 42a3b3a4b5 Merge pull request #391 from abhinavxd/roles-learn-more-link
add learn more link to roles admin page
2026-07-01 03:16:08 +05:30
dependabot[bot] a7bcd5e748 build(deps-dev): bump vite from 6.4.2 to 6.4.3 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.2 to 6.4.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-30 10:06:35 +00:00
Abhinav Raut 8720e37bbf add learn more link to roles admin page 2026-06-25 09:52:07 +05:30
josephsellers da20825e2b Add context menu to delete private notes in conversation view
Right-clicking a private note shows a "Delete note" option that calls the
DELETE endpoint and removes the note from the UI. The context menu trigger is
disabled for non-private messages (browser default menu shown instead).

[Used Claude Code 🤖]
2026-06-18 11:33:19 +01:00
Abhinav Raut a110d38dd8 adjusts padding in filter group builder
adds comments with sample payloads to make the filter format easier to understand
2026-06-17 15:35:05 +05:30
Abhinav Raut 85a200247b keeps filter builder Add group button visible and tidies group controls 2026-06-16 23:25:50 +05:30
Abhinav Raut 54e30e2e71 feat: disable 'Add group' in filter builder at the backend group cap 2026-06-16 16:14:12 +05:30
Abhinav Raut 20b3aec44e fix: restrict contains operator to trigram-indexed fields in view filters
contains on users.external_user_id has no trigram index and would full-scan;
only users.email keeps partial matching.
2026-06-16 16:14:12 +05:30
Abhinav Raut 95f829b37c fix: stop filter builder from mutating form state; emit immutable tree updates
Fixes typing in a filter value overwriting the whole filters object
(vee-validate listeners falling through to the builder root), the form
going stale after save/reset, and Create reusing a cancelled edit's data.
2026-06-16 16:14:12 +05:30
Abhinav Raut 6a24612412 fix: drop icon from 'Remove group' button so it doesn't draw focus 2026-06-16 16:14:12 +05:30
Abhinav Raut 496264d590 fix: separate group-remove from per-condition remove in filter builder
The group remove button sat inline with the first condition's close button (8px apart, easy to misclick). Move it to a labeled 'Remove group' header button (trash icon) so it's clearly distinct from the per-condition X.
2026-06-16 16:14:12 +05:30
Abhinav Raut 9b31e282c8 fix: reject empty filter values in query builder; tighten filter tree handling
- builder: error on value-requiring operators with empty value and on empty 'in' arrays instead of emitting invalid SQL (field IN ())
- filterTree: coerce array IDs to strings in toStringIdArray
- useConversationFilters: external_user_id uses TEXT operators (was SELECT)
- FilterGroupBuilder: strict two-level guard verifies group children are leaves
- drop orphaned partiallyFilled i18n key
- tests for empty 'in' and empty value rejection
2026-06-16 16:14:12 +05:30
Abhinav Raut 3247a3aa58 feat: support nested AND/OR filter groups and new fields in views 2026-06-16 16:14:12 +05:30
Abhinav Raut 14a812d023 Merge pull request #371 from abhinavxd/update-font
update font family to Instrument Sans
2026-06-10 23:43:08 +05:30
Abhinav Raut d300ce26e6 feat: show day separators in conversation message list
closes https://github.com/abhinavxd/libredesk/issues/376
2026-06-10 21:20:07 +05:30
Abhinav Raut edbc026a24 Merge pull request #359 from abhinavxd/transcript
feat: add conversation transcript download and CSAT in sidebar
2026-06-07 15:29:20 +05:30
Abhinav Raut 2d81703ae2 fix: address review nits on transcript download
- sanitize Content-Disposition filename via stringutil.SanitizeFilename to neutralize header injection
- use i18n.Tc for count-aware singular/plural attachment label
- append download anchor to DOM and defer URL.revokeObjectURL for cross-browser reliability
2026-06-07 15:17:03 +05:30
Abhinav Raut 1ce638e9d7 refactor: extract AssignSelfNudge component, let store own local assignee state 2026-06-07 15:01:29 +05:30
Abhinav Raut f9e044676a feat: nudge agent to self-assign after replying to an unassigned conversation 2026-06-07 14:51:03 +05:30
Abhinav Raut 1fccfceb4c feat: add customisable From display name template for outgoing emails
Adds a from_name_template field to email inboxes. When set and the sender is an agent, the template renders with agent and inbox variables and becomes the From display name; the inbox email address is unchanged. Any render failure, or a system-user sender, falls back to the plain inbox From so a misconfigured template never blocks delivery.

Variables: .Agent.FirstName, .Agent.LastName, .Agent.FullName, .Inbox.Name (the inbox name). Based on #249.

Co-authored-by: josephsellers <6892567+josephsellers@users.noreply.github.com>
2026-06-07 14:20:56 +05:30
Abhinav Raut cfed3cfc28 test: add e2e tests for inbox, team, agent and conversation flows 2026-06-07 14:06:40 +05:30
Abhinav Raut ed95b9104f refactor tidy reply box send button imports and dead code 2026-06-07 12:28:12 +05:30
Abhinav Raut 90ceece01b fix apply status update after send confirmation dialogs. 2026-06-07 12:17:29 +05:30
Abhinav Raut bf22811337 fix chevron color 2026-06-07 11:56:15 +05:30
aditya2r b679fc2158 feat: add "Send and set status" split button to reply box.
Add a dropdown next to the Send button that allows agents to send a
reply and update the conversation status in a single action.

- Add split button with dropdown to  ReplyBoxMenuBar
- Extract email validation into reusable validateBeforeSend helper
- Guard for status update on successful message send
- Exclude Snoozed from status options
2026-06-06 16:14:07 -04:00
Abhinav Raut 4f4bbbef5f Fix macro context lost via Ctrl+K and stale macro filter after new conversation 2026-06-06 21:02:25 +05:30
Abhinav Raut cb081b4b38 update font family to Instrument Sans 2026-06-06 19:58:07 +05:30
Vanboom 168add044b Address issue #363, implement CTRL+M hotkey to access the macro dialog
directly
2026-06-03 14:28:38 -05:00
Abhinav Raut eb6a195aaf feat: add conversation transcript download and CSAT in sidebar
Agents can download a full conversation as a .txt file from the
header menu. The conversation sidebar now shows the CSAT rating and
feedback once the customer responds.
2026-06-02 16:25:33 +05:30
dependabot[bot] 3f065439ff build(deps-dev): bump vitest from 3.2.2 to 4.1.0 in /frontend
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.2 to 4.1.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 21:34:46 +00:00
Abhinav Raut 5c5c73b5b7 soft-refresh conversation list on inbox re-entry instead of refetching 2026-06-01 13:17:26 +05:30