Introduces a new form to create a Call Forward and select its destination
in a single step. Applies to Call Settings > Forwarding and Seats/Groups CF.
UI:
- Creation button is disabled until destination type is selected and all
required fields are filled
- "Number" type requires a destination number
- "Custom Announcement" type requires a custom announcement
- Form shows a loading state until all backend resources are created and loaded
- 3 dots menus are disabled until loading is done
- Destination Options list changes depending on platform type (CE/pro)
and PBX feature
Creation flow:
1. rewrite destination based on type and input
2. Create destination → receive ID from API
3. Create mapping using the destination ID
Improvements:
- Add try/catch blocks to CF actions and remove them from API file
- Remove use of 'common.js' methods from CF actions
- Rename 'toggleMapping' to 'setEnableMapping'
- Rename 'createSpecificDestination' to 'resolveSubscriberDestination'
- Update deleteMapping
- Replace duplicate destinationSets, sourceSets, timeSets arrays with maps
for faster lookup and single source of truth. Create relevant getters
when needed.
- Remove use of cloneDeep from lodash to gain better performance
(shallow copies instead of deep clones) and be consistent with Vuex
best practices (immutability with spread operator)
Change-Id: I99ba019ac3995ddaa118f9a523f8adcd47db5a35
Remove unused code:
* Removed Application destination type as it is unused
* Comment removed from destinations helpers
* Provider for composition api removed because it
was duplication the store
* Remove DestinationType from Destination mixings
Refactor call forwarding api and actions:
* Add try/catch blocks to CF actions and remove them from API file
and components for more centralised approach
* Remove use of 'common.js' methods from CF actions
* Rename 'toggleMapping' to 'setEnableMapping'
* Rename 'createSpecificDestination' to 'resolveSubscriberDestination'
* Improve deleteMapping
* Replace duplicate destinationSets, sourceSets, timeSets arrays with maps
for faster lookup and single source of truth. Create relevant getters
when needed and update components.
* Remove use of cloneDeep from lodash to gain better performance
Change-Id: I8ad368eb8be0231138fbd44c18e2f74fd490f1d8
- Add "On no answer" option to the "Add forwarding" dropdown menu
to create CFT mappings directly
- Update forwarding actions to support the new CFT creation flow
- Reset cft_ringtimeout to null when cft mappings become empty
This change introduces a dedicated menu option for creating
"On no answer" (CFT) call forwarding rules, improving
the user experience by making this common use case more accessible.
Change-Id: I8570e63a292dcbe6ae1c2e37a0846c581b7887b6
Our nightly tests flagged the fact that
the feature was unstable and unrealiable.
Changes:
* Extract subscriber phonebook api and state
* Change direct use of http in the sub-phonebook
method to use the relevant method in common.js
* Simplify logic to PATCH single properties
with a unique PUT in the Phonebook entry form
* Amend getList, handleResponseError and
put to allow use with API v2 endpoints
* Amend translations and methods to replace
"phonebook" with "phonebook entry" where
necessary
Change-Id: I189d45fe426a1ded400a251d7efdfa72f76f9061
- Replace disabled flag in 3-dot menu with a visible toggle
- Keep normal text colors when CF is enabled
- Allow full configuration even when CF is disabled
- Set newly created CF as disabled by default
Change-Id: I9c5bfdd178d07ca5ba5705ccc7622b7a17a7c65c
- Keep callNumberInput getter returning full input for display purposes
- Use callNumberNormalized getter to strip domain before making calls
- Add callNumberNormalized to component's mapped getters
- Update startCall validation to use normalized number
Change-Id: I4172a4f426bf7f827e3ff717a901b8a64f4264d1
- Migrate customer phonebook to api v2
- Replace api v1 patch methods on subscriber phonebook with api v2 endpoints
Change-Id: I2230fadaa315a7f828e9936342c17d18fe4e048b
Previously the error handling did not properly identify the duplicate
number error. Now we check the API response message to detect duplicate
entry errors and display the appropriate error directly on the number
field in the phonebook form.
Change-Id: Ifbde6304d79e62c076eb2f683a1e4bb06151ff38
Resolve all build configuration conflicts and
ensure all loaders and plugins are compatible.
* Update eslint config to use vue3 patterns
* Remove use of vuelidate/lib/validators and
replace it with vue3 @vuelidate/core and
@vuelidate/validators
* Replace vue-wait with vue-wait-vue3
Note: we didn't touch vue-resource because
unit tests are currently not in use.
Change-Id: I1cf5c3b559b943307f9a4bb988f359453062a48b
The custom announcements were not showing in
the CF menu under the PBXGroup section
because the action to load the announcements
was missing from the mounting hook.
Change-Id: I5813f2ce4471aa5a51ebc08ed3cdc08bde16b931
* Adds new messages for CE users to replace the
"No Calls, Voicemails or Faxes found" greeting
and "Calls, Faxes, VoiceMails" submenu item with
"No Calls or Voicemails found" and "Calls, VoiceMails"
respectively
* Adds translations for both the "No Calls or Voicemails found"
and "Calls, VoiceMails" messages
* Fixes typo in the word occurred on en.json
* Fixes some French and Spanish translation errors
* Fixes the call Cost formatting under CscCallItem.vue
Change-Id: I0da1dbf78ea1a609a0e1861fa1c14ee41a41d563
Fixed an issue where the component tried to access the `id` property
of `this.groupSelected` when it was undefined. This happened because
the state gets cleared on refresh, and the component didn't have a
check to reload the necessary resources.
- Added check to ensure resources are reloaded if state is cleared
- Prevent accessing `id` of undefined in the component
Change-Id: Ib6b669df87d255cf174254b32fa1c451d0901f73
Display transcriptions in a separate dialog accessible
by the 3 dots menu in the voicebox tables and by the
document icon in the call recordings list.
Change-Id: I6ad42760dc65b3df178afe23ac4c5f19a7c4cf43
In CscPageCallRecording a watch function was directly
modifying the Vuex state, which is not allowed in
strict mode. This change ensures that each recording
object is cloned before modification, preventing
unintended mutations of store data.
Change-Id: Ie564da2ce31bd61772a05450be21a9a0717632ef
Use new /api/conversations properties to show
phonebook name matching. If the number is
not saved in the phonebook the app shows
the simple number.
Change-Id: Ia80a74c74ea250ed4f697b2897aba380d49bc8ca
- Verify and correct route access for admin-only CSC pages
- Update route guard logic to support:
* User role (admin / non-admin)
* Exact match on user profile attribute
* Presence of one or more profile attributes
* Required licenses (all must exist)
* Exact platfom feature
* Exact capability match
- Ensure route guards match menu visibility restrictions
- Document route guards and menu visibility logic
- Note: for fax settings, we use the extra variable
`isFaxServerSettingsActive` to determine whether the toggle
in the fax server menu should be on or off.
Change-Id: Id60a0e8b2145701ed4ae52d0859da46172076a89
* Run yarn outdated and run through the list
to upgrade all libs but @quasar/app-webpack
and related libs. this will be done in a
separate commit.
* Remove parseuri because it is not used anywhere
in fact the project has a custom SIP URI parsing
implementation in sip-uri-parse.js.
* Remove jwt-decode because it is not used in fact
JWT decoding is manually implemented using native
browser functions.
* Updating to glob@11 where the glob.sync() method
is no longer accessible, but requires to be
imported directly from globModule.
* Remove eventsource:
- No Direct Usage: I could not find any direct imports,
requires, or uses of the eventsource package or
EventSource APIs in the codebase.
- Security Updates: The package was updated on
January 11, 2023, from version 1.1.1 to 2.0.2 as
part of a security updates (MT#56339).
- No Indirect Dependencies: The yarn why eventsource
command confirmed that no other packages depend on
eventsource.
- No Build Process Integration: I didn't find any
references to eventsource in the build config files
or webpack configurations.
- No SSE Implementation: While we handle media streams
for calls, in my understanding they use WebRTC or
similar technologies, not Server-Sent Events which,
in my understanding, is what eventsource is designed
for.
* Remove eslint-plugin-standard as it's not longer needed
by standard and eslint-config-standard.
* Upgrading eslint-plugin-vue required adding
vue-eslint-parser as a peer dependency and
required some changes to since new warnings.
Change-Id: I8f582275ae344f0ede7520136deba30c4d94ffd7
Add a button to download the PBX statistics
in a CSV file. The added button calls the
/conversations endpoint with the same filters
and pagination used to load the table with
Accept: 'text/csv' in the headers.
Change-Id: I2b148aa6fe6cb6627d5700ed71e139579181b891
A new button to activate the new 'dnd' subscriber preference
has been added to the CSC under the 'Call Settings>General' page.
Change-Id: I00a4c845b098c46fcdfdfbb246f97cebf7a82ae1
* Add a search field to search for contacts
by Name, Phone number or the property Shared.
Note, the name and phone search use the wild card
before and after the typed string.
* Move call button outside the 3 dots menus
for easier access.
Change-Id: I2c135d744a66c921a028dcece4a889b482ccd33f
Show entries from customer, reseller, and other
subscribers (same customer) in subscriber phonebook
by using `include=all` and filtering by
`subscriber_id=id` in API call.
Disable editing for entries not owned by the subscriber.
Change-Id: Ic95fbb926b7e31d31ad7a0a5a5646c7867c5bd3a
A new "Seats" button has been added to the subscriber phonebook section,
allowing users to view all available seats and initiate callbacks
directly from the list.
Change-Id: Icb5b21b7394e9008617b27770142fd0ed83f68a8
Clicking the 3-dot menu on a call list entry now
shows an "Add to Phonebook" option.
When selected, the user is redirected to
/user/subscriber-phonebook/create with the NUMBER field
pre-filled from the selected call.
Change-Id: I80ee9ba5e0080f6859db21623d19d9f9b89f3052
Subscriber can now use 2FA with API v1.
2FA can be enabled from the admin portal:
- at domain level from domain preferences.
- at subscriber level from subscriber preferences.
Flow when 2fa is enabled:
- subscriber attempts login with username and PW
- scenario1 --> 1st LOGIN:
* request returns 403 Invalid OTP
* UI shows QR code (with the possibility to
visualize it as a string), instructions on
how to use 2FA and a input for OTP token
* once relevant info are submitted the user is logged in
- scenario2 --> NOT 1st LOGIN:
* request returns 400 no OTP
* UI shows only input for OTP token
* once relevant info are submitted the user is logged in
Change-Id: Ief1ed703d3d1cfa896fe62a2c7a55897260d2cfe
Listed here the changes:
- change properties accessed directly
from state with computed properties
that handles null cases
- Fix typos for subcriberListState
and subcriberListError
- Improve route watcher in
CscPagePbxDeviceDetails
- add a method to load only thumbnails
instead of full set of data for
the device profiles to improve
performance.
- removed 1000 rows for loadProfiles()
as it was too slow. We expect max 150
devices so it was set to 300 rows.
Note, more refactoring will be needed.
Change-Id: Iefe0328052174f0bb93f8cdbae59f77257592592
In case the CSC was configured to work in mixed mode
(www_admin.http_csc.csc_js_enable == 'mixed') then the
OLD CSC page of the customer details was displayed on
the new CSC for administrative subscribers.
This was added in commit 0354615428
The OLD CSC is not fully deprecated so also the access
to this page should be removed.
Change-Id: Ic791fb85c2039ce2c3e801b3ca826bee5a4c7e7c
The Send Fax icon was displayed in the PBX Configuration
even when the functionality was not enabled in the fax settings.
This was caused by the ability to activate
the feature at the seat or group level.
The logic has been corrected, and the Send Fax functionality
now appears only when it is properly enabled for the user.
Change-Id: I02358f12eaf1a5543d2c6552e21d4452c56acdc6
Two switch buttons added to group details as for seats.
These buttons update play_announce_before_call_setup and play_announce_before_cf preferences.
Change-Id: I230b9a8d62b34a2e013a326ad4d50403b82d824a
All functions in the src/store files handle errors from the backend.
We now commit an error message that returns the backend error.
All promise-based functions in src/store/files
have now been replaced with try/catch.
Change-Id: Ia315d122809f0b9ae66230c83fb48454c904d722
App was crashing when user was refreshing
page on page /pbx-configuration/device/${id}
This happens because the logic to load all
necessary resources is a bit tangled. This
commit attempts to tidy up things without
inserting breaking changes.
Change-Id: I868678fcc6ed181697a5f3825d41940429785375
UI modified to clearly show the "After Ring
Timeout" as unique parameter that is
editable in one place only.
Change-Id: Ieadc2c255ad8977664c2288269cef6c1a8da5b72
The device alignment image is outside
of the screen view. This commit changes
the alignement of the page to have
all the content displayed without
lateral scrolling.
Change-Id: I6bfd5d23730544e22b7842b9ee005f6c3455e010
Review all instances of the console object (such as console.info, console.error, console.warn ...)
in the CSC repository
Change-Id: I360164516748cc7412c1fa2023db3445f01f53ac
*Users can now add/select a B-number
set when creating a call forward.
Before this commit, this was only
possible from the admin panel.
Note, users cannot delete or amend
B-numbers created by someone else
(e.g. if a PBX admin user creates
a B-number for a Seat,the Seat-User
won't be able to edit it).
*Fix the way we handle sourceset
deletion ensuring data is reloaded.
Change-Id: I58cb639156fb9ac0386d6bf0f3ec26daa4ebf857
Bin icon misplaced bug fixed by changing the
css class. This commit also improve input
behaviors. With the Vue 3 migration it seems
that $atts doesn't overwrite binded attributes
anymore, so we had two clear buttons on inputs.
To prevent this the following steps have been
taken:
* custom clear button is switched on only when
the attribute "value" is used.
* native clear button is switched on in all
other cases
This should avoid adding regressions.
Change-Id: I39f41ce8d461efc5eff5c7e541d227dbfd6c667d