callNumberNormalized was already used in startCall as the guard but wasn't mapped from Vuex,
so the condition was always undefined (falsy) and enter never triggered a call.
Adding it to mapGetters makes the check work.
Enter starts a call when there's input, and does nothing when the field is empty.
Change-Id: I1e3b1ba89e9da1f3933a542a710e87d3d67f67cb
* Fix device detail form not rendering on page 2+ by
adding a watcher for reactive data updates
* Add loading spinner while device preferences are loading
* Remove unused loadDevicePreferencesList call from list page mount
Change-Id: Icc0318126303763d5eab3a39568817a2c41e88e8
* Split call queue resource identity from subscriber ownership
* Use callQueue.id for row state, updates, and removal
* Use subscriber_id, with id fallback, for owner display lookup
* Send complete form payload with subscriberId and queue values
* Use setPreference when creating queue preferences
* Remove lodash usage from newly changed store/API lines
* Fix call queue removal loading state check
* Resolve dead call queue link in seat's pbx configuration menu
* Improve remove call queue flow
Change-Id: Iabf7382799866534de12eea6bc3db8ed13cfcb52
- Replace direct `useStore` usage with composable helpers
(useActions, useState, useGetters)
- Add `setPopupShow` action to wrap `popupShow` mutation
and eliminate mutations in favor of `setPopupShow` action
- Remove `usePbx` and `useUser` composables
- Update documentation
This prepares the codebase for eventual Pinia migration by:
- Avoiding mutations (Pinia has no mutations)
- Centralizing store access through helpers
- Enabling future migration with minimal component changes
Change-Id: Iddc63b8c3c39fe1a06bb6a78ef322f01fe77a9af
* Added a new Conference page under Extension Settings
where PBX subscribers can manage their own
conference_max_participants and conference_pin
* Page and fields are gated through subscriber profile
attributes for administrative purposes
* Restricted the route and menu entry to PBX admin users
and added the new Conference entry to the
Extension Settings menu
Change-Id: I002c79ce6653e1183c6348775184a5a92ea8f737
* Added Seat as a call forwarding destination option
* Enabled editing existing seat destinations in forwarding rules
* Seat search matches partial text and calls api on every stroke
Change-Id: I3b57406185167392380d2ec2d65db4447937229b
* Replaces PROFILE_ATTRIBUTES_MAP.* lookups for
PROFILE_ATTRIBUTE_MAP.managerSecretary and
PROFILE_ATTRIBUTE_MAP.autoAttendant one the
Manager Secretary and Auto Attendant submenu checks
Change-Id: I4b5395afa037bcd043357965a4f56d7d8d92de7a
- Removed "Hide number within own PBX" from PBX Seat creation form
- Removed "Hide number within own PBX" from PBX Seats actions menu
- Removed "Music on hold" from PBX Seats actions menu
These preferences are now only configurable in the PBX Seat details to avoid duplication and simplify the UI.
Change-Id: I8c9c8967bf4039f02b5848dea33285d04b0451c1
* Reworked call forwarding group item text to show
Forwarded to X for N seconds from the current timeout
* Added the necessary translations
* Refactors update logic for changedDestinationTimeout
with the use of a watcher
Change-Id: Ie0b4b8194c68b5cc3f5ddfac2a091be308e0e910
Fix default value for CQ part:
If the subscriber has call queue activated, use their wrap-up time
as the default value; otherwise, set the default value to 10.
Change-Id: I1e11417690d4119ce396939721cbc96f6c5ef9b8
* Fixes missing translation for "If not available"
in german
* Call back button on the subscriber phonebook
was moved before the more menu
Change-Id: I6daa0623173c0251c2c72149419bc8f122687473
* Created two PBX configuration fields for both
seat and group preferences
* Admin users can now specify the maximum number
of conference participants as well as the conference
pin if they so desire
* Fixes the PATCH flow so that it follows the following structure
1. create new: PATCH add
2. amend entry: PATCH replace
3. remove entry: PATCH remove
* We no longer use PATCH replace with an empty payload
to remove an entry
* Added label translations
Change-Id: I3e349c0d0cc896c6dcbb2ada0a9588e3b96c945a
- Convert all actions from .then()/.catch() chains to async/await
- Extract savePreference() helper to centralise error handling and
state commits, avoiding repetition across every action
- Extract updateBooleanPreference() helper. It covers the following
scenarios:
* new value is false: remove PATCH property in DB
* new value is true: add PATCH property in DB
* new value is true AND the value already exist in the
customer preferences: replace PATCH to amend property in DB
(added to avoid regression introduced by previous code, which
saved a property as false instead of removing it)s
- Add proper add/set/remove logic to updateBlockInList,
updateBlockOutList and updateBlockOutOverridePin: previously all
three always called setCustomerPreference regardless of whether the
preference existed or was empty
- Split logic to add, remove and edit customer preferences
Change-Id: Ie419de31631b9ef1b06653446dfbe1a33a10c225
When toggling multiple CFs on/off in quick succession,
the PATCH request returns inconsistent results,
randomly multiplying resources.
To avoid this, we now retrieve the updated mappings
using cfLoadMappings() after the PATCH request and
we disable the toggle while other
csc-cf-mappings-full actions are performed
This is a temporary fix while the backend team resolves
the root cause, as the work is already in the pipeline.
The fix has been applied only to the setMappingEnabled
method, as it appears to be the only one affected due
to the possibility of multiple consecutive calls.
The fix has been applied only to the setMappingEnabled method, as it appears to be the only one affected due to the possibility of multiple consecutive calls.
Change-Id: Ideb999e3871ea6b7f8a0d1a3b5979cd2ad88706e
* Created buttons to change the order of movable call
forwarding destinations
* Only destinations with DestinationType = Number are movable
* Moving a destination automatically patches the priority in
the backend
* Buttons show up only when destination is movable
Change-Id: Ie33091da291a1108aae10d7c00c72a1187854e5e
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
* depends on: "node": "node": ">=24.14.0 < 25"
* updates debian rules and control file
* update the ENV syntax to avoid the deprecation warning
Change-Id: I74e7961f5163e1eebfef8ca8ec3446333a548f5f
- Removed `crypto-browserify` from package.json and quasar.config.js
(unused webpack polyfill that was bundling vulnerable bn.js and
elliptic into the production build)
Bumped up packages:
* glob
* globals
* jest
* @quasar/app-webpack
Yarn resolutions added
- `serialize-javascript: ^7.0.3` — fixes high-severity RCE vulnerability
via RegExp.flags/Date.toISOString() (CVE in terser-webpack-plugin and
@quasar/ssr-helpers paths)
- `**/postcss-svgo/svgo: ^4.0.1` — fixes high-severity Billion Laughs
DoS (XML entity expansion) in cssnano's SVG optimization pipeline
- `dot-object/minimatch: ^3.1.2` — fixes high-severity ReDoS in
dot-object's glob dependency
- `**/flatted: 3.4.0` — fixes high-severity unbounded recursion DoS
in eslint and eslint-webpack-plugin's caching layer
What remains (30 vulnerabilities — all upstream-blocked)
The remaining vulnerabilities are entirely confined to dev-only
tooling and cannot be fixed without upstream releases:
- minimatch ReDoS across jest, @vue/test-utils, jest-serializer-vue,
@quasar/app-webpack, @quasar/quasar-app-extension-testing-unit-jest
- ajv ReDoS across eslint, eslint-webpack-plugin, @quasar/app-webpack
- webpack SSRF (buildHttp feature, not used in this project)
- qs DoS in webpack-dev-server's express (local dev only)
- esbuild dev server CORS issue (local dev only)
- vue-template-compiler XSS (no patch available upstream)
- tmp symlink issue, @tootallnate/once control flow (test tooling only)
Change-Id: I72f34757538f97bb3495a57d7f0263df58102f1e
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
* Implemented priority flow as sort -> normalize to 0..n-1
across fetch/create/edit/remove
* On creation handles priority incrementally
* On edit, arranges and normalizes (if needed) priority values
* Enforced the same move rules in store action (moveDestination)
to block invalid reorders.
* Removes references to LocalSubscriber
* Fixes unit tests
Change-Id: Ib64cc30ea75141692085ec38df5c528565389469
We need to also drop the dependency on yarnpkg in env/Dockerfile, to
match the behavior within Debian/control, which was updated in commit
bd8a150825
("MT#55813 MT#55391 Use bundled yarn").
But there's no need to duplicate the Dockerfile usage with t/Dockerfile
*and* env/Dockerfile, so let's drop the unused ngcp-csc-ui-env-* one, to
avoid any further confusion.
While at it, update the ENV syntax to avoid the deprecation warning.
Change-Id: I0c098c52737c4119b625214347939374e3160273
The CF to Local Subscriber feature has been removed
in ticket MT#59011 but never deleted from CSC.
Change-Id: I1ed32c4db3e4ee2e0be8ab2218efe0ec48c3a098
- 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
* fix updateSharedValue to be less flacky: it was using
the reference of row, mutated, to make the backend request.
It now use a value stored in a variable.
* amend getList to make sure we pass the default page (1)
when looking for all rows with api v1.
Change-Id: Ia8c4fcb1547c16a6a3e862f864fbc5aecda3e065
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
Update axios to version 1.13.5 to fix a
denial‑of‑service issue in mergeConfig when
using malicious config object.
Change-Id: I4c1d2b3de42d7ab854ffaaee07e30fcb98d4cadc
- 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
e2e-testing.js automatically generates data-cy attributes for Vue components
used in Cypress E2E tests.
Component names were lost during the Vue 3 syntax migration, which broke
automatic data-cy generation. This change restores component names so the
test suite works again.
Change-Id: Ia643bdf3989970243101eb7c0c275b5323a9224d
- force @isaacs/brace-expansion 5.0.1 (patches minimatch/glob issue)
- force qs 6.14.1 (patches express/body-parser issue from quasar tooling)
- force tar 7.5.7 (patches node-gyp/tar issue pulled via npm)
- note: npm itself has no patch plus the dep was not used so we
removed it.
Change-Id: Ic145cbc509d80cf9d96b9a053de1ce0a7d8dc5a8