1
- import { div } from '../../scripts/dom-helpers.js' ;
1
+ import { div , a } from '../../scripts/dom-helpers.js' ;
2
2
import {
3
3
loadScript ,
4
4
loadCSS ,
@@ -10,10 +10,33 @@ export default async function decorate(block) {
10
10
block . closest ( '.section' ) . classList . add ( 'calcite-mode-dark' , 'dark' ) ;
11
11
block . classList . add ( 'calcite-mode-dark' , 'dark' ) ;
12
12
const config = readBlockConfig ( block ) ;
13
- const divId = getMetadata ( 'formdivid' ) || config . divId ;
14
- config . divId = divId ;
13
+ const divId = getMetadata ( 'formdivid' ) || config . divid ;
14
+ config . divid = divId ;
15
15
16
- block . replaceChildren ( div ( { id : divId } ) ) ;
16
+ const formDiv = div ( {
17
+ id : divId ,
18
+ class : 'one-form' ,
19
+ } ) ;
20
+ if ( block . classList . contains ( 'card-modal' ) ) {
21
+ delete config . cardcontent ;
22
+ // we need to find it "again" because the html is not preserved in readBlockConfig
23
+ const cardContent = [ ...block . querySelectorAll ( ':scope > div' ) ]
24
+ . find ( ( el ) => el . firstElementChild . textContent === 'cardContent' )
25
+ . lastElementChild ;
26
+ const cardModalContent = a ( { class : 'card-modal-content' } , cardContent ) ;
27
+ cardModalContent . addEventListener ( 'click' , ( ) => {
28
+ block . classList . add ( 'modal-active' ) ;
29
+ window . openOneFormModal ( ) ;
30
+ } ) ;
31
+ block . replaceChildren (
32
+ formDiv ,
33
+ cardModalContent ,
34
+ ) ;
35
+ } else {
36
+ block . replaceChildren ( formDiv ) ;
37
+ }
38
+
39
+ // TODO get card if modals
17
40
18
41
await Promise . all ( [
19
42
loadCSS ( 'https://webapps-cdn.esri.com/CDN/one-form/one-form.css' ) ,
@@ -23,11 +46,10 @@ export default async function decorate(block) {
23
46
config . aemEditMode = false ;
24
47
25
48
const baseFormProps = {
26
- divId,
27
49
aemFieldServiceBasePath : 'https://assets.esri.com/content/experience-fragments/esri-sites/en-us/site-settings/one-form-admin/master' ,
28
50
aemEditMode : 'false' ,
29
51
mode : 'basic-progressive-form' ,
30
- formOpensInAModal : '' ,
52
+ formOpensInAModal : 'true ' ,
31
53
modalTitle : '' ,
32
54
leftAligned : '' ,
33
55
darkMode : true , // metadata.mode === 'dark',
@@ -68,5 +90,27 @@ export default async function decorate(block) {
68
90
// merge config and baseFormProps
69
91
const formProps = { ...baseFormProps , ...config } ;
70
92
71
- window . initOneForm ( divId , formProps ) ;
93
+ console . log ( 'formProps' , formProps ) ;
94
+
95
+ // const form = window.oneForm.attachToForm(divId);
96
+ // form.on('load', (formApi) => {
97
+ // //Perform API actions here
98
+ // console.log('form loaded');
99
+ // });
100
+
101
+ // workaround for initOneForm requiring the form div to be in the DOM,
102
+ // which it is not when loaded as a fragment
103
+ const observer = new MutationObserver ( ( mutationsList ) => {
104
+ mutationsList . forEach ( ( mutation ) => {
105
+ if ( mutation . type === 'childlist' ) {
106
+ console . log ( 'A child node has been added or removed.' , document . getElementById ( divId ) ) ;
107
+ }
108
+ if ( mutation . type === 'childList' && document . getElementById ( divId ) ) {
109
+ const initResult = window . initOneForm ( divId , formProps ) ;
110
+ console . log ( 'init result' , initResult ) ;
111
+ observer . disconnect ( ) ;
112
+ }
113
+ } ) ;
114
+ } ) ;
115
+ observer . observe ( document . body , { childList : true , subtree : true } ) ;
72
116
}
0 commit comments