v7
UCS Operator - changelog
All notable changes to this project will be documented in this file.
[7.4.0] - 2025-05-23β
π Featuresβ
- (call) Add call recorder icon next to call duration in dial bar
π Bug Fixesβ
- (speeddial) Disable dialing of second call if device is uphone
- Fix lint issues
- (uphone) Uphone is correctly started after clicking 'Continue with ...' when selecting device
- (pairing) Unpair paired device if user selects working without phone
π Refactorβ
- (device-confirm) Focus device confirm button via ref instead of useEffect
- (menu) Use selector instead of direct store digging to enhance code readability
- (lookup) Remove unused code
- Remounting is no longer needed
βοΈ Miscellaneous Tasksβ
- Bump zod to allow migration to v4
- Migrate zod parser of lookups to v4
- (task) Migrate task form parser to zod4
- Migrate zod to v4
- Bump zod
[7.3.0] - 2025-05-16β
π Featuresβ
- (uphone) Rewrite WebRtc connection and add statistics that are available during call under headphones icon
- (uphone) Load audio devices for in/output settings via react query to handle errors
- (uphone) Enhance error handling of uphone call
- (queue) Add 'deleted' attribute to queues which indicates if queue should be considered archived
π Bug Fixesβ
- (osl-integration) Format AvgWaiting value to hh:mm:ss (mm:ss)
- (director) Display pawn instaed of king in bottom menu if app is not main
- (keyboard) Center keyboard
- (customization) Include sk break time alternative
π Refactorβ
- [breaking] Support only 1 softphone session to make simpler error handling
βοΈ Miscellaneous Tasksβ
- Bump rspack and lingui swc plugin
[7.2.0] - 2025-05-12β
π Featuresβ
- (uphone) Prototype uphone client
- (uphone) Enhance call recovery
- (uphone) Make calling work
- (uphone) Ring in the browser when the call is incoming
- (uphone) Enable keypad
- (uphone) Enable device options
- (uphone) Add icon indicating uPhone state to top menu
- (main-app-sync) Add main app indicator to bottom menu
- (report) Replace daily time ringe inputs with more friendly element
- (integration) Allow informing Operator app about host application via query parameter
- (widget) Add new widget Outbound queueu (compact) whihc displays number of leads in queue and allows user dial next lead
π Bug Fixesβ
- Handle report timeout and inform about it user with friendly message
- Make sure that there won't be accessed non existing value when adding grid widget, log readable warning if yes
- (uphone) Ring only on incoming calls
- (uphone) Removed stats that caused delay in audio (maybe)
- (uphone) Replace fetch with context api instance
- (uphone) Replace getElementById with react ref
- (uphone) Only mount uphone it's paired
- (operator-api) Inform 3rd party apps about device changes while using uphone
- (uphone) Only run uphone client if the operator instance is main
- (uphone) Configure stun server from device data instead of hardcoded url
- (docs-link) Open docs with noreferrer, noopener
- (reports) Add locales
- (call-history) Do not show error modal when date range is too broad
- (bottom-menu) Add titles describing icons in bottom menu (websocket and main app)
- (localization) Add Outbound queue compact localization
π Refactorβ
- Remove unused widget settings proptypes
- (uphone) Add types and fix eslint issues
- Inline RTCIceCandidate type instead of redundant alias
- Remove redundant types that would be inferred
- Select active call state from active call instead of selecitng it directly from state
- Remove dead code
- (uphone) Replace single-line early return with multi-line for readability
- (uphone) Remove optional mark from start parameters as they are not optional
- (uphone) Select device ids in uphone hook instead of parent component
- (uphone) Inline remote description to let type inference do the job instead of manual typing
- (typing) Fix typing error in DateTimePicker
- Remove dead code
- Remove unused prop from outbound queue widget
β‘ Performanceβ
- (uphone) Move isOutgoingCall out of component scope to prevent recreating the function every render causing redundant rerenders
- (uphone) Inline uphone start/stop manager to avoid creating callback
- (uphone) Remove values from hook return value as they were unused
- (uphone) Memoize uphone start/stop to avoid object unstability
- (uphone) Use ref for localStream instead of state as it does not require reactivity and move setupLocalStream out of component context
π¨ Stylingβ
- Prettify
- Reformat code
βοΈ Miscellaneous Tasksβ
- Sanitize possibly non-existing row in grid because typescript cannot assure that the row is there
- Install knip
- (uphone) Debug info call
- Add warning about non existent remote audio element
[7.1.1] - 2025-04-25β
π Bug Fixesβ
- (froala) Renew license key
- Fix typo in czech translations
- (reports) Set report timeout to 10 minutes
[7.1.0] - 2025-04-14β
π Featuresβ
- (websocket) Send identification in websocket request
- (main-app-sync) Synchronize with ucs-api to determine which operator instance is the main and should run softphone
π Bug Fixesβ
- (osl-integration) Synthetize onConnect event right after app is started to maintain previous version event order and mark it as deprecated.
- (config) Set default notifyWaitingCallers to true to notify agents about calls in queue
- (localization) Default to device language before fallback to english
- (build) Remove default configuration
π Refactorβ
- Wrap function body to curly brackets
βοΈ Miscellaneous Tasksβ
- Enable source maps in dev and test environments
[7.0.1] - 2025-04-02β
π Documentationβ
- Fix changelog
[7.0.0] - 2025-04-02β
π Featuresβ
- Create simple temporary i18n provider that respects browser language because user is not known yet
- (login) Configure credentials autocomplete
- (autologin) Re-implement with new auth service
- (email) Load emails with auth cookie instead of SID
- (report) Download report via client instance with relogin mechanism to avoid ping roundtrip
- (login) Reimplement sso and login FE-API methods to be compatible with new auth
- (login) Remove username and password cookie storing
- (login) Provide ssoTokenProvider to application context
- (logging) Identify application instance using slice of uuid instead of sid
- (login) Parse whoami response to make sure that result was okish
- (login) Experimentally display user displayname in topmenu from session context instead of global store
- (websocket) Add websocket state icon to bottom menu indicating whether it's on or off
- (api) Migrate to new UCS-API with method in path
- (impersonate) Re-implement impersonation compatible with new auth service which enabled stoping impersonation and going back to original user
- (impersonate) Re-impersonate user when his impersonation ticket has expired
- (dialog-modal) Add configuration props allowing transparency,fullscreen and custom style
- (uAuth) Integrate uAuth iframe login
- Let user to generate strong passwowrd while adding new user
- Add intensive wake up throttling detector which informs user
- Add intensive wake up throttling detector which informs user
- (auth) [breaking] Integrate uauth
π Bug Fixesβ
- (localization) Add missing czech translations
- (login) Correctly handle login errors and display useful information about the error to an user
- (login) Put login form to elementRoot to apply color palette
- (login) Integrate operator with auth service logout
- (logout) Ignore error if it's expected 401 response meaning that the token is not valid
- (http) Handle ucs in-body errors
- Handle no-creds exception from autologin as expected and fallback to login
- (login) Prevent closing login dialog using escape
- (logging) Inject username to logger
- (login) Call onLoginError instead of onCredentials when login error ocures
- (headless-mode) Render headless mode to not attached element to make sure that whole app actually works
- (impersonation) Reuse custom api instance when replaying request after relogin to use defined hooks even in replayed request
- (uAuth) Do not add sid when requesting recording
- (uAuth) Add trailing slash to login form uri
- (url) Add trailing slash to impersonate endpoint
- (dialog) Remove padding
- (url) Add trailing slash to logout endpoint
- (url) Adjust api urls to reflect api restructualization
- (localization) Update locales
- (typing) Replace any with unknown
- Theme change button won't rotate randomly
π Refactorβ
- Remove unnecessary type parameter
- Remove code replaced with new auth from connector
- Inline relative template and email upload urls to make it api independent
- Instantiate API in SessionManager and pass it to app via context to pass logout and relogin callbacks via constructor instead of reassigning its methods
- Remove no longer needed app state actions (were replaced by SessionManager)
- Move websocket open/close event handlers directly to connector constructor and remove websocket connection states
- (app-state) Remove user state
- Remove url adjusting when calling public methods as traefik takes care about it now
- Remove unused import of ApiContext
- (auth) Remove MessageChannel for communication with login iframe to simplify code and make the communication more stable using postMessage
β‘ Performanceβ
- (impersonation) Re-impersonate forbidden request only once
βοΈ Miscellaneous Tasksβ
- Ucs-operator-deploy uses /usr/share/ucs-operator/operator.tar.gz by default
- Move SessionManager to auth package
- Remove report, template and email url building
- Add cursor rules
- Fix typo in cursor rules
WIPβ
- Redesign app state model to better bound error with error state
- the problem with this approach is that when app state is not changed via CHANGE_APP_STATE, stateHooks.saga.ts won't catch them and inform 3rd party about app state change
- Implement live relogin with failed request replay
- Integrate auth-server: comment unused connector functions