Sha256: 2e0a5713e396c240e076265ff90436144eb53d2c77f5a849164da6a2ee9694f2

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

import {Controller} from "stimulus"
import {Headmin} from '../headmin'

export default class extends Controller {
    static get targets() {
        return ["row"]
    }

    add_association(event) {
        event.preventDefault()

        let html = this.getTemplateHTML()
        html = this.replaceIdsWithTimestamps(html)
        this.addRow(html)
    }

    remove_association(event) {
        event.preventDefault()

        let row = event.target.closest(".repeater-row")

        if (row.dataset.newRecord === "true") {
            // New records are simply removed from the page
            row.remove()
        } else {
            // Existing records are hidden and flagged for deletion
            row.querySelector("input[name*='_destroy']").value = 1
            row.style.display = 'none'
        }
    }

    addRow(html) {
        this.rowTarget.insertAdjacentHTML('afterend', html)
        Headmin.initPlugins()
    }

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

    getTemplateHTML() {
        const templateTarget = this.templateTarget()
        return templateTarget.innerHTML
    }

    templateTarget() {
        return this.rowTarget.closest('.repeater').querySelector('[data-repeater-target="template"]')
    }

    idValue() {
        return this.rowTarget.closest('.repeater').dataset.repeaterIdValue
    }
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
headmin-0.1.2 src/js/headmin/controllers/repeater_row_controller.js
headmin-0.1.1 src/js/headmin/controllers/repeater_row_controller.js