TeaWeb/shared/js/ui/modal/ModalGroupAssignment.ts

81 lines
3.5 KiB
TypeScript
Raw Normal View History

2018-09-30 21:50:59 +02:00
namespace Modals {
2019-08-21 10:00:01 +02:00
let current_modal: Modal;
2019-09-19 01:25:57 +02:00
export function createServerGroupAssignmentModal(client: ClientEntry, callback: (groups: number[], flag: boolean) => Promise<boolean>) {
2019-08-21 10:00:01 +02:00
if(current_modal)
current_modal.close();
current_modal = createModal({
header: tr("Server Groups"),
2018-09-30 21:50:59 +02:00
body: () => {
let tag: any = {};
let groups = tag["groups"] = [];
2019-08-21 10:00:01 +02:00
tag["client"] = client.createChatTag();
const _groups = client.channelTree.client.groups.serverGroups.sort(GroupManager.sorter());
for(let group of _groups) {
2018-09-30 21:50:59 +02:00
if(group.type != GroupType.NORMAL) continue;
let entry = {} as any;
entry["id"] = group.id;
entry["name"] = group.name;
entry["disabled"] = !client.channelTree.client.permissions.neededPermission(PermissionType.I_GROUP_MEMBER_ADD_POWER).granted(group.requiredMemberRemovePower);
2019-08-21 10:00:01 +02:00
entry["default"] = client.channelTree.server.properties.virtualserver_default_server_group == group.id;
2018-09-30 21:50:59 +02:00
tag["icon_" + group.id] = client.channelTree.client.fileManager.icons.generateTag(group.properties.iconid);
groups.push(entry);
}
let template = $("#tmpl_server_group_assignment").renderTag(tag);
2019-09-19 01:25:57 +02:00
const update_groups = () => {
for(let group of _groups) {
template.find("input[group-id='" + group.id + "']").prop("checked", client.groupAssigned(group));
}
};
2018-09-30 21:50:59 +02:00
template.find(".group-entry input").each((_idx, _entry) => {
let entry = $(_entry);
entry.on('change', event => {
let group_id = parseInt(entry.attr("group-id"));
let group = client.channelTree.client.groups.serverGroup(group_id);
if(!group) {
console.warn(tr("Could not resolve target group!"));
2018-09-30 21:50:59 +02:00
return false;
}
let target = entry.prop("checked");
2019-09-19 01:25:57 +02:00
callback([group.id], target).catch(e => { log.warn(LogCategory.GENERAL, tr("Failed to change group assignment: %o"), e)}).then(update_groups);
2018-09-30 21:50:59 +02:00
});
});
2019-08-21 10:00:01 +02:00
template.find(".button-close").on('click', () => current_modal.close());
template.find(".button-remove-all").on('click', () => {
2019-09-19 01:25:57 +02:00
const group_ids = [];
2019-08-21 10:00:01 +02:00
template.find(".group-entry input").each((_idx, _entry) => {
let entry = $(_entry);
if(entry.attr("default") !== undefined || !entry.prop("checked"))
return;
2018-09-30 21:50:59 +02:00
2019-09-19 01:25:57 +02:00
group_ids.push(parseInt(entry.attr("group-id")));
2019-08-21 10:00:01 +02:00
});
2019-09-19 01:25:57 +02:00
callback(group_ids, false).catch(e => { log.warn(LogCategory.GENERAL, tr("Failed to remove all group assignments: %o"), e)}).then(update_groups);
2019-08-21 10:00:01 +02:00
});
2019-09-19 01:25:57 +02:00
update_groups();
2019-08-21 10:00:01 +02:00
return template;
2018-09-30 21:50:59 +02:00
},
2019-08-21 10:00:01 +02:00
footer: null,
2019-09-19 01:25:57 +02:00
min_width: "10em"
2018-09-30 21:50:59 +02:00
});
2019-08-21 10:00:01 +02:00
current_modal.htmlTag.find(".modal-body").addClass("modal-server-group-assignments");
current_modal.close_listener.push(() => current_modal = undefined);
current_modal.open();
2018-09-30 21:50:59 +02:00
}
}