Sha256: cf5ccc2a30422f49b5e3e0448e5f62cf0fb2df0836e4585b213537132ee9858e

Contents?: true

Size: 1.65 KB

Versions: 36

Compression:

Stored size: 1.65 KB

Contents

import Sortable from "sortablejs"
import { patch } from "alchemy_admin/utils/ajax"

function onFinishDragging(evt) {
  const pageId = evt.item.dataset.pageId
  const url = Alchemy.routes.move_admin_page_path(pageId)
  const data = {
    target_parent_id: evt.to.dataset.parentId,
    new_position: evt.newIndex
  }

  patch(url, data)
    .then(async (response) => {
      const pageData = await response.data
      const pageEl = document.getElementById(`page_${pageId}`)
      const urlPathEl = pageEl.querySelector(".sitemap_url")

      Alchemy.growl(Alchemy.t("Successfully moved page"))
      urlPathEl.textContent = pageData.url_path
      displayPageFolders()
    })
    .catch((error) => {
      Alchemy.growl(error.message || error, "error")
    })
}

export function displayPageFolders() {
  document.querySelectorAll("li.sitemap-item").forEach((el) => {
    const pageFolderEl = el.querySelector(".page_folder")
    const list = el.querySelector(".children")
    const page = {
      folded: el.dataset.folded === "true",
      id: el.dataset.pageId,
      type: el.dataset.type
    }

    if (list.children.length > 0 || page.folded) {
      pageFolderEl.outerHTML = HandlebarsTemplates.page_folder({ page })
    } else {
      pageFolderEl.innerHTML = ""
    }
  })
}

export function createSortables(sortables) {
  sortables.forEach((el) => {
    new Sortable(el, {
      group: "pages",
      animation: 150,
      fallbackOnBody: true,
      swapThreshold: 0.65,
      handle: ".handle",
      onEnd: onFinishDragging
    })
  })
}

export default function () {
  const sortables = document.querySelectorAll("ul.children")
  displayPageFolders()
  createSortables(sortables)
}

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
alchemy_cms-7.1.13 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.16 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.12 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.15 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.11 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.10 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.9 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.14 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.13 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.8 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.7 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.12 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.11 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.6 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.5 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.10 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.4 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.0.9 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.3 app/javascript/alchemy_admin/page_sorter.js
alchemy_cms-7.1.2 app/javascript/alchemy_admin/page_sorter.js