# better-payment/2.2.0/src/campaign-builder/components/FieldsPanel.js

Better Payment – Instant Payments, Donations, Fundraising with Subscriptions &amp; More, version 2.2.0. 48 lines.

- Page: https://pluginprobe.com/plugins/better-payment/2.2.0/code/src/campaign-builder/components/FieldsPanel.js
- Raw: https://pluginprobe.com/plugins/better-payment/2.2.0/raw/src/campaign-builder/components/FieldsPanel.js
- Modified: 2026-06-08T10:50:18+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/better-payment/2.2.0/code/src/campaign-builder/components/FieldsPanel.js#L10-L20`.

```javascript
import { __ } from '@wordpress/i18n';
import { useDraggable } from '@dnd-kit/core';
import { getAllElements } from '../fields/FieldRegistry';

/**
 * Left sidebar — lists all element types available to drag into the canvas.
 * Each item is a @dnd-kit Draggable (not sortable — the list is fixed).
 */
export default function FieldsPanel() {
    const elements = getAllElements();

    return (
        <div className="bp-cb-fields-panel">
            <h3 className="bp-cb-panel-heading">{ __( 'Elements', 'better-payment' ) }</h3>
            <p className="bp-cb-panel-hint">{ __( 'Drag or click to add to a column', 'better-payment' ) }</p>
            <ul className="bp-cb-field-list">
                { elements.map( ( el ) => (
                    <DraggableElement key={ el.type } element={ el } />
                ) ) }
            </ul>
        </div>
    );
}

function DraggableElement( { element } ) {
    const { attributes, listeners, setNodeRef, isDragging } = useDraggable( {
        id: `panel-${ element.type }`,
        data: {
            source: 'panel',
            elementType: element.type,
            defaultSettings: element.defaultSettings,
        },
    } );

    return (
        <li
            ref={ setNodeRef }
            className={ `bp-cb-field-item${ isDragging ? ' is-dragging' : '' }` }
            title={ element.label }
            { ...listeners }
            { ...attributes }
        >
            <span className={ `dashicons dashicons-${ element.icon }` }></span>
            <span className="bp-cb-field-label">{ element.label }</span>
        </li>
    );
}

```
