Sha256: ad25605cd8f472938068603fbbc647dc86324c727cfe407050958da4c5f113d1

Contents?: true

Size: 1.7 KB

Versions: 43

Compression:

Stored size: 1.7 KB

Contents

import { Controller } from "@hotwired/stimulus"

// Connects to data-controller="nested-resource-form-fields"
// Copied from https://github.com/stimulus-components/stimulus-rails-nested-form/blob/master/src/index.ts
export default class extends Controller {
  static targets = ["target", "template", "addButton"]

  static values = {
    wrapperSelector: {
      type: String,
      default: ".nested-resource-form-fields",
    },
    limit: Number,
  }

  connect() {
    this.updateState()
  }

  add(e) {
    e.preventDefault()

    const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString())
    this.targetTarget.insertAdjacentHTML("beforebegin", content)

    const event = new CustomEvent("nested-resource-form-fields:add", { bubbles: true })
    this.element.dispatchEvent(event)

    this.updateState()
  }

  remove(e) {
    e.preventDefault()

    const wrapper = e.target.closest(this.wrapperSelectorValue)
    if (wrapper.dataset.newRecord !== undefined) {
      wrapper.remove()
    } else {
      wrapper.style.display = "none"
      wrapper.classList.remove(...wrapper.classList)

      const input = wrapper.querySelector("input[name*='_destroy']")
      input.value = "1"
    }

    const event = new CustomEvent("nested-resource-form-fields:remove", { bubbles: true })
    this.element.dispatchEvent(event)

    this.updateState()
  }

  updateState() {
    if (!this.hasAddButtonTarget || this.limitValue == 0) return

    if (this.childCount >= this.limitValue)
      this.addButtonTarget.style.display = "none"
    else
      this.addButtonTarget.style.display = "initial"
  }

  get childCount() {
    return this.element.querySelectorAll(this.wrapperSelectorValue).length
  }
}

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
plutonium-0.19.10 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.9 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.8 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.7 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.6 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.5 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.4 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.3 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.2 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.1 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.19.0 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.8 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.7 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.6 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.5 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.4 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.3 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.2 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.1 src/js/controllers/nested_resource_form_fields_controller.js
plutonium-0.18.0 src/js/controllers/nested_resource_form_fields_controller.js