All files / components/Users UsersTable.js

100% Statements 24/24
100% Branches 8/8
100% Functions 11/11
100% Lines 21/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128            1x                 25x               25x       1x                   25x               25x         1x                   25x               25x     25x                                       72x         72x         72x       25x             25x 78x 36x 18x   18x   42x     25x          
 
import OurTable, { ButtonColumn } from "main/components/OurTable"
import { useBackendMutation } from "main/utils/useBackend";
 
export default function UsersTable({ users }) {
    function cellToAxiosParamsToggleRider(cell) {
        return {
            url: "/api/admin/users/toggleRider",
            method: "POST",
            params: {
                id: cell.row.values.id
            }
        }
    }
    // Stryker disable all : hard to test for query caching
    const toggleRiderMutation = useBackendMutation(
        cellToAxiosParamsToggleRider,
        {},
        ["/api/admin/users"]
    );
    // Stryker enable all 
 
     // Stryker disable next-line all : TODO try to make a good test for this
    const toggleRiderCallback = async (cell) => { toggleRiderMutation.mutate(cell); }
 
    //toggleAdmin
    function cellToAxiosParamsToggleAdmin(cell) {
        return {
            url: "/api/admin/users/toggleAdmin",
            method: "POST",
            params: {
                id: cell.row.values.id
            }
        }
    }
 
    // Stryker disable all : hard to test for query caching
    const toggleAdminMutation = useBackendMutation(
        cellToAxiosParamsToggleAdmin,
        {},
        ["/api/admin/users"]
    );
    // Stryker enable all 
 
    // Stryker disable next-line all : TODO try to make a good test for this
    const toggleAdminCallback = async (cell) => { toggleAdminMutation.mutate(cell); }
 
 
    //toggleDriver
    function cellToAxiosParamsToggleDriver(cell) {
        return {
            url: "/api/admin/users/toggleDriver",
            method: "POST",
            params: {
                id: cell.row.values.id
            }
        }
    }
 
    // Stryker disable all : hard to test for query caching
    const toggleDriverMutation = useBackendMutation(
        cellToAxiosParamsToggleDriver,
        {},
        ["/api/admin/users"]
    );
    // Stryker enable all 
 
    // Stryker disable next-line all : TODO try to make a good test for this
    const toggleDriverCallback = async (cell) => { toggleDriverMutation.mutate(cell); }
 
 
    const columns = [
        {
            Header: 'id',
            accessor: 'id', // accessor is the "key" in the data
        },
        {
            Header: 'First Name',
            accessor: 'givenName',
        },
        {
            Header: 'Last Name',
            accessor: 'familyName',
        },
        {
            Header: 'Email',
            accessor: 'email',
        },
        {
            Header: 'Admin',
            id: 'admin',
            accessor: (row, _rowIndex) => String(row.admin) // hack needed for boolean values to show up
        },
        {
            Header: 'Driver',
            id: 'driver',
            accessor: (row, _rowIndex) => String(row.driver) // hack needed for boolean values to show up
        },
        {
            Header: 'Rider',
            id: 'rider',
            accessor: (row, _rowIndex) => String(row.rider) // hack needed for boolean values to show up
        }
    ];
 
    const buttonColumn = [
        ...columns,
        ButtonColumn("Toggle Admin", "primary", toggleAdminCallback, "UsersTable"),
        ButtonColumn("Toggle Driver", "success", toggleDriverCallback, "UsersTable"),
        ButtonColumn("Toggle Rider", "danger", toggleRiderCallback, "UsersTable")
    ]
 
    users.sort((a, b) => {
        if (a.familyName === b.familyName) {
            if (a.givenName === b.givenName) {
                return a.id - b.id;
            }
            return a.givenName < b.givenName ? -1 : 1;
        }
        return a.familyName < b.familyName ? -1 : 1;
    });
 
    return <OurTable
        data={users}
        columns={buttonColumn}
        testid={"UsersTable"}
    />;
};