diff options
Diffstat (limited to 'plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts')
-rw-r--r-- | plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts new file mode 100644 index 0000000000..b3438d2bb7 --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts @@ -0,0 +1,86 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { INgModelController, ITimeoutService } from 'angular'; +import createAngularJsAdapter from '../createAngularJsAdapter'; +import SiteSelector from './SiteSelector.vue'; +import Matomo from '../Matomo/Matomo'; + +export default createAngularJsAdapter<[ITimeoutService]>({ + component: SiteSelector, + require: '?ngModel', + scope: { + showSelectedSite: { + angularJsBind: '=', + }, + showAllSitesItem: { + angularJsBind: '=', + }, + switchSiteOnSelect: { + angularJsBind: '=', + }, + onlySitesWithAdminAccess: { + angularJsBind: '=', + }, + name: { + angularJsBind: '@', + }, + allSitesText: { + angularJsBind: '@', + }, + allSitesLocation: { + angularJsBind: '@', + }, + placeholder: { + angularJsBind: '@', + }, + modelValue: {}, + }, + $inject: ['$timeout'], + directiveName: 'piwikSiteselector', + events: { + 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel) => { + if ((newValue && !vm.modelValue) + || (!newValue && vm.modelValue) + || newValue.id !== vm.modelValue.id + ) { + element.attr('siteid', newValue.id); + element.trigger('change', newValue); + + if (ngModel) { + ngModel.$setViewValue(newValue); + } + } + }, + blur(event, vm, scope) { + setTimeout(() => scope.$apply()); + }, + }, + postCreate(vm, scope, element, attrs, controller, $timeout: ITimeoutService) { + const ngModel = controller as INgModelController; + + // setup ng-model mapping + if (ngModel) { + ngModel.$setViewValue(vm.modelValue); + + ngModel.$render = () => { + if (angular.isString(ngModel.$viewValue)) { + vm.modelValue = JSON.parse(ngModel.$viewValue); + } else { + vm.modelValue = ngModel.$viewValue; + } + }; + } + + $timeout(() => { + if (attrs.siteid && attrs.sitename) { + vm.modelValue = { id: attrs.siteid, name: Matomo.helper.htmlDecode(attrs.sitename) }; + ngModel.$setViewValue({ ...vm.modelValue }); + } + }); + }, +}); |