Sha256: 45f539ab13a998d5f60e48d1f105436b747a7e144d507fea0a922c64114d0306

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 KB

Contents

import {Controller} from "stimulus"

export default class extends Controller {
    static get targets() {
        return ["form", "list", "input", "template", "button", "menuItem"]
    }

    add(event) {
        event.preventDefault()
        const name = event.target.dataset.filterName
        const button = this.getButtonByName(name)
        if (button) {
            this.openFilter(button)
        } else {
            this.createFilter(name)
        }
    }

    createFilter(name) {
        let html = this.getTemplateHTML(name)
        html = this.replaceIdsWithTimestamps(html)
        this.listTarget.insertAdjacentHTML('beforeend', html)

        // Dispatch an event
        this.menuItemTarget.dispatchEvent(new CustomEvent('headmin:reinit', {bubbles: true}))
    }

    remove(event) {
        const filter = event.currentTarget.closest('.h-filter')
        filter.remove()
        this.formTarget.submit()
    }

    removeAll(event) {
        this.listTarget.innerHTML = ""
        this.formTarget.submit()
    }

    update(event) {
        this.formTarget.submit()
    }

    getButtonByName(name) {
        return this.buttonTargets.find(function (element) {
            return element.dataset.filterName === name
        })
    }

    openFilter(button) {
        button.controller.open()
    }

    getTemplateHTML(name) {
        const template = this.templateTargets.filter((element) => {
            return element.dataset.filterName === name
        })[0]
        return template.innerHTML
    }

    replaceIdsWithTimestamps(html) {
        const regex = new RegExp('template_id', "g");
        return html.replace(regex, new Date().getTime())
    }
}

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
headmin-0.2.5 src/js/headmin/controllers/filters_controller.js
headmin-0.2.4 src/js/headmin/controllers/filters_controller.js
headmin-0.2.3 src/js/headmin/controllers/filters_controller.js
headmin-0.2.2 src/js/headmin/controllers/filters_controller.js
headmin-0.2.1 src/js/headmin/controllers/filters_controller.js
headmin-0.2.0 src/js/headmin/controllers/filters_controller.js