iobroker.admin 7.4.7 → 7.4.9
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.
- package/README.md +10 -9
- package/adminWww/asset-manifest.json +27 -27
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/1892.3c30ecff.chunk.js.map +1 -1
- package/adminWww/static/js/{288.12201160.chunk.js → 288.18e82468.chunk.js} +2 -2
- package/adminWww/static/js/288.18e82468.chunk.js.map +1 -0
- package/adminWww/static/js/3363.a4c36649.chunk.js.map +1 -1
- package/adminWww/static/js/3834.d81ffc60.chunk.js +2 -0
- package/adminWww/static/js/3834.d81ffc60.chunk.js.map +1 -0
- package/adminWww/static/js/4289.a5fc8b2e.chunk.js +2 -0
- package/adminWww/static/js/4289.a5fc8b2e.chunk.js.map +1 -0
- package/adminWww/static/js/471.8a82d825.chunk.js.map +1 -1
- package/adminWww/static/js/4720.6112531a.chunk.js +2 -0
- package/adminWww/static/js/4720.6112531a.chunk.js.map +1 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js +2 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js.map +1 -0
- package/adminWww/static/js/{6361.48a28196.chunk.js → 6361.ec86271d.chunk.js} +2 -2
- package/adminWww/static/js/6361.ec86271d.chunk.js.map +1 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js +3 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js.map +1 -0
- package/adminWww/static/js/6853.6655ed69.chunk.js +2 -0
- package/adminWww/static/js/6853.6655ed69.chunk.js.map +1 -0
- package/adminWww/static/js/{7137.7b5ca6b5.chunk.js → 7137.c988b7e1.chunk.js} +2 -2
- package/adminWww/static/js/7137.c988b7e1.chunk.js.map +1 -0
- package/adminWww/static/js/{7424.223daaa3.chunk.js → 7424.5cf79afc.chunk.js} +2 -2
- package/adminWww/static/js/7424.5cf79afc.chunk.js.map +1 -0
- package/adminWww/static/js/{8144.ae502bba.chunk.js → 8144.5989b02c.chunk.js} +3 -3
- package/adminWww/static/js/8144.5989b02c.chunk.js.map +1 -0
- package/adminWww/static/js/8387.2cb15163.chunk.js.map +1 -1
- package/adminWww/static/js/9823.8a42dea5.chunk.js +3 -0
- package/adminWww/static/js/9823.8a42dea5.chunk.js.map +1 -0
- package/adminWww/static/js/{main.d26a969d.js → main.dbb63dc9.js} +2 -2
- package/adminWww/static/js/{main.d26a969d.js.map → main.dbb63dc9.js.map} +1 -1
- package/build-backend/main.js +6 -1
- package/build-backend/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +4 -4
- package/adminWww/static/js/288.12201160.chunk.js.map +0 -1
- package/adminWww/static/js/3834.2e04eb51.chunk.js +0 -2
- package/adminWww/static/js/3834.2e04eb51.chunk.js.map +0 -1
- package/adminWww/static/js/4289.e9a5790f.chunk.js +0 -2
- package/adminWww/static/js/4289.e9a5790f.chunk.js.map +0 -1
- package/adminWww/static/js/4720.72b71322.chunk.js +0 -2
- package/adminWww/static/js/4720.72b71322.chunk.js.map +0 -1
- package/adminWww/static/js/5687.c249e41f.chunk.js +0 -2
- package/adminWww/static/js/5687.c249e41f.chunk.js.map +0 -1
- package/adminWww/static/js/6361.48a28196.chunk.js.map +0 -1
- package/adminWww/static/js/6603.614b4df4.chunk.js +0 -3
- package/adminWww/static/js/6603.614b4df4.chunk.js.map +0 -1
- package/adminWww/static/js/6853.cfc24286.chunk.js +0 -2
- package/adminWww/static/js/6853.cfc24286.chunk.js.map +0 -1
- package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +0 -1
- package/adminWww/static/js/7424.223daaa3.chunk.js.map +0 -1
- package/adminWww/static/js/8144.ae502bba.chunk.js.map +0 -1
- package/adminWww/static/js/9823.f3f5cd8c.chunk.js +0 -3
- package/adminWww/static/js/9823.f3f5cd8c.chunk.js.map +0 -1
- /package/adminWww/static/js/{6603.614b4df4.chunk.js.LICENSE.txt → 6603.ee9b0df5.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{8144.ae502bba.chunk.js.LICENSE.txt → 8144.5989b02c.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{9823.f3f5cd8c.chunk.js.LICENSE.txt → 9823.8a42dea5.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/js/5687.d7fa0a4e.chunk.js","mappings":"wLAkBA,MAAMA,EAA8B,CAChCC,YAAa,CACTC,SAAU,IACVC,SAAU,KAEdC,eAAgB,CACZC,QAAS,OACTC,SAAU,UAEdC,UAAW,CACPC,YAAa,GAEjBC,QAAS,CACLC,SAAU,IAEdC,eAAgB,CACZC,SAAU,WACVC,MAAO,EACPC,IAAK,GAETC,qBAAuBC,IAAe,CAClCC,MAAOD,EAAME,QAAQC,QAAQC,QAoJrC,EAzHoBC,IAqBkB,IArBjB,kBACjBC,EAAiB,cACjBC,EAAa,MACbC,EAAK,UACLC,EAAS,KACTC,EAAI,SACJvB,EAAQ,SACRwB,EAAQ,KACRC,EAAI,yBACJC,EAAwB,YACxBC,EAAW,QACXC,EAAO,SACPC,EAAQ,iBACRC,EAAgB,iBAChBC,EAAgB,QAChBC,EAAO,UACPC,EAAS,aACTC,EAAY,eACZjC,EAAc,aACdkC,EAAY,MACZtB,GACeK,EACf,MAAOkB,EAAOC,IAAYC,EAAAA,EAAAA,UAASJ,IACnCK,EAAAA,EAAAA,YAAU,KACNF,EAASH,EAAa,GACvB,CAACA,IAEJ,IAAIM,EAAyD,KAEzDf,IACAe,EAAOf,GAGX,MAAMb,EAAuB6B,EAAAA,MAAMC,SAAS7B,EAAOhB,EAAOe,sBAE1D,OACI+B,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACN7C,SAAUA,GAAY,KACtBsB,YAAaA,EACbwB,sBAAsB,EACtBlB,QAASA,EACTmB,GAAI,CAAE,mBAAoBlD,EAAOC,aAA8C+B,SAAA,CAE9ER,IACGsB,EAAAA,EAAAA,MAACK,EAAAA,YAAW,CAAAnB,SAAA,CACPJ,GAAOwB,EAAAA,EAAAA,KAACT,EAAI,CAACU,MAAOrD,EAAOO,YAAgB,KAC3CiB,EACuB,OAAvB8B,EAAAA,KAAKC,eAA0BjC,GAC5B8B,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLJ,OAAKK,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO1D,EAAOW,gBAAoBY,EAAgBR,OAAuB4C,GAC9EC,QAASA,IAAMtC,IACfE,MAAO8B,EAAAA,KAAKO,EAAE,8BAA8B7B,UAE5CoB,EAAAA,EAAAA,KAACU,EAAAA,SAAY,MAEjB,SAGZhB,EAAAA,EAAAA,MAACiB,EAAAA,cAAa,CACVV,OAAKK,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQtD,EAAiBJ,EAAOI,oBAAiBuD,GAAe3D,EAAOS,SAAO,IAAEuD,WAAY,IAAIhC,SAAA,CAEpGI,IACGgB,EAAAA,EAAAA,KAACa,EAAAA,UACG,CACAC,aAAa,MACbzC,WAAS,EACT0C,WAAS,EACTC,QAAQ,WACRX,KAAK,SAELY,WAAS,EACT9B,MAAOA,EACP+B,SAAUC,GAAK/B,EAAS+B,EAAEC,OAAOjC,OACjCkC,UAAW,CACPC,MAAO,CACHC,aAAcpC,GACVa,EAAAA,EAAAA,KAACwB,EAAAA,eAAc,CAAChE,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLG,QAASA,IAAMpB,EAAS,IAAIR,UAE5BoB,EAAAA,EAAAA,KAACyB,EAAAA,MAAS,QAGlB,SAMnB7C,EACAN,GAAO0B,EAAAA,EAAAA,KAAA,OAAApB,SAAMN,IAAc,SAEhCoB,EAAAA,EAAAA,MAACgC,EAAAA,cAAa,CAAA9C,SAAA,OACQ2B,IAAhB7B,GAA6BA,KAC3BsB,EAAAA,EAAAA,KAAC2B,EAAAA,OAAM,CACHC,WAAW5B,EAAAA,EAAAA,KAAC6B,EAAAA,MAAS,IACrBC,SAAU5C,GAAgBX,GAAaE,GAA4BQ,IAAiBE,EACpFqB,QAASA,IAAMzB,GAAWA,EAAQC,EAAYG,EAAQ,IACtD6B,QAAQ,YACRnD,MAAM,UAASe,SAEdsB,EAAAA,KAAKO,EAAE5B,GAAoB,SAGpCmB,EAAAA,EAAAA,KAAC2B,EAAAA,OAAM,CACH9D,MAAM,OACN2C,QAAS7B,EACTmD,SAAUvD,EACVyC,QAAQ,YACRY,WAAW5B,EAAAA,EAAAA,KAACyB,EAAAA,MAAS,IAAI7C,SAExBsB,EAAAA,KAAKO,EAAE3B,GAAoB,iBAG/B,C,4IC1KjB,MAAMiD,EAAWC,EAAIC,QAAUD,EAAIC,QAAQ,oBAAsBD,EAAIE,SAAS,oBAE9E,MAAMC,UAAwBC,EAAAA,gBAC1BC,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KA0BjBE,YAAc,KAEV,MAAMC,EAAQC,KAAKJ,MAAMK,KAAKC,MAAM,KAC9BC,EAAOH,KAAKI,MAAMC,aACxBN,EAAMO,OAAO,EAAG,GAChB,MAAMC,EAAUR,EAAM,GAChBS,EAAOT,EAAMO,OAAO,GAAGG,KAAK,KAClCT,KAAKJ,MAAMc,OACNZ,YAAYS,EAASC,EAAMG,EAAAA,GAAOC,KAAKT,GAAMU,SAAS,WACtDC,MAAK,IAAMd,KAAKJ,MAAM3D,YACtB8E,OAAMtC,GAAKuC,OAAOC,MAAM,sBAADC,OAAuBzC,KAAK,EAlCxD0C,OAAOC,OAAOpB,KAAKI,MAAO,CAEtBiB,UAAWrB,KAAKJ,MAAM0B,iBAAkB,GAEhD,CAEA,kBAAOC,CAAYC,GACf,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,QACD,MAAO,QACX,IAAK,KACD,MAAO,aACX,IAAK,OAEL,IAAK,MACD,MAAO,OACX,QAEI,OAAOnC,EAASoC,eAAe,YAADP,OAAaM,IAAOE,KAAKxB,MAAM,KAAKyB,MAE9E,CAeAC,iBAAAA,GAEI,OACItE,EAAAA,EAAAA,KAACuE,EAAAA,EAAM,CACHH,KAAMjC,EAAgB8B,YAAYvB,KAAKJ,MAAM0B,gBAC7CQ,UAAW9B,KAAKJ,MAAMkC,UACtBrF,MAAOuD,KAAKI,MAAMC,cAAgBL,KAAKI,MAAM2B,MAAQ/B,KAAKI,MAAM4B,KAChExD,SACIwB,KAAKI,MAAMiB,QACLY,GAAYjC,KAAKkC,SAAS,CAAE7B,aAAc4B,EAAUE,SAAS,SAC7DtE,GAItB,CAEAuE,MAAAA,GACIpC,KAAKF,aACT,EAGG,MAAMuC,GAAaC,EAAAA,EAAAA,YAAAA,CAAY7C,G,0BC1DtC,MAAM8C,EAAkG,CACpG,CACIC,MAAO,CACH,CAAEhC,KAAM,OAAQiC,SAAU,KAAO/G,MAAO,cACxC,CAAE8E,KAAM,QAASiC,SAAU,IAAO/G,MAAO,iBAGjD,CACIgH,MAAO,CACH,CAAElC,KAAM,OAAQiC,SAAU,GAAM/G,MAAO,cACvC,CAAE8E,KAAM,QAASiC,SAAU,GAAM/G,MAAO,iBAGhD,CACIiH,SAAU,CACN,CAAEnC,KAAM,OAAQiC,SAAU,EAAK/G,MAAO,iBACtC,CAAE8E,KAAM,QAASiC,SAAU,EAAK/G,MAAO,qBAK7CkH,EAAwBA,CAACnG,EAAewF,EAAkBY,KAC5DpG,GAASwF,EAAWY,EAEpBpG,GAASwF,EAAoB,OAAPY,GAepBC,EAA4CvH,IAS3C,IAT4C,MAC/CkB,EAAK,SACLC,EAAQ,EACRqB,EAAC,gBACDgF,EAAe,gBACfC,EAAe,KACfH,EAAI,QACJI,EAAO,SACP7D,GACH7D,GACGqB,EAAAA,EAAAA,YAAU,KACN,GAAIoG,EAAiB,CACjB,IAAIE,EAAkB,EACtB,IAAK,IAAIzE,EAAI,EAAGA,EAAIsE,EAAgBI,OAAQ1E,IACxCyE,GAAmBzG,EAAQsG,EAAgBtE,GAE/CwE,EAAQC,EACZ,MACID,EAAQ,EACZ,GACD,CAACF,EAAiBC,EAAiBC,EAASxG,IAE/C,IAAI2G,EAAc3G,EAElB,OACIa,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHhD,QAAS,OACT8I,MAAO,cACPC,OAAQ,GACRC,OAAQ,YACRC,WAAY,GACdtH,SAEDqG,EAAekB,KAAIC,IAChB,MAAMlD,EAAOW,OAAOwC,KAAKD,GAAI,GAE7B,OACI1G,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACH8F,MAAO,IACPO,OAAQ,IACRrJ,QAAS,OACTsJ,cAAe,SACfC,WAAY,SACZN,WAAY,aACdtH,SAAA,EAGFoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHqG,OAAQ,GACRrJ,QAAS,OACTuJ,WAAY,SACZlJ,SAAU,GACVmJ,aAAc,mBACdV,MAAO,OACPW,eAAgB,UAClB9H,SAED6B,EAAEyC,MAEPlD,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHhD,QAAS,OACT8I,MAAO,QACTnH,SAEDwH,EAAGlD,GAAMiD,KAAI,CAACQ,EAAKC,KAChB,IAAIC,GAAO,EAEX,MAAMC,EAASvB,EAAOoB,EAAIxB,SAO1B,OALIW,EAAca,EAAIxB,UAAY,IAC9BW,GAAea,EAAIxB,SACnB0B,GAAO,IAIPnH,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHhD,QAAS,OACTsJ,cAAe,SACfQ,KAAM,EACNP,WAAY,SACZQ,YAAqB,IAARJ,EAAY,YAAc,GACzChI,SAAA,EAGFoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHqG,OAAQ,GACRG,aAAc,YACdV,MAAO,OACPW,eAAgB,SAChBzJ,QAAS,OACTuJ,WAAY,SACZ3I,MAAO,UACTe,SAED6B,EAAEkG,EAAIzD,SAEXlD,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEqG,OAAQ,GAAIrJ,QAAS,QAAS2B,UACxCoB,EAAAA,EAAAA,KAACiH,EAAAA,SAAQ,CACLnF,SAAUA,EACVoF,QAASL,EACThJ,MAAOiJ,EAAS,UAAY,YAC5BK,gBAAiBL,EACjB7G,MAAO6G,EAAS,CAAEM,QAAS,SAAQ7G,EACnCW,SAAUC,IACF2F,IACAvB,GAAwB,OAAfoB,EAAIxB,SACbQ,EAAQJ,IAEZ,IAAIZ,EAAWxF,EACVgC,EAAEC,OAAO8F,QAGVvC,GAAYgC,EAAIxB,SAFhBR,GAA4B,OAAfgC,EAAIxB,SAIrB/F,EAASuF,EAAS,QAjCzBgC,EAAIxB,SAqCP,QA7EbjC,EAiFH,KAGZ,EAIdmE,eAAeC,EAAYC,EAAkBC,EAAkBpE,GAC3D,IAAIqE,EAAQD,EAAQD,GACpB,IAAKE,EAAO,CACR,MAAMhF,EAAQ8E,EAAS3E,MAAM,KACvB8E,EAAQjF,EAAMoD,OACd5C,EAAUR,EAAMkF,SAAW,KAC3BC,EAAUnF,EAAMU,KAAK,KACrB0E,QAAiBzE,EAAO0E,QAAQ7E,EAAS2E,GAC/CJ,EAAQD,GAAY,GACpB,IAAK,IAAIQ,EAAI,EAAGA,EAAIF,EAAShC,OAAQkC,IAAK,CACtC,MAAMC,EAAOH,EAASE,GAChBE,EAAyB,CAC3BC,GAAG,GAADtE,OAAK2D,EAAQ,KAAA3D,OAAIoE,EAAKA,MACxB9D,IAAKiE,EAAAA,EAAWC,iBAAiBJ,EAAKA,MACtCK,OAAQL,EAAKM,MACbpF,KAAM8E,EAAKA,KACX3H,KAAM2H,EAAKO,OAASP,EAAKO,MAAMlI,KAC/BmI,SAAUR,EAAKS,WACfC,IAAKV,EAAKU,IACVhB,SAEJF,EAAQD,GAAUoB,KAAKV,EAC3B,CACAR,EAAQD,EAAQD,EACpB,CAEA,IAAK,IAAIQ,EAAI,EAAGA,EAAIN,EAAM5B,OAAQkC,IAAK,CACnC,MAAME,EAAOR,EAAMM,GACfE,EAAKI,cACCf,EAAYW,EAAKC,GAAIV,EAASpE,EAE5C,CACJ,CAoBAiE,eAAeuB,EACXxF,EACAoE,EACAqB,GAIc,IAHd5F,EAAe6F,UAAAjD,OAAA,QAAAtF,IAAAuI,UAAA,GAAAA,UAAA,GAAG,GAClBC,EAAYD,UAAAjD,OAAA,QAAAtF,IAAAuI,UAAA,GAAAA,UAAA,GAAG,GACfpB,EAAaoB,UAAAjD,OAAA,QAAAtF,IAAAuI,UAAA,GAAAA,UAAA,GAAG,EAShB,GAPoB,kBAATD,IACPA,EAAOA,EAAKjG,MAAM,KAClB8E,EAAQ,EACRzE,EAAU4F,EAAKlB,SAAW,GAC1BoB,EAAO,MAGPF,EAAKhD,QAAU6B,GAInB,GAAIF,EAAQvE,EAAU8F,GAAO,CACzB,GAAIF,EAAKhD,OAAS,IAAM6B,EAAO,CAE3B,MAAMsB,EAAE,GAAApF,OAAMX,EAAU8F,EAAI,KAAAnF,OAAIiF,EAAKnB,IAC/BuB,EAAKzB,EAAQvE,EAAU8F,GAAMG,MAAKjB,GAAQA,EAAKC,KAAOc,IAK5D,YAJIC,GAAMA,EAAGZ,cAEHf,EAAYrE,EAAU8F,EAAMvB,EAASpE,GAGnD,CACA2F,GAAI,IAAAnF,OAAQiF,EAAKnB,UAEXkB,EAASxF,EAAQoE,EAASqB,EAAM5F,EAAS8F,EAAMrB,EAAQ,EACjE,KAAO,CAEH,MAAMD,QAAcrE,EAAO0E,QAAQ7E,GAAW,KAAM8F,GACpDvB,EAAQvE,EAAU8F,GAAQ,GAC1BtB,EAAM0B,SAAQnB,IACV,MAAMC,EAAO,CACTC,GAAG,GAADtE,OAAKmF,EAAI,KAAAnF,OAAIoE,EAAKA,MACpB9D,IAAKiE,EAAAA,EAAWC,iBAAiBJ,EAAKA,MACtCK,OAAQL,EAAKM,MACbpF,KAAM8E,EAAKA,KACX3H,KAAM2H,EAAKO,OAASP,EAAKO,MAAMlI,KAC/BmI,SAAUR,EAAKS,WACfC,IAAKV,EAAKU,IACVhB,SAGJF,EAAQvE,EAAU8F,GAAMJ,KAAKV,EAAK,UAGhCW,EAASxF,EAAQoE,EAASqB,EAAM5F,EAAS8F,EAAMrB,EAAQ,EACjE,CACJ,CAEA,MAAM0B,EAAY,YAkclB,EAlbwEC,IAYtB,IAZuB,QACrE1K,EAAO,QACPI,EAAO,SACPuK,EAAQ,qBACRC,EAAoB,mBACpBC,EAAkB,QAClBC,EAAO,EACPhJ,EAAC,UACD+D,EAAS,QACTgD,EAAO,OACPpE,EAAM,MACNxF,GAC2ByL,EAC3B,MAAMK,EAASJ,EAASK,UAAU,EAAGL,EAASM,YAAY,OAASN,EAC7DO,GAC8B,IAA/BP,EAAS1G,MAAM,KAAKiD,OACf2B,EAAQ,KAAK0B,MAAKY,IAAA,IAAC,GAAE5B,GAAI4B,EAAA,OAAK5B,IAAOoB,CAAQ,IAC7C9B,EAAQkC,GAAQR,MAAKa,IAAA,IAAC,GAAE7B,GAAI6B,EAAA,OAAK7B,IAAOoB,CAAQ,MAAO,CAAC,GAC3DU,EAAgBC,IAAqB5K,EAAAA,EAAAA,UAAwB,OAC7D6K,EAAiBC,IAAsB9K,EAAAA,EAAAA,UAAwB,OAC/D+K,EAAOC,IAAYhL,EAAAA,EAAAA,UAAgC,KACnDiL,EAAQC,IAAalL,EAAAA,EAAAA,UAAiC,KACtDqG,EAAiB8E,IAAsBnL,EAAAA,EAAAA,WAAS,IAChDoL,EAAeC,IAAoBrL,EAAAA,EAAAA,UAAS,IAC5CsL,EAAwBC,IAA6BvL,EAAAA,EAAAA,UAAwB,OAC7EwL,EAAgBC,IAAqBzL,EAAAA,EAAAA,WAAS,IAC9C0L,EAAgBC,IAAqB3L,EAAAA,EAAAA,WAAS,IAC9C4L,EAAiBC,IAAsB7L,EAAAA,EAAAA,UAAmB,KAC1D8L,EAAYC,IAAiB/L,EAAAA,EAAAA,UAAS,IACtCgM,EAAKC,IAAUjM,EAAAA,EAAAA,UAA4C,KAC3DkM,EAAgBC,IAAqBnM,EAAAA,EAAAA,WAAS,IAC9Cd,EAAUkN,IAAepM,EAAAA,EAAAA,WAAS,GAEnCqM,EAAOxL,EAAAA,KAAKC,cAsKlB,OApKAb,EAAAA,EAAAA,YAAU,KACN,MAAMqM,EAA6B,GAE7BzD,EAAK2B,EAAO3B,GAElB,IAAI0D,GAAkB,EAClBC,GAAkB,EAClBC,EAAiC,KACjCC,EAAkC,KAClCC,EAAkC,KACtC,MAAMC,EAA0C,GAChD,IAAIC,EAAQ,EAEPtD,EAASxF,EAAQoE,EAASU,GAAI1E,MAAK,KACpC,MAAM2I,EA3IlB,SAAkB3E,GACd,MAAM2E,EAAyC,CAAC,EAchD,OAZAtI,OAAOwC,KAAKmB,GAAS2B,SAAQiD,IACzBD,EAAKC,GAAO,CACR/D,QAAQ,EACRH,GAAIkE,EACJ1E,MAAO,EACPxE,KAAMkJ,GAEV5E,EAAQ4E,GAAKjD,SAAQlB,IACjBkE,EAAKlE,EAAKC,IAAMD,CAAI,GACtB,IAGCkE,CACX,CA2HyBE,CAAS7E,GAEhB8E,EAAW,GAAA1I,OAAMsE,EAAE,KAEzBrE,OAAOwC,KAAK8F,GAAMhD,SAAQiD,IACtB,GAAY,MAARA,IAIAA,IAAQlE,GAAMkE,EAAIG,WAAWD,IAC7B,IAAKF,EAAII,SAAS,MAAQ/C,EAAQ2C,GAAM,CAAC,IAADK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAEpC,MAAMC,EAAYzD,EAAQ2C,GAC1BF,IACAD,EAAKtD,KAAKuE,GAEsB,OAA5BlB,QAA4DzL,KAAX,QAAbkM,EAAAS,EAAUxE,WAAG,IAAA+D,OAAA,EAAbA,EAAezE,QACnDgE,EAA0BkB,EAAUxE,IAAIV,MAEpB,OAApB8D,QAAqDvL,KAAZ,QAAbmM,EAAAQ,EAAUxE,WAAG,IAAAgE,OAAA,EAAbA,EAAeS,SAC3CrB,EAAkBoB,EAAUxE,IAAIyE,OAEX,OAArBpB,QAA2DxL,KAAjB,QAAboM,EAAAO,EAAUxE,WAAG,IAAAiE,OAAA,EAAbA,EAAeS,cAC5CrB,EAAmBmB,EAAUxE,IAAI0E,YAIhCvC,GACDiB,KAAiC,QAAlBc,EAAKM,EAAUxE,WAAG,IAAAkE,OAAA,EAAbA,EAAeO,aACV5M,KAAZ,QAAbsM,EAAAK,EAAUxE,WAAG,IAAAmE,OAAA,EAAbA,EAAeM,SAEfvB,GAAkB,GAGjBb,GACDgB,KAAkC,QAAlBe,EAAKI,EAAUxE,WAAG,IAAAoE,OAAA,EAAbA,EAAeM,kBACN7M,KAAjB,QAAbwM,EAAAG,EAAUxE,WAAG,IAAAqE,OAAA,EAAbA,EAAeK,cAEfvB,GAAkB,QAGMtL,KAAX,QAAbyM,EAAAE,EAAUxE,WAAG,IAAAsE,OAAA,EAAbA,EAAehF,OACfgE,KAAyC,QAAlBiB,EAAKC,EAAUxE,WAAG,IAAAuE,OAAA,EAAbA,EAAejF,OAC1C2D,EAAiBa,SAASU,EAAUxE,IAAIV,OAEzC2D,EAAiBhD,KAAKuE,EAAUxE,IAAIV,KAE5C,MAAO,IAAKmE,EAAKC,GAAK/D,OAAQ,CAC1B6D,IACA,MAAMmB,EAAYlB,EAAKC,GACvBH,EAAKtD,KAAK0E,GAEsB,OAA5BrB,QAC6DzL,IAA5D8M,EAAU3E,IAAkC4E,cAE7CtB,EAA2BqB,EAAU3E,IAAkC4E,aAEnD,OAApBxB,QAAoDvL,IAAxB8M,EAAU3E,IAAIyE,QAC1CrB,EAAkBuB,EAAU3E,IAAIyE,OAEX,OAArBpB,QAA0DxL,IAA7B8M,EAAU3E,IAAI0E,aAC3CrB,EAAmBsB,EAAU3E,IAAI0E,YAIhCvC,GACDiB,IAAoBuB,EAAU3E,IAAIyE,YACV5M,IAAxB8M,EAAU3E,IAAIyE,QAEdvB,GAAkB,GAGjBb,GACDgB,IAAqBsB,EAAU3E,IAAI0E,iBACN7M,IAA7B8M,EAAU3E,IAAI0E,aAEdvB,GAAkB,QAG2CtL,IAA5D8M,EAAU3E,IAAkC4E,aAC7CtB,IAA6BqB,EAAU3E,IAAkC4E,aACxE3B,EAAiBa,SAAUa,EAAU3E,IAAkC4E,cAExE3B,EAAiBhD,KAAM0E,EAAU3E,IAAkC4E,YAE3E,CACJ,IAGJ,MAAMC,EAAgC,GAChCC,EAAkC,GAExC3J,OAAOwC,KAAKoD,GAASN,SAAQsE,IACzB,MAAM9G,EAAM8C,EAAQgE,GAChBA,EAAIlB,WAAW,kBAAkC,WAAX,OAAH5F,QAAG,IAAHA,OAAG,EAAHA,EAAK+G,MACxCF,EAAQ7E,KAAKhC,GACN8G,EAAIlB,WAAW,iBAAiC,UAAX,OAAH5F,QAAG,IAAHA,OAAG,EAAHA,EAAK+G,OAC9CH,EAAO5E,KAAKhC,EAChB,IAGJ,MAAMgH,EAAalE,EAAQ,iBAAiBmE,OAAOC,cAEnD/B,EAAkBA,GAAmB6B,EAAWR,MAChDpB,EAAmBA,GAAoB4B,EAAWP,WAClDpB,EAA0BA,GAA2B2B,EAAW3F,KAChE4C,EAA0BoB,GAE1B/B,EAAkB6B,GAClB3B,EAAmB4B,GAEnBjB,EAAkBc,GAClBZ,EAAkBa,GAElBxB,EAASkD,GACThD,EAAUiD,GAEA,OAAN3D,QAAM,IAANA,GAAAA,EAAQxB,QACRmC,GAAmB,GAEvBE,EAAiBwB,GAEjBhB,EAAmBS,GAEnBL,EAAOW,EAAK,GACd,GAEH,CAACxC,EAASH,KAEbhK,EAAAA,EAAAA,YAAU,KACN,GAAIoG,EACImF,GAAkBb,IAAmBZ,GACrCa,EAAkBb,GAGlB2B,GAAkBb,IAAoBd,GACtCe,EAAmBf,OAEpB,CACkD,IAAD0E,EAAAC,EAGEC,EAAAC,EAHtD,GAAIjE,GAAkBA,IAAmBZ,EACrCa,GAAmC,QAAjB6D,EAAArE,EAAQH,UAAS,IAAAwE,GAAK,QAALC,EAAjBD,EAAmBpF,WAAG,IAAAqF,OAAL,EAAjBA,EAAwBZ,QAAS,MAEvD,GAAIjD,GAAmBA,IAAoBd,EACvCe,GAAoC,QAAjB6D,EAAAvE,EAAQH,UAAS,IAAA0E,GAAK,QAALC,EAAjBD,EAAmBtF,WAAG,IAAAuF,OAAL,EAAjBA,EAAwBb,aAAc,KAEjE,CACAc,QAAQC,IAAI,kBAADvK,OAAmBoG,GAAiB,GAEhD,CAACtE,EAAiBsE,EAAgBE,EAAiBW,EAAgBE,IAEjEM,EAAIxF,QAIL7F,EAAAA,EAAAA,KAACoO,EAAAA,EAAW,CACRxQ,MAAOA,EACPiB,iBAAiB,QACjB7B,gBAAc,EACdkC,aAAcqM,EACdhN,SAAUA,EACVI,QAASA,EACTI,QAASA,KACL0M,GAAY,GACZ4C,YAAWhH,UAAa,IAADiH,EAAAC,EACnB,MAAMC,GAAgD,QAA/BF,EAAA7E,EAAQ,iBAAiBmE,cAAM,IAAAU,GAAe,QAAfC,EAA/BD,EAAiCT,qBAAa,IAAAU,OAAf,EAA/BA,EAAgDvG,OAAQ,KAE/E,GAAKtC,EA4CE,CACH,MAAM+I,EAA4B,OAAbtD,EACrB,IAAK,IAAIuD,EAAI,EAAGA,EAAIrD,EAAIxF,OAAQ6I,IAAK,CACjC,MAAMzG,EAAOoD,EAAIqD,GACjB,IAAI7J,GAAU,EACd,MAAM8J,EAAe1G,EACf2G,EAAa3G,EAEnB,GAAI0G,EAAalB,IAAK,CAAC,IAADoB,EAAAC,EAAAC,EAAAC,EAElB,MAAM1B,EAAchI,GACA,QAAhBuJ,EAAAF,EAAajG,WAAG,IAAAmG,OAAA,EAAhBA,EAAkB7G,OAAQwG,EAC1B7D,EACA8D,GAEAnB,KAAgC,QAArBwB,EAAKH,EAAajG,WAAG,IAAAoG,OAAA,EAAhBA,EAAkB9G,QAClC2G,EAAajG,IAAMiG,EAAajG,KAAQ,CAAC,EACzCiG,EAAajG,IAAIV,KAAOsF,EACxBzI,GAAU,GAEVmF,IAAmBZ,GAAaY,KAAmC,QAArB+E,EAAKJ,EAAajG,WAAG,IAAAqG,OAAA,EAAhBA,EAAkB5B,SACrEwB,EAAajG,IAAMiG,EAAajG,KAAQ,CAAC,EACzCiG,EAAajG,IAAIyE,MAAQnD,EACzBnF,GAAU,GAEVqF,IAAoBd,GAAac,KAAoC,QAArB8E,EAAKL,EAAajG,WAAG,IAAAsG,OAAA,EAAhBA,EAAkB5B,cACvEuB,EAAajG,IAAMiG,EAAajG,KAAQ,CAAC,EACzCiG,EAAajG,IAAI0E,WAAalD,EAC9BrF,GAAU,GAGd,IACQA,SACM0E,EAAqBoF,EAEnC,CAAE,MAAOM,GACLf,QAAQe,MAAMA,EAClB,CACJ,MAAO,GAAIL,IAAeA,EAAWvG,OAAQ,CAAC,IAAD6G,EAAAC,EAAAC,EAAAC,EACzC,MAAMC,EAAoC,CAAC,EACrChC,EAAchI,GACD,QAAf4J,EAACN,EAAWlG,WAAG,IAAAwG,OAAA,EAAfA,EAA+C5B,cAAekB,EAC9D7D,EACA8D,GAcJ,GAZInB,KAA+B,QAApB6B,EAAMP,EAAWlG,WAAG,IAAAyG,OAAA,EAAfA,EAA+C7B,eAC/DgC,EAAOhC,YAAcA,EACrBzI,GAAU,GAEVmF,IAAmBZ,GAAaY,KAAiC,QAAnBoF,EAAKR,EAAWlG,WAAG,IAAA0G,OAAA,EAAdA,EAAgBjC,SACnEmC,EAAOnC,MAAQnD,EACfnF,GAAU,GAEVqF,IAAoBd,GAAac,KAAkC,QAAnBmF,EAAKT,EAAWlG,WAAG,IAAA2G,OAAA,EAAdA,EAAgBjC,cACrEkC,EAAOlC,WAAalD,EACpBrF,GAAU,GAEVA,EAAS,CACT,MAAMpC,EAAQmM,EAAW1G,GAAGtF,MAAM,KAC5BK,EAAUR,EAAMkF,QAChBkB,EAAOpG,EAAMU,KAAK,KACxB,UACUqG,EAAmBvG,EAAS4F,EAAMyG,EAC5C,CAAE,MAAOL,GACLf,QAAQe,MAAMA,EAClB,CACJ,CACJ,CACJ,CACJ,KAjHsB,CAClB,MAAMxM,EAAQoH,EAAO3B,GAAGtF,MAAM,KACxBK,EAAUR,EAAMkF,QAChBkB,EAAOpG,EAAMU,KAAK,KAClBmM,EAAoC,CAAC,EAC3C,IAAIzK,GAAU,EACO,IAAD0K,EAAAC,EAAAC,EAApB,GAAK5F,EAAOxB,QAgBL,IAAK5F,EAAMoD,QAAU4D,EAAQI,EAAO3B,IAAK,CAAC,IAADwH,EAAAC,EAAAC,EAE5C,MAAMjJ,EAAM8C,EAAQI,EAAO3B,KAChB,QAAPwH,EAAA/I,EAAI+B,WAAG,IAAAgH,OAAA,EAAPA,EAAS1H,QAAS2C,IAClBhE,EAAI+B,IAAM/B,EAAI+B,KAAQ,CAAC,EACvB/B,EAAI+B,IAAIV,KAAO2C,EACf9F,GAAU,IAEH,QAAP8K,EAAAhJ,EAAI+B,WAAG,IAAAiH,OAAA,EAAPA,EAASxC,SAAUnD,IACnBrD,EAAI+B,IAAM/B,EAAI+B,KAAQ,CAAC,EACvB/B,EAAI+B,IAAIyE,MAAQnD,EAChBnF,GAAU,IAEH,QAAP+K,EAAAjJ,EAAI+B,WAAG,IAAAkH,OAAA,EAAPA,EAASxC,cAAelD,IACxBvD,EAAI+B,IAAM/B,EAAI+B,KAAQ,CAAC,EACvB/B,EAAI+B,IAAI0E,WAAalD,EACrBrF,GAAU,GAEVA,SACM0E,EAAqB5C,EAEnC,OApCmB,QAAX4I,EAAC1F,EAAOnB,WAAG,IAAA6G,OAAA,EAAXA,EAA2CjC,eAAgB3C,IAC3D2E,EAAOhC,YAAc3C,EACrB9F,GAAU,IAEA,QAAV2K,EAAA3F,EAAOnB,WAAG,IAAA8G,OAAA,EAAVA,EAAYrC,SAAUnD,IACtBsF,EAAOnC,MAAQnD,EACfnF,GAAU,IAEA,QAAV4K,EAAA5F,EAAOnB,WAAG,IAAA+G,OAAA,EAAVA,EAAYrC,cAAelD,IAC3BoF,EAAOlC,WAAalD,EACpBrF,GAAU,GAEVA,SACM2E,EAAmBvG,EAAS4F,EAAMyG,EAwBpD,CAuEA7D,GAAY,GACZ1M,GAAS,GACV,IAAI,EACTH,UAEFc,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,OAAQsJ,cAAe,UAAW3H,SAAA,EACrDoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACH+F,OAAQ,GACR1I,SAAU,IACZsB,SAED6B,EAAE,0BAA2B6I,MAGlC5J,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,QAAS2B,SAAA,EAC5BoB,EAAAA,EAAAA,KAAC6P,EAAAA,eAAc,CACXxR,WAAS,EACT4B,MAAO,CAAE7C,YAAa,IACtB0S,MAAOrP,EAAE,cACTiL,KAAMA,EACNS,KAAM/B,EACN3J,EAAGA,EACHqB,SAAUvD,EACVY,MAAO6K,QAAkBzJ,EACzBiE,UAAWA,EACXuL,YAAWlF,GAAiBzB,EAC5BlI,SAAU8O,IACNlF,GAAkB,GAClBb,EAAkB+F,GAClBxE,GAAkB,EAAM,KAGhCxL,EAAAA,EAAAA,KAAC6P,EAAAA,eAAc,CACXxR,WAAS,EACTyR,MAAOrP,EAAE,eACTiL,KAAMA,EACNS,KAAM7B,EACN7J,EAAGA,EACHqB,SAAUvD,EACVY,MAAO+K,QAAmB3J,EAC1BiE,UAAWA,EACXuL,YAAWhF,GAAiB3B,EAC5BlI,SAAU8O,IACNhF,GAAkB,GAClBb,EAAmB6F,GACnBxE,GAAkB,EAAM,QAKpC9L,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHhD,QAAS,OACT+I,OAAQ,GACRQ,WAAY,SACZlJ,SAAU,GACV2S,WAAY,EACZpS,MAAO,UACTe,SAAA,EAEFoB,EAAAA,EAAAA,KAAA,OAAKC,MAAQ4J,EAAOxB,QAAW3C,OAAuCnF,EAArB,CAAE1C,MAAO,SAAsBe,SAC3E6B,EAAE,wBAEPT,EAAAA,EAAAA,KAACkQ,EAAAA,OAAM,CACHpO,SAAyB,IAAfuJ,EAAIxF,QAAgBtH,EAC9B2I,SAAWuC,EAAQI,EAAO3B,OAAS2B,EAAOxB,QAAW3C,EACrDxE,SAAUC,IACNqJ,EAAmBrJ,EAAEC,OAAO8F,SAC5BsE,GAAkB,EAAM,EAE5B3N,MAAM,aAEV6B,EAAAA,EAAAA,MAAA,OAAKO,MAAO4J,EAAOxB,QAAU3C,EAAkB,CAAE7H,MAAO,cAAY0C,EAAU3B,SAAA,CACzE6B,EAAE,0BAA2B,IAC7BoJ,EAAOxB,QAAUoC,EAAgB,EAAC,IAAA7G,OAAO6G,EAAa,KAAA7G,OAAInD,EAAE,aAAY,KAAM,SAItFlC,IAAYyB,EAAAA,EAAAA,KAACmQ,EAAAA,eAAc,KAE5BnQ,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEmQ,UAAW,QAASxR,UAC9Bc,EAAAA,EAAAA,MAAA,OAAAd,SAAA,EACIoB,EAAAA,EAAAA,KAAA,MAAApB,SAAK6B,EAAE,kBACPT,EAAAA,EAAAA,KAACwF,EAAY,CACT1D,SAAUvD,EACVgH,KAAM4F,EACNxF,QAASyF,EACT1F,gBAAiBA,EACjBD,gBAAiBwF,EACjBxK,EAAGA,EACHrB,SAAU+B,IACNyJ,EAA0BzJ,GAC1BqK,GAAkB,EAAM,EAE5BrM,MAAOwL,eAjOpB3K,EAAAA,EAAAA,KAACmQ,EAAAA,eAAc,GAsOR,EC9sBtB,MAAME,UAAcC,EAAAA,UAOhBjO,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAPA7B,OAAC,OAED8P,eAAS,OAElB9G,aAAO,OAaf+G,UAAY,CAACC,EAAcC,EAAYC,SACtBpQ,IAATmQ,EACOhO,KAAKJ,MAAM7B,EAAEgQ,EAAMC,EAAMC,IAG/BjO,KAAK6N,UAAUE,KAChB/N,KAAK6N,UAAUE,GAAQ/N,KAAKJ,MAAM7B,EAAEgQ,IAGjC/N,KAAK6N,UAAUE,IAlBtB/N,KAAKjC,EAAIiC,KAAK8N,UACd9N,KAAK6N,UAAY,CAAC,EAClB7N,KAAK+G,QAAU,CAAC,CACpB,CAEAmH,iBAAAA,GACSlO,KAAKJ,MAAMc,OAAOyN,YAAW,GAAM,GAAMrN,MAAKiG,GAAY/G,KAAK+G,QAAUA,GAClF,CAcAqH,eAAAA,CAAgBC,GACZ,OACI/Q,EAAAA,EAAAA,KAACgR,EAAuB,CACpBpT,MAAO8E,KAAKJ,MAAM1E,MAClB4G,UAAW9B,KAAKJ,MAAMkC,UACtB+E,qBAAsBlC,UAElB,MAAM4J,QAAgBvO,KAAKJ,MAAMc,OAAO8N,UAAUC,EAAQ1D,KAC1DwD,EAAOvI,IAAMyI,EAAQzI,UACfhG,KAAKJ,MAAMc,OAAOgO,UAAUH,EAAOxD,IAAKwD,GAC9C,MAAMI,EAAqBJ,EAEjB,OAANI,QAAM,IAANA,GAAAA,EAAQ3I,KACRqI,EAAQO,eAAe,CACnB,CACIpJ,GAAImJ,EAAO5D,IACX/E,IAAK2I,EAAO3I,IACZhB,MAAO,EACPxE,KAAMmO,EAAO5D,IACbpF,QAAQ,IAGpB,EAEJmB,mBAAoBnC,MAAOpE,EAAiB+E,EAAcnF,KACtD,IAAIwO,EAgBJ,IAfKxO,EAAKsK,OAAStK,EAAKuK,aAAevK,EAAKyK,mBAClC5K,KAAKJ,MAAMc,OAAOmO,UAAUtO,EAAS+E,EAAM,CAC7CmF,MAAOtK,EAAKsK,MACZC,WAAYvK,EAAKuK,aAErBiE,QAAe3O,KAAKJ,MAAMc,OAAOoO,UAAUvO,EAAS+E,EAAM,CAAE5D,KAAMvB,EAAKyK,eAChEzK,EAAKyK,YACZ+D,QAAe3O,KAAKJ,MAAMc,OAAOoO,UAAUvO,EAAS+E,EAAM,CAAE5D,KAAMvB,EAAKyK,eAChEzK,EAAKsK,OAAStK,EAAKuK,cAC1BiE,QAAe3O,KAAKJ,MAAMc,OAAOmO,UAAUtO,EAAS+E,EAAM,CACtDmF,MAAOtK,EAAKsK,MACZC,WAAYvK,EAAKuK,cAIrBqE,MAAMC,QAAQL,GACd,IAAK,IAAI3C,EAAI,EAAGA,EAAI2C,EAAOxL,OAAQ6I,IAAK,CACpC,MAAMzG,EAAOoJ,EAAO3C,GAChBzG,GAAQA,EAAKD,MAAQC,EAAKS,KAC1BqI,EAAQO,eAAe,CACnB,CACIpJ,GAAG,GAADtE,OAAKX,EAAO,KAAAW,OAAIqE,EAAKY,KAAI,GAAAjF,OAAMqE,EAAKY,KAAI,KAAM,IAAEjF,OAAGqE,EAAKD,MAC1DU,IAAKT,EAAKS,IACVhB,MAAO,EACPxE,KAAM,GACNmF,QAAQ,IAIxB,CACJ,EAWJiB,SAAUyH,EAAQjO,MAAMwG,SACxB9B,QAASuJ,EAAQjO,MAAM0E,QACvBiC,QAAS/G,KAAK+G,QACdrG,OAAQV,KAAKJ,MAAMc,OACnB3C,EAAGiC,KAAKjC,EACR9B,QAASA,IAAMoS,EAAQnM,SAAS,CAAE+M,mBAAmB,IACrD5S,QAASA,IAAMgS,EAAQnM,SAAS,CAAE+M,mBAAmB,KAGjE,CAEAC,MAAAA,GACI,OAAKlP,KAAKJ,MAAMuP,OAKZ7R,EAAAA,EAAAA,KAAC8R,EAAAA,aAAY,CAAAlT,UACToB,EAAAA,EAAAA,KAAC+R,EAAAA,WAAU,CAAC7U,SAAS,OAAM0B,UACvBoB,EAAAA,EAAAA,KAACgS,EAAAA,YAAW,CACRC,oBAAkB,EAClBJ,MAAOnP,KAAKJ,MAAMuP,MAClBzO,OAAQV,KAAKJ,MAAMc,OACnBoB,UAAW9B,KAAKJ,MAAMkC,UACtB5G,MAAO8E,KAAKJ,MAAM1E,MAClB8N,KAAMhJ,KAAKJ,MAAMoJ,KACjBjL,EAAGiC,KAAKJ,MAAM7B,EACdyR,aAAW,EACXC,aAAW,EACXC,WAAS,EACTC,eAAa,EACbC,mBAAiB,EACjBC,aAAW,EACXC,WAAY9P,KAAKJ,MAAMkQ,WACvBC,yBAA2B1B,GAA8BrO,KAAKoO,gBAAgBC,GAC9E2B,WAAY3N,SAtBjB/E,EAAAA,EAAAA,KAACmQ,EAAAA,eAAc,GA2B9B,EAGJ,S","sources":["components/CustomModal.tsx","components/FileEditor.tsx","dialogs/FileEditOfAccessControl.tsx","tabs/Files.tsx"],"sourcesContent":["import React, { useEffect, useState, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n TextField,\n Button,\n InputAdornment,\n type Breakpoint,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface CustomModalProps {\n icon?: React.FC<{ style?: React.CSSProperties }>;\n onClose: () => void;\n children?: JSX.Element | JSX.Element[];\n title?: string;\n titleButtonClose?: string;\n titleButtonApply?: string;\n onApply?: (value: string | number) => void;\n fullWidth?: boolean;\n maxWidth?: Breakpoint;\n applyButton?: boolean;\n disableApplyIfNotChanged?: boolean;\n overflowHidden?: boolean;\n help?: string;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n textInput?: boolean;\n defaultValue?: string | number;\n progress?: boolean;\n disableApply?: boolean;\n theme: IobTheme;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n disableApplyIfNotChanged,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n disableApply,\n theme,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon: React.FC<{ style?: React.CSSProperties }> | null = null;\n\n if (icon) {\n Icon = icon;\n }\n\n const languageButtonActive = Utils.getStyle(theme, styles.languageButtonActive);\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? languageButtonActive : undefined) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n style={{ ...(overflowHidden ? styles.overflowHidden : undefined), ...styles.content, paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"standard\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n slotProps={{\n input: {\n endAdornment: value ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setValue('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {(applyButton === undefined || applyButton) && (\n <Button\n startIcon={<CheckIcon />}\n disabled={disableApply || progress || (disableApplyIfNotChanged && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","// File viewer in adapter-react does not support write\nimport { Buffer } from 'buffer';\nimport React, { type JSX } from 'react';\n\n// File viewer in adapter-react does not use ace editor\nimport * as ace from 'ace-builds';\nimport 'ace-builds/src-noconflict/ext-modelist';\n\nimport { withWidth, FileViewerClass, type FileViewerProps } from '@iobroker/adapter-react-v5';\n\nimport Editor from './Editor';\n\n// @ts-expect-error try this too\nconst modelist = ace.require ? ace.require('ace/ext/modelist') : ace.acequire('ace/ext/modelist');\n\nclass FileEditorClass extends FileViewerClass {\n constructor(props: FileViewerProps) {\n super(props);\n\n Object.assign(this.state, {\n // File viewer in adapter-react does not support write\n editing: !!this.props.formatEditFile || false,\n });\n }\n\n static getEditFile(ext: string | null): 'json' | 'json5' | 'javascript' | 'html' | 'text' {\n switch (ext) {\n case 'json':\n return 'json';\n case 'json5':\n return 'json5';\n case 'js':\n return 'javascript';\n case 'html':\n return 'html';\n case 'txt':\n return 'html';\n default:\n // e.g. ace/mode/text\n return modelist.getModeForPath(`testFile.${ext}`).mode.split('/').pop();\n }\n }\n\n writeFile64 = (): void => {\n // File viewer in adapter-react does not support write\n const parts = this.props.href.split('/');\n const data = this.state.editingValue;\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n this.props.socket\n .writeFile64(adapter, name, Buffer.from(data).toString('base64'))\n .then(() => this.props.onClose())\n .catch(e => window.alert(`Cannot write file: ${e}`));\n };\n\n getEditorOrViewer(): JSX.Element {\n // File viewer in adapter-react does not support write\n return (\n <Editor\n mode={FileEditorClass.getEditFile(this.props.formatEditFile)}\n themeType={this.props.themeType}\n value={this.state.editingValue || this.state.code || this.state.text}\n onChange={\n this.state.editing\n ? newValue => this.setState({ editingValue: newValue, changed: true })\n : undefined\n }\n />\n );\n }\n\n onSave(): void {\n this.writeFile64();\n }\n}\n\nexport const FileEditor = withWidth()(FileEditorClass);\n","import React, { useEffect, useState, type JSX } from 'react';\nimport { Checkbox, LinearProgress, Switch } from '@mui/material';\n\nimport {\n I18n,\n SelectWithIcon,\n type AdminConnection,\n type ThemeType,\n type Translate,\n type IobTheme,\n type FolderOrFileItem,\n type Folders,\n type MetaACL,\n type MetaObject,\n} from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '../helpers/AdminUtils';\nimport CustomModal from '../components/CustomModal';\n\nconst readWriteArray: Record<string, { name: 'read' | 'write'; valueNum: number; title: string }[]>[] = [\n {\n Owner: [\n { name: 'read', valueNum: 0x400, title: 'read owner' },\n { name: 'write', valueNum: 0x200, title: 'write owner' },\n ],\n },\n {\n Group: [\n { name: 'read', valueNum: 0x40, title: 'read group' },\n { name: 'write', valueNum: 0x20, title: 'write group' },\n ],\n },\n {\n Everyone: [\n { name: 'read', valueNum: 0x4, title: 'read everyone' },\n { name: 'write', valueNum: 0x2, title: 'write everyone' },\n ],\n },\n];\n\nconst newValueAccessControl = (value: number, newValue: number, mask: number): number => {\n value |= newValue & mask;\n\n value &= newValue | (~mask & 0xffff);\n return value;\n};\n\ninterface ObjectRightsProps {\n value: number;\n setValue: (value: number) => void;\n t: Translate;\n differentValues: number[];\n applyToChildren: boolean;\n mask: number;\n setMask: (mask: number) => void;\n disabled: boolean;\n}\n\nconst ObjectRights: React.FC<ObjectRightsProps> = ({\n value,\n setValue,\n t,\n differentValues,\n applyToChildren,\n mask,\n setMask,\n disabled,\n}) => {\n useEffect(() => {\n if (applyToChildren) {\n let _checkDifferent = 0;\n for (let e = 0; e < differentValues.length; e++) {\n _checkDifferent |= value ^ differentValues[e];\n }\n setMask(_checkDifferent);\n } else {\n setMask(0);\n }\n }, [differentValues, applyToChildren, setMask, value]);\n\n let newSelected = value;\n\n return (\n <div\n style={{\n display: 'flex',\n width: 'fit-content',\n margin: 20,\n border: '1px solid',\n borderLeft: 0,\n }}\n >\n {readWriteArray.map(el => {\n const name = Object.keys(el)[0];\n\n return (\n <div\n style={{\n width: 150,\n height: 150,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n borderLeft: '1px solid',\n }}\n key={name}\n >\n <div\n style={{\n height: 50,\n display: 'flex',\n alignItems: 'center',\n fontSize: 18,\n borderBottom: '1px solid silver',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {t(name)}\n </div>\n <div\n style={{\n display: 'flex',\n width: '100%',\n }}\n >\n {el[name].map((obj, idx) => {\n let bool = false;\n\n const masked = mask & obj.valueNum;\n\n if (newSelected - obj.valueNum >= 0) {\n newSelected -= obj.valueNum;\n bool = true;\n }\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n alignItems: 'center',\n borderRight: idx === 0 ? '1px solid' : 0,\n }}\n key={obj.valueNum}\n >\n <div\n style={{\n height: 50,\n borderBottom: '1px solid',\n width: '100%',\n justifyContent: 'center',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n }}\n >\n {t(obj.name)}\n </div>\n <div style={{ height: 50, display: 'flex' }}>\n <Checkbox\n disabled={disabled}\n checked={bool}\n color={masked ? 'primary' : 'secondary'}\n indeterminate={!!masked}\n style={masked ? { opacity: 0.5 } : undefined}\n onChange={e => {\n if (masked) {\n mask &= ~obj.valueNum & 0xffff;\n setMask(mask);\n }\n let newValue = value;\n if (!e.target.checked) {\n newValue &= ~obj.valueNum & 0xffff;\n } else {\n newValue |= obj.valueNum;\n }\n setValue(newValue);\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nasync function loadFolders(folderId: string, folders: Folders, socket: AdminConnection): Promise<void> {\n let files = folders[folderId];\n if (!files) {\n const parts = folderId.split('/');\n const level = parts.length;\n const adapter = parts.shift() || null;\n const relPath = parts.join('/');\n const dirFiles = await socket.readDir(adapter, relPath);\n folders[folderId] = [];\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n const item: FolderOrFileItem = {\n id: `${folderId}/${file.file}`,\n ext: AdminUtils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats && file.stats.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n folders[folderId].push(item);\n }\n files = folders[folderId];\n }\n\n for (let f = 0; f < files.length; f++) {\n const item = files[f];\n if (item.folder) {\n await loadFolders(item.id, folders, socket);\n }\n }\n}\n\nfunction flatList(folders: Folders): Record<string, FolderOrFileItem> {\n const list: Record<string, FolderOrFileItem> = {};\n\n Object.keys(folders).forEach(key => {\n list[key] = {\n folder: true,\n id: key, // unused\n level: 0, // unused\n name: key, // unused\n };\n folders[key].forEach(item => {\n list[item.id] = item;\n });\n });\n\n return list;\n}\n\nasync function loadPath(\n socket: AdminConnection,\n folders: Folders,\n path: string | string[],\n adapter: string = '',\n part: string = '',\n level: number = 0,\n): Promise<void> {\n if (typeof path === 'string') {\n path = path.split('/');\n level = 0;\n adapter = path.shift() || '';\n part = '';\n }\n\n if (path.length >= level) {\n return;\n }\n\n if (folders[adapter + part]) {\n if (path.length - 1 === level) {\n // try to find a file\n const aa = `${adapter + part}/${path[level]}`;\n const ff = folders[adapter + part].find(item => item.id === aa);\n if (ff && ff.folder) {\n // load all\n await loadFolders(adapter + part, folders, socket);\n }\n return;\n }\n part += `/${path[level]}`;\n\n await loadPath(socket, folders, path, adapter, part, level + 1);\n } else {\n // load path\n const files = await socket.readDir(adapter || null, part);\n folders[adapter + part] = [];\n files.forEach(file => {\n const item = {\n id: `${part}/${file.file}`,\n ext: AdminUtils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats && file.stats.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n\n folders[adapter + part].push(item);\n });\n\n await loadPath(socket, folders, path, adapter, part, level + 1);\n }\n}\n\nconst DIFFERENT = 'different';\n\ninterface FileEditOfAccessControlProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n applyChangesToObject: (obj: MetaObject) => Promise<void>;\n applyChangesToFile: (adapter: string, filePath: string, acl?: Partial<ioBroker.FileACL>) => Promise<void>;\n objects: Record<string, ioBroker.Object>;\n t: Translate;\n themeType: ThemeType;\n theme: IobTheme;\n folders: Folders;\n socket: AdminConnection;\n}\n\nconst FileEditOfAccessControl: React.FC<FileEditOfAccessControlProps> = ({\n onClose,\n onApply,\n selected,\n applyChangesToObject,\n applyChangesToFile,\n objects,\n t,\n themeType,\n folders,\n socket,\n theme,\n}: FileEditOfAccessControlProps): JSX.Element => {\n const select = selected.substring(0, selected.lastIndexOf('/')) || selected;\n const object: FolderOrFileItem =\n (selected.split('/').length === 1\n ? folders['/'].find(({ id }) => id === selected)\n : folders[select].find(({ id }) => id === selected)) || ({} as FolderOrFileItem);\n const [stateOwnerUser, setStateOwnerUser] = useState<string | null>(null);\n const [stateOwnerGroup, setStateOwnerGroup] = useState<string | null>(null);\n const [users, setUsers] = useState<ioBroker.UserObject[]>([]);\n const [groups, setGroups] = useState<ioBroker.GroupObject[]>([]);\n const [applyToChildren, setApplyToChildren] = useState(false);\n const [childrenCount, setChildrenCount] = useState(0);\n const [valueFileAccessControl, setValueFileAccessControl] = useState<number | null>(null);\n const [differentOwner, setDifferentOwner] = useState(false);\n const [differentGroup, setDifferentGroup] = useState(false);\n const [differentObject, setDifferentObject] = useState<number[]>([]);\n const [maskObject, setMaskObject] = useState(0);\n const [ids, setIds] = useState<(MetaObject | FolderOrFileItem)[]>([]);\n const [disabledButton, setDisabledButton] = useState(true);\n const [progress, setProgress] = useState(false);\n\n const lang = I18n.getLanguage();\n\n useEffect(() => {\n const _differentObject: number[] = [];\n\n const id = object.id;\n\n let _differentOwner = false;\n let _differentGroup = false;\n let _stateOwnerUser: string | null = null;\n let _stateOwnerGroup: string | null = null;\n let _valueFileAccessControl: number = null;\n const _ids: (MetaObject | FolderOrFileItem)[] = [];\n let count = 0;\n\n void loadPath(socket, folders, id).then(() => {\n const list = flatList(folders);\n\n const idWithSlash = `${id}/`;\n\n Object.keys(list).forEach(key => {\n if (key === '/') {\n return;\n }\n\n if (key === id || key.startsWith(idWithSlash)) {\n if (!key.includes('/') && objects[key]) {\n // it is an object\n const objFolder = objects[key] as MetaObject;\n count++;\n _ids.push(objFolder);\n\n if (_valueFileAccessControl === null && objFolder.acl?.file !== undefined) {\n _valueFileAccessControl = objFolder.acl.file;\n }\n if (_stateOwnerUser === null && objFolder.acl?.owner !== undefined) {\n _stateOwnerUser = objFolder.acl.owner;\n }\n if (_stateOwnerGroup === null && objFolder.acl?.ownerGroup !== undefined) {\n _stateOwnerGroup = objFolder.acl.ownerGroup;\n }\n\n if (\n !differentOwner &&\n _stateOwnerUser !== objFolder.acl?.owner &&\n objFolder.acl?.owner !== undefined\n ) {\n _differentOwner = true;\n }\n if (\n !differentGroup &&\n _stateOwnerGroup !== objFolder.acl?.ownerGroup &&\n objFolder.acl?.ownerGroup !== undefined\n ) {\n _differentGroup = true;\n }\n if (\n objFolder.acl?.file !== undefined &&\n _valueFileAccessControl !== objFolder.acl?.file &&\n !_differentObject.includes(objFolder.acl.file)\n ) {\n _differentObject.push(objFolder.acl.file);\n }\n } else if (!list[key].folder) {\n count++;\n const keyFolder = list[key];\n _ids.push(keyFolder);\n if (\n _valueFileAccessControl === null &&\n (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions !== undefined\n ) {\n _valueFileAccessControl = (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions;\n }\n if (_stateOwnerUser === null && keyFolder.acl.owner !== undefined) {\n _stateOwnerUser = keyFolder.acl.owner;\n }\n if (_stateOwnerGroup === null && keyFolder.acl.ownerGroup !== undefined) {\n _stateOwnerGroup = keyFolder.acl.ownerGroup;\n }\n\n if (\n !differentOwner &&\n _stateOwnerUser !== keyFolder.acl.owner &&\n keyFolder.acl.owner !== undefined\n ) {\n _differentOwner = true;\n }\n if (\n !differentGroup &&\n _stateOwnerGroup !== keyFolder.acl.ownerGroup &&\n keyFolder.acl.ownerGroup !== undefined\n ) {\n _differentGroup = true;\n }\n if (\n (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions !== undefined &&\n _valueFileAccessControl !== (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions &&\n !_differentObject.includes((keyFolder.acl as ioBroker.EvaluatedFileACL).permissions)\n ) {\n _differentObject.push((keyFolder.acl as ioBroker.EvaluatedFileACL).permissions);\n }\n }\n }\n });\n\n const _users: ioBroker.UserObject[] = [];\n const _groups: ioBroker.GroupObject[] = [];\n // Get users and groups\n Object.keys(objects).forEach(_id => {\n const obj = objects[_id];\n if (_id.startsWith('system.group.') && obj?.type === 'group') {\n _groups.push(obj as ioBroker.GroupObject);\n } else if (_id.startsWith('system.user.') && obj?.type === 'user') {\n _users.push(obj as ioBroker.UserObject);\n }\n });\n\n const defaultAcl = objects['system.config'].common.defaultNewAcl;\n\n _stateOwnerUser = _stateOwnerUser || defaultAcl.owner;\n _stateOwnerGroup = _stateOwnerGroup || defaultAcl.ownerGroup;\n _valueFileAccessControl = _valueFileAccessControl || defaultAcl.file;\n setValueFileAccessControl(_valueFileAccessControl);\n\n setStateOwnerUser(_stateOwnerUser);\n setStateOwnerGroup(_stateOwnerGroup);\n\n setDifferentOwner(_differentOwner);\n setDifferentGroup(_differentGroup);\n\n setUsers(_users);\n setGroups(_groups);\n\n if (object?.folder) {\n setApplyToChildren(true);\n }\n setChildrenCount(count);\n\n setDifferentObject(_differentObject);\n\n setIds(_ids);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [objects, selected]);\n\n useEffect(() => {\n if (applyToChildren) {\n if (differentOwner && stateOwnerUser !== DIFFERENT) {\n setStateOwnerUser(DIFFERENT);\n }\n\n if (differentGroup && stateOwnerGroup !== DIFFERENT) {\n setStateOwnerGroup(DIFFERENT);\n }\n } else {\n if (stateOwnerUser && stateOwnerUser === DIFFERENT) {\n setStateOwnerUser(objects[selected]?.acl?.owner || null);\n }\n if (stateOwnerGroup && stateOwnerGroup === DIFFERENT) {\n setStateOwnerGroup(objects[selected]?.acl?.ownerGroup || null);\n }\n }\n console.log(`stateOwnerUser ${stateOwnerUser}`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [applyToChildren, stateOwnerUser, stateOwnerGroup, differentOwner, differentGroup]);\n\n if (!ids.length) {\n return <LinearProgress />;\n }\n return (\n <CustomModal\n theme={theme}\n titleButtonApply=\"apply\"\n overflowHidden\n disableApply={disabledButton}\n progress={progress}\n onClose={onClose}\n onApply={() => {\n setProgress(true);\n setTimeout(async () => {\n const defaultAclFile = objects['system.config'].common?.defaultNewAcl?.file || 0x664;\n\n if (!applyToChildren) {\n const parts = object.id.split('/');\n const adapter = parts.shift();\n const path = parts.join('/');\n const newAcl: Partial<ioBroker.FileACL> = {};\n let changed = false;\n if (!object.folder) {\n if ((object.acl as ioBroker.EvaluatedFileACL)?.permissions !== valueFileAccessControl) {\n newAcl.permissions = valueFileAccessControl;\n changed = true;\n }\n if (object.acl?.owner !== stateOwnerUser) {\n newAcl.owner = stateOwnerUser;\n changed = true;\n }\n if (object.acl?.ownerGroup !== stateOwnerGroup) {\n newAcl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n await applyChangesToFile(adapter, path, newAcl);\n }\n } else if (!parts.length && objects[object.id]) {\n // setObject(acl)\n const obj = objects[object.id] as MetaObject;\n if (obj.acl?.file !== valueFileAccessControl) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.file = valueFileAccessControl;\n changed = true;\n }\n if (obj.acl?.owner !== stateOwnerUser) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.owner = stateOwnerUser;\n changed = true;\n }\n if (obj.acl?.ownerGroup !== stateOwnerGroup) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n await applyChangesToObject(obj);\n }\n }\n } else {\n const _maskObject = ~maskObject & 0xffff;\n for (let i = 0; i < ids.length; i++) {\n const item = ids[i];\n let changed = false;\n const itemAsObject = item as MetaObject;\n const itemAsItem = item as FolderOrFileItem;\n\n if (itemAsObject._id) {\n // it is an object\n const permissions = newValueAccessControl(\n itemAsObject.acl?.file || defaultAclFile,\n valueFileAccessControl,\n _maskObject,\n );\n if (permissions !== itemAsObject.acl?.file) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.file = permissions;\n changed = true;\n }\n if (stateOwnerUser !== DIFFERENT && stateOwnerUser !== itemAsObject.acl?.owner) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.owner = stateOwnerUser;\n changed = true;\n }\n if (stateOwnerGroup !== DIFFERENT && stateOwnerGroup !== itemAsObject.acl?.ownerGroup) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n\n try {\n if (changed) {\n await applyChangesToObject(itemAsObject);\n }\n } catch (error) {\n console.error(error);\n }\n } else if (itemAsItem && !itemAsItem.folder) {\n const newAcl: Partial<ioBroker.FileACL> = {};\n const permissions = newValueAccessControl(\n (itemAsItem.acl as ioBroker.EvaluatedFileACL)?.permissions || defaultAclFile,\n valueFileAccessControl,\n _maskObject,\n );\n if (permissions !== (itemAsItem.acl as ioBroker.EvaluatedFileACL)?.permissions) {\n newAcl.permissions = permissions;\n changed = true;\n }\n if (stateOwnerUser !== DIFFERENT && stateOwnerUser !== itemAsItem.acl?.owner) {\n newAcl.owner = stateOwnerUser;\n changed = true;\n }\n if (stateOwnerGroup !== DIFFERENT && stateOwnerGroup !== itemAsItem.acl?.ownerGroup) {\n newAcl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n const parts = itemAsItem.id.split('/');\n const adapter = parts.shift();\n const path = parts.join('/');\n try {\n await applyChangesToFile(adapter, path, newAcl);\n } catch (error) {\n console.error(error);\n }\n }\n }\n }\n }\n\n setProgress(false);\n onApply();\n }, 200);\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n }}\n >\n {t('Access control list: %s', selected)}\n </div>\n\n <div style={{ display: 'flex' }}>\n <SelectWithIcon\n fullWidth\n style={{ marginRight: 10 }}\n label={t('Owner user')}\n lang={lang}\n list={users as ioBroker.Object[]}\n t={t}\n disabled={progress}\n value={stateOwnerUser || undefined}\n themeType={themeType}\n different={differentOwner ? DIFFERENT : false}\n onChange={val => {\n setDifferentOwner(false);\n setStateOwnerUser(val);\n setDisabledButton(false);\n }}\n />\n <SelectWithIcon\n fullWidth\n label={t('Owner group')}\n lang={lang}\n list={groups as ioBroker.Object[]}\n t={t}\n disabled={progress}\n value={stateOwnerGroup || undefined}\n themeType={themeType}\n different={differentGroup ? DIFFERENT : false}\n onChange={val => {\n setDifferentGroup(false);\n setStateOwnerGroup(val);\n setDisabledButton(false);\n }}\n />\n </div>\n\n <div\n style={{\n display: 'flex',\n margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n }}\n >\n <div style={!object.folder || !applyToChildren ? { color: 'green' } : undefined}>\n {t('to apply one item')}\n </div>\n <Switch\n disabled={ids.length === 1 || progress}\n checked={(!objects[object.id] && !!object.folder) || applyToChildren}\n onChange={e => {\n setApplyToChildren(e.target.checked);\n setDisabledButton(false);\n }}\n color=\"primary\"\n />\n <div style={object.folder || applyToChildren ? { color: 'green' } : undefined}>\n {t('to apply with children')}{' '}\n {object.folder || childrenCount > 1 ? `(${childrenCount} ${t('object(s)')})` : ''}\n </div>\n </div>\n\n {progress && <LinearProgress />}\n\n <div style={{ overflowY: 'auto' }}>\n <div>\n <h2>{t('File rights')}</h2>\n <ObjectRights\n disabled={progress}\n mask={maskObject}\n setMask={setMaskObject}\n applyToChildren={applyToChildren}\n differentValues={differentObject}\n t={t}\n setValue={e => {\n setValueFileAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueFileAccessControl}\n />\n </div>\n </div>\n </div>\n </CustomModal>\n );\n};\n\nexport default FileEditOfAccessControl;\n","import React, { Component, type JSX } from 'react';\n\nimport { LinearProgress } from '@mui/material';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n TabContainer,\n TabContent,\n FileBrowser,\n type FileBrowserClass,\n type MetaObject,\n} from '@iobroker/adapter-react-v5';\n\nimport { FileEditor } from '../components/FileEditor';\nimport FileEditOfAccessControl from '../dialogs/FileEditOfAccessControl';\n\ninterface FilesProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n ready: boolean;\n expertMode: boolean;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nclass Files extends Component<FilesProps> {\n private readonly t: Translate;\n\n private readonly wordCache: Record<string, string>;\n\n private objects: Record<string, ioBroker.Object>;\n\n constructor(props: FilesProps) {\n super(props);\n this.t = this.translate;\n this.wordCache = {};\n this.objects = {};\n }\n\n componentDidMount(): void {\n void this.props.socket.getObjects(true, true).then(objects => (this.objects = objects));\n }\n\n translate = (word: string, arg1?: any, arg2?: any): string => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n };\n\n renderAclDialog(context: FileBrowserClass): JSX.Element {\n return (\n <FileEditOfAccessControl\n theme={this.props.theme}\n themeType={this.props.themeType}\n applyChangesToObject={async (fileObj: MetaObject) => {\n // it is setObject\n const oldObj = (await this.props.socket.getObject(fileObj._id)) as MetaObject;\n oldObj.acl = fileObj.acl;\n await this.props.socket.setObject(oldObj._id, oldObj);\n const result: MetaObject = oldObj;\n\n if (result?.acl) {\n context.updateItemsAcl([\n {\n id: result._id,\n acl: result.acl,\n level: 0, // not used\n name: result._id, // not used\n folder: false, // not used\n },\n ]);\n }\n }}\n applyChangesToFile={async (adapter: string, file: string, data: Partial<ioBroker.FileACL>) => {\n let result: ioBroker.ChownFileResult[] | undefined;\n if ((data.owner || data.ownerGroup) && data.permissions) {\n await this.props.socket.chownFile(adapter, file, {\n owner: data.owner,\n ownerGroup: data.ownerGroup,\n });\n result = await this.props.socket.chmodFile(adapter, file, { mode: data.permissions });\n } else if (data.permissions) {\n result = await this.props.socket.chmodFile(adapter, file, { mode: data.permissions });\n } else if (data.owner || data.ownerGroup) {\n result = await this.props.socket.chownFile(adapter, file, {\n owner: data.owner,\n ownerGroup: data.ownerGroup,\n });\n }\n\n if (Array.isArray(result)) {\n for (let i = 0; i < result.length; i++) {\n const item = result[i];\n if (item && item.file && item.acl) {\n context.updateItemsAcl([\n {\n id: `${adapter}/${item.path ? `${item.path}/` : ''}${item.file}`,\n acl: item.acl as ioBroker.EvaluatedFileACL,\n level: 0, // not used\n name: '', // not used\n folder: false, // not used\n },\n ]);\n }\n }\n }\n // deprecated\n // } else if (result?.entries) {\n // for (let i = 0; i < result.entries.length; i++) {\n // const item = result.entries[i];\n // if (item && item.file && item.acl) {\n // context.updateItemsAcl([{ id: `${adapter}/${item.path ? `${item.path}/` : ''}${item.file}`, acl: item.acl }]);\n // }\n // }\n // }\n }}\n selected={context.state.selected}\n folders={context.state.folders}\n objects={this.objects}\n socket={this.props.socket}\n t={this.t}\n onClose={() => context.setState({ modalEditOfAccess: false })}\n onApply={() => context.setState({ modalEditOfAccess: false })}\n />\n );\n }\n\n render(): JSX.Element {\n if (!this.props.ready) {\n return <LinearProgress />;\n }\n\n return (\n <TabContainer>\n <TabContent overflow=\"auto\">\n <FileBrowser\n showViewTypeButton\n ready={this.props.ready}\n socket={this.props.socket}\n themeType={this.props.themeType}\n theme={this.props.theme}\n lang={this.props.lang}\n t={this.props.t}\n showToolbar\n allowUpload\n allowView\n allowDownload\n allowCreateFolder\n allowDelete\n expertMode={this.props.expertMode}\n modalEditOfAccessControl={(context: FileBrowserClass) => this.renderAclDialog(context)}\n FileViewer={FileEditor}\n />\n </TabContent>\n </TabContainer>\n );\n }\n}\n\nexport default Files;\n"],"names":["styles","modalDialog","minWidth","maxWidth","overflowHidden","display","overflow","titleIcon","marginRight","content","fontSize","languageButton","position","right","top","languageButtonActive","theme","color","palette","primary","main","_ref","toggleTranslation","noTranslation","title","fullWidth","help","progress","icon","disableApplyIfNotChanged","applyButton","onClose","children","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableApply","value","setValue","useState","useEffect","Icon","Utils","getStyle","_jsxs","Dialog","open","disableEscapeKeyDown","sx","DialogTitle","_jsx","style","I18n","getLanguage","IconButton","size","_objectSpread","undefined","onClick","t","LanguageIcon","DialogContent","paddingTop","TextField","autoComplete","autoFocus","variant","multiline","onChange","e","target","slotProps","input","endAdornment","InputAdornment","CloseIcon","DialogActions","Button","startIcon","CheckIcon","disabled","modelist","ace","require","acequire","FileEditorClass","FileViewerClass","constructor","props","super","writeFile64","parts","this","href","split","data","state","editingValue","splice","adapter","name","join","socket","Buffer","from","toString","then","catch","window","alert","concat","Object","assign","editing","formatEditFile","getEditFile","ext","getModeForPath","mode","pop","getEditorOrViewer","Editor","themeType","code","text","newValue","setState","changed","onSave","FileEditor","withWidth","readWriteArray","Owner","valueNum","Group","Everyone","newValueAccessControl","mask","ObjectRights","differentValues","applyToChildren","setMask","_checkDifferent","length","newSelected","width","margin","border","borderLeft","map","el","keys","height","flexDirection","alignItems","borderBottom","justifyContent","obj","idx","bool","masked","flex","borderRight","Checkbox","checked","indeterminate","opacity","async","loadFolders","folderId","folders","files","level","shift","relPath","dirFiles","readDir","f","file","item","id","AdminUtils","getFileExtension","folder","isDir","stats","modified","modifiedAt","acl","push","loadPath","path","arguments","part","aa","ff","find","forEach","DIFFERENT","_ref2","selected","applyChangesToObject","applyChangesToFile","objects","select","substring","lastIndexOf","object","_ref3","_ref4","stateOwnerUser","setStateOwnerUser","stateOwnerGroup","setStateOwnerGroup","users","setUsers","groups","setGroups","setApplyToChildren","childrenCount","setChildrenCount","valueFileAccessControl","setValueFileAccessControl","differentOwner","setDifferentOwner","differentGroup","setDifferentGroup","differentObject","setDifferentObject","maskObject","setMaskObject","ids","setIds","disabledButton","setDisabledButton","setProgress","lang","_differentObject","_differentOwner","_differentGroup","_stateOwnerUser","_stateOwnerGroup","_valueFileAccessControl","_ids","count","list","key","flatList","idWithSlash","startsWith","includes","_objFolder$acl","_objFolder$acl2","_objFolder$acl3","_objFolder$acl4","_objFolder$acl5","_objFolder$acl6","_objFolder$acl7","_objFolder$acl8","_objFolder$acl9","objFolder","owner","ownerGroup","keyFolder","permissions","_users","_groups","_id","type","defaultAcl","common","defaultNewAcl","_objects$selected","_objects$selected$acl","_objects$selected2","_objects$selected2$ac","console","log","CustomModal","setTimeout","_objects$systemConfi","_objects$systemConfi$","defaultAclFile","_maskObject","i","itemAsObject","itemAsItem","_itemAsObject$acl","_itemAsObject$acl2","_itemAsObject$acl3","_itemAsObject$acl4","error","_itemAsItem$acl","_itemAsItem$acl2","_itemAsItem$acl3","_itemAsItem$acl4","newAcl","_object$acl","_object$acl2","_object$acl3","_obj$acl","_obj$acl2","_obj$acl3","SelectWithIcon","label","different","val","marginLeft","Switch","LinearProgress","overflowY","Files","Component","wordCache","translate","word","arg1","arg2","componentDidMount","getObjects","renderAclDialog","context","FileEditOfAccessControl","oldObj","getObject","fileObj","setObject","result","updateItemsAcl","chownFile","chmodFile","Array","isArray","modalEditOfAccess","render","ready","TabContainer","TabContent","FileBrowser","showViewTypeButton","showToolbar","allowUpload","allowView","allowDownload","allowCreateFolder","allowDelete","expertMode","modalEditOfAccessControl","FileViewer"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunksrc_rx=self.webpackChunksrc_rx||[]).push([[6361],{16668:(e,t,s)=>{s.d(t,{K:()=>a,S:()=>c});var o=s(89379),i=(s(28437),s(89303)),r=s(32075),n=s(16904),l=s(70579);function a(e){const t=e.icon;return(0,l.jsxs)("div",{style:e.styles.formContainer,children:[t?(0,l.jsx)(t,{style:e.styles.formIcon}):null,(0,l.jsx)(i.FormControl,{style:e.styles.formControl,variant:"standard",children:(0,l.jsx)(i.TextField,{variant:"standard",label:e.t(e.label),autoComplete:e.autoComplete,error:!!e.error,helperText:e.error||"",value:e.value,onChange:t=>e.onChange(t.target.value),disabled:e.disabled,type:e.type,slotProps:{inputLabel:{shrink:!0},input:{readOnly:!1,endAdornment:e.value?(0,l.jsx)(i.InputAdornment,{position:"end",children:(0,l.jsx)(i.IconButton,{size:"small",onClick:()=>e.onChange(""),children:(0,l.jsx)(r.Close,{})})}):null}}})})]})}function c(e){const t=e.icon;return(0,l.jsxs)("div",{style:{width:"100%"},children:[t?(0,l.jsx)(t,{style:e.previewStyle||e.styles.formIcon}):null,(0,l.jsx)(n.ColorPicker,{style:(0,o.A)((0,o.A)({},e.style||void 0),{},{width:t?"calc(100% - 45px)":"100%",display:"inline-block",verticalAlign:"top"}),label:e.t(e.label),onChange:e.onChange,value:e.value||""})]})}},46361:(e,t,s)=>{s.r(t),s.d(t,{default:()=>re});var o=s(28437),i=s(16904),r=s(89379),n=s(30335),l=s(67537),a=s(28791),c=s(94343),d=s(89303),p=s(32075),h=s(17774),u=s(42734),m=s(27686),g=s(70579);const x=e=>{const t=e.isDragging?0:1,s=i.Utils.getInvertedColor(e.user.common.color,e.themeType,!0),o={cursor:"grab",opacity:t,overflow:"hidden",color:s};return e.user.common.color&&(o.backgroundColor=e.user.common.color),(0,g.jsx)(d.Card,{style:o,sx:e.styles.userGroupCard2,children:(0,g.jsxs)("div",{style:e.styles.userCardContent,children:[(0,g.jsxs)("div",{style:e.styles.right,children:[(0,g.jsx)(d.Checkbox,{checked:e.user.common.enabled,style:{color:s},disabled:e.user.common.dontDelete,onChange:()=>{e.socket.extendObject(e.user._id,{common:{enabled:!e.user.common.enabled}}).then((()=>e.updateData()))}}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showUserEditDialog(e.user,!1),children:(0,g.jsx)(p.Edit,{style:{color:s}})}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showUserDeleteDialog(e.user),disabled:e.user.common.dontDelete,children:(0,g.jsx)(p.Delete,{style:e.user.common.dontDelete?null:{color:s}})})]}),(0,g.jsxs)(d.CardContent,{children:[(0,g.jsxs)(d.Typography,{gutterBottom:!0,component:"div",style:e.styles.userGroupTitle,children:[e.user.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:e.user.common.icon}):(0,g.jsx)(p.Person,{style:e.styles.icon}),(0,g.jsxs)("div",{children:[(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{style:e.styles.userGroupUserName,children:e.getText(e.user.common.name)}),(0,g.jsxs)("span",{style:e.styles.userGroupUserID,children:["[",e.user._id,"]"]})]}),(0,g.jsx)("span",{children:e.user.common.desc?(0,g.jsx)("div",{style:e.styles.description,children:e.getText(e.user.common.desc)}):null})]})]}),e.groups.find((t=>t.common.members&&t.common.members.includes(e.user._id)))?(0,g.jsxs)("div",{children:[e.t("In groups"),":"]}):null,(0,g.jsx)("div",{children:e.groups.map((t=>{var o,r;if(!t.common.members||!t.common.members.includes(e.user._id))return null;const n=t&&null!==(o=t.common)&&void 0!==o&&o.color?i.Utils.getInvertedColor(t.common.color,e.themeType,!0):s;return(0,g.jsxs)(d.Card,{variant:"outlined",sx:e.styles.userGroupMember,style:{color:n,borderColor:"".concat(n,"80"),background:(null===(r=t.common)||void 0===r?void 0:r.color)||"inherit"},children:[t.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:t.common.icon}):(0,g.jsx)(p.Group,{style:e.styles.icon}),e.getText(t.common.name),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.removeUserFromGroup(e.user._id,t._id),children:(0,g.jsx)(p.Clear,{style:{color:n}})})]},t._id)}))})]})]})})},y=e=>{const t=(0,o.useRef)(),[{isDragging:s},i,n]=(0,u.i)({type:"user",item:()=>{var s;return{userId:e.user._id,preview:(0,g.jsx)("div",{style:{width:null===(s=t.current)||void 0===s?void 0:s.offsetWidth},children:(0,g.jsx)(x,(0,r.A)({},e))})}},end:(t,s)=>{const o=s.getDropResult();t&&o&&e.addUserToGroup(t.userId,o.groupId)},collect:e=>({isDragging:e.isDragging(),handlerId:e.getHandlerId()})});return(0,o.useEffect)((()=>{n((0,m.n)(),{captureDraggingState:!0})}),[n]),(0,g.jsx)("div",{ref:i,children:(0,g.jsx)("div",{ref:t,children:(0,g.jsx)(x,(0,r.A)({isDragging:s},e))})})};var v=s(35964);const C=e=>{var t;const[{CanDrop:s,isOver:o},r]=(0,v.H)((()=>({accept:"user",drop:()=>({groupId:e.group._id}),canDrop:(t,s)=>function(e,t){return!t.group.common.members||!t.group.common.members.includes(e.getItem().userId)}(s,e),collect:e=>({isOver:e.isOver(),CanDrop:e.canDrop()})})),[e.group.common.members]);let n,l=.7;s&&o?(l=s?1:.125,n=e.styles.userGroupCardSecondary):s&&(l=s?.75:.25);const a=i.Utils.getInvertedColor(e.group.common.color,e.themeType,!0),c={opacity:l,overflow:"hidden",color:a};return e.group.common.color&&(c.backgroundColor=e.group.common.color),(0,g.jsxs)(d.Card,{style:c,ref:r,sx:i.Utils.getStyle(e.theme,e.styles.userGroupCard2,n),children:[(0,g.jsxs)("div",{style:e.styles.right,children:[(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showGroupEditDialog(e.group,!1),children:(0,g.jsx)(p.Edit,{style:{color:a}})}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showGroupDeleteDialog(e.group),disabled:e.group.common.dontDelete,children:(0,g.jsx)(p.Delete,{style:e.group.common.dontDelete?null:{color:a}})})]}),(0,g.jsxs)(d.CardContent,{children:[(0,g.jsxs)(d.Typography,{gutterBottom:!0,component:"div",style:e.styles.userGroupTitle,children:[e.group.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:e.group.common.icon}):(0,g.jsx)(p.Group,{style:e.styles.icon}),(0,g.jsxs)("div",{children:[(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{style:e.styles.userGroupUserName,children:e.getText(e.group.common.name)}),(0,g.jsxs)("span",{children:["[",e.group._id,"]"]})]}),e.group.common.desc?(0,g.jsx)("div",{style:e.styles.description,children:e.getText(e.group.common.desc)}):null]})]}),null!==(t=e.group.common.members)&&void 0!==t&&t.length?(0,g.jsxs)("div",{children:[e.t("Group members"),":"]}):null,(0,g.jsx)("div",{children:(e.group.common.members||[]).map(((t,s)=>{var o,r;const n=e.users.find((e=>e._id===t)),l=n&&null!==(o=n.common)&&void 0!==o&&o.color?i.Utils.getInvertedColor(n.common.color,e.themeType,!0):a;return n?(0,g.jsxs)(d.Card,{variant:"outlined",sx:e.styles.userGroupMember,style:{color:l,borderColor:"".concat(l,"40"),background:(null===(r=n.common)||void 0===r?void 0:r.color)||"inherit"},children:[n.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:n.common.icon}):(0,g.jsx)(p.Person,{style:e.styles.icon}),e.getText(n.common.name),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.removeUserFromGroup(t,e.group._id),children:(0,g.jsx)(p.Clear,{style:{color:l}})})]},s):null}))})]})]})};var j=s(16668);const b="./static/media/user1.24fa2b07586d952c415397f499b50c49.svg";const f=s.p+"static/media/user2.c6b253a8208981fea9c70e282073c8ea.svg";const D=s.p+"static/media/user3.e838132e7f2d6d44d829d934daf96dbe.svg";const w=s.p+"static/media/user4.f66996c087a4247316e162b5ec54ff11.svg";const _=s.p+"static/media/user5.842fb6e5ac2067df7c241eb9e42a7ff6.svg";const k=s.p+"static/media/user6.f1589fc9f97a1e42a2a3dd62d18aee5e.svg";const G=s.p+"static/media/user7.773f25cff1c54afbc35bbd79455aa271.svg";const T=s.p+"static/media/user8.43bbbecca8ba97c5da0521bdc072ae1f.svg";const U=s.p+"static/media/user9.2a94bc8f32545bf549e96311624574c4.svg";const I=s.p+"static/media/user10.7b8712e8bbad287a584a0a26ac4cf23c.svg";const E=s.p+"static/media/user11.dfec7022ca4b81de158d5adf60571632.svg";const S=[b,f,D,w,_,k,G,T,U,I,E,s.p+"static/media/user12.67a70d9093f2e3aafdeddb5dc4f110df.svg"],A={padding:"16px 24px"};class P extends o.Component{constructor(e){super(e),this.state={originalId:e.user._id,passwordRepeat:e.user.common.password}}componentDidMount(){if(this.props.isNew){const e=S[Math.round(Math.random()*(S.length-1))];e&&i.Utils.getSvg(e).then((e=>{const t=i.Utils.clone(this.props.user);t.common.icon=e,this.props.onChange(t)}))}}render(){const e=this.props.users.find((e=>e._id===this.props.user._id)),t=this.props.user._id!==this.state.originalId,s=e=>e.replace(i.Utils.FORBIDDEN_CHARS,"_").replace(/\s/g,"_").replace(/\./g,"_").replace(/,/g,"_").replace(/__/g,"_").replace(/__/g,"_").toLowerCase(),o=(e,t)=>{const s=e.split(".");return s[s.length-1]=t,s.join(".")},n=this.props.getText(this.props.user.common.desc),l=this.props.getText(this.props.user.common.name),a=h.A.checkPassword(this.props.user.common.password),c=h.A.checkPassword(this.props.user.common.password,this.state.passwordRepeat);let u="system.user."!==this.props.user._id&&!a&&!c;return(this.props.isNew&&e||e&&t)&&(u=!1),(0,g.jsxs)(d.Dialog,{fullWidth:this.props.innerWidth<500,open:!0,onClose:(e,t)=>{"backdropClick"!==t&&"escapeKeyDown"!==t&&this.props.onClose()},children:[(0,g.jsx)(d.DialogTitle,{style:(0,r.A)((0,r.A)({},this.props.styles.dialogTitle),{},{padding:12}),children:this.props.t("User parameters")}),(0,g.jsx)(d.DialogContent,{sx:{"&.MuiDialogContent-root":(0,r.A)((0,r.A)({},this.props.innerWidth<500?this.props.styles.narrowContent:void 0),A)},children:(0,g.jsxs)(d.Grid2,{container:!0,spacing:this.props.innerWidth<500?1:4,style:this.props.styles.dialog,children:[(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Name",t:this.props.t,value:l,onChange:e=>{const t=i.Utils.clone(this.props.user);this.props.user.common.dontDelete||s(this.props.getText(t.common.name))!==t._id.split(".").pop()||(t._id=o(t._id,s(e))),t.common.name=e,this.props.onChange(t)},autoComplete:"new-password",icon:p.TextFields,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"ID edit",t:this.props.t,disabled:this.props.user.common.dontDelete,value:this.props.user._id.split(".")[this.props.user._id.split(".").length-1],onChange:e=>{const t=i.Utils.clone(this.props.user);t._id=o(t._id,s(e)),this.props.onChange(t)},icon:p.LocalOffer,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"ID preview",t:this.props.t,disabled:!0,value:this.props.user._id,icon:p.Pageview,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Description",t:this.props.t,value:n,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.desc=e,this.props.onChange(t)},icon:p.Description,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Password",t:this.props.t,value:this.props.user.common.password,error:a?this.props.t(a):void 0,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.password=e,this.props.onChange(t)},type:"password",autoComplete:"new-password",icon:p.VpnKey,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Password repeat",t:this.props.t,value:this.state.passwordRepeat,error:c?this.props.t(c):void 0,onChange:e=>this.setState({passwordRepeat:e}),type:"password",autoComplete:"new-password",icon:p.VpnKey,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(i.IconPicker,{icons:S,label:"Icon",value:this.props.user.common.icon,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.icon=e,this.props.onChange(t)},previewStyle:this.props.styles.iconPreview,icon:p.Image})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.S,{label:"Color",t:this.props.t,value:this.props.user.common.color,previewStyle:this.props.styles.iconPreview,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.color=e,this.props.onChange(t)},icon:p.ColorLens,style:this.props.styles.colorPicker,styles:this.props.styles})})]})}),(0,g.jsxs)(d.DialogActions,{style:this.props.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",autoFocus:!0,onClick:()=>this.props.saveData(this.props.isNew?null:this.state.originalId),disabled:!u,startIcon:(0,g.jsx)(p.Check,{}),children:this.props.t("Save")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",onClick:this.props.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:this.props.t("Cancel")})]})]})}}const F=P;const O=s.p+"static/media/group1.e4d9dfc6de58d318b9f8659b7bdf92c8.svg";const W=s.p+"static/media/group2.005a7b0a473ee5c6b4afa0f5a4bd399e.svg";const z=s.p+"static/media/group3.ee5e28d28f498bd44d945842ecc32110.svg";const N=s.p+"static/media/group4.d6b392ffee69d8a8efee376434f5cfba.svg";const B=s.p+"static/media/group5.68fdb9e99d289e9c014cc8ee4e9ae4bb.svg";const R=s.p+"static/media/group6.c7f286d197fb918b0d2b34944ec9ef6a.svg";const L=s.p+"static/media/group7.066f78d64741ca336b2137f9caf72133.svg";const M=s.p+"static/media/group8.25d573e553e37968d4e6babd06b36746.svg";const K=s.p+"static/media/group9.b7aae7b7185e989f91b749ff1758d49d.svg";const H=[O,W,z,N,B,R,L,M,K,s.p+"static/media/group10.250fd49c0c4d348815c639620bef3467.svg"];function q(e){const t=(e,t)=>Object.values(e).map(((s,o)=>{const i=Object.keys(e)[o];return t(s,i)}));let s=e.group.common.acl;return s=s||{},s.object=s.object||{read:!0,list:!0,write:!0,delete:!1,create:void 0},s.object=(0,r.A)({read:!0,list:!0,write:!0,delete:!1},s.object),s.state=s.state||{read:!0,list:!0,write:!0,delete:!1,create:void 0},s.state=(0,r.A)({read:!0,list:!0,write:!0,delete:!1},s.state),s.users=s.users||{write:!1,delete:!1,create:!1,list:void 0,read:void 0},s.users=(0,r.A)({write:!1,delete:!1,create:!1},s.users),s.other=s.other||{http:!1,execute:!1,sendto:!0},s.other=(0,r.A)({http:!1,execute:!1,sendto:!0},s.other),s.file=s.file||{read:!0,list:!0,write:!1,delete:!1,create:!1},s.file=(0,r.A)({read:!0,list:!0,write:!1,delete:!1,create:!1},s.file),(0,g.jsx)(d.Grid2,{container:!0,spacing:e.innerWidth<500?1:4,style:e.styles.dialog,children:t(e.group.common.acl||{},((s,o)=>(0,g.jsxs)(d.Grid2,{size:{xs:12,md:12},children:[(0,g.jsx)(d.Box,{component:"h2",sx:e.styles.permHeaders,children:e.t("group_acl_".concat(o))}),t(s,((t,s)=>(0,g.jsx)(d.FormControlLabel,{control:(0,g.jsx)(d.Checkbox,{disabled:"system.group.administrator"===e.group._id,checked:t,onChange:t=>{const r=i.Utils.clone(e.group);r.common.acl[o][s]=t.target.checked,e.onChange(r)}}),label:e.t("group_acl_".concat(s)),labelPlacement:"top"},s)))]},o)))},"PermissionsTab")}const Y={padding:"16px 24px"};class V extends o.Component{constructor(e){super(e),this.state={tab:0,originalId:e.group._id}}componentDidMount(){if(this.props.isNew){const e=H[Math.round(Math.random()*(H.length-1))];e&&i.Utils.getSvg(e).then((e=>{const t=i.Utils.clone(this.props.group);t.common.icon=e,this.props.onChange(t)}))}}render(){const e=this.props.groups.find((e=>e._id===this.props.group._id)),t=this.props.group._id!==this.state.originalId;let s="system.group."!==this.props.group._id&&this.props.group.common.password===this.props.group.common.passwordRepeat;const o=e=>e.replace(i.Utils.FORBIDDEN_CHARS,"_").replace(/\s/g,"_").replace(/\./g,"_").toLowerCase(),n=(e,t)=>{const s=e.split(".");return s[s.length-1]=t,s.join(".")};this.props.isNew?e&&(s=!1):e&&t&&(s=!1);const l=this.props.getText(this.props.group.common.desc),a=this.props.getText(this.props.group.common.name),c=[(0,g.jsxs)(d.Grid2,{container:!0,spacing:this.props.innerWidth<500?1:4,style:this.props.styles.dialog,children:[(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Name",t:this.props.t,value:a,onChange:e=>{const t=i.Utils.clone(this.props.group);this.props.group.common.dontDelete||o(this.props.getText(t.common.name))!==t._id.split(".").pop()||(t._id=n(t._id,o(e))),t.common.name=e,this.props.onChange(t)},autoComplete:"off",icon:p.TextFields,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"ID edit",t:this.props.t,disabled:this.props.group.common.dontDelete,value:this.props.group._id.split(".")[this.props.group._id.split(".").length-1],onChange:e=>{const t=i.Utils.clone(this.props.group);t._id=n(t._id,o(e)),this.props.onChange(t)},icon:p.LocalOffer,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"ID preview",t:this.props.t,disabled:!0,value:this.props.group._id,icon:p.Pageview,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.K,{label:"Description",t:this.props.t,value:l,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.desc=e,this.props.onChange(t)},icon:p.Description,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(i.IconPicker,{label:"Icon",icons:H,value:this.props.group.common.icon,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.icon=e,this.props.onChange(t)},previewStyle:this.props.styles.iconPreview,icon:p.Image})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(j.S,{label:"Color",t:this.props.t,value:this.props.group.common.color,previewStyle:this.props.styles.iconPreview,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.color=e,this.props.onChange(t)},icon:p.ColorLens,style:this.props.styles.colorPicker,styles:this.props.styles})})]}),q(this.props)][this.state.tab];return(0,g.jsxs)(d.Dialog,{open:!0,onClose:(e,t)=>{"backdropClick"!==t&&"escapeKeyDown"!==t&&this.props.onClose()},fullWidth:this.props.innerWidth<500,children:[(0,g.jsx)(d.DialogTitle,{style:this.props.styles.dialogTitle,children:(0,g.jsxs)(d.Tabs,{variant:"fullWidth",value:this.state.tab,onChange:(e,t)=>this.setState({tab:t}),children:[(0,g.jsx)(d.Tab,{label:this.props.t("Main"),value:0}),(0,g.jsx)(d.Tab,{label:this.props.t("Permissions"),value:1})]})}),(0,g.jsx)(d.DialogContent,{sx:{"&.MuiDialogContent-root":(0,r.A)((0,r.A)({},this.props.innerWidth<500?this.props.styles.narrowContent:void 0),Y)},children:c}),(0,g.jsxs)(d.DialogActions,{style:this.props.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",autoFocus:!0,onClick:()=>this.props.saveData(this.props.isNew?null:this.state.originalId),disabled:!s,startIcon:(0,g.jsx)(p.Check,{}),children:this.props.t("Save")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",onClick:this.props.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:this.props.t("Cancel")})]})]})}}const Q=V;function X(e){return(0,g.jsxs)(d.Dialog,{open:!0,onClose:e.onClose,children:[(0,g.jsx)(d.DialogTitle,{children:e.t("Please confirm")}),(0,g.jsx)(d.DialogContent,{children:(0,g.jsx)(d.DialogContentText,{children:e.t("Do you want to delete user %s?",e.getText(e.user.common.name))})}),(0,g.jsxs)(d.DialogActions,{children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",onClick:()=>e.deleteUser(e.user._id),startIcon:(0,g.jsx)(p.Delete,{}),children:e.t("Delete")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",autoFocus:!0,onClick:e.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:e.t("Cancel")})]})]})}function J(e){return(0,g.jsxs)(d.Dialog,{open:!0,onClose:e.onClose,children:[(0,g.jsx)(d.DialogTitle,{children:e.t("Please confirm")}),(0,g.jsx)(d.DialogContent,{children:(0,g.jsx)(d.DialogContentText,{children:e.t("Do you want to delete group %s?",e.getText(e.group.common.name))})}),(0,g.jsxs)(d.DialogActions,{style:e.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",onClick:()=>e.deleteGroup(e.group._id),startIcon:(0,g.jsx)(p.Delete,{}),children:e.t("Delete")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",autoFocus:!0,onClick:e.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:e.t("Cancel")})]})]})}const Z="***********",$={mainGridCont:{height:"calc(100% - 55px)",overflowY:"auto"},childGridCont:{display:"flex",flexDirection:"column"},childGridContWide:{height:"100%"},canDrop:e=>({backgroundColor:e.palette.background.default}),headContainer:{margin:10},blocksContainer:{overflowY:"auto",overflowX:"hidden"},userGroupCard2:e=>({border:"1px solid #FFF",borderColor:e.palette.divider,m:"10px",minHeight:150,backgroundColor:e.palette.background.default,color:e.palette.text.primary,transition:"all 200ms ease-out",opacity:1,overflow:"hidden","&:hover":{overflowY:"auto",boxShadow:"0 1px 1px 0 rgba(0, 0, 0, .4),0 6px 6px 0 rgba(0, 0, 0, .2)"}}),userGroupCardSecondary:e=>({color:e.palette.text.primary,backgroundColor:e.palette.success.light}),permHeaders:e=>({backgroundColor:"dark"===e.palette.mode?e.palette.background.default:e.palette.primary.main,p:"4px",borderRadius:"2px",color:"#EEE"}),userCardContent:{height:"100%",opacity:1},userGroupTitle:{display:"inline-flex",alignItems:"center"},userGroupUserName:{fontWeight:900,padding:5},userGroupUserID:{opacity:.7,padding:5},description:{fontSize:10,fontStyle:"italic",marginLeft:5,opacity:.7},userGroupMember:e=>({display:"inline-flex",m:"4px",p:"4px",backgroundColor:"#00000010",border:"1px solid #FFF",borderColor:e.palette.text.primary,color:e.palette.text.primary,alignItems:"center"}),icon:{height:32,width:32,marginRight:5,backgroundSize:"cover",backgroundPosition:"center"},right:{float:"right"},left:{float:"left",marginRight:10},dialog:{},flex:{display:"flex"},formControl:{display:"flex",padding:24,flexGrow:1e3},formContainer:{display:"flex",justifyContent:"center",alignItems:"center"},formIcon:{margin:10,opacity:.6},descriptionPanel:e=>({width:"100%",backgroundColor:"transparent",mb:"20px",mt:"20px",ml:"20px",opacity:.75,border:"none",display:"flex",alignItems:"center","& a":{pl:"3px",color:"dark"===e.palette.mode?"#EEE":"#111"}}),dialogTitle:{borderBottom:"1px solid #00000020",padding:0,width:"100%"},dialogActions:{borderTop:"1px solid #00000020",width:"100%"},dialogPaper:{overflowY:"initial",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",width:"calc(100% - 100px)",height:"calc(100% - 100px)",maxWidth:800,maxHeight:"100%"},dialogPaperMini:{maxHeight:300},colorPicker:{},iconPreview:{height:40,width:40},mainDescription:{fontSize:"200%"},deleteDialog:{padding:20},narrowContent:{padding:"8px 8px 8px 8px"}},ee=()=>{const e=(0,c.gx)();return e.display?(0,g.jsx)("div",{style:e.style,children:e.item.preview}):null},te={_id:"system.user.",type:"user",common:{name:"",password:"",enabled:!0,color:"",desc:""},native:{},enums:{}},se={_id:void 0,native:{},type:"group",common:{name:"",desc:"",members:[],dontDelete:void 0,acl:{object:{list:!1,read:!1,write:!1,delete:!1,create:void 0},state:{list:!1,read:!1,write:!1,create:!1,delete:!1},users:{list:!1,read:!1,write:!1,create:!1,delete:!1},other:{execute:!1,http:!1,sendto:!1},file:{list:!1,read:!1,write:!1,create:!1,delete:!1}},icon:"",color:""}};class oe extends o.Component{constructor(e){super(e),this.getText=e=>e&&("object"===typeof e?e[this.props.lang]||e.en||"":e||"")||"",this.showUserEditDialog=(e,t)=>{(e=i.Utils.clone(e)).common.password=e.common.password?Z:"",this.setState({userEditDialog:e,userEditDialogNew:t})},this.showGroupEditDialog=(e,t)=>{e=i.Utils.clone(e),this.setState({groupEditDialog:e,groupEditDialogNew:t})},this.updateData=()=>{let e;return this.props.socket.getForeignObjects("system.user.*","user").then((t=>(e=Object.values(t).sort(((e,t)=>e._id>t._id?1:-1)),e.forEach((e=>{e.common&&e.common.description&&(e.common.desc||(e.common.desc=e.common.description),delete e.common.description)})),this.props.socket.getForeignObjects("system.group.*","group")))).then((t=>{const s=Object.values(t).sort(((e,t)=>e._id>t._id?1:-1));s.forEach((e=>{e.common&&e.common.description&&(e.common.desc||(e.common.desc=e.common.description),delete e.common.description)})),this.setState({groups:s,users:e})}))},this.changeUserFormData=e=>this.setState({userEditDialog:e}),this.changeGroupFormData=e=>this.setState({groupEditDialog:e}),this.saveUser=async e=>{const t=i.Utils.clone(this.state.userEditDialog),s=this.state.users.find((e=>e._id===t._id)),o=t.common.password&&t.common.password!==Z?t.common.password:"";if(t.common.password=s?s.common.password:"",await this.props.socket.setObject(t._id,t),"object"===typeof this.state.userEditDialog&&e&&e!==this.state.userEditDialog._id)try{await this.props.socket.delObject(e);for(let s=0;s<this.state.groups.length;s++){const o=this.state.groups[s];if(o.common.members.includes(e)){const s=i.Utils.clone(o);s.common.members[s.common.members.indexOf(e)]=t._id,await this.props.socket.setObject(s._id,s)}}}catch(r){window.alert("Cannot delete user: ".concat(r))}if(o)try{await this.props.socket.changePassword(t._id,o)}catch(r){window.alert("Cannot change password: ".concat(r))}this.setState({userEditDialog:!1},(()=>this.updateData()))},this.saveGroup=async e=>{if("object"===typeof this.state.groupEditDialog){if(await this.props.socket.setObject(this.state.groupEditDialog._id,this.state.groupEditDialog),e&&e!==this.state.groupEditDialog._id)try{await this.props.socket.delObject(e)}catch(t){window.alert("Cannot delete user: ".concat(t))}this.setState({groupEditDialog:!1},(()=>this.updateData()))}},this.showUserDeleteDialog=e=>this.setState({userDeleteDialog:e}),this.showGroupDeleteDialog=e=>this.setState({groupDeleteDialog:e}),this.deleteUser=e=>{this.props.socket.delObject(e).then((()=>Promise.all(this.state.groups.map((t=>{if(t.common.members.includes(e)){const s=i.Utils.clone(t);return s.common.members.splice(s.common.members.indexOf(e),1),this.props.socket.setObject(s._id,s)}return Promise.resolve(null)}))))).catch((e=>window.alert("Cannot delete user: ".concat(e)))).then((()=>{this.setState({userDeleteDialog:!1},(()=>this.updateData()))}))},this.deleteGroup=e=>this.props.socket.delObject(e).then((()=>this.setState({groupDeleteDialog:!1},(()=>this.updateData())))).catch((e=>window.alert("Cannot delete user: ".concat(e)))),this.addUserToGroup=(e,t)=>{const s=this.state.groups.find((e=>e._id===t)),o=s.common.members;o.includes(e)||(o.push(e),this.props.socket.setObject(s._id,s).then((()=>this.updateData())).catch((e=>window.alert("Cannot delete user: ".concat(e)))))},this.removeUserFromGroup=(e,t)=>{const s=this.state.groups.find((e=>e._id===t)),o=s.common.members;o.includes(e)&&(o.splice(o.indexOf(e),1),this.props.socket.setObject(s._id,s).then((()=>this.updateData())))},this.state={users:null,groups:null,userEditDialog:!1,userEditDialogNew:null,groupEditDialog:!1,groupEditDialogNew:null,userDeleteDialog:!1,groupDeleteDialog:!1,innerWidth:0}}componentDidMount(){this.setState({innerWidth:window.innerWidth},(()=>this.updateData()))}componentDidUpdate(){window.innerWidth!==this.state.innerWidth&&setTimeout((()=>this.setState({innerWidth:window.innerWidth})),100)}static _isUniqueName(e,t,s){return!e.find((e=>e._id==="system.user.".concat(t.toLowerCase(),"_").concat(s)||e.common.name==="".concat(t," ").concat(s)))}static findNewUniqueName(e,t,s){let o=1;for(;!oe._isUniqueName(t,s,o);)o++;return{_id:"system.".concat(e?"group":"user",".").concat(s.toLowerCase(),"_").concat(o),name:"".concat(s," ").concat(o)}}render(){return this.state.users&&this.state.groups?(0,g.jsxs)(n.Q,{backend:h.A.isTouchDevice()?a.qi:l.t2,children:[(0,g.jsx)(ee,{}),(0,g.jsx)(d.Box,{component:"div",sx:$.descriptionPanel,children:this.props.t("You can drag users to groups.")}),(0,g.jsxs)(d.Grid2,{container:!0,spacing:2,style:$.mainGridCont,children:[(0,g.jsxs)(d.Grid2,{size:{xs:12,md:6},style:(0,r.A)((0,r.A)({},$.childGridCont),this.state.innerWidth>600?$.childGridContWide:void 0),children:[(0,g.jsxs)("div",{style:$.headContainer,children:[(0,g.jsx)(d.Fab,{size:"small",style:$.right,onClick:()=>{const{_id:e,name:t}=oe.findNewUniqueName(!0,this.state.groups,this.props.t("Group")),s=i.Utils.clone(se);s._id=e,s.common.name=t,this.showGroupEditDialog(s,!0)},children:(0,g.jsx)(p.GroupAdd,{})}),(0,g.jsx)(d.Typography,{gutterBottom:!0,variant:"h4",component:"h4",children:this.props.t("Groups")})]}),(0,g.jsx)("div",{style:$.blocksContainer,children:this.state.groups.sort(((e,t)=>{var s,o;const i=(this.getText(null===e||void 0===e||null===(s=e.common)||void 0===s?void 0:s.name)||e._id).toLowerCase(),r=(this.getText(null===t||void 0===t||null===(o=t.common)||void 0===o?void 0:o.name)||t._id).toLowerCase();return i>r?1:i<r?-1:0})).map((e=>(0,g.jsx)(C,(0,r.A)({themeType:this.props.themeType,group:e,users:this.state.users,showGroupEditDialog:this.showGroupEditDialog,showGroupDeleteDialog:this.showGroupDeleteDialog,removeUserFromGroup:this.removeUserFromGroup,getText:this.getText,styles:$},this.props),e._id)))})]}),(0,g.jsxs)(d.Grid2,{size:{xs:12,md:6},style:(0,r.A)((0,r.A)({},$.childGridCont),this.state.innerWidth>600?$.childGridContWide:void 0),children:[(0,g.jsxs)("div",{style:$.headContainer,children:[(0,g.jsx)(d.Fab,{size:"small",style:$.right,onClick:()=>{const{_id:e,name:t}=oe.findNewUniqueName(!1,this.state.users,this.props.t("User")),s=i.Utils.clone(te);s._id=e,s.common.name=t,this.showUserEditDialog(s,!0)},children:(0,g.jsx)(p.PersonAdd,{})}),(0,g.jsx)(d.Typography,{gutterBottom:!0,variant:"h4",component:"h4",children:this.props.t("Users")})]}),(0,g.jsx)("div",{style:$.blocksContainer,children:this.state.users.sort(((e,t)=>{var s,o;const i=(this.getText(null===e||void 0===e||null===(s=e.common)||void 0===s?void 0:s.name)||e._id).toLowerCase(),r=(this.getText(null===t||void 0===t||null===(o=t.common)||void 0===o?void 0:o.name)||t._id).toLowerCase();return i>r?1:i<r?-1:0})).map((e=>(0,g.jsx)(y,(0,r.A)({themeType:this.props.themeType,user:e,groups:this.state.groups,showUserEditDialog:this.showUserEditDialog,showUserDeleteDialog:this.showUserDeleteDialog,updateData:this.updateData,addUserToGroup:this.addUserToGroup,removeUserFromGroup:this.removeUserFromGroup,getText:this.getText,styles:$},this.props),e._id)))})]})]}),this.state.userEditDialog?(0,g.jsx)(F,{onClose:()=>this.setState({userEditDialog:!1}),users:this.state.users,user:this.state.userEditDialog,isNew:this.state.userEditDialogNew,t:this.props.t,getText:this.getText,styles:$,onChange:this.changeUserFormData,saveData:this.saveUser,innerWidth:this.state.innerWidth}):null,this.state.groupEditDialog?(0,g.jsx)(Q,{onClose:()=>this.setState({groupEditDialog:!1}),groups:this.state.groups,group:this.state.groupEditDialog,isNew:this.state.groupEditDialogNew,t:this.props.t,getText:this.getText,styles:$,onChange:this.changeGroupFormData,innerWidth:this.state.innerWidth,saveData:this.saveGroup}):null,this.state.userDeleteDialog?(0,g.jsx)(X,{getText:this.getText,onClose:()=>this.setState({userDeleteDialog:!1}),user:this.state.userDeleteDialog,t:this.props.t,deleteUser:this.deleteUser}):null,this.state.groupDeleteDialog?(0,g.jsx)(J,{getText:this.getText,onClose:()=>this.setState({groupDeleteDialog:!1}),group:this.state.groupDeleteDialog,t:this.props.t,styles:$,deleteGroup:this.deleteGroup}):null]}):(0,g.jsx)(d.LinearProgress,{})}}const ie=oe;function re(e){return(0,g.jsx)(i.TabContainer,{children:(0,g.jsx)(i.TabContent,{style:{display:"flex",flexDirection:"column",overflow:"auto"},children:(0,g.jsx)(ie,{t:e.t,lang:e.lang,socket:e.socket,ready:e.ready,expertMode:e.expertMode,themeType:e.themeType,theme:e.theme})})})}},94343:(e,t,s)=>{s.d(t,{gx:()=>a});var o=s(28437),i=s(35661);var r=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),n=(e,t)=>{let s=e.getClientOffset();if(null===s)return null;if(!t.current||!t.current.getBoundingClientRect)return r(s,(e=>{let t=e.getInitialClientOffset(),s=e.getInitialSourceClientOffset();return null===t||null===s?{x:0,y:0}:r(t,s)})(e));let o=t.current.getBoundingClientRect(),i={x:o.width/2,y:o.height/2};return r(s,i)},l=e=>{let t="translate(".concat(e.x.toFixed(1),"px, ").concat(e.y.toFixed(1),"px)");return{pointerEvents:"none",position:"fixed",top:0,left:0,transform:t,WebkitTransform:t}},a=()=>{let e=(0,o.useRef)(null),t=(0,i.V)((t=>({currentOffset:n(t,e),isDragging:t.isDragging(),itemType:t.getItemType(),item:t.getItem(),monitor:t})));return t.isDragging&&null!==t.currentOffset?{display:!0,itemType:t.itemType,item:t.item,style:l(t.currentOffset),monitor:t.monitor,ref:e}:{display:!1}};(0,o.createContext)(void 0)}}]);
|
|
2
|
-
//# sourceMappingURL=6361.
|
|
1
|
+
"use strict";(self.webpackChunksrc_rx=self.webpackChunksrc_rx||[]).push([[6361],{16668:(e,t,s)=>{s.d(t,{K:()=>a,S:()=>c});var o=s(89379),i=(s(28437),s(89303)),r=s(32075),n=s(16904),l=s(70579);function a(e){const t=e.icon;return(0,l.jsxs)("div",{style:e.styles.formContainer,children:[t?(0,l.jsx)(t,{style:e.styles.formIcon}):null,(0,l.jsx)(i.FormControl,{style:e.styles.formControl,variant:"standard",children:(0,l.jsx)(i.TextField,{variant:"standard",label:e.t(e.label),autoComplete:e.autoComplete,error:!!e.error,helperText:e.error||"",value:e.value,onChange:t=>e.onChange(t.target.value),disabled:e.disabled,type:e.type,slotProps:{inputLabel:{shrink:!0},input:{readOnly:!1,endAdornment:e.value?(0,l.jsx)(i.InputAdornment,{position:"end",children:(0,l.jsx)(i.IconButton,{size:"small",onClick:()=>e.onChange(""),children:(0,l.jsx)(r.Close,{})})}):null}}})})]})}function c(e){const t=e.icon;return(0,l.jsxs)("div",{style:{width:"100%"},children:[t?(0,l.jsx)(t,{style:e.previewStyle||e.styles.formIcon}):null,(0,l.jsx)(n.ColorPicker,{style:(0,o.A)((0,o.A)({},e.style||void 0),{},{width:t?"calc(100% - 45px)":"100%",display:"inline-block",verticalAlign:"top"}),label:e.t(e.label),onChange:e.onChange,value:e.value||""})]})}},46361:(e,t,s)=>{s.r(t),s.d(t,{default:()=>re});var o=s(28437),i=s(16904),r=s(89379),n=s(30335),l=s(67537),a=s(28791),c=s(94343),d=s(89303),p=s(32075),h=s(17774),u=s(42734),m=s(27686),g=s(70579);const x=e=>{const t=e.isDragging?0:1,s=i.Utils.getInvertedColor(e.user.common.color,e.themeType,!0),o={cursor:"grab",opacity:t,overflow:"hidden",color:s};return e.user.common.color&&(o.backgroundColor=e.user.common.color),(0,g.jsx)(d.Card,{style:o,sx:e.styles.userGroupCard2,children:(0,g.jsxs)("div",{style:e.styles.userCardContent,children:[(0,g.jsxs)("div",{style:e.styles.right,children:[(0,g.jsx)(d.Checkbox,{checked:e.user.common.enabled,style:{color:s},disabled:e.user.common.dontDelete,onChange:()=>{e.socket.extendObject(e.user._id,{common:{enabled:!e.user.common.enabled}}).then((()=>e.updateData()))}}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showUserEditDialog(e.user,!1),children:(0,g.jsx)(p.Edit,{style:{color:s}})}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showUserDeleteDialog(e.user),disabled:e.user.common.dontDelete,children:(0,g.jsx)(p.Delete,{style:e.user.common.dontDelete?null:{color:s}})})]}),(0,g.jsxs)(d.CardContent,{children:[(0,g.jsxs)(d.Typography,{gutterBottom:!0,component:"div",style:e.styles.userGroupTitle,children:[e.user.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:e.user.common.icon}):(0,g.jsx)(p.Person,{style:e.styles.icon}),(0,g.jsxs)("div",{children:[(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{style:e.styles.userGroupUserName,children:e.getText(e.user.common.name)}),(0,g.jsxs)("span",{style:e.styles.userGroupUserID,children:["[",e.user._id,"]"]})]}),(0,g.jsx)("span",{children:e.user.common.desc?(0,g.jsx)("div",{style:e.styles.description,children:e.getText(e.user.common.desc)}):null})]})]}),e.groups.find((t=>t.common.members&&t.common.members.includes(e.user._id)))?(0,g.jsxs)("div",{children:[e.t("In groups"),":"]}):null,(0,g.jsx)("div",{children:e.groups.map((t=>{var o,r;if(!t.common.members||!t.common.members.includes(e.user._id))return null;const n=t&&null!==(o=t.common)&&void 0!==o&&o.color?i.Utils.getInvertedColor(t.common.color,e.themeType,!0):s;return(0,g.jsxs)(d.Card,{variant:"outlined",sx:e.styles.userGroupMember,style:{color:n,borderColor:"".concat(n,"80"),background:(null===(r=t.common)||void 0===r?void 0:r.color)||"inherit"},children:[t.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:t.common.icon}):(0,g.jsx)(p.Group,{style:e.styles.icon}),e.getText(t.common.name),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.removeUserFromGroup(e.user._id,t._id),children:(0,g.jsx)(p.Clear,{style:{color:n}})})]},t._id)}))})]})]})})},y=e=>{const t=(0,o.useRef)(),[{isDragging:s},i,n]=(0,u.i)({type:"user",item:()=>{var s;return{userId:e.user._id,preview:(0,g.jsx)("div",{style:{width:null===(s=t.current)||void 0===s?void 0:s.offsetWidth},children:(0,g.jsx)(x,(0,r.A)({},e))})}},end:(t,s)=>{const o=s.getDropResult();t&&o&&e.addUserToGroup(t.userId,o.groupId)},collect:e=>({isDragging:e.isDragging(),handlerId:e.getHandlerId()})});return(0,o.useEffect)((()=>{n((0,m.n)(),{captureDraggingState:!0})}),[n]),(0,g.jsx)("div",{ref:i,children:(0,g.jsx)("div",{ref:t,children:(0,g.jsx)(x,(0,r.A)({isDragging:s},e))})})};var v=s(35964);const C=e=>{var t;const[{CanDrop:s,isOver:o},r]=(0,v.H)((()=>({accept:"user",drop:()=>({groupId:e.group._id}),canDrop:(t,s)=>function(e,t){return!t.group.common.members||!t.group.common.members.includes(e.getItem().userId)}(s,e),collect:e=>({isOver:e.isOver(),CanDrop:e.canDrop()})})),[e.group.common.members]);let n,l=.7;s&&o?(l=s?1:.125,n=e.styles.userGroupCardSecondary):s&&(l=s?.75:.25);const a=i.Utils.getInvertedColor(e.group.common.color,e.themeType,!0),c={opacity:l,overflow:"hidden",color:a};return e.group.common.color&&(c.backgroundColor=e.group.common.color),(0,g.jsxs)(d.Card,{style:c,ref:r,sx:i.Utils.getStyle(e.theme,e.styles.userGroupCard2,n),children:[(0,g.jsxs)("div",{style:e.styles.right,children:[(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showGroupEditDialog(e.group,!1),children:(0,g.jsx)(p.Edit,{style:{color:a}})}),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.showGroupDeleteDialog(e.group),disabled:e.group.common.dontDelete,children:(0,g.jsx)(p.Delete,{style:e.group.common.dontDelete?null:{color:a}})})]}),(0,g.jsxs)(d.CardContent,{children:[(0,g.jsxs)(d.Typography,{gutterBottom:!0,component:"div",style:e.styles.userGroupTitle,children:[e.group.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:e.group.common.icon}):(0,g.jsx)(p.Group,{style:e.styles.icon}),(0,g.jsxs)("div",{children:[(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{style:e.styles.userGroupUserName,children:e.getText(e.group.common.name)}),(0,g.jsxs)("span",{children:["[",e.group._id,"]"]})]}),e.group.common.desc?(0,g.jsx)("div",{style:e.styles.description,children:e.getText(e.group.common.desc)}):null]})]}),null!==(t=e.group.common.members)&&void 0!==t&&t.length?(0,g.jsxs)("div",{children:[e.t("Group members"),":"]}):null,(0,g.jsx)("div",{children:(e.group.common.members||[]).map(((t,s)=>{var o,r;const n=e.users.find((e=>e._id===t)),l=n&&null!==(o=n.common)&&void 0!==o&&o.color?i.Utils.getInvertedColor(n.common.color,e.themeType,!0):a;return n?(0,g.jsxs)(d.Card,{variant:"outlined",sx:e.styles.userGroupMember,style:{color:l,borderColor:"".concat(l,"40"),background:(null===(r=n.common)||void 0===r?void 0:r.color)||"inherit"},children:[n.common.icon?(0,g.jsx)(i.Icon,{style:e.styles.icon,src:n.common.icon}):(0,g.jsx)(p.Person,{style:e.styles.icon}),e.getText(n.common.name),(0,g.jsx)(d.IconButton,{size:"small",onClick:()=>e.removeUserFromGroup(t,e.group._id),children:(0,g.jsx)(p.Clear,{style:{color:l}})})]},s):null}))})]})]})};var b=s(16668);const j="./static/media/user1.24fa2b07586d952c415397f499b50c49.svg";const f=s.p+"static/media/user2.c6b253a8208981fea9c70e282073c8ea.svg";const D=s.p+"static/media/user3.e838132e7f2d6d44d829d934daf96dbe.svg";const w=s.p+"static/media/user4.f66996c087a4247316e162b5ec54ff11.svg";const _=s.p+"static/media/user5.842fb6e5ac2067df7c241eb9e42a7ff6.svg";const k=s.p+"static/media/user6.f1589fc9f97a1e42a2a3dd62d18aee5e.svg";const G=s.p+"static/media/user7.773f25cff1c54afbc35bbd79455aa271.svg";const T=s.p+"static/media/user8.43bbbecca8ba97c5da0521bdc072ae1f.svg";const U=s.p+"static/media/user9.2a94bc8f32545bf549e96311624574c4.svg";const I=s.p+"static/media/user10.7b8712e8bbad287a584a0a26ac4cf23c.svg";const E=s.p+"static/media/user11.dfec7022ca4b81de158d5adf60571632.svg";const S=[j,f,D,w,_,k,G,T,U,I,E,s.p+"static/media/user12.67a70d9093f2e3aafdeddb5dc4f110df.svg"],A={padding:"16px 24px"};class P extends o.Component{constructor(e){super(e),this.state={originalId:e.user._id,passwordRepeat:e.user.common.password}}componentDidMount(){if(this.props.isNew){const e=S[Math.round(Math.random()*(S.length-1))];e&&i.Utils.getSvg(e).then((e=>{const t=i.Utils.clone(this.props.user);t.common.icon=e,this.props.onChange(t)}))}}render(){const e=this.props.users.find((e=>e._id===this.props.user._id)),t=this.props.user._id!==this.state.originalId,s=e=>e.replace(i.Utils.FORBIDDEN_CHARS,"_").replace(/\s/g,"_").replace(/\./g,"_").replace(/,/g,"_").replace(/__/g,"_").replace(/__/g,"_").toLowerCase(),o=(e,t)=>{const s=e.split(".");return s[s.length-1]=t,s.join(".")},n=this.props.getText(this.props.user.common.desc),l=this.props.getText(this.props.user.common.name),a=h.A.checkPassword(this.props.user.common.password),c=h.A.checkPassword(this.props.user.common.password,this.state.passwordRepeat);let u="system.user."!==this.props.user._id&&!a&&!c;return(this.props.isNew&&e||e&&t)&&(u=!1),(0,g.jsxs)(d.Dialog,{fullWidth:this.props.innerWidth<500,open:!0,onClose:(e,t)=>{"backdropClick"!==t&&"escapeKeyDown"!==t&&this.props.onClose()},children:[(0,g.jsx)(d.DialogTitle,{style:(0,r.A)((0,r.A)({},this.props.styles.dialogTitle),{},{padding:12}),children:this.props.t("User parameters")}),(0,g.jsx)(d.DialogContent,{sx:{"&.MuiDialogContent-root":(0,r.A)((0,r.A)({},this.props.innerWidth<500?this.props.styles.narrowContent:void 0),A)},children:(0,g.jsxs)(d.Grid2,{container:!0,spacing:this.props.innerWidth<500?1:4,style:this.props.styles.dialog,children:[(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Name",t:this.props.t,value:l,onChange:e=>{const t=i.Utils.clone(this.props.user);this.props.user.common.dontDelete||s(this.props.getText(t.common.name))!==t._id.split(".").pop()||(t._id=o(t._id,s(e))),t.common.name=e,this.props.onChange(t)},autoComplete:"new-password",icon:p.TextFields,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"ID edit",t:this.props.t,disabled:this.props.user.common.dontDelete,value:this.props.user._id.split(".")[this.props.user._id.split(".").length-1],onChange:e=>{const t=i.Utils.clone(this.props.user);t._id=o(t._id,s(e)),this.props.onChange(t)},icon:p.LocalOffer,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"ID preview",t:this.props.t,disabled:!0,value:this.props.user._id,icon:p.Pageview,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Description",t:this.props.t,value:n,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.desc=e,this.props.onChange(t)},icon:p.Description,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Password",t:this.props.t,value:this.props.user.common.password,error:a?this.props.t(a):void 0,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.password=e,this.props.onChange(t)},type:"password",autoComplete:"new-password",icon:p.VpnKey,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Password repeat",t:this.props.t,value:this.state.passwordRepeat,error:c?this.props.t(c):void 0,onChange:e=>this.setState({passwordRepeat:e}),type:"password",autoComplete:"new-password",icon:p.VpnKey,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(i.IconPicker,{icons:S,label:"Icon",value:this.props.user.common.icon,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.icon=e,this.props.onChange(t)},previewStyle:this.props.styles.iconPreview,icon:p.Image})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.S,{label:"Color",t:this.props.t,value:this.props.user.common.color,previewStyle:this.props.styles.iconPreview,onChange:e=>{const t=i.Utils.clone(this.props.user);t.common.color=e,this.props.onChange(t)},icon:p.ColorLens,style:this.props.styles.colorPicker,styles:this.props.styles})})]})}),(0,g.jsxs)(d.DialogActions,{style:this.props.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",autoFocus:!0,onClick:()=>this.props.saveData(this.props.isNew?null:this.state.originalId),disabled:!u,startIcon:(0,g.jsx)(p.Check,{}),children:this.props.t("Save")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",onClick:this.props.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:this.props.t("Cancel")})]})]})}}const F=P;const O=s.p+"static/media/group1.e4d9dfc6de58d318b9f8659b7bdf92c8.svg";const W=s.p+"static/media/group2.005a7b0a473ee5c6b4afa0f5a4bd399e.svg";const z=s.p+"static/media/group3.ee5e28d28f498bd44d945842ecc32110.svg";const N=s.p+"static/media/group4.d6b392ffee69d8a8efee376434f5cfba.svg";const B=s.p+"static/media/group5.68fdb9e99d289e9c014cc8ee4e9ae4bb.svg";const R=s.p+"static/media/group6.c7f286d197fb918b0d2b34944ec9ef6a.svg";const L=s.p+"static/media/group7.066f78d64741ca336b2137f9caf72133.svg";const M=s.p+"static/media/group8.25d573e553e37968d4e6babd06b36746.svg";const K=s.p+"static/media/group9.b7aae7b7185e989f91b749ff1758d49d.svg";const H=[O,W,z,N,B,R,L,M,K,s.p+"static/media/group10.250fd49c0c4d348815c639620bef3467.svg"];function q(e){const t=(e,t)=>Object.values(e).map(((s,o)=>{const i=Object.keys(e)[o];return t(s,i)}));let s=e.group.common.acl;return s=s||{},s.object=s.object||{read:!0,list:!0,write:!0,delete:!1,create:void 0},s.object=(0,r.A)({read:!0,list:!0,write:!0,delete:!1},s.object),s.state=s.state||{read:!0,list:!0,write:!0,delete:!1,create:void 0},s.state=(0,r.A)({read:!0,list:!0,write:!0,delete:!1},s.state),s.users=s.users||{write:!1,delete:!1,create:!1,list:void 0,read:void 0},s.users=(0,r.A)({write:!1,delete:!1,create:!1},s.users),s.other=s.other||{http:!1,execute:!1,sendto:!0},s.other=(0,r.A)({http:!1,execute:!1,sendto:!0},s.other),s.file=s.file||{read:!0,list:!0,write:!1,delete:!1,create:!1},s.file=(0,r.A)({read:!0,list:!0,write:!1,delete:!1,create:!1},s.file),(0,g.jsx)(d.Grid2,{container:!0,spacing:e.innerWidth<500?1:4,style:e.styles.dialog,children:t(e.group.common.acl||{},((s,o)=>(0,g.jsxs)(d.Grid2,{size:{xs:12,md:12},children:[(0,g.jsx)(d.Box,{component:"h2",sx:e.styles.permHeaders,children:e.t("group_acl_".concat(o))}),t(s,((t,s)=>(0,g.jsx)(d.FormControlLabel,{control:(0,g.jsx)(d.Checkbox,{disabled:"system.group.administrator"===e.group._id,checked:t,onChange:t=>{const r=i.Utils.clone(e.group);r.common.acl[o][s]=t.target.checked,e.onChange(r)}}),label:e.t("group_acl_".concat(s)),labelPlacement:"top"},s)))]},o)))},"PermissionsTab")}const Y={padding:"16px 24px"};class V extends o.Component{constructor(e){super(e),this.state={tab:0,originalId:e.group._id}}componentDidMount(){if(this.props.isNew){const e=H[Math.round(Math.random()*(H.length-1))];e&&i.Utils.getSvg(e).then((e=>{const t=i.Utils.clone(this.props.group);t.common.icon=e,this.props.onChange(t)}))}}render(){const e=this.props.groups.find((e=>e._id===this.props.group._id)),t=this.props.group._id!==this.state.originalId;let s="system.group."!==this.props.group._id&&this.props.group.common.password===this.props.group.common.passwordRepeat;const o=e=>e.replace(i.Utils.FORBIDDEN_CHARS,"_").replace(/\s/g,"_").replace(/\./g,"_").toLowerCase(),n=(e,t)=>{const s=e.split(".");return s[s.length-1]=t,s.join(".")};this.props.isNew?e&&(s=!1):e&&t&&(s=!1);const l=this.props.getText(this.props.group.common.desc),a=this.props.getText(this.props.group.common.name),c=[(0,g.jsxs)(d.Grid2,{container:!0,spacing:this.props.innerWidth<500?1:4,style:this.props.styles.dialog,children:[(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Name",t:this.props.t,value:a,onChange:e=>{const t=i.Utils.clone(this.props.group);this.props.group.common.dontDelete||o(this.props.getText(t.common.name))!==t._id.split(".").pop()||(t._id=n(t._id,o(e))),t.common.name=e,this.props.onChange(t)},autoComplete:"off",icon:p.TextFields,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"ID edit",t:this.props.t,disabled:this.props.group.common.dontDelete,value:this.props.group._id.split(".")[this.props.group._id.split(".").length-1],onChange:e=>{const t=i.Utils.clone(this.props.group);t._id=n(t._id,o(e)),this.props.onChange(t)},icon:p.LocalOffer,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"ID preview",t:this.props.t,disabled:!0,value:this.props.group._id,icon:p.Pageview,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.K,{label:"Description",t:this.props.t,value:l,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.desc=e,this.props.onChange(t)},icon:p.Description,styles:this.props.styles})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(i.IconPicker,{label:"Icon",icons:H,value:this.props.group.common.icon,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.icon=e,this.props.onChange(t)},previewStyle:this.props.styles.iconPreview,icon:p.Image})}),(0,g.jsx)(d.Grid2,{size:{xs:12,md:6},children:(0,g.jsx)(b.S,{label:"Color",t:this.props.t,value:this.props.group.common.color,previewStyle:this.props.styles.iconPreview,onChange:e=>{const t=i.Utils.clone(this.props.group);t.common.color=e,this.props.onChange(t)},icon:p.ColorLens,style:this.props.styles.colorPicker,styles:this.props.styles})})]}),q(this.props)][this.state.tab];return(0,g.jsxs)(d.Dialog,{open:!0,onClose:(e,t)=>{"backdropClick"!==t&&"escapeKeyDown"!==t&&this.props.onClose()},fullWidth:this.props.innerWidth<500,children:[(0,g.jsx)(d.DialogTitle,{style:this.props.styles.dialogTitle,children:(0,g.jsxs)(d.Tabs,{variant:"fullWidth",value:this.state.tab,onChange:(e,t)=>this.setState({tab:t}),children:[(0,g.jsx)(d.Tab,{label:this.props.t("Main"),value:0}),(0,g.jsx)(d.Tab,{label:this.props.t("Permissions"),value:1})]})}),(0,g.jsx)(d.DialogContent,{sx:{"&.MuiDialogContent-root":(0,r.A)((0,r.A)({},this.props.innerWidth<500?this.props.styles.narrowContent:void 0),Y)},children:c}),(0,g.jsxs)(d.DialogActions,{style:this.props.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",autoFocus:!0,onClick:()=>this.props.saveData(this.props.isNew?null:this.state.originalId),disabled:!s,startIcon:(0,g.jsx)(p.Check,{}),children:this.props.t("Save")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",onClick:this.props.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:this.props.t("Cancel")})]})]})}}const Q=V;function X(e){return(0,g.jsxs)(d.Dialog,{open:!0,onClose:e.onClose,children:[(0,g.jsx)(d.DialogTitle,{children:e.t("Please confirm")}),(0,g.jsx)(d.DialogContent,{children:(0,g.jsx)(d.DialogContentText,{children:e.t("Do you want to delete user %s?",e.getText(e.user.common.name))})}),(0,g.jsxs)(d.DialogActions,{children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",onClick:()=>e.deleteUser(e.user._id),startIcon:(0,g.jsx)(p.Delete,{}),children:e.t("Delete")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",autoFocus:!0,onClick:e.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:e.t("Cancel")})]})]})}function J(e){return(0,g.jsxs)(d.Dialog,{open:!0,onClose:e.onClose,children:[(0,g.jsx)(d.DialogTitle,{children:e.t("Please confirm")}),(0,g.jsx)(d.DialogContent,{children:(0,g.jsx)(d.DialogContentText,{children:e.t("Do you want to delete group %s?",e.getText(e.group.common.name))})}),(0,g.jsxs)(d.DialogActions,{style:e.styles.dialogActions,children:[(0,g.jsx)(d.Button,{variant:"contained",color:"primary",onClick:()=>e.deleteGroup(e.group._id),startIcon:(0,g.jsx)(p.Delete,{}),children:e.t("Delete")}),(0,g.jsx)(d.Button,{variant:"contained",color:"grey",autoFocus:!0,onClick:e.onClose,startIcon:(0,g.jsx)(p.Close,{}),children:e.t("Cancel")})]})]})}const Z="***********",$={mainGridCont:{height:"calc(100% - 55px)",overflowY:"auto"},childGridCont:{display:"flex",flexDirection:"column"},childGridContWide:{height:"100%"},canDrop:e=>({backgroundColor:e.palette.background.default}),headContainer:{margin:10},blocksContainer:{overflowY:"auto",overflowX:"hidden"},userGroupCard2:e=>({border:"1px solid #FFF",borderColor:e.palette.divider,m:"10px",minHeight:150,backgroundColor:e.palette.background.default,color:e.palette.text.primary,transition:"all 200ms ease-out",opacity:1,overflow:"hidden","&:hover":{overflowY:"auto",boxShadow:"0 1px 1px 0 rgba(0, 0, 0, .4),0 6px 6px 0 rgba(0, 0, 0, .2)"}}),userGroupCardSecondary:e=>({color:e.palette.text.primary,backgroundColor:e.palette.success.light}),permHeaders:e=>({backgroundColor:"dark"===e.palette.mode?e.palette.background.default:e.palette.primary.main,p:"4px",borderRadius:"2px",color:"#EEE"}),userCardContent:{height:"100%",opacity:1},userGroupTitle:{display:"inline-flex",alignItems:"center"},userGroupUserName:{fontWeight:900,padding:5},userGroupUserID:{opacity:.7,padding:5},description:{fontSize:10,fontStyle:"italic",marginLeft:5,opacity:.7},userGroupMember:e=>({display:"inline-flex",m:"4px",p:"4px",backgroundColor:"#00000010",border:"1px solid #FFF",borderColor:e.palette.text.primary,color:e.palette.text.primary,alignItems:"center"}),icon:{height:32,width:32,marginRight:5,backgroundSize:"cover",backgroundPosition:"center"},right:{float:"right"},left:{float:"left",marginRight:10},dialog:{},flex:{display:"flex"},formControl:{display:"flex",padding:24,flexGrow:1e3},formContainer:{display:"flex",justifyContent:"center",alignItems:"center"},formIcon:{margin:10,opacity:.6},descriptionPanel:e=>({width:"100%",backgroundColor:"transparent",mb:"20px",mt:"20px",ml:"20px",opacity:.75,border:"none",display:"flex",alignItems:"center","& a":{pl:"3px",color:"dark"===e.palette.mode?"#EEE":"#111"}}),dialogTitle:{borderBottom:"1px solid #00000020",padding:0,width:"100%"},dialogActions:{borderTop:"1px solid #00000020",width:"100%"},dialogPaper:{overflowY:"initial",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",width:"calc(100% - 100px)",height:"calc(100% - 100px)",maxWidth:800,maxHeight:"100%"},dialogPaperMini:{maxHeight:300},colorPicker:{},iconPreview:{height:40,width:40},mainDescription:{fontSize:"200%"},deleteDialog:{padding:20},narrowContent:{padding:"8px 8px 8px 8px"}},ee=()=>{const e=(0,c.gx)();return e.display?(0,g.jsx)("div",{style:e.style,children:e.item.preview}):null},te={_id:"system.user.",type:"user",common:{name:"",password:"",enabled:!0,color:"",desc:""},native:{},enums:{}},se={_id:void 0,native:{},type:"group",common:{name:"",desc:"",members:[],dontDelete:void 0,acl:{object:{list:!1,read:!1,write:!1,delete:!1,create:void 0},state:{list:!1,read:!1,write:!1,create:!1,delete:!1},users:{list:!1,read:!1,write:!1,create:!1,delete:!1},other:{execute:!1,http:!1,sendto:!1},file:{list:!1,read:!1,write:!1,create:!1,delete:!1}},icon:"",color:""}};class oe extends o.Component{constructor(e){super(e),this.getText=e=>e&&("object"===typeof e?e[this.props.lang]||e.en||"":e||"")||"",this.showUserEditDialog=(e,t)=>{(e=i.Utils.clone(e)).common.password=e.common.password?Z:"",this.setState({userEditDialog:e,userEditDialogNew:t})},this.showGroupEditDialog=(e,t)=>{e=i.Utils.clone(e),this.setState({groupEditDialog:e,groupEditDialogNew:t})},this.updateData=()=>{let e;return this.props.socket.getForeignObjects("system.user.*","user").then((t=>(e=Object.values(t).sort(((e,t)=>e._id>t._id?1:-1)),e.forEach((e=>{e.common&&e.common.description&&(e.common.desc||(e.common.desc=e.common.description),delete e.common.description)})),this.props.socket.getForeignObjects("system.group.*","group")))).then((t=>{const s=Object.values(t).sort(((e,t)=>e._id>t._id?1:-1));s.forEach((e=>{e.common&&e.common.description&&(e.common.desc||(e.common.desc=e.common.description),delete e.common.description)})),this.setState({groups:s,users:e})}))},this.changeUserFormData=e=>this.setState({userEditDialog:e}),this.changeGroupFormData=e=>this.setState({groupEditDialog:e}),this.saveUser=async e=>{const t=i.Utils.clone(this.state.userEditDialog),s=this.state.users.find((e=>e._id===t._id)),o=t.common.password&&t.common.password!==Z?t.common.password:"";if(t.common.password=s?s.common.password:"",await this.props.socket.setObject(t._id,t),"object"===typeof this.state.userEditDialog&&e&&e!==this.state.userEditDialog._id)try{await this.props.socket.delObject(e);for(let s=0;s<this.state.groups.length;s++){const o=this.state.groups[s];if(o.common.members.includes(e)){const s=i.Utils.clone(o);s.common.members[s.common.members.indexOf(e)]=t._id,await this.props.socket.setObject(s._id,s)}}}catch(r){window.alert("Cannot delete user: ".concat(r))}if(o)try{await this.props.socket.changePassword(t._id,o)}catch(r){window.alert("Cannot change password: ".concat(r))}this.setState({userEditDialog:!1},(()=>this.updateData()))},this.saveGroup=async e=>{if("object"===typeof this.state.groupEditDialog){if(await this.props.socket.setObject(this.state.groupEditDialog._id,this.state.groupEditDialog),e&&e!==this.state.groupEditDialog._id)try{await this.props.socket.delObject(e)}catch(t){window.alert("Cannot delete user: ".concat(t))}this.setState({groupEditDialog:!1},(()=>this.updateData()))}},this.showUserDeleteDialog=e=>this.setState({userDeleteDialog:e}),this.showGroupDeleteDialog=e=>this.setState({groupDeleteDialog:e}),this.deleteUser=e=>{this.props.socket.delObject(e).then((()=>Promise.all(this.state.groups.map((t=>{if(t.common.members.includes(e)){const s=i.Utils.clone(t);return s.common.members.splice(s.common.members.indexOf(e),1),this.props.socket.setObject(s._id,s)}return Promise.resolve(null)}))))).catch((e=>window.alert("Cannot delete user: ".concat(e)))).then((()=>{this.setState({userDeleteDialog:!1},(()=>this.updateData()))}))},this.deleteGroup=e=>this.props.socket.delObject(e).then((()=>this.setState({groupDeleteDialog:!1},(()=>this.updateData())))).catch((e=>window.alert("Cannot delete user: ".concat(e)))),this.addUserToGroup=(e,t)=>{const s=this.state.groups.find((e=>e._id===t)),o=s.common.members;o.includes(e)||(o.push(e),this.props.socket.setObject(s._id,s).then((()=>this.updateData())).catch((e=>window.alert("Cannot delete user: ".concat(e)))))},this.removeUserFromGroup=(e,t)=>{const s=this.state.groups.find((e=>e._id===t)),o=s.common.members;o.includes(e)&&(o.splice(o.indexOf(e),1),this.props.socket.setObject(s._id,s).then((()=>this.updateData())))},this.state={users:null,groups:null,userEditDialog:!1,userEditDialogNew:null,groupEditDialog:!1,groupEditDialogNew:null,userDeleteDialog:!1,groupDeleteDialog:!1,innerWidth:0}}componentDidMount(){this.setState({innerWidth:window.innerWidth},(()=>this.updateData()))}componentDidUpdate(){window.innerWidth!==this.state.innerWidth&&setTimeout((()=>this.setState({innerWidth:window.innerWidth})),100)}static _isUniqueName(e,t,s){return!e.find((e=>e._id==="system.user.".concat(t.toLowerCase(),"_").concat(s)||e.common.name==="".concat(t," ").concat(s)))}static findNewUniqueName(e,t,s){let o=1;for(;!oe._isUniqueName(t,s,o);)o++;return{_id:"system.".concat(e?"group":"user",".").concat(s.toLowerCase(),"_").concat(o),name:"".concat(s," ").concat(o)}}render(){return this.state.users&&this.state.groups?(0,g.jsxs)(n.Q,{backend:h.A.isTouchDevice()?a.qi:l.t2,children:[(0,g.jsx)(ee,{}),(0,g.jsx)(d.Box,{component:"div",sx:$.descriptionPanel,children:this.props.t("You can drag users to groups.")}),(0,g.jsxs)(d.Grid2,{container:!0,spacing:2,style:$.mainGridCont,children:[(0,g.jsxs)(d.Grid2,{size:{xs:12,md:6},style:(0,r.A)((0,r.A)({},$.childGridCont),this.state.innerWidth>600?$.childGridContWide:void 0),children:[(0,g.jsxs)("div",{style:$.headContainer,children:[(0,g.jsx)(d.Fab,{size:"small",style:$.right,onClick:()=>{const{_id:e,name:t}=oe.findNewUniqueName(!0,this.state.groups,this.props.t("Group")),s=i.Utils.clone(se);s._id=e,s.common.name=t,this.showGroupEditDialog(s,!0)},children:(0,g.jsx)(p.GroupAdd,{})}),(0,g.jsx)(d.Typography,{gutterBottom:!0,variant:"h4",component:"h4",children:this.props.t("Groups")})]}),(0,g.jsx)("div",{style:$.blocksContainer,children:this.state.groups.sort(((e,t)=>{var s,o;const i=(this.getText(null===e||void 0===e||null===(s=e.common)||void 0===s?void 0:s.name)||e._id).toLowerCase(),r=(this.getText(null===t||void 0===t||null===(o=t.common)||void 0===o?void 0:o.name)||t._id).toLowerCase();return i>r?1:i<r?-1:0})).map((e=>(0,g.jsx)(C,(0,r.A)({themeType:this.props.themeType,group:e,users:this.state.users,showGroupEditDialog:this.showGroupEditDialog,showGroupDeleteDialog:this.showGroupDeleteDialog,removeUserFromGroup:this.removeUserFromGroup,getText:this.getText,styles:$},this.props),e._id)))})]}),(0,g.jsxs)(d.Grid2,{size:{xs:12,md:6},style:(0,r.A)((0,r.A)({},$.childGridCont),this.state.innerWidth>600?$.childGridContWide:void 0),children:[(0,g.jsxs)("div",{style:$.headContainer,children:[(0,g.jsx)(d.Fab,{size:"small",style:$.right,onClick:()=>{const{_id:e,name:t}=oe.findNewUniqueName(!1,this.state.users,this.props.t("User")),s=i.Utils.clone(te);s._id=e,s.common.name=t,this.showUserEditDialog(s,!0)},children:(0,g.jsx)(p.PersonAdd,{})}),(0,g.jsx)(d.Typography,{gutterBottom:!0,variant:"h4",component:"h4",children:this.props.t("Users")})]}),(0,g.jsx)("div",{style:$.blocksContainer,children:this.state.users.sort(((e,t)=>{var s,o;const i=(this.getText(null===e||void 0===e||null===(s=e.common)||void 0===s?void 0:s.name)||e._id).toLowerCase(),r=(this.getText(null===t||void 0===t||null===(o=t.common)||void 0===o?void 0:o.name)||t._id).toLowerCase();return i>r?1:i<r?-1:0})).map((e=>(0,g.jsx)(y,(0,r.A)({themeType:this.props.themeType,user:e,groups:this.state.groups,showUserEditDialog:this.showUserEditDialog,showUserDeleteDialog:this.showUserDeleteDialog,updateData:this.updateData,addUserToGroup:this.addUserToGroup,removeUserFromGroup:this.removeUserFromGroup,getText:this.getText,styles:$},this.props),e._id)))})]})]}),this.state.userEditDialog?(0,g.jsx)(F,{onClose:()=>this.setState({userEditDialog:!1}),users:this.state.users,user:this.state.userEditDialog,isNew:this.state.userEditDialogNew,t:this.props.t,getText:this.getText,styles:$,onChange:this.changeUserFormData,saveData:this.saveUser,innerWidth:this.state.innerWidth}):null,this.state.groupEditDialog?(0,g.jsx)(Q,{onClose:()=>this.setState({groupEditDialog:!1}),groups:this.state.groups,group:this.state.groupEditDialog,isNew:this.state.groupEditDialogNew,t:this.props.t,getText:this.getText,styles:$,onChange:this.changeGroupFormData,innerWidth:this.state.innerWidth,saveData:this.saveGroup}):null,this.state.userDeleteDialog?(0,g.jsx)(X,{getText:this.getText,onClose:()=>this.setState({userDeleteDialog:!1}),user:this.state.userDeleteDialog,t:this.props.t,deleteUser:this.deleteUser}):null,this.state.groupDeleteDialog?(0,g.jsx)(J,{getText:this.getText,onClose:()=>this.setState({groupDeleteDialog:!1}),group:this.state.groupDeleteDialog,t:this.props.t,styles:$,deleteGroup:this.deleteGroup}):null]}):(0,g.jsx)(d.LinearProgress,{})}}const ie=oe;function re(e){return(0,g.jsx)(i.TabContainer,{children:(0,g.jsx)(i.TabContent,{style:{display:"flex",flexDirection:"column",overflow:"auto"},children:(0,g.jsx)(ie,{t:e.t,lang:e.lang,socket:e.socket,ready:e.ready,expertMode:e.expertMode,themeType:e.themeType,theme:e.theme})})})}},94343:(e,t,s)=>{s.d(t,{gx:()=>d});var o=s(28437),i=s(35661);s(70579);(0,o.createContext)(void 0);var r=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),n=(e,t)=>{switch(e){case"left":case"top-start":case"bottom-start":return 0;case"right":case"top-end":case"bottom-end":return t.width;default:return t.width/2}},l=(e,t)=>{switch(e){case"top":case"top-start":case"top-end":return 0;case"bottom":case"bottom-start":case"bottom-end":return t.height;default:return t.height/2}},a=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"center",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{x:0,y:0},i=e.getClientOffset();if(null===i)return null;if(!t.current||!t.current.getBoundingClientRect)return r(i,(e=>{let t=e.getInitialClientOffset(),s=e.getInitialSourceClientOffset();return null===t||null===s?{x:0,y:0}:r(t,s)})(e));let a=t.current.getBoundingClientRect(),c={x:n(s,a),y:l(s,a)};return((e,t)=>({x:e.x+t.x,y:e.y+t.y}))(r(i,c),o)},c=e=>{let t="translate(".concat(e.x.toFixed(1),"px, ").concat(e.y.toFixed(1),"px)");return{pointerEvents:"none",position:"fixed",top:0,left:0,transform:t,WebkitTransform:t}},d=e=>{let t=(0,o.useRef)(null),s=(0,i.V)((s=>({currentOffset:a(s,t,null===e||void 0===e?void 0:e.placement,null===e||void 0===e?void 0:e.padding),isDragging:s.isDragging(),itemType:s.getItemType(),item:s.getItem(),monitor:s})));return s.isDragging&&null!==s.currentOffset?{display:!0,itemType:s.itemType,item:s.item,style:c(s.currentOffset),monitor:s.monitor,ref:t}:{display:!1}}}}]);
|
|
2
|
+
//# sourceMappingURL=6361.ec86271d.chunk.js.map
|