@argusoft/medplat-core 1.0.32 → 1.0.33

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 (99) hide show
  1. package/dist/{AccessRights-DBjTQA1-.js → AccessRights-BC43Jhml.js} +264 -199
  2. package/dist/AccessRights-BC43Jhml.js.map +1 -0
  3. package/dist/{BrandsPage-CdcAvaml-ZtVTX6vX.js → BrandsPage-CdcAvaml-CYT80CMH.js} +3 -3
  4. package/dist/{BrandsPage-CdcAvaml-ZtVTX6vX.js.map → BrandsPage-CdcAvaml-CYT80CMH.js.map} +1 -1
  5. package/dist/{CategoriesPage-BprQEYJw-CclreTv1.js → CategoriesPage-BprQEYJw-BRAukJB1.js} +3 -3
  6. package/dist/{CategoriesPage-BprQEYJw-CclreTv1.js.map → CategoriesPage-BprQEYJw-BRAukJB1.js.map} +1 -1
  7. package/dist/ChangePasswordModalCore-rypTxA2O.js +238 -0
  8. package/dist/ChangePasswordModalCore-rypTxA2O.js.map +1 -0
  9. package/dist/{DashboardPage-CTiGSx71-CsYohJ5e.js → DashboardPage-CTiGSx71-DX-TzGOH.js} +3 -3
  10. package/dist/{DashboardPage-CTiGSx71-CsYohJ5e.js.map → DashboardPage-CTiGSx71-DX-TzGOH.js.map} +1 -1
  11. package/dist/{FacilityPicker-BXa2VF7i-Dab_Jwa5.js → FacilityPicker-BXa2VF7i-D0JUIqLv.js} +2 -2
  12. package/dist/{FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map → FacilityPicker-BXa2VF7i-D0JUIqLv.js.map} +1 -1
  13. package/dist/FaqList-CeDEuhU_.js +237 -0
  14. package/dist/FaqList-CeDEuhU_.js.map +1 -0
  15. package/dist/FaqSkeletons-hLCEcRr-.js +19 -0
  16. package/dist/FaqSkeletons-hLCEcRr-.js.map +1 -0
  17. package/dist/FaqView-sDzBVyXV.js +617 -0
  18. package/dist/FaqView-sDzBVyXV.js.map +1 -0
  19. package/dist/{FeatureMenu-Kc73yPHH.js → FeatureMenu-CaI-ZhSZ.js} +2 -2
  20. package/dist/{FeatureMenu-Kc73yPHH.js.map → FeatureMenu-CaI-ZhSZ.js.map} +1 -1
  21. package/dist/{ImmunizationConfigurationBase-lKsJZMak.js → ImmunizationConfigurationBase-Clkk0-n6.js} +2352 -2332
  22. package/dist/{ImmunizationConfigurationBase-lKsJZMak.js.map → ImmunizationConfigurationBase-Clkk0-n6.js.map} +1 -1
  23. package/dist/{InventoryPage-JadYMCzU-CzJQfQ2A.js → InventoryPage-JadYMCzU-CWcCauMI.js} +4 -4
  24. package/dist/{InventoryPage-JadYMCzU-CzJQfQ2A.js.map → InventoryPage-JadYMCzU-CWcCauMI.js.map} +1 -1
  25. package/dist/ManageFaq-4cT6bntx.js +1583 -0
  26. package/dist/ManageFaq-4cT6bntx.js.map +1 -0
  27. package/dist/ManageFaq.css +1 -0
  28. package/dist/{ManageUser-Dm0l833u.js → ManageUser-DchUMAyC.js} +2 -2
  29. package/dist/{ManageUser-Dm0l833u.js.map → ManageUser-DchUMAyC.js.map} +1 -1
  30. package/dist/{MemberProfileCard-01d_jz3w-DYHtbgMX.js → MemberProfileCard-01d_jz3w-CQi_zu6x.js} +3 -3
  31. package/dist/{MemberProfileCard-01d_jz3w-DYHtbgMX.js.map → MemberProfileCard-01d_jz3w-CQi_zu6x.js.map} +1 -1
  32. package/dist/{PaymentCreatePage-D6NZBUC3-DxXf2kvH.js → PaymentCreatePage-D6NZBUC3-_98S21Sa.js} +4 -4
  33. package/dist/{PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map → PaymentCreatePage-D6NZBUC3-_98S21Sa.js.map} +1 -1
  34. package/dist/{PaymentsPage-CHieGNrn-BnYCtqHd.js → PaymentsPage-CHieGNrn-ChCXEyck.js} +3 -3
  35. package/dist/{PaymentsPage-CHieGNrn-BnYCtqHd.js.map → PaymentsPage-CHieGNrn-ChCXEyck.js.map} +1 -1
  36. package/dist/{PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js} +2 -2
  37. package/dist/{PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js.map} +1 -1
  38. package/dist/{PickupCreatePage-C7_67u_u-OId8-e2a.js → PickupCreatePage-C7_67u_u-DbDIZ1WC.js} +5 -5
  39. package/dist/{PickupCreatePage-C7_67u_u-OId8-e2a.js.map → PickupCreatePage-C7_67u_u-DbDIZ1WC.js.map} +1 -1
  40. package/dist/{PickupsPage-BWblMlic-CWkgeBw0.js → PickupsPage-BWblMlic-KehDMebm.js} +4 -4
  41. package/dist/{PickupsPage-BWblMlic-CWkgeBw0.js.map → PickupsPage-BWblMlic-KehDMebm.js.map} +1 -1
  42. package/dist/{PmGuard-BvUUbU80-BpYNaDzl.js → PmGuard-BvUUbU80-DJipZoSg.js} +2 -2
  43. package/dist/{PmGuard-BvUUbU80-BpYNaDzl.js.map → PmGuard-BvUUbU80-DJipZoSg.js.map} +1 -1
  44. package/dist/{ProductEditPage-Dbq4vUAA-BoBmTPPL.js → ProductEditPage-Dbq4vUAA-DusAdAvm.js} +4 -4
  45. package/dist/{ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map → ProductEditPage-Dbq4vUAA-DusAdAvm.js.map} +1 -1
  46. package/dist/{ProductsPage-BI22nPb4-CQBjnc-n.js → ProductsPage-BI22nPb4-D3GnWz34.js} +4 -4
  47. package/dist/{ProductsPage-BI22nPb4-CQBjnc-n.js.map → ProductsPage-BI22nPb4-D3GnWz34.js.map} +1 -1
  48. package/dist/{PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js → PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js} +4 -4
  49. package/dist/{PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map → PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js.map} +1 -1
  50. package/dist/{PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js} +3 -3
  51. package/dist/{PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js.map} +1 -1
  52. package/dist/{PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js} +3 -3
  53. package/dist/{PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js.map} +1 -1
  54. package/dist/{PurchasesPage-Djl1AqD_-DXeYFMrX.js → PurchasesPage-Djl1AqD_-DxBRFRDy.js} +3 -3
  55. package/dist/{PurchasesPage-Djl1AqD_-DXeYFMrX.js.map → PurchasesPage-Djl1AqD_-DxBRFRDy.js.map} +1 -1
  56. package/dist/{SaleCreatePage-DHBLmlBr-BlgjVsq6.js → SaleCreatePage-DHBLmlBr-aEGmvJQq.js} +4 -4
  57. package/dist/{SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map → SaleCreatePage-DHBLmlBr-aEGmvJQq.js.map} +1 -1
  58. package/dist/{SalesPage-eF9Yr42z-BQ9FlXC3.js → SalesPage-eF9Yr42z-CvOr82vo.js} +3 -3
  59. package/dist/{SalesPage-eF9Yr42z-BQ9FlXC3.js.map → SalesPage-eF9Yr42z-CvOr82vo.js.map} +1 -1
  60. package/dist/{SettingsPage-Cre-UE3r-9ntnLYsQ.js → SettingsPage-Cre-UE3r-CGTVp5Zw.js} +3 -3
  61. package/dist/{SettingsPage-Cre-UE3r-9ntnLYsQ.js.map → SettingsPage-Cre-UE3r-CGTVp5Zw.js.map} +1 -1
  62. package/dist/{StorageUnitsPage-CTEVuemZ-B4osG74N.js → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js} +5 -5
  63. package/dist/{StorageUnitsPage-CTEVuemZ-B4osG74N.js.map → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js.map} +1 -1
  64. package/dist/{SubMenu-OO2zhKiu.js → SubMenu-DZIhur09.js} +2 -2
  65. package/dist/{SubMenu-OO2zhKiu.js.map → SubMenu-DZIhur09.js.map} +1 -1
  66. package/dist/{TransactionsPage-Zuu7sjID-B-ACzvd1.js → TransactionsPage-Zuu7sjID-BDmUK7s1.js} +3 -3
  67. package/dist/{TransactionsPage-Zuu7sjID-B-ACzvd1.js.map → TransactionsPage-Zuu7sjID-BDmUK7s1.js.map} +1 -1
  68. package/dist/{TransferCreatePage-DlT0nCDj-B2SdPgYB.js → TransferCreatePage-DlT0nCDj-evHPJc99.js} +4 -4
  69. package/dist/{TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map → TransferCreatePage-DlT0nCDj-evHPJc99.js.map} +1 -1
  70. package/dist/{TransfersPage-DqaSvHda-G2tFa5Jq.js → TransfersPage-DqaSvHda-DAUn5SSr.js} +3 -3
  71. package/dist/{TransfersPage-DqaSvHda-G2tFa5Jq.js.map → TransfersPage-DqaSvHda-DAUn5SSr.js.map} +1 -1
  72. package/dist/{VaccineEducation-T_UE57Ef.js → VaccineEducation-DWkNNasF.js} +2 -2
  73. package/dist/{VaccineEducation-T_UE57Ef.js.map → VaccineEducation-DWkNNasF.js.map} +1 -1
  74. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js +1450 -0
  75. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js.map +1 -0
  76. package/dist/VaccineEducationConfigurator.css +1 -4
  77. package/dist/{VaccineEducationList-Ok7_5EFb.js → VaccineEducationList-BxZHahCh.js} +2 -2
  78. package/dist/{VaccineEducationList-Ok7_5EFb.js.map → VaccineEducationList-BxZHahCh.js.map} +1 -1
  79. package/dist/{VialsPage-LoDaUqVv-DmMXbK8j.js → VialsPage-LoDaUqVv-Dw00Zc06.js} +4 -4
  80. package/dist/{VialsPage-LoDaUqVv-DmMXbK8j.js.map → VialsPage-LoDaUqVv-Dw00Zc06.js.map} +1 -1
  81. package/dist/{VaccineEducationConfigurator-CWc20_rv.js → ckeditor5-_x14lrzc.js} +4014 -5372
  82. package/dist/ckeditor5-_x14lrzc.js.map +1 -0
  83. package/dist/ckeditor5.css +4 -0
  84. package/dist/faqMedia-FDpje7v0.js +234 -0
  85. package/dist/faqMedia-FDpje7v0.js.map +1 -0
  86. package/dist/index.css +1 -1
  87. package/dist/index.js +1 -1
  88. package/dist/{index.lib-BySa9-Z-.js → index.lib-QDEODnRT.js} +343 -303
  89. package/dist/index.lib-QDEODnRT.js.map +1 -0
  90. package/dist/{listValueStore-5d4vNGQM-WclZ5nBG.js → listValueStore-5d4vNGQM-DB08drLf.js} +2 -2
  91. package/dist/{listValueStore-5d4vNGQM-WclZ5nBG.js.map → listValueStore-5d4vNGQM-DB08drLf.js.map} +1 -1
  92. package/dist/proxy-C4gcRXzG.js +5265 -0
  93. package/dist/proxy-C4gcRXzG.js.map +1 -0
  94. package/package.json +3 -2
  95. package/dist/AccessRights-DBjTQA1-.js.map +0 -1
  96. package/dist/ChangePasswordModalCore-DZGOkbRY.js +0 -5494
  97. package/dist/ChangePasswordModalCore-DZGOkbRY.js.map +0 -1
  98. package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +0 -1
  99. package/dist/index.lib-BySa9-Z-.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FaqView-sDzBVyXV.js","sources":["../src/views/Faq/LegacyStaticFaq.jsx","../src/views/Faq/FaqView.jsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport {\n Box,\n Typography,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Tabs,\n Tab,\n Container,\n Paper,\n useTheme,\n alpha,\n} from \"@mui/material\";\nimport { ExpandMore as ExpandMoreIcon } from \"@mui/icons-material\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nconst faqData = {\n gu: [\n {\n q: \"TeCHO+ શું છે?\",\n a: \"TeCHO+ એટલે ટેકનોલોજી સક્ષમ કોમ્યુનિટી હેલ્થ ઓપરેશન્સ. તે ટકાઉ વિકાસ લક્ષ્યાંક (SDGs) પ્રાપ્ત કરવા માટે અત્યાધુનિક મોબાઇલ માહિતી ટેકનોલોજીનો ઉપયોગ કરીને આરોગ્ય સેવાઓના કવરેજ અને ગુણવત્તામાં વધુ સુધારો કરવા માટે GOG ની એક પહેલ છે અને તે એક મોબાઇલ અને વેબ-આધારિત એપ્લિકેશન છે જે પ્રજનન અને બાળ આરોગ્ય, બિન-ચેપી રોગો, ચેપી રોગો, માનસિક સ્વાસ્થ્ય સંબંધિત આરોગ્ય સેવાઓના કવરેજ અને ગુણવત્તામાં સુધારો કરવા માટે આરોગ્ય કાર્યકરો અને વહીવટકર્તાઓ માટે સહાયક તરીકે કાર્ય કરે છે.\",\n },\n {\n q: \"TeCHO+ નો ઉદ્દેશ્ય શું છે?\",\n a: \"TeCHO+ ગુજરાતના નીચે મુજબના સૂચકાકોની પ્રગતિમાં વધુ સુધારો લાવી રહ્યું છે: (1) MMR, (2) IMR, (3) ઓછા જન્મ વજનવાળા બાળકો, (4) સંપૂર્ણ રસીકરણ, (5) કુપોષણ, (6) માતાઓમાં એનિમિયા, (7) રોગચાળો, (8) જન્મ સમયે લિંગ ગુણોત્તર, (9) માનસિક સ્વાસ્થ્ય, (10) TFR/અંતરની પદ્ધતિઓ, અને (11) બિનચેપી રોગો.\",\n },\n {\n q: \"TeCHO+ દ્વારા કયા કાર્યક્રમોનું મોનીટરીંગ કરવામાં આવે છે?\",\n a: \"પ્રજનન અને બાળ આરોગ્ય, રસીકરણ, પોષણ, રાષ્ટ્રીય બાળ સ્વાસ્થ્ય કાર્યક્રમ, રાષ્ટ્રીય કિશોર સ્વાસ્થ્ય કાર્યક્રમ, ઘરે નવજાત શિશુ સંભાળ, ઘરે યુવાન બાળ સંભાળ, અંધત્વ નિયંત્રણ માટે રાષ્ટ્રીય કાર્યક્રમ, રાષ્ટ્રીય કૃમિનાશક દિવસ અભિયાન, ફાઇલેરિયાસિસ, મેલેરિયા નિયંત્રણ કાર્યક્રમનું TeCHO+ દ્વારા મોનીટરીંગ કરવામાં આવે છે.\",\n },\n {\n q: \"TeCHO+ ક્યારે લોન્ચ થયું?\",\n a: \"TeCHO+ 8 ઓક્ટોબર, 2017 ના રોજ ભારતના માનનીય પ્રધાનમંત્રી દ્વારા શરૂ કરવામાં આવ્યું હતું. પ્રજનન અને બાળ સ્વાસ્થ્ય અને અન્ય કાર્યક્રમોની એપ્રિલ, 2019 થી કામગીરી કરવામાં આવે છે.\",\n },\n {\n q: \"TeCHO+ કયા પ્લેટફોર્મ પર ઉપલબ્ધ છે?\",\n a: \"ફિલ્ડ વર્કર માટે TeCHO+ મોબાઇલ એપ્લિકેશન એન્ડ્રોઇડ પર ઉપલબ્ધ છે.\",\n },\n {\n q: \"TeCHO+ માંથી ડેટા કયા અન્ય પોર્ટલ સાથે શેર કરવામાં આવ્યો?\",\n a: \"TeCHO+ માંથી નેશનલ RCH પોર્ટલ, નેશનલ RBSK પોર્ટલ, CM ડેશબોર્ડ, શિક્ષણ વિભાગની ચાઇલ્ડ ટ્રેકિંગ સિસ્ટમ, POSHAN ટ્રેકર, PFMS પોર્ટલ, મહિલા અને બાળ વિકાસ વિભાગ સાથે ડેટા શેર કરવામાં આવે છે.\",\n },\n {\n q: \"TeCHO+ માં કેટલા વપરાશકર્તાઓ નોંધાયેલા છે?\",\n a: \"આશા-૪૪,૧૨૭, આશા ફેસિલિટેટર- ૨૨૦, સીએચઓ- ૭,૦૫૦, એએનએમ- ૧૧,૬૨૫, આરબીએસકે એમઓ સ્ત્રી- ૧,૦૩૫, આરબીએસકે એમઓ પુરુષ- ૧,૦૪૮, વેબ વપરાશકર્તાઓ -૨૮,૮૪૫.\",\n },\n {\n q: \"TeCHO+ દ્વારા કઈ યોજનાઓનું મોનીટરીંગ કરવામાં આવે છે?\",\n a: \"નમોશ્રી યોજના, અત્યંત જોખમી સગર્ભા સ્ત્રીઓ માટેની યોજના, મુખ્ય મંત્રી માતૃશક્તિ યોજના (WCD, GoG), પ્રધાન મંત્રી સુરક્ષા માતૃત્વ અભિયાન, જનની શિશુ સુરક્ષા કાર્યક્રમ, જનની સુરક્ષા યોજના, એશપીરેશનલ બ્લોક માટે સ્વ-સહાય જૂથ યોજના વગેરેનું TeCHO+ દ્વારા મોનીટરીંગ કરવામાં આવે છે.\",\n },\n {\n q: \"નીતિ નિર્માણમાં TeCHO+ ની ભૂમિકા શું છે?\",\n a: \"TeCHO+ મોનીટરીંગ તેમજ મૂલ્યાંકન હેતુ માટે રીઅલ ટાઈમ ડેટા પૂરો પાડે છે, TeCHO+ આરોગ્યના વસ્તી વિષયક, આર્થિક અને અન્ય પાસાઓના આધારે નીતિ નિર્માણ માટે મૂલ્યાંકીત ડેટા પણ પૂરો પાડે છે.\",\n },\n {\n q: \"TeCHO+ ના ફાયદા શું છે?\",\n a: \"• સેવા પ્રદાતા દ્વારા સેવા વિતરણના સ્થળે રીઅલ ટાઇમ ડેટા એન્ટ્રી.\\n• માતા મૃત્યુ દર અને શિશુ મૃત્યુ દર ઘટાડવા માટે ટ્રેકિંગ.\\n• રસીકરણ અને એનિમિયા નિયંત્રણમાં મદદ.\\n• રજિસ્ટર અને રિપોર્ટ્સનું ડિજિટલાઇઝેશન.\",\n },\n {\n q: \"શું TeCHO+ લાભાર્થીઓને રીમાઇન્ડરની સુવિધા પૂરી પાડે છે?\",\n a: \"હા, TeCHO+ ઇકોસિસ્ટમ લાભાર્થીઓને તેમની બાકી સેવાઓ અંગે ટેક્સ્ટ સંદેશાઓના રૂપમાં રીમાઇન્ડર મોકલે છે.\",\n },\n {\n q: \"TeCHO+ પર અલગ અલગ કયા પ્લેટફોર્મ છે?\",\n a: \"મોબાઇલ એપ્લિકેશન, વેબ પોર્ટલ, આરોગ્યની સ્થિતિ-ગુજરાત એપ્લિકેશન, અને નાગરિક મોડ્યુલ.\",\n },\n {\n q: \"શું TeCHO+ ABDM સુસંગત છે?\",\n a: \"હા, TeCHO+ ત્રણેય માઇલસ્ટોન માટે ABDM સુસંગત છે.\",\n },\n {\n q: \"TeCHO+ પર નોંધાયેલા લાભાર્થીઓને કેવી રીતે ટ્રેક કરી શકાય?\",\n a: \"કુટુંબ ઓળખપત્ર અને આરોગ્ય ઓળખપત્ર દ્વારા.\",\n },\n {\n q: \"TeCHO+ દ્વારા સ્થળાંતરિત લોકોનું મોનીટરીંગ કેવી રીતે કરવામાં આવે છે?\",\n a: \"આંતર-જિલ્લા અને આંતર-રાજ્ય ટ્રેકિંગ માટે સ્થળાંતર મોડ્યુલ દ્વારા.\",\n },\n ],\n en: [\n {\n q: \"What is TeCHO+?\",\n a: \"TeCHO+ stands for Technology enabled Community Health Operations. It is an initiative of the GOG to further improve coverage and quality of health services using state of art mobile information technology to achieve Sustainable Developmental Goals (SDGs) and is a mobile & web-based application which works as a job-aid for health workers and administrators for improving coverage and quality of health services related to reproductive and child health, non-communicable diseases, communicable diseases, mental health.\",\n },\n {\n q: \"What is the objective of TeCHO+?\",\n a: \"TeCHO+ is leading further improvement of Gujarat’s performance for: (1) MMR, (2) IMR, (3) Low birth weight babies, (4) Complete immunization, (5) Under nutrition, (6) Anaemia among mothers, (7) Epidemics, (8) Sex ratio at birth, (9) Mental health, (10) TFR/spacing methods, and (11) Non communicable diseases.\",\n },\n {\n q: \"Which Programmes are monitored through TeCHO+?\",\n a: \"Reproductive and child health, Immunization, Nutrition, Rashtriya Bal Swasthya Karyakram, Rashtriya Kishor Swasthya Karyakram, Home Based Newborn Care, Home Based Young Child Care, National Program for Control of Blindness, National Deworming Day Campaign, Filariasis, Malaria Control Program are monitored through TeCHO+.\",\n },\n {\n q: \"When was TeCHO+ launched?\",\n a: \"TeCHO+ was launched on 8th October, 2017 by Hon. Prime Minister of India. Reproductive and Child health and other programs are monitored from April, 2019.\",\n },\n {\n q: \"On Which Platforms is TeCHO+ available?\",\n a: \"TeCHO+ mobile application for field workers is available on Android.\",\n },\n {\n q: \"Data from TeCHO+ shared with which other portals?\",\n a: \"TeCHO+ shared data with National RCH Portal, National RBSK Portal, CM Dashboard, Child Tracking System of Education department, POSHAN Tracker, PFMS portal, Women & Child Development dept.\",\n },\n {\n q: \"How many users are enrolled in TeCHO+?\",\n a: \"ASHA - 44,127, ASHA Facilitator - 220, CHO - 7,050, ANM - 11,625, RBSK MO Lady - 1,035, RBSK MO Male - 1,048, Web Users - 28,845.\",\n },\n {\n q: \"Which schemes are monitored through TeCHO+?\",\n a: \"Namoshree scheme, Scheme for Very High-Risk Pregnant Women, Mukhyamantri Matrushakti Yojna (WCD, GoG), Pradhan Mantri Surakshit Matrutva Abhiyan, Janani Shishu Suraksha Karyakram, Janani Suraksha Yojna, Self Help Group Scheme for aspirational block are monitored through TeCHO+.\",\n },\n {\n q: \"What is the role of TeCHO+ in policy making?\",\n a: \"TeCHO+ provides real time data for monitoring as well as analysis purpose, TeCHO+ also provides analytical data for policy making on the basis of demographic, economic and other aspects of the health.\",\n },\n {\n q: \"What are the benefits of TeCHO+?\",\n a: \"• Real time data entry by service provider.\\n• Tracking to reduce maternal and infant mortality.\\n• Helps in complete immunization and anemia control.\\n• Digitalization of registers and reports.\",\n },\n {\n q: \"Does TeCHO+ provide facility of reminder to beneficiaries?\",\n a: \"Yes, TeCHO+ ecosystem sends reminders in form of text messages to beneficiaries regarding their due services.\",\n },\n {\n q: \"Which are the different platforms on TeCHO+?\",\n a: \"TeCHO+ Mobile app, TeCHO+ Web, State of Health- Gujarat app, and Citizen Module.\",\n },\n {\n q: \"Is TeCHO+ ABDM Compliant?\",\n a: \"Yes, TeCHO+ is ABDM compliant for all three milestones.\",\n },\n {\n q: \"How registered beneficiaries can be tracked on TeCHO+?\",\n a: \"Through unique family and health IDs, mobile numbers, and demographic details.\",\n },\n {\n q: \"How are the Migrated peoples monitored through TeCHO+?\",\n a: \"Through a comprehensive migration module for inter-district tracking and integration with national portals for inter-state migration.\",\n },\n ],\n};\n\nconst LegacyStaticFaq = () => {\n const [lang, setLang] = useState(\"gu\");\n const theme = useTheme();\n const isDark = theme.palette.mode === \"dark\";\n\n const handleLangChange = (event, newValue) => {\n setLang(newValue);\n };\n\n return (\n <Container maxWidth=\"lg\" sx={{ py: 6 }}>\n <motion.div\n initial={{ opacity: 0, y: -20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.5 }}\n >\n <Box textAlign=\"center\" mb={6}>\n <Typography\n variant=\"h3\"\n fontWeight=\"800\"\n gutterBottom\n sx={{\n background: \"linear-gradient(45deg, #1c6fb7 30%, #4da8da 90%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n }}\n >\n {lang === \"gu\"\n ? \"વારંવાર પૂછાતા પ્રશ્નો\"\n : \"Frequently Asked Questions\"}\n </Typography>\n <Typography variant=\"h6\" color=\"text.secondary\">\n {lang === \"gu\"\n ? \"TeCHO+ વિશે વધુ જાણવા માટે અહીં શોધો\"\n : \"Find answers to your questions about TeCHO+\"}\n </Typography>\n </Box>\n </motion.div>\n\n <Paper\n elevation={0}\n sx={{\n borderRadius: \"16px\",\n overflow: \"hidden\",\n border: `1px solid ${theme.palette.divider}`,\n background: isDark ? alpha(\"#fff\", 0.05) : \"#fff\",\n mb: 4,\n }}\n >\n <Tabs\n value={lang}\n onChange={handleLangChange}\n centered\n sx={{\n borderBottom: 1,\n borderColor: \"divider\",\n \"& .MuiTab-root\": {\n fontWeight: \"600\",\n fontSize: \"1rem\",\n py: 2,\n },\n }}\n >\n <Tab label=\"ગુજરાતી\" value=\"gu\" />\n <Tab label=\"English\" value=\"en\" />\n </Tabs>\n\n <Box p={4}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={lang}\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.3 }}\n >\n {faqData[lang].map((item, index) => (\n <Accordion\n key={index}\n elevation={0}\n sx={{\n mb: 2,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: \"12px !important\",\n \"&:before\": { display: \"none\" },\n \"&:hover\": {\n borderColor: theme.palette.primary.main,\n background: isDark\n ? alpha(\"#fff\", 0.02)\n : alpha(theme.palette.primary.main, 0.02),\n },\n transition: \"all 0.2s\",\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon color=\"primary\" />}\n sx={{\n px: 3,\n \"& .MuiAccordionSummary-content\": { my: 2 },\n }}\n >\n <Typography fontWeight=\"600\" fontSize=\"1.1rem\">\n {item.q}\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ px: 3, pb: 3 }}>\n <Typography\n color=\"text.secondary\"\n sx={{ whiteSpace: \"pre-line\", lineHeight: 1.7 }}\n >\n {item.a}\n </Typography>\n </AccordionDetails>\n </Accordion>\n ))}\n </motion.div>\n </AnimatePresence>\n </Box>\n </Paper>\n </Container>\n );\n};\n\nexport default LegacyStaticFaq;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Button,\n Chip,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n Typography,\n alpha,\n useTheme,\n} from \"@mui/material\";\nimport { useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faCircleQuestion,\n faFolderOpen,\n faImage,\n faMagnifyingGlass,\n faVideo,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nimport { execute } from \"@/common/services/GlobalApis\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport CustomAccordion from \"@/views/custom-components/CustomAccordion\";\nimport DebouncedSearchInput from \"@/views/custom-components/DebouncedSearchInput\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport { CategoryIcon } from \"./components/CategoryIconPicker\";\nimport { parseCategoryIcon } from \"./utils/categoryIcon\";\nimport { parseMedia, useResolvedFile } from \"./utils/faqMedia\";\nimport { FaqListSkeleton } from \"./Skeletons/FaqSkeletons\";\nimport LegacyStaticFaq from \"./LegacyStaticFaq\";\n\nconst AUDIENCE = \"HCW\";\nconst UNCATEGORIZED = \"__uncategorized__\";\n\nconst FaqView = () => (GeneralUtil.isTecho ? <LegacyStaticFaq /> : <HcwFaqRenderPage />);\n\nconst HcwFaqRenderPage = () => {\n const theme = useTheme();\n const { translate } = useTranslateProvider();\n const translationLanguage = useSelector((state) => state.Translation.translationLanguage);\n const languageCode = (translationLanguage || \"en\").toLowerCase().split(\"-\")[0];\n\n const [loading, setLoading] = useState(true);\n const [faqs, setFaqs] = useState([]);\n const [categories, setCategories] = useState([]);\n const [search, setSearch] = useState(\"\");\n const [activeCategoryId, setActiveCategoryId] = useState(\"all\");\n const [expandedId, setExpandedId] = useState(null);\n const [viewingMedia, setViewingMedia] = useState(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setExpandedId(null);\n\n (async () => {\n try {\n const [faqRes, categoryRes] = await Promise.all([\n execute({ code: \"faq_public_list\", parameters: { audience: AUDIENCE, languageCode } }),\n execute({ code: \"mytecho_faq_get_category_type\" }),\n ]);\n if (cancelled) return;\n setFaqs(faqRes?.data?.result || []);\n setCategories(\n (categoryRes?.data?.result || []).filter(\n (category) => (parseCategoryIcon(category?.additional_detail)?.audience || \"HCW\") === AUDIENCE\n )\n );\n } catch {\n if (!cancelled) {\n setFaqs([]);\n setCategories([]);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [languageCode]);\n\n const categoryById = useMemo(() => {\n const map = new Map();\n categories.forEach((category) => map.set(String(category.id), category));\n return map;\n }, [categories]);\n\n const categoryCounts = useMemo(() => {\n const counts = {};\n faqs.forEach((faq) => {\n const key = faq.category_id != null ? String(faq.category_id) : UNCATEGORIZED;\n counts[key] = (counts[key] || 0) + 1;\n });\n return counts;\n }, [faqs]);\n\n const term = search.trim().toLowerCase();\n const isSearching = term.length > 0;\n\n const filteredFaqs = useMemo(\n () =>\n faqs.filter((faq) => {\n const key = faq.category_id != null ? String(faq.category_id) : UNCATEGORIZED;\n const matchesCategory = activeCategoryId === \"all\" || activeCategoryId === key;\n if (!matchesCategory) return false;\n if (!term) return true;\n return `${faq.question} ${faq.tags || \"\"}`.toLowerCase().includes(term);\n }),\n [faqs, term, activeCategoryId]\n );\n\n const groupedFaqs = useMemo(() => {\n if (isSearching) return null;\n const groups = new Map();\n filteredFaqs.forEach((faq) => {\n const key = faq.category_id != null ? String(faq.category_id) : UNCATEGORIZED;\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key).push(faq);\n });\n return Array.from(groups.entries()).map(([key, items]) => ({\n key,\n label: key === UNCATEGORIZED ? translate(\"Other\") : categoryById.get(key)?.value || items[0]?.category,\n icon: key === UNCATEGORIZED ? null : parseCategoryIcon(categoryById.get(key)?.additional_detail),\n items,\n }));\n }, [isSearching, filteredFaqs, categoryById, translate]);\n\n return (\n <Box sx={{ maxWidth: 1280, mx: \"auto\", p: { xs: 2, md: 3 } }}>\n <Box\n sx={{\n textAlign: \"center\",\n borderRadius: 3,\n p: { xs: 2, md: 2.5 },\n mb: 2.5,\n background: `linear-gradient(180deg, ${alpha(theme.palette.primary.main, 0.08)}, ${alpha(\n theme.palette.primary.main,\n 0.02\n )})`,\n }}\n >\n <Typography variant=\"h5\" sx={{ fontWeight: 800, mb: 0.5 }}>\n {translate(\"Frequently Asked Questions\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Find answers to common questions. To read these in a different language, change your language from the profile menu.\"\n )}\n </Typography>\n </Box>\n\n <Stack\n direction={{ xs: \"column\", sm: \"row\" }}\n spacing={1.5}\n alignItems={{ xs: \"stretch\", sm: \"center\" }}\n sx={{ mb: 3 }}\n >\n <DebouncedSearchInput\n value={search}\n onChange={setSearch}\n placeholder={translate(\"Search questions...\")}\n sx={{ width: { xs: \"100%\", sm: 260 }, flexShrink: 0 }}\n InputProps={{\n startAdornment: (\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: 10, opacity: 0.5 }}\n />\n ),\n }}\n />\n {categories.length > 0 && (\n <Stack direction=\"row\" spacing={1} sx={{ overflowX: \"auto\", pb: 0.5, flex: 1, minWidth: 0 }}>\n <CategoryPill\n label={`${translate(\"All\")} (${faqs.length})`}\n active={activeCategoryId === \"all\"}\n onClick={() => setActiveCategoryId(\"all\")}\n />\n {categories\n .filter((category) => categoryCounts[String(category.id)])\n .map((category) => {\n const icon = parseCategoryIcon(category.additional_detail);\n const key = String(category.id);\n return (\n <CategoryPill\n key={category.id}\n label={`${category.value} (${categoryCounts[key] || 0})`}\n icon={icon?.icon ? <CategoryIcon value={icon} /> : null}\n active={activeCategoryId === key}\n onClick={() => setActiveCategoryId(key)}\n />\n );\n })}\n </Stack>\n )}\n </Stack>\n\n <FaqListSkeleton loading={loading}>\n {filteredFaqs.length === 0 ? (\n <Box sx={{ py: 8, textAlign: \"center\" }}>\n <FontAwesomeIcon\n icon={faCircleQuestion}\n size=\"2x\"\n style={{ opacity: 0.25, marginBottom: 12 }}\n />\n <Typography variant=\"body1\" color=\"text.secondary\">\n {faqs.length === 0\n ? translate(\"No FAQs are available in this language yet.\")\n : translate(\"No questions match your search.\")}\n </Typography>\n </Box>\n ) : isSearching ? (\n <Box>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1.5, px: 0.5 }}>\n {filteredFaqs.length} {translate(\"results\")}\n </Typography>\n <Stack sx={{ gap: 1.5 }}>\n {filteredFaqs.map((faq) => (\n <FaqAccordionItem\n key={faq.id}\n faq={faq}\n expanded={expandedId === faq.id}\n onChange={(_e, isExpanded) => setExpandedId(isExpanded ? faq.id : null)}\n onOpenMedia={setViewingMedia}\n />\n ))}\n </Stack>\n </Box>\n ) : (\n <Stack spacing={4}>\n {groupedFaqs.map((group) => (\n <Box key={group.key}>\n <Stack direction=\"row\" alignItems=\"center\" spacing={1} sx={{ mb: 1.5, px: 0.5 }}>\n <Box sx={{ color: \"primary.main\", display: \"flex\" }}>\n {group.icon?.icon ? (\n <CategoryIcon value={group.icon} />\n ) : (\n <FontAwesomeIcon icon={faFolderOpen} size=\"sm\" />\n )}\n </Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>\n {group.label}\n </Typography>\n </Stack>\n <Stack sx={{ gap: 1.5 }}>\n {group.items.map((faq) => (\n <FaqAccordionItem\n key={faq.id}\n faq={faq}\n expanded={expandedId === faq.id}\n onChange={(_e, isExpanded) => setExpandedId(isExpanded ? faq.id : null)}\n onOpenMedia={setViewingMedia}\n />\n ))}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </FaqListSkeleton>\n\n {viewingMedia && (\n <FaqMediaViewerDialog item={viewingMedia} onClose={() => setViewingMedia(null)} />\n )}\n </Box>\n );\n};\n\nfunction CategoryPill({ label, icon, active, onClick }) {\n return (\n <Chip\n icon={icon || undefined}\n label={label}\n onClick={onClick}\n color={active ? \"primary\" : \"default\"}\n variant={active ? \"filled\" : \"outlined\"}\n sx={{\n flexShrink: 0,\n height: 36,\n px: 0.5,\n fontWeight: 600,\n borderRadius: 999,\n }}\n />\n );\n}\n\nCategoryPill.propTypes = {\n label: PropTypes.string.isRequired,\n icon: PropTypes.node,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nfunction FaqAccordionItem({ faq, expanded, onChange, onOpenMedia }) {\n const theme = useTheme();\n const media = useMemo(() => parseMedia(faq.media), [faq.media]);\n\n return (\n <CustomAccordion\n expanded={expanded}\n onChange={onChange}\n dataTestId={`faq-item-${faq.id}`}\n title={<Typography sx={{ fontWeight: 600, fontSize: \"1.02rem\" }}>{faq.question}</Typography>}\n summaryProps={{ sx: { px: 2.5, py: 0.5 } }}\n detailsProps={{ sx: { px: 2.5, pb: 2.5, pt: 0 } }}\n sx={{\n borderRadius: \"14px !important\",\n border: \"1px solid\",\n borderColor: \"divider\",\n boxShadow: \"none\",\n transition: \"border-color 0.15s ease, box-shadow 0.15s ease\",\n \"&:before\": { display: \"none\" },\n \"&:hover\": {\n borderColor: alpha(theme.palette.primary.main, 0.4),\n boxShadow: `0 2px 10px ${alpha(theme.palette.primary.main, 0.08)}`,\n },\n }}\n >\n <Box sx={{ borderTop: \"1px solid\", borderColor: \"divider\", pt: 2 }}>\n <Typography\n component=\"div\"\n color=\"text.secondary\"\n sx={{ lineHeight: 1.7, \"& p\": { mt: 0, mb: 1.5 }, \"& p:last-child\": { mb: 0 } }}\n dangerouslySetInnerHTML={{ __html: faq.content }}\n />\n\n {expanded && media.length > 0 && (\n <Stack direction=\"row\" spacing={1.25} sx={{ mt: 2, flexWrap: \"wrap\" }}>\n {media.map((item) => (\n <FaqMediaThumb key={item.uuid} item={item} onOpen={() => onOpenMedia(item)} />\n ))}\n </Stack>\n )}\n </Box>\n </CustomAccordion>\n );\n}\n\nFaqAccordionItem.propTypes = {\n faq: PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n question: PropTypes.string,\n content: PropTypes.string,\n media: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n }).isRequired,\n expanded: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n};\n\nfunction FaqMediaThumb({ item, onOpen }) {\n const isImage = item.type === \"image\";\n const { dataUrl, isLoading } = useResolvedFile(isImage ? item.uuid : null);\n\n return (\n <Box\n onClick={onOpen}\n title={item.fileName}\n sx={{\n width: 64,\n height: 64,\n flexShrink: 0,\n borderRadius: 2,\n border: \"1px solid\",\n borderColor: \"divider\",\n overflow: \"hidden\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\",\n \"&:hover\": { borderColor: \"primary.main\" },\n }}\n >\n {isImage && isLoading && <CircularProgress size={16} />}\n {isImage && !isLoading && dataUrl && (\n <Box\n component=\"img\"\n src={dataUrl}\n alt={item.fileName}\n sx={{ width: \"100%\", height: \"100%\", objectFit: \"cover\" }}\n />\n )}\n {isImage && !isLoading && !dataUrl && (\n <FontAwesomeIcon icon={faImage} size=\"lg\" style={{ opacity: 0.35 }} />\n )}\n {!isImage && (\n <>\n <FontAwesomeIcon icon={faVideo} size=\"lg\" style={{ opacity: 0.35 }} />\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.25)\",\n color: \"common.white\",\n opacity: 0,\n transition: \"opacity 0.15s ease\",\n \"&:hover\": { opacity: 1 },\n }}\n >\n <FontAwesomeIcon icon={faVideo} />\n </Box>\n </>\n )}\n </Box>\n );\n}\n\nFaqMediaThumb.propTypes = {\n item: PropTypes.shape({\n uuid: PropTypes.string,\n fileName: PropTypes.string,\n type: PropTypes.oneOf([\"image\", \"video\"]),\n }).isRequired,\n onOpen: PropTypes.func.isRequired,\n};\n\nfunction FaqMediaViewerDialog({ item, onClose }) {\n const { dataUrl, isLoading } = useResolvedFile(item.uuid);\n const isImage = item.type === \"image\";\n\n return (\n <Dialog open onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle sx={{ pr: 6, wordBreak: \"break-all\", display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <FontAwesomeIcon icon={isImage ? faImage : faVideo} />\n {item.fileName}\n </DialogTitle>\n <DialogContent dividers sx={{ display: \"flex\", justifyContent: \"center\", minHeight: 160 }}>\n {isLoading ? (\n <CircularProgress size={26} sx={{ alignSelf: \"center\" }} />\n ) : !dataUrl ? (\n <Typography variant=\"body2\" sx={{ color: \"error.main\", alignSelf: \"center\" }}>\n Couldn&apos;t load this file.\n </Typography>\n ) : isImage ? (\n <Box\n component=\"img\"\n src={dataUrl}\n alt={item.fileName}\n sx={{ maxWidth: \"100%\", maxHeight: \"70vh\", objectFit: \"contain\" }}\n />\n ) : (\n <video src={dataUrl} controls autoPlay style={{ width: \"100%\", maxHeight: \"70vh\" }} />\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} sx={{ textTransform: \"none\" }}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nFaqMediaViewerDialog.propTypes = {\n item: PropTypes.shape({\n uuid: PropTypes.string,\n fileName: PropTypes.string,\n type: PropTypes.oneOf([\"image\", \"video\"]),\n }).isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default FaqView;\n"],"names":["faqData","LegacyStaticFaq","lang","setLang","useState","theme","useTheme","isDark","handleLangChange","event","newValue","jsxs","Container","jsx","motion","Box","Typography","Paper","alpha","Tabs","Tab","AnimatePresence","item","index","Accordion","AccordionSummary","ExpandMoreIcon","AccordionDetails","AUDIENCE","UNCATEGORIZED","FaqView","GeneralUtil","HcwFaqRenderPage","translate","useTranslateProvider","languageCode","useSelector","state","loading","setLoading","faqs","setFaqs","categories","setCategories","search","setSearch","activeCategoryId","setActiveCategoryId","expandedId","setExpandedId","viewingMedia","setViewingMedia","useEffect","cancelled","faqRes","categoryRes","execute","_a","_b","category","parseCategoryIcon","categoryById","useMemo","map","categoryCounts","counts","faq","key","term","isSearching","filteredFaqs","groupedFaqs","groups","items","_c","Stack","DebouncedSearchInput","FontAwesomeIcon","faMagnifyingGlass","CategoryPill","icon","CategoryIcon","FaqListSkeleton","faCircleQuestion","FaqAccordionItem","_e","isExpanded","group","faFolderOpen","FaqMediaViewerDialog","label","active","onClick","Chip","PropTypes","expanded","onChange","onOpenMedia","media","parseMedia","CustomAccordion","FaqMediaThumb","onOpen","isImage","dataUrl","isLoading","useResolvedFile","CircularProgress","faImage","Fragment","faVideo","onClose","Dialog","DialogTitle","DialogContent","DialogActions","Button"],"mappings":"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"}
@@ -61,7 +61,7 @@ ne.propTypes = {
61
61
  children: b.any,
62
62
  isLoading: b.any
63
63
  };
64
- const Me = ae(() => import("./AccessRights-DBjTQA1-.js")), Fe = ae(() => import("./SubMenu-OO2zhKiu.js")), D = (n) => n ? n.length <= 4 && !/[\s_-]/.test(n) ? n.toUpperCase() : n.split(/[\s_-]+/).map((d) => d.charAt(0).toUpperCase() + d.slice(1)).join(" ") : "";
64
+ const Me = ae(() => import("./AccessRights-BC43Jhml.js")), Fe = ae(() => import("./SubMenu-DZIhur09.js")), D = (n) => n ? n.length <= 4 && !/[\s_-]/.test(n) ? n.toUpperCase() : n.split(/[\s_-]+/).map((d) => d.charAt(0).toUpperCase() + d.slice(1)).join(" ") : "";
65
65
  function Re() {
66
66
  const n = we(), { getCachedData: d } = Ie(), [u, $] = I([]), [N, G] = Ne(), m = y((e) => {
67
67
  var t;
@@ -522,4 +522,4 @@ export {
522
522
  Ye as F,
523
523
  re as S
524
524
  };
525
- //# sourceMappingURL=FeatureMenu-Kc73yPHH.js.map
525
+ //# sourceMappingURL=FeatureMenu-CaI-ZhSZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureMenu-Kc73yPHH.js","sources":["../src/views/Features/Skeletons/FeatureSkeletons.jsx","../src/views/Features/FeatureMenu.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\n/**\n * Skeleton block style shared by every placeholder in this file.\n * Matches the app-wide convention: pulsing neutral block, small radius.\n */\nconst BLOCK = \"bg-gray-300 animate-pulse rounded-sm\";\n\nexport const FeatureMenuSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n return (\n <div className=\"flex flex-col gap-6\" aria-busy=\"true\">\n {/* title + subtitle + actions */}\n <div className=\"flex flex-row flex-wrap justify-between gap-4\">\n <div className=\"flex flex-col gap-2\">\n <div className={`${BLOCK} h-[28px] w-[220px]`}></div>\n <div className={`${BLOCK} h-[16px] w-[340px] max-w-full`}></div>\n </div>\n <div className=\"flex flex-row gap-2 items-start\">\n <div className={`${BLOCK} h-[32px] w-[150px]`}></div>\n <div className={`${BLOCK} h-[32px] w-[120px]`}></div>\n </div>\n </div>\n {/* tab strip */}\n <div className=\"flex flex-row flex-wrap gap-2\">\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n </div>\n </div>\n );\n};\n\nFeatureMenuSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport const ManageFeatureSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"mt-8 ml-4\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[150px] h-[35px]\"></div>\n <div className=\"flex flex-col gap-4 my-3\">\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[200px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[30px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px] ml-8\"></div>\n </div>\n </div>\n <div className=\"flex justify-end gap-5 m-7\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[64px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[64px] h-[40px]\"></div>\n </div>\n </div>\n );\n};\n\nManageFeatureSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\n/**\n * Master pane placeholder — header bar, search box, then a run of list rows,\n * sized to approximate the real sub-menu list so the swap doesn't jump.\n */\nexport const SubMenuSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"w-full flex flex-col gap-2 p-3\" aria-busy=\"true\">\n <div className={`${BLOCK} h-[20px] w-[140px]`}></div>\n <div className={`${BLOCK} h-[38px] w-full`}></div>\n <div className=\"flex flex-col gap-1.5 pt-1\">\n {Array.from({ length: 7 }).map((_, index) => (\n <div key={index} className={`${BLOCK} h-[36px] w-full`}></div>\n ))}\n </div>\n </div>\n );\n};\n\nSubMenuSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\n/**\n * Detail pane placeholder — toolbar row, then a stack of collapsed\n * role/user rows matching the accordion list underneath.\n */\nexport const AccessRightsSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"w-full flex flex-col gap-3 p-3\" aria-busy=\"true\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <div className={`${BLOCK} h-[38px] w-full sm:w-[220px]`}></div>\n <div className={`${BLOCK} h-[38px] w-full sm:flex-1`}></div>\n <div className={`${BLOCK} h-[38px] w-full sm:w-[90px]`}></div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} className={`${BLOCK} h-[52px] w-full`}></div>\n ))}\n </div>\n </div>\n );\n};\n\nAccessRightsSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import React, {\n lazy,\n Suspense,\n useEffect,\n useMemo,\n useRef,\n useState,\n startTransition,\n useCallback,\n} from \"react\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getFeatureName } from \"../../services/Features\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nconst AccessRights = lazy(() => import(\"./AccessRights\"));\nconst SubMenu = lazy(() => import(\"./SubMenu\"));\nimport { Box, Button, Paper, Typography } from \"@mui/material\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport SegmentedTabs from \"@/views/custom-components/SegmentedTabs\";\nimport { featureModuleIcon } from \"@/common/constants/FeatureModuleIcons\";\nimport {\n AccessRightsSkeleton,\n FeatureMenuSkeleton,\n SubMenuSkeleton,\n} from \"./Skeletons/FeatureSkeletons\";\nimport {\n setSubMenuId,\n setSubMenuGroupName,\n setSubMenuFeatureVal,\n} from \"@/store/reducers/FeatureReducer\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport useCaching from \"@/hooks/useCaching\";\n\n/**\n * Turns a raw feature-module key into a human label. Short keys are domain\n * acronyms (`fhs`, `ncd`, `mch`) and stay upper-cased; longer keys are\n * title-cased. Tab labels are never shouted — see the MEDplat tab rules.\n * @param {string} key - The feature module key from `user.features`.\n * @returns {string} The label to render on the tab.\n */\nconst formatModuleLabel = (key) => {\n if (!key) return \"\";\n if (key.length <= 4 && !/[\\s_-]/.test(key)) return key.toUpperCase();\n return key\n .split(/[\\s_-]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\n/**\n * The `FeatureMenu` component renders a menu or list of features in the application.\n * @module FeatureMenu\n * @returns {JSX.Element} The rendered `FeatureMenu` component.\n */\n\nexport default function FeatureMenu() {\n const dispatch = useDispatch();\n const { getCachedData } = useCaching();\n const [Data, setData] = useState([]);\n const [searchParams, setSearchParams] = useSearchParams();\n const subMenuId = useSelector((state) => {\n return state?.FeatureReducer?.subMenuId;\n });\n const subMenuGroupName = useSelector(\n (state) => state?.FeatureReducer?.subMenuGroupName,\n );\n const subMenuFeatureVal = useSelector(\n (state) => state?.FeatureReducer?.subMenuFeatureVal,\n );\n // Read inside the module-load effect without making the selection a\n // dependency of it — that would refetch the whole list every time the user\n // picks a different sub menu.\n const subMenuIdRef = useRef(subMenuId);\n subMenuIdRef.current = subMenuId;\n\n /**\n * Clears the selected menu config so the detail pane shows its empty state\n * instead of a config belonging to a module that is no longer active.\n * @returns {void}\n */\n const clearSelection = useCallback(() => {\n dispatch(setSubMenuId(null));\n dispatch(setSubMenuGroupName(null));\n dispatch(setSubMenuFeatureVal(null));\n }, [dispatch]);\n\n const navigate = useNavigate();\n const { user } = useSelector((state) => state.Authenticate);\n const { translate } = useTranslateProvider();\n const [isLoading, setIsLoading] = useState(false);\n const trackEvent = useTrackEvent();\n const [isNewAPI, setIsNewAPI] = useState({});\n const [rights, setRights] = useState(null);\n const features = user?.features || {};\n const featureNames = useMemo(\n () => Object.keys(features).filter((key) => key !== \"mch\"),\n [features],\n );\n\n // The active module lives in the URL (`?module=fhs`) so a refresh, a browser\n // back, or a shared link lands on the same tab instead of resetting to the first.\n const moduleParam = searchParams.get(\"module\");\n const selectedId = useMemo(() => {\n const index = featureNames.indexOf(moduleParam);\n return index >= 0 ? index : 0;\n }, [featureNames, moduleParam]);\n const selectedModule = featureNames[selectedId];\n\n // The menu config currently open in the detail pane, so the pane header can\n // name exactly which one's rights are being edited.\n const selectedSubMenu = useMemo(\n () => Data?.find((item) => item?.id === subMenuId) || null,\n [Data, subMenuId],\n );\n\n // Module › group › sub group › menu name. Non-navigational — this is a\n // context label identifying the record, not a breadcrumb trail to click.\n const menuConfigTrail = useMemo(\n () =>\n selectedSubMenu\n ? [\n formatModuleLabel(selectedModule),\n selectedSubMenu.groupName,\n selectedSubMenu.subGroupName,\n selectedSubMenu.name,\n ].filter(Boolean)\n : [],\n [selectedSubMenu, selectedModule],\n );\n\n const moduleTabs = useMemo(\n () =>\n featureNames.map((feat, index) => ({\n value: feat,\n label: formatModuleLabel(feat),\n icon: featureModuleIcon(feat),\n id: `feature-tab-${index}`,\n dataTestId: `featuremenu-button-${index}`,\n })),\n [featureNames],\n );\n\n // 🧠 handle tab switch\n const handleTabChange = useCallback(\n (event, nextModule) => {\n if (!nextModule) return;\n setSearchParams(\n (prev) => {\n const next = new URLSearchParams(prev);\n next.set(\"module\", nextModule);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n /**\n * Navigates to the '/ui/addfeature' route when called.\n * @function handleClick\n * @returns {void} This function does not return a value.\n */\n\n const handleFeature = useCallback(() => {\n trackEvent(\"button_click\", {\n button_name: \"featuremenu-add-button\",\n button_type: \"navigate\",\n button_id: \"featuremenu-add-button\",\n });\n navigate(\"addDynamicFeature\");\n }, [navigate, trackEvent]);\n\n // 📦 fetch feature data\n /**\n * Effect hook that runs when `selectedId` changes to load and set initial feature data.\n * @effect\n * @returns {void} This effect does not return a value.\n */\n useEffect(() => {\n async function getFeatures() {\n // The user's rights for this screen don't change mid-session; without a\n // cache this fires on every visit to Features.\n const data = await getCachedData({\n cacheKey: [\"assignedFeatures\", \"techo.manage.menu\"],\n fetchFn: async () =>\n (await getAssignedFeatures(\"techo.manage.menu\")).data,\n staleTime: 5 * 60 * 1000,\n cacheTime: 30 * 60 * 1000,\n });\n const parsedRights = JSON.parse(data);\n setRights(parsedRights);\n }\n getFeatures();\n }, []);\n\n useEffect(() => {\n const loadInitialData = async () => {\n if (!featureNames.length || selectedId >= featureNames.length) return;\n\n try {\n setIsLoading(true);\n const { data } = await getFeatureName(featureNames[selectedId]);\n const filterData = data.sort((a, b) => a.name?.localeCompare(b.name));\n startTransition(() => {\n setData(filterData);\n // The selected menu config lives in Redux, so it outlives a module\n // switch. Without this the detail pane keeps rendering the previous\n // module's access rights even though that config isn't in the list\n // any more. Drop the selection whenever it doesn't belong to the\n // module that just loaded — the pane then falls back to its\n // \"No sub menu selected\" state.\n if (\n subMenuIdRef.current &&\n !filterData.some((item) => item?.id === subMenuIdRef.current)\n ) {\n clearSelection();\n }\n setIsLoading(false);\n });\n } catch (error) {\n showToast({\n message: `Error : ${error?.response?.data?.message}`,\n type: \"error\",\n });\n // The module did change, so keeping the previous module's list and\n // selection on screen would misrepresent which module is active.\n startTransition(() => {\n setData([]);\n clearSelection();\n setIsLoading(false);\n });\n }\n };\n\n loadInitialData();\n }, [selectedId, featureNames, clearSelection]);\n\n // 🧠 Memoized SubMenu\n const SubMenuContent = useMemo(\n () => (\n <Suspense fallback={<SubMenuSkeleton isLoading />}>\n <SubMenu\n data-testid=\"featuremenu-submenu\"\n data={Data}\n subMenuId={subMenuId}\n setSubMenuId={(id) => {\n dispatch(setSubMenuId(id));\n }}\n setSubMenuGroupName={(name) => {\n dispatch(setSubMenuGroupName(name));\n }}\n setSubMenuFeatureVal={(val) => {\n dispatch(setSubMenuFeatureVal(val));\n }}\n type={featureNames[selectedId]}\n isLoading={isLoading}\n isNewAPI={isNewAPI}\n subMenuGroupName={subMenuGroupName}\n rights={rights}\n />\n </Suspense>\n ),\n [Data, subMenuId, selectedId, isLoading, featureNames, isNewAPI, rights],\n );\n\n // 🧠 Memoized AccessRights\n const AccessRightsContent = useMemo(\n () => (\n <Suspense fallback={<AccessRightsSkeleton isLoading />}>\n <AccessRights\n data-testid=\"featuremenu-access-rights\"\n subMenuId={subMenuId}\n subMenuGroupName={subMenuGroupName}\n subMenuFeatureVal={subMenuFeatureVal}\n selectedTab={featureNames[selectedId]}\n parentLoading={isLoading}\n onNewAPIChange={setIsNewAPI}\n rights={rights}\n />\n </Suspense>\n ),\n // `selectedTab`, `subMenuGroupName` and `subMenuFeatureVal` were read but\n // not declared, so this could hand AccessRights a menu config from one\n // module labelled with another module's tab.\n [\n subMenuId,\n subMenuGroupName,\n subMenuFeatureVal,\n featureNames,\n selectedId,\n isLoading,\n rights,\n ],\n );\n\n const canManageGroups = GeneralUtil.hasCheckRights(\n rights?.[\"update.manage.featurelist\"],\n undefined,\n true,\n );\n const canCreateFeature = GeneralUtil.hasCheckRights(\n rights?.[\"create.manage.featurelist\"],\n undefined,\n true,\n );\n\n return !isLoading &&\n rights !== null &&\n !GeneralUtil.hasCheckRights(rights?.[\"view.manage.featurelist\"], undefined, true) ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n minHeight: \"70vh\",\n }}\n >\n <Paper\n elevation={0}\n sx={{\n p: { xs: 3, md: 5 },\n maxWidth: 520,\n textAlign: \"center\",\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n }}\n >\n <Box sx={{ color: \"text.disabled\", mb: 2 }}>\n <FontAwesomeIcons iconName=\"faLock\" size=\"2x\" />\n </Box>\n <Typography\n variant=\"h6\"\n component=\"h1\"\n sx={{ fontWeight: 700, mb: 1, color: \"text.primary\" }}\n >\n {translate(\"You don't have permission to view features\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Ask an administrator to grant you access to the feature list.\",\n )}\n </Typography>\n </Paper>\n </Box>\n ) : (\n <Paper\n elevation={0}\n sx={{\n p: { xs: 2.5, md: 3 },\n mt: 2,\n mb: 3,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n }}\n >\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\n <FeatureMenuSkeleton isLoading={isLoading}>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\n {/* ── Header: title block (left) + actions (right) ── */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\",\n gap: 2,\n }}\n >\n <Box sx={{ minWidth: { xs: \"100%\", lg: \"40%\" } }}>\n <Typography\n variant=\"h5\"\n component=\"h1\"\n sx={{ fontWeight: 800, color: \"text.primary\", mb: 0.5 }}\n >\n {translate(\"Feature Access\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {selectedModule\n ? `${translate(\"Manage access for the\")} ${formatModuleLabel(selectedModule)} ${translate(\"module. Choose a sub menu, then grant or revoke its rights for roles and users.\")}`\n : translate(\n \"Pick a module, choose one of its sub menus, then grant or revoke that sub menu's rights for roles and users.\",\n )}\n </Typography>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n flexWrap: \"wrap\",\n }}\n >\n {canManageGroups && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => navigate(\"/ui/medplat/report/all/groups\")}\n startIcon={<FontAwesomeIcons iconName=\"faLayerGroup\" />}\n >\n {translate(\"Manage\")} {translate(\"Menu\")}{\" \"}\n {translate(\"Group\")}\n </Button>\n )}\n {canCreateFeature && (\n <Button\n size=\"small\"\n data-testid=\"featuremenu-add-button\"\n variant=\"contained\"\n onClick={handleFeature}\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n >\n {translate(\"Add\")} {translate(\"Feature\")}\n </Button>\n )}\n </Box>\n </Box>\n\n {/* ── Module tabs ── */}\n <SegmentedTabs\n tabs={moduleTabs}\n value={selectedModule}\n onChange={handleTabChange}\n ariaLabel={translate(\"Feature modules\")}\n panelId=\"feature-tabpanel\"\n dataTestId=\"featuremenu-tabs\"\n // Module names are short and there are only a handful of them,\n // so every tab can carry its label. Hover-to-reveal made the\n // unselected modules a row of unlabelled icons.\n collapseLabels={false}\n // With labels always on, the rail is wide enough to run past the\n // pane on smaller screens. Wrapping to a second row reads better\n // than a horizontal scrollbar for a control this short.\n sx={{ flexWrap: \"wrap\" }}\n />\n </Box>\n </FeatureMenuSkeleton>\n\n {/* ── Master (sub menu list) + detail (access rights) ── */}\n <Box\n role=\"tabpanel\"\n id=\"feature-tabpanel\"\n aria-labelledby={`feature-tab-${selectedId}`}\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: \"stretch\",\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.borderRadius}px`,\n overflow: \"hidden\",\n minHeight: 420,\n }}\n >\n <Box\n sx={{\n width: { xs: \"100%\", md: 280, lg: 320 },\n flexShrink: 0,\n borderBottom: { xs: \"1px solid\", md: \"none\" },\n borderRight: { xs: \"none\", md: \"1px solid\" },\n borderColor: \"divider\",\n display: \"flex\",\n }}\n >\n {SubMenuContent}\n </Box>\n\n <Box\n sx={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0.25,\n px: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Box sx={{ color: \"text.secondary\", display: \"flex\" }}>\n <FontAwesomeIcons iconName=\"faGear\" />\n </Box>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {translate(\"Access Rights\")}\n </Typography>\n </Box>\n\n {menuConfigTrail.length > 0 && (\n <Box\n data-testid=\"featuremenu-selected-menu-config\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 0.75,\n pl: 3,\n minWidth: 0,\n }}\n >\n {menuConfigTrail.map((part, index) => {\n const isLast = index === menuConfigTrail.length - 1;\n return (\n <React.Fragment key={`${part}-${index}`}>\n {index > 0 && (\n <Box\n component=\"span\"\n aria-hidden=\"true\"\n sx={{ color: \"text.disabled\", fontSize: \"0.75rem\" }}\n >\n ›\n </Box>\n )}\n <Typography\n variant=\"caption\"\n sx={{\n color: isLast ? \"text.primary\" : \"text.secondary\",\n fontWeight: isLast ? 700 : 400,\n // Feature names have no spaces to break on, so\n // without this a long one overflows the trail.\n overflowWrap: \"anywhere\",\n }}\n >\n {part}\n </Typography>\n </React.Fragment>\n );\n })}\n {selectedSubMenu?.navigationState && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 0.5,\n px: 0.75,\n borderRadius: (t) => `${t.shape.chipRadius}px`,\n backgroundColor: \"action.hover\",\n color: \"text.secondary\",\n fontFamily: \"monospace\",\n overflowWrap: \"anywhere\",\n }}\n >\n {selectedSubMenu.navigationState}\n </Typography>\n )}\n </Box>\n )}\n </Box>\n\n {subMenuId ? (\n AccessRightsContent\n ) : (\n <Box\n data-testid=\"featuremenu-no-feature-selected\"\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n p: 4,\n }}\n >\n <Box sx={{ color: \"text.disabled\" }}>\n <FontAwesomeIcons iconName=\"faListCheck\" size=\"2x\" />\n </Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>\n {translate(\"No sub menu selected\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Select a sub menu from the list to view and manage its access rights.\",\n )}\n </Typography>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n </Paper>\n );\n}\n"],"names":["BLOCK","FeatureMenuSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","SubMenuSkeleton","_","index","AccessRightsSkeleton","AccessRights","lazy","SubMenu","formatModuleLabel","key","word","FeatureMenu","dispatch","useDispatch","getCachedData","useCaching","Data","setData","useState","searchParams","setSearchParams","useSearchParams","subMenuId","state","_a","subMenuGroupName","subMenuFeatureVal","subMenuIdRef","useRef","clearSelection","useCallback","setSubMenuId","setSubMenuGroupName","setSubMenuFeatureVal","navigate","useNavigate","user","translate","useTranslateProvider","setIsLoading","trackEvent","useTrackEvent","isNewAPI","setIsNewAPI","rights","setRights","features","featureNames","useMemo","moduleParam","selectedId","selectedModule","selectedSubMenu","item","menuConfigTrail","moduleTabs","feat","featureModuleIcon","handleTabChange","event","nextModule","prev","next","handleFeature","useEffect","getFeatures","data","getAssignedFeatures","parsedRights","getFeatureName","filterData","a","b","startTransition","error","showToast","_b","SubMenuContent","Suspense","id","name","val","AccessRightsContent","canManageGroups","GeneralUtil","canCreateFeature","Box","Paper","t","FontAwesomeIcons","Typography","Button","SegmentedTabs","part","isLast","React"],"mappings":"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"}
1
+ {"version":3,"file":"FeatureMenu-CaI-ZhSZ.js","sources":["../src/views/Features/Skeletons/FeatureSkeletons.jsx","../src/views/Features/FeatureMenu.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\n/**\n * Skeleton block style shared by every placeholder in this file.\n * Matches the app-wide convention: pulsing neutral block, small radius.\n */\nconst BLOCK = \"bg-gray-300 animate-pulse rounded-sm\";\n\nexport const FeatureMenuSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n return (\n <div className=\"flex flex-col gap-6\" aria-busy=\"true\">\n {/* title + subtitle + actions */}\n <div className=\"flex flex-row flex-wrap justify-between gap-4\">\n <div className=\"flex flex-col gap-2\">\n <div className={`${BLOCK} h-[28px] w-[220px]`}></div>\n <div className={`${BLOCK} h-[16px] w-[340px] max-w-full`}></div>\n </div>\n <div className=\"flex flex-row gap-2 items-start\">\n <div className={`${BLOCK} h-[32px] w-[150px]`}></div>\n <div className={`${BLOCK} h-[32px] w-[120px]`}></div>\n </div>\n </div>\n {/* tab strip */}\n <div className=\"flex flex-row flex-wrap gap-2\">\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n <div className={`${BLOCK} h-[36px] w-[85px]`}></div>\n </div>\n </div>\n );\n};\n\nFeatureMenuSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport const ManageFeatureSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"mt-8 ml-4\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[150px] h-[35px]\"></div>\n <div className=\"flex flex-col gap-4 my-3\">\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[200px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[30px] h-[40px]\"></div>\n </div>\n <div className=\"flex justify-between w-[870px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[520px] h-[40px] ml-8\"></div>\n </div>\n </div>\n <div className=\"flex justify-end gap-5 m-7\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[64px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[64px] h-[40px]\"></div>\n </div>\n </div>\n );\n};\n\nManageFeatureSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\n/**\n * Master pane placeholder — header bar, search box, then a run of list rows,\n * sized to approximate the real sub-menu list so the swap doesn't jump.\n */\nexport const SubMenuSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"w-full flex flex-col gap-2 p-3\" aria-busy=\"true\">\n <div className={`${BLOCK} h-[20px] w-[140px]`}></div>\n <div className={`${BLOCK} h-[38px] w-full`}></div>\n <div className=\"flex flex-col gap-1.5 pt-1\">\n {Array.from({ length: 7 }).map((_, index) => (\n <div key={index} className={`${BLOCK} h-[36px] w-full`}></div>\n ))}\n </div>\n </div>\n );\n};\n\nSubMenuSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\n/**\n * Detail pane placeholder — toolbar row, then a stack of collapsed\n * role/user rows matching the accordion list underneath.\n */\nexport const AccessRightsSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children ?? null;\n }\n if (!isLoading) return children ?? null;\n\n return (\n <div className=\"w-full flex flex-col gap-3 p-3\" aria-busy=\"true\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <div className={`${BLOCK} h-[38px] w-full sm:w-[220px]`}></div>\n <div className={`${BLOCK} h-[38px] w-full sm:flex-1`}></div>\n <div className={`${BLOCK} h-[38px] w-full sm:w-[90px]`}></div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} className={`${BLOCK} h-[52px] w-full`}></div>\n ))}\n </div>\n </div>\n );\n};\n\nAccessRightsSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import React, {\n lazy,\n Suspense,\n useEffect,\n useMemo,\n useRef,\n useState,\n startTransition,\n useCallback,\n} from \"react\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getFeatureName } from \"../../services/Features\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nconst AccessRights = lazy(() => import(\"./AccessRights\"));\nconst SubMenu = lazy(() => import(\"./SubMenu\"));\nimport { Box, Button, Paper, Typography } from \"@mui/material\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport SegmentedTabs from \"@/views/custom-components/SegmentedTabs\";\nimport { featureModuleIcon } from \"@/common/constants/FeatureModuleIcons\";\nimport {\n AccessRightsSkeleton,\n FeatureMenuSkeleton,\n SubMenuSkeleton,\n} from \"./Skeletons/FeatureSkeletons\";\nimport {\n setSubMenuId,\n setSubMenuGroupName,\n setSubMenuFeatureVal,\n} from \"@/store/reducers/FeatureReducer\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport useCaching from \"@/hooks/useCaching\";\n\n/**\n * Turns a raw feature-module key into a human label. Short keys are domain\n * acronyms (`fhs`, `ncd`, `mch`) and stay upper-cased; longer keys are\n * title-cased. Tab labels are never shouted — see the MEDplat tab rules.\n * @param {string} key - The feature module key from `user.features`.\n * @returns {string} The label to render on the tab.\n */\nconst formatModuleLabel = (key) => {\n if (!key) return \"\";\n if (key.length <= 4 && !/[\\s_-]/.test(key)) return key.toUpperCase();\n return key\n .split(/[\\s_-]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\n/**\n * The `FeatureMenu` component renders a menu or list of features in the application.\n * @module FeatureMenu\n * @returns {JSX.Element} The rendered `FeatureMenu` component.\n */\n\nexport default function FeatureMenu() {\n const dispatch = useDispatch();\n const { getCachedData } = useCaching();\n const [Data, setData] = useState([]);\n const [searchParams, setSearchParams] = useSearchParams();\n const subMenuId = useSelector((state) => {\n return state?.FeatureReducer?.subMenuId;\n });\n const subMenuGroupName = useSelector(\n (state) => state?.FeatureReducer?.subMenuGroupName,\n );\n const subMenuFeatureVal = useSelector(\n (state) => state?.FeatureReducer?.subMenuFeatureVal,\n );\n // Read inside the module-load effect without making the selection a\n // dependency of it — that would refetch the whole list every time the user\n // picks a different sub menu.\n const subMenuIdRef = useRef(subMenuId);\n subMenuIdRef.current = subMenuId;\n\n /**\n * Clears the selected menu config so the detail pane shows its empty state\n * instead of a config belonging to a module that is no longer active.\n * @returns {void}\n */\n const clearSelection = useCallback(() => {\n dispatch(setSubMenuId(null));\n dispatch(setSubMenuGroupName(null));\n dispatch(setSubMenuFeatureVal(null));\n }, [dispatch]);\n\n const navigate = useNavigate();\n const { user } = useSelector((state) => state.Authenticate);\n const { translate } = useTranslateProvider();\n const [isLoading, setIsLoading] = useState(false);\n const trackEvent = useTrackEvent();\n const [isNewAPI, setIsNewAPI] = useState({});\n const [rights, setRights] = useState(null);\n const features = user?.features || {};\n const featureNames = useMemo(\n () => Object.keys(features).filter((key) => key !== \"mch\"),\n [features],\n );\n\n // The active module lives in the URL (`?module=fhs`) so a refresh, a browser\n // back, or a shared link lands on the same tab instead of resetting to the first.\n const moduleParam = searchParams.get(\"module\");\n const selectedId = useMemo(() => {\n const index = featureNames.indexOf(moduleParam);\n return index >= 0 ? index : 0;\n }, [featureNames, moduleParam]);\n const selectedModule = featureNames[selectedId];\n\n // The menu config currently open in the detail pane, so the pane header can\n // name exactly which one's rights are being edited.\n const selectedSubMenu = useMemo(\n () => Data?.find((item) => item?.id === subMenuId) || null,\n [Data, subMenuId],\n );\n\n // Module › group › sub group › menu name. Non-navigational — this is a\n // context label identifying the record, not a breadcrumb trail to click.\n const menuConfigTrail = useMemo(\n () =>\n selectedSubMenu\n ? [\n formatModuleLabel(selectedModule),\n selectedSubMenu.groupName,\n selectedSubMenu.subGroupName,\n selectedSubMenu.name,\n ].filter(Boolean)\n : [],\n [selectedSubMenu, selectedModule],\n );\n\n const moduleTabs = useMemo(\n () =>\n featureNames.map((feat, index) => ({\n value: feat,\n label: formatModuleLabel(feat),\n icon: featureModuleIcon(feat),\n id: `feature-tab-${index}`,\n dataTestId: `featuremenu-button-${index}`,\n })),\n [featureNames],\n );\n\n // 🧠 handle tab switch\n const handleTabChange = useCallback(\n (event, nextModule) => {\n if (!nextModule) return;\n setSearchParams(\n (prev) => {\n const next = new URLSearchParams(prev);\n next.set(\"module\", nextModule);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n /**\n * Navigates to the '/ui/addfeature' route when called.\n * @function handleClick\n * @returns {void} This function does not return a value.\n */\n\n const handleFeature = useCallback(() => {\n trackEvent(\"button_click\", {\n button_name: \"featuremenu-add-button\",\n button_type: \"navigate\",\n button_id: \"featuremenu-add-button\",\n });\n navigate(\"addDynamicFeature\");\n }, [navigate, trackEvent]);\n\n // 📦 fetch feature data\n /**\n * Effect hook that runs when `selectedId` changes to load and set initial feature data.\n * @effect\n * @returns {void} This effect does not return a value.\n */\n useEffect(() => {\n async function getFeatures() {\n // The user's rights for this screen don't change mid-session; without a\n // cache this fires on every visit to Features.\n const data = await getCachedData({\n cacheKey: [\"assignedFeatures\", \"techo.manage.menu\"],\n fetchFn: async () =>\n (await getAssignedFeatures(\"techo.manage.menu\")).data,\n staleTime: 5 * 60 * 1000,\n cacheTime: 30 * 60 * 1000,\n });\n const parsedRights = JSON.parse(data);\n setRights(parsedRights);\n }\n getFeatures();\n }, []);\n\n useEffect(() => {\n const loadInitialData = async () => {\n if (!featureNames.length || selectedId >= featureNames.length) return;\n\n try {\n setIsLoading(true);\n const { data } = await getFeatureName(featureNames[selectedId]);\n const filterData = data.sort((a, b) => a.name?.localeCompare(b.name));\n startTransition(() => {\n setData(filterData);\n // The selected menu config lives in Redux, so it outlives a module\n // switch. Without this the detail pane keeps rendering the previous\n // module's access rights even though that config isn't in the list\n // any more. Drop the selection whenever it doesn't belong to the\n // module that just loaded — the pane then falls back to its\n // \"No sub menu selected\" state.\n if (\n subMenuIdRef.current &&\n !filterData.some((item) => item?.id === subMenuIdRef.current)\n ) {\n clearSelection();\n }\n setIsLoading(false);\n });\n } catch (error) {\n showToast({\n message: `Error : ${error?.response?.data?.message}`,\n type: \"error\",\n });\n // The module did change, so keeping the previous module's list and\n // selection on screen would misrepresent which module is active.\n startTransition(() => {\n setData([]);\n clearSelection();\n setIsLoading(false);\n });\n }\n };\n\n loadInitialData();\n }, [selectedId, featureNames, clearSelection]);\n\n // 🧠 Memoized SubMenu\n const SubMenuContent = useMemo(\n () => (\n <Suspense fallback={<SubMenuSkeleton isLoading />}>\n <SubMenu\n data-testid=\"featuremenu-submenu\"\n data={Data}\n subMenuId={subMenuId}\n setSubMenuId={(id) => {\n dispatch(setSubMenuId(id));\n }}\n setSubMenuGroupName={(name) => {\n dispatch(setSubMenuGroupName(name));\n }}\n setSubMenuFeatureVal={(val) => {\n dispatch(setSubMenuFeatureVal(val));\n }}\n type={featureNames[selectedId]}\n isLoading={isLoading}\n isNewAPI={isNewAPI}\n subMenuGroupName={subMenuGroupName}\n rights={rights}\n />\n </Suspense>\n ),\n [Data, subMenuId, selectedId, isLoading, featureNames, isNewAPI, rights],\n );\n\n // 🧠 Memoized AccessRights\n const AccessRightsContent = useMemo(\n () => (\n <Suspense fallback={<AccessRightsSkeleton isLoading />}>\n <AccessRights\n data-testid=\"featuremenu-access-rights\"\n subMenuId={subMenuId}\n subMenuGroupName={subMenuGroupName}\n subMenuFeatureVal={subMenuFeatureVal}\n selectedTab={featureNames[selectedId]}\n parentLoading={isLoading}\n onNewAPIChange={setIsNewAPI}\n rights={rights}\n />\n </Suspense>\n ),\n // `selectedTab`, `subMenuGroupName` and `subMenuFeatureVal` were read but\n // not declared, so this could hand AccessRights a menu config from one\n // module labelled with another module's tab.\n [\n subMenuId,\n subMenuGroupName,\n subMenuFeatureVal,\n featureNames,\n selectedId,\n isLoading,\n rights,\n ],\n );\n\n const canManageGroups = GeneralUtil.hasCheckRights(\n rights?.[\"update.manage.featurelist\"],\n undefined,\n true,\n );\n const canCreateFeature = GeneralUtil.hasCheckRights(\n rights?.[\"create.manage.featurelist\"],\n undefined,\n true,\n );\n\n return !isLoading &&\n rights !== null &&\n !GeneralUtil.hasCheckRights(rights?.[\"view.manage.featurelist\"], undefined, true) ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n minHeight: \"70vh\",\n }}\n >\n <Paper\n elevation={0}\n sx={{\n p: { xs: 3, md: 5 },\n maxWidth: 520,\n textAlign: \"center\",\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n }}\n >\n <Box sx={{ color: \"text.disabled\", mb: 2 }}>\n <FontAwesomeIcons iconName=\"faLock\" size=\"2x\" />\n </Box>\n <Typography\n variant=\"h6\"\n component=\"h1\"\n sx={{ fontWeight: 700, mb: 1, color: \"text.primary\" }}\n >\n {translate(\"You don't have permission to view features\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Ask an administrator to grant you access to the feature list.\",\n )}\n </Typography>\n </Paper>\n </Box>\n ) : (\n <Paper\n elevation={0}\n sx={{\n p: { xs: 2.5, md: 3 },\n mt: 2,\n mb: 3,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n }}\n >\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\n <FeatureMenuSkeleton isLoading={isLoading}>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\n {/* ── Header: title block (left) + actions (right) ── */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\",\n gap: 2,\n }}\n >\n <Box sx={{ minWidth: { xs: \"100%\", lg: \"40%\" } }}>\n <Typography\n variant=\"h5\"\n component=\"h1\"\n sx={{ fontWeight: 800, color: \"text.primary\", mb: 0.5 }}\n >\n {translate(\"Feature Access\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {selectedModule\n ? `${translate(\"Manage access for the\")} ${formatModuleLabel(selectedModule)} ${translate(\"module. Choose a sub menu, then grant or revoke its rights for roles and users.\")}`\n : translate(\n \"Pick a module, choose one of its sub menus, then grant or revoke that sub menu's rights for roles and users.\",\n )}\n </Typography>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n flexWrap: \"wrap\",\n }}\n >\n {canManageGroups && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => navigate(\"/ui/medplat/report/all/groups\")}\n startIcon={<FontAwesomeIcons iconName=\"faLayerGroup\" />}\n >\n {translate(\"Manage\")} {translate(\"Menu\")}{\" \"}\n {translate(\"Group\")}\n </Button>\n )}\n {canCreateFeature && (\n <Button\n size=\"small\"\n data-testid=\"featuremenu-add-button\"\n variant=\"contained\"\n onClick={handleFeature}\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n >\n {translate(\"Add\")} {translate(\"Feature\")}\n </Button>\n )}\n </Box>\n </Box>\n\n {/* ── Module tabs ── */}\n <SegmentedTabs\n tabs={moduleTabs}\n value={selectedModule}\n onChange={handleTabChange}\n ariaLabel={translate(\"Feature modules\")}\n panelId=\"feature-tabpanel\"\n dataTestId=\"featuremenu-tabs\"\n // Module names are short and there are only a handful of them,\n // so every tab can carry its label. Hover-to-reveal made the\n // unselected modules a row of unlabelled icons.\n collapseLabels={false}\n // With labels always on, the rail is wide enough to run past the\n // pane on smaller screens. Wrapping to a second row reads better\n // than a horizontal scrollbar for a control this short.\n sx={{ flexWrap: \"wrap\" }}\n />\n </Box>\n </FeatureMenuSkeleton>\n\n {/* ── Master (sub menu list) + detail (access rights) ── */}\n <Box\n role=\"tabpanel\"\n id=\"feature-tabpanel\"\n aria-labelledby={`feature-tab-${selectedId}`}\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: \"stretch\",\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.borderRadius}px`,\n overflow: \"hidden\",\n minHeight: 420,\n }}\n >\n <Box\n sx={{\n width: { xs: \"100%\", md: 280, lg: 320 },\n flexShrink: 0,\n borderBottom: { xs: \"1px solid\", md: \"none\" },\n borderRight: { xs: \"none\", md: \"1px solid\" },\n borderColor: \"divider\",\n display: \"flex\",\n }}\n >\n {SubMenuContent}\n </Box>\n\n <Box\n sx={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0.25,\n px: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Box sx={{ color: \"text.secondary\", display: \"flex\" }}>\n <FontAwesomeIcons iconName=\"faGear\" />\n </Box>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {translate(\"Access Rights\")}\n </Typography>\n </Box>\n\n {menuConfigTrail.length > 0 && (\n <Box\n data-testid=\"featuremenu-selected-menu-config\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 0.75,\n pl: 3,\n minWidth: 0,\n }}\n >\n {menuConfigTrail.map((part, index) => {\n const isLast = index === menuConfigTrail.length - 1;\n return (\n <React.Fragment key={`${part}-${index}`}>\n {index > 0 && (\n <Box\n component=\"span\"\n aria-hidden=\"true\"\n sx={{ color: \"text.disabled\", fontSize: \"0.75rem\" }}\n >\n ›\n </Box>\n )}\n <Typography\n variant=\"caption\"\n sx={{\n color: isLast ? \"text.primary\" : \"text.secondary\",\n fontWeight: isLast ? 700 : 400,\n // Feature names have no spaces to break on, so\n // without this a long one overflows the trail.\n overflowWrap: \"anywhere\",\n }}\n >\n {part}\n </Typography>\n </React.Fragment>\n );\n })}\n {selectedSubMenu?.navigationState && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 0.5,\n px: 0.75,\n borderRadius: (t) => `${t.shape.chipRadius}px`,\n backgroundColor: \"action.hover\",\n color: \"text.secondary\",\n fontFamily: \"monospace\",\n overflowWrap: \"anywhere\",\n }}\n >\n {selectedSubMenu.navigationState}\n </Typography>\n )}\n </Box>\n )}\n </Box>\n\n {subMenuId ? (\n AccessRightsContent\n ) : (\n <Box\n data-testid=\"featuremenu-no-feature-selected\"\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n p: 4,\n }}\n >\n <Box sx={{ color: \"text.disabled\" }}>\n <FontAwesomeIcons iconName=\"faListCheck\" size=\"2x\" />\n </Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>\n {translate(\"No sub menu selected\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Select a sub menu from the list to view and manage its access rights.\",\n )}\n </Typography>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n </Paper>\n );\n}\n"],"names":["BLOCK","FeatureMenuSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","SubMenuSkeleton","_","index","AccessRightsSkeleton","AccessRights","lazy","SubMenu","formatModuleLabel","key","word","FeatureMenu","dispatch","useDispatch","getCachedData","useCaching","Data","setData","useState","searchParams","setSearchParams","useSearchParams","subMenuId","state","_a","subMenuGroupName","subMenuFeatureVal","subMenuIdRef","useRef","clearSelection","useCallback","setSubMenuId","setSubMenuGroupName","setSubMenuFeatureVal","navigate","useNavigate","user","translate","useTranslateProvider","setIsLoading","trackEvent","useTrackEvent","isNewAPI","setIsNewAPI","rights","setRights","features","featureNames","useMemo","moduleParam","selectedId","selectedModule","selectedSubMenu","item","menuConfigTrail","moduleTabs","feat","featureModuleIcon","handleTabChange","event","nextModule","prev","next","handleFeature","useEffect","getFeatures","data","getAssignedFeatures","parsedRights","getFeatureName","filterData","a","b","startTransition","error","showToast","_b","SubMenuContent","Suspense","id","name","val","AccessRightsContent","canManageGroups","GeneralUtil","canCreateFeature","Box","Paper","t","FontAwesomeIcons","Typography","Button","SegmentedTabs","part","isLast","React"],"mappings":"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"}