From 4685ea734cfd71481fb29942e91aef0e7b3a3fe6 Mon Sep 17 00:00:00 2001 From: agessaman Date: Sun, 29 Mar 2026 17:29:49 -0700 Subject: [PATCH] Enhance contacts UI with mobile-friendly toolbar and search functionality - Introduced a responsive toolbar for filtering and searching contacts, improving usability on mobile devices. - Added a dropdown for timespan selection, allowing users to filter contacts based on different timeframes. - Updated styles to ensure consistent alignment and height for toolbar elements, enhancing the overall appearance and functionality. These changes improve the user experience for managing contacts in the web viewer. --- modules/web_viewer/templates/contacts.html | 215 ++++++++++++++++++++- 1 file changed, 205 insertions(+), 10 deletions(-) diff --git a/modules/web_viewer/templates/contacts.html b/modules/web_viewer/templates/contacts.html index d1aae40..28f4154 100644 --- a/modules/web_viewer/templates/contacts.html +++ b/modules/web_viewer/templates/contacts.html @@ -51,6 +51,132 @@ line-height: 1.25; padding: 0.35em 0.55em; } + + /* Contacts table toolbar: one row on mobile, matching control heights */ + .contacts-toolbar-filters-wrap { + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + min-width: 0; + max-width: 100%; + } + + .contacts-toolbar-filters { + display: flex; + flex-wrap: nowrap; + align-items: center; + justify-content: flex-start; + gap: 0.35rem; + width: 100%; + min-height: 2.375rem; + } + + @media (min-width: 768px) { + .contacts-toolbar-filters { + justify-content: flex-end; + gap: 0.5rem; + } + } + + @media (min-width: 576px) and (max-width: 767.98px) { + .contacts-toolbar-filters { + gap: 0.5rem; + } + } + + .contacts-toolbar-filters .form-select-sm, + .contacts-toolbar-filters .input-group-sm, + .contacts-toolbar-filters #contacts-timespan { + flex-shrink: 0; + } + + .contacts-toolbar-filters #contacts-timespan { + min-height: 2.375rem; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 0.875rem; + box-sizing: border-box; + } + + .contacts-toolbar-search { + flex: 1 1 7.5rem; + min-width: 0; + max-width: 100%; + } + + @media (min-width: 768px) { + .contacts-toolbar-search { + flex: 0 1 300px; + max-width: 300px; + } + } + + .contacts-toolbar-filters .contacts-overflow-btn { + flex-shrink: 0; + width: 2.375rem; + height: 2.375rem; + box-sizing: border-box; + } + + /* Match search + refresh to the same row height as overflow icon buttons (2.375rem) */ + .contacts-toolbar-filters .contacts-toolbar-search.input-group { + min-height: 2.375rem; + align-items: stretch; + } + + .contacts-toolbar-filters .contacts-toolbar-search > .input-group-text, + .contacts-toolbar-filters .contacts-toolbar-search > .form-control { + min-height: 2.375rem; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 0.875rem; + box-sizing: border-box; + } + + .contacts-toolbar-filters .contacts-toolbar-search > .input-group-text { + display: flex; + align-items: center; + justify-content: center; + padding-left: 0.65rem; + padding-right: 0.65rem; + } + + .contacts-toolbar-filters .contacts-toolbar-search .input-group-text i { + font-size: 1rem; + } + + .contacts-toolbar-filters #refresh-contacts { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2.375rem; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 0.875rem; + box-sizing: border-box; + } + + .contacts-toolbar-filters #refresh-contacts i { + font-size: 1rem; + } + + @media (max-width: 575.98px) { + .contacts-toolbar-filters #refresh-contacts { + min-width: 2.375rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + } + } + + .contacts-mobile-sort-row { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + min-width: 0; + } + + .contacts-mobile-sort-row .flex-grow-1 { + min-width: 0; + } {% endblock %} @@ -162,32 +288,48 @@
-
+
-
-