-
New playlist
-
Edit playlist
+
New playlist
+
Edit playlist
Name and interval
@@ -20,7 +20,7 @@
Name
-
+
@@ -31,7 +31,7 @@
Interval
-
+
@@ -50,10 +50,10 @@
+ ng-change="ctrl.search()">
@@ -64,20 +64,20 @@
-
Search results ({{filteredPlaylistItems.length}})
+
Search results ({{ctrl.filteredPlaylistItems.length}})
-
+
{{playlistItem.title}}
|
- |
-
+
Search results empty
|
@@ -87,18 +87,18 @@
Added dashboards
-
+
{{playlistItem.title}}
|
-
+
-
+
-
+
|
@@ -113,11 +113,11 @@
Save
+ ng-disabled="ctrl.playlistEditForm.$invalid || ctrl.isPlaylistEmpty()"
+ ng-click="ctrl.savePlaylist(ctrl.playlist, ctrl.playlistItems)">Save
Cancel
+ ng-click="ctrl.backToList()">Cancel
diff --git a/public/app/features/playlist/partials/playlists.html b/public/app/features/playlist/partials/playlists.html
index a8a4724b34c..4aa7944623c 100644
--- a/public/app/features/playlist/partials/playlists.html
+++ b/public/app/features/playlist/partials/playlists.html
@@ -19,7 +19,7 @@
|
-
+
{{playlist.name}}
|
@@ -39,7 +39,7 @@
-
+
|
diff --git a/public/app/features/playlist/playlist_edit_ctrl.js b/public/app/features/playlist/playlist_edit_ctrl.js
deleted file mode 100644
index 9b493c47d25..00000000000
--- a/public/app/features/playlist/playlist_edit_ctrl.js
+++ /dev/null
@@ -1,144 +0,0 @@
-define([
- 'angular',
- 'app/core/config',
- 'lodash'
-],
-function (angular, config, _) {
- 'use strict';
-
- var module = angular.module('grafana.controllers');
-
- module.controller('PlaylistEditCtrl', function($scope, playlistSrv, backendSrv, $location, $route) {
- $scope.filteredPlaylistItems = [];
- $scope.foundPlaylistItems = [];
- $scope.searchQuery = '';
- $scope.loading = false;
- $scope.playlist = {
- interval: '10m',
- };
- $scope.playlistItems = [];
-
- $scope.init = function() {
- if ($route.current.params.id) {
- var playlistId = $route.current.params.id;
-
- backendSrv.get('/api/playlists/' + playlistId)
- .then(function(result) {
- $scope.playlist = result;
- });
-
- backendSrv.get('/api/playlists/' + playlistId + '/items')
- .then(function(result) {
- $scope.playlistItems = result;
- });
- }
-
- $scope.search();
- };
-
- $scope.search = function() {
- var query = {limit: 10};
-
- if ($scope.searchQuery) {
- query.query = $scope.searchQuery;
- }
-
- $scope.loading = true;
-
- backendSrv.search(query)
- .then(function(results) {
- $scope.foundPlaylistItems = results;
- $scope.filterFoundPlaylistItems();
- })
- .finally(function() {
- $scope.loading = false;
- });
- };
-
- $scope.filterFoundPlaylistItems = function() {
- $scope.filteredPlaylistItems = _.reject($scope.foundPlaylistItems, function(playlistItem) {
- return _.findWhere($scope.playlistItems, function(listPlaylistItem) {
- return parseInt(listPlaylistItem.value) === playlistItem.id;
- });
- });
- };
-
- $scope.addPlaylistItem = function(playlistItem) {
- playlistItem.value = playlistItem.id.toString();
- playlistItem.type = 'dashboard_by_id';
- playlistItem.order = $scope.playlistItems.length + 1;
-
- $scope.playlistItems.push(playlistItem);
- $scope.filterFoundPlaylistItems();
- };
-
- $scope.removePlaylistItem = function(playlistItem) {
- _.remove($scope.playlistItems, function(listedPlaylistItem) {
- return playlistItem === listedPlaylistItem;
- });
- $scope.filterFoundPlaylistItems();
- };
-
- $scope.savePlaylist = function(playlist, playlistItems) {
- var savePromise;
-
- playlist.items = playlistItems;
-
- savePromise = playlist.id
- ? backendSrv.put('/api/playlists/' + playlist.id, playlist)
- : backendSrv.post('/api/playlists', playlist);
-
- savePromise
- .then(function() {
- $scope.appEvent('alert-success', ['Playlist saved', '']);
- $location.path('/playlists');
- }, function() {
- $scope.appEvent('alert-error', ['Unable to save playlist', '']);
- });
- };
-
- $scope.isNew = function() {
- return !$scope.playlist.id;
- };
-
- $scope.isPlaylistEmpty = function() {
- return !$scope.playlistItems.length;
- };
-
- $scope.isSearchResultsEmpty = function() {
- return !$scope.foundPlaylistItems.length;
- };
-
- $scope.isSearchQueryEmpty = function() {
- return $scope.searchQuery === '';
- };
-
- $scope.backToList = function() {
- $location.path('/playlists');
- };
-
- $scope.isLoading = function() {
- return $scope.loading;
- };
-
- $scope.movePlaylistItem = function(playlistItem, offset) {
- var currentPosition = $scope.playlistItems.indexOf(playlistItem);
- var newPosition = currentPosition + offset;
-
- if (newPosition >= 0 && newPosition < $scope.playlistItems.length) {
- $scope.playlistItems.splice(currentPosition, 1);
- $scope.playlistItems.splice(newPosition, 0, playlistItem);
- }
- };
-
- $scope.movePlaylistItemUp = function(playlistItem) {
- $scope.movePlaylistItem(playlistItem, -1);
- };
-
- $scope.movePlaylistItemDown = function(playlistItem) {
- $scope.movePlaylistItem(playlistItem, 1);
- };
-
- $scope.init();
- });
-});
diff --git a/public/app/features/playlist/playlist_edit_ctrl.ts b/public/app/features/playlist/playlist_edit_ctrl.ts
new file mode 100644
index 00000000000..f8f4a29fd5c
--- /dev/null
+++ b/public/app/features/playlist/playlist_edit_ctrl.ts
@@ -0,0 +1,141 @@
+///
+
+import angular from 'angular';
+import _ from 'lodash';
+import coreModule from '../../core/core_module';
+import config from 'app/core/config';
+
+export class PlaylistEditCtrl {
+ filteredPlaylistItems: any = [];
+ foundPlaylistItems: any = [];
+ searchQuery: string = '';
+ loading: boolean = false;
+ playlist: any = {
+ interval: '10m',
+ };
+ playlistItems: any = [];
+
+ /** @ngInject */
+ constructor(private $scope, private playlistSrv, private backendSrv, private $location, private $route) {
+ if ($route.current.params.id) {
+ var playlistId = $route.current.params.id;
+
+ backendSrv.get('/api/playlists/' + playlistId)
+ .then((result) => {
+ this.playlist = result;
+ });
+
+ backendSrv.get('/api/playlists/' + playlistId + '/items')
+ .then((result) => {
+ this.playlistItems = result;
+ });
+ }
+
+ this.search();
+ }
+
+ search() {
+ var query: any = {limit: 10};
+
+ if (this.searchQuery) {
+ query.query = this.searchQuery;
+ }
+
+ this.loading = true;
+
+ this.backendSrv.search(query)
+ .then((results) => {
+ this.foundPlaylistItems = results;
+ this.filterFoundPlaylistItems();
+ })
+ .finally(() => {
+ this.loading = false;
+ });
+ };
+
+ filterFoundPlaylistItems() {
+ this.filteredPlaylistItems = _.reject(this.foundPlaylistItems, (playlistItem) => {
+ return _.findWhere(this.playlistItems, (listPlaylistItem) => {
+ return parseInt(listPlaylistItem.value) === playlistItem.id;
+ });
+ });
+ };
+
+ addPlaylistItem(playlistItem) {
+ playlistItem.value = playlistItem.id.toString();
+ playlistItem.type = 'dashboard_by_id';
+ playlistItem.order = this.playlistItems.length + 1;
+
+ this.playlistItems.push(playlistItem);
+ this.filterFoundPlaylistItems();
+ };
+
+ removePlaylistItem(playlistItem) {
+ _.remove(this.playlistItems, (listedPlaylistItem) => {
+ return playlistItem === listedPlaylistItem;
+ });
+ this.filterFoundPlaylistItems();
+ };
+
+ savePlaylist(playlist, playlistItems) {
+ var savePromise;
+
+ playlist.items = playlistItems;
+
+ savePromise = playlist.id
+ ? this.backendSrv.put('/api/playlists/' + playlist.id, playlist)
+ : this.backendSrv.post('/api/playlists', playlist);
+
+ savePromise
+ .then(() => {
+ this.$scope.appEvent('alert-success', ['Playlist saved', '']);
+ this.$location.path('/playlists');
+ }, () => {
+ this.$scope.appEvent('alert-error', ['Unable to save playlist', '']);
+ });
+ };
+
+ isNew() {
+ return !this.playlist.id;
+ };
+
+ isPlaylistEmpty() {
+ return !this.playlistItems.length;
+ };
+
+ isSearchResultsEmpty() {
+ return !this.foundPlaylistItems.length;
+ };
+
+ isSearchQueryEmpty() {
+ return this.searchQuery === '';
+ };
+
+ backToList() {
+ this.$location.path('/playlists');
+ };
+
+ isLoading() {
+ return this.loading;
+ };
+
+ movePlaylistItem(playlistItem, offset) {
+ var currentPosition = this.playlistItems.indexOf(playlistItem);
+ var newPosition = currentPosition + offset;
+
+ if (newPosition >= 0 && newPosition < this.playlistItems.length) {
+ this.playlistItems.splice(currentPosition, 1);
+ this.playlistItems.splice(newPosition, 0, playlistItem);
+ }
+ };
+
+ movePlaylistItemUp(playlistItem) {
+ this.movePlaylistItem(playlistItem, -1);
+ };
+
+ movePlaylistItemDown(playlistItem) {
+ this.movePlaylistItem(playlistItem, 1);
+ };
+}
+
+coreModule.controller('PlaylistEditCtrl', PlaylistEditCtrl);
diff --git a/public/app/features/playlist/playlist_routes.js b/public/app/features/playlist/playlist_routes.js
index 2de1f7b30c8..a3f9cc26f8c 100644
--- a/public/app/features/playlist/playlist_routes.js
+++ b/public/app/features/playlist/playlist_routes.js
@@ -1,4 +1,4 @@
-define([
+ define([
'angular',
'app/core/config',
'lodash'
@@ -12,14 +12,17 @@ function (angular) {
$routeProvider
.when('/playlists', {
templateUrl: 'app/features/playlist/partials/playlists.html',
+ controllerAs: 'ctrl',
controller : 'PlaylistsCtrl'
})
.when('/playlists/create', {
templateUrl: 'app/features/playlist/partials/playlist.html',
+ controllerAs: 'ctrl',
controller : 'PlaylistEditCtrl'
})
.when('/playlists/edit/:id', {
templateUrl: 'app/features/playlist/partials/playlist.html',
+ controllerAs: 'ctrl',
controller : 'PlaylistEditCtrl'
})
.when('/playlists/play/:id', {
diff --git a/public/app/features/playlist/playlists_ctrl.js b/public/app/features/playlist/playlists_ctrl.js
deleted file mode 100644
index 375492e6772..00000000000
--- a/public/app/features/playlist/playlists_ctrl.js
+++ /dev/null
@@ -1,43 +0,0 @@
-define([
- 'angular',
- 'lodash'
-],
-function (angular, _) {
- 'use strict';
-
- var module = angular.module('grafana.controllers');
-
- module.controller('PlaylistsCtrl', function($scope, $location, backendSrv) {
- backendSrv.get('/api/playlists')
- .then(function(result) {
- $scope.playlists = result;
- });
-
- $scope.removePlaylistConfirmed = function(playlist) {
- _.remove($scope.playlists, {id: playlist.id});
-
- backendSrv.delete('/api/playlists/' + playlist.id)
- .then(function() {
- $scope.appEvent('alert-success', ['Playlist deleted', '']);
- }, function() {
- $scope.appEvent('alert-error', ['Unable to delete playlist', '']);
- $scope.playlists.push(playlist);
- });
- };
-
- $scope.removePlaylist = function(playlist) {
-
- $scope.appEvent('confirm-modal', {
- title: 'Confirm delete playlist',
- text: 'Are you sure you want to delete playlist ' + playlist.name + '?',
- yesText: "Delete",
- icon: "fa-warning",
- onConfirm: function() {
- $scope.removePlaylistConfirmed(playlist);
- }
- });
-
- };
-
- });
-});
diff --git a/public/app/features/playlist/playlists_ctrl.ts b/public/app/features/playlist/playlists_ctrl.ts
new file mode 100644
index 00000000000..af687a9698a
--- /dev/null
+++ b/public/app/features/playlist/playlists_ctrl.ts
@@ -0,0 +1,45 @@
+///
+
+import angular from 'angular';
+import _ from 'lodash';
+import coreModule from '../../core/core_module';
+
+export class PlaylistsCtrl {
+ playlists: any;
+
+ /** @ngInject */
+ constructor(private $scope, private $location, private backendSrv) {
+ backendSrv.get('/api/playlists')
+ .then((result) => {
+ this.playlists = result;
+ });
+ }
+
+ removePlaylistConfirmed(playlist) {
+ _.remove(this.playlists, { id: playlist.id });
+
+ this.backendSrv.delete('/api/playlists/' + playlist.id)
+ .then(() => {
+ this.$scope.appEvent('alert-success', ['Playlist deleted', '']);
+ }, () => {
+ this.$scope.appEvent('alert-error', ['Unable to delete playlist', '']);
+ this.playlists.push(playlist);
+ });
+ };
+
+ removePlaylist(playlist) {
+
+ this.$scope.appEvent('confirm-modal', {
+ title: 'Confirm delete playlist',
+ text: 'Are you sure you want to delete playlist ' + playlist.name + '?',
+ yesText: "Delete",
+ icon: "fa-warning",
+ onConfirm: () => {
+ this.removePlaylistConfirmed(playlist);
+ }
+ });
+
+ };
+}
+
+coreModule.controller('PlaylistsCtrl', PlaylistsCtrl);