JSFiddle - React, Tailwind, and code Playground
HTML
<section id="users">
<h3>
Users
</h3>
<label>View</label>
<input type="checkbox" value="view" data-group="users" />
<label>Edit</label>
<input type="checkbox" value="edit" data-group="users" />
<label>Manage</label>
<input type="checkbox" value="manage" data-group="users" />
</section>
<section id="library">
<h3>
Library
</h3>
<label>View</label>
<input type="checkbox" value="view" data-group="library" />
<label>Edit</label>
<input type="checkbox" value="edit" data-group="library" />
<label>Lend</label>
<input type="checkbox" value="lend" data-group="library" />
<label>Manage</label>
<input type="checkbox" value="manage" data-group="library" />
</section>
<section id="textBooks">
<h3>
Text Books
</h3>
<label>View</label>
<input type="checkbox" value="view" data-group="textBooks" />
<label>Edit</label>
<input type="checkbox" value="edit" data-group="textBooks" />
<label>Lend</label>
<input type="checkbox" value="lend" data-group="textBooks" />
<label>Manage</label>
<input type="checkbox" value="manage" data-group="textBooks" />
</section>
<section id="teacherBooks">
<h3>
Teacher Books
</h3>
<label>View</label>
<input type="checkbox" value="view" data-group="teacherBooks" />
<label>Edit</label>
<input type="checkbox" value="edit" data-group="teacherBooks" />
<label>Lend</label>
<input type="checkbox" value="lend" data-group="teacherBooks" />
<label>Manage</label>
<input type="checkbox" value="manage" data-group="teacherBooks" />
</section>
CSS
section {
display: block;
}
label,
input {
display: inline-block;
}
JavaScript
$(function() {
const ruleSet = [{
checked: "manage",
checkAndDisable: ["view", "edit", "lend"]
},
{
checked: "view",
checkAndDisable: []
},
{
checked: "edit",
checkAndDisable: ["view"]
},
{
checked: "lend",
checkAndDisable: ["view", "edit"]
}
];
const toggleElementsCheck = (elements, toggle) => {
elements.each(function() {
$(this).prop("checked", toggle);
})
};
const toggleElementsDisable = (elements, toggle) => {
elements.each(function() {
$(this).prop("disabled", toggle);
})
};
$("input[type=checkbox]").on("click", function() {
const group = $(this).data("group");
const checkboxes = $("input[data-group=" + group + "]").not($(this));
const value = $(this).val();
const rule = ruleSet.find(x => x.checked === value);
const checkAndDisable = rule.checkAndDisable;
const isChecked = $(this).is(":checked");
$(checkboxes).each(function() {
let value = $(this).val();
let toggle = checkAndDisable.includes(value);
toggleElementsCheck($(this), isChecked ? toggle : false);
toggleElementsDisable($(this), isChecked ? toggle : false);
});
});
});