- 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
* Add testEnvironment: 'jsdom' to provide browser-like
globals (DOM APIs) that Vue and test-utils need
* Add explicit module path mapping in jest.config.js
to force Jest to use the CommonJS bundle instead of
the browser bundle.
Change-Id: I659b122ed3884c229b5f6dab1f08e135bcb8c03d
Modernize vue-wait initialization and usage patterns to support Vue 3
Composition API while preserving Vue 2 Options API functionality.
Changes:
- Migrate App.vue to Vue 3 <script setup> syntax
- Convert Options API to Composition API
- Use defineComponent and reactive state management
- Maintain existing functionality and lifecycle hooks
- Refactor vue-wait initialization (boot/vue-wait.js)
- Move initialization from App.vue mounted() to boot phase
- Create initializeWait() function for explicit setup
- Register $wait globally before component mounting
- Add Vue 3 composable support (composables/useWait.js)
- Create useWait() composable for Composition API components
- Access $wait via getCurrentInstance() for proper Vue 3 patterns
- Enable gradual migration from Options to Composition API
- Update documentation (doc/architectural-overview.md)
- Add "Loading State Management (vue-wait)" section
- Document usage patterns for both Vue 2 and Vue 3
- Clarify migration strategy and coexistence
Note:
All existing Vue 2 components using this.$wait continue working unchanged
while new Vue 3 components can use useWait() composable.
Change-Id: I62c9eaa81336a1ae115f1b326676497dcac262b2
- Migrate customer phonebook to api v2
- Replace api v1 patch methods on subscriber phonebook with api v2 endpoints
Change-Id: I2230fadaa315a7f828e9936342c17d18fe4e048b
- Update copyright years.
- Update Standards-Version to 4.7.2.
- Remove «Rules-Requires-Root: no» field, which is now the default.
- Remove «Priority: optional» field, which is now the default.
- Wrap and sort fields.
- Add spaces around operators in make variables.
Change-Id: I3f14795fa90057cb73e994fd82d28f3209bd8dac
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
Add composables (useStore, useUser, usePbx, useGlobals) and pure helpers
(destination, platform) to support gradual Vue 3 Composition API adoption.
- Extract pure functions from mixins to src/helpers/
- Add generic store access composables in src/composables/
- Add store infrastructure helpers (RequestState, API action wrappers)
- Export boot file utilities for direct import in services
- Add comprehensive tests and migration documentation
No breaking changes. Existing Options API code continues to work. New code can
use composables and helpers for cleaner patterns.
See migration-guide.md for usage examples and migration path.
Change-Id: I764a5e6635771e0f95f33f86064d70ee4a746207
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
Trickle ICE candidate updates were not sent through
to kamailio/rtpengine. This was happening because
there was not ICE configuration.
Change-Id: I2a3ae1ab92ac9d6e766bd46915930fd553a6ff26
* 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
The issue was caused by a conditional(v-if=!menuMinimized) inside the <q-toolbar>.
menuMinimized property controls whether the side menu is collapsed
or expanded and affects multiple components.
When it changes (on hover or pin toggle), the layout width updates,
which can trigger the ResizeObserver.
Using v-if was recreating/destroying the element each time,
causing unnecessary layout recalculations.
The solution is to replace it with v-show="!menuPinned" which keeps
the element in the DOM (only toggles display), preventing extra
ResizeObserver triggers and making transitions smoother.
Change-Id: I2e544bb0451cc6a17a4bbeaf482ce678173adcd4
Remove the adminOnly check on this route.
Access to this page should be permitted for
PBX users, regardless of their admin status.
Change-Id: Ida69f96acc1e15b8779df7893202519450c77ff3
This commit disables subscriber phonebook in CE platforms
as the header manipulation and phonebook are only pro/carrier
features.
Change-Id: Icb5ceec69f675fbac61e9daf81698c81d0c8c28d
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
The PBX seat page was crashing because v2 calls always return
unauthorized. An investigation is ongoing to determine whether
NCOS seat should be accessed by subscriber. In the meantime,
errors are handled gracefully so the user can continue using
the app.
Change-Id: Ie4ce6c7970815b448f406bb5e64aeefda348aeed
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
On initUser the app tries to push items the
router before it is initialized, which results
in the error "Can't access property push,
this.$router is undefined". We add optional
chaining to prevent this from happening.
Change-Id: I6e2bf6336c8e91682962154219fc1c0bc1dbeacb
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
Revert changes from commit 716d45f6 that altered setPreference.
The previous commit limited the function to handling only true/false
preferences, removing the ability to replace existing values.
This change restores the original behavior, allowing setPreference
to update existing preferences with new values, not just booleans.
Change-Id: I9658515d9714c30607a652fcc0ee3af86a0c8fcd
Remove the following obsolete attributes from the
Subscriber Profiles list in the Admin UI:
- rerouting_mode
- rerouting_codes
- fileshare
- sms
Change-Id: I6074322155329ad9d9c15f65782f3ae76eac7848
This update introduced many breaking changes.
Listed here the most important ones:
* quasar.conf.js file has been renamed
quasar.config.js.
* Quasar v4 replaced the old /src/index.template.html
with a new /index.html at the root of the project.
The special comment <!-- quasar:entry-point -->
is used to inject scripts/styles automatically.
* Use setupMiddlewares instead of onBeforeSetupMiddleware.
* proxy is now an array of proxy config objects.
* Dropped support for Vuex. We can still use Vuex as any
Vue plugin, but we have to manage everything (installing the
store, no store parameter in boot files, etc.).
We'll migrate to Pinia asap.
* Updated postcssrc according to docs
Change-Id: I585a3e2d17f666d9ca2773fa446d644f0fc201a2
- 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
Allow setting a free-text label when configuring lines
(Forward, Transfer, SpeedDial) with a custom entry.
The label is only applied if a target number is set.
Change-Id: Ida316ac79d454145ae1238ca5d297bff28c92af7
Previously, the arrays for weekdays and months didn’t match
the values used in admin-ui (Sunday=1, Saturday=7, January=1,
December=12). This commit updates the calculation function
to match admin-ui conventions, ensuring consistency since
the data originates from the admin panel and is read-only here.
Change-Id: I121c18ffb901beaece19124865b88259ffcb2d3f
Updated access rules for ADMIN subscribers:
- "Fax Settings > Mail to Fax" is now always visible.
* Admin users: The "ACTIVE" toggle can be changed,
and content is editable.
* Non-Admin users: The "ACTIVE" toggle cannot be changed,
and content is editable.
- "PBX Configuration > Seats > ID > Fax Settings > Mail to Fax" is
now always visible
* Admin users: The "ACTIVE" toggle can now be changed,
and content is editable.
* Non-Admin users: menu not visible
Change-Id: I1f30be27fde8a20092d8321e128f5d27dceec734
* 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
After improving the handling of long words with
commit 0340bd7e3c
The csc_Call bar was misplaced a few pixels.
This commit aligns it to the menu column
to avoid any overlapping.
Change-Id: Ic8f8c6bbfa11bb3190c93612562dfc6b4a4b0055