Added functionality to the server group client list container
This commit is contained in:
parent
6647037a84
commit
136893c404
4 changed files with 145 additions and 15 deletions
|
@ -314,4 +314,56 @@ permission-editor {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-group-server {
|
||||||
|
.list-group-server { }
|
||||||
|
|
||||||
|
.permission-explorer {
|
||||||
|
flex-grow: 70;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-clients {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: stretch;
|
||||||
|
|
||||||
|
width: 175px;
|
||||||
|
min-width: 125px;
|
||||||
|
|
||||||
|
|
||||||
|
.container-filter {
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-list-clients {
|
||||||
|
flex-grow: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
|
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: auto;
|
||||||
|
|
||||||
|
border: grey solid 1px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.list-clients {
|
||||||
|
width: fit-content;
|
||||||
|
|
||||||
|
.entry {
|
||||||
|
white-space : nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 2px;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
background: blue;
|
||||||
|
color: whitesmoke;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -304,19 +304,6 @@ modal-body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-group-server {
|
|
||||||
.list-group-server { }
|
|
||||||
|
|
||||||
.permission-explorer {
|
|
||||||
flex-grow: 70;
|
|
||||||
}
|
|
||||||
|
|
||||||
.list-group-server-clients {
|
|
||||||
flex-grow: 0;
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.layout-channel, .layout-client-channel {
|
.layout-channel, .layout-client-channel {
|
||||||
.list-channel {
|
.list-channel {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
@ -1716,7 +1716,18 @@
|
||||||
<div class="horizontal-stretch">
|
<div class="horizontal-stretch">
|
||||||
<permission-editor class="group-server" />
|
<permission-editor class="group-server" />
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group-server-clients"></div>
|
<div class="container-clients">
|
||||||
|
<div class="container-filter">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="bmd-label-floating">{{tr "Search client" /}}</label>
|
||||||
|
<input type="text" class="form-control filter-client-list"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container-list-clients">
|
||||||
|
<div class="list-clients"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</x-content>
|
</x-content>
|
||||||
</x-entry>
|
</x-entry>
|
||||||
|
|
|
@ -1033,7 +1033,8 @@ namespace Modals {
|
||||||
b_virtualserver_playlist_permission_list
|
b_virtualserver_playlist_permission_list
|
||||||
*/
|
*/
|
||||||
function apply_server_groups(connection: ConnectionHandler, editor: PermissionEditor, tab_tag: JQuery) {
|
function apply_server_groups(connection: ConnectionHandler, editor: PermissionEditor, tab_tag: JQuery) {
|
||||||
let current_group;
|
let current_group: Group;
|
||||||
|
let current_group_changed;
|
||||||
|
|
||||||
/* list all groups */
|
/* list all groups */
|
||||||
let update_icon: (icon_id: number) => any;
|
let update_icon: (icon_id: number) => any;
|
||||||
|
@ -1066,8 +1067,13 @@ namespace Modals {
|
||||||
tag.appendTo(group_list);
|
tag.appendTo(group_list);
|
||||||
|
|
||||||
tag.on('click', event => {
|
tag.on('click', event => {
|
||||||
|
if(current_group === group)
|
||||||
|
return;
|
||||||
|
|
||||||
current_group = group;
|
current_group = group;
|
||||||
update_icon = _update_icon;
|
update_icon = _update_icon;
|
||||||
|
current_group_changed();
|
||||||
|
|
||||||
group_list.find(".selected").removeClass("selected");
|
group_list.find(".selected").removeClass("selected");
|
||||||
tag.addClass("selected");
|
tag.addClass("selected");
|
||||||
editor.trigger_update();
|
editor.trigger_update();
|
||||||
|
@ -1171,5 +1177,79 @@ namespace Modals {
|
||||||
editor.trigger_update();
|
editor.trigger_update();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* client list */
|
||||||
|
{
|
||||||
|
//filter-client-list
|
||||||
|
const container_clients = tab_tag.find(".container-clients");
|
||||||
|
const container_client_list = container_clients.find(".list-clients");
|
||||||
|
const input_filter = container_clients.find(".filter-client-list");
|
||||||
|
|
||||||
|
const update_filter = () => {
|
||||||
|
const filter_text = (input_filter.val() || "").toString().toLowerCase();
|
||||||
|
if(!filter_text) {
|
||||||
|
container_client_list.find(".entry").css('display', 'block');
|
||||||
|
} else {
|
||||||
|
const entries = container_client_list.find(".entry");
|
||||||
|
for(const _entry of entries) {
|
||||||
|
const entry = $(_entry);
|
||||||
|
if(entry.attr("search-string").toLowerCase().indexOf(filter_text) !== -1)
|
||||||
|
entry.css('display', 'block');
|
||||||
|
else
|
||||||
|
entry.css('display', 'none');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const update_client_list = () => {
|
||||||
|
container_client_list.empty();
|
||||||
|
|
||||||
|
connection.serverConnection.command_helper.request_clients_by_server_group(current_group.id).then(clients => {
|
||||||
|
for(const client of clients) {
|
||||||
|
const tag = $.spawn("div").addClass("entry").text(client.client_nickname);
|
||||||
|
tag.attr("search-string", client.client_nickname + "-" + client.client_unique_identifier + "-" + client.client_database_id);
|
||||||
|
container_client_list.append(tag);
|
||||||
|
|
||||||
|
tag.on('click contextmenu', event => {
|
||||||
|
container_client_list.find(".selected").removeClass("selected");
|
||||||
|
tag.addClass("selected");
|
||||||
|
});
|
||||||
|
|
||||||
|
tag.on('contextmenu', event => {
|
||||||
|
if(event.isDefaultPrevented())
|
||||||
|
return;
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
spawn_context_menu(event.pageX, event.pageY, {
|
||||||
|
type: MenuEntryType.ENTRY,
|
||||||
|
name: tr("Remove client"),
|
||||||
|
icon: 'client-delete',
|
||||||
|
callback: () => {
|
||||||
|
connection.serverConnection.send_command("servergroupdelclient", {
|
||||||
|
sgid: current_group.id,
|
||||||
|
cldbid: client.client_database_id
|
||||||
|
}).then(() => {
|
||||||
|
tag.detach();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
type: MenuEntryType.ENTRY,
|
||||||
|
name: tr("Copy unique id"),
|
||||||
|
icon: 'client-copy',
|
||||||
|
callback: () => copy_to_clipboard(client.client_unique_identifier)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
update_filter();
|
||||||
|
}).catch(error => {
|
||||||
|
if(error instanceof CommandResult && error.id === ErrorID.PERMISSION_ERROR)
|
||||||
|
return;
|
||||||
|
console.warn(tr("Failed to receive server group clients for group %d: %o"), current_group.id, error);
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
input_filter.on('change keyup', event => update_filter());
|
||||||
|
current_group_changed = update_client_list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue