Commit Graph

1650 Commits

Author SHA1 Message Date
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 dc882e033a Merge pull request #260 from josephsellers/contact-name-upsert
Fix: update contact names on upsert instead of discarding them
2026-07-07 23:34:29 +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 0ae9232410 Merge pull request #400 from ahfoysal/fix-assignment-notification-read
Mark assignment notifications read on ticket action
2026-07-06 23:52:55 +05:30
ahfoysal 27e8efb27b fix: update assignment notification state in UI 2026-07-06 16:47:20 +06:00
ahfoysal f4f8db81d9 Mark assignment notifications read on action 2026-07-06 13:32:16 +06:00
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 0660ae4e3c Merge pull request #396 from abhinavxd/dependabot/go_modules/golang.org/x/image-0.41.0
build(deps): bump golang.org/x/image from 0.38.0 to 0.41.0
2026-07-05 19:07:42 +05:30
dependabot[bot] 6eabd8aa1f build(deps): bump golang.org/x/image from 0.38.0 to 0.41.0
Bumps [golang.org/x/image](https://github.com/golang/image) from 0.38.0 to 0.41.0.
- [Commits](https://github.com/golang/image/compare/v0.38.0...v0.41.0)

---
updated-dependencies:
- dependency-name: golang.org/x/image
  dependency-version: 0.41.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-03 12:38:48 +00:00
Abhinav Raut 82d3ef756b Merge pull request #395 from abhinavxd/dependabot/go_modules/golang.org/x/net-0.55.0
build(deps): bump golang.org/x/net from 0.47.0 to 0.55.0
2026-07-03 18:06:53 +05:30
dependabot[bot] 57e15d32f4 build(deps): bump golang.org/x/net from 0.47.0 to 0.55.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.47.0 to 0.55.0.
- [Commits](https://github.com/golang/net/compare/v0.47.0...v0.55.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.55.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-03 12:31:35 +00:00
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
Abhinav Raut 725acf6707 Merge pull request #392 from abhinavxd/dependabot/npm_and_yarn/frontend/vite-6.4.3
build(deps-dev): bump vite from 6.4.2 to 6.4.3 in /frontend
2026-06-30 16:51:26 +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 4280a216eb Update roadmap with new item and formatting changes 2026-06-30 12:03:31 +05:30
Abhinav Raut 3052e2a7ae Update ROADMAP.md 2026-06-30 12:02:48 +05:30
Abhinav Raut 8720e37bbf add learn more link to roles admin page 2026-06-25 09:52:07 +05:30
Abhinav Raut addd44fae4 Merge pull request #369 from abhinavxd/improved-views
feat: support nested AND/OR filter groups and new fields in views
v2.4.0
2026-06-19 04:18:48 +05:30
Abhinav Raut 76d00c899e make the contact name upsert actually run for existing contacts 2026-06-19 04:01:56 +05:30
josephsellers 000326bbde Fix: update contact names on upsert instead of discarding them
Re-derived for the v2.x contact model. insert-contact-with-external-id
already updates names on conflict; this adds the same to
insert-contact-without-external-id, preserving existing non-empty names
via COALESCE(NULLIF(EXCLUDED.first_name, ''), users.first_name).

Without this, names from the email worker and Gravity Forms never update
existing contacts.

[Used Claude Code 🤖]
2026-06-18 11:23:42 +01:00
Abhinav Raut a629beaf0b resolve sql builder date filters in the app timezone instead of UTC 2026-06-18 11:56:43 +05:30
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 4eb1f8eca1 Add 2FA for password login to roadmap 2026-06-17 11:28:06 +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 ed0d359c2f feat: cap total filter conditions and 'in' values in query builder 2026-06-16 16:14:12 +05:30
Abhinav Raut b296b57248 feat: cap filter groups and surface a specific error when exceeded
- builder: hardcoded MaxFilterGroups (10) enforced in buildNode (validate + build paths); returns ErrTooManyGroups sentinel
- ValidateListFilters: map ErrTooManyGroups to a specific, actionable message (includes the limit); keep the generic 'Invalid filters.' for everything else so DB/internal details stay hidden
- add conversation.filters.tooManyGroups i18n key + test
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 36c962af7d Merge pull request #385 from abhinavxd/fix-autoassigner-assignment-race
fixes autoassigner overriding a manual assignment
2026-06-16 16:12:58 +05:30
Abhinav Raut 15e5c35d37 renames conversation assignment funcs for clearer intent 2026-06-16 16:04:24 +05:30
Abhinav Raut 18ae7b95d6 make updateAssignee private so user assignment can't skip hooks 2026-06-16 15:58:42 +05:30
Abhinav Raut 1b87433de4 fixes autoassigner overriding a manual assignment
The autoassigner fetched the unassigned list once, then looped and
assigned each one. If the conversation was reassigned while that slow
batch was still running, the autoassigner's write still landed and
overrode it, because the UPDATE had no guard.

Adds an atomic claim that only assigns when the conversation is still
unassigned AND still in the team the user was picked from. A manual
user assignment or a team change between the list read and the claim
now makes the claim a no-op, and the side-effects (webhook, automation,
notification) are skipped. Manual assignment keeps its unconditional
override path.
2026-06-16 12:55:09 +05:30
Abhinav Raut ef1ef15adf Update roadmap with new features and remove WIP items 2026-06-13 04:42:18 +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 ae328d3c51 Update ROADMAP.md 2026-06-09 01:12:09 +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 f70e488662 refactor: sanitize only the reference number for transcript filename 2026-06-07 15:22:52 +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 b75f138de1 Merge pull request #375 from abhinavxd/feat/self-assign-nudge-on-reply
feat: nudge agent to self-assign after replying to an unassigned conversation
2026-06-07 15:08:07 +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 b7564b5da4 Merge pull request #374 from abhinavxd/feat/from-name-template
feat: add customisable From display name template for outgoing emails
2026-06-07 14:51:08 +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