@openmrs/esm-implementer-tools-app 3.3.2-pre.9 → 4.0.0-pre.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.turbo/turbo-build.log +37 -38
  2. package/.turbo/turbo-lint.log +16 -0
  3. package/.turbo/turbo-test.log +9 -0
  4. package/.turbo/turbo-typescript.log +2 -0
  5. package/dist/16.js +2 -0
  6. package/dist/16.js.map +1 -0
  7. package/dist/280.js +1 -1
  8. package/dist/280.js.map +1 -1
  9. package/dist/284.js +1 -1
  10. package/dist/284.js.map +1 -1
  11. package/dist/319.js +0 -0
  12. package/dist/360.js +3 -0
  13. package/dist/360.js.LICENSE.txt +14 -0
  14. package/dist/360.js.map +1 -0
  15. package/dist/431.js +2 -0
  16. package/dist/431.js.map +1 -0
  17. package/dist/458.js +0 -0
  18. package/dist/458.js.map +0 -0
  19. package/dist/531.js +1 -1
  20. package/dist/531.js.map +1 -1
  21. package/dist/574.js +0 -0
  22. package/dist/620.js +1 -1
  23. package/dist/620.js.map +0 -0
  24. package/dist/735.js +1 -1
  25. package/dist/735.js.LICENSE.txt +2 -7
  26. package/dist/735.js.map +1 -1
  27. package/dist/739.js +2 -0
  28. package/dist/739.js.map +1 -0
  29. package/dist/743.js +1 -1
  30. package/dist/743.js.map +1 -1
  31. package/dist/788.js +1 -1
  32. package/dist/788.js.LICENSE.txt +6 -10
  33. package/dist/788.js.map +1 -1
  34. package/dist/811.js +1 -1
  35. package/dist/811.js.map +1 -1
  36. package/dist/889.js +1 -1
  37. package/dist/889.js.LICENSE.txt +0 -0
  38. package/dist/889.js.map +1 -1
  39. package/dist/99.js +3 -0
  40. package/dist/{769.js.LICENSE.txt → 99.js.LICENSE.txt} +0 -0
  41. package/dist/99.js.map +1 -0
  42. package/dist/main.js +2 -0
  43. package/dist/main.js.map +1 -0
  44. package/dist/openmrs-esm-implementer-tools-app.js +1 -1
  45. package/dist/openmrs-esm-implementer-tools-app.js.buildmanifest.json +149 -243
  46. package/dist/openmrs-esm-implementer-tools-app.js.map +1 -1
  47. package/dist/openmrs-esm-implementer-tools-app.old +1 -1
  48. package/jest.config.js +4 -2
  49. package/package.json +13 -17
  50. package/src/backend-dependencies/backend-dependencies.component.tsx +3 -2
  51. package/src/backend-dependencies/backend-dependencies.styles.scss +8 -0
  52. package/src/configuration/configuration.component.tsx +31 -32
  53. package/src/configuration/configuration.styles.scss +37 -3
  54. package/src/configuration/configuration.test.tsx +60 -37
  55. package/src/configuration/interactive-editor/config-tree.component.tsx +1 -1
  56. package/src/configuration/interactive-editor/config-tree.styles.scss +1 -1
  57. package/src/configuration/interactive-editor/description.styles.scss +11 -8
  58. package/src/configuration/interactive-editor/display-value.scss +2 -1
  59. package/src/configuration/interactive-editor/display-value.tsx +1 -1
  60. package/src/configuration/interactive-editor/editable-value.component.tsx +4 -5
  61. package/src/configuration/interactive-editor/editable-value.styles.scss +3 -2
  62. package/src/configuration/interactive-editor/layout/subtree.component.tsx +1 -1
  63. package/src/configuration/interactive-editor/layout/tree-container.component.tsx +1 -4
  64. package/src/configuration/interactive-editor/value-editor.scss +2 -1
  65. package/src/configuration/interactive-editor/value-editor.tsx +10 -7
  66. package/src/configuration/interactive-editor/value-editors/array-editor.styles.css +2 -2
  67. package/src/configuration/interactive-editor/value-editors/array-editor.tsx +5 -6
  68. package/src/configuration/interactive-editor/value-editors/concept-search.styles.scss +2 -1
  69. package/src/configuration/interactive-editor/value-editors/concept-search.tsx +1 -1
  70. package/src/configuration/interactive-editor/value-editors/extension-slot-add.tsx +1 -1
  71. package/src/configuration/interactive-editor/value-editors/extension-slot-remove.tsx +1 -1
  72. package/src/configuration/interactive-editor/value-editors/object-editor.styles.css +2 -2
  73. package/src/configuration/interactive-editor/value-editors/object-editor.tsx +1 -1
  74. package/src/configuration/interactive-editor/value-editors/patient-identifier-type-search.tsx +1 -1
  75. package/src/configuration/interactive-editor/value-editors/person-attribute-search.tsx +1 -1
  76. package/src/configuration/interactive-editor/value-editors/uuid-search.scss +7 -5
  77. package/src/configuration/interactive-editor/value-editors/value-editor-field.tsx +1 -1
  78. package/src/configuration/json-editor/json-editor.component.tsx +2 -2
  79. package/src/implementer-tools.button.tsx +3 -4
  80. package/src/implementer-tools.component.tsx +2 -2
  81. package/src/implementer-tools.styles.scss +5 -5
  82. package/src/{implementer-tools.component.test.tsx → implementer-tools.test.tsx} +0 -0
  83. package/src/popup/popup.component.tsx +5 -4
  84. package/src/popup/popup.styles.scss +1 -9
  85. package/src/ui-editor/ui-editor.tsx +3 -3
  86. package/yarn-error.log +18781 -0
  87. package/dist/1.js +0 -2
  88. package/dist/1.js.map +0 -1
  89. package/dist/105.js +0 -2
  90. package/dist/105.js.map +0 -1
  91. package/dist/25.js +0 -3
  92. package/dist/25.js.LICENSE.txt +0 -16
  93. package/dist/25.js.map +0 -1
  94. package/dist/475.js +0 -2
  95. package/dist/475.js.map +0 -1
  96. package/dist/652.js +0 -2
  97. package/dist/652.js.map +0 -1
  98. package/dist/769.js +0 -3
  99. package/dist/769.js.map +0 -1
  100. package/dist/839.js +0 -2
  101. package/dist/839.js.map +0 -1
  102. package/dist/860.js +0 -2
  103. package/dist/860.js.map +0 -1
  104. package/dist/890.js +0 -3
  105. package/dist/890.js.LICENSE.txt +0 -38
  106. package/dist/890.js.map +0 -1
package/dist/811.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[]).push([[811],{8811:(e,n,r)=>{r.r(n),r.d(n,{default:()=>O});var t,o=r(6983),u=r.n(o),i=r(9784),a=r(7644),c=r(1004),l=r(1602),s=r.n(l),f=r(3114);function d(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}function p(e,n,r,t,o,u,i){try{var a=e[u](i),c=a.value}catch(e){return void r(e)}a.done?n(c):Promise.resolve(c).then(t,o)}function m(e){return function(){var n=this,r=arguments;return new Promise((function(t,o){var u=e.apply(n,r);function i(e){p(u,t,o,i,a,"next",e)}function a(e){p(u,t,o,i,a,"throw",e)}i(void 0)}))}}function y(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return d(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(){return b.apply(this,arguments)}function b(){return(b=m(s().mark((function e(){var n;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,w();case 3:return n=e.sent,e.abrupt("return",n.data.results);case 7:e.prev=7,e.t0=e.catch(0),console.error(e.t0);case 10:return e.abrupt("return",[]);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})))).apply(this,arguments)}function h(e,n){var r,t=[],o=function(e,n){var r=Object.keys(e),t=n.map((function(e){return e.uuid}));return(0,f.Z)(r,t).map((function(n){return{uuid:n,version:e[n]}}))}(e.backendDependencies,n),u=function(e,n){return Object.keys(e).map((function(n){return{uuid:n,version:e[n]}})).filter((function(e){return n.find((function(n){return e.uuid===n.uuid}))}))}(e.backendDependencies,n);return(r=t).push.apply(r,y(o.map((function(e){return{name:e.uuid,requiredVersion:e.version,type:"missing"}}))).concat(y(u.map((function(e){var r=e.version,t=function(e,n){var r,t,o=e.uuid;return null!==(t=null===(r=n.find((function(e){return e.uuid==o})))||void 0===r?void 0:r.version)&&void 0!==t?t:""}(e,n);return{name:e.uuid,requiredVersion:r,installedVersion:t,type:A(r,t)}}))))),{name:e.moduleName,dependencies:t}}function w(){return(0,a.openmrsFetch)("/ws/rest/v1/module?v=custom:(uuid,version)",{method:"GET"})}function A(e,n){return(0,a.isVersionSatisfied)(e,n)?"okay":"version-mismatch"}function g(){return(g=m(s().mark((function e(){var n,r,o;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=7;break}return r=(null!==(n=window.installedModules)&&void 0!==n?n:[]).filter((function(e){return e[1].backendDependencies})).map((function(e){return{backendDependencies:e[1].backendDependencies,moduleName:e[0]}})),e.next=5,v();case 5:o=e.sent,t=r.map((function(e){return h(e,o)}));case 7:return e.abrupt("return",t);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function k(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}function S(){var e,n,r=(e=(0,o.useState)([]),n=2,function(e){if(Array.isArray(e))return e}(e)||function(e,n){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var t,o,u=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(u.push(t.value),!n||u.length!==n);i=!0);}catch(e){a=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw o}}return u}}(e,n)||function(e,n){if(e){if("string"==typeof e)return k(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),t=r[0],u=r[1];return(0,o.useEffect)((function(){(function(){return g.apply(this,arguments)})().then(u)}),[]),t}var E=r(2680);function I(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}var j=u().lazy((function(){return Promise.all([r.e(839),r.e(769),r.e(478),r.e(475)]).then(r.bind(r,9475))})),x=u().lazy((function(){return Promise.all([r.e(839),r.e(412),r.e(478),r.e(280)]).then(r.bind(r,8280))}));function _(){var e,n,r=S(),t=(e=(0,o.useState)(!1),n=2,function(e){if(Array.isArray(e))return e}(e)||function(e,n){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var t,o,u=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(u.push(t.value),!n||u.length!==n);i=!0);}catch(e){a=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw o}}return u}}(e,n)||function(e,n){if(e){if("string"==typeof e)return I(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?I(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=t[0],s=t[1],f=(0,E.useTranslation)().t;(0,o.useEffect)((function(){s((function(e){return e||function(e){return e.some((function(e){return e.dependencies.some((function(e){return"okay"!==e.type}))}))}(r)}))}),[r]),(0,o.useEffect)((function(){l&&(0,a.showNotification)({description:"Found modules with unresolved backend dependencies.",action:u().createElement(i.NotificationActionButton,{onClick:c.XE},f("view","View")),kind:"error"})}),[l]);var d=(0,a.useStore)(c.wT),p=d.isOpen,m=d.isUIEditorEnabled,y=d.openTabIndex;return u().createElement(u().Fragment,null,p?u().createElement(j,{close:c.zI,frontendModules:r,visibleTabIndex:y}):null,m?u().createElement(x,null):null)}function O(){return u().createElement(a.UserHasAccess,{privilege:"coreapps.systemAdministration"},u().createElement(_,null))}}}]);
1
+ "use strict";(self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[]).push([[811],{8811:(e,n,r)=>{r.r(n),r.d(n,{default:()=>O});var t,u=r(5776),o=r.n(u),i=r(1360),a=r(6974),c=r(1004),l=r(1602),s=r.n(l),f=r(3114);function d(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}function p(e,n,r,t,u,o,i){try{var a=e[o](i),c=a.value}catch(e){return void r(e)}a.done?n(c):Promise.resolve(c).then(t,u)}function m(e){return function(){var n=this,r=arguments;return new Promise((function(t,u){var o=e.apply(n,r);function i(e){p(o,t,u,i,a,"next",e)}function a(e){p(o,t,u,i,a,"throw",e)}i(void 0)}))}}function y(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return d(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(){return b.apply(this,arguments)}function b(){return(b=m(s().mark((function e(){var n;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,w();case 3:return n=e.sent,e.abrupt("return",n.data.results);case 7:e.prev=7,e.t0=e.catch(0),console.error(e.t0);case 10:return e.abrupt("return",[]);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})))).apply(this,arguments)}function h(e,n){var r,t=[],u=function(e,n){var r=Object.keys(e),t=n.map((function(e){return e.uuid}));return(0,f.Z)(r,t).map((function(n){return{uuid:n,version:e[n]}}))}(e.backendDependencies,n),o=function(e,n){return Object.keys(e).map((function(n){return{uuid:n,version:e[n]}})).filter((function(e){return n.find((function(n){return e.uuid===n.uuid}))}))}(e.backendDependencies,n);return(r=t).push.apply(r,y(u.map((function(e){return{name:e.uuid,requiredVersion:e.version,type:"missing"}}))).concat(y(o.map((function(e){var r=e.version,t=function(e,n){var r,t,u=e.uuid;return null!==(t=null===(r=n.find((function(e){return e.uuid==u})))||void 0===r?void 0:r.version)&&void 0!==t?t:""}(e,n);return{name:e.uuid,requiredVersion:r,installedVersion:t,type:A(r,t)}}))))),{name:e.moduleName,dependencies:t}}function w(){return(0,a.openmrsFetch)("/ws/rest/v1/module?v=custom:(uuid,version)",{method:"GET"})}function A(e,n){return(0,a.isVersionSatisfied)(e,n)?"okay":"version-mismatch"}function g(){return(g=m(s().mark((function e(){var n,r,u;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=7;break}return r=(null!==(n=window.installedModules)&&void 0!==n?n:[]).filter((function(e){return e[1].backendDependencies})).map((function(e){return{backendDependencies:e[1].backendDependencies,moduleName:e[0]}})),e.next=5,v();case 5:u=e.sent,t=r.map((function(e){return h(e,u)}));case 7:return e.abrupt("return",t);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function k(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}function S(){var e,n,r=(e=(0,u.useState)([]),n=2,function(e){if(Array.isArray(e))return e}(e)||function(e,n){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var t,u,o=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(o.push(t.value),!n||o.length!==n);i=!0);}catch(e){a=!0,u=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw u}}return o}}(e,n)||function(e,n){if(e){if("string"==typeof e)return k(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),t=r[0],o=r[1];return(0,u.useEffect)((function(){(function(){return g.apply(this,arguments)})().then(o)}),[]),t}var E=r(2680);function I(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=new Array(n);r<n;r++)t[r]=e[r];return t}var j=o().lazy((function(){return Promise.all([r.e(431),r.e(99),r.e(478),r.e(16)]).then(r.bind(r,7016))})),x=o().lazy((function(){return Promise.all([r.e(478),r.e(280)]).then(r.bind(r,8280))}));function _(){var e,n,r=S(),t=(e=(0,u.useState)(!1),n=2,function(e){if(Array.isArray(e))return e}(e)||function(e,n){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var t,u,o=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(o.push(t.value),!n||o.length!==n);i=!0);}catch(e){a=!0,u=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw u}}return o}}(e,n)||function(e,n){if(e){if("string"==typeof e)return I(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?I(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=t[0],s=t[1],f=(0,E.useTranslation)().t;(0,u.useEffect)((function(){s((function(e){return e||function(e){return e.some((function(e){return e.dependencies.some((function(e){return"okay"!==e.type}))}))}(r)}))}),[r]),(0,u.useEffect)((function(){l&&(0,a.showNotification)({description:"Found modules with unresolved backend dependencies.",action:o().createElement(i.xho,{onClick:c.XE},f("view","View")),kind:"error"})}),[f,l]);var d=(0,a.useStore)(c.wT),p=d.isOpen,m=d.isUIEditorEnabled,y=d.openTabIndex;return o().createElement(o().Fragment,null,p?o().createElement(j,{close:c.zI,frontendModules:r,visibleTabIndex:y}):null,m?o().createElement(x,null):null)}function O(){return o().createElement(a.UserHasAccess,{privilege:"coreapps.systemAdministration"},o().createElement(_,null))}}}]);
2
2
  //# sourceMappingURL=811.js.map
package/dist/811.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"811.js","mappings":"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","sources":["webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/openmrs-backend-dependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/useBackendDependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/implementer-tools.component.tsx"],"sourcesContent":["import { isVersionSatisfied, openmrsFetch } from \"@openmrs/esm-framework\";\nimport difference from \"lodash-es/difference\";\n\nexport type ResolvedBackendModuleType = \"missing\" | \"version-mismatch\" | \"okay\";\n\nexport interface ResolvedBackendModule {\n name: string;\n requiredVersion: string;\n installedVersion?: string;\n type: ResolvedBackendModuleType;\n}\n\nexport interface FrontendModule {\n name: string;\n dependencies: Array<ResolvedBackendModule>;\n}\n\ninterface Module {\n moduleName: string;\n backendDependencies: Record<string, string>;\n}\n\ninterface BackendModule {\n uuid: string;\n version: string;\n}\n\nlet cachedFrontendModules: Array<FrontendModule>;\n\nasync function initInstalledBackendModules(): Promise<Array<BackendModule>> {\n try {\n const response = await fetchInstalledBackendModules();\n return response.data.results;\n } catch (err) {\n console.error(err);\n }\n\n return [];\n}\n\nfunction checkIfModulesAreInstalled(\n module: Module,\n installedBackendModules: Array<BackendModule>\n): FrontendModule {\n const dependencies: Array<ResolvedBackendModule> = [];\n\n const missingBackendModule = getMissingBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n const installedAndRequiredModules = getInstalledAndRequiredBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n dependencies.push(\n ...missingBackendModule.map((m) => ({\n name: m.uuid,\n requiredVersion: m.version,\n type: \"missing\" as ResolvedBackendModuleType,\n })),\n ...installedAndRequiredModules.map((m) => {\n const requiredVersion = m.version;\n const installedVersion = getInstalledVersion(m, installedBackendModules);\n return {\n name: m.uuid,\n requiredVersion,\n installedVersion,\n type: getResolvedModuleType(requiredVersion, installedVersion),\n };\n })\n );\n\n return {\n name: module.moduleName,\n dependencies,\n };\n}\n\nfunction fetchInstalledBackendModules() {\n return openmrsFetch(`/ws/rest/v1/module?v=custom:(uuid,version)`, {\n method: \"GET\",\n });\n}\n\nfunction getMissingBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredBackendModulesUuids = Object.keys(requiredBackendModules);\n const installedBackendModuleUuids = installedBackendModules.map(\n (res) => res.uuid\n );\n\n const missingModules = difference(\n requiredBackendModulesUuids,\n installedBackendModuleUuids\n );\n\n return missingModules.map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n}\n\nfunction getInstalledAndRequiredBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredModules = Object.keys(requiredBackendModules).map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n\n return requiredModules.filter((requiredModule) => {\n return installedBackendModules.find((installedModule) => {\n return requiredModule.uuid === installedModule.uuid;\n });\n });\n}\n\nfunction getInstalledVersion(\n installedAndRequiredBackendModule: BackendModule,\n installedBackendModules: Array<BackendModule>\n) {\n const moduleName = installedAndRequiredBackendModule.uuid;\n return (\n installedBackendModules.find((mod) => mod.uuid == moduleName)?.version ?? \"\"\n );\n}\n\nfunction getResolvedModuleType(\n requiredVersion: string,\n installedVersion: string\n): ResolvedBackendModuleType {\n if (!isVersionSatisfied(requiredVersion, installedVersion)) {\n return \"version-mismatch\";\n }\n\n return \"okay\";\n}\n\nexport async function checkModules(): Promise<Array<FrontendModule>> {\n if (!cachedFrontendModules) {\n const modules = (window.installedModules ?? [])\n .filter((module) => module[1].backendDependencies)\n .map((module) => ({\n backendDependencies: module[1].backendDependencies,\n moduleName: module[0],\n }));\n\n const installedBackendModules = await initInstalledBackendModules();\n cachedFrontendModules = modules.map((m) =>\n checkIfModulesAreInstalled(m, installedBackendModules)\n );\n }\n\n return cachedFrontendModules;\n}\n\nexport function hasInvalidDependencies(frontendModules: Array<FrontendModule>) {\n return frontendModules.some((m) =>\n m.dependencies.some((n) => n.type !== \"okay\")\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { checkModules, FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport function useBackendDependencies() {\n const [\n modulesWithMissingBackendModules,\n setModulesWithMissingBackendModules,\n ] = useState<Array<FrontendModule>>([]);\n\n useEffect(() => {\n // loading missing modules\n checkModules().then(setModulesWithMissingBackendModules);\n }, []);\n\n return modulesWithMissingBackendModules;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { NotificationActionButton } from \"carbon-components-react\";\nimport {\n showNotification,\n UserHasAccess,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n implementerToolsStore,\n showModuleDiagnostics,\n togglePopup,\n} from \"./store\";\n\nimport { useBackendDependencies } from \"./backend-dependencies/useBackendDependencies\";\nimport { hasInvalidDependencies } from \"./backend-dependencies/openmrs-backend-dependencies\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Popup = React.lazy(() => import(\"./popup/popup.component\"));\nconst UiEditor = React.lazy(() => import(\"./ui-editor/ui-editor\"));\n\nfunction PopupHandler() {\n const frontendModules = useBackendDependencies();\n const [shouldShowNotification, setShouldShowNotification] = useState(false);\n const { t } = useTranslation();\n useEffect(() => {\n // displaying toast if modules are missing\n setShouldShowNotification(\n (alreadyShowing) =>\n alreadyShowing || hasInvalidDependencies(frontendModules)\n );\n }, [frontendModules]);\n\n useEffect(() => {\n // only show notification max. 1 time\n if (shouldShowNotification) {\n showNotification({\n description: \"Found modules with unresolved backend dependencies.\",\n action: (\n <NotificationActionButton onClick={showModuleDiagnostics}>\n {t(\"view\", \"View\")}\n </NotificationActionButton>\n ),\n kind: \"error\",\n });\n }\n }, [shouldShowNotification]);\n\n const { isOpen, isUIEditorEnabled, openTabIndex } = useStore(\n implementerToolsStore\n );\n return (\n <>\n {isOpen ? (\n <Popup\n close={togglePopup}\n frontendModules={frontendModules}\n visibleTabIndex={openTabIndex}\n />\n ) : null}\n {isUIEditorEnabled ? <UiEditor /> : null}\n </>\n );\n}\n\nexport default function ImplementerTools() {\n return (\n <UserHasAccess privilege=\"coreapps.systemAdministration\">\n <PopupHandler />\n </UserHasAccess>\n );\n}\n"],"names":["cachedFrontendModules","initInstalledBackendModules","response","fetchInstalledBackendModules","data","results","console","error","checkIfModulesAreInstalled","module","installedBackendModules","dependencies","missingBackendModule","requiredBackendModules","requiredBackendModulesUuids","Object","keys","installedBackendModuleUuids","map","res","uuid","difference","key","version","getMissingBackendModules","backendDependencies","installedAndRequiredModules","filter","requiredModule","find","installedModule","getInstalledAndRequiredBackendModules","push","m","name","requiredVersion","type","installedVersion","installedAndRequiredBackendModule","moduleName","mod","getInstalledVersion","getResolvedModuleType","openmrsFetch","method","isVersionSatisfied","checkModules","window","modules","installedModules","useBackendDependencies","useState","modulesWithMissingBackendModules","setModulesWithMissingBackendModules","useEffect","then","Popup","React","UiEditor","PopupHandler","frontendModules","shouldShowNotification","setShouldShowNotification","useTranslation","t","alreadyShowing","some","n","hasInvalidDependencies","showNotification","description","action","NotificationActionButton","onClick","showModuleDiagnostics","kind","useStore","implementerToolsStore","isOpen","isUIEditorEnabled","openTabIndex","close","togglePopup","visibleTabIndex","ImplementerTools","UserHasAccess","privilege"],"sourceRoot":""}
1
+ {"version":3,"file":"811.js","mappings":"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","sources":["webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/openmrs-backend-dependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/useBackendDependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/implementer-tools.component.tsx"],"sourcesContent":["import { isVersionSatisfied, openmrsFetch } from \"@openmrs/esm-framework\";\nimport difference from \"lodash-es/difference\";\n\nexport type ResolvedBackendModuleType = \"missing\" | \"version-mismatch\" | \"okay\";\n\nexport interface ResolvedBackendModule {\n name: string;\n requiredVersion: string;\n installedVersion?: string;\n type: ResolvedBackendModuleType;\n}\n\nexport interface FrontendModule {\n name: string;\n dependencies: Array<ResolvedBackendModule>;\n}\n\ninterface Module {\n moduleName: string;\n backendDependencies: Record<string, string>;\n}\n\ninterface BackendModule {\n uuid: string;\n version: string;\n}\n\nlet cachedFrontendModules: Array<FrontendModule>;\n\nasync function initInstalledBackendModules(): Promise<Array<BackendModule>> {\n try {\n const response = await fetchInstalledBackendModules();\n return response.data.results;\n } catch (err) {\n console.error(err);\n }\n\n return [];\n}\n\nfunction checkIfModulesAreInstalled(\n module: Module,\n installedBackendModules: Array<BackendModule>\n): FrontendModule {\n const dependencies: Array<ResolvedBackendModule> = [];\n\n const missingBackendModule = getMissingBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n const installedAndRequiredModules = getInstalledAndRequiredBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n dependencies.push(\n ...missingBackendModule.map((m) => ({\n name: m.uuid,\n requiredVersion: m.version,\n type: \"missing\" as ResolvedBackendModuleType,\n })),\n ...installedAndRequiredModules.map((m) => {\n const requiredVersion = m.version;\n const installedVersion = getInstalledVersion(m, installedBackendModules);\n return {\n name: m.uuid,\n requiredVersion,\n installedVersion,\n type: getResolvedModuleType(requiredVersion, installedVersion),\n };\n })\n );\n\n return {\n name: module.moduleName,\n dependencies,\n };\n}\n\nfunction fetchInstalledBackendModules() {\n return openmrsFetch(`/ws/rest/v1/module?v=custom:(uuid,version)`, {\n method: \"GET\",\n });\n}\n\nfunction getMissingBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredBackendModulesUuids = Object.keys(requiredBackendModules);\n const installedBackendModuleUuids = installedBackendModules.map(\n (res) => res.uuid\n );\n\n const missingModules = difference(\n requiredBackendModulesUuids,\n installedBackendModuleUuids\n );\n\n return missingModules.map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n}\n\nfunction getInstalledAndRequiredBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredModules = Object.keys(requiredBackendModules).map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n\n return requiredModules.filter((requiredModule) => {\n return installedBackendModules.find((installedModule) => {\n return requiredModule.uuid === installedModule.uuid;\n });\n });\n}\n\nfunction getInstalledVersion(\n installedAndRequiredBackendModule: BackendModule,\n installedBackendModules: Array<BackendModule>\n) {\n const moduleName = installedAndRequiredBackendModule.uuid;\n return (\n installedBackendModules.find((mod) => mod.uuid == moduleName)?.version ?? \"\"\n );\n}\n\nfunction getResolvedModuleType(\n requiredVersion: string,\n installedVersion: string\n): ResolvedBackendModuleType {\n if (!isVersionSatisfied(requiredVersion, installedVersion)) {\n return \"version-mismatch\";\n }\n\n return \"okay\";\n}\n\nexport async function checkModules(): Promise<Array<FrontendModule>> {\n if (!cachedFrontendModules) {\n const modules = (window.installedModules ?? [])\n .filter((module) => module[1].backendDependencies)\n .map((module) => ({\n backendDependencies: module[1].backendDependencies,\n moduleName: module[0],\n }));\n\n const installedBackendModules = await initInstalledBackendModules();\n cachedFrontendModules = modules.map((m) =>\n checkIfModulesAreInstalled(m, installedBackendModules)\n );\n }\n\n return cachedFrontendModules;\n}\n\nexport function hasInvalidDependencies(frontendModules: Array<FrontendModule>) {\n return frontendModules.some((m) =>\n m.dependencies.some((n) => n.type !== \"okay\")\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { checkModules, FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport function useBackendDependencies() {\n const [\n modulesWithMissingBackendModules,\n setModulesWithMissingBackendModules,\n ] = useState<Array<FrontendModule>>([]);\n\n useEffect(() => {\n // loading missing modules\n checkModules().then(setModulesWithMissingBackendModules);\n }, []);\n\n return modulesWithMissingBackendModules;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { NotificationActionButton } from \"@carbon/react\";\nimport {\n showNotification,\n UserHasAccess,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n implementerToolsStore,\n showModuleDiagnostics,\n togglePopup,\n} from \"./store\";\n\nimport { useBackendDependencies } from \"./backend-dependencies/useBackendDependencies\";\nimport { hasInvalidDependencies } from \"./backend-dependencies/openmrs-backend-dependencies\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Popup = React.lazy(() => import(\"./popup/popup.component\"));\nconst UiEditor = React.lazy(() => import(\"./ui-editor/ui-editor\"));\n\nfunction PopupHandler() {\n const frontendModules = useBackendDependencies();\n const [shouldShowNotification, setShouldShowNotification] = useState(false);\n const { t } = useTranslation();\n useEffect(() => {\n // displaying toast if modules are missing\n setShouldShowNotification(\n (alreadyShowing) =>\n alreadyShowing || hasInvalidDependencies(frontendModules)\n );\n }, [frontendModules]);\n\n useEffect(() => {\n // only show notification max. 1 time\n if (shouldShowNotification) {\n showNotification({\n description: \"Found modules with unresolved backend dependencies.\",\n action: (\n <NotificationActionButton onClick={showModuleDiagnostics}>\n {t(\"view\", \"View\")}\n </NotificationActionButton>\n ),\n kind: \"error\",\n });\n }\n }, [t, shouldShowNotification]);\n\n const { isOpen, isUIEditorEnabled, openTabIndex } = useStore(\n implementerToolsStore\n );\n return (\n <>\n {isOpen ? (\n <Popup\n close={togglePopup}\n frontendModules={frontendModules}\n visibleTabIndex={openTabIndex}\n />\n ) : null}\n {isUIEditorEnabled ? <UiEditor /> : null}\n </>\n );\n}\n\nexport default function ImplementerTools() {\n return (\n <UserHasAccess privilege=\"coreapps.systemAdministration\">\n <PopupHandler />\n </UserHasAccess>\n );\n}\n"],"names":["cachedFrontendModules","initInstalledBackendModules","response","fetchInstalledBackendModules","data","results","console","error","checkIfModulesAreInstalled","module","installedBackendModules","dependencies","missingBackendModule","requiredBackendModules","requiredBackendModulesUuids","Object","keys","installedBackendModuleUuids","map","res","uuid","difference","key","version","getMissingBackendModules","backendDependencies","installedAndRequiredModules","filter","requiredModule","find","installedModule","getInstalledAndRequiredBackendModules","push","m","name","requiredVersion","type","installedVersion","installedAndRequiredBackendModule","moduleName","mod","getInstalledVersion","getResolvedModuleType","openmrsFetch","method","isVersionSatisfied","checkModules","window","modules","installedModules","useBackendDependencies","useState","modulesWithMissingBackendModules","setModulesWithMissingBackendModules","useEffect","then","Popup","React","UiEditor","PopupHandler","frontendModules","shouldShowNotification","setShouldShowNotification","useTranslation","t","alreadyShowing","some","n","hasInvalidDependencies","showNotification","description","action","NotificationActionButton","onClick","showModuleDiagnostics","kind","useStore","implementerToolsStore","isOpen","isUIEditorEnabled","openTabIndex","close","togglePopup","visibleTabIndex","ImplementerTools","UserHasAccess","privilege"],"sourceRoot":""}