Explorar el Código

Modal refactor

Artur Paikin hace 9 años
padre
commit
2250e82921
Se han modificado 2 ficheros con 71 adiciones y 73 borrados
  1. 1 1
      src/core/Core.js
  2. 70 72
      src/plugins/Modal.js

+ 1 - 1
src/core/Core.js

@@ -38,7 +38,7 @@ export default class Core {
       selectedFiles: {},
       selectedFiles: {},
       uploadedFiles: {},
       uploadedFiles: {},
       modal: {
       modal: {
-        isVisible: false,
+        isHidden: true,
         targets: []
         targets: []
       }
       }
     }
     }

+ 70 - 72
src/plugins/Modal.js

@@ -54,7 +54,7 @@ export default class Modal extends Plugin {
       icon: callerPluginIcon,
       icon: callerPluginIcon,
       type: callerPluginType,
       type: callerPluginType,
       el: el,
       el: el,
-      isVisible: false
+      isHidden: true
     }
     }
 
 
     const modal = this.core.getState().modal
     const modal = this.core.getState().modal
@@ -62,66 +62,6 @@ export default class Modal extends Plugin {
     this.core.setState({modal: modal})
     this.core.setState({modal: modal})
   }
   }
 
 
-  render (state) {
-    // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog
-
-    const modalTargets = state.modal.targets
-
-    const acquirers = modalTargets.filter((target) => {
-      return target.type === 'acquirer'
-    })
-
-    const progressindicators = modalTargets.filter((target) => {
-      return target.type === 'progressindicator'
-    })
-
-    return yo`<div class="UppyModal"
-                   aria-hidden="${state.modal.isVisible ? 'false' : 'true'}"
-                   aria-labelledby="modalTitle"
-                   aria-describedby="modalDescription"
-                   role="dialog">
-      <div class="UppyModal-overlay"
-                  tabindex="-1"
-                  onclick=${this.hideModal}></div>
-      <div class="UppyModal-inner">
-        <button class="UppyModal-close"
-                title="Close Uppy modal"
-                onclick=${this.hideModal}>×</button>
-        <ul class="UppyModalTabs" role="tablist">
-          ${acquirers.map((target) => {
-            return yo`<li class="UppyModalTab">
-              <button class="UppyModalTab-btn"
-                      role="tab"
-                      aria-controls="${target.id}"
-                      aria-selected="${target.isVisible ? 'true' : 'false'}"
-                      onclick=${this.showTabPanel.bind(this, target.id)}>
-                ${target.icon}
-                <span class="UppyModalTab-name">${target.name}</span>
-              </button>
-            </li>`
-          })}
-        </ul>
-
-        <div class="UppyModalContent">
-          <div class="UppyModal-presenter"></div>
-          ${acquirers.map((target) => {
-            return yo`<div class="UppyModalContent-panel
-                           ${this.opts.panelSelectorPrefix}--${target.id}"
-                           role="tabpanel"
-                           aria-hidden="${target.isVisible ? 'false' : 'true'}">
-              ${target.el}
-            </div>`
-          })}
-        </div>
-        <div class="UppyModal-progressindicators">
-          ${progressindicators.map((target) => {
-            return target.el
-          })}
-        </div>
-      </div>
-    </div>`
-  }
-
   showTabPanel (id) {
   showTabPanel (id) {
     const modal = this.core.getState().modal
     const modal = this.core.getState().modal
 
 
@@ -129,10 +69,10 @@ export default class Modal extends Plugin {
     modal.targets.forEach((target) => {
     modal.targets.forEach((target) => {
       if (target.type === 'acquirer') {
       if (target.type === 'acquirer') {
         if (target.id === id) {
         if (target.id === id) {
-          target.isVisible = true
+          target.isHidden = false
           return
           return
         }
         }
-        target.isVisible = false
+        target.isHidden = true
       }
       }
     })
     })
 
 
@@ -140,10 +80,8 @@ export default class Modal extends Plugin {
   }
   }
 
 
   hideModal () {
   hideModal () {
-    // this.core.emitter.emit('modal-close')
-
     const modal = this.core.getState().modal
     const modal = this.core.getState().modal
-    modal.isVisible = false
+    modal.isHidden = true
     this.core.setState({modal: modal})
     this.core.setState({modal: modal})
 
 
     document.body.style.overflow = 'visible'
     document.body.style.overflow = 'visible'
@@ -153,12 +91,12 @@ export default class Modal extends Plugin {
     // this.core.emitter.emit('modal-open')
     // this.core.emitter.emit('modal-open')
 
 
     const modal = this.core.getState().modal
     const modal = this.core.getState().modal
-    modal.isVisible = true
+    modal.isHidden = false
 
 
     // Show first acquirer plugin when modal is open
     // Show first acquirer plugin when modal is open
     modal.targets.some((target) => {
     modal.targets.some((target) => {
       if (target.type === 'acquirer') {
       if (target.type === 'acquirer') {
-        target.isVisible = true
+        target.isHidden = false
         return true
         return true
       }
       }
     })
     })
@@ -169,6 +107,10 @@ export default class Modal extends Plugin {
   }
   }
 
 
   events () {
   events () {
+    // Modal open button
+    const showModalTrigger = document.querySelector(this.opts.trigger)
+    showModalTrigger.addEventListener('click', this.showModal)
+
     // Close the Modal on esc key press
     // Close the Modal on esc key press
     document.body.addEventListener('keyup', (event) => {
     document.body.addEventListener('keyup', (event) => {
       if (event.keyCode === 27) {
       if (event.keyCode === 27) {
@@ -188,10 +130,66 @@ export default class Modal extends Plugin {
     this.el = this.render(this.core.state)
     this.el = this.render(this.core.state)
     document.body.appendChild(this.el)
     document.body.appendChild(this.el)
 
 
-    // Add events for opening and closing the modal
-    const showModalTrigger = document.querySelector(this.opts.trigger)
-    showModalTrigger.addEventListener('click', this.showModal)
-
     this.events()
     this.events()
   }
   }
+
+  render (state) {
+    // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog
+
+    const modalTargets = state.modal.targets
+
+    const acquirers = modalTargets.filter((target) => {
+      return target.type === 'acquirer'
+    })
+
+    const progressindicators = modalTargets.filter((target) => {
+      return target.type === 'progressindicator'
+    })
+
+    return yo`<div class="UppyModal"
+                   aria-hidden="${state.modal.isHidden}"
+                   aria-labelledby="modalTitle"
+                   aria-describedby="modalDescription"
+                   role="dialog">
+      <div class="UppyModal-overlay"
+                  tabindex="-1"
+                  onclick=${this.hideModal}></div>
+      <div class="UppyModal-inner">
+        <button class="UppyModal-close"
+                title="Close Uppy modal"
+                onclick=${this.hideModal}>×</button>
+        <ul class="UppyModalTabs" role="tablist">
+          ${acquirers.map((target) => {
+            return yo`<li class="UppyModalTab">
+              <button class="UppyModalTab-btn"
+                      role="tab"
+                      aria-controls="${target.id}"
+                      aria-selected="${target.isHidden ? 'false' : 'true'}"
+                      onclick=${this.showTabPanel.bind(this, target.id)}>
+                ${target.icon}
+                <span class="UppyModalTab-name">${target.name}</span>
+              </button>
+            </li>`
+          })}
+        </ul>
+
+        <div class="UppyModalContent">
+          <div class="UppyModal-presenter"></div>
+          ${acquirers.map((target) => {
+            return yo`<div class="UppyModalContent-panel
+                           ${this.opts.panelSelectorPrefix}--${target.id}"
+                           role="tabpanel"
+                           aria-hidden="${target.isHidden}">
+              ${target.el}
+            </div>`
+          })}
+        </div>
+        <div class="UppyModal-progressindicators">
+          ${progressindicators.map((target) => {
+            return target.el
+          })}
+        </div>
+      </div>
+    </div>`
+  }
 }
 }