44 * Released under the MIT license
55 * https://github.com/CoCreate-app/CoCreate-conditional-logic/blob/master/LICENSE
66 */
7-
7+ /*globals CustomEvent, CoCreate*/
88import observer from '@cocreate/observer'
99
1010function init ( ) {
@@ -20,12 +20,19 @@ function initElements(elements) {
2020function initElement ( el ) {
2121 if ( el . tagName . toLowerCase ( ) == "option" )
2222 el = el . closest ( 'select' ) ;
23+ let actions = el . getAttribute ( 'actions' ) ;
24+ if ( actions && actions . includes ( 'validate' ) ) {
25+ el . removeEventListener ( 'change' , selectShowHideEle ) ;
2326
24- el . removeEventListener ( 'change' , selectShowHideEle ) ;
25- el . removeEventListener ( "click" , clickShowHideEle ) ;
26-
27- el . addEventListener ( "change" , selectShowHideEle ) ;
28- el . addEventListener ( "click" , clickShowHideEle ) ;
27+ el . addEventListener ( "change" , selectShowHideEle ) ;
28+ }
29+ else {
30+ el . removeEventListener ( 'change' , selectShowHideEle ) ;
31+ el . removeEventListener ( "click" , clickShowHideEle ) ;
32+
33+ el . addEventListener ( "change" , selectShowHideEle ) ;
34+ el . addEventListener ( "click" , clickShowHideEle ) ;
35+ }
2936}
3037
3138function selectShowHideEle ( e ) {
@@ -50,12 +57,15 @@ function selectShowHideEle(e) {
5057}
5158
5259function clickShowHideEle ( e ) {
53- var show = this . getAttribute ( 'show' ) ;
54- var hide = this . getAttribute ( 'hide' ) ;
55- let tagName = this . tagName . toLowerCase ( ) ;
56-
57- if ( tagName == 'input' && this . getAttribute ( "type" ) . toLowerCase ( ) == 'radio' ) {
58- let name = this . getAttribute ( "name" ) ;
60+ let element = e . currentTarget ;
61+ if ( ! element )
62+ element = e ;
63+ var show = element . getAttribute ( 'show' ) ;
64+ var hide = element . getAttribute ( 'hide' ) ;
65+ let tagName = element . tagName . toLowerCase ( ) ;
66+
67+ if ( tagName == 'input' && element . getAttribute ( "type" ) . toLowerCase ( ) == 'radio' ) {
68+ let name = element . getAttribute ( "name" ) ;
5969 let radios = document . querySelectorAll ( tagName + '[name="' + name + '"]' ) ;
6070 for ( let radio of radios ) {
6171
@@ -93,6 +103,11 @@ function clickShowHideEle(e) {
93103 if ( ! existEqual ) el . classList . add ( 'hidden' ) ;
94104 }
95105 }
106+
107+ document . dispatchEvent ( new CustomEvent ( 'showHide' , {
108+ detail : { }
109+ } ) ) ;
110+
96111}
97112
98113document . addEventListener ( 'fetchedTemplate' , ( ) => {
@@ -110,5 +125,14 @@ observer.init({
110125 }
111126} ) ;
112127
128+ CoCreate . action . init ( {
129+ action : "showHide" ,
130+ endEvent : "showHide" ,
131+ callback : ( btn , data ) => {
132+ clickShowHideEle ( btn ) ;
133+ }
134+ } ) ;
135+
136+
113137const CoCreateConditionalLogic = { initElements, selectShowHideEle, clickShowHideEle } ;
114138export default CoCreateConditionalLogic ;
0 commit comments