appInterface.js 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. (function () {
  2. let prevSelectedApp = {name: ''}
  3. getSelectedApp = name => {
  4. switch (name) {
  5. case 'html-documents':
  6. return appHtmlDocument
  7. case 'thread':
  8. return appThread
  9. case 'file':
  10. return appFile
  11. default:
  12. return null
  13. }
  14. }
  15. //@TODO make a file action.tracimCustomEvent.js that will contains all customEvent that tracim_frontend call
  16. GLOBAL_renderApp = app => { //@TODO renderAppFull
  17. console.log('%cGLOBAL_renderApp', 'color: #5cebeb', app)
  18. const selectedApp = getSelectedApp(app.config.slug)
  19. if (selectedApp.isRendered) {
  20. GLOBAL_dispatchEvent({type: `${app.config.slug}_showApp`, data: app}) // handled by html-documents:src/container/HtmlDocument.jsx
  21. } else {
  22. selectedApp.renderApp(app)
  23. selectedApp.isRendered = true
  24. prevSelectedApp.isRendered = false
  25. prevSelectedApp = selectedApp
  26. }
  27. }
  28. GLOBAL_renderCreateContentApp = app => { //@TODO renderAppPopupCreation
  29. console.log('%cGLOBAL_renderCreateContentApp', 'color: #5cebeb', app)
  30. const selectedApp = getSelectedApp(app.config.slug)
  31. if (!selectedApp) {
  32. console.log('Error in GLOBAL_renderCreateContentApp, selectedApp is undefined', app)
  33. return
  34. }
  35. getSelectedApp(app.config.slug).renderPopupCreation(app)
  36. }
  37. GLOBAL_dispatchEvent = ({type, data}) => {
  38. console.log('%cGLOBAL_dispatchEvent', 'color: #fff', type, data)
  39. const event = new CustomEvent('appCustomEvent', {detail: {type, data}})
  40. document.dispatchEvent(event)
  41. }
  42. GLOBAL_eventReducer = ({detail: {type, data}}) => {
  43. switch (type) {
  44. case 'hide_popupCreateContent':
  45. console.log('%cGLOBAL_eventReducer Custom Event', 'color: #28a745', type, data)
  46. getSelectedApp(data.name).unmountApp('popupCreateContentContainer')
  47. break
  48. case 'unmount_app':
  49. console.log('%cGLOBAL_eventReducer Custom Event', 'color: #28a745', type, data)
  50. if (prevSelectedApp.name === '') return
  51. prevSelectedApp.unmountApp('appContainer')
  52. prevSelectedApp.unmountApp('popupCreateContentContainer')
  53. prevSelectedApp.isRendered = false
  54. break
  55. }
  56. }
  57. document.addEventListener('appCustomEvent', GLOBAL_eventReducer)
  58. })()