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
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
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
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
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
For outgoing or incoming calls show the
name saved in the phonebook (if it exists).
Note when retrieving phonebook entries
we always return the first entry.
As a result of that:
- if there are duplicates we only show
one name.
- if there isn't an exact match, as per
today, it won't find any entries.
Change-Id: I5c4307b8e22e6bc65f8efe159867d462d72f0d0d
Migrating from ^8.10.0 to 9.14.0 had breaking changes.
* We moved to a flat configuration and changed the amended the script to run lint.
* We upgraded all eslint relevant libraries/plugins.
* We opened another ticket to review all the console.log/debug/info present in the repo.
Change-Id: Ie1e2c1ef49fc09cddbd9cc639505a1a65917bd35
The backend returns "403 - Password Expired" when user's
password is too old and we redirect the user to the
/changepassword page where they can update their pw.
Users will be required to insert username, current password,
new password and to retype the new one.
Success: user redirected to login page.
Failure: a banner with the error is shown for 10 seconds.
NOTE:
* Password requirements are always presented in the frontend
as guidelines but validations are not enforced.
It was a joint decision with the backend team not to expose
whether the web_validation is active on the platform.
* If the web_validation is active, the backend will respond
with a 422 and the error message will describe the missed
password requirements.
Change-Id: Ic8b34980ff3099712f72042294409a2eb8e9347f
Accessing directly the state with store.platformInfo.type returns
undefined. We replace the line with a getter.
Change-Id: Ic74d233ce67ffdf80e7f75e2976e523c6646fb41
After having added license check is some of the CSC pages
we noticed that CSC call page cannot be accessed anymore
by CE users.
This commit fix this issue and also address a typo in the
required license to access the fax pages.
Change-Id: Ifc6cfa9b41cd53417da43f44a736076b82fcc9cb
Add translations for the error message shown when license is invalid
and fix a small bug in the router guard, in fact we were checking
the licenses list against the attribute which are different values.
Change-Id: Ic595f731cd770f932e30fe9b649d68bcc3af7119
Following the changes about the licenses, some API will now
return a "403 - License not available" error when the needed
license is not available to the user. In the frontend we handle
the licenses with two levels of protection:
1) We hide menus of missing licenses from the sidebar
2) We add a guard in boot/routes.js that would redirect to the
homepage any attempts to access the mentioned menus, in case
they are mistakenly shown.
Change-Id: I9e88473ee90935db9b2a234ff03aef1b3a44a97b
With the creation of the Customer Preferences Page we add the possibility for the subscriber's administrator to view and edit some of the preferences that are applied customer's wide.
We also refactored $errMsg, the function that handles validation error messages globally.
The reviewed function displays the error text based on the errorMessages methods in src/validators/index.js
Change-Id: Ic9a1b2eab9b71255026447a690d3426097cbaf93
In case of 183 session progress the CSC never stop
playing fake ringing sound, even if the call is connected.
Change-Id: I72bbecaf762581f5562ff95d17bd2606903f97da
NOTE: please AR carefully as the change affects every CSC request
Additions:
After testing the approach of rewriting the url property of the request object, problems appeared. The library vue-resource considers the url property actually as url path and not as the entire url. This is clearly a misleading naming in vue-resource. But for query params it offers the params object.
Change-Id: I27ca475df9ae8cde487907a0e341984e9c384241
- Enable and disable camera during the call
- Enable and disable screen during the call
- Switch from camera to screen and back
- Send in-band DTMF
- Send "603 Decline" on termination
Change-Id: Ife56ca49cadade44ee9b70b77b3f345b262be9d9
AC:
* align config approach with AUI application
* apply the standard way of injecting configuration through boot files.
* removed some files which are already part of RTC CDK and not used in CSC anymore
Note: you have to move your personal "src/config.js" to "src/config/app.js" manually in your working folder.
Change-Id: If5a615f0691631e4410e6780a025fed54133147b
- If token is valid the related user is logged in automatically
- Existing user (JWT) in the same browser context gets overwritten
- If token is invalid user lands on login page
- Token is removed from URL after it was processed
Change-Id: Ied1266178281bd10420594ceca3cbd4b84e1490d
Steps to reproduce:
* open broser settings and set any language which is not supported by CSC yet. You can chech that it was applied by executing "navigator.language" in the browser console.
* clean session storage for the CSC
* refresh the page.
** result before the fix: language selector are not displayed
** Expected result: language selector is present and language set to Englist (because it is defined as default language in CSC)
Change-Id: I2d53e649e14e3d82e2a5c1be4f99168971cd258c
NOTE
Affected routes/modules:
- /call-blocking/incoming by 'block_in_clir', 'block_in_mode', 'block_in_list'
- /call-blocking/outgoing by 'block_out_mode', 'block_out_list'
- /call-blocking/privacy by 'clir'
- /call-settings by 'music_on_hold', 'language'
- /pbx-settings by 'clir_intrapbx'
When the controlling profile attribute(s) are all unchecked, the module should disappear from CSC main menu and the route should not be reachable.
For AR, in AUI you need to create a Subscriber Profile with at least one Profile, and assign the newly created profile to the subscriber via Details > Master Data.
Change-Id: Idadcc096643fe58419682042814d3508c015b464
AC:
Can click on a main menu point to open Subscriber management
Can see a page opening and loading the page from v1 within v2
Note, to test it locally:
1. you need to create the "quasar.conf.dev.js" file with content like
module.exports = {
public: '',
publicPath: '/v2/',
proxyAPI2localhost: true,
proxyAPIFromURL: 'https://dev-web3-trunk.mgm.sipwise.com'
}
2. "src/config.js" should have
baseHttpUrl: '',
3. to login into system you have to use "username@domain" login !!!
Change-Id: I3af7caeb242a52e573d87c50fe05c9462f95bfb3
Fixed:
* translations for the first item in main menu "Start new call"
* fixed not translated page titles and back button in browser history
* fixed route for 404 page
* fixed intermittent issues with history by switching to Meta plugin instead of direc "document.title" call (bug was next: sometimes you can see current page in the history list as a previous route). It's the same solution that we have in AUI
Change-Id: Iea95e11911a76a5778fefe8320fc39f1934f8a6d
NOTE
- You need to install backend PPA if not yet merged ngcp-ppa gerrit_TT122001_review49995
- For AR testing the feature, in adminUI you have to:
1. create a Subscriber profile set
2. add two profiles, one with reminder attribute checked
3. go to Subscriber > Details > Master Data > Edit and select the newly created profileset and the profile with Reminder attribute checked
4. login with the edited subscriber and check that you are able to access Reminder module either from left menu and via url
5. change the created subscriber profile set selecting the second profile (the one without reminder attribute)
6. refresh CSC and check if Reminder is gone in left menu, and if trying to access the route via url you are redirected to /
7. try to unassign the profile set from the subscriber, reload CSC and check that scenario of previous point happens
Change-Id: I6a09e6764a8a1cd9abd31ad7cb3d1df11d1b5953
AC:
Can see the custom primary and secondary color if it is set
Can see the standard colours if not set
Change-Id: Iac09886d1442c145d448e1d0431bf37f1b409f03
AC:
Can see all indentations in SFC, JS, CSS, HTML, JSON-Files as Spaces and not as Tabs
Can see the indentations configured in the corresponding .editorconfig
Can see the .eslintrc adjusted according to the new indentation
Can see 4 Spaces instead of Tabs as indentation
Modify "i18n:extract" tool configuration to use 4 spaces
Change-Id: I53cbda0ed3d9697d15beac7ab7f4ae675b33cba2
AC:
Can see the keys replaced by the actual english translation in the code
Can see the language files, including the english one, using the english translation as keys
Can see no more nested structure but flat a one only
Change-Id: I3c3fc18ff91d972cb592c8cab43b66da16193a1c
AC:
If not already exists:
Can see a separate main menu item "Fax Settings"
Can click the separate main menu item and land on a page "Fax Settings" (route=/user/fax-settings)
Can see settings if the feature enabled
Can decide either to use SecretKey or ACL to manage authentication
Can set a custom secret key/token
Can set the renew interval (never, daily, weekly, monthly)
Can see/read the "Last Secret Key Modify Time"
Can add email addresses to get notified about expired key (secret_renew_notify)
Can remove email addresses
Can add ACL Rule (email, ip, destination, use-regexp flag)
Can edit ACL Rule (email, ip, destination, use-regexp flag)
Can remove ACL Rule
Change-Id: I6bc25ab2f73d0dfae3fab224b11396ecdd17ab39
AC
Can select a language from a list of given languages
Can persist the preferred language
Can reset the language to "Domain default"
Change-Id: Ic1824a91b5a04e2b7ddb2c2ec4a89712e278ca2f
AC:
Can add forwarding
Can alter forwarding
Can remove forwarding
Can enable forwarding
Can disable forwarding
Can enable that primary number rings
Can disable that primary number rings
Can forward to Number
Can forward to Voicebox
Can forward to Fax2Mail
Can forward to ManagerSecretary
Can forward to Conference
Can create SourceSet
Can assign number to SourceSet
Can remove number from SourceSet
Can change name of the SourceSet
Can search for existing SourceSets
Can assign an existing SourceSet
Can assign TimeSet (Date)
Can delete TimeSet (Date)
Can assign TimeSet (Date range)
Can delete TimeSet (Date range)
Can assign TimeSet (Weekdays)
Can delete TimeSet (Weekdays)
Can assign TimeSet (Office Hours)
Can delete TimeSet (Office Hours)
Change-Id: If5e5267e229a20947e0278212f59349d9e2eb7be
AC:
Can manage loading states without implementing boilerplate store code
Can use the Vue.$wait plugin in the context of a vue component
Can start a loading context with $wait.start('loading-context')
Can check the loading state of a context with $wait.is('loading-context')
Can end a loading context with $wait.end('loading-context')
Sources:
https://github.com/f/vue-wait
Change-Id: I4318729e5193bc362b4f13186d3f2f16dac90e8b
- Can click password recovery button/link
- Can request recovery mail by input mail address and confirm
- Can set new password after forwarded from recovery mail
For AR:
- click on Forgot Password in CSC login screen
- after submitting, login into mysql in your development env and execute
'select * from billing.password_resets;'
- copy the most recent uuid
- go to localhost:8080/#/recoverpassword?token=uuid and
proceed with password reset
Change-Id: Iff10165f98daa65a0ac85ec55c5d62926513fe0d