ChangeData.js
2 years ago
CheckboxData.js
2 years ago
InputData.js
2 years ago
InputMaskedData.js
2 years ago
MultiSelectData.js
2 years ago
NoListenData.js
2 years ago
RadioData.js
2 years ago
RangeData.js
2 years ago
RenderStateData.js
2 years ago
WysiwygData.js
2 years ago
functions.js
2 years ago
functions.js
103 lines
| 1 | import InputData from './InputData'; |
| 2 | import ChangeData from './ChangeData'; |
| 3 | import CheckboxData from './CheckboxData'; |
| 4 | import MultiSelectData from './MultiSelectData'; |
| 5 | import RangeData from './RangeData'; |
| 6 | import WysiwygData from './WysiwygData'; |
| 7 | import RadioData from './RadioData'; |
| 8 | import NoListenData from './NoListenData'; |
| 9 | import InputMaskedData from './InputMaskedData'; |
| 10 | import RenderStateData from './RenderStateData'; |
| 11 | import { setAttrs } from '../functions'; |
| 12 | |
| 13 | const { |
| 14 | applyFilters, |
| 15 | doAction, |
| 16 | } = JetPlugins.hooks; |
| 17 | |
| 18 | /** |
| 19 | * @type {function(): *} |
| 20 | */ |
| 21 | const getDataTypes = () => applyFilters( |
| 22 | 'jet.fb.inputs', |
| 23 | [ |
| 24 | RenderStateData, |
| 25 | RangeData, |
| 26 | WysiwygData, |
| 27 | MultiSelectData, |
| 28 | ChangeData, |
| 29 | CheckboxData, |
| 30 | RadioData, |
| 31 | NoListenData, |
| 32 | InputMaskedData, |
| 33 | InputData, |
| 34 | ], |
| 35 | ); |
| 36 | |
| 37 | let dataTypes = []; |
| 38 | |
| 39 | /** |
| 40 | * @param node |
| 41 | * @param observable {Observable} |
| 42 | * @returns {*} |
| 43 | */ |
| 44 | function createInput( node, observable ) { |
| 45 | if ( !dataTypes.length ) { |
| 46 | dataTypes = getDataTypes(); |
| 47 | } |
| 48 | for ( const dataType of dataTypes ) { |
| 49 | const current = new dataType(); |
| 50 | |
| 51 | if ( !current.isSupported( node ) ) { |
| 52 | continue; |
| 53 | } |
| 54 | current.setRoot( observable ); |
| 55 | current.setNode( node ); |
| 56 | setAttrs( current ); |
| 57 | |
| 58 | doAction( 'jet.fb.input.created', current ); |
| 59 | |
| 60 | return current; |
| 61 | } |
| 62 | |
| 63 | console.error( 'Something went wrong', node ); |
| 64 | } |
| 65 | |
| 66 | function getParsedName( name ) { |
| 67 | const regexps = [ |
| 68 | // multiple fields (checkbox[]) |
| 69 | /^([\w\-]+)\[\]$/, |
| 70 | // fields inside repeater (rep_name[1][content_field]) |
| 71 | /^[\w\-]+\[\d+\]\[([\w\-]+)\]\[?\]?$/, |
| 72 | ]; |
| 73 | |
| 74 | for ( const regExp of regexps ) { |
| 75 | if ( !regExp.test( name ) ) { |
| 76 | continue; |
| 77 | } |
| 78 | const matches = name.match( regExp ); |
| 79 | |
| 80 | return matches[ 1 ]; |
| 81 | } |
| 82 | |
| 83 | return name; |
| 84 | } |
| 85 | |
| 86 | /** |
| 87 | * @param inputs {InputData[]} |
| 88 | */ |
| 89 | function populateInputs( inputs ) { |
| 90 | const list = []; |
| 91 | |
| 92 | for ( const input of inputs ) { |
| 93 | const inner = input.populateInner(); |
| 94 | |
| 95 | inner?.length && list.push( ...inner ); |
| 96 | |
| 97 | list.push( input ); |
| 98 | } |
| 99 | |
| 100 | return list; |
| 101 | } |
| 102 | |
| 103 | export { getParsedName, createInput, populateInputs }; |