Skip to content

Commit 2c5a64b

Browse files
author
Matthew Grill
committed
Cleanup permission grouping function. Checkboxes checked based on available permissions.
1 parent 57606ce commit 2c5a64b

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

src/components/05_pages/Permissions/Permissions.jsx

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ const Permissions = class Permissions extends Component {
1919
)
2020
.catch(console.error);
2121
}
22+
groupPermissions = permissions =>
23+
Object.entries(
24+
Object.keys(permissions)
25+
.map(key => permissions[key])
26+
.reduce((acc, cur) => {
27+
acc[cur.provider] = acc[cur.provider] || [];
28+
acc[cur.provider].push(cur);
29+
return acc;
30+
}, {}),
31+
);
2232
render() {
2333
return (
2434
<Fragment>
@@ -37,20 +47,12 @@ const Permissions = class Permissions extends Component {
3747
</tr>
3848
</thead>
3949
<tbody>
40-
{Object.entries(
41-
Object.keys(this.state.permissions)
42-
.map(key => this.state.permissions[key])
43-
.reduce((acc, cur) => {
44-
acc[cur.provider] = acc[cur.provider] || [];
45-
acc[cur.provider].push(cur);
46-
return acc;
47-
}, {}),
48-
).map(
50+
{this.groupPermissions(this.state.permissions).map(
4951
([permissionGroupName, permissions]) =>
5052
permissions.length && (
5153
<Fragment key={`fragment-${permissionGroupName}`}>
5254
<tr key={`permissionGroup-${permissionGroupName}`}>
53-
<td colSpan="3">
55+
<td colSpan={this.state.roles.length + 1}>
5456
<b>{permissionGroupName}</b>
5557
</td>
5658
</tr>
@@ -61,15 +63,25 @@ const Permissions = class Permissions extends Component {
6163
}`}
6264
>
6365
<td>{permission.title}</td>
64-
<td>
65-
<input type="checkbox" />
66-
</td>
67-
<td>
68-
<input type="checkbox" />
69-
</td>
70-
<td>
71-
<input type="checkbox" />
72-
</td>
66+
{this.state.roles.map(({ attributes }) => (
67+
<td
68+
key={`role-${attributes.id}-permission-${
69+
permission.id
70+
}`}
71+
>
72+
{attributes.is_admin &&
73+
attributes.id === 'administrator' ? (
74+
<input type="checkbox" checked />
75+
) : (
76+
<input
77+
type="checkbox"
78+
checked={attributes.permissions.includes(
79+
permission.id,
80+
)}
81+
/>
82+
)}
83+
</td>
84+
))}
7385
</tr>
7486
))}
7587
</Fragment>

0 commit comments

Comments
 (0)