Skip to main content

Select option presets messing up after manual select

I have a list of permissions in a <select> element, and three radio buttons to select presets, instead of seelcting permissions manually.

I use the same trigger function for all four elements, and the radio buttons work beautifully until you select something manually, and then they scre up completely.

I assume that it is my XOR if(selectItems.includes(option.value) ^ invert) ... that is clogging up the works, but when I do step-through debugging, it looks correct, but the result is not the expected one...

document.getElementById('userTypeAdminInhouse').addEventListener('change', selectScope);
document.getElementById('userTypeAdminClient').addEventListener('change', selectScope);
document.getElementById('userTypeUser').addEventListener('change', selectScope);
document.getElementById('scope').addEventListener('change', selectScope);

function selectScope(e) {
    let scopeSelect = document.getElementById('scope');
    let selectItems = [];
    let invert = false;
    if (e.target.id == 'userTypeUser') {
        //only this one permission
        selectItems = ['user:self']
    } else if (e.target.id == 'userTypeAdminClient') {
        selectItems = ['user:read', 'admin:read', 'stats:read']
    } else if (e.target.id == 'userTypeAdminInhouse') {
        invert = true;
        //all permissions except this one
        selectItems = ['user:self']
    } else if (e.target.id == 'scope') {
        document.getElementById('userTypeUser').checked = false;
        document.getElementById('userTypeAdminClient').checked = false;
        document.getElementById('userTypeAdminInhouse').checked = false;
    }
    if (selectItems.length > 0) {
        for (const option of document.querySelectorAll('#scope option')) {
            /* If option value contained in values, set selected attribute */
            if (selectItems.includes(option.value) ^ invert) {
                option.setAttribute('selected', 'selected');
            }
            /* Otherwise ensure no selected attribute on option */
            else {
                option.removeAttribute('selected');
            }
        }
    }
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"/>
<select class="form-control" size="10" id="scope" name="scope[]" multiple required>
    <option title="Read list of admin users/all projects" value="admin:read">admin:read | Read list
        of admin users/all projects</option>
    <option title="Create admin users" value="admin:write">admin:write | Create admin users</option>
    <option title="Read client details" value="client:read">client:read | Read client details</option>
    <option title="Edit/Create client" value="client:write">client:write | Edit/Create client</option>
    <option title="Read project" value="project:read">project:read | Read project</option>
    <option title="Create/Edit project" value="project:write">project:write | Create/Edit project
    </option>
    <option title="Read User details" value="user:read">user:read | Read
        User details</option>
    <option title="User. Cannot log in to admin parts" value="user:self">user:self | User.
        Cannot log in to admin parts</option>
    <option title="Create/edit Users" value="user:write">user:write | Create/edit
        Users</option>
    <option title="Read statistics" value="stats:read">stats:read | Read statistics</option>
    <option title="Read story list" value="story:read">story:read | Read story list</option>
</select>

    <div class="form-check">
        <input class="form-check-input" type="radio" name="userType" id="userTypeAdminInhouse">
        <label class="form-check-label" for="userTypeAdminInhouse">
            Admin User (inhouse)
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="radio" name="userType" id="userTypeAdminClient">
        <label class="form-check-label" for="userTypeAdminClient">
            Admin User (client)
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="radio" name="userType" id="userTypeUser">
        <label class="form-check-label" for="userTypeUser">
            User
        </label>
    </div>
Via Active questions tagged javascript - Stack Overflow https://ift.tt/D6vj1WE

Comments

Popular posts from this blog

Prop `className` did not match in next js app

I have written a sample code ( Github Link here ). this is a simple next js app, but giving me error when I refresh the page. This seems to be the common problem and I tried the fix provided in the internet but does not seem to fix my issue. The error is Warning: Prop className did not match. Server: "MuiBox-root MuiBox-root-1" Client: "MuiBox-root MuiBox-root-2". Did changes for _document.js, modified _app.js as mentioned in official website and solutions in stackoverflow. but nothing seems to work. Could someone take a look and help me whats wrong with the code? Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console