From ba1e1ccf869b818f7a7a897264dfea05563a7796 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 07 Jun 2026 20:10:20 +0000
Subject: [PATCH] =Major overhaul of Integrations. Playing around with adding fields to post types through Registrar from an integrations' class file.

---
 src/faq/edit.js |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/src/faq/edit.js b/src/faq/edit.js
new file mode 100644
index 0000000..73e36e4
--- /dev/null
+++ b/src/faq/edit.js
@@ -0,0 +1,145 @@
+import { useBlockProps, InspectorControls } from '@wordpress/block-editor';
+import { PanelBody, ToggleControl, Notice, Button } from '@wordpress/components';
+import { __ } from '@wordpress/i18n';
+import { useState, useEffect } from '@wordpress/element';
+import './editor.scss';
+
+export default function Edit({ attributes, setAttributes }) {
+	const { sectionOrder, showSectionTitles, collapseByDefault } = attributes;
+	const [sections, setSections] = useState([]);
+
+	// Get sections from localized script
+	const allSections = window.jvbFaq?.sections || [];
+
+	// Initialize sections with proper ordering
+	useEffect(() => {
+		if (!allSections.length) return;
+
+		if (sectionOrder.length === 0) {
+			// First time - use default order
+			const orderedSections = allSections.map(section => ({
+				id: section.id,
+				name: section.name,
+			}));
+			setSections(orderedSections);
+			setAttributes({ sectionOrder: orderedSections.map(s => s.id) });
+		} else {
+			// Use saved order, add any new sections at the end
+			const orderedSections = [];
+			const existingIds = new Set(sectionOrder);
+
+			// Add sections in saved order
+			sectionOrder.forEach(id => {
+				const section = allSections.find(s => s.id === id);
+				if (section) {
+					orderedSections.push({ id: section.id, name: section.name });
+				}
+			});
+
+			// Add any new sections that weren't in the saved order
+			allSections.forEach(section => {
+				if (!existingIds.has(section.id)) {
+					orderedSections.push({ id: section.id, name: section.name });
+				}
+			});
+
+			setSections(orderedSections);
+		}
+	}, [allSections, sectionOrder]);
+
+	const moveSection = (index, direction) => {
+		const newSections = [...sections];
+		const newIndex = direction === 'up' ? index - 1 : index + 1;
+
+		if (newIndex < 0 || newIndex >= newSections.length) return;
+
+		// Swap sections
+		[newSections[index], newSections[newIndex]] = [newSections[newIndex], newSections[index]];
+
+		setSections(newSections);
+		setAttributes({ sectionOrder: newSections.map(s => s.id) });
+	};
+
+	const blockProps = useBlockProps({
+		className: 'faq-block-editor',
+	});
+
+	return (
+		<>
+			<InspectorControls>
+				<PanelBody title={__('FAQ Settings', 'jvb')} initialOpen={true}>
+					<ToggleControl
+						label={__('Show Section Titles', 'jvb')}
+						checked={showSectionTitles}
+						onChange={(value) => setAttributes({ showSectionTitles: value })}
+						help={__('Display section names as headings', 'jvb')}
+					/>
+					<ToggleControl
+						label={__('Collapse by Default', 'jvb')}
+						checked={collapseByDefault}
+						onChange={(value) => setAttributes({ collapseByDefault: value })}
+						help={__('Questions start collapsed and expand on click', 'jvb')}
+					/>
+				</PanelBody>
+
+				<PanelBody title={__('Section Order', 'jvb')} initialOpen={false}>
+					<p className="components-base-control__help">
+						{__('Use the arrow buttons to reorder sections', 'jvb')}
+					</p>
+					{sections.length > 0 ? (
+						<div className="faq-section-list">
+							{sections.map((section, index) => (
+								<div key={section.id} className="faq-section-item">
+									<div className="faq-section-controls">
+										<Button
+											icon="arrow-up-alt2"
+											label={__('Move up', 'jvb')}
+											disabled={index === 0}
+											onClick={() => moveSection(index, 'up')}
+											className="faq-section-button"
+										/>
+										<Button
+											icon="arrow-down-alt2"
+											label={__('Move down', 'jvb')}
+											disabled={index === sections.length - 1}
+											onClick={() => moveSection(index, 'down')}
+											className="faq-section-button"
+										/>
+									</div>
+									<span className="faq-section-name">{section.name}</span>
+								</div>
+							))}
+						</div>
+					) : (
+						<Notice status="info" isDismissible={false}>
+							{__('No sections found. Create sections in the FAQ taxonomy.', 'jvb')}
+						</Notice>
+					)}
+				</PanelBody>
+			</InspectorControls>
+
+			<div {...blockProps}>
+				<div className="faq-block-preview">
+					<h3>{__('FAQ Block', 'jvb')}</h3>
+					<p>
+						{__('This block will display FAQs organized by sections.', 'jvb')}
+					</p>
+					{sections.length > 0 ? (
+						<div className="faq-sections-preview">
+							<strong>{__('Section Order:', 'jvb')}</strong>
+							<ol>
+								{sections.map((section) => (
+									<li key={section.id}>{section.name}</li>
+								))}
+							</ol>
+						</div>
+					) : (
+						<Notice status="warning" isDismissible={false}>
+							{__('No sections available. Create sections in the FAQ taxonomy.', 'jvb')}
+						</Notice>
+					)}
+				</div>
+			</div>
+		</>
+	);
+}

--
Gitblit v1.10.0