PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.5
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 All 203 releases
betterdocs / react-src / admin / settings / fields / BetterRepeaterField.js

BetterRepeaterField.js in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.5, at react-src/admin/settings/fields/BetterRepeaterField.js

62 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React, { useEffect, useState } from 'react'
2 import { Icon } from '@wordpress/components';
3 import { useInstanceId } from "@wordpress/compose";
4 import { GenericField, useBuilderContext } from 'quickbuilder';
5
6 const BetterRepeaterField = (props) => {
7 const builderContext = useBuilderContext();
8 const { fields, onChange, index, parent } = props;
9 const fieldsArray = Object.values(fields);
10 const [isCollapsed, setIsCollapsed] = useState(props.isCollapsed);
11 const instanceId = useInstanceId(BetterRepeaterField);
12 // onClick={() => setIsCollapse(!isCollapse)}
13 const values = builderContext.values?.[parent]?.[index];
14 const title = values?.title || values?.post_title || values?.username || values?.plugin_theme_name;
15 const _title = title ? ((title.length < 40 ? title : title.substr(0, 40) + "...")) : '';
16
17 const onClone = (event) => {
18 event?.stopPropagation();
19 props.clone(props.index);
20 }
21 const onDelete = (event) => {
22 event?.stopPropagation();
23 props.remove(props.index);
24 }
25
26 useEffect(() => {
27 builderContext.setFieldValue([parent, index, 'isCollapsed'], isCollapsed);
28 }, [isCollapsed])
29
30 return (
31 <div className="wprf-repeater-field">
32 {/* <div className="wprf-repeater-field-title">
33 <h4><Icon icon="move"/>{props.index+1}: {_title}</h4>
34 <div className="wprf-repeater-field-controls">
35 <Icon onClick={onClone} icon="admin-page" />
36 <Icon onClick={onDelete} icon="trash" />
37 </div>
38 </div> */}
39 { !isCollapsed &&
40 <div className="wprf-repeater-inner-field">
41 {fieldsArray.map((field, fieldIndex) => {
42 let parentIndex = [...props.parentIndex, 'fields', fieldIndex];
43 return <GenericField
44 parentIndex={parentIndex}
45 key={`field-${index}-${fieldIndex}`}
46 // @ts-ignore
47 {...field}
48 id={`field-${instanceId}-${index}-${fieldIndex}`}
49 index={index}
50 parenttype='repeater'
51 parent={parent}
52 onChange={(event) => onChange(event, index)}
53 />
54 })}
55 </div>
56 }
57 </div>
58 )
59 }
60
61 export default BetterRepeaterField;
62