mirror of
https://github.com/getredash/redash.git
synced 2026-05-08 18:02:18 -04:00
232 lines
7.0 KiB
JavaScript
232 lines
7.0 KiB
JavaScript
(function () {
|
|
var dateFormatter = function (value) {
|
|
if (!value) {
|
|
return "-";
|
|
}
|
|
|
|
return value.format(clientConfig.dateTimeFormat);
|
|
};
|
|
|
|
var QuerySearchCtrl = function($scope, $location, $filter, Events, Query) {
|
|
$scope.$parent.pageTitle = "Queries Search";
|
|
|
|
$scope.gridConfig = {
|
|
isPaginationEnabled: true,
|
|
itemsByPage: 50,
|
|
maxSize: 8,
|
|
};
|
|
|
|
$scope.gridColumns = [
|
|
{
|
|
"label": "Name",
|
|
"map": "name",
|
|
"cellTemplateUrl": "/views/queries_query_name_cell.html"
|
|
},
|
|
{
|
|
'label': 'Created By',
|
|
'map': 'user.name'
|
|
},
|
|
{
|
|
'label': 'Created At',
|
|
'map': 'created_at',
|
|
'formatFunction': dateFormatter
|
|
},
|
|
{
|
|
'label': 'Update Schedule',
|
|
'map': 'schedule',
|
|
'formatFunction': function (value) {
|
|
return $filter('scheduleHumanize')(value);
|
|
}
|
|
}
|
|
];
|
|
|
|
$scope.queries = [];
|
|
$scope.$parent.term = $location.search().q;
|
|
|
|
Query.search({q: $scope.term }, function(results) {
|
|
$scope.queries = _.map(results, function(query) {
|
|
query.created_at = moment(query.created_at);
|
|
return query;
|
|
});
|
|
});
|
|
|
|
$scope.search = function() {
|
|
if (!angular.isString($scope.term) || $scope.term.trim() == "") {
|
|
$scope.queries = [];
|
|
return;
|
|
}
|
|
|
|
$location.search({q: $scope.term});
|
|
};
|
|
|
|
Events.record(currentUser, "search", "query", "", {"term": $scope.term});
|
|
};
|
|
|
|
var QueriesCtrl = function ($scope, $http, $location, $filter, Query) {
|
|
var loader;
|
|
|
|
$scope.queries = [];
|
|
$scope.page = parseInt($location.search().page || 1);
|
|
$scope.total = undefined;
|
|
$scope.pageSize = 25;
|
|
|
|
function loadQueries(resource, defaultOptions) {
|
|
return function(options) {
|
|
options = _.extend({}, defaultOptions, options);
|
|
resource(options, function (queries) {
|
|
$scope.totalQueriesCount = queries.count;
|
|
$scope.queries = _.map(queries.results, function (query) {
|
|
query.created_at = moment(query.created_at);
|
|
query.retrieved_at = moment(query.retrieved_at);
|
|
return query;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
switch($location.path()) {
|
|
case '/queries':
|
|
$scope.$parent.pageTitle = "Queries";
|
|
// page title
|
|
loader = loadQueries(Query.query);
|
|
break;
|
|
case '/queries/drafts':
|
|
$scope.$parent.pageTitle = "Drafts";
|
|
loader = loadQueries(Query.myQueries, {drafts: true});
|
|
break;
|
|
case '/queries/my':
|
|
$scope.$parent.pageTitle = "My Queries";
|
|
loader = loadQueries(Query.myQueries);
|
|
break;
|
|
}
|
|
|
|
var loadAllQueries = loadQueries(Query.query);
|
|
var loadMyQueries = loadQueries(Query.myQueries);
|
|
|
|
function load() {
|
|
var options = {page: $scope.page, page_size: $scope.pageSize};
|
|
loader(options);
|
|
}
|
|
|
|
$scope.selectPage = function(page) {
|
|
$location.search('page', page);
|
|
$scope.page = page;
|
|
load();
|
|
}
|
|
|
|
$scope.tabs = [
|
|
{"name": "My Queries", "path": "queries/my", loader: loadMyQueries},
|
|
{"path": "queries", "name": "All Queries", isActive: function(path) {
|
|
return path === '/queries';
|
|
}, "loader": loadAllQueries},
|
|
{"path": "queries/drafts", "name": "Drafts", loader: loadMyQueries},
|
|
];
|
|
|
|
load();
|
|
}
|
|
|
|
var MainCtrl = function ($scope, $location, Dashboard) {
|
|
$scope.$on("$routeChangeSuccess", function (event, current, previous, rejection) {
|
|
if ($scope.showPermissionError) {
|
|
$scope.showPermissionError = false;
|
|
}
|
|
});
|
|
|
|
$scope.$on("$routeChangeError", function (event, current, previous, rejection) {
|
|
if (rejection.status === 403) {
|
|
$scope.showPermissionError = true;
|
|
}
|
|
});
|
|
|
|
$scope.location = String(document.location);
|
|
$scope.version = clientConfig.version;
|
|
$scope.newVersionAvailable = clientConfig.newVersionAvailable && currentUser.hasPermission("admin");
|
|
|
|
$scope.newDashboard = {
|
|
'name': null,
|
|
'layout': null
|
|
}
|
|
};
|
|
|
|
var IndexCtrl = function ($scope, Events, Dashboard, Query) {
|
|
Events.record(currentUser, "view", "page", "personal_homepage");
|
|
$scope.$parent.pageTitle = "Home";
|
|
|
|
$scope.recentQueries = Query.recent();
|
|
$scope.recentDashboards = Dashboard.recent();
|
|
};
|
|
|
|
// Controller for modal window share_permissions, works for both query and dashboards, needs apiAccess set in scope
|
|
var SharePermissionsCtrl = function ($scope, $http, $modalInstance, User) {
|
|
$scope.grantees = [];
|
|
$scope.newGrantees = {};
|
|
|
|
// List users that are granted permissions
|
|
var loadGrantees = function() {
|
|
$http.get($scope.apiAccess).success(function(result) {
|
|
$scope.grantees = [];
|
|
for(var access_type in result) {
|
|
result[access_type].forEach(function(grantee) {
|
|
var item = grantee;
|
|
item['access_type'] = access_type;
|
|
$scope.grantees.push(item);
|
|
})
|
|
}
|
|
});
|
|
};
|
|
|
|
loadGrantees();
|
|
|
|
// Search for user
|
|
$scope.findUser = function(search) {
|
|
if (search == "") {
|
|
return;
|
|
}
|
|
|
|
if ($scope.foundUsers === undefined) {
|
|
User.query(function(users) {
|
|
var existingIds = _.map($scope.grantees, function(m) { return m.id; });
|
|
_.each(users, function(user) { user.alreadyGrantee = _.contains(existingIds, user.id); });
|
|
$scope.foundUsers = users;
|
|
});
|
|
}
|
|
};
|
|
|
|
// Add new user to grantees list
|
|
$scope.addGrantee = function(user) {
|
|
$scope.newGrantees.selected = undefined;
|
|
var body = {'access_type': 'modify', 'user_id': user.id};
|
|
$http.post($scope.apiAccess, body).success(function() {
|
|
user.alreadyGrantee = true;
|
|
loadGrantees();
|
|
});
|
|
};
|
|
|
|
// Remove user from grantees list
|
|
$scope.removeGrantee = function(user) {
|
|
var body = {'access_type': 'modify', 'user_id': user.id};
|
|
$http({ url: $scope.apiAccess, method: 'DELETE',
|
|
data: body, headers: {"Content-Type": "application/json"}
|
|
}).success(function() {
|
|
$scope.grantees = _.filter($scope.grantees, function(m) { return m != user });
|
|
|
|
if ($scope.foundUsers) {
|
|
_.each($scope.foundUsers, function(u) { if (u.id == user.id) { u.alreadyGrantee = false }; });
|
|
}
|
|
});
|
|
};
|
|
|
|
$scope.close = function() {
|
|
$modalInstance.close();
|
|
}
|
|
};
|
|
|
|
|
|
angular.module('redash.controllers', [])
|
|
.controller('QueriesCtrl', ['$scope', '$http', '$location', '$filter', 'Query', QueriesCtrl])
|
|
.controller('IndexCtrl', ['$scope', 'Events', 'Dashboard', 'Query', IndexCtrl])
|
|
.controller('MainCtrl', ['$scope', '$location', 'Dashboard', MainCtrl])
|
|
.controller('QuerySearchCtrl', ['$scope', '$location', '$filter', 'Events', 'Query', QuerySearchCtrl])
|
|
.controller('SharePermissionsCtrl', ['$scope', '$http', '$modalInstance', 'User', SharePermissionsCtrl]);
|
|
})();
|