STRATO-apps/wordpress_03/app/wp-content/themes/blocksy/static/js/backend/woo-attributes/index.js

SHA-256: 85daa2729fe30c40fb983bc315fc348019b2827bb3f1ede08cf007fa74766349
import { createElement, createRoot } from '@wordpress/element'
import ManageAttributeOption from './ManageAttributeOption'

export const collectAttributes = () => {
	return [...document.querySelectorAll('[name*=attribute_values]')]
		.filter((el) => {
			return el
				.closest('.woocommerce_attribute_data')
				.querySelector(
					'input.woocommerce_attribute_used_for_variations'
				).checked
		})
		.map((el) => {
			const values = []

			const attributeNameField = el
				.closest('tr')
				.querySelector('.attribute_name')
			let attributeName = ''
			let customAttr = false

			if (el.tagName === 'SELECT') {
				;[...el.querySelectorAll('option')].map((option) => {
					values.push({
						value: option.value,
						label: option.textContent,
						selected: option.selected,
					})
				})

				attributeName =
					attributeNameField.querySelector('strong').textContent
			}

			if (el.tagName === 'TEXTAREA') {
				el.value
					.split('|')
					.map((value) => value.trim())
					.map((value) => {
						values.push({
							value,
							label: value,
							selected: true,
						})
					})
				customAttr = true
				attributeName = attributeNameField.querySelector('input').value
			}

			return {
				name: attributeName,
				taxonomy:
					el.closest('[data-taxonomy]').dataset.taxonomy ||
					attributeName,
				values,
				customAttr,
			}
		})
}

const initWooVariation = (variationWrapper) => {
	if (!variationWrapper) {
		return
	}

	const input = document.querySelector('#ct-woo-attributes-list')
	const options = JSON.parse(input.dataset.options)

	const initialValue = input.value ? JSON.parse(input.value) : {}

	variationWrapper.closest('.options_group').innerHtml = ''

	const root = createRoot(variationWrapper.closest('.options_group'))
	root.render(
		<ManageAttributeOption
			options={options}
			initialValue={initialValue}
			input_id={input.id}
			input_name={input.name}
		/>
	)
}

export const initAllWooAttributesOptions = () => {
	initWooVariation(document.querySelector('#ct-woo-attributes-list'))
}