Wednesday, July 15, 2026 1:53:36 AM
> project show esm_website_v1
The unexpected heart of the ESM ecosystem. What started as a simple Rails dashboard has evolved into the command center for thousands of gaming communities, proving that sometimes the best infrastructure projects are the ones you never planned to build.
Details
> index.js
import Vue from 'vue/dist/vue.esm.js';
import {
    getData
} from "../utilities";

// This is binding to a class name, so elem is actually a DOM object
export default function (elem) {
    let data = getData(elem, ["roles", "selected-roles"]);

    _.each(data.roles, function (role) {
        role.selected = _.some(data["selected-roles"], { id: role.id });
    });

    const app = new Vue({
        el: elem,
        data: {
            roles: data.roles,
            selectedRole: null
        },
        mounted: function () {
            this.setDefaultSelectedRole();
        },
        computed: {
            selectedRoles: function () {
                return _.filter(data.roles, { selected: true })
            },
            selectedRoleIDs: function () {
                return _.map(this.selectedRoles, "id");
            },
            disableAddButton: function () {
                return _.isUndefined(this.selectedRole);
            }
        },
        methods: {
            setDefaultSelectedRole: function () {
                this.selectedRole = _.isEmpty(this.roles) ? null : _.find(this.roles, { selected: false })?.id;
            },
            addRole: function () {
                let role = _.find(this.roles, { id: this.selectedRole });
                Vue.set(role, "selected", true);

                this.setDefaultSelectedRole();
            },
            removeRole: function (role) {
                Vue.set(role, "selected", false);
                this.setDefaultSelectedRole();
            }
        }
    });
}
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 43aa0d7