1
0
mirror of https://github.com/flarum/core.git synced 2025-08-12 19:34:18 +02:00

update: admin/components/PermissionDropdown

This commit is contained in:
Alexander Skvortsov
2020-08-10 19:56:22 -04:00
committed by Franz Liedke
parent f611a44a08
commit f9b1dfe499

View File

@@ -32,101 +32,109 @@ function filterByRequiredPermissions(groupIds, permission) {
} }
export default class PermissionDropdown extends Dropdown { export default class PermissionDropdown extends Dropdown {
static initProps(props) { initAttrs(attrs) {
super.initProps(props); super.initAttrs(attrs);
props.className = 'PermissionDropdown'; attrs.className = 'PermissionDropdown';
props.buttonClassName = 'Button Button--text'; attrs.buttonClassName = 'Button Button--text';
} }
view() { view(vnode) {
this.props.children = []; vnode.children = [];
let groupIds = app.data.permissions[this.props.permission] || []; let groupIds = app.data.permissions[this.attrs.permission] || [];
groupIds = filterByRequiredPermissions(groupIds, this.props.permission); groupIds = filterByRequiredPermissions(groupIds, this.attrs.permission);
const everyone = groupIds.indexOf(Group.GUEST_ID) !== -1; const everyone = groupIds.indexOf(Group.GUEST_ID) !== -1;
const members = groupIds.indexOf(Group.MEMBER_ID) !== -1; const members = groupIds.indexOf(Group.MEMBER_ID) !== -1;
const adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID); const adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID);
if (everyone) { if (everyone) {
this.props.label = Badge.component({ icon: 'fas fa-globe' }); this.attrs.label = Badge.component({ icon: 'fas fa-globe' });
} else if (members) { } else if (members) {
this.props.label = Badge.component({ icon: 'fas fa-user' }); this.attrs.label = Badge.component({ icon: 'fas fa-user' });
} else { } else {
this.props.label = [badgeForId(Group.ADMINISTRATOR_ID), groupIds.map(badgeForId)]; this.attrs.label = [badgeForId(Group.ADMINISTRATOR_ID), groupIds.map(badgeForId)];
} }
if (this.showing) { if (this.showing) {
if (this.props.allowGuest) { if (this.attrs.allowGuest) {
this.props.children.push( vnode.children.push(
Button.component({ Button.component(
children: [Badge.component({ icon: 'fas fa-globe' }), ' ', app.translator.trans('core.admin.permissions_controls.everyone_button')], {
icon: everyone ? 'fas fa-check' : true, icon: everyone ? 'fas fa-check' : true,
onclick: () => this.save([Group.GUEST_ID]), onclick: () => this.save([Group.GUEST_ID]),
disabled: this.isGroupDisabled(Group.GUEST_ID), disabled: this.isGroupDisabled(Group.GUEST_ID),
}) },
[Badge.component({ icon: 'fas fa-globe' }), ' ', app.translator.trans('core.admin.permissions_controls.everyone_button')]
)
); );
} }
this.props.children.push( vnode.children.push(
Button.component({ Button.component(
children: [Badge.component({ icon: 'fas fa-user' }), ' ', app.translator.trans('core.admin.permissions_controls.members_button')], {
icon: members ? 'fas fa-check' : true, icon: members ? 'fas fa-check' : true,
onclick: () => this.save([Group.MEMBER_ID]), onclick: () => this.save([Group.MEMBER_ID]),
disabled: this.isGroupDisabled(Group.MEMBER_ID), disabled: this.isGroupDisabled(Group.MEMBER_ID),
}), },
[Badge.component({ icon: 'fas fa-user' }), ' ', app.translator.trans('core.admin.permissions_controls.members_button')]
),
Separator.component(), Separator.component(),
Button.component({ Button.component(
children: [badgeForId(adminGroup.id()), ' ', adminGroup.namePlural()], {
icon: !everyone && !members ? 'fas fa-check' : true, icon: !everyone && !members ? 'fas fa-check' : true,
disabled: !everyone && !members, disabled: !everyone && !members,
onclick: (e) => { onclick: (e) => {
if (e.shiftKey) e.stopPropagation(); if (e.shiftKey) e.stopPropagation();
this.save([]); this.save([]);
},
}, },
}) [badgeForId(adminGroup.id()), ' ', adminGroup.namePlural()]
)
); );
[].push.apply( [].push.apply(
this.props.children, vnode.children,
app.store app.store
.all('groups') .all('groups')
.filter((group) => [Group.ADMINISTRATOR_ID, Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1) .filter((group) => [Group.ADMINISTRATOR_ID, Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1)
.map((group) => .map((group) =>
Button.component({ Button.component(
children: [badgeForId(group.id()), ' ', group.namePlural()], {
icon: groupIds.indexOf(group.id()) !== -1 ? 'fas fa-check' : true, icon: groupIds.indexOf(group.id()) !== -1 ? 'fas fa-check' : true,
onclick: (e) => { onclick: (e) => {
if (e.shiftKey) e.stopPropagation(); if (e.shiftKey) e.stopPropagation();
this.toggle(group.id()); this.toggle(group.id());
},
disabled: this.isGroupDisabled(group.id()) && this.isGroupDisabled(Group.MEMBER_ID) && this.isGroupDisabled(Group.GUEST_ID),
}, },
disabled: this.isGroupDisabled(group.id()) && this.isGroupDisabled(Group.MEMBER_ID) && this.isGroupDisabled(Group.GUEST_ID), [badgeForId(group.id()), ' ', group.namePlural()]
}) )
) )
); );
} }
return super.view(); return super.view(vnode);
} }
save(groupIds) { save(groupIds) {
const permission = this.props.permission; const permission = this.attrs.permission;
app.data.permissions[permission] = groupIds; app.data.permissions[permission] = groupIds;
app.request({ app.request({
method: 'POST', method: 'POST',
url: app.forum.attribute('apiUrl') + '/permission', url: app.forum.attribute('apiUrl') + '/permission',
data: { permission, groupIds }, body: { permission, groupIds },
}); });
} }
toggle(groupId) { toggle(groupId) {
const permission = this.props.permission; const permission = this.attrs.permission;
let groupIds = app.data.permissions[permission] || []; let groupIds = app.data.permissions[permission] || [];
@@ -143,6 +151,6 @@ export default class PermissionDropdown extends Dropdown {
} }
isGroupDisabled(id) { isGroupDisabled(id) {
return filterByRequiredPermissions([id], this.props.permission).indexOf(id) === -1; return filterByRequiredPermissions([id], this.attrs.permission).indexOf(id) === -1;
} }
} }