define(["loading", "dom", "globalize", "humanedate", "paper-icon-button-light", "cardStyle", "emby-linkbutton", "indicators", "flexStyles"], function(loading, dom, globalize) {
"use strict";
function deleteUser(page, id) {
var msg = globalize.translate("DeleteUserConfirmation");
require(["confirm"], function(confirm) {
confirm({
title: globalize.translate("DeleteUser"),
text: msg,
confirmText: globalize.translate("ButtonDelete"),
primary: "cancel"
}).then(function() {
loading.show(), ApiClient.deleteUser(id).then(function() {
loadData(page)
})
})
})
}
function showUserMenu(elem) {
var card = dom.parentWithClass(elem, "card"),
page = dom.parentWithClass(card, "page"),
userId = card.getAttribute("data-userid"),
menuItems = [];
menuItems.push({
name: globalize.translate("ButtonOpen"),
id: "open",
ironIcon: "mode-edit"
}), menuItems.push({
name: globalize.translate("ButtonLibraryAccess"),
id: "access",
ironIcon: "lock"
}), menuItems.push({
name: globalize.translate("ButtonParentalControl"),
id: "parentalcontrol",
ironIcon: "person"
}), menuItems.push({
name: globalize.translate("ButtonDelete"),
id: "delete",
ironIcon: "delete"
}), require(["actionsheet"], function(actionsheet) {
actionsheet.show({
items: menuItems,
positionTo: card,
callback: function(id) {
switch (id) {
case "open":
Dashboard.navigate("useredit.html?userId=" + userId);
break;
case "access":
Dashboard.navigate("userlibraryaccess.html?userId=" + userId);
break;
case "parentalcontrol":
Dashboard.navigate("userparentalcontrol.html?userId=" + userId);
break;
case "delete":
deleteUser(page, userId)
}
}
})
})
}
function getUserHtml(user, addConnectIndicator) {
var html = "",
cssClass = "card squareCard scalableCard squareCard-scalable";
user.Policy.IsDisabled && (cssClass += " grayscale"), html += "
", html += '
', html += '
', html += '
', html += '
';
var imgUrl;
user.PrimaryImageTag && (imgUrl = ApiClient.getUserImageUrl(user.Id, {
width: 300,
tag: user.PrimaryImageTag,
type: "Primary"
}));
var imageClass = "cardImage";
user.Policy.IsDisabled && (imageClass += " disabledUser"), imgUrl ? html += '" : (html += '
', html += '
person'), user.ConnectUserId && addConnectIndicator && (html += '
'), html += "
", html += "", html += "
", html += '", html += "", html += "
"
}
function getLastSeenText(lastActivityDate) {
return lastActivityDate ? "Last seen " + humane_date(lastActivityDate) : ""
}
function getUserSectionHtml(users, addConnectIndicator) {
var html = "";
return html += users.map(function(u) {
return getUserHtml(u, addConnectIndicator)
}).join("")
}
function renderUsers(page, users) {
page.querySelector(".localUsers").innerHTML = getUserSectionHtml(users, !0)
}
function showPendingUserMenu(elem) {
var menuItems = [];
menuItems.push({
name: globalize.translate("ButtonCancel"),
id: "delete",
ironIcon: "delete"
}), require(["actionsheet"], function(actionsheet) {
var card = dom.parentWithClass(elem, "card"),
page = dom.parentWithClass(card, "page"),
id = card.getAttribute("data-id");
actionsheet.show({
items: menuItems,
positionTo: card,
callback: function(menuItemId) {
switch (menuItemId) {
case "delete":
cancelAuthorization(page, id)
}
}
})
})
}
function getPendingUserHtml(user) {
var html = "";
html += "
", html += '
', html += '
", html += '", html += "
", html += "
"
}
function renderPendingGuests(page, users) {
users.length ? page.querySelector(".sectionPendingGuests").classList.remove("hide") : page.querySelector(".sectionPendingGuests").classList.add("hide");
var html = users.map(getPendingUserHtml).join("");
page.querySelector(".pending").innerHTML = html
}
function cancelAuthorization(page, id) {
loading.show(), ApiClient.ajax({
type: "DELETE",
url: ApiClient.getUrl("Connect/Pending", {
Id: id
})
}).then(function() {
loadData(page)
})
}
function loadData(page) {
loading.show(), ApiClient.getUsers().then(function(users) {
renderUsers(page, users), loading.hide()
}), ApiClient.getJSON(ApiClient.getUrl("Connect/Pending")).then(function(pending) {
renderPendingGuests(page, pending)
})
}
function showLinkUser(page, userId) {
require(["components/guestinviter/connectlink"], function(connectlink) {
connectlink.show().then(function() {
loadData(page)
})
})
}
function showInvitePopup(page) {
Dashboard.getCurrentUser().then(function(user) {
if (!user.ConnectUserId) return void showLinkUser(page, user.Id);
require(["components/guestinviter/guestinviter"], function(guestinviter) {
guestinviter.show().then(function() {
loadData(page)
})
})
})
}
function showNewUserDialog(e) {
require(["dialog"], function(dialog) {
var items = [];
items.push({
name: globalize.translate("HeaderAddLocalUser"),
id: "manual",
type: "submit",
description: globalize.translate("AddUserByManually")
}), items.push({
name: globalize.translate("HeaderInviteWithEmbyConnect"),
id: "invite",
description: globalize.translate("InviteAnEmbyConnectUser")
}), items.push({
name: globalize.translate("sharedcomponents#ButtonCancel"),
id: "cancel",
type: "cancel"
});
var options = {
title: globalize.translate("ButtonAddUser"),
text: globalize.translate("HowWouldYouLikeToAddUser")
};
return options.buttons = items, dialog(options).then(function(result) {
var view = dom.parentWithClass(e.target, "page");
"invite" === result ? showInvitePopup(view) : "manual" === result && Dashboard.navigate("usernew.html")
})
})
}
pageIdOn("pageinit", "userProfilesPage", function() {
var page = this;
page.querySelector(".btnAddUser").addEventListener("click", showNewUserDialog), page.querySelector(".localUsers").addEventListener("click", function(e) {
var btnUserMenu = dom.parentWithClass(e.target, "btnUserMenu");
btnUserMenu && showUserMenu(btnUserMenu)
}), page.querySelector(".pending").addEventListener("click", function(e) {
var btnUserMenu = dom.parentWithClass(e.target, "btnUserMenu");
btnUserMenu && showPendingUserMenu(btnUserMenu)
})
}), pageIdOn("pagebeforeshow", "userProfilesPage", function() {
loadData(this)
})
});