Ensure Junk and other system folders always appear in sidebar
Adds guaranteed system folders (INBOX, Sent, Drafts, Junk, Trash, Archive) to the folder tree even if they don't exist on the IMAP server yet.
Move handleBulkReportSpam after getSelectedRefs to fix declaration order
Auto-refresh message list when draft is saved or email is sent
MessageTool dispatches email:folder-changed events after saving a draft (Drafts) or sending an email (Sent). MessageBrowser listens and refreshes if the affecte...
Match message tool color scheme to other tools and rename to New Email
Switch from dark theme to the light theme used by chat/calculator tools: light gray gradients, white inputs, var(--color-primary) accents. Rename tool from "New...
Restore full WYSIWYG toolbar options in message tool
Adds back headers, strike, background color, alignment, and image options. Toolbar wraps onto two lines when in compact (non-maximized) mode via flex-wrap.
Mark messages as read on IMAP server and refresh folder counts
Clicking a message now calls PUT **************** with seen:true on the backend, persisting the read state to IMAP. Sidebar folder unread counts refresh after m...
Save copy to Sent folder after sending email
Transport.send() only sends via SMTP without saving to IMAP. Added saveToSent() to append the message to the Sent folder with the SEEN flag set. Applies to send...
Disable STARTTLS and auth for port 25 internal SMTP
Port 25 on internal Postfix doesn't support STARTTLS and allows relay from cluster IPs via mynetworks. Only enable auth and STARTTLS when using port 587 (submis...
Move useState hook before early returns to fix React error #300
useState(syncing) was declared after conditional early returns, violating React's rules of hooks.
Use SMTP port 25 instead of 587 for internal Postfix
Postfix only listens on port 25 inside the cluster. Port 587 (submission) is not enabled in the container.
Quick reply send button - remove client OTK, add credentials and feedback
The quick reply was sending a client-generated OTK header that the proxy doesn't use (proxy generates its own). Removed the unnecessary OTK call, added credenti...
LabelPicker now fetches and displays current message labels
- Added getMessageLabels API call to emailApi - LabelPicker fetches applied labels on mount via GET endpoint - Toggle updates local state immediately for respon...
Wire up remaining unwired UI elements in messages page
- FolderSidebar: folder options button now opens rename/delete menu - FolderSidebar: Folder Settings button renamed to Manage Folders, toggles create folder - F...
Wire up quick reply Send Reply and Cancel buttons
The quick reply textarea and buttons were static with no state or onClick handlers. Now properly sends replies via the email API and clears the textarea on canc...
Use docs-api.* for WOPISrc URL instead of api.*
The WOPI endpoints (/wopi/files/**) live on DocsService, which is exposed at docs-api.kamocrm.com — not api.kamocrm.com (APIService). Docs makes server-side WOP...
Set aliasgroup to api.kamocrm.com and force https WOPISrc
- Docs aliasgroup1 must match the WOPI host (api.kamocrm.com) - WOPISrc URL defaulted to http:// inside K8s; force https and construct api.* hostname from for...
Fix kubectl not found in pod, add docs alias, proactive SUBDOMAINS
- Mount /usr/local/bin/kubectl from host via hostPath instead of failing apt-get install (kubectl not in default Debian repos) - Add "docs" to SUBDOMAINS list...
Set MinIO bucket to 'internal' and upload blank templates
The default bucket placeholder was never configured. Use 'internal' bucket which has the blank document templates uploaded.
Open doc editor tab synchronously to avoid popup blocker
window.open() after an async fetch is blocked by browsers because it's no longer in the user-gesture context. Open a blank tab immediately on click, then naviga...
Add DOCS_EDITOR to fallback org features in layout and API route
The layout's server-side org fetch often uses the fallback org (no auth context during SSR), which was missing DOCS_EDITOR. This prevented the New Document butt...
Remove COPY .mvn/ from Dockerfile to fix CI build
The .mvn directory was empty and untracked, causing builds to fail. Maven is already provided by the base image.
Enable Hibernate schema auto-creation for email_metadata
Add **************** property so Hibernate creates missing PostgreSQL schemas before creating tables.
Change ddl-auto from none to update for auto schema management
Hibernate was not creating the email_metadata schema and conversations table because ddl-auto was set to none in the k8s configmap.
Review fixes - dialect, error handling, CI/CD manifests
- Fix Hibernate dialect to CockroachDialect (matching K8s configmap) - Separate token validation from business logic in checkFileInfo - Add Docs and ingress man...
ใช้การค้นหาตามภาษาเพื่อทําการอ่านค่าสัญลักษณ์ เพื่อแก้ไขค่าความเปรียบต่างของค่าความเปรียบต่าง
CURRENT TIMETMP ใน JPQL จะคืนค่ากลับมาเป็น Java.sql Timetamp ที่ไม่ตรงกับ การปรับปรุงทันทีที่สนาม สอบถามแบบพื้นเมืองด้วย SOCKS () จะข้ามนี่ไป.
ใช้ค่าเวลาของฐานข้อมูลแบบเวลาใช้แทนค่าโดยด่วน. ปัจจุบัน
แทนที่ทั้งหมด ด้วย @ Creationary Timestamp (ource=DB) และ @ UpdateTimestamp (ource=DB) ดังนั้นฐานข้อมูลเป็นแหล่งเดียว ของความจริงสําหรับเวลา.
Use native query for PostgreSQL text[] column in ConversationRepository
MEMBER OF is not supported by Hibernate for @JdbcTypeCode(ARRAY) fields. Switch to native SQL with ANY() for folder_ids array lookup.
Use StringRedisTemplate to read OTK/session values stored as plain strings
The Next.js app stores OTK and *** values as plain strings in Redis. The default RedisTemplate uses JSON serializer which fails to parse them.
Resolve TypeScript errors in useEmailWebSocket hook
- Remove non-existent connectHeaders property from Client options - Replace client.active with client.connected for @stomp/stompjs compatibility
Add missing jakarta.mail.event imports and catch IOException in NATS handler
Match create button styling to existing global.css pattern
Use component={Link} with href, var(--color-primary) colors, and consistent sizing to match the existing Orders and Applications buttons.
Move create buttons to right side of pipeline tab toolbars
Remove duplicate left-side buttons where right-side ones already existed, and reposition newly added buttons to the right after other toolbar controls.
Give pipeline datagrid columns explicit widths with one flex column
Replace minWidth/maxWidth ranges with explicit width values so columns are properly sized for their data. Each grid has exactly one descriptive column with flex...
Remove toolbar margin gap between sub-tab row and datagrid
Remove mb:1 from toolbar wrapper in Commitments and Orders tabs, and add py:3px to the sub-tab panel for breathing room.
Remove padding from pipeline tab wrappers so datagrid matches sub-tab width
Seamless sub-tab and datagrid panel styling on pipeline market tabs
Remove the content Card wrapper for market tabs so there's no unnecessary panel behind the datagrid. Style the sub-tab row with rounded top / square bottom corn...
Remove sticky positioning from MemberHeader so form scrolls with header
The MemberHeader was pinned to the top of the scroll container with position: sticky, causing the form content to scroll underneath it. Now the header and form ...
Prevent pipeline detail pages from extending past viewport
Root Box changed from minHeight: 100vh to height: 100% with minHeight: 0 to match the leads view pattern. Content scrolls within the card, not the page itself. ...
เหมือนที่คุณเห็นการขนส่ง?
ทุก คน ที่ ได้ รับ การ ปรับ ปรุง เหล่า นี้ จะ ลง ไป ใน ที่ ทํา งาน ของ คุณ โดย อัตโนมัติ. เริ่มให้อิสระและดูมันเติบโตสัปดาห์แล้วสัปดาห์เล่า.