@reltio/remotes 1.4.1713 → 1.4.1715
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/1088.js +1 -1
- package/1148.js +1 -1
- package/1215.js +1 -1
- package/1334.js +1 -1
- package/1425.js +1 -1
- package/1550.js +1 -1
- package/1550.js.map +1 -1
- package/1664.js +1 -1
- package/1707.js +1 -1
- package/1840.js +1 -1
- package/2066.js +1 -1
- package/2345.js +1 -1
- package/2345.js.map +1 -1
- package/2383.js +1 -1
- package/2400.js +1 -1
- package/2617.js +1 -1
- package/2857.js +1 -1
- package/2966.js +1 -1
- package/3004.js +1 -1
- package/3096.js +1 -1
- package/3144.js +1 -1
- package/3191.js +1 -1
- package/3209.js +1 -1
- package/3348.js +1 -1
- package/3381.js +1 -1
- package/3383.js +1 -1
- package/3463.js +1 -1
- package/3469.js +1 -1
- package/3538.js +1 -1
- package/3639.js +1 -1
- package/3785.js +1 -1
- package/393.js +1 -1
- package/4038.js +1 -1
- package/4143.js +1 -1
- package/4143.js.map +1 -1
- package/415.js +1 -1
- package/4212.js +1 -1
- package/4444.js +1 -1
- package/4481.js +1 -1
- package/4787.js +1 -1
- package/4838.js +1 -1
- package/4969.js +1 -1
- package/50.js +1 -1
- package/5039.js +1 -1
- package/5177.js +1 -1
- package/5201.js +1 -1
- package/5201.js.map +1 -1
- package/5292.js +1 -1
- package/5383.js +1 -1
- package/5738.js +1 -1
- package/5738.js.map +1 -1
- package/5769.js +1 -1
- package/6287.js +1 -1
- package/6422.js +1 -1
- package/6506.js +1 -1
- package/6578.js +1 -1
- package/658.js +1 -1
- package/6799.js +1 -1
- package/6844.js +1 -1
- package/6903.js +1 -1
- package/7074.js +1 -1
- package/7119.js +1 -1
- package/7237.js +1 -1
- package/7340.js +1 -1
- package/735.js +1 -1
- package/7407.js +1 -1
- package/7422.js +1 -1
- package/7468.js +1 -1
- package/7626.js +1 -1
- package/7719.js +1 -1
- package/7744.js +1 -1
- package/7802.js +1 -1
- package/7896.js +1 -1
- package/820.js +1 -1
- package/8207.js +1 -1
- package/8216.js +1 -1
- package/829.js +1 -1
- package/8741.js +1 -1
- package/8786.js +1 -1
- package/9016.js +1 -1
- package/9032.js +1 -1
- package/9050.js +1 -1
- package/9109.js +1 -1
- package/9283.js +1 -1
- package/9328.js +1 -1
- package/9387.js +1 -1
- package/9719.js +1 -1
- package/main.js +1 -1
- package/package.json +1 -1
- package/remoteEntry.js +1 -1
package/1550.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1550.js","mappings":"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,UACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,oBACA,mBACA,SACA,KACA,KACA,IACA,aACA,UACA,kBACA,YACA,WACA,UACA,UACA,oBACA,MACA,KACA,KACA,WACA,YACA,oBACA,MACA,WACA,4BACA,OACA,eACA,YACA,SACA,YACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,SACA,OACA,KACA,KACA,KACA,KACA,aACA,+BACA,6BACA,WACA,oBACA,gBACA,UACA,SACA,cACA,iBACA,KACA,cACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,eACA,mBACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,iBACA,oBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,OACA,mBACA,YACA,eACA,MACA,QACA,SACA,MACA,OACA,OACA,aACA,SACA,UACA,WACA,QACA,SACA,cACA,SACA,WACA,oBACA,qBACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,iBACA,SACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,IACA,SACA,OACA,OACA,mBACA,cACA,YACA,qBACA,mBACA,UACA,SACA,SACA,KACA,KACA,QACA,OACA,kBACA,QACA,UACA,mBACA,mBACA,QACA,eACA,cACA,eACA,QACA,QACA,cACA,aACA,eACA,yBACA,0BACA,SACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,QACA,eACA,iBACA,cACA,SACA,UACA,UACA,cACA,kBACA,iBACA,aACA,KACA,YACA,OACA,KACA,KACA,qBACA,sBACA,UACA,eACA,gBACA,eACA,eACA,YACA,gBACA,iBACA,SACA,UACA,aACA,gBACA,gBACA,UACA,aACA,aACA,QACA,SACA,eACA,eACA,IACA,WACA,KACA,KACA,mBACA,IACA,KACA,KACA,mBACA,IACA,aA2FgC,aAAc,cAC1C40B,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,WACvCl7C,KAAM,CAAC,OAAQ,OACfm7C,OAAQ,CAAC,OACTC,EAAG,CAAC,SAER1gB,KAAM,CA7FN,UACA,eACA,gBACA,mBACA,QACA,MACA,SACA,UACA,OACA,UACA,WACA,OACA,OACA,QACA,IACA,SACA,OACA,gBACA,UACA,MACA,SACA,SACA,OACA,YACA,mBACA,iBACA,gBACA,gBACA,QACA,QACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,iBACA,eACA,cACA,SACA,UACA,OACA,OACA,UACA,WACA,OACA,OACA,IACA,MACA,SACA,MACA,WACA,cACA,eACA,QACA,WACA,WACA,OACA,OACA,QACA,WACA,WACA,OACA,QACA,WACA,gBACA,SACA,SACA,gBACA,SACA,QACA,OACA,SACA,SACA,WACA,QAWuB,IAAK,OAAQ,QAAS,SAAU,SAAU,Q,wcChV9D,MAAM2gB,EAAmB,KAC5B,MAAM,kBAACC,EAAD,YAAoBC,GAAeC,IAAAA,UACnC,WAACl1B,EAAD,KAAaoU,GAAQ+gB,EACrBnrB,EAAoB,CACtBirB,YAAaA,EAAY10B,OAAO6T,GAChC4gB,kBAAmB,EAAF,GAAMA,EAAsBh1B,GAC7Co1B,qBAAqB,GAEzB,OAAQ1B,GAAiBwB,GAAAA,CAAaxB,EAAM1pB,I,8gBCmCzC,MAAMqrB,EAAS,WAAmC,IAAlCx4B,EAAkC,uDAAjB,GACpC,MAAM,kBAACm3B,EAAD,mBAAoBQ,EAApB,SAAwClD,GAAYz0B,EAAOuuB,QAAU,IACpEsI,EAAME,IAAWh+C,EAAAA,EAAAA,aACjB0/C,EAAkB3B,IAAuB/9C,EAAAA,EAAAA,UAA4B,KACrE2/C,EAAuBC,IAA4B5/C,EAAAA,EAAAA,UAA4B,KAC/Em0B,EAAS0rB,IAAc7/C,EAAAA,EAAAA,WAAS,IAChC8/C,EAAOC,IAAY//C,EAAAA,EAAAA,aACnBoH,EAASm1C,IAAcv8C,EAAAA,EAAAA,UAAiB,OACxCggD,EAAcC,IAAmBjgD,EAAAA,EAAAA,UAIrC,IACGq+C,GAAYj/C,EAAAA,EAAAA,UACZ8gD,GAAmB9gD,EAAAA,EAAAA,QAAO,IAC1B+gD,GAAoB/gD,EAAAA,EAAAA,QAAO,IAC3BkgD,EAAeH,IAEf7F,GAAaz0C,EAAAA,EAAAA,IAAa,cAC1BC,GAASC,EAAAA,EAAAA,MACT27B,GAASC,EAAAA,EAAAA,MACTyf,GAAYrE,EAAAA,EAAAA,IAAaj3C,EAAQ47B,GAEjC2f,GAAsB/hD,EAAAA,EAAAA,YAAWgiD,EAAAA,GACjCC,GAAQjiD,EAAAA,EAAAA,YAAWs5C,EAAAA,GACnB4I,GAAoBliD,EAAAA,EAAAA,YAAWo5C,EAAAA,GAE/B6B,GAA0BzY,EAAAA,EAAAA,KAE1BzkC,GAAWC,EAAAA,EAAAA,OAAoB,GAC/ByK,GAASshB,EAAAA,EAAAA,OAAmB,GAC5B+wB,GAAUqH,EAAAA,EAAAA,MACV3H,GAAe4H,EAAAA,EAAAA,MACfzE,GAAa0E,EAAAA,EAAAA,MACbrgB,GAAeC,EAAAA,EAAAA,MACf8Y,GAAOuH,EAAAA,EAAAA,MACPt8C,GAAYsnC,EAAAA,EAAAA,MACZrvC,GAAiBC,EAAAA,EAAAA,MACjBgkC,GAAcC,EAAAA,EAAAA,OACb/jC,KAAMmkD,EAAYzoB,KAAMtc,IAAUglC,EAAAA,EAAAA,OAA8B,GACjExlC,GAA6B,WAAfulC,EAA0B/kC,MAAAA,OAA1B,EAA0BA,EAAQ5Z,MAAQ,KAE9D,IAAI27C,GAAY,GACZkD,GAAY,GAChB,MAAMC,GAAU,IAAmC,IAAlC,KAAC/c,EAAD,OAAOkV,GAA2B,EAC/C,GAAIlV,EACA,OAAQA,EAAKuR,QACT,KAAKyL,EAAAA,IAAAA,SAAuB,CACxB,MAAMC,EAAgB5B,EAAcrb,EAAKnX,OAAkCgxB,MAC3E,GAAK7Z,EAAKnX,OAAkCzyB,GAAI,CAC5C,MAAM8mD,EAAOryB,SAASsyB,eAAgBnd,EAAKnX,OAAkCzyB,IACzE8mD,IAAMA,EAAKjD,UAAYgD,QACpBrD,KAAcqD,IACrBrD,GAAYqD,GACZtD,EAAAA,EAAAA,IAAU,CACNzE,OAAAA,EACAoD,WAAAA,EACAuB,KAAMoD,EACNrD,UAAAA,GACAE,oBAAAA,EACAC,QAAAA,KAGR,MAEJ,KAAKiD,EAAAA,IAAAA,WAAyB,CAC1B,MAAMI,EAAiB/B,EAAarb,EAAKnX,QACzCi0B,GAAYM,GACZzD,EAAAA,EAAAA,IAAU,CACNzE,OAAAA,EACAoD,WAAAA,EACAuB,KAAMuD,EACNxD,UAAWkD,GACXhD,oBAAqB6B,EACrB5B,QAAS+B,IAEb,MAEJ,KAAKkB,EAAAA,IAAAA,WACDF,GAAY,GACZhB,EAAS,MACT,MAEJ,KAAKkB,EAAAA,IAAAA,eACmB,YAAhBhd,EAAKnX,QACL+yB,GAAW,IACXjC,EAAAA,EAAAA,IAAU,CACNzE,OAAAA,EACAoD,WAAAA,EACAsB,UAAAA,GACAE,oBAAAA,EACAC,QAAAA,KAGJ6B,GAAW,GAEf,MAEJ,KAAKoB,EAAAA,IAAAA,YACD1E,EAAWtY,EAAKnX,QAChB,MAEJ,KAAKm0B,EAAAA,IAAAA,WACDhB,GAAiBqB,GAAD,KACTA,EADS,CAEZpqD,OAAQ+sC,EAAKnX,WAEjB,MAEJ,KAAKm0B,EAAAA,IAAAA,UACDhB,GAAiBqB,GAAD,KACTA,EADS,CAEZzlD,MAAOooC,EAAKnX,WAEhB,MAEJ,KAAKm0B,EAAAA,IAAAA,YACDhB,GAAiBqB,GACbrd,EAAKnX,QAAS32B,EAAAA,EAAAA,MAAK,CAAC,kBAAmBmrD,GAAvC,KAAmDA,EAAnD,CAAyD,iBAAkB,WAE/E,MAEJ,KAAKL,EAAAA,IAAAA,IACDjK,QAAQuK,IAAItd,EAAKnX,QACjB,MAEJ,KAAKm0B,EAAAA,IAAAA,QACDZ,EAAoBpc,EAAKnX,QACzB,MAEJ,KAAKm0B,EAAAA,IAAAA,QAAsB,CACvB,MAAMO,GAAgBrF,EAAAA,EAAAA,IAAiBlY,EAAMmV,EAAS6C,EAAYvb,IAClEwY,EAAAA,EAAAA,GAAe,GACXpsB,OAAQ00B,EAAc10B,OACtBorB,YAAajxB,EAAOuuB,OAAO0C,YAC3BiB,OAAAA,EACA98C,SAAAA,EACA4qB,OAAQA,EACRoyB,KAAAA,EACAP,aAAAA,EACAM,QAAS6C,EACTvb,OAAAA,EACAJ,aAAAA,EACAv5B,OAAAA,EACAzC,UAAAA,EACAk8B,YAAAA,EACAt+B,MAAOoZ,GACPg+B,WAAAA,EACAC,wBAAAA,GACGgH,IAEP,MAEJ,KAAKU,EAAAA,IAAAA,8BAA4C,CAC7C,MAAM,GAAC5mD,EAAD,KAAK+9B,GAAQ6L,EAAKnX,OACpBqzB,EAAkB1gD,QAAQpF,KAC1B8lD,EAAkB1gD,QAAQpF,GAAIkkD,KAAKnmB,GACnC+nB,EAAkB1gD,SAAUtJ,EAAAA,EAAAA,MAAK,CAACkE,GAAK8lD,EAAkB1gD,UAE7D,MAEJ,KAAKwhD,EAAAA,IAAAA,6BAA2C,CAC5C,MAAM,GAAC5mD,EAAD,KAAK+9B,GAAQ6L,EAAKnX,OACpBozB,EAAiBzgD,QAAQpF,KACzB6lD,EAAiBzgD,QAAQpF,GAAIsL,QAAQyyB,GACrC8nB,EAAiBzgD,SAAUtJ,EAAAA,EAAAA,MAAK,CAACkE,GAAK6lD,EAAiBzgD,UAE3D,SAMV6+C,GAAsB,CAAClqB,EAASmqB,EAAME,EAAW94C,KACnDu6C,EAAiBzgD,QAAjB,KACOygD,EAAiBzgD,QADxB,CAEI,CAACg/C,GAAY,CAACrqB,QAAAA,EAASmqB,KAAAA,EAAMlkD,GAAIokD,EAAW94C,QAAAA,MAI9Ck5C,GAAuB,CAACN,EAAMQ,KAChCoB,EAAkB1gD,QAAlB,KACO0gD,EAAkB1gD,QADzB,CAEI,CAACs/C,GAAa,CAACR,KAAAA,MAIjBkD,IAAqBtD,EAAAA,EAAAA,IAAwB,CAC/C/E,QAAAA,EACA6C,WAAAA,EACAvb,OAAAA,EACA0d,kBAAAA,EACAC,UAAAA,EACAC,oBAAAA,KAEEoD,IAAsB/C,EAAAA,EAAAA,IAAyB,CACjD1C,WAAAA,EACA7C,QAAAA,EACAwF,mBAAAA,EACAP,UAAAA,EACAQ,qBAAAA,KAGE/B,GAAmB,CAACpgD,EAAc07B,KAAkB,MACtD,UAAAimB,EAAU5+C,eAAV,SAAmBo6C,YAAY,CAACrE,OAAQ,QAAS94C,KAAAA,EAAM07B,KAAAA,KAGrDupB,IAAsBviD,EAAAA,EAAAA,SAAO,GAE7BwiD,GACFpB,KACCp1B,EAAAA,EAAAA,KAAanE,EAAOuuB,SACrBkG,IAAaC,EAAAA,IAAAA,UACZyC,GAAqBQ,GAEtBgD,KACKD,GAAoBliD,SAAY4+C,EAAU5+C,UAC3C+gD,EAAkBqB,uBAClBF,GAAoBliD,SAAU,KAItCS,EAAAA,EAAAA,YAAU,MACFs7C,EAAAA,EAAAA,IAAoBv0B,EAAOuuB,UAC3B6I,EAAU5+C,SAAUqiD,EAAAA,EAAAA,KAAoB1B,EAAWY,GAAS/5B,GACxD06B,GAAoBliD,UACpB+gD,EAAkBuB,wBAClBJ,GAAoBliD,SAAU,GAElCq9C,GAAiB,eAAgB/1C,MAEtC,CAACA,EAAQkgB,KAEZ/mB,EAAAA,EAAAA,YAAU,KACN48C,GAAiB,WAAYvgD,KAC9B,CAACA,KAEJ2D,EAAAA,EAAAA,YAAU,KACN48C,GAAiB,oBAAqBxhC,MACvC,CAACA,MAEJpb,EAAAA,EAAAA,YAAU,KACN48C,GAAiB,mBAAoB3oB,KACtC,CAACA,KAEJj0B,EAAAA,EAAAA,YACI,IAAM,KACFw/C,EAAiBpvC,SAASyqC,GAAaA,QAE3C,CAAC2E,KAGLx/C,EAAAA,EAAAA,YACI,IAAM,KACFy/C,EAAsBrvC,SAASyqC,GAAaA,QAEhD,CAAC4E,EAAuBD,IAG5B,MAAM7gD,IAAUuB,EAAAA,EAAAA,cAAY,KACxB08C,GAAiB,UAAW,QAC7B,CAAC71B,IAwBJ,OAtBA/mB,EAAAA,EAAAA,YAAU,KACN,KAAKkrB,EAAAA,EAAAA,KAAao1B,KAAuBpC,GAAqBQ,GAAqB,CAC/E,MAAM,8BACFoD,EADE,+BAEFC,EAFE,iCAGFC,EAHE,kCAIFC,GACA3B,EAQJ,OANAwB,EAA8BP,IAC9BQ,EAA+BP,IAC/BrD,EAAU5+C,QAAQ49C,QAAU,KACxB6E,EAAiCT,IACjCU,EAAkCT,KAE/B,KACHQ,EAAiCT,IACjCU,EAAkCT,QAG3C,CAACz6B,IAEG,CAAC62B,KAAAA,EAAM3pB,QAAAA,EAAS/sB,QAAAA,EAAS44C,aAAAA,EAAcnhD,QAAAA,GAASihD,MAAAA,K,ijBC5T3D,MAEasC,EAA0Bpe,IACnC,MAAMz+B,GAAcC,EAAAA,EAAAA,KACdumC,GAAmBsW,EAAAA,EAAAA,OAElBt4C,EAAau4C,IAAkBtiD,EAAAA,EAAAA,UAAsB,IAEtDuiD,GAAcniD,EAAAA,EAAAA,cACfoiD,IACG,MAAMC,EAAiB,CACnB,CACI7kD,OAAQ8kD,EAAAA,IAAAA,OACR1X,UAAW,MACXhO,OAAQwlB,IAIVG,EAAiB,CACnB1rC,IAAKurC,EAAaroD,OAClByoD,WAAYC,EAAAA,IAAAA,IACZ3oB,OAAQ,kBAEZ,OAAO30B,GAAYu9C,EAAAA,EAAAA,KAAoBL,EAAgBE,MAE3D,CAACp9C,IAGCw9C,EAAqBz+C,IAChBuB,EAAAA,EAAAA,KAAUvB,EAAW,CAAC8vB,QA7Bf,mBA8BTtuB,MAAMiB,GAAD,KAAyBA,EAAzB,CAAiCrJ,IAAK4G,MAC3C68B,OAAM,KAAM,MAGf6hB,GAAsB5iD,EAAAA,EAAAA,cACxB,CAACoiD,EAAwBz1C,IACdxH,EAAYG,QAAQixC,KAAK6L,GAAgB,IAAIpoD,IAAI2oD,KAAqBj9C,MACxEm9C,IAA+BtgD,EAAAA,EAAAA,OAAKk0C,EAAAA,EAAAA,QAAOhf,EAAAA,UAAUlN,EAAAA,EAAAA,QAAO5d,GAA7BpK,CAAwCsgD,MAGhF,CAAC19C,IA4CL,OAzCArF,EAAAA,EAAAA,YAAU,KACN,MAAMgjD,GAAmBvgD,EAAAA,EAAAA,OACrBsa,EAAAA,EAAAA,SAAO,CAACulC,EAAc7P,KAClB,MAAOwQ,WAAYzmD,EAAb,kBAAmB0mD,GAAqBzQ,EAS9C,MAPa,aAATj2C,GAAgC,mBAATA,IACtB0mD,GAAqB,IAAI9yC,SAAS5S,IAC3BA,IAAQquC,IAAoBqB,EAAAA,EAAAA,KAAY1vC,KAASqM,EAAYrM,IAC7D8kD,EAAa/xC,KAAK/S,MAIvB8kD,IACR,IACH53B,EAAAA,KAbqBjoB,CAcvBqhC,GAAY,IAEVkf,EAAiB/oD,QACjBooD,EAAYW,GACPp9C,MAAMu9C,IACH,MAEMJ,GAFkBtgD,EAAAA,EAAAA,OAAKvI,EAAAA,EAAAA,MAAI8T,EAAAA,EAAAA,MAAK,SAASq7B,EAAAA,EAAAA,YAAW2Z,GAEjCI,CAAgBD,GACzC,OAAOL,EAAoBC,EAAkBI,MAEhDv9C,MAAMu9C,IACHf,GAAgBiB,GACZF,EAAQpmC,QACJ,CAAClQ,EAAUhG,KACPgG,EAAShG,EAAOrJ,KAAOqJ,EAChBgG,IAHf,KAKQw2C,SAIfpiB,OAAM,WAGhB,CAACohB,EAAaS,EAAqBhf,EAAU+H,IAEzChiC,I,mFC/FX,MAAMy5C,EAAa,GAENC,EAAuB,KAChC,MAAMjmB,GAAYC,EAAAA,EAAAA,OAAqB+lB,EAEvC,MAAO,CACHE,WAAWtjD,EAAAA,EAAAA,cAAYujD,EAAAA,EAAAA,KAAsBC,EAAAA,IAAAA,OAA0BpmB,GAAY,CAACA,IACpFqmB,SAASzjD,EAAAA,EAAAA,cAAYujD,EAAAA,EAAAA,KAAsBC,EAAAA,IAAAA,KAAwBpmB,GAAY,CAACA,IAChFsmB,WAAW1jD,EAAAA,EAAAA,cAAYujD,EAAAA,EAAAA,KAAsBC,EAAAA,IAAAA,OAA0BpmB,GAAY,CAACA,IACpFumB,WAAW3jD,EAAAA,EAAAA,cAAYujD,EAAAA,EAAAA,KAAsBC,EAAAA,IAAAA,OAA0BpmB,GAAY,CAACA,O,yGCE5F,MAAMwmB,GAAuBx4B,EAAAA,EAAAA,QAAM,CAAC7rB,EAA0B+mB,KAC1D,MAAMC,GAAcnpB,EAAAA,EAAAA,MAAK,CAAC,WAAY,eAAgBkpB,GACtD,OAAO/mB,EAAOwK,MACT1O,IACGwoD,EAAAA,EAAAA,MAAoB/1C,EAAAA,EAAAA,MAAK,MAAOzS,GAAQkrB,KACxCs9B,EAAAA,EAAAA,MAAoB/1C,EAAAA,EAAAA,MAAK,YAAazS,GAAQkrB,KAC7ClrB,EAAM+B,MAAQ,IAAI2M,MACd1M,IAAcD,EAAAA,EAAAA,MAAK,CAAC,QAAS,WAAY,eAAgBC,KAAekpB,SAQ5Eu9B,EAA6BC,IACtC,MAAMC,GAAqBv/C,EAAAA,EAAAA,IAAa,sBAClCyC,GAAO42B,EAAAA,EAAAA,MACPlV,GAAgBC,EAAAA,EAAAA,MAChBo7B,GAA2BjlD,EAAAA,EAAAA,SAAO,GAClCklD,GAAkBC,EAAAA,EAAAA,MAClB,iBAACC,EAAmB,GAApB,kBAAwBC,EAAoB,KAAMC,EAAAA,EAAAA,IAAsBP,IAAa,GACrFQ,GAAwBC,EAAAA,EAAAA,IAA+B,CAACT,KAAc,GACtEU,GAA0BhO,EAAAA,EAAAA,SAC3BiO,GACGH,EAAsBx6C,MAAK4U,EAAAA,EAAAA,OAAKvhB,EAAAA,EAAAA,MAAK,CAAC,WAAY,gBAAiBsnD,KACvE,IAAIN,EAAiBpqD,IAAI2qD,EAAAA,QAAaN,EAAkBrqD,IAAI4qD,EAAAA,OAE1DC,GAAqBplD,EAAAA,EAAAA,UACvB,IAjBsB,eAACF,EAAD,uDAA4B,GAAIulD,EAAhC,uDAA4D,GAA5D,OAC1BtnD,EAAAA,EAAAA,QAAOomD,EAAqBrkD,GAASulD,GAgB3BC,CAAsBn8B,EAAe67B,IAC3C,CAAC77B,EAAe67B,IAEdO,GAAgCC,EAAAA,EAAAA,IAAe,iCAC/CC,EAA+BC,GAAyBlB,EAAyB5kD,QAAU8lD,EAC3FC,EAAmBJ,GAA8B,IAAME,GAA4B,MAEzFplD,EAAAA,EAAAA,YAAU,MACF3D,EAAAA,EAAAA,KAAe+K,IAAS29C,EAAmB9qD,QAAUkqD,EAAyB5kD,UAC9EwlD,EAAmB30C,SAASoW,GAA2B09B,EAAmBD,EAAUz9B,KACpF4+B,GAA4B,MAEjC,CAACh+C,EAAM29C,KAEV/kD,EAAAA,EAAAA,YAAU,KACN,MAAMulD,EAAuBnB,EAAgBkB,GAC7C,MAAO,IAAMC,MACd,CAACnB,M,gFCrDD,MAAMoB,EAAoB,IAAyC,IAAxC,cAACC,EAAD,YAAgBC,GAAwB,EACtE,MASM,iBAACC,EAAD,oBAAmBxF,IAAuByF,EAAAA,EAAAA,GAAY,CACxDC,eAAgBH,EAChBI,aAAa,EACbnR,iBAAkB,IAClBoR,aAAc9oD,IAAAA,KAAU,UAG5B,MAAO,CAAC0oD,iBAAAA,EAAkBK,YAhBN,KAChBP,IACAtF,EACIljD,IAAAA,KACI,iJ,+kBCoChB,MAAMgpD,GAAoB/iD,EAAAA,EAAAA,MACtBrF,EAAAA,UACA4E,EAAAA,EAAAA,MACIi8B,EAAAA,IACAzkC,EAAAA,QACA+sC,EAAAA,EAAAA,QAAOrjB,GAAMA,EAAI,MAGnBuiC,EAAwBn/B,IAC1B,IAAIo/B,EAAsEp/B,EAC1E,KAAOo/B,GAAO,OACV,GAAkC,KAA9B,UAAAA,EAAMv4B,mBAAN,eAAmB3zB,QACnB,OAAO,EAEXksD,EAAQA,EAAMC,UAElB,OAAO,GAKEC,EAAqB,IAWrB,IAXsB,QAC/BC,EAD+B,OAE/B5oD,EAF+B,KAG/B+zC,EAH+B,YAI/BH,EAJ+B,OAK/BvqB,EAL+B,OAM/BlgB,EAN+B,uBAO/B0/C,EAP+B,KAQ/Bn/C,EAR+B,WAS/Bo/C,GAAa,EATkB,oBAU/BrG,GACS,EACT,MAAOr7C,EAAWK,IAAgBrF,EAAAA,EAAAA,WAAS,GAErC2mD,GAAkB9hD,EAAAA,EAAAA,IAAa,mBAC/B67B,GAASC,EAAAA,EAAAA,MACTtkC,GAAWC,EAAAA,EAAAA,MACXsqD,GAAWC,EAAAA,EAAAA,OACX,eAACC,EAAD,aAAiBC,IAAgBh+B,EAAAA,EAAAA,OAAsC,GACvEi+B,GAAiB9Q,EAAAA,EAAAA,MAEjB3wC,GAAcC,EAAAA,EAAAA,KAEdyhD,EAAkB9rD,IACpB,MAAM+rD,GAAS9jD,EAAAA,EAAAA,MAAK+jD,EAAAA,KAAUj5C,EAAAA,EAAAA,MAAK,QAC7Bk5C,GAAiBzkD,EAAAA,EAAAA,MAAKukD,GAAQG,EAAAA,EAAAA,KAA2BhrD,IAE/D,OAAOqiC,EAAAA,EAAAA,QAAO,CACV5Q,aAAaw5B,EAAAA,EAAAA,SAASC,EAAAA,EAAAA,KAAyBlrD,IAC/CqtB,aAAa49B,EAAAA,EAAAA,QAASF,GACtBx9B,cAAc09B,EAAAA,EAAAA,QAASF,GACvBd,UAAWW,GAJRvoB,CAKJvjC,IAGDqsD,EAAYvgC,EAAOugC,UACnBpzB,GAAUv0B,EAAAA,EAAAA,UACZ,KAAM,CACF6mD,WAAAA,KAEJ,CAACA,IAECe,GAAUroD,EAAAA,EAAAA,QAAakI,GAC7BmgD,EAAQhoD,QAAU6H,EAClB,MAAMogD,GAAgBtnD,EAAAA,EAAAA,cAAY,KAC9B,GAAI2G,MAAAA,GAAAA,EAAQrJ,IAAK,CACb,MACMiqD,EAAgB,EAAH,GADKV,EAAehgC,EAAO9rB,SAC3B,CAEfysD,OAAQpB,MAAAA,OAAF,EAAEA,EAASzb,MACjB8c,MAAOrB,MAAAA,OAAF,EAAEA,EAASqB,MAChBC,aAAa,EACbC,eAAe,EACfnF,WAAY,CACR/7B,SAAU4/B,GAA0B5D,EAAAA,IAAAA,IACpC97C,OAAQ+/C,GAEZ7vC,IAAKu6B,EACLwW,OAAQrW,EAAOH,EACf5zC,QAAQqqD,EAAAA,EAAAA,KAAuBlB,EAAcnpD,SAAW0I,EACxDkhD,UAAWrB,EAAkBqB,KAE3BU,EAAU,CAACP,GAAeh9B,QAC5B8kB,EAAAA,EAAAA,QACI1xC,EAAAA,UACA4E,EAAAA,EAAAA,MAAKi8B,EAAAA,KAAsB4oB,GACvBA,EAAUptD,KAAI,CAAC6sB,EAAQvrB,IAAT,KAAoBurB,EAApB,CAA4B5sB,GAAIstD,EAAcH,UAAU9rD,UAE1EuH,EAAAA,EAAAA,QAAO,IALXwsC,CAME+X,IAGAW,EAAuBziD,QAAQC,QAAQ,CAAC,CAACsgB,MAAO,KAChDyzB,GAA2D0O,EAAAA,EAAAA,MAAK,CAClE,EAACzlD,EAAAA,EAAAA,OAAKuL,EAAAA,EAAAA,MAAK,OAAQoZ,EAAAA,KAAY,IAAM6gC,GACrC,EACIllD,EAAAA,EAAAA,SAAQmjD,EAAqBuB,IAC7B,KACI3Q,QAAQC,KAAK,yEACNkR,IAGf,CACIE,EAAAA,IACCthD,IACGuhD,EAAAA,EAAAA,KAAgC,CAC5BhkD,UAAWyC,EAAOrJ,IAClBwqD,QAASA,EACTK,eAAgB7nB,EAChB8nB,WAAYzhD,EAAOyhD,WACnB5B,SAAAA,EACAxyB,QAAAA,KAGZ,CAAC7wB,EAAAA,EAAIwD,IAAW0hD,EAAAA,EAAAA,KAAsB1hD,EAAOrJ,IAAKwqD,EAAS9zB,MAE/D/uB,GAAa,GACbE,EAAYm0C,EAAQ3yC,IACfjB,MAAMgT,IACH,IAAK/G,MAAMskC,QAAQv9B,GACf,MAAM1c,MAAM09C,KAAKE,UAAUlhC,IAE/B,OAAO,YAACosC,EAAD,MAAcj/B,EAAd,WAAqByiC,IAAe5vC,GACxB,IAAf4vC,GAAwBrI,GACxBA,EACIljD,IAAAA,KACI,gIAIZwpD,EAAgB,CAACtsD,GAAI4sB,EAAO5sB,GAAI6qD,YAAAA,EAAaj/B,MAAAA,EAAO3e,KAAMmgD,EAAQhoD,aAErE0hC,OAAOl5B,IACJ+uC,QAAQC,KAAK,gCAAiChvC,MAEjDlC,SAAQ,KACLV,GAAa,SAI1B,CACCyhD,EACAzqD,EACA4qB,EACA0/B,EACAC,EACA7/C,MAAAA,OAND,EAMCA,EAAQrJ,IACRqJ,MAAAA,OAPD,EAOCA,EAAQyhD,WACR5qD,EACAmpD,EACApV,EACA8U,EACAjV,EACAjsC,EACAihD,EACA9lB,EACAtM,EACA4yB,IAEE2B,GAAmBvpD,EAAAA,EAAAA,SAAgB,GACzCupD,EAAiBlpD,SAAU,GAC3BS,EAAAA,EAAAA,YAAU,KACNyoD,EAAiBlpD,SAAU,EAC3BioD,MACD,CAACA,IAEJ,MAAMkB,GAAWpyB,EAAAA,EAAAA,GAAYlvB,GAO7B,OANApH,EAAAA,EAAAA,YAAU,KACFoH,IAASuhD,EAAAA,IAAAA,SAAiBF,EAAiBlpD,SAAWmpD,IAAathD,IACnEqhD,EAAiBlpD,SAAU,EAC3BioD,OAEL,CAACA,EAAepgD,EAAMshD,IAClB,CAAC5jD,UAAAA,EAAWu2C,OAAQmM,K,2DC7NxB,MAAMoB,EAAqC,CAACC,EAAI5mD,KACnD,MAAM6mD,GAAgB5pD,EAAAA,EAAAA,SAAO,IAC7Bc,EAAAA,EAAAA,YAAU,KACFiC,IAAU6mD,EAAcvpD,UACxBupD,EAAcvpD,SAAU,EACxBspD,OAEL,CAACA,EAAI5mD,M","sources":["webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/helpers.ts","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.tsx","webpack://@reltio/remotes/../components/src/icons/Hyperlink.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/Error.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/AttributesErrorsPanel.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../components/src/icons/Filter.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/FilterButton/styles.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/FilterButton/FilterButton.js","webpack://@reltio/remotes/../components/src/components/ExpandableSearchInput/styles.ts","webpack://@reltio/remotes/../components/src/components/ExpandableSearchInput/ExpandableSearchInput.tsx","webpack://@reltio/remotes/../components/src/components/HideOnShrink/HideOnShrink.tsx","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/styles.ts","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/HierarchyNodeTitle.tsx","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/hooks/useEntityDetails.ts","webpack://@reltio/remotes/../components/src/components/ImportButton/styles.ts","webpack://@reltio/remotes/../components/src/components/ImportButton/ImportButton.tsx","webpack://@reltio/remotes/../components/src/components/Link/styles.js","webpack://@reltio/remotes/../components/src/components/Link/Link.tsx","webpack://@reltio/remotes/../components/src/components/LoadingSpinner/SpinnerSmall.gif.tsx","webpack://@reltio/remotes/../components/src/components/LoadingSpinner/LoadingSpinner.tsx","webpack://@reltio/remotes/../components/src/components/MultilineMenuItem/styles.ts","webpack://@reltio/remotes/../components/src/components/MultilineMenuItem/MultilineMenuItem.tsx","webpack://@reltio/remotes/../components/src/components/ProfileMatchCard/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileMatchCard/ProfileMatchCard.tsx","webpack://@reltio/remotes/../components/src/components/ProfilesList/helpers.ts","webpack://@reltio/remotes/../components/src/components/ProfilesList/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfilesList/ProfilesList.tsx","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/classnames.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/treeNodeStyle.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/tree-node.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/node-renderer-default.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/tree-placeholder.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/placeholderRendererDefaultStyle.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/placeholder-renderer-default.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/memoized-tree-data-utils.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/dnd-manager.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/react-sortable-tree.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/generic-utils.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/reactSortableTreeStyles.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/index.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/default-handlers.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/tree-data-utils.js","webpack://@reltio/remotes/../components/src/components/RelationEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/RelationEditor/RelationEditor.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/MapControlContainer/MapControlContrainer.tsx","webpack://@reltio/remotes/../components/src/icons/Radius.tsx","webpack://@reltio/remotes/../components/src/icons/Draw.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopRightMapControls/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopRightMapControls/TopRightMapControls.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopCenterMapControls/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopCenterMapControls/TopCenterMapControls.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/helpers/index.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/icons/marker.inline.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/EntityMarker.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/icons/marker-hover.inline.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/hooks/useFitMapBounds.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/index.tsx","webpack://@reltio/remotes/../components/src/components/SelectorWithOnlyOptionAutoSelect/styles.js","webpack://@reltio/remotes/../components/src/components/SelectorWithOnlyOptionAutoSelect/SelectorWithOnlyOptionAutoSelect.js","webpack://@reltio/remotes/../components/src/components/TableSkeleton/styles.ts","webpack://@reltio/remotes/../components/src/components/TableSkeleton/TableSkeleton.tsx","webpack://@reltio/remotes/../components/src/components/VerticalDivider/VerticalDivider.js","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/history/hooks/useHistoryDiff.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/DueDateField/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/DueDateField/DueDateField.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowDueDate.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowPriority.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/PrioritySelector/PrioritySelector.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/LineDecorator/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/LineDecorator/LineDecorator.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowColor.ts","webpack://@reltio/remotes/../components/src/icons/CollaborationIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/GenericWorkflowTaskCard/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/GenericWorkflowTaskCard/GenericWorkflowTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/DcrTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/helpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/attributesHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/mergeHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ShowMoreLink/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ShowMoreLink/ShowMoreLink.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ChangeView/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ChangeView/ChangeView.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/contexts/AttributesChangesContext.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DiffRenderer/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DiffRenderer/DiffRenderer.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DCRChangesList/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DCRChangesList/DCRChangesList.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/contextHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/helpers/dcrHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/AttributesChanges.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/hooks/useCollapsibleList.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useChangeRequest.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/DataChangeRequestTaskCard/DataChangeRequestTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/PmTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/PotentialMatchTaskCard/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/PotentialMatchTaskCard/PotentialMatchTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/DefaultTaskIcon.tsx","webpack://@reltio/remotes/../components/src/icons/DeleteRequestTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/WorkflowTaskCardsFactory.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/WorkflowTaskCard.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowDialog/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowDialog/AddWorkflowDialog.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowDefinitions.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowProcessInstance.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowButton/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowButton/AddWorkflowButton.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/TaskActionButtons/TaskActionButtons.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../components/src/constants/map.ts","webpack://@reltio/remotes/../components/src/contexts/EntityMarkerContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/InterceptHandlersContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/PageRequestsAbortingContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/SandboxAPIContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/API.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/helpers.ts","webpack://@reltio/remotes/../components/src/hooks/helpers/sanitizerOptions.ts","webpack://@reltio/remotes/../components/src/hooks/useHtmlSanitizer.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/useAPI.ts","webpack://@reltio/remotes/../components/src/hooks/useCommentsEntitiesMap.ts","webpack://@reltio/remotes/../components/src/hooks/useConfigPermissions.ts","webpack://@reltio/remotes/../components/src/hooks/useExpandInvalidRelations.ts","webpack://@reltio/remotes/../components/src/hooks/useLayoutResetter.ts","webpack://@reltio/remotes/../components/src/hooks/useRelationsLoader.ts","webpack://@reltio/remotes/../components/src/hooks/useRunOnceAfterValueInitialization.js"],"sourcesContent":["import {either, equals, identity, omit, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n\nexport const getDisplayedAttributeTypesPath = ({path: errorPath}: AttributeError) => {\n return errorPath\n ?.filter(({type}) => type === AttributeValuePathItemType.attributeValue)\n .map(either(path(['valueType', 'label']), path(['valueType', 'name'])))\n .filter(identity)\n .join(' > ');\n};\n","import {makeStyles} from '@mui/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypesPath: {\n color: theme.palette.text.secondary\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Typography from '@mui/material/Typography';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","import React from 'react';\n\nconst SvgHyperlink: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\"\n fill=\"#000\"\n fillOpacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgHyperlink;\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../../../icons/Hyperlink';\nimport {SmallIconButtonWithTooltip} from '../../SmallIconButton';\nimport {ScrollToElementContext, useMdmIsEditableMode, useMdmMetadata} from '../../../contexts';\nimport {getDisplayedAttributeTypesPath, getDisplayedErrorMessage, getDisplayedErrorPath} from './helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useMdmMetadata();\n const isEditableMode: boolean = useMdmIsEditableMode();\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const displayedAttributeTypesPath = getDisplayedAttributeTypesPath(error);\n const {highlightError} = useContext(ScrollToElementContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n {displayedAttributeTypesPath && (\n <span className={styles.attributeTypesPath}>{displayedAttributeTypesPath}</span>\n )}\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport ErrorIcon from '@mui/icons-material/Warning';\nimport WarningIcon from '@mui/icons-material/Error';\nimport {AttributeError, splitErrorsBySeverity} from '@reltio/mdm-sdk';\nimport {useCachedErrors} from './useCachedErrors';\nimport {ErrorsPanel} from './ErrorsPanel/ErrorsPanel';\nimport {Error} from './ErrorsPanel/Error';\n\nimport useStyles from './styles';\n\ntype Props = {\n attributesWithErrors?: AttributeError[];\n};\n\nexport const AttributesErrorsPanel = ({attributesWithErrors = []}: Props) => {\n const styles = useStyles();\n\n const cachedErrors = useCachedErrors(attributesWithErrors);\n const [errors, warnings] = useMemo(() => splitErrorsBySeverity(cachedErrors), [cachedErrors]);\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './ErrorsPanel/helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React from 'react';\n\nconst SvgFilter: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M18 2V0H0v2l7 8v8l4-2v-6z\" fill=\"currentColor\" fillRule=\"nonzero\" stroke=\"none\" strokeWidth={1} />\n </svg>\n );\n};\n\nexport default SvgFilter;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'filterIcon--enabled': {\n color: theme.palette.primary.main\n },\n closeIcon: {\n position: 'absolute',\n right: '3px',\n bottom: '3px',\n transform: 'scale(0.5)'\n },\n button: {\n padding: '11px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Tooltip from '@mui/material/Tooltip';\nimport FilterIcon from '../../../../icons/Filter';\nimport {useStyles} from './styles';\n\nconst FilterButton = ({enabled, onClick}) => {\n const styles = useStyles();\n\n return (\n <Tooltip title={enabled ? i18n.text('Clear all filters') : i18n.text('Filter')}>\n <IconButton onClick={onClick} classes={{root: styles.button}} size=\"large\">\n {enabled ? (\n <>\n <FilterIcon className={styles['filterIcon--enabled']} />\n <CloseIcon color=\"primary\" className={styles.closeIcon} />\n </>\n ) : (\n <FilterIcon />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n\nFilterButton.propTypes = {\n enabled: PropTypes.bool,\n onClick: PropTypes.func\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n searchButton: {\n padding: '8px'\n },\n input: {\n maxWidth: '350px',\n flex: '1 1',\n minWidth: '160px',\n fontSize: '14px',\n background: 'rgba(0,0,0,0.03) 2px',\n padding: '4px 0',\n marginRight: '4px'\n },\n startAdornment: {\n color: 'rgba(0,0,0,0.54)',\n paddingLeft: '8px'\n },\n endAdornment: {\n marginRight: '4px'\n }\n});\n","import React, {useState, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, F, pipe, propEq, T, tap, trim, when} from 'ramda';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\nimport {SmallIconButton} from '../SmallIconButton';\nimport {getValue} from '../../core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n query: string;\n onChange: (value: string) => void;\n};\n\nexport const ExpandableSearchInput = ({query, onChange}: Props) => {\n const [value, setValue] = useState(query);\n const [isOpen, setIsOpen] = useState(!!query);\n useEffect(() => {\n setValue(query);\n }, [query]);\n const styles = useStyles();\n\n return isOpen ? (\n <Input\n className={styles.input}\n value={value}\n autoFocus={true}\n placeholder={i18n.text('Search')}\n disableUnderline={true}\n onChange={pipe(getValue, setValue)}\n startAdornment={\n <InputAdornment position=\"start\">\n <SearchIcon className={styles.startAdornment} />\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\">\n <SmallIconButton\n size=\"S\"\n icon={CloseIcon}\n className={styles.endAdornment}\n onClick={pipe(F, setIsOpen, always(''), tap(onChange), setValue)}\n />\n </InputAdornment>\n }\n onKeyPress={when(propEq('key', 'Enter'), pipe(always(value), trim, onChange))}\n />\n ) : (\n <IconButton className={styles.searchButton} onClick={pipe(T, setIsOpen)} size=\"large\">\n <SearchIcon />\n </IconButton>\n );\n};\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\ntype Props = {\n children: React.ReactNode;\n widthToHide: number;\n};\n\nconst HideOnShrink = ({widthToHide, children}: Props) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nexport default HideOnShrink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n link: {\n cursor: 'pointer',\n color: theme.palette.primary.main,\n lineHeight: '15px',\n wordBreak: 'break-word'\n },\n selected: {\n fontWeight: 'bold'\n },\n popper: {\n maxWidth: '345px',\n minWidth: '200px',\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)',\n backgroundColor: 'white',\n borderRadius: '2px'\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport Link from '../Link/Link';\nimport Popper from '../Popper/Popper';\nimport ProfileCard from '../ProfileCard/ProfileCard';\nimport {UrlGeneratorsContext, useMdmAction, useMdmUiPath} from '../../contexts';\nimport {useEntityDetails} from './hooks/useEntityDetails';\nimport {useStyles} from './styles';\n\ntype NodeTitleProps = {\n title: string;\n entityUri: string;\n viewId: string;\n isSelected?: boolean;\n anchorEl?: HTMLElement;\n withEntityDetails?: boolean;\n};\n\nexport const HierarchyNodeTitle = ({\n title,\n isSelected,\n entityUri,\n viewId,\n anchorEl,\n withEntityDetails = true\n}: NodeTitleProps) => {\n const styles = useStyles();\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n\n const openEntity = useMdmAction('openEntity');\n const uiPath = useMdmUiPath();\n\n const {isLoading, entityDetails, showEntityDetails, hideEntityDetails} = useEntityDetails(entityUri);\n\n const link = generateEntityUrl({uiPath, uri: entityUri});\n const showPopper = Boolean(anchorEl) && (Boolean(entityDetails) || isLoading);\n\n const handleClick = useCallback(() => {\n openEntity({uri: entityUri, viewId});\n }, [openEntity, entityUri, viewId]);\n\n return (\n <>\n <span\n data-reltio-id=\"reltio-hierarchy-node-title\"\n className={classnames(styles.link, {[styles.selected]: isSelected})}\n onMouseEnter={withEntityDetails ? showEntityDetails : undefined}\n onMouseLeave={withEntityDetails ? hideEntityDetails : undefined}\n >\n <Link to={link} onClick={handleClick}>\n {title}\n </Link>\n </span>\n <Popper anchorEl={anchorEl} className={styles.popper} open={showPopper} modal={false} placement=\"top-start\">\n <ProfileCard entity={entityDetails} variant={isLoading ? 'loading' : 'normal'} />\n </Popper>\n </>\n );\n};\n","import {useState, useCallback, useRef, useEffect} from 'react';\nimport {getEntity} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks/useSafePromise';\n\nexport const useEntityDetails = (entityUri: string) => {\n const [entityDetails, setEntityDetails] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const timerId = useRef(null);\n const safePromise = useSafePromise();\n\n const cancelRequest = useCallback(() => safePromise(Promise.resolve()), [safePromise]);\n\n const showEntityDetails = useCallback(() => {\n timerId.current = setTimeout(() => {\n setIsLoading(true);\n safePromise(getEntity(entityUri))\n .then(setEntityDetails)\n .finally(() => setIsLoading(false));\n }, 1000);\n }, [entityUri, safePromise]);\n\n const hideEntityDetails = useCallback(() => {\n cancelRequest();\n clearTimeout(timerId.current);\n setIsLoading(false);\n setEntityDetails(null);\n }, [cancelRequest]);\n\n useEffect(() => {\n return () => clearTimeout(timerId.current);\n }, []);\n\n return {\n isLoading,\n entityDetails,\n showEntityDetails,\n hideEntityDetails\n };\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px'\n },\n check: {\n color: '#8CC152'\n }\n});\n","import React from 'react';\n\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\nimport DoneIcon from '@mui/icons-material/Done';\nimport {noop} from '../../core';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nexport enum ImportModes {\n INIT = 1,\n PROGRESS = 2,\n SUCCESS = 3,\n DONE = 4\n}\n\ntype Props = {\n tooltip?: string;\n onClick?: () => void;\n classes?: Partial<Record<'root' | 'spinner' | 'button' | 'check', string>>;\n mode?: ImportModes;\n};\n\nconst ImportButton = ({classes = {}, tooltip = '', onClick = noop, mode = ImportModes.INIT}: Props) => {\n const styles = useStyles();\n\n const renderCurrentMode = () => {\n switch (mode) {\n case ImportModes.INIT: {\n return (\n <SmallIconButtonWithTooltip\n className={classes.button}\n size={'M'}\n tooltipTitle={tooltip}\n icon={CloudDownloadIcon}\n onClick={onClick}\n />\n );\n }\n case ImportModes.PROGRESS:\n return <CircularProgress className={classes.spinner} size={24} />;\n case ImportModes.SUCCESS:\n return <DoneIcon className={classnames(styles.check, classes.check)} />;\n default:\n return null;\n }\n };\n return <div className={classnames(styles.root, classes.root)}>{renderCurrentMode()}</div>;\n};\n\nexport default ImportButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n link: {\n textDecoration: 'inherit',\n color: 'inherit',\n '&:visited': {\n textDecoration: 'inherit',\n color: 'inherit'\n }\n }\n});\n","import React, {ReactNode} from 'react';\nimport {useStyles} from './styles';\n\ntype LinkProps = {\n to?: string;\n children?: ReactNode;\n onClick?: () => void;\n};\nconst Link = ({to, children, onClick}: LinkProps) => {\n const styles = useStyles();\n return (\n <a\n href={to}\n onClick={(e) => {\n if (onClick) {\n onClick();\n e.stopPropagation();\n e.preventDefault();\n }\n }}\n className={styles.link}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","export const SpinnerSmall =\n 'R0lGODlhFQALAKIAAP///8Hf75vL5Van0wB4v////wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAFACwAAAIAFQAHAAADLFi6zPSQFEGpGhgXkrEUQShc1bB1wxcGYzGUZ6eKJGVy8lS1aJxJjaAiAkkAACH5BAkKAAUALAAAAwAUAAUAAAMiWLFbJRC6QakCODjBxIzDlW3dB4UBBmhPWQygwrCR9FZDAgAh+QQJCgAFACwIAAMADAAFAAADFBiqVfIvgBmaWHeC6rCklrdw0JMAACH5BAkKAAUALAAAAgAUAAcAAAMkSLpU/vCRQWmLLmg967hYAIxBV4GRSJoWlo1A6X1usXGMUkcJACH5BAkKAAUALAAAAgAOAAcAAAMdWLpF/qSMORudcYg97M2b0BHXAHIelV0pxizQkwAAOw==';\n","import React from 'react';\nimport {gif2Url} from '@reltio/mdm-sdk';\nimport {SpinnerSmall} from './SpinnerSmall.gif';\n\ntype Props = {\n className?: string;\n};\n\nexport const LoadingSpinner = ({className}: Props) => {\n return <img className={className} alt=\"loading\" src={gif2Url(SpinnerSmall)} />;\n};\n\nexport default LoadingSpinner;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n menuItem: {\n whiteSpace: 'inherit',\n width: 200,\n padding: '9px 12px 7px'\n },\n itemText: {\n margin: 0\n },\n textPrimary: {\n fontSize: 14,\n lineHeight: '16px',\n fontWeight: 500\n },\n textSecondary: {\n fontSize: 10,\n lineHeight: '12px'\n }\n}));\n","import React, {forwardRef} from 'react';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport {noop} from '../../core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n item: {\n primary: string;\n secondary: string;\n onClick: () => void;\n };\n onMenuClose?: () => void;\n};\n\nconst MultilineMenuItem = forwardRef(({item, onMenuClose = noop}: Props, ref: React.Ref<HTMLLIElement>) => {\n const styles = useStyles();\n const {primary, secondary, onClick} = item;\n\n const handleClick = () => {\n onMenuClose();\n onClick();\n };\n\n return (\n <MenuItem className={styles.menuItem} ref={ref} onClick={handleClick}>\n <ListItemText\n primary={primary}\n secondary={secondary}\n className={styles.itemText}\n classes={{\n primary: styles.textPrimary,\n secondary: styles.textSecondary\n }}\n />\n </MenuItem>\n );\n});\n\nMultilineMenuItem.displayName = 'MultilineMenuItem';\n\nexport default MultilineMenuItem;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n paddingRight: '12px',\n paddingTop: '8px',\n paddingBottom: '8px',\n '& + &': {\n borderTop: '1px solid rgba(0,0,0, 0.12)'\n }\n },\n profileCardWrapper: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: '4px'\n },\n profileCardContainer: {\n flexGrow: 1,\n paddingBottom: '8px',\n paddingTop: '8px'\n },\n rulesContainer: {\n paddingLeft: '52px',\n marginBottom: '8px',\n display: 'flex',\n alignItems: 'center'\n },\n dividerWrapper: {\n marginLeft: '12px',\n alignSelf: 'stretch'\n },\n divider: {\n borderColor: 'rgba(0,0,0,0.12)'\n },\n relevanceBadge: {\n marginLeft: '12px'\n }\n});\n","import React from 'react';\nimport {checkMatchRuleSummaryRelevance, Entity, Match, Metadata} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport Divider from '@mui/material/Divider';\n\nimport ProfileCard from '../ProfileCard/ProfileCard';\nimport MatchRulesBlock from '../MatchRulesBlock/MatchRulesBlock';\nimport {RelevanceScoreBadge} from '../RelevanceScoreBadge/RelevanceScoreBadge';\nimport {useStyles} from './styles';\n\ntype Props = {\n entitiesMap: {\n [key: string]: Pick<Entity, 'uri' | 'type' | 'label'>;\n };\n entity: Entity;\n match: Match;\n metadata: Metadata;\n children?: React.ReactNode;\n className?: string;\n};\n\nexport const ProfileMatchCard = ({children, entitiesMap, entity, match, metadata, className}: Props) => {\n const styles = useStyles();\n const showRelevanceBadge = match.matchRuleSummaries?.some(checkMatchRuleSummaryRelevance);\n return (\n <div className={classnames(styles.root, className)}>\n <div className={styles.profileCardWrapper}>\n <ProfileCard entity={match.object} classes={{container: styles.profileCardContainer}} />\n {children}\n </div>\n <div className={styles.rulesContainer}>\n {match.matchRules && (\n <MatchRulesBlock match={match} metadata={metadata} entitiesMap={entitiesMap} entity={entity} />\n )}\n {showRelevanceBadge && (\n <>\n <div className={styles.dividerWrapper}>\n <Divider orientation=\"vertical\" className={styles.divider} />\n </div>\n <RelevanceScoreBadge\n className={styles.relevanceBadge}\n matchRuleSummaries={match.matchRuleSummaries}\n />\n </>\n )}\n </div>\n </div>\n );\n};\n","export const scroll = (element) => element && element.scrollIntoView({block: 'end', behavior: 'smooth'});\n\nexport const clearScrollTimer = (scrollTimer) => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n};\n\nexport const isScrolledIntoView = (element, scrollableParent) => {\n if (element && scrollableParent) {\n const elemTop = element.offsetTop;\n const elemBottom = element.offsetTop + element.clientHeight;\n const {clientHeight, scrollTop} = scrollableParent;\n return elemTop >= 0 && elemBottom > scrollTop && elemBottom < scrollTop + clientHeight;\n }\n};\n","import {alpha} from '@mui/material/styles';\nimport {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => {\n return {\n '@keyframes animate': {\n from: {background: 'transparent'},\n '66%': {background: '#f2e68e'},\n '100%': {background: 'transparent'}\n },\n\n highlighted: {\n animationName: '$animate',\n animationDuration: '3s',\n animationIterationCount: 1\n },\n\n item: {\n display: 'flex',\n minHeight: '40px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n flexDirection: 'row',\n\n '&:after': {\n // IE flex & min-height workaround\n content: '',\n minHeight: 'inherit',\n fontSize: 0\n },\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n }\n },\n\n clickable: {\n cursor: 'pointer'\n },\n\n selected: {\n background: alpha(theme.palette.primary.main, 0.12),\n '&:hover': {\n background: alpha(theme.palette.primary.main, 0.24)\n }\n },\n\n inactive: {\n background: theme.inactiveBackground,\n\n '&:hover': {\n background: theme.inactiveHoverBackground\n },\n\n '&$selected': {\n background: theme.inactiveSelectedBackground,\n\n '&:hover': {\n background: theme.inactiveSelectedHoverBackground\n }\n }\n },\n\n justImported: {\n backgroundColor: '#FFFBEB !important'\n },\n\n avatar: {\n marginLeft: '20px'\n },\n\n image: {\n height: '32px',\n width: '32px',\n marginTop: '8px',\n marginBottom: '7px'\n },\n\n info: {\n marginLeft: '20px',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n fontSize: '13px',\n width: '100%',\n overflow: 'hidden',\n overflowWrap: 'break-word',\n wordWrap: 'break-word' // for IE\n },\n\n label: {\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 500,\n color: theme.palette.primary.main,\n marginRight: '17px',\n textDecoration: 'none'\n },\n\n secondaryLabel: {\n marginRight: '12px'\n },\n\n businessCard: {\n color: 'rgba(0, 0, 0, 0.54)'\n },\n\n secondRow: {\n display: 'flex',\n marginTop: '2px',\n alignItems: 'center',\n color: 'rgba(0, 0, 0, 0.54)',\n fontSize: '12px'\n }\n };\n});\n","import React, {useRef} from 'react';\nimport classnames from 'classnames';\nimport {prop} from 'ramda';\nimport {\n Entity,\n getBusinessCardAttributesText,\n getEntityId,\n getEntityUriForLink,\n getLabel,\n isActiveObject\n} from '@reltio/mdm-sdk';\nimport EntityTypeBadge from '../EntityTypeBadge/EntityTypeBadge';\nimport EntityUriLink from '../EntityUriLink/EntityUriLink';\nimport EntityAvatar from '../EntityAvatar/EntityAvatar';\nimport {ImportModes} from '../ImportButton/ImportButton';\nimport {clearScrollTimer, isScrolledIntoView, scroll} from './helpers';\nimport {useDidUpdateEffect} from '../../hooks';\nimport {useMdmMetadata} from '../../contexts';\nimport {useStyles} from './styles';\n\nconst SECOND_SCROLL_PAUSE = 1000;\n\ntype Props = {\n entities: Entity[];\n entityToHighlight?: string;\n selectedEntityUri?: string;\n onEntityClick?: (entityUri: string) => void;\n onEntityHover?: (entityUri: string) => void;\n entitiesImportStatus?: {entityUri: string};\n entityButtonsRenderer?: (entity: Entity) => void;\n};\n\nconst ProfilesList = ({\n entities,\n entityToHighlight,\n selectedEntityUri,\n onEntityClick,\n onEntityHover,\n entitiesImportStatus,\n entityButtonsRenderer\n}: Props) => {\n const styles = useStyles();\n\n const list = useRef(null);\n const scrollTimer = useRef(null);\n\n const metadata = useMdmMetadata();\n\n useDidUpdateEffect(() => {\n if (entityToHighlight) {\n const element = list.current?.querySelectorAll(`[data-entity-uri='${entityToHighlight}']`);\n clearScrollTimer(scrollTimer.current);\n if (element?.length > 0) {\n const scrollableParent = list.current?.parentElement;\n if (!isScrolledIntoView(element[0], scrollableParent)) {\n scroll(element[0]);\n scrollTimer.current = setTimeout(() => {\n if (!isScrolledIntoView(element[0], scrollableParent)) {\n scroll(element[0]);\n }\n }, SECOND_SCROLL_PAUSE);\n }\n }\n }\n\n return () => {\n clearScrollTimer(scrollTimer.current);\n };\n }, [entityToHighlight]);\n\n return (\n <div ref={list}>\n {(entities || []).map((entity) => {\n const label = getLabel(entity.label);\n const secondaryLabel = entity.secondaryLabel;\n const businessCardText = getBusinessCardAttributesText(metadata, entity);\n const isActive = isActiveObject(entity);\n const entityUri = entity.uri;\n const entityUriForLink = getEntityUriForLink(entity);\n\n const importStatus = prop(entityUri, entitiesImportStatus);\n\n return (\n <div\n key={entityUri}\n className={classnames(styles.item, {\n [styles.clickable]: !!onEntityClick,\n [styles.selected]: entityUri === selectedEntityUri,\n [styles.highlighted]: entityUri === entityToHighlight,\n [styles.inactive]: !isActive,\n [styles.justImported]: importStatus === ImportModes.SUCCESS\n })}\n onClick={onEntityClick ? () => onEntityClick(entityUri) : undefined}\n onMouseEnter={onEntityHover ? () => onEntityHover(entityUri) : undefined}\n onMouseLeave={onEntityHover ? () => onEntityHover(null) : undefined}\n data-entity-uri={entityUri}\n >\n <EntityAvatar entity={entity} avatarClassName={styles.avatar} imageClassName={styles.image} />\n <div className={styles.info}>\n <div>\n <EntityUriLink value={entityUriForLink} className={styles.label}>\n {label}\n </EntityUriLink>\n {secondaryLabel && <span className={styles.secondaryLabel}>{secondaryLabel} </span>}\n {businessCardText && <span className={styles.businessCard}>{businessCardText}</span>}\n </div>\n <div className={styles.secondRow}>\n <EntityTypeBadge entity={entity} />\n <div>{getEntityId(entity)}</div>\n </div>\n </div>\n {entityButtonsRenderer && entityButtonsRenderer(entity)}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default ProfilesList;\n","// very simple className utility for creating a classname string...\n// Falsy arguments are ignored:\n//\n// const active = true\n// const className = classnames(\n// \"class1\",\n// !active && \"class2\",\n// active && \"class3\"\n// ); // returns -> class1 class3\";\n//\nexport default function classnames(...classes) {\n // Use Boolean constructor as a filter callback\n // Allows for loose type truthy/falsey checks\n // Boolean(\"\") === false;\n // Boolean(false) === false;\n // Boolean(undefined) === false;\n // Boolean(null) === false;\n // Boolean(0) === false;\n // Boolean(\"classname\") === true;\n return classes.filter(Boolean).join(' ');\n}\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n '@global .rst__node': {\n minWidth: '100%',\n whiteSpace: 'nowrap',\n position: 'relative',\n textAlign: 'left'\n },\n\n '@global .rst__node.rst__rtl': {\n textAlign: 'right'\n },\n\n '@global .rst__nodeContent': {\n position: 'absolute',\n top: 0,\n bottom: 0\n },\n\n /* ==========================================================================\n Scaffold\n \n Line-overlaid blocks used for showing the tree structure\n ========================================================================== */\n '@global .rst__lineBlock, .rst__absoluteLineBlock': {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n\n '@global .rst__absoluteLineBlock': {\n position: 'absolute',\n top: 0\n },\n\n '@global .rst__lineHalfHorizontalRight::before, .rst__lineFullVertical::after, .rst__lineHalfVerticalTop::after, .rst__lineHalfVerticalBottom::after':\n {\n position: 'absolute',\n content: '',\n backgroundColor: 'black'\n },\n\n /**\n * +-----+\n * | |\n * | +--+\n * | |\n * +-----+\n */\n '@global .rst__lineHalfHorizontalRight::before': {\n height: '1px',\n top: '50%',\n right: 0,\n width: '50%'\n },\n\n '@global .rst__rtl.rst__lineHalfHorizontalRight::before': {\n left: 0,\n right: 'initial'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__lineFullVertical::after, .rst__lineHalfVerticalTop::after, .rst__lineHalfVerticalBottom::after': {\n width: '1px',\n left: '50%',\n top: 0,\n height: '100%'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__rtl.rst__lineFullVertical::after, .rst__rtl.rst__lineHalfVerticalTop::after, .rst__rtl.rst__lineHalfVerticalBottom::after':\n {\n right: '50%',\n left: 'initial'\n },\n\n /**\n * +-----+\n * | | |\n * | + |\n * | |\n * +-----+\n */\n '@global .rst__lineHalfVerticalTop::after': {\n height: '50%'\n },\n\n /**\n * +-----+\n * | |\n * | + |\n * | | |\n * +-----+\n */\n '@global .rst__lineHalfVerticalBottom::after': {\n top: 'auto',\n bottom: 0,\n height: '50%'\n },\n\n /* Highlight line for pointing to dragged row destination\n ========================================================================== */\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__highlightLineVertical': {\n zIndex: 3\n },\n '@global .rst__highlightLineVertical::before': {\n position: 'absolute',\n content: '',\n backgroundColor: '#36c2f6',\n width: '8px',\n marginLeft: '-4px',\n left: '50%',\n top: 0,\n height: '100%'\n },\n\n '@global .rst__rtl.rst__highlightLineVertical::before': {\n marginLeft: 'initial',\n marginRight: '-4px',\n left: 'initial',\n right: '50%'\n },\n\n '@keyframes arrow-pulse': {\n '0%': {\n transform: 'translate(0, 0)',\n opacity: 0\n },\n '30%': {\n transform: 'translate(0, 300%)',\n opacity: 1\n },\n '70%': {\n transform: 'translate(0, 700%)',\n opacity: 1\n },\n '100%': {\n transform: 'translate(0, 1000%)',\n opacity: 0\n }\n },\n '@global .rst__highlightLineVertical::after': {\n content: '',\n position: 'absolute',\n height: 0,\n marginLeft: '-4px',\n left: '50%',\n top: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid white',\n animation: 'arrow-pulse 1s infinite linear both'\n },\n\n '@global .rst__rtl.rst__highlightLineVertical::after': {\n marginLeft: 'initial',\n marginRight: '-4px',\n right: '50%',\n left: 'initial'\n },\n\n /**\n * +-----+\n * | |\n * | +--+\n * | | |\n * +--+--+\n */\n '@global .rst__highlightTopLeftCorner::before': {\n zIndex: 3,\n content: '',\n position: 'absolute',\n borderTop: 'solid 8px #36c2f6',\n borderLeft: 'solid 8px #36c2f6',\n boxSizing: 'border-box',\n height: 'calc(50% + 4px)',\n top: '50%',\n marginTop: '-4px',\n right: 0,\n width: 'calc(50% + 4px)'\n },\n\n '@global .rst__rtl.rst__highlightTopLeftCorner::before': {\n borderRight: 'solid 8px #36c2f6',\n borderLeft: 'none',\n left: 0,\n right: 'initial'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | +->|\n * +-----+\n */\n '@global .rst__highlightBottomLeftCorner': {\n zIndex: 3\n },\n '@global .rst__highlightBottomLeftCorner::before': {\n content: '',\n position: 'absolute',\n borderBottom: 'solid 8px #36c2f6',\n borderLeft: 'solid 8px #36c2f6',\n boxSizing: 'border-box',\n height: 'calc(100% + 4px)',\n top: 0,\n right: '12px',\n width: 'calc(50% - 8px)'\n },\n\n '@global .rst__rtl.rst__highlightBottomLeftCorner::before': {\n borderRight: 'solid 8px #36c2f6',\n borderLeft: 'none',\n left: '12px',\n right: 'initial'\n },\n\n '@global .rst__highlightBottomLeftCorner::after': {\n content: '',\n position: 'absolute',\n height: 0,\n right: 0,\n top: '100%',\n marginTop: '-12px',\n borderTop: '12px solid transparent',\n borderBottom: '12px solid transparent',\n borderLeft: '12px solid #36c2f6'\n },\n\n '@global .rst__rtl.rst__highlightBottomLeftCorner::after': {\n left: 0,\n right: 'initial',\n borderRight: '12px solid #36c2f6',\n borderLeft: 'none'\n }\n}));\n","import React, {Children, cloneElement} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from './utils/classnames';\nimport {useStyles} from './treeNodeStyle';\n\nconst TreeNode = ({\n children,\n listIndex,\n swapFrom,\n swapLength,\n swapDepth,\n scaffoldBlockPxWidth,\n lowerSiblingCounts,\n connectDropTarget,\n isOver,\n draggedNode,\n canDrop,\n treeIndex,\n /* eslint-disable */\n treeId, // Delete from otherProps\n getPrevRow, // Delete from otherProps\n node, // Delete from otherProps\n path, // Delete from otherProps\n /* eslint-enable */\n rowDirection,\n ...otherProps\n}) => {\n useStyles();\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n let lineClass = '';\n if (lowerSiblingCount > 0) {\n // At this level in the tree, the nodes had sibling nodes further down\n\n if (listIndex === 0) {\n // Top-left corner of the tree\n // +-----+\n // | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineHalfVerticalBottom';\n } else if (i === scaffoldBlockCount - 1) {\n // Last scaffold block in the row, right before the row content\n // +--+--+\n // | | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineFullVertical';\n } else {\n // Simply connecting the line extending down to the next sibling on this level\n // +--+--+\n // | | |\n // | | |\n // | | |\n // +--+--+\n lineClass = 'rst__lineFullVertical';\n }\n } else if (listIndex === 0) {\n // Top-left corner of the tree, but has no siblings\n // +-----+\n // | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfHorizontalRight';\n } else if (i === scaffoldBlockCount - 1) {\n // The last or only node in this level of the tree\n // +--+--+\n // | | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfVerticalTop rst__lineHalfHorizontalRight';\n }\n\n scaffold.push(\n <div\n key={`pre_${1 + i}`}\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineBlock', lineClass, rowDirectionClass)}\n />\n );\n\n if (treeIndex !== listIndex && i === swapDepth) {\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = '';\n\n if (listIndex === swapFrom + swapLength - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner';\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner';\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical';\n }\n\n let style;\n if (rowDirection === 'rtl') {\n style = {\n width: scaffoldBlockPxWidth,\n right: scaffoldBlockPxWidth * i\n };\n } else {\n // Default ltr\n style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i\n };\n }\n\n scaffold.push(\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n style={style}\n className={classnames('rst__absoluteLineBlock', highlightLineClass, rowDirectionClass)}\n />\n );\n }\n });\n\n let style;\n if (rowDirection === 'rtl') {\n style = {right: scaffoldBlockPxWidth * scaffoldBlockCount};\n } else {\n // Default ltr\n style = {left: scaffoldBlockPxWidth * scaffoldBlockCount};\n }\n\n return connectDropTarget(\n <div {...otherProps} className={classnames('rst__node', rowDirectionClass)}>\n {scaffold}\n\n <div className=\"rst__nodeContent\" style={style}>\n {Children.map(children, (child) =>\n cloneElement(child, {\n isOver,\n canDrop,\n draggedNode\n })\n )}\n </div>\n </div>\n );\n};\n\nTreeNode.defaultProps = {\n swapFrom: null,\n swapDepth: null,\n swapLength: null,\n canDrop: false,\n draggedNode: null,\n rowDirection: 'ltr'\n};\n\nTreeNode.propTypes = {\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n swapFrom: PropTypes.number,\n swapDepth: PropTypes.number,\n swapLength: PropTypes.number,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n lowerSiblingCounts: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n listIndex: PropTypes.number.isRequired,\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n\n // used in dndManager\n getPrevRow: PropTypes.func.isRequired,\n node: PropTypes.shape({}).isRequired,\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default TreeNode;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {isDescendant} from './utils/tree-data-utils';\nimport classnames from './utils/classnames';\n//import {useStyles} from './nodeRendererDefaultStyle';\n\nconst NodeRendererDefault = ({\n scaffoldBlockPxWidth,\n toggleChildrenVisibility,\n connectDragPreview,\n connectDragSource,\n isDragging,\n canDrop,\n canDrag,\n node,\n title,\n subtitle,\n draggedNode,\n path,\n treeIndex,\n isSearchMatch,\n isSearchFocus,\n buttons,\n className,\n style,\n didDrop,\n /* eslint-disable */\n treeId,\n isOver, // Not needed, but preserved for other renderers\n parentNode, // Needed for dndManager\n /* eslint-enable */\n rowDirection,\n ...otherProps\n}) => {\n //useStyles();\n const nodeTitle = title || node.title;\n const nodeSubtitle = subtitle || node.subtitle;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n let handle;\n if (canDrag) {\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n handle = (\n <div className=\"rst__loadingHandle\">\n <div className=\"rst__loadingCircle\">\n {[...new Array(12)].map((_, index) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n className={classnames('rst__loadingCirclePoint', rowDirectionClass)}\n />\n ))}\n </div>\n </div>\n );\n } else {\n // Show the handle used to initiate a drag-and-drop\n handle = connectDragSource(<div className=\"rst__moveHandle\" />, {\n dropEffect: 'copy'\n });\n }\n }\n\n const isDraggedDescendant = draggedNode && isDescendant(draggedNode, node);\n const isLandingPadActive = !didDrop && isDragging;\n\n let buttonStyle = {left: -0.5 * scaffoldBlockPxWidth};\n if (rowDirection === 'rtl') {\n buttonStyle = {right: -0.5 * scaffoldBlockPxWidth};\n }\n\n return (\n <div style={{height: '100%'}} {...otherProps}>\n {toggleChildrenVisibility &&\n node.children &&\n (node.children.length > 0 || typeof node.children === 'function') && (\n <div>\n <button\n type=\"button\"\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n node.expanded ? 'rst__collapseButton' : 'rst__expandButton',\n rowDirectionClass\n )}\n style={buttonStyle}\n onClick={() =>\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n })\n }\n />\n\n {node.expanded && !isDragging && (\n <div\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineChildren', rowDirectionClass)}\n />\n )}\n </div>\n )}\n\n <div className={classnames('rst__rowWrapper', rowDirectionClass)}>\n {/* Set the row preview to be used during drag and drop */}\n {connectDragPreview(\n <div\n className={classnames(\n 'rst__row',\n isLandingPadActive && 'rst__rowLandingPad',\n isLandingPadActive && !canDrop && 'rst__rowCancelPad',\n isSearchMatch && 'rst__rowSearchMatch',\n isSearchFocus && 'rst__rowSearchFocus',\n rowDirectionClass,\n className\n )}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n ...style\n }}\n >\n {handle}\n\n <div\n className={classnames(\n 'rst__rowContents',\n !canDrag && 'rst__rowContentsDragDisabled',\n rowDirectionClass\n )}\n >\n <div className={classnames('rst__rowLabel', rowDirectionClass)}>\n <span\n className={classnames(\n 'rst__rowTitle',\n node.subtitle && 'rst__rowTitleWithSubtitle'\n )}\n >\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </span>\n\n {nodeSubtitle && (\n <span className=\"rst__rowSubtitle\">\n {typeof nodeSubtitle === 'function'\n ? nodeSubtitle({\n node,\n path,\n treeIndex\n })\n : nodeSubtitle}\n </span>\n )}\n </div>\n\n <div className=\"rst__rowToolbar\">\n {buttons.map((btn, index) => (\n <div\n key={index} // eslint-disable-line react/no-array-index-key\n className=\"rst__toolbarButton\"\n >\n {btn}\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nNodeRendererDefault.defaultProps = {\n isSearchMatch: false,\n isSearchFocus: false,\n canDrag: false,\n toggleChildrenVisibility: null,\n buttons: [],\n className: '',\n style: {},\n parentNode: null,\n draggedNode: null,\n canDrop: false,\n title: null,\n subtitle: null,\n rowDirection: 'ltr'\n};\n\nNodeRendererDefault.propTypes = {\n node: PropTypes.shape({}).isRequired,\n title: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n subtitle: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n isSearchMatch: PropTypes.bool,\n isSearchFocus: PropTypes.bool,\n canDrag: PropTypes.bool,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n toggleChildrenVisibility: PropTypes.func,\n buttons: PropTypes.arrayOf(PropTypes.node),\n className: PropTypes.string,\n style: PropTypes.shape({}),\n\n // Drag and drop API functions\n // Drag source\n connectDragPreview: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n parentNode: PropTypes.shape({}), // Needed for dndManager\n isDragging: PropTypes.bool.isRequired,\n didDrop: PropTypes.bool.isRequired,\n draggedNode: PropTypes.shape({}),\n // Drop target\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default NodeRendererDefault;\n","import React, {Children, cloneElement, Component} from 'react';\nimport PropTypes from 'prop-types';\n\nclass TreePlaceholder extends Component {\n render() {\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {children, connectDropTarget, treeId, drop, ...otherProps} = this.props;\n return connectDropTarget(\n <div>\n {Children.map(children, (child) =>\n cloneElement(child, {\n ...otherProps\n })\n )}\n </div>\n );\n }\n}\n\nTreePlaceholder.defaultProps = {\n canDrop: false,\n draggedNode: null\n};\n\nTreePlaceholder.propTypes = {\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n treeId: PropTypes.string.isRequired,\n drop: PropTypes.func.isRequired\n};\n\nexport default TreePlaceholder;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n '@global .rst__placeholder': {\n position: 'relative',\n height: '68px',\n maxWidth: '300px',\n padding: '10px'\n },\n '@global .rst__placeholder, .rst__placeholder > *': {\n boxSizing: 'border-box'\n },\n '@global .rst__placeholder::before': {\n border: '3px dashed #d9d9d9',\n content: '',\n position: 'absolute',\n top: '5px',\n right: '5px',\n bottom: '5px',\n left: '5px',\n zIndex: -1\n },\n\n /**\n * The outline of where the element will go if dropped, displayed while dragging\n */\n '@global .rst__placeholderLandingPad, .rst__placeholderCancelPad': {\n border: 'none !important',\n boxShadow: 'none !important',\n outline: 'none !important'\n },\n '@global .rst__placeholderLandingPad *, .rst__placeholderCancelPad *': {\n opacity: '0 !important'\n },\n '@global .rst__placeholderLandingPad::before, .rst__placeholderCancelPad::before': {\n backgroundColor: 'lightblue',\n borderColor: 'white'\n },\n\n /**\n * Alternate appearance of the landing pad when the dragged location is invalid\n */\n '@global .rst__placeholderCancelPad::before': {\n backgroundColor: '#e6a8ad'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from './utils/classnames';\nimport {useStyles} from './placeholderRendererDefaultStyle';\n\nconst PlaceholderRendererDefault = ({isOver, canDrop}) => {\n useStyles();\n return (\n <div\n className={classnames(\n 'rst__placeholder',\n canDrop && 'rst__placeholderLandingPad',\n canDrop && !isOver && 'rst__placeholderCancelPad'\n )}\n />\n );\n};\n\nPlaceholderRendererDefault.defaultProps = {\n isOver: false,\n canDrop: false\n};\n\nPlaceholderRendererDefault.propTypes = {\n isOver: PropTypes.bool,\n canDrop: PropTypes.bool\n};\n\nexport default PlaceholderRendererDefault;\n","import {insertNode, getDescendantCount, getFlatDataFromTree} from './tree-data-utils';\n\nconst memoize = (f) => {\n let savedArgsArray = [];\n let savedKeysArray = [];\n let savedResult = null;\n\n return (args) => {\n const keysArray = Object.keys(args).sort();\n const argsArray = keysArray.map((key) => args[key]);\n\n // If the arguments for the last insert operation are different than this time,\n // recalculate the result\n if (\n argsArray.length !== savedArgsArray.length ||\n argsArray.some((arg, index) => arg !== savedArgsArray[index]) ||\n keysArray.some((key, index) => key !== savedKeysArray[index])\n ) {\n savedArgsArray = argsArray;\n savedKeysArray = keysArray;\n savedResult = f(args);\n }\n\n return savedResult;\n };\n};\n\nexport const memoizedInsertNode = memoize(insertNode);\nexport const memoizedGetFlatDataFromTree = memoize(getFlatDataFromTree);\nexport const memoizedGetDescendantCount = memoize(getDescendantCount);\n","import {DragSource as dragSource, DropTarget as dropTarget} from 'react-dnd';\nimport {findDOMNode} from 'react-dom';\nimport {equals} from 'ramda';\nimport {getDepth} from './tree-data-utils';\nimport {memoizedInsertNode} from './memoized-tree-data-utils';\n\nexport default class DndManager {\n constructor(treeRef) {\n this.treeRef = treeRef;\n this.resetDragVariables();\n }\n\n get startDrag() {\n return this.treeRef.startDrag;\n }\n\n get dragHover() {\n return this.treeRef.dragHover;\n }\n\n get endDrag() {\n return this.treeRef.endDrag;\n }\n\n get drop() {\n return this.treeRef.drop;\n }\n\n get treeId() {\n return this.treeRef.treeId;\n }\n\n get dndType() {\n return this.treeRef.dndType;\n }\n\n get treeData() {\n return this.treeRef.state.draggingTreeData || this.treeRef.props.treeData;\n }\n\n get getNodeKey() {\n return this.treeRef.props.getNodeKey;\n }\n\n get customCanDrop() {\n return this.treeRef.props.canDrop;\n }\n\n get maxDepth() {\n return this.treeRef.props.maxDepth;\n }\n\n resetDragVariables() {\n this.lastDropTargetNode = null;\n this.lastDropTargetDepth = null;\n this.hoverProps = null;\n this.lastCanDropResult = null;\n this.lastCanDropProps = null;\n this.shouldSkipMoreFrames = false;\n this.rafId = null;\n }\n getTargetDepth(dropTargetProps, monitor, component) {\n let dropTargetDepth = 0;\n\n const rowAbove = dropTargetProps.getPrevRow();\n if (rowAbove) {\n let {path} = rowAbove;\n const aboveNodeCannotHaveChildren = !this.treeRef.canNodeHaveChildren(rowAbove.node);\n if (aboveNodeCannotHaveChildren) {\n path = path.slice(0, path.length - 1);\n }\n\n // Limit the length of the path to the deepest possible\n dropTargetDepth = Math.min(path.length, dropTargetProps.path.length);\n }\n\n let blocksOffset;\n let dragSourceInitialDepth = (monitor.getItem().path || []).length;\n\n // When adding node from external source\n if (monitor.getItem().treeId !== this.treeId) {\n // Ignore the tree depth of the source, if it had any to begin with\n dragSourceInitialDepth = 0;\n\n if (component) {\n const relativePosition = findDOMNode(component).getBoundingClientRect(); // eslint-disable-line react/no-find-dom-node\n const leftShift = monitor.getSourceClientOffset().x - relativePosition.left;\n blocksOffset = Math.round(leftShift / dropTargetProps.scaffoldBlockPxWidth);\n } else {\n blocksOffset = dropTargetProps.path.length;\n }\n } else {\n // handle row direction support\n const direction = dropTargetProps.rowDirection === 'rtl' ? -1 : 1;\n\n blocksOffset = Math.round(\n (direction * monitor.getDifferenceFromInitialOffset().x) / dropTargetProps.scaffoldBlockPxWidth\n );\n }\n\n let targetDepth = Math.min(dropTargetDepth, Math.max(0, dragSourceInitialDepth + blocksOffset - 1));\n\n // If a maxDepth is defined, constrain the target depth\n if (typeof this.maxDepth !== 'undefined' && this.maxDepth !== null) {\n const draggedNode = monitor.getItem().node;\n const draggedChildDepth = getDepth(draggedNode);\n\n targetDepth = Math.max(0, Math.min(targetDepth, this.maxDepth - draggedChildDepth - 1));\n }\n\n return targetDepth;\n }\n\n canDrop(dropTargetProps, monitor) {\n if (!monitor.isOver()) {\n return false;\n }\n\n const rowAbove = dropTargetProps.getPrevRow();\n const abovePath = rowAbove ? rowAbove.path : [];\n const aboveNode = rowAbove ? rowAbove.node : {};\n const blocksOffset = Math.round(\n monitor.getDifferenceFromInitialOffset().x / dropTargetProps.scaffoldBlockPxWidth\n );\n const newCanDropProps = {\n nodeId: dropTargetProps.node.nodeId !== undefined ? dropTargetProps.node.nodeId : dropTargetProps.node,\n rowAbove,\n abovePath,\n aboveNodeId: aboveNode.nodeId !== undefined ? aboveNode.nodeId : aboveNode,\n blocksOffset\n };\n if (equals(this.lastCanDropProps, newCanDropProps)) {\n return this.lastCanDropResult;\n }\n this.lastCanDropProps = newCanDropProps;\n const targetDepth = this.getTargetDepth(dropTargetProps, monitor, null);\n\n // Cannot drop if we're adding to the children of the row above and\n // the row above is a function\n if (targetDepth >= abovePath.length && typeof aboveNode.children === 'function') {\n return (this.lastCanDropResult = false);\n }\n\n if (typeof this.customCanDrop === 'function') {\n const {node} = monitor.getItem();\n const addedResult = memoizedInsertNode({\n treeData: this.treeData,\n newNode: node,\n depth: targetDepth,\n getNodeKey: this.getNodeKey,\n minimumTreeIndex: dropTargetProps.listIndex,\n expandParent: true\n });\n\n return (this.lastCanDropResult = this.customCanDrop({\n node,\n prevPath: monitor.getItem().path,\n prevParent: monitor.getItem().parentNode,\n prevTreeIndex: monitor.getItem().treeIndex, // Equals -1 when dragged from external tree\n nextPath: addedResult.path,\n nextParent: addedResult.parentNode,\n nextTreeIndex: addedResult.treeIndex\n }));\n }\n return (this.lastCanDropResult = true);\n }\n\n wrapSource(el) {\n const nodeDragSource = {\n beginDrag: (props) => {\n this.startDrag(props);\n\n return {\n node: props.node,\n parentNode: props.parentNode,\n path: props.path,\n treeIndex: props.treeIndex,\n treeId: props.treeId\n };\n },\n\n endDrag: (props, monitor) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n this.endDrag(monitor.getDropResult());\n this.resetDragVariables();\n },\n\n isDragging: (props, monitor) => {\n const dropTargetNode = monitor.getItem().node;\n const draggedNode = props.node;\n\n return draggedNode === dropTargetNode;\n }\n };\n\n function nodeDragSourcePropInjection(connect, monitor) {\n return {\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n didDrop: monitor.didDrop()\n };\n }\n\n return dragSource(this.dndType, nodeDragSource, nodeDragSourcePropInjection)(el);\n }\n hoverHandler = () => {\n if (this.hoverProps === null) {\n return;\n }\n const {dropTargetProps, monitor, component} = this.hoverProps;\n\n const item = monitor.getItem();\n if (!item) {\n return;\n }\n const targetDepth = this.getTargetDepth(dropTargetProps, monitor, component);\n const draggedNode = item.node;\n const needsRedraw =\n dropTargetProps.node !== this.lastDropTargetNode || targetDepth !== this.lastDropTargetDepth;\n\n if (!needsRedraw) {\n return;\n }\n this.lastDropTargetNode = dropTargetProps.node;\n this.lastDropTargetDepth = targetDepth;\n\n this.dragHover({\n node: draggedNode,\n path: item.path,\n minimumTreeIndex: dropTargetProps.listIndex,\n depth: targetDepth\n });\n\n this.hoverProps = null;\n };\n\n deferredCallHoverHandler = () => {\n if (this.shouldSkipMoreFrames) {\n this.shouldSkipMoreFrames = false;\n this.rafId = requestAnimationFrame(this.deferredCallHoverHandler);\n return;\n }\n this.rafId = null;\n this.hoverHandler();\n };\n\n wrapTarget(el) {\n const nodeDropTarget = {\n drop: (dropTargetProps, monitor, component) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n const result = {\n node: monitor.getItem().node,\n path: monitor.getItem().path,\n treeIndex: monitor.getItem().treeIndex,\n treeId: this.treeId,\n minimumTreeIndex: dropTargetProps.treeIndex,\n depth: this.getTargetDepth(dropTargetProps, monitor, component)\n };\n this.lastDropTargetNode = null;\n this.drop(result);\n\n return result;\n },\n\n hover: (dropTargetProps, monitor, component) => {\n if (this.rafId) {\n this.shouldSkipMoreFrames = true;\n return;\n }\n this.shouldSkipMoreFrames = false;\n this.hoverProps = {\n dropTargetProps,\n monitor,\n component\n };\n this.rafId = requestAnimationFrame(this.deferredCallHoverHandler);\n },\n\n canDrop: this.canDrop.bind(this)\n };\n\n function nodeDropTargetPropInjection(connect, monitor) {\n const dragged = monitor.getItem();\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n draggedNode: dragged ? dragged.node : null\n };\n }\n\n return dropTarget(this.dndType, nodeDropTarget, nodeDropTargetPropInjection)(el);\n }\n\n wrapPlaceholder(el) {\n const placeholderDropTarget = {\n drop: (dropTargetProps, monitor) => {\n const {node, path, treeIndex} = monitor.getItem();\n const result = {\n node,\n path,\n treeIndex,\n treeId: this.treeId,\n minimumTreeIndex: 0,\n depth: 0\n };\n\n this.drop(result);\n\n return result;\n }\n };\n\n function placeholderPropInjection(connect, monitor) {\n const dragged = monitor.getItem();\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n draggedNode: dragged ? dragged.node : null\n };\n }\n\n return dropTarget(this.dndType, placeholderDropTarget, placeholderPropInjection)(el);\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {AutoSizer, List} from 'react-virtualized';\nimport {equals, append, when, always, gt, uniqWith, eqBy, pipe} from 'ramda';\nimport withScrolling, {\n createScrollingComponent,\n createVerticalStrength,\n createHorizontalStrength\n} from 'frontend-collective-react-dnd-scrollzone';\nimport {DndContext} from 'react-dnd';\nimport {polyfill} from 'react-lifecycles-compat';\nimport withStyles from '@mui/styles/withStyles';\nimport {DragAndDrop} from '../DragAndDrop/DragAndDrop';\nimport TreeNode from './tree-node';\nimport NodeRendererDefault from './node-renderer-default';\nimport TreePlaceholder from './tree-placeholder';\nimport PlaceholderRendererDefault from './placeholder-renderer-default';\nimport {walk, changeNodeAtPath, removeNode, insertNode, find, toggleExpandedForAll} from './utils/tree-data-utils';\nimport {\n memoizedInsertNode,\n memoizedGetFlatDataFromTree,\n memoizedGetDescendantCount\n} from './utils/memoized-tree-data-utils';\nimport {slideRows} from './utils/generic-utils';\nimport {defaultGetNodeKey, defaultSearchMethod} from './utils/default-handlers';\nimport DndManager from './utils/dnd-manager';\nimport classnames from './utils/classnames';\nimport {styles} from './reactSortableTreeStyles';\n\nlet treeIdCounter = 1;\n\nconst mergeTheme = (props) => {\n const merged = {\n ...props,\n style: {...props.theme.style, ...props.style},\n innerStyle: {...props.theme.innerStyle, ...props.innerStyle},\n reactVirtualizedListProps: {\n ...props.theme.reactVirtualizedListProps,\n ...props.reactVirtualizedListProps\n }\n };\n\n const overridableDefaults = {\n nodeContentRenderer: NodeRendererDefault,\n placeholderRenderer: PlaceholderRendererDefault,\n rowHeight: 62,\n scaffoldBlockPxWidth: 44,\n slideRegionSize: 100,\n treeNodeRenderer: TreeNode\n };\n Object.keys(overridableDefaults).forEach((propKey) => {\n // If prop has been specified, do not change it\n // If prop is specified in theme, use the theme setting\n // If all else fails, fall back to the default\n if (props[propKey] === null) {\n merged[propKey] =\n typeof props.theme[propKey] !== 'undefined' ? props.theme[propKey] : overridableDefaults[propKey];\n }\n });\n\n return merged;\n};\n\nclass ReactSortableTree extends Component {\n constructor(props) {\n super(props);\n\n const {dndType, nodeContentRenderer, treeNodeRenderer, isVirtualized, slideRegionSize} = mergeTheme(props);\n\n this.dndManager = new DndManager(this);\n\n // Wrapping classes for use with react-dnd\n this.treeId = `rst__${treeIdCounter}`;\n treeIdCounter += 1;\n this.dndType = dndType || this.treeId;\n this.nodeContentRenderer = this.dndManager.wrapSource(nodeContentRenderer);\n this.treePlaceholderRenderer = this.dndManager.wrapPlaceholder(TreePlaceholder);\n this.treeNodeRenderer = this.dndManager.wrapTarget(treeNodeRenderer);\n\n // Prepare scroll-on-drag options for this list\n if (isVirtualized) {\n this.scrollZoneVirtualList = (createScrollingComponent || withScrolling)(List);\n this.vStrength = createVerticalStrength(slideRegionSize);\n this.hStrength = createHorizontalStrength(slideRegionSize);\n }\n\n this.state = {\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n searchMatches: [],\n searchFocusTreeIndex: null,\n dragging: false,\n draggingExpandedPaths: [],\n ignoreOneTreeUpdate: false,\n\n // props that need to be used in gDSFP or static functions will be stored here\n instanceProps: {\n treeData: this.props.treeData || [],\n searchQuery: null,\n searchFocusOffset: null,\n ignoreTreeChanges: false\n }\n };\n\n this.toggleChildrenVisibility = this.toggleChildrenVisibility.bind(this);\n this.moveNode = this.moveNode.bind(this);\n this.startDrag = this.startDrag.bind(this);\n this.dragHover = this.dragHover.bind(this);\n this.endDrag = this.endDrag.bind(this);\n this.drop = this.drop.bind(this);\n this.handleDndMonitorChange = this.handleDndMonitorChange.bind(this);\n }\n\n componentDidMount() {\n ReactSortableTree.loadLazyChildren(this.props);\n const stateUpdate = ReactSortableTree.search(this.props, this.state, true, true, false);\n this.setState(stateUpdate);\n\n // Hook into react-dnd state changes to detect when the drag ends\n // TODO: This is very brittle, so it needs to be replaced if react-dnd\n // offers a more official way to detect when a drag ends\n this.clearMonitorSubscription = this.props.dragDropManager\n .getMonitor()\n .subscribeToStateChange(this.handleDndMonitorChange);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const {instanceProps} = prevState;\n const newState = {};\n\n if (!equals(instanceProps.searchQuery, nextProps.searchQuery)) {\n Object.assign(newState, ReactSortableTree.search(nextProps, prevState, true, true, false));\n } else if (instanceProps.searchFocusOffset !== nextProps.searchFocusOffset) {\n Object.assign(newState, ReactSortableTree.search(nextProps, prevState, true, true, true));\n }\n\n instanceProps.searchQuery = nextProps.searchQuery;\n instanceProps.searchFocusOffset = nextProps.searchFocusOffset;\n newState.instanceProps = instanceProps;\n\n return newState;\n }\n\n // listen to dragging\n componentDidUpdate(prevProps, prevState) {\n // if it is not the same then call the onDragStateChanged\n if (this.state.dragging !== prevState.dragging) {\n if (this.props.onDragStateChanged) {\n this.props.onDragStateChanged({\n isDragging: this.state.dragging,\n draggedNode: this.state.draggedNode\n });\n }\n }\n if (this.state.dragging) {\n const isTreeDataEqual = equals(this.props.treeData, prevProps.treeData);\n if (!isTreeDataEqual) {\n const {treeData: draggingTreeData} = removeNode({\n treeData: this.props.treeData,\n path: prevState.draggedPath,\n getNodeKey: this.props.getNodeKey\n });\n\n this.setState(({draggingExpandedPaths}) => ({\n draggingTreeData: draggingExpandedPaths.reduce((treeData, path) => {\n let newTree;\n try {\n newTree = changeNodeAtPath({\n treeData,\n path,\n newNode: ({node}) => ({...node, expanded: true}),\n getNodeKey: this.props.getNodeKey\n });\n } catch (e) {\n newTree = treeData;\n }\n return newTree;\n }, draggingTreeData)\n }));\n } else if (this.state.draggingTreeData && prevState.draggingTreeData !== this.state.draggingTreeData) {\n walk({\n treeData: this.state.draggingTreeData,\n getNodeKey: this.props.getNodeKey,\n callback: ({node, path, lowerSiblingCounts, treeIndex}) => {\n if (node.pending && node.expanded) {\n this.props.onLazyLoadChildren({\n node,\n path,\n lowerSiblingCounts,\n treeIndex\n });\n }\n }\n });\n }\n } else if (this.props.treeData !== prevProps.treeData) {\n const isTreeDataEqual = equals(this.props.treeData, prevProps.treeData);\n const {ignoreOneTreeUpdate, instanceProps} = this.state;\n const newState = {};\n if (!isTreeDataEqual) {\n if (ignoreOneTreeUpdate) {\n newState.ignoreOneTreeUpdate = false;\n } else {\n newState.searchFocusTreeIndex = null;\n ReactSortableTree.loadLazyChildren(this.props);\n Object.assign(newState, ReactSortableTree.search(this.props, this.state, false, false, false));\n }\n\n newState.draggingTreeData = null;\n newState.draggedNode = null;\n newState.draggedMinimumTreeIndex = null;\n newState.draggedDepth = null;\n newState.dragging = false;\n newState.draggingExpandedPaths = [];\n newState.instanceProps = {...instanceProps, treeData: this.props.treeData};\n\n this.setState(newState);\n }\n }\n }\n\n componentWillUnmount() {\n this.clearMonitorSubscription();\n }\n\n getRows(treeData) {\n return memoizedGetFlatDataFromTree({\n ignoreCollapsed: true,\n getNodeKey: this.props.getNodeKey,\n treeData\n });\n }\n\n handleDndMonitorChange() {\n const monitor = this.props.dragDropManager.getMonitor();\n // If the drag ends and the tree is still in a mid-drag state,\n // it means that the drag was canceled or the dragSource dropped\n // elsewhere, and we should reset the state of this tree\n if (!monitor.isDragging() && this.state.draggingTreeData) {\n this.endDrag();\n }\n }\n\n toggleChildrenVisibility({node: targetNode, path}) {\n const {instanceProps} = this.state;\n\n const treeData = changeNodeAtPath({\n treeData: instanceProps.treeData,\n path,\n newNode: ({node}) => ({...node, expanded: !node.expanded}),\n getNodeKey: this.props.getNodeKey\n });\n\n this.props.onChange(treeData);\n\n this.props.onVisibilityToggle({\n treeData,\n node: targetNode,\n expanded: !targetNode.expanded,\n path\n });\n }\n\n moveNode({node, path: prevPath, treeIndex: prevTreeIndex, depth, minimumTreeIndex}) {\n const {\n treeData,\n treeIndex,\n path,\n parentNode: nextParentNode\n } = insertNode({\n treeData: this.state.draggingTreeData,\n newNode: node,\n depth,\n minimumTreeIndex,\n expandParent: true,\n getNodeKey: this.props.getNodeKey\n });\n this.setState(\n {\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n dragging: false,\n draggingExpandedPaths: []\n },\n () => {\n this.props.onChange(treeData);\n\n this.props.onMoveNode({\n treeData,\n node,\n treeIndex,\n path,\n nextPath: path,\n nextTreeIndex: treeIndex,\n prevPath,\n prevTreeIndex,\n nextParentNode\n });\n }\n );\n }\n\n // returns the new state after search\n static search(props, state, seekIndex, expand, singleSearch) {\n const {\n onChange,\n getNodeKey,\n searchFinishCallback,\n searchQuery,\n searchMethod,\n searchFocusOffset,\n onlyExpandSearchedNodes\n } = props;\n\n const {instanceProps} = state;\n\n // Skip search if no conditions are specified\n if (!searchQuery && !searchMethod) {\n if (searchFinishCallback) {\n searchFinishCallback([]);\n }\n\n return {searchMatches: []};\n }\n\n const newState = {};\n\n // if onlyExpandSearchedNodes collapse the tree and search\n const {treeData: expandedTreeData, matches: searchMatches} = find({\n getNodeKey,\n treeData: onlyExpandSearchedNodes\n ? toggleExpandedForAll({\n treeData: instanceProps.treeData,\n expanded: false\n })\n : instanceProps.treeData,\n searchQuery,\n searchMethod: searchMethod || defaultSearchMethod,\n searchFocusOffset,\n expandAllMatchPaths: expand && !singleSearch,\n expandFocusMatchPaths: !!expand\n });\n\n // Update the tree with data leaving all paths leading to matching nodes open\n if (expand) {\n newState.ignoreOneTreeUpdate = true; // Prevents infinite loop\n onChange(expandedTreeData);\n }\n\n if (searchFinishCallback) {\n searchFinishCallback(searchMatches);\n }\n\n let searchFocusTreeIndex = null;\n if (seekIndex && searchFocusOffset !== null && searchFocusOffset < searchMatches.length) {\n searchFocusTreeIndex = searchMatches[searchFocusOffset].treeIndex;\n }\n\n newState.searchMatches = searchMatches;\n newState.searchFocusTreeIndex = searchFocusTreeIndex;\n\n return newState;\n }\n\n startDrag({path}) {\n this.setState((prevState) => {\n const {\n treeData: draggingTreeData,\n node: draggedNode,\n treeIndex: draggedMinimumTreeIndex\n } = removeNode({\n treeData: prevState.instanceProps.treeData,\n path,\n getNodeKey: this.props.getNodeKey\n });\n\n return {\n draggingTreeData,\n draggedNode,\n draggedDepth: path.length - 1,\n draggedMinimumTreeIndex,\n draggedPath: path,\n dragging: true\n };\n });\n }\n\n dragHover({node: draggedNode, depth: draggedDepth, minimumTreeIndex: draggedMinimumTreeIndex}) {\n // Ignore this hover if it is at the same position as the last hover\n if (\n this.state.draggedDepth === draggedDepth &&\n this.state.draggedMinimumTreeIndex === draggedMinimumTreeIndex\n ) {\n return;\n }\n this.setState(({draggingTreeData, instanceProps, draggingExpandedPaths}) => {\n // Fall back to the tree data if something is being dragged in from\n // an external element\n const newDraggingTreeData = draggingTreeData || instanceProps.treeData;\n\n const addedResult = memoizedInsertNode({\n treeData: newDraggingTreeData,\n newNode: draggedNode,\n depth: draggedDepth,\n minimumTreeIndex: draggedMinimumTreeIndex,\n expandParent: true,\n getNodeKey: this.props.getNodeKey\n });\n\n const rows = this.getRows(addedResult.treeData);\n const expandedParentPath = rows[addedResult.treeIndex].path;\n const nodePath = expandedParentPath.slice(0, -1);\n\n const newDraggingExpandedPaths = pipe(\n when(always(gt(nodePath.length, 0)), append(nodePath)),\n uniqWith(eqBy(String))\n )(draggingExpandedPaths);\n return {\n draggedNode,\n draggedDepth,\n draggedMinimumTreeIndex,\n draggingTreeData: changeNodeAtPath({\n treeData: newDraggingTreeData,\n path: nodePath,\n newNode: ({node}) => ({...node, expanded: true}),\n getNodeKey: this.props.getNodeKey\n }),\n // reset the scroll focus so it doesn't jump back\n // to a search result while dragging\n searchFocusTreeIndex: null,\n dragging: true,\n draggingExpandedPaths: newDraggingExpandedPaths\n };\n });\n }\n\n endDrag(dropResult) {\n const {instanceProps} = this.state;\n\n const resetTree = () =>\n this.setState({\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n dragging: false\n });\n\n // Drop was cancelled\n if (!dropResult) {\n resetTree();\n } else if (dropResult.treeId !== this.treeId) {\n // The node was dropped in an external drop target or tree\n const {node, path, treeIndex} = dropResult;\n let shouldCopy = this.props.shouldCopyOnOutsideDrop;\n if (typeof shouldCopy === 'function') {\n shouldCopy = shouldCopy({\n node,\n prevTreeIndex: treeIndex,\n prevPath: path\n });\n }\n\n let treeData = this.state.draggingTreeData || instanceProps.treeData;\n\n // If copying is enabled, a drop outside leaves behind a copy in the\n // source tree\n if (shouldCopy) {\n treeData = changeNodeAtPath({\n treeData: instanceProps.treeData, // use treeData unaltered by the drag operation\n path,\n newNode: ({node: copyNode}) => ({...copyNode}), // create a shallow copy of the node\n getNodeKey: this.props.getNodeKey\n });\n }\n\n this.props.onChange(treeData);\n\n this.props.onMoveNode({\n treeData,\n node,\n treeIndex: null,\n path: null,\n nextPath: null,\n nextTreeIndex: null,\n prevPath: path,\n prevTreeIndex: treeIndex\n });\n }\n }\n\n drop(dropResult) {\n this.moveNode(dropResult);\n }\n\n canNodeHaveChildren(node) {\n const {canNodeHaveChildren} = this.props;\n if (canNodeHaveChildren) {\n return canNodeHaveChildren(node);\n }\n return true;\n }\n\n // Load any children in the tree that are given by a function\n // calls the onChange callback on the new treeData\n static loadLazyChildren(props) {\n walk({\n treeData: props.treeData,\n getNodeKey: props.getNodeKey,\n callback: ({node, path, lowerSiblingCounts, treeIndex}) => {\n // If the node has children defined by a function, and is either expanded\n // or set to load even before expansion, run the function.\n if (node.pending && (node.expanded || props.loadCollapsedLazyChildren)) {\n // Call the children fetching function\n props.onLazyLoadChildren({\n node,\n path,\n lowerSiblingCounts,\n treeIndex,\n\n // Provide a helper to append the new data when it is received\n done: (childrenArray) =>\n props.onChange(\n changeNodeAtPath({\n treeData: props.treeData,\n path,\n newNode: ({node: oldNode}) =>\n // Only replace the old node if it's the one we set off to find children\n // for in the first place\n oldNode === node\n ? {\n ...oldNode,\n children: childrenArray\n }\n : oldNode,\n getNodeKey: props.getNodeKey\n }),\n true\n )\n });\n }\n }\n });\n }\n\n renderRow(row, {listIndex, style, getPrevRow, matchKeys, swapFrom, swapDepth, swapLength}) {\n const {node, parentNode, path, lowerSiblingCounts, treeIndex} = row;\n\n const {canDrag, generateNodeProps, scaffoldBlockPxWidth, searchFocusOffset, rowDirection} = mergeTheme(\n this.props\n );\n const TreeNodeRenderer = this.treeNodeRenderer;\n const NodeContentRenderer = this.nodeContentRenderer;\n const nodeKey = path[path.length - 1];\n const isSearchMatch = nodeKey in matchKeys;\n const isSearchFocus = isSearchMatch && matchKeys[nodeKey] === searchFocusOffset;\n const callbackParams = {\n node,\n parentNode,\n path,\n lowerSiblingCounts,\n treeIndex,\n isSearchMatch,\n isSearchFocus\n };\n const nodeProps = !generateNodeProps ? {} : generateNodeProps(callbackParams);\n const rowCanDrag = typeof canDrag !== 'function' ? canDrag : canDrag(callbackParams);\n\n const sharedProps = {\n treeIndex,\n scaffoldBlockPxWidth,\n node,\n path,\n treeId: this.treeId,\n rowDirection\n };\n\n return (\n <TreeNodeRenderer\n style={style}\n key={nodeKey}\n listIndex={listIndex}\n getPrevRow={getPrevRow}\n lowerSiblingCounts={lowerSiblingCounts}\n swapFrom={swapFrom}\n swapLength={swapLength}\n swapDepth={swapDepth}\n {...sharedProps}\n >\n <NodeContentRenderer\n parentNode={parentNode}\n isSearchMatch={isSearchMatch}\n isSearchFocus={isSearchFocus}\n canDrag={rowCanDrag}\n toggleChildrenVisibility={this.toggleChildrenVisibility}\n {...sharedProps}\n {...nodeProps}\n />\n </TreeNodeRenderer>\n );\n }\n\n render() {\n const {\n dragDropManager,\n style,\n className,\n innerStyle,\n rowHeight,\n isVirtualized,\n placeholderRenderer,\n reactVirtualizedListProps,\n getNodeKey,\n rowDirection\n } = mergeTheme(this.props);\n const {searchMatches, searchFocusTreeIndex, draggedNode, draggedDepth, draggedMinimumTreeIndex} = this.state;\n\n const treeData = this.state.draggingTreeData || this.props.treeData;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n let rows;\n let swapFrom = null;\n let swapLength = null;\n if (draggedNode && draggedMinimumTreeIndex !== null) {\n const addedResult = memoizedInsertNode({\n treeData,\n newNode: draggedNode,\n depth: draggedDepth,\n minimumTreeIndex: draggedMinimumTreeIndex,\n expandParent: true,\n getNodeKey\n });\n\n const swapTo = draggedMinimumTreeIndex;\n swapFrom = addedResult.treeIndex;\n swapLength = 1 + memoizedGetDescendantCount({node: draggedNode});\n rows = slideRows(this.getRows(addedResult.treeData), swapFrom, swapTo, swapLength);\n } else {\n rows = this.getRows(treeData);\n }\n\n // Get indices for rows that match the search conditions\n const matchKeys = {};\n searchMatches.forEach(({path}, i) => {\n matchKeys[path[path.length - 1]] = i;\n });\n\n // Seek to the focused search result if there is one specified\n const scrollToInfo = searchFocusTreeIndex !== null ? {scrollToIndex: searchFocusTreeIndex} : {};\n\n let containerStyle = style;\n let list;\n if (rows.length < 1) {\n const Placeholder = this.treePlaceholderRenderer;\n const PlaceholderContent = placeholderRenderer;\n list = (\n <Placeholder treeId={this.treeId} drop={this.drop}>\n <PlaceholderContent />\n </Placeholder>\n );\n } else if (isVirtualized) {\n containerStyle = {height: '100%', ...containerStyle};\n\n const ScrollZoneVirtualList = this.scrollZoneVirtualList;\n // Render list with react-virtualized\n list = (\n <AutoSizer>\n {({height, width}) => (\n <ScrollZoneVirtualList\n {...scrollToInfo}\n dragDropManager={dragDropManager}\n verticalStrength={this.vStrength}\n horizontalStrength={this.hStrength}\n speed={30}\n scrollToAlignment=\"start\"\n className={this.props.classes.rst__virtualScrollOverride}\n width={width}\n onScroll={({scrollTop}) => {\n this.scrollTop = scrollTop;\n }}\n height={height}\n style={innerStyle}\n rowCount={rows.length}\n estimatedRowSize={typeof rowHeight !== 'function' ? rowHeight : undefined}\n rowHeight={\n typeof rowHeight !== 'function'\n ? rowHeight\n : ({index}) =>\n rowHeight({\n index,\n treeIndex: index,\n node: rows[index].node,\n path: rows[index].path\n })\n }\n rowRenderer={({index, style: rowStyle}) =>\n this.renderRow(rows[index], {\n listIndex: index,\n style: rowStyle,\n getPrevRow: () => rows[index - 1] || null,\n matchKeys,\n swapFrom,\n swapDepth: draggedDepth,\n swapLength\n })\n }\n {...reactVirtualizedListProps}\n />\n )}\n </AutoSizer>\n );\n } else {\n // Render list without react-virtualized\n list = rows.map((row, index) =>\n this.renderRow(row, {\n listIndex: index,\n style: {\n height:\n typeof rowHeight !== 'function'\n ? rowHeight\n : rowHeight({\n index,\n treeIndex: index,\n node: row.node,\n path: row.path\n })\n },\n getPrevRow: () => rows[index - 1] || null,\n matchKeys,\n swapFrom,\n swapDepth: draggedDepth,\n swapLength\n })\n );\n }\n\n return (\n <div className={classnames('rst__tree', className, rowDirectionClass)} style={containerStyle}>\n {list}\n </div>\n );\n }\n}\n\nReactSortableTree.propTypes = {\n classes: PropTypes.object,\n dragDropManager: PropTypes.shape({\n getMonitor: PropTypes.func\n }).isRequired,\n\n // Tree data in the following format:\n // [{title: 'main', subtitle: 'sub'}, { title: 'value2', expanded: true, children: [{ title: 'value3') }] }]\n // `title` is the primary label for the node\n // `subtitle` is a secondary label for the node\n // `expanded` shows children of the node if true, or hides them if false. Defaults to false.\n // `children` is an array of child nodes belonging to the node.\n treeData: PropTypes.arrayOf(PropTypes.object).isRequired,\n\n // Style applied to the container wrapping the tree (style defaults to {height: '100%'})\n style: PropTypes.shape({}),\n\n // Class name for the container wrapping the tree\n className: PropTypes.string,\n\n // Style applied to the inner, scrollable container (for padding, etc.)\n innerStyle: PropTypes.shape({}),\n\n // Used by react-virtualized\n // Either a fixed row height (number) or a function that returns the\n // height of a row given its index: `({ index: number }): number`\n rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n\n // Size in px of the region near the edges that initiates scrolling on dragover\n slideRegionSize: PropTypes.number,\n\n // Custom properties to hand to the react-virtualized list\n // https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types\n reactVirtualizedListProps: PropTypes.shape({}),\n\n // The width of the blocks containing the lines representing the structure of the tree.\n scaffoldBlockPxWidth: PropTypes.number,\n\n // Maximum depth nodes can be inserted at. Defaults to infinite.\n maxDepth: PropTypes.number,\n\n // The method used to search nodes.\n // Defaults to a function that uses the `searchQuery` string to search for nodes with\n // matching `title` or `subtitle` values.\n // NOTE: Changing `searchMethod` will not update the search, but changing the `searchQuery` will.\n searchMethod: PropTypes.func,\n\n // Used by the `searchMethod` to highlight and scroll to matched nodes.\n // Should be a string for the default `searchMethod`, but can be anything when using a custom search.\n searchQuery: PropTypes.any, // eslint-disable-line react/forbid-prop-types\n\n // Outline the <`searchFocusOffset`>th node and scroll to it.\n searchFocusOffset: PropTypes.number,\n\n // Get the nodes that match the search criteria. Used for counting total matches, etc.\n searchFinishCallback: PropTypes.func,\n\n // Generate an object with additional props to be passed to the node renderer.\n // Use this for adding buttons via the `buttons` key,\n // or additional `style` / `className` settings.\n generateNodeProps: PropTypes.func,\n\n // Set to false to disable virtualization.\n // NOTE: Auto-scrolling while dragging, and scrolling to the `searchFocusOffset` will be disabled.\n isVirtualized: PropTypes.bool,\n\n treeNodeRenderer: PropTypes.func,\n\n // Override the default component for rendering nodes (but keep the scaffolding generator)\n // This is an advanced option for complete customization of the appearance.\n // It is best to copy the component in `node-renderer-default.js` to use as a base, and customize as needed.\n nodeContentRenderer: PropTypes.func,\n\n // Override the default component for rendering an empty tree\n // This is an advanced option for complete customization of the appearance.\n // It is best to copy the component in `placeholder-renderer-default.js` to use as a base,\n // and customize as needed.\n placeholderRenderer: PropTypes.func,\n\n theme: PropTypes.shape({\n style: PropTypes.shape({}),\n innerStyle: PropTypes.shape({}),\n reactVirtualizedListProps: PropTypes.shape({}),\n scaffoldBlockPxWidth: PropTypes.number,\n slideRegionSize: PropTypes.number,\n rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n treeNodeRenderer: PropTypes.func,\n nodeContentRenderer: PropTypes.func,\n placeholderRenderer: PropTypes.func\n }),\n\n // Determine the unique key used to identify each node and\n // generate the `path` array passed in callbacks.\n // By default, returns the index in the tree (omitting hidden nodes).\n getNodeKey: PropTypes.func,\n\n // Called whenever tree data changed.\n // Just like with React input elements, you have to update your\n // own component's data to see the changes reflected.\n onChange: PropTypes.func.isRequired,\n\n // Called after node move operation.\n onMoveNode: PropTypes.func,\n\n // Determine whether a node can be dragged. Set to false to disable dragging on all nodes.\n canDrag: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n\n // Determine whether a node can be dropped based on its path and parents'.\n canDrop: PropTypes.func,\n\n // Determine whether a node can have children\n canNodeHaveChildren: PropTypes.func,\n\n // When true, or a callback returning true, dropping nodes to react-dnd\n // drop targets outside of this tree will not remove them from this tree\n shouldCopyOnOutsideDrop: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n\n // Called after children nodes collapsed or expanded.\n onVisibilityToggle: PropTypes.func,\n\n dndType: PropTypes.string,\n\n // Called to track between dropped and dragging\n onDragStateChanged: PropTypes.func,\n\n // Specify that nodes that do not match search will be collapsed\n onlyExpandSearchedNodes: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string,\n\n onLazyLoadChildren: PropTypes.func,\n ignoreTreeChanges: PropTypes.bool\n};\n\nReactSortableTree.defaultProps = {\n canDrag: true,\n canDrop: null,\n canNodeHaveChildren: () => true,\n className: '',\n dndType: null,\n generateNodeProps: null,\n getNodeKey: defaultGetNodeKey,\n innerStyle: {},\n isVirtualized: true,\n maxDepth: null,\n treeNodeRenderer: null,\n nodeContentRenderer: null,\n onMoveNode: () => {},\n onVisibilityToggle: () => {},\n placeholderRenderer: null,\n reactVirtualizedListProps: {},\n rowHeight: null,\n scaffoldBlockPxWidth: null,\n searchFinishCallback: null,\n searchFocusOffset: null,\n searchMethod: null,\n searchQuery: null,\n shouldCopyOnOutsideDrop: false,\n slideRegionSize: null,\n style: {},\n theme: {},\n onDragStateChanged: () => {},\n onlyExpandSearchedNodes: false,\n rowDirection: 'ltr',\n onLazyLoadChildren: () => {},\n ignoreTreeChanges: false\n};\n\npolyfill(ReactSortableTree);\n\nconst StyledReactSortableTree = withStyles(styles)(ReactSortableTree);\n\nconst SortableTreeWithoutDndContext = (props) => (\n <DndContext.Consumer>\n {({dragDropManager}) =>\n dragDropManager === undefined ? null : (\n <StyledReactSortableTree {...props} dragDropManager={dragDropManager} />\n )\n }\n </DndContext.Consumer>\n);\n\nconst SortableTree = (props) => {\n return (\n <DragAndDrop>\n <SortableTreeWithoutDndContext {...props} />\n </DragAndDrop>\n );\n};\n\n// Export the tree component without the react-dnd DragDropContext,\n// for when component is used with other components using react-dnd.\n// see: https://github.com/gaearon/react-dnd/issues/186\nexport {SortableTreeWithoutDndContext};\n\nexport default SortableTree;\n","/* eslint-disable import/prefer-default-export */\n\nexport function slideRows(rows, fromIndex, toIndex, count = 1) {\n const rowsWithoutMoved = [...rows.slice(0, fromIndex), ...rows.slice(fromIndex + count)];\n\n return [\n ...rowsWithoutMoved.slice(0, toIndex),\n ...rows.slice(fromIndex, fromIndex + count),\n ...rowsWithoutMoved.slice(toIndex)\n ];\n}\n","export const styles = () => ({\n /* import styles from react-virtualized/styles.css */\n\n /* Grid default theme */\n '@global .ReactVirtualized__Grid__innerScrollContainer': {\n overflow: 'visible !important' // override base style\n },\n\n '@global .ReactVirtualized__Grid': {\n outline: 'none' //override base style,\n },\n\n /* List default theme */\n '@global .ReactVirtualized__List': {},\n\n // New styles\n rst__virtualScrollOverride: {\n overflow: 'auto !important'\n },\n\n '@global .rst__rtl .ReactVirtualized__Grid__innerScrollContainer': {\n direction: 'rtl'\n }\n});\n","import SortableTree, {SortableTreeWithoutDndContext} from './react-sortable-tree';\n\nexport * from './utils/default-handlers';\nexport * from './utils/tree-data-utils';\nexport default SortableTree;\n\n// Export the tree component without the react-dnd DragDropContext,\n// for when component is used with other components using react-dnd.\n// see: https://github.com/gaearon/react-dnd/issues/186\nexport {SortableTreeWithoutDndContext};\n","export function defaultGetNodeKey({treeIndex}) {\n return treeIndex;\n}\n\n// Cheap hack to get the text of a react object\nfunction getReactElementText(parent) {\n if (typeof parent === 'string') {\n return parent;\n }\n\n if (\n parent === null ||\n typeof parent !== 'object' ||\n !parent.props ||\n !parent.props.children ||\n (typeof parent.props.children !== 'string' && typeof parent.props.children !== 'object')\n ) {\n return '';\n }\n\n if (typeof parent.props.children === 'string') {\n return parent.props.children;\n }\n\n return parent.props.children.map((child) => getReactElementText(child)).join('');\n}\n\n// Search for a query string inside a node property\nfunction stringSearch(key, searchQuery, node, path, treeIndex) {\n if (typeof node[key] === 'function') {\n // Search within text after calling its function to generate the text\n return String(node[key]({node, path, treeIndex})).indexOf(searchQuery) > -1;\n }\n if (typeof node[key] === 'object') {\n // Search within text inside react elements\n return getReactElementText(node[key]).indexOf(searchQuery) > -1;\n }\n\n // Search within string\n return node[key] && String(node[key]).indexOf(searchQuery) > -1;\n}\n\nexport function defaultSearchMethod({node, path, treeIndex, searchQuery}) {\n return (\n stringSearch('title', searchQuery, node, path, treeIndex) ||\n stringSearch('subtitle', searchQuery, node, path, treeIndex)\n );\n}\n\nexport default {defaultSearchMethod, defaultGetNodeKey};\n","/**\n * Performs a depth-first traversal over all of the node descendants,\n * incrementing currentIndex by 1 for each\n */\nfunction getNodeDataAtTreeIndexOrNextIndex({\n targetIndex,\n node,\n currentIndex,\n getNodeKey,\n path = [],\n lowerSiblingCounts = [],\n ignoreCollapsed = true,\n isPseudoRoot = false\n}) {\n // The pseudo-root is not considered in the path\n const selfPath = !isPseudoRoot ? [...path, getNodeKey({node, treeIndex: currentIndex})] : [];\n\n // Return target node when found\n if (currentIndex === targetIndex) {\n return {\n node,\n lowerSiblingCounts,\n path: selfPath\n };\n }\n\n // Add one and continue for nodes with no children or hidden children\n if (!node.children || (ignoreCollapsed && node.expanded !== true)) {\n return {nextIndex: currentIndex + 1};\n }\n\n // Iterate over each child and their descendants and return the\n // target node if childIndex reaches the targetIndex\n let childIndex = currentIndex + 1;\n const childCount = node.children.length;\n for (let i = 0; i < childCount; i += 1) {\n const result = getNodeDataAtTreeIndexOrNextIndex({\n ignoreCollapsed,\n getNodeKey,\n targetIndex,\n node: node.children[i],\n currentIndex: childIndex,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n\n if (result.node) {\n return result;\n }\n\n childIndex = result.nextIndex;\n }\n\n // If the target node is not found, return the farthest traversed index\n return {nextIndex: childIndex};\n}\n\nexport function getDescendantCount({node, ignoreCollapsed = true}) {\n return (\n getNodeDataAtTreeIndexOrNextIndex({\n getNodeKey: () => {},\n ignoreCollapsed,\n node,\n currentIndex: 0,\n targetIndex: -1\n }).nextIndex - 1\n );\n}\n\n/**\n * Walk all descendants of the given node, depth-first\n *\n * @param {Object} args - Function parameters\n * @param {function} args.callback - Function to call on each node\n * @param {function} args.getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean} args.ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} args.isPseudoRoot - If true, this node has no real data, and only serves\n * as the parent of all the nodes in the tree\n * @param {Object} args.node - A tree node\n * @param {Object=} args.parentNode - The parent node of `node`\n * @param {number} args.currentIndex - The treeIndex of `node`\n * @param {number[]|string[]} args.path - Array of keys leading up to node to be changed\n * @param {number[]} args.lowerSiblingCounts - An array containing the count of siblings beneath the\n * previous nodes in this path\n *\n * @return {number|false} nextIndex - Index of the next sibling of `node`,\n * or false if the walk should be terminated\n */\nfunction walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot = false,\n node,\n parentNode = null,\n currentIndex,\n path = [],\n lowerSiblingCounts = []\n}) {\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node, treeIndex: currentIndex})];\n const selfInfo = isPseudoRoot\n ? null\n : {\n node,\n parentNode,\n path: selfPath,\n lowerSiblingCounts,\n treeIndex: currentIndex\n };\n\n if (!isPseudoRoot) {\n const callbackResult = callback(selfInfo);\n\n // Cut walk short if the callback returned false\n if (callbackResult === false) {\n return false;\n }\n }\n\n // Return self on nodes with no children or hidden children\n if (!node.children || (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)) {\n return currentIndex;\n }\n\n // Get all descendants\n let childIndex = currentIndex;\n const childCount = node.children.length;\n if (typeof node.children !== 'function') {\n for (let i = 0; i < childCount; i += 1) {\n childIndex = walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n node: node.children[i],\n parentNode: isPseudoRoot ? null : node,\n currentIndex: childIndex + 1,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n\n // Cut walk short if the callback returned false\n if (childIndex === false) {\n return false;\n }\n }\n }\n\n return childIndex;\n}\n\n/**\n * Perform a change on the given node and all its descendants, traversing the tree depth-first\n *\n * @param {Object} args - Function parameters\n * @param {function} args.callback - Function to call on each node\n * @param {function} args.getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean} args.ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} args.isPseudoRoot - If true, this node has no real data, and only serves\n * as the parent of all the nodes in the tree\n * @param {Object} args.node - A tree node\n * @param {Object=} args.parentNode - The parent node of `node`\n * @param {number} args.currentIndex - The treeIndex of `node`\n * @param {number[]|string[]} args.path - Array of keys leading up to node to be changed\n * @param {number[]} args.lowerSiblingCounts - An array containing the count of siblings beneath the\n * previous nodes in this path\n *\n * @return {number|false} nextIndex - Index of the next sibling of `node`,\n * or false if the walk should be terminated\n */\nfunction mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot = false,\n node,\n parentNode = null,\n currentIndex,\n path = [],\n lowerSiblingCounts = []\n}) {\n const nextNode = {...node};\n\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node: nextNode, treeIndex: currentIndex})];\n const selfInfo = {\n node: nextNode,\n parentNode,\n path: selfPath,\n lowerSiblingCounts,\n treeIndex: currentIndex\n };\n\n // Return self on nodes with no children or hidden children\n if (!nextNode.children || (nextNode.expanded !== true && ignoreCollapsed && !isPseudoRoot)) {\n return {\n treeIndex: currentIndex,\n node: callback(selfInfo)\n };\n }\n\n // Get all descendants\n let childIndex = currentIndex;\n const childCount = nextNode.children.length;\n if (typeof nextNode.children !== 'function') {\n nextNode.children = nextNode.children.map((child, i) => {\n const mapResult = mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n node: child,\n parentNode: isPseudoRoot ? null : nextNode,\n currentIndex: childIndex + 1,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n childIndex = mapResult.treeIndex;\n\n return mapResult.node;\n });\n }\n\n return {\n node: callback(selfInfo),\n treeIndex: childIndex\n };\n}\n\n/**\n * Count all the visible (expanded) descendants in the tree data.\n *\n * @param {!Object[]} treeData - Tree data\n *\n * @return {number} count\n */\nexport function getVisibleNodeCount({treeData}) {\n const traverse = (node) => {\n if (!node.children || node.expanded !== true || typeof node.children === 'function') {\n return 1;\n }\n\n return 1 + node.children.reduce((total, currentNode) => total + traverse(currentNode), 0);\n };\n\n return treeData.reduce((total, currentNode) => total + traverse(currentNode), 0);\n}\n\n/**\n * Get the <targetIndex>th visible node in the tree data.\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!number} targetIndex - The index of the node to search for\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n *\n * @return {{\n * node: Object,\n * path: []string|[]number,\n * lowerSiblingCounts: []number\n * }|null} node - The node at targetIndex, or null if not found\n */\nexport function getVisibleNodeInfoAtIndex({treeData, index: targetIndex, getNodeKey}) {\n if (!treeData || treeData.length < 1) {\n return null;\n }\n\n // Call the tree traversal with a pseudo-root node\n const result = getNodeDataAtTreeIndexOrNextIndex({\n targetIndex,\n getNodeKey,\n node: {\n children: treeData,\n expanded: true\n },\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: [],\n isPseudoRoot: true\n });\n\n if (result.node) {\n return result;\n }\n\n return null;\n}\n\n/**\n * Walk descendants depth-first and call a callback on each\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {function} callback - Function to call on each node\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return void\n */\nexport function walk({treeData, getNodeKey, callback, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return;\n }\n\n walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot: true,\n node: {children: treeData},\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: []\n });\n}\n\n/**\n * Perform a depth-first transversal of the descendants and\n * make a change to every node in the tree\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {function} callback - Function to call on each node\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function map({treeData, getNodeKey, callback, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return [];\n }\n\n return mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot: true,\n node: {children: treeData},\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: []\n }).node.children;\n}\n\n/**\n * Expand or close every node in the tree\n *\n * @param {!Object[]} treeData - Tree data\n * @param {?boolean} expanded - Whether the node is expanded or not\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function toggleExpandedForAll({treeData, expanded = true}) {\n return map({\n treeData,\n callback: ({node}) => ({...node, expanded}),\n getNodeKey: ({treeIndex}) => treeIndex,\n ignoreCollapsed: false\n });\n}\n\nexport const RESULT_MISS_ERROR_MESSAGE = 'No node found at the given path.';\n\n/**\n * Replaces node at path with object, or callback-defined object\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be changed\n * @param {function|any} newNode - Node to replace the node at the path with, or a function producing the new node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function changeNodeAtPath({treeData, path, newNode, getNodeKey, ignoreCollapsed = true}) {\n const RESULT_MISS = 'RESULT_MISS';\n const traverse = ({isPseudoRoot = false, node, currentTreeIndex, pathIndex}) => {\n if (!isPseudoRoot && getNodeKey({node, treeIndex: currentTreeIndex}) !== path[pathIndex]) {\n return RESULT_MISS;\n }\n\n if (pathIndex >= path.length - 1) {\n // If this is the final location in the path, return its changed form\n return typeof newNode === 'function' ? newNode({node, treeIndex: currentTreeIndex}) : newNode;\n }\n if (!node.children) {\n // If this node is part of the path, but has no children, return the unchanged node\n throw new Error('Path referenced children of node with no children.');\n }\n\n let nextTreeIndex = currentTreeIndex + 1;\n for (let i = 0; i < node.children.length; i += 1) {\n const result = traverse({\n node: node.children[i],\n currentTreeIndex: nextTreeIndex,\n pathIndex: pathIndex + 1\n });\n\n // If the result went down the correct path\n if (result !== RESULT_MISS) {\n if (result) {\n // If the result was truthy (in this case, an object),\n // pass it to the next level of recursion up\n return {\n ...node,\n children: [...node.children.slice(0, i), result, ...node.children.slice(i + 1)]\n };\n }\n // If the result was falsy (returned from the newNode function), then\n // delete the node from the array.\n return {\n ...node,\n children: [...node.children.slice(0, i), ...node.children.slice(i + 1)]\n };\n }\n\n nextTreeIndex += 1 + getDescendantCount({node: node.children[i], ignoreCollapsed});\n }\n\n return RESULT_MISS;\n };\n\n // Use a pseudo-root node in the beginning traversal\n const result = traverse({\n node: {children: treeData},\n currentTreeIndex: -1,\n pathIndex: -1,\n isPseudoRoot: true\n });\n\n if (result === RESULT_MISS) {\n throw new Error(RESULT_MISS_ERROR_MESSAGE);\n }\n\n return result.children;\n}\n\n/**\n * Removes the node at the specified path and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The tree data with the node removed\n */\nexport function removeNodeAtPath({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n return changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: null // Delete the node\n });\n}\n\n/**\n * Removes the node at the specified path and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The tree data with the node removed\n * @return {Object} result.node - The node that was removed\n * @return {number} result.treeIndex - The previous treeIndex of the removed node\n */\nexport function removeNode({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n let removedNode = null;\n let removedTreeIndex = null;\n const nextTreeData = changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: ({node, treeIndex}) => {\n // Store the target node and delete it from the tree\n removedNode = node;\n removedTreeIndex = treeIndex;\n\n return null;\n }\n });\n\n return {\n treeData: nextTreeData,\n node: removedNode,\n treeIndex: removedTreeIndex\n };\n}\n\n/**\n * Gets the node at the specified path\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object|null} nodeInfo - The node info at the given path, or null if not found\n */\nexport function getNodeAtPath({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n let foundNodeInfo = null;\n\n try {\n changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: ({node, treeIndex}) => {\n foundNodeInfo = {node, treeIndex};\n return node;\n }\n });\n } catch (err) {\n // Ignore the error -- the null return will be explanation enough\n }\n\n return foundNodeInfo;\n}\n\n/**\n * Adds the node to the specified parent and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {!Object} newNode - The node to insert\n * @param {number|string} parentKey - The key of the to-be parentNode of the node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} expandParent - If true, expands the parentNode specified by parentPath\n * @param {boolean=} addAsFirstChild - If true, adds new node as first child of tree\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The updated tree data\n * @return {number} result.treeIndex - The tree index at which the node was inserted\n */\nexport function addNodeUnderParent({\n treeData,\n newNode,\n parentKey = null,\n getNodeKey,\n ignoreCollapsed = true,\n expandParent = false,\n addAsFirstChild = false\n}) {\n if (parentKey === null) {\n return addAsFirstChild\n ? {\n treeData: [newNode, ...(treeData || [])],\n treeIndex: 0\n }\n : {\n treeData: [...(treeData || []), newNode],\n treeIndex: (treeData || []).length\n };\n }\n\n let insertedTreeIndex = null;\n let hasBeenAdded = false;\n const changedTreeData = map({\n treeData,\n getNodeKey,\n ignoreCollapsed,\n callback: ({node, treeIndex, path}) => {\n const key = path ? path[path.length - 1] : null;\n // Return nodes that are not the parent as-is\n if (hasBeenAdded || key !== parentKey) {\n return node;\n }\n hasBeenAdded = true;\n\n const parentNode = {\n ...node\n };\n\n if (expandParent) {\n parentNode.expanded = true;\n }\n\n // If no children exist yet, just add the single newNode\n if (!parentNode.children) {\n insertedTreeIndex = treeIndex + 1;\n return {\n ...parentNode,\n children: [newNode]\n };\n }\n\n if (typeof parentNode.children === 'function') {\n throw new Error('Cannot add to children defined by a function');\n }\n\n let nextTreeIndex = treeIndex + 1;\n for (let i = 0; i < parentNode.children.length; i += 1) {\n nextTreeIndex += 1 + getDescendantCount({node: parentNode.children[i], ignoreCollapsed});\n }\n\n insertedTreeIndex = nextTreeIndex;\n\n const children = addAsFirstChild ? [newNode, ...parentNode.children] : [...parentNode.children, newNode];\n\n return {\n ...parentNode,\n children\n };\n }\n });\n\n if (!hasBeenAdded) {\n throw new Error('No node found with the given key.');\n }\n\n return {\n treeData: changedTreeData,\n treeIndex: insertedTreeIndex\n };\n}\n\nfunction addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n isPseudoRoot = false,\n isLastChild,\n node,\n currentIndex,\n currentDepth,\n getNodeKey,\n path = []\n}) {\n const selfPath = (n) => (isPseudoRoot ? [] : [...path, getNodeKey({node: n, treeIndex: currentIndex})]);\n\n // If the current position is the only possible place to add, add it\n if (currentIndex >= minimumTreeIndex - 1 || (isLastChild && !(node.children && node.children.length))) {\n if (typeof node.children === 'function') {\n throw new Error('Cannot add to children defined by a function');\n } else {\n const extraNodeProps = expandParent ? {expanded: true} : {};\n const nextNode = {\n ...node,\n\n ...extraNodeProps,\n children: node.children ? [newNode, ...node.children] : [newNode]\n };\n\n return {\n node: nextNode,\n nextIndex: currentIndex + 2,\n insertedTreeIndex: currentIndex + 1,\n parentPath: selfPath(nextNode),\n parentNode: isPseudoRoot ? null : nextNode\n };\n }\n }\n\n // If this is the target depth for the insertion,\n // i.e., where the newNode can be added to the current node's children\n if (currentDepth >= targetDepth - 1) {\n // Skip over nodes with no children or hidden children\n if (\n !node.children ||\n typeof node.children === 'function' ||\n (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)\n ) {\n return {node, nextIndex: currentIndex + 1};\n }\n\n // Scan over the children to see if there's a place among them that fulfills\n // the minimumTreeIndex requirement\n let childIndex = currentIndex + 1;\n let insertedTreeIndex = null;\n let insertIndex = null;\n for (let i = 0; i < node.children.length; i += 1) {\n // If a valid location is found, mark it as the insertion location and\n // break out of the loop\n if (childIndex >= minimumTreeIndex) {\n insertedTreeIndex = childIndex;\n insertIndex = i;\n break;\n }\n\n // Increment the index by the child itself plus the number of descendants it has\n childIndex += 1 + getDescendantCount({node: node.children[i], ignoreCollapsed});\n }\n\n // If no valid indices to add the node were found\n if (insertIndex === null) {\n // If the last position in this node's children is less than the minimum index\n // and there are more children on the level of this node, return without insertion\n if (childIndex < minimumTreeIndex && !isLastChild) {\n return {node, nextIndex: childIndex};\n }\n\n // Use the last position in the children array to insert the newNode\n insertedTreeIndex = childIndex;\n insertIndex = node.children.length;\n }\n\n // Insert the newNode at the insertIndex\n const nextNode = {\n ...node,\n children: [...node.children.slice(0, insertIndex), newNode, ...node.children.slice(insertIndex)]\n };\n\n // Return node with successful insert result\n return {\n node: nextNode,\n nextIndex: childIndex,\n insertedTreeIndex,\n parentPath: selfPath(nextNode),\n parentNode: isPseudoRoot ? null : nextNode\n };\n }\n\n // Skip over nodes with no children or hidden children\n if (\n !node.children ||\n typeof node.children === 'function' ||\n (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)\n ) {\n return {node, nextIndex: currentIndex + 1};\n }\n\n // Get all descendants\n let insertedTreeIndex = null;\n let pathFragment = null;\n let parentNode = null;\n let childIndex = currentIndex + 1;\n let newChildren = node.children;\n if (typeof newChildren !== 'function') {\n newChildren = newChildren.map((child, i) => {\n if (insertedTreeIndex !== null) {\n return child;\n }\n\n const mapResult = addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n isLastChild: isLastChild && i === newChildren.length - 1,\n node: child,\n currentIndex: childIndex,\n currentDepth: currentDepth + 1,\n getNodeKey,\n path: [] // Cannot determine the parent path until the children have been processed\n });\n\n if ('insertedTreeIndex' in mapResult) {\n ({insertedTreeIndex, parentNode, parentPath: pathFragment} = mapResult);\n }\n\n childIndex = mapResult.nextIndex;\n\n return mapResult.node;\n });\n }\n\n const nextNode = {...node, children: newChildren};\n const result = {\n node: nextNode,\n nextIndex: childIndex\n };\n\n if (insertedTreeIndex !== null) {\n result.insertedTreeIndex = insertedTreeIndex;\n result.parentPath = [...selfPath(nextNode), ...pathFragment];\n result.parentNode = parentNode;\n }\n\n return result;\n}\n\n/**\n * Insert a node into the tree at the given depth, after the minimum index\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!number} depth - The depth to insert the node at (the first level of the array being depth 0)\n * @param {!number} minimumTreeIndex - The lowest possible treeIndex to insert the node at\n * @param {!Object} newNode - The node to insert into the tree\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} expandParent - If true, expands the parent of the inserted node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The tree data with the node added\n * @return {number} result.treeIndex - The tree index at which the node was inserted\n * @return {number[]|string[]} result.path - Array of keys leading to the node location after insertion\n * @return {Object} result.parentNode - The parent node of the inserted node\n */\nexport function insertNode({\n treeData,\n depth: targetDepth,\n minimumTreeIndex,\n newNode,\n getNodeKey = () => {},\n ignoreCollapsed = true,\n expandParent = false\n}) {\n if (!treeData && targetDepth === 0) {\n return {\n treeData: [newNode],\n treeIndex: 0,\n path: [getNodeKey({node: newNode, treeIndex: 0})],\n parentNode: null\n };\n }\n\n const insertResult = addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n getNodeKey,\n isPseudoRoot: true,\n isLastChild: true,\n node: {children: treeData},\n currentIndex: -1,\n currentDepth: -1\n });\n\n if (!('insertedTreeIndex' in insertResult)) {\n throw new Error('No suitable position found to insert.');\n }\n\n const treeIndex = insertResult.insertedTreeIndex;\n return {\n treeData: insertResult.node.children,\n treeIndex,\n path: [...insertResult.parentPath, getNodeKey({node: newNode, treeIndex})],\n parentNode: insertResult.parentNode\n };\n}\n\n/**\n * Get tree data flattened.\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {{\n * node: Object,\n * path: []string|[]number,\n * lowerSiblingCounts: []number\n * }}[] nodes - The node array\n */\nexport function getFlatDataFromTree({treeData, getNodeKey, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return [];\n }\n\n const flattened = [];\n walk({\n treeData,\n getNodeKey,\n ignoreCollapsed,\n callback: (nodeInfo) => {\n flattened.push(nodeInfo);\n }\n });\n\n return flattened;\n}\n\n/**\n * Generate a tree structure from flat data.\n *\n * @param {!Object[]} flatData\n * @param {!function=} getKey - Function to get the key from the nodeData\n * @param {!function=} getParentKey - Function to get the parent key from the nodeData\n * @param {string|number=} rootKey - The value returned by `getParentKey` that corresponds to the root node.\n * For example, if your nodes have id 1-99, you might use rootKey = 0\n *\n * @return {Object[]} treeData - The flat data represented as a tree\n */\nexport function getTreeFromFlatData({\n flatData,\n getKey = (node) => node.id,\n getParentKey = (node) => node.parentId,\n rootKey = '0'\n}) {\n if (!flatData) {\n return [];\n }\n\n const childrenToParents = {};\n flatData.forEach((child) => {\n const parentKey = getParentKey(child);\n\n if (parentKey in childrenToParents) {\n childrenToParents[parentKey].push(child);\n } else {\n childrenToParents[parentKey] = [child];\n }\n });\n\n if (!(rootKey in childrenToParents)) {\n return [];\n }\n\n const trav = (parent) => {\n const parentKey = getKey(parent);\n if (parentKey in childrenToParents) {\n return {\n ...parent,\n children: childrenToParents[parentKey].map((child) => trav(child))\n };\n }\n\n return {...parent};\n };\n\n return childrenToParents[rootKey].map((child) => trav(child));\n}\n\n/**\n * Check if a node is a descendant of another node.\n *\n * @param {!Object} older - Potential ancestor of younger node\n * @param {!Object} younger - Potential descendant of older node\n *\n * @return {boolean}\n */\nexport function isDescendant(older, younger) {\n return (\n !!older.children &&\n typeof older.children !== 'function' &&\n older.children.some((child) => child === younger || isDescendant(child, younger))\n );\n}\n\n/**\n * Get the maximum depth of the children (the depth of the root node is 0).\n *\n * @param {!Object} node - Node in the tree\n * @param {?number} depth - The current depth\n *\n * @return {number} maxDepth - The deepest depth in the tree\n */\nexport function getDepth(node, depth = 0) {\n if (!node.children) {\n return depth;\n }\n\n if (typeof node.children === 'function') {\n return depth + 1;\n }\n\n return node.children.reduce((deepest, child) => Math.max(deepest, getDepth(child, depth + 1)), depth);\n}\n\n/**\n * Find nodes matching a search query in the tree,\n *\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {!Object[]} treeData - Tree data\n * @param {?string|number} searchQuery - Function returning a boolean to indicate whether the node is a match or not\n * @param {!function} searchMethod - Function returning a boolean to indicate whether the node is a match or not\n * @param {?number} searchFocusOffset - The offset of the match to focus on\n * (e.g., 0 focuses on the first match, 1 on the second)\n * @param {boolean=} expandAllMatchPaths - If true, expands the paths to any matched node\n * @param {boolean=} expandFocusMatchPaths - If true, expands the path to the focused node\n *\n * @return {Object[]} matches - An array of objects containing the matching `node`s, their `path`s and `treeIndex`s\n * @return {Object[]} treeData - The original tree data with all relevant nodes expanded.\n * If expandAllMatchPaths and expandFocusMatchPaths are both false,\n * it will be the same as the original tree data.\n */\nexport function find({\n getNodeKey,\n treeData,\n searchQuery,\n searchMethod,\n searchFocusOffset,\n expandAllMatchPaths = false,\n expandFocusMatchPaths = true\n}) {\n let matchCount = 0;\n const trav = ({isPseudoRoot = false, node, currentIndex, path = []}) => {\n let matches = [];\n let isSelfMatch = false;\n let hasFocusMatch = false;\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node, treeIndex: currentIndex})];\n const extraInfo = isPseudoRoot\n ? null\n : {\n path: selfPath,\n treeIndex: currentIndex\n };\n\n // Nodes with with children that aren't lazy\n const hasChildren = node.children && typeof node.children !== 'function' && node.children.length > 0;\n\n // Examine the current node to see if it is a match\n if (!isPseudoRoot && searchMethod({...extraInfo, node, searchQuery})) {\n if (matchCount === searchFocusOffset) {\n hasFocusMatch = true;\n }\n\n // Keep track of the number of matching nodes, so we know when the searchFocusOffset\n // is reached\n matchCount += 1;\n\n // We cannot add this node to the matches right away, as it may be changed\n // during the search of the descendants. The entire node is used in\n // comparisons between nodes inside the `matches` and `treeData` results\n // of this method (`find`)\n isSelfMatch = true;\n }\n\n let childIndex = currentIndex;\n const newNode = {...node};\n if (hasChildren) {\n // Get all descendants\n newNode.children = newNode.children.map((child) => {\n const mapResult = trav({\n node: child,\n currentIndex: childIndex + 1,\n path: selfPath\n });\n\n // Ignore hidden nodes by only advancing the index counter to the returned treeIndex\n // if the child is expanded.\n //\n // The child could have been expanded from the start,\n // or expanded due to a matching node being found in its descendants\n if (mapResult.node.expanded) {\n childIndex = mapResult.treeIndex;\n } else {\n childIndex += 1;\n }\n\n if (mapResult.matches.length > 0 || mapResult.hasFocusMatch) {\n matches = [...matches, ...mapResult.matches];\n if (mapResult.hasFocusMatch) {\n hasFocusMatch = true;\n }\n\n // Expand the current node if it has descendants matching the search\n // and the settings are set to do so.\n if (\n (expandAllMatchPaths && mapResult.matches.length > 0) ||\n ((expandAllMatchPaths || expandFocusMatchPaths) && mapResult.hasFocusMatch)\n ) {\n newNode.expanded = true;\n }\n }\n\n return mapResult.node;\n });\n }\n\n // Cannot assign a treeIndex to hidden nodes\n if (!isPseudoRoot && !newNode.expanded) {\n matches = matches.map((match) => ({\n ...match,\n treeIndex: null\n }));\n }\n\n // Add this node to the matches if it fits the search criteria.\n // This is performed at the last minute so newNode can be sent in its final form.\n if (isSelfMatch) {\n matches = [{...extraInfo, node: newNode}, ...matches];\n }\n\n return {\n node: matches.length > 0 ? newNode : node,\n matches,\n hasFocusMatch,\n treeIndex: childIndex\n };\n };\n\n const result = trav({\n node: {children: treeData},\n isPseudoRoot: true,\n currentIndex: -1\n });\n\n return {\n matches: result.matches,\n treeData: result.node.children\n };\n}\n\nexport default {\n find,\n getDepth,\n isDescendant,\n getTreeFromFlatData,\n getFlatDataFromTree,\n insertNode,\n addNodeUnderParent,\n getNodeAtPath,\n removeNode,\n removeNodeAtPath,\n changeNodeAtPath,\n toggleExpandedForAll,\n map,\n walk,\n getVisibleNodeInfoAtIndex,\n getVisibleNodeCount,\n getDescendantCount\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n editor: {\n display: 'flex',\n flexDirection: 'column',\n padding: '0 24px 5px',\n overflowX: 'hidden'\n },\n title: {\n color: 'rgba(0, 0, 0, 0.6)',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '24px',\n margin: '17px 0 24px'\n },\n item: {\n marginBottom: '20px'\n },\n dense: {\n marginBottom: 0\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n }\n});\n","import React, {useCallback, useEffect, useMemo, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {always, concat, differenceWith, equals, forEach, omit, path, pick, pipe, prop, when, uniq, curry} from 'ramda';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport {\n createTemporaryEntity,\n findRelatedTemporaryEntities,\n getActivenessAttributes,\n getCreatableAttributeTypes,\n getEntityType,\n getErrorMessage,\n getErrorId,\n omitMarks,\n relationEditorAttributeTypesSelectionStrategy,\n validateConnection,\n updateConnectionEntityLabel,\n isTempUri,\n isEmptyValue,\n getRelationAttributesList,\n getDefaultRelationTypeObject,\n getInOutRelations,\n isSuggestMode,\n isAttributeTypeError,\n getRelationUriFromConnection,\n getRelationEditorActiveError,\n getRelationAttributesFromConnection,\n getEntityUriFromConnection,\n Connection,\n RelationsViewConfig,\n Mode,\n Metadata,\n AttributeError\n} from '@reltio/mdm-sdk';\nimport ConnectionRelationTypeSelector from '../ConnectionRelationTypeSelector/ConnectionRelationTypeSelector';\nimport ErrorWrapper from '../ErrorWrapper/ErrorWrapper';\nimport EntitySelector from '../attributes/editMode/EntitySelector/EntitySelector';\nimport AttributesList from '../attributes/editMode/AttributesList';\nimport {withContext} from '../../HOCs';\nimport {\n isHighlightedErrorType,\n ScrollToElementContext,\n useMdmAction,\n useMdmAuthoringItemsByEntityType,\n useMdmEntity,\n useMdmGlobalSearchRequestOptions,\n useMdmInitialConnection,\n useMdmInitialConnectionTempEntity,\n useMdmModifiedEntities,\n useMdmModifiedEntity,\n useMdmProfileErrors\n} from '../../contexts';\nimport {useScrollToAttributeError} from '../../hooks';\n\nimport {useStyles} from './styles';\n\nconst areRelatedEntitiesChanged = (initial, actual) =>\n initial.length !== actual.length || initial.some((_, i) => initial[i] !== actual[i]);\n\ntype Props = {\n connection: Connection;\n config: RelationsViewConfig;\n mode: Mode;\n metadata: Metadata;\n highlightedError?: React.ContextType<typeof ScrollToElementContext>;\n};\n\nconst RelationEditor = ({connection, config, mode, metadata, highlightedError}: Props) => { //NOSONAR\n const styles = useStyles();\n\n const {relationType, direction} = connection.relation;\n const isNew = connection.isNew;\n const entityUri = getEntityUriFromConnection(connection);\n const relationUri = getRelationUriFromConnection(connection);\n const isTempEntity = isTempUri(entityUri);\n\n const mdmSetInitialInfo = useMdmAction('setInitialInfo');\n const setRelationType = useMdmAction('setRelationType');\n const closeRelationEditor = useMdmAction('closeRelationEditor');\n const entityCreated = useMdmAction('entityCreated');\n const entityDeleted = useMdmAction('entityDeleted');\n const setRelationEntity = useMdmAction('setRelationEntity');\n const errorDeactivated = useMdmAction('errorDeactivated');\n const errorsSet = useMdmAction('errorsSet');\n const addAttributes = useMdmAction('addAttributes');\n const modifyAttribute = useMdmAction('modifyAttribute');\n const removeAttribute = useMdmAction('removeAttribute');\n const addRelation = useMdmAction('addRelation');\n const editRelation = useMdmAction('editRelation');\n\n const mainEntity = useMdmEntity();\n const initialConnection = useMdmInitialConnection(config.id, relationUri);\n const initialModifiedEntity = useMdmInitialConnectionTempEntity(config.id, relationUri);\n const mdmModifiedEntity = useMdmModifiedEntity(entityUri);\n const mdmAllModifiedEntities = useMdmModifiedEntities();\n const globalSearchRequestOptions = useMdmGlobalSearchRequestOptions(['ovOnly']);\n const profileErrors = useMdmProfileErrors();\n const authoringItems = useMdmAuthoringItemsByEntityType(mainEntity?.type);\n\n const error = getRelationEditorActiveError(connection, profileErrors);\n const modifiedEntity = isTempEntity ? mdmModifiedEntity : null;\n const allModifiedEntities = isTempEntity ? mdmAllModifiedEntities : null;\n\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n const {inRelations: inRelationTypes = [], outRelations: outRelationTypes = []} = useMemo(\n () =>\n getInOutRelations({\n content: connection.parentEntityUri ? config.contentSecondLevel : config.content,\n direction,\n relationType,\n mode,\n metadata\n }),\n [config, direction, relationType, mode, metadata, connection.parentEntityUri]\n );\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relationType),\n [relationType, metadata]\n );\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection.relation)\n }),\n [connection]\n );\n const relatedTempEntities = useMemo(\n () => findRelatedTemporaryEntities(allModifiedEntities, modifiedEntity),\n [allModifiedEntities, modifiedEntity]\n );\n const relatedTempEntitiesUrisHistory = useRef([]);\n\n const setInitialInfo = useCallback(\n (entity, connection) => {\n mdmSetInitialInfo(config.id, relationUri, entity, connection);\n },\n [mdmSetInitialInfo]\n );\n\n useEffect(() => {\n if (!initialConnection) {\n setInitialInfo(modifiedEntity, connection);\n }\n }, []);\n\n useEffect(() => {\n relatedTempEntitiesUrisHistory.current = pipe(\n concat(relatedTempEntities.map(prop('uri'))),\n uniq\n )(relatedTempEntitiesUrisHistory.current);\n }, [relatedTempEntities]);\n const initialRelatedTempEntities = useRef(relatedTempEntities);\n const defaultRelationType = getDefaultRelationTypeObject(inRelationTypes, outRelationTypes);\n const initialConnectionChangeablePart = pick(['entity', 'relation'], initialConnection || {});\n const connectionChangeablePart = pick(['entity', 'relation'], connection);\n const hasChanges =\n !isEmptyValue(path(['entity'], connection)) &&\n (!equals(initialConnectionChangeablePart, connectionChangeablePart) ||\n !equals(initialModifiedEntity, modifiedEntity) ||\n areRelatedEntitiesChanged(initialRelatedTempEntities.current, relatedTempEntities));\n const applyAction = useMemo(() => curry(isNew ? addRelation : editRelation), [isNew, addRelation, editRelation]);\n const canCreateNewEntity = !isSuggestMode(mode) || !isTempUri(mainEntity?.uri) || !isEmptyValue(authoringItems);\n\n const onRelationTypeChange = useCallback(\n (relationType) => setRelationType(config.id, relationUri, relationType),\n [config, relationUri, setRelationType]\n );\n\n const handleClose = useCallback(\n () => closeRelationEditor(config.id, relationUri),\n [config, relationUri, closeRelationEditor]\n );\n\n const updateModifiedEntityLabel = useCallback(\n (connection) => {\n if (modifiedEntity) {\n const entityType = getEntityType(metadata, modifiedEntity.type);\n return updateConnectionEntityLabel(entityType, modifiedEntity, connection);\n }\n return connection;\n },\n [modifiedEntity, metadata]\n );\n\n const setModifiedEntity = useCallback((entity) => entityCreated(entity), [entityCreated]);\n\n const deleteModifiedEntity = useCallback((entityUri) => entityDeleted(entityUri), [entityDeleted]);\n\n const onChangeEntity = useCallback(\n (entity) => {\n if (modifiedEntity) {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n setRelationEntity(config.id, relationUri, entity);\n if (error) {\n errorDeactivated(getErrorId(error));\n }\n },\n [config.id, relationUri, setRelationEntity, errorDeactivated, modifiedEntity, deleteModifiedEntity, error]\n );\n\n const validate = useCallback(() => {\n const errors = validateConnection(metadata, allModifiedEntities, connection);\n errorsSet(errors);\n return errors.length === 0;\n }, [connection, metadata, allModifiedEntities, errorsSet]);\n\n const resetErrors = useCallback(() => errorsSet([]), [errorsSet]);\n\n const onApply = useCallback(\n pipe(\n always(connection),\n when(\n validate,\n pipe(\n omitMarks,\n updateModifiedEntityLabel,\n omit(['initial']),\n applyAction(config.id),\n always(\n differenceWith(\n equals,\n relatedTempEntitiesUrisHistory.current,\n relatedTempEntities.map(prop('uri'))\n )\n ),\n forEach(deleteModifiedEntity),\n handleClose\n )\n )\n ),\n [connection, config, updateModifiedEntityLabel, validate, relatedTempEntities]\n );\n\n const onCancel = useCallback(() => {\n if (modifiedEntity !== initialModifiedEntity) {\n if (initialModifiedEntity) {\n setModifiedEntity(initialModifiedEntity);\n if (modifiedEntity && modifiedEntity.uri !== initialModifiedEntity.uri) {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n } else {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n }\n const initialTempEntities = initialRelatedTempEntities.current;\n const entitiesUrisToDelete = differenceWith(\n equals,\n relatedTempEntitiesUrisHistory.current,\n initialTempEntities.map(prop('uri'))\n );\n entitiesUrisToDelete.forEach(deleteModifiedEntity);\n initialTempEntities.forEach(setModifiedEntity);\n resetErrors();\n handleClose();\n }, [handleClose, setModifiedEntity, deleteModifiedEntity, resetErrors, modifiedEntity, initialModifiedEntity]);\n\n const onAddAttributes = useCallback(\n (params) => addAttributes(params.map((param) => ({...param, viewId: config.id}))),\n [config.id, addAttributes]\n );\n\n const onChangeAttribute = useCallback(\n (params) => modifyAttribute({...params, viewId: config.id}),\n [config.id, modifyAttribute]\n );\n\n const onDeleteAttribute = useCallback(\n (params) => removeAttribute({...params, viewId: config.id}),\n [config.id, removeAttribute]\n );\n\n const onCreateEntity = useCallback(\n (entityTypeUri, initValue) => {\n const entityType = getEntityType(metadata, entityTypeUri);\n const newEntityAttrTypes = pipe(\n relationEditorAttributeTypesSelectionStrategy,\n getCreatableAttributeTypes(mode)\n )(entityType);\n const newEntity = createTemporaryEntity({\n entityTypeUri,\n initValue,\n attributeTypes: newEntityAttrTypes,\n metadata,\n mode\n });\n onChangeEntity(newEntity);\n setModifiedEntity(newEntity);\n },\n [setModifiedEntity, onChangeEntity, mode, metadata]\n );\n const errorMessage = getErrorMessage(error);\n\n const getEntityTypesUris = useCallback(() => {\n const {content, contentSecondLevel} = config;\n\n if (contentSecondLevel && connection.parentEntityUri) {\n return contentSecondLevel.entityTypes;\n }\n\n return content.entityTypes;\n }, [config, connection.parentEntityUri]);\n\n return (\n <>\n <div className={styles.editor}>\n <Typography className={styles.title}>\n {isNew ? i18n.text('Add new item') : i18n.text('Edit item')}\n </Typography>\n {defaultRelationType === null && (\n <ConnectionRelationTypeSelector\n className={styles.item}\n relation={connection.relation}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChange={onRelationTypeChange}\n />\n )}\n {Boolean(relationType) && (\n <>\n <div ref={ref} className={errorClassName}>\n <ErrorWrapper errorMessage={errorMessage}>\n <EntitySelector\n className={classnames(styles.item, {\n [styles.dense]:\n errorMessage ||\n (connection.entity && isTempUri(connection.entity.entityUri))\n })}\n entity={connection.entity || {}}\n entityTypesUris={getEntityTypesUris() || []}\n max={config.max || 20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={mode}\n onChange={onChangeEntity}\n onCreate={canCreateNewEntity ? onCreateEntity : undefined}\n metadata={metadata}\n attributeTypesSelectionStrategy={relationEditorAttributeTypesSelectionStrategy}\n />\n </ErrorWrapper>\n </div>\n <AttributesList\n className={styles.item}\n attrTypes={firstLevelRelationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={true}\n mode={mode}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n </>\n )}\n </div>\n <div className={styles.actionButtons}>\n <Button onClick={onCancel}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!hasChanges} onClick={onApply}>\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {connection}) => {\n const {element = {}, type} = contextValue || {};\n const {relationUri, relationType} = connection.relation;\n const isHighlighted =\n isHighlightedErrorType(type) && isAttributeTypeError(element as AttributeError, relationUri, relationType);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n RelationEditor\n);\n","import React, {useEffect, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {MapInstance} from '../../types';\n\ntype Props = {\n children: React.ReactNode;\n className?: string;\n position: number;\n map: MapInstance;\n};\n\nexport const MapControlContainer = ({children, className, position, map}: Props) => {\n const [controlElement, setControlElement] = useState(null);\n\n useEffect(() => {\n const controlDiv = document.createElement('div');\n const divIndex = map.controls[position].length;\n map.controls[position].push(controlDiv);\n setControlElement(controlDiv);\n\n return () => {\n map.controls[position].removeAt(divIndex);\n };\n }, [map, position]);\n\n useEffect(() => {\n if (controlElement && className) {\n controlElement.classList.add(className);\n }\n }, [className, controlElement]);\n\n if (controlElement) {\n return createPortal(children, controlElement);\n }\n\n return null;\n};\n","import React from 'react';\n\nconst SvgRadius: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.61 8.568A1.666 1.666 0 119.432 7.39l3.656-3.657a6.668 6.668 0 101.179 1.179L10.61 8.568zm-7.503 6.325A8.333 8.333 0 1114.893 3.107 8.333 8.333 0 013.107 14.893z\"\n fill=\"#000\"\n stroke=\"none\"\n strokeWidth={1}\n fillRule=\"evenodd\"\n opacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgRadius;\n","import React from 'react';\n\nconst SvgDraw: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <path\n d=\"M18.29 11.44a1.49 1.49 0 012.12 0l1.15 1.15c.59.58.59 1.53 0 2.12L16.27 20H13v-3.27zM18.174 4c0 1.71-.26 3.285-.932 4.563-.946 1.798-2.609 2.724-4.906 2.46l-.855-.116c-4.382-.544-6.626.53-6.626 3.609 0 1.968 1.105 2.924 3.267 3.304.692.121 1.306.165 2.234.176L11 18v2l-.698-.003c-1.016-.013-1.71-.063-2.526-.206-3.018-.53-4.921-2.176-4.921-5.274 0-4.819 3.71-6.378 9.52-5.505 1.575.237 2.506-.255 3.098-1.38.451-.858.666-2.02.697-3.307L16.174 4h2zM18 13.97l-3.45 3.45v1.03h1.03L19.03 15 18 13.97z\"\n id=\"Draw_svg__a\"\n />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"Draw_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#Draw_svg__a\" />\n </mask>\n <g mask=\"url(#Draw_svg__b)\" fill=\"#000\" fillOpacity={0.54}>\n <path d=\"M0 0h24v24H0z\" />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgDraw;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n margin: '2px',\n display: 'flex',\n alignItems: 'center'\n },\n button: {\n color: 'rgba(0,0,0,0.54)',\n padding: 0,\n height: '24px',\n width: '24px',\n minWidth: 0\n },\n icon: {\n width: '20px',\n height: '20px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport {withTooltip} from '../../../../HOCs';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport {MAP_DRAWING_MODES} from '../../../../constants';\nimport RadiusIcon from '../../../../icons/Radius';\nimport DrawIcon from '../../../../icons/Draw';\nimport {DrawingMode, DrawingModes} from '../../types';\nimport {useStyles} from './styles';\n\nexport const ButtonWithTooltip = withTooltip(Button);\n\nconst getIcon = (mode: DrawingMode) => {\n switch (mode) {\n case MAP_DRAWING_MODES.CIRCLE:\n return RadiusIcon;\n case MAP_DRAWING_MODES.POLYGON:\n return DrawIcon;\n default:\n return null;\n }\n};\n\ntype Props = {\n onDrawingModeChanged: (value: DrawingMode | null) => void;\n drawingMode: DrawingMode | null;\n drawingModes: DrawingModes;\n hasActiveOverlay: boolean;\n onClearOverlay: () => void;\n};\n\nexport const TopRightMapControls = ({\n drawingMode,\n drawingModes = [],\n hasActiveOverlay,\n onDrawingModeChanged,\n onClearOverlay\n}: Props) => {\n const styles = useStyles();\n\n const changeDrawingModeTo = (drawingMode) => () => {\n onDrawingModeChanged(drawingMode);\n };\n\n return (\n <div className={styles.container}>\n {drawingMode || hasActiveOverlay ? (\n <ButtonWithTooltip\n tooltipTitle={i18n.text('Clear area')}\n className={styles.button}\n onClick={hasActiveOverlay ? onClearOverlay : changeDrawingModeTo(null)}\n >\n <HighlightOffIcon className={styles.icon} />\n </ButtonWithTooltip>\n ) : (\n drawingModes.map((mode) => {\n const Icon = getIcon(mode);\n return (\n <ButtonWithTooltip\n tooltipTitle={i18n.text('Draw area')}\n key={mode}\n className={styles.button}\n onClick={changeDrawingModeTo(mode)}\n >\n <Icon className={styles.icon} />\n </ButtonWithTooltip>\n );\n })\n )}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n height: '28px',\n marginRight: '7px',\n marginLeft: 0\n },\n label: {\n fontSize: '11px',\n alignSelf: 'center',\n lineHeight: '13px',\n marginLeft: '2px',\n letterSpacing: 0\n },\n checkbox: {\n width: '20px',\n height: '20px',\n boxSizing: 'content-box',\n padding: '5px',\n '& svg': {\n width: '16px',\n height: '16px'\n }\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport {useStyles} from './styles';\n\ntype Props = {\n isSearchOnMapMove: boolean;\n onChangeIsSearchOnMapMove: (value: boolean) => void;\n};\n\nexport const TopCenterMapControls = ({isSearchOnMapMove, onChangeIsSearchOnMapMove}: Props) => {\n const styles = useStyles();\n const onChange = (event) => {\n onChangeIsSearchOnMapMove(event.target.checked);\n };\n return (\n <FormControlLabel\n classes={{\n root: styles.container,\n label: styles.label\n }}\n control={<Checkbox checked={isSearchOnMapMove} onChange={onChange} className={styles.checkbox} />}\n label={i18n.text('Search as I move the map')}\n />\n );\n};\n","import {MAP_DRAWING_MODES, MAP_MINIMUM_SCALE_RADIUS} from '../../../constants';\nimport {DrawingMode, EntityMarker, Overlay, MapInstance} from '../types';\n\nexport const getMapBoundsPolygon = (map: MapInstance) => {\n const bounds = map.getBounds();\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n const neLat = ne.lat(),\n neLng = ne.lng(),\n swLat = sw.lat(),\n swLng = sw.lng();\n const additionalPoint1 = [];\n const additionalPoint2 = [];\n if (!((neLng === 180 && swLng === -180) || (neLng === -180 && swLng === 180))) {\n // excluding corner case when we see more than one \"map unfolding\" (in this case google maps automatically set 180 and -180),\n // we can't describe map bounds as just rectangle, because lng distance can be more than 180\",\n // so we need to add additional points to have correct polygon\n const center = bounds.getCenter();\n additionalPoint1.push([neLat, center.lng()]);\n additionalPoint2.push([swLat, center.lng()]);\n }\n return [[neLat, neLng], ...additionalPoint1, [neLat, swLng], [swLat, swLng], ...additionalPoint2, [swLat, neLng]];\n};\n\nexport const getDrawingMode = (drawingMode: DrawingMode) => {\n switch (drawingMode) {\n case MAP_DRAWING_MODES.CIRCLE:\n return window.google.maps.drawing.OverlayType.CIRCLE;\n case MAP_DRAWING_MODES.POLYGON:\n return window.google.maps.drawing.OverlayType.POLYGON;\n default:\n return null;\n }\n};\n\nexport const fitMapBoundsForMarkers = (markers: EntityMarker[], map: MapInstance, overlay: Overlay) => {\n const bounds = new window.google.maps.LatLngBounds();\n\n markers.forEach((marker) => bounds.extend(marker.point));\n\n if (markers.length === 1) {\n const center = bounds.getCenter();\n\n bounds.extend(\n new window.google.maps.LatLng(\n center.lat() + MAP_MINIMUM_SCALE_RADIUS,\n center.lng() + MAP_MINIMUM_SCALE_RADIUS\n )\n );\n bounds.extend(\n new window.google.maps.LatLng(\n center.lat() - MAP_MINIMUM_SCALE_RADIUS,\n center.lng() - MAP_MINIMUM_SCALE_RADIUS\n )\n );\n }\n\n map.fitBounds(bounds);\n\n if (overlay) {\n fitMapBoundsForOverlay(map, overlay, bounds);\n }\n};\n\nexport const fitMapBoundsForOverlay = (map: MapInstance, overlay: Overlay, existingBounds?) => {\n if (overlay.path) {\n const bounds = existingBounds || new window.google.maps.LatLngBounds();\n overlay.path.forEach(({lat, lng}) => bounds.extend(new window.google.maps.LatLng(lat, lng)));\n map.fitBounds(bounds);\n }\n};\n","export const MARKER = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"22px\" height=\"32px\" viewBox=\"0 0 22 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>View / Map / Marker / Large</title>\n <defs>\n <radialGradient cx=\"50%\" cy=\"50.2950175%\" fx=\"50%\" fy=\"50.2950175%\" r=\"49.7049825%\" gradientTransform=\"translate(0.500000,0.502950),scale(0.777778,1.000000),rotate(90.000000),scale(1.000000,1.293560),translate(-0.500000,-0.502950)\" id=\"radialGradient-1\">\n <stop stop-color=\"#000000\" offset=\"0%\"></stop>\n <stop stop-color=\"#000000\" stop-opacity=\"0\" offset=\"100%\"></stop>\n </radialGradient>\n <path d=\"M20,1 C20.5522847,1 21,1.44771525 21,2 L21,20 C21,20.5522847 20.5522847,21 20,21 L15.2374606,21.0021908 C14.9306693,21.3935449 14.6510143,21.7632851 14.3885453,22.1256523 C12.8309725,24.2760522 12,26.0137017 12,27.5 C12,28.0522847 11.5522847,28.5 11,28.5 C10.4477153,28.5 10,28.0522847 10,27.5 C10,25.7886708 8.84033182,23.6810997 6.73798027,21.0014567 L2,21 C1.44771525,21 1,20.5522847 1,20 L1,2 C1,1.44771525 1.44771525,1 2,1 L20,1 Z\" id=\"path-2\"></path>\n </defs>\n <g id=\"View-/-Map-/-Marker-/-Large\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse id=\"Oval\" fill=\"url(#radialGradient-1)\" opacity=\"0.12\" cx=\"11\" cy=\"28.5\" rx=\"4.5\" ry=\"3.5\"></ellipse>\n <path d=\"M21,0 C21.5522847,-1.01453063e-16 22,0.44771525 22,1 L22,21 C22,21.5522847 21.5522847,22 21,22 L15.7283832,22.0012846 C15.5422129,22.2445529 15.3664776,22.4802332 15.1984183,22.7122576 C13.7560833,24.7035592 13,26.2846074 13,27.5 L13,27.5 L12.9945143,27.6492623 C12.9181651,28.6841222 12.0543618,29.5 11,29.5 C9.8954305,29.5 9,28.6045695 9,27.5 L9,27.5 L8.99485006,27.3298651 C8.91582184,26.0024976 7.93016704,24.2171459 6.23940611,22.000704 L1,22 C0.44771525,22 6.76353751e-17,21.5522847 0,21 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 L21,0 Z\" id=\"Path-3\" fill=\"#FFFFFF\"></path>\n <mask id=\"mask-3\" fill=\"white\">\n <use xlink:href=\"#path-2\"></use>\n </mask>\n <use id=\"Path-2\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" xlink:href=\"#path-2\"></use>\n <rect id=\"Entity-type\" fill=\"#24A8E8\" mask=\"url(#mask-3)\" x=\"0\" y=\"0\" width=\"22\" height=\"32\"></rect>\n </g>\n</svg>`;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n popper: {\n maxWidth: '263px',\n minWidth: '150px',\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)',\n backgroundColor: 'white',\n borderRadius: '2px'\n }\n});\n","import React, {memo, useCallback, useContext, useRef, useState} from 'react';\nimport {pathEq} from 'ramda';\nimport {Marker, InfoBox, MarkerProps} from '@react-google-maps/api';\nimport ProfileCard from '../../ProfileCard/ProfileCard';\nimport Popper from '../../Popper/Popper';\nimport {debounce, svg2Url} from '@reltio/mdm-sdk';\nimport {EntityMarkerContext} from '../../../contexts';\nimport {MARKER} from './icons/marker.inline.svg';\nimport {HOVERED_MARKER} from './icons/marker-hover.inline.svg';\nimport {EntityMarker as EntityMarkerType} from '../types';\nimport {useStyles} from './styles';\n\nconst HIDE_DEBOUNCE_INTERVAL = 50;\nconst MARKER_WIDTH = 22;\nconst MARKER_HEIGHT = 32;\nconst MARKER_CARD_MARGIN = 8;\n\nconst hoveredMarkerIcon = svg2Url(HOVERED_MARKER);\nconst markerIcon = svg2Url(MARKER);\n\ntype Props = {\n marker: EntityMarkerType;\n onClick: (marker: EntityMarkerType) => void;\n} & Omit<MarkerProps, 'onClick' | 'icon' | 'position' | 'visible' | 'onMouseOver' | 'onMouseOut'>;\n\nconst EntityMarker = ({marker, onClick, ...otherProps}: Props) => {\n const styles = useStyles();\n const popperAnchor = useRef();\n const [hovered, setHovered] = useState(false);\n const {activeEntityUri} = useContext(EntityMarkerContext);\n const isActive = pathEq(['entity', 'uri'], activeEntityUri, marker);\n const position = {lat: marker.point.lat, lng: marker.point.lng};\n const setHoveredDebounced = useCallback(debounce(setHovered, HIDE_DEBOUNCE_INTERVAL), []);\n const onMouseOver = useCallback(() => setHoveredDebounced(true), [setHoveredDebounced]);\n const onMouseOut = useCallback(() => setHoveredDebounced(false), [setHoveredDebounced]);\n const handleClick = useCallback(() => onClick(marker), [onClick, marker]);\n\n return (\n <>\n <Popper\n anchorEl={popperAnchor.current}\n open={hovered}\n className={styles.popper}\n modal={false}\n placement=\"top\"\n >\n <ProfileCard entity={marker.entity} onMouseOver={onMouseOver} onMouseOut={onMouseOut} />\n </Popper>\n <Marker\n icon={{\n url: hovered || isActive ? hoveredMarkerIcon : markerIcon,\n // needed for IE:\n scaledSize: new google.maps.Size(MARKER_WIDTH, MARKER_HEIGHT) //eslint-disable-line\n }}\n position={position}\n onClick={handleClick}\n visible={marker.visible !== false}\n onMouseOver={onMouseOver}\n onMouseOut={onMouseOut}\n {...otherProps}\n />\n <InfoBox\n options={{\n alignBottom: true,\n pane: 'mapPane',\n pixelOffset: new google.maps.Size(0, -(MARKER_HEIGHT + MARKER_CARD_MARGIN)), //eslint-disable-line\n closeBoxURL: '',\n enableEventPropagation: true,\n disableAutoPan: true\n }}\n position={position}\n >\n <span ref={popperAnchor} />\n </InfoBox>\n </>\n );\n};\n\nexport default memo(EntityMarker);\n","export const HOVERED_MARKER = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"22px\" height=\"32px\" viewBox=\"0 0 22 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>View / Map / Marker / Large (hover)</title>\n <defs>\n <radialGradient cx=\"50%\" cy=\"50.2950175%\" fx=\"50%\" fy=\"50.2950175%\" r=\"49.7049825%\" gradientTransform=\"translate(0.500000,0.502950),scale(0.777778,1.000000),rotate(90.000000),scale(1.000000,1.293560),translate(-0.500000,-0.502950)\" id=\"radialGradient-1\">\n <stop stop-color=\"#000000\" offset=\"0%\"></stop>\n <stop stop-color=\"#000000\" stop-opacity=\"0\" offset=\"100%\"></stop>\n </radialGradient>\n <path d=\"M21,0 C21.5522847,-1.01453063e-16 22,0.44771525 22,1 L22,21 C22,21.5522847 21.5522847,22 21,22 L15.7283832,22.0012846 C15.5422129,22.2445529 15.3664776,22.4802332 15.1984183,22.7122576 C13.7560833,24.7035592 13,26.2846074 13,27.5 L13,27.5 L12.9945143,27.6492623 C12.9181651,28.6841222 12.0543618,29.5 11,29.5 C9.8954305,29.5 9,28.6045695 9,27.5 L9,27.5 L8.99485006,27.3298651 C8.91582184,26.0024976 7.93016704,24.2171459 6.23940611,22.000704 L1,22 C0.44771525,22 6.76353751e-17,21.5522847 0,21 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 L21,0 Z\" id=\"path-2\"></path>\n </defs>\n <g id=\"View-/-Map-/-Marker-/-Large-(hover)\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse id=\"Oval\" fill=\"url(#radialGradient-1)\" opacity=\"0.32\" cx=\"11\" cy=\"28.5\" rx=\"6\" ry=\"4.66666667\"></ellipse>\n <mask id=\"mask-3\" fill=\"white\">\n <use xlink:href=\"#path-2\"></use>\n </mask>\n <use id=\"Path-2\" fill=\"#FFFFFF\" xlink:href=\"#path-2\"></use>\n <rect id=\"Entity-type\" fill=\"#24A8E8\" mask=\"url(#mask-3)\" x=\"0\" y=\"0\" width=\"22\" height=\"32\"></rect>\n <path d=\"M20,2 L20,20 L14.755,20 L14.6905172,20.0815309 C14.3562717,20.5012516 14.0578656,20.8886742 13.7817711,21.2616986 L13.5786724,21.5390469 C11.92787,23.8181606 11.079024,25.6311217 11.0052669,27.2674145 L11.0052669,27.2674145 L11,27.5 L10.9968324,27.3203844 C10.9285422,25.3781621 9.75347502,23.1598866 7.22124201,20.0010865 L2,20 L2,2 L20,2 Z\" id=\"Path\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" mask=\"url(#mask-3)\"></path>\n </g>\n</svg>`;\n","import {useEffect} from 'react';\nimport {usePrevious} from '../../../hooks';\nimport {fitMapBoundsForMarkers, fitMapBoundsForOverlay} from '../helpers';\n\nexport const useFitMapBounds = ({markers, activeOverlay, isSearchOnMapMove, map}) => {\n const apiIsLoaded = Boolean(map && window.google);\n const prevMarkers = usePrevious(markers);\n const prevActiveOverlay = usePrevious(activeOverlay);\n const prevApiIsLoaded = usePrevious(apiIsLoaded);\n\n useEffect(() => {\n const activeOverlayChanged = prevActiveOverlay !== activeOverlay;\n const markersChanged = prevMarkers !== markers;\n const apiIsLoadedChanged = prevApiIsLoaded !== apiIsLoaded;\n\n const shouldUseFitMapBoundsForOverlay =\n apiIsLoaded && activeOverlay && (activeOverlayChanged || apiIsLoadedChanged);\n const shouldUseFitMapBoundsForMarkers =\n apiIsLoaded && !isSearchOnMapMove && markers.length && (markersChanged || apiIsLoadedChanged);\n\n if (shouldUseFitMapBoundsForMarkers) {\n fitMapBoundsForMarkers(markers, map, activeOverlay);\n } else if (shouldUseFitMapBoundsForOverlay) {\n fitMapBoundsForOverlay(map, activeOverlay);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiIsLoaded, markers, activeOverlay]);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n mapControlContainer: {\n borderRadius: '2px',\n backgroundColor: '#FFFFFF',\n boxShadow: '0 1px 3px 0 rgba(0,0,0,0.15)',\n margin: '10px'\n }\n});\n","import React, {useCallback, useMemo, useRef, useState} from 'react';\nimport {propEq, isEmpty, prop} from 'ramda';\nimport {\n GoogleMap,\n useJsApiLoader,\n GoogleMapProps,\n Polygon,\n DrawingManager,\n MarkerClusterer,\n LoadScriptProps,\n MarkerProps,\n MarkerClustererProps\n} from '@react-google-maps/api';\nimport {noop} from '../../core/utils';\nimport {MapControlContainer} from './MapControls/MapControlContainer/MapControlContrainer';\nimport {TopRightMapControls} from './MapControls/TopRightMapControls/TopRightMapControls';\nimport {TopCenterMapControls} from './MapControls/TopCenterMapControls/TopCenterMapControls';\nimport {getMapBoundsPolygon, getDrawingMode} from './helpers';\nimport EntityMarker from './EntityMarker/EntityMarker';\nimport {DEFAULT_GOOGLE_MAP_OPTIONS, DEFAULT_OVERLAY_OPTIONS, MAP_DRAWING_MODES} from '../../constants';\nimport {DrawingModes, EntityMarker as Marker, MapBounds, Overlay, OverlayPath} from './types';\nimport {useFitMapBounds} from './hooks/useFitMapBounds';\n\nimport {useStyles} from './styles';\n\nconst ON_MAP_MOVE_DEBOUNCE_INTERVAL = 1000;\n\nconst libraries = ['drawing'] as LoadScriptProps['libraries'];\n\ntype MarkerClustererOptions = MarkerClustererProps['options'];\ntype Props = {\n markers?: Marker[];\n mapKey: string;\n defaultZoom?: GoogleMapProps['zoom'];\n defaultCenter?: GoogleMapProps['center'];\n loadingElement: JSX.Element;\n isSearchOnMapMove?: boolean;\n isSearchEnabled?: boolean;\n activeOverlay?: Overlay;\n overlayOptions?: google.maps.PolygonOptions | google.maps.CircleOptions;\n drawingModes?: DrawingModes;\n markerClusterer?: boolean;\n markerClustererOptions?: MarkerClustererOptions;\n mapOptions?: google.maps.MapOptions;\n mapContainerClassName?: string;\n onMapBoundsChanged?: (value: MapBounds | null) => void;\n onOverlayUpdated?: (value: {data: OverlayPath; type: string}) => void;\n onMarkerClicked?: (value: Marker) => void;\n};\n\nexport const ReltioMap = ({\n markers = [],\n mapKey,\n defaultZoom,\n defaultCenter,\n loadingElement,\n isSearchOnMapMove,\n isSearchEnabled,\n activeOverlay,\n overlayOptions = {},\n drawingModes = [],\n markerClusterer,\n markerClustererOptions,\n mapOptions = {},\n mapContainerClassName,\n onMapBoundsChanged = noop,\n onOverlayUpdated = noop,\n onMarkerClicked = noop\n}: Props) => {\n const styles = useStyles();\n const {isLoaded, loadError} = useJsApiLoader({\n googleMapsApiKey: mapKey,\n libraries\n });\n\n const mapMoveEndTimer = useRef(null);\n const [map, setMap] = useState<google.maps.Map>(null);\n const [polygon, setPolygon] = useState(null);\n const [drawingMode, setDrawingMode] = useState(null);\n\n useFitMapBounds({markers, activeOverlay, map, isSearchOnMapMove});\n\n const allOverlayOptions = useMemo(() => ({...DEFAULT_OVERLAY_OPTIONS, ...overlayOptions}), [overlayOptions]);\n const googleMapOptions = useMemo(() => ({...DEFAULT_GOOGLE_MAP_OPTIONS, ...mapOptions}), [mapOptions]);\n\n const handleChangeIsSearchOnMapMove = useCallback(\n (isSearchOnMapMove: boolean) => {\n onMapBoundsChanged(isSearchOnMapMove ? getMapBoundsPolygon(map) : null);\n setDrawingMode(null);\n clearTimeout(mapMoveEndTimer.current);\n },\n [map, onMapBoundsChanged]\n );\n\n const handleMapMoveStart = useCallback(() => {\n clearTimeout(mapMoveEndTimer.current);\n }, []);\n\n const handleMapMoveEnd = useCallback(() => {\n if (!isSearchOnMapMove) return;\n onMapBoundsChanged(getMapBoundsPolygon(map));\n }, [isSearchOnMapMove, map, onMapBoundsChanged]);\n\n const handleMapIdle = useCallback(() => {\n if (!isSearchOnMapMove) return;\n clearTimeout(mapMoveEndTimer.current);\n mapMoveEndTimer.current = setTimeout(handleMapMoveEnd, ON_MAP_MOVE_DEBOUNCE_INTERVAL);\n }, [handleMapMoveEnd, isSearchOnMapMove]);\n\n const handleOverlayChange = useCallback(\n (e, propOverlay?) => {\n const polygonStateOverlay = polygon && {type: MAP_DRAWING_MODES.POLYGON, overlay: polygon};\n const stateOverlay = propOverlay || polygonStateOverlay;\n\n if (isEmpty(stateOverlay)) return;\n\n const {overlay, type} = stateOverlay;\n\n const getPolygonLatLngCoordinates = () =>\n overlay\n .getPath()\n .getArray()\n .map((latlng) => [latlng.lat(), latlng.lng()]);\n\n const getCircleParameters = () => ({radius: overlay.getRadius() / 1000, center: overlay.getCenter()});\n\n const typeActions = {\n [MAP_DRAWING_MODES.POLYGON]: getPolygonLatLngCoordinates,\n [MAP_DRAWING_MODES.CIRCLE]: getCircleParameters\n };\n\n const data = typeActions[type]?.();\n\n if (!data) return;\n\n onOverlayUpdated({data, type});\n },\n [onOverlayUpdated, polygon]\n );\n\n const handleOverlayComplete = useCallback(\n (type) => (overlay) => {\n handleOverlayChange(null, {type, overlay});\n overlay.setMap(null);\n setDrawingMode(null);\n },\n [handleOverlayChange]\n );\n\n const handleClearOverlay = useCallback(() => {\n onOverlayUpdated(null);\n }, [onOverlayUpdated]);\n\n const renderMarkers = (clusterer?: MarkerProps['clusterer']) => {\n return markers\n .filter(prop('point'))\n .map((marker) => (\n <EntityMarker key={marker.id} marker={marker} clusterer={clusterer} onClick={onMarkerClicked} />\n ));\n };\n\n const renderMarkerClusterer = (options?: MarkerClustererOptions) => {\n return <MarkerClusterer options={options}>{renderMarkers}</MarkerClusterer>;\n };\n\n if (loadError) {\n return null;\n }\n\n if (!isLoaded) {\n return loadingElement;\n }\n\n const shouldRenderDrawingManager = isSearchEnabled && Boolean(drawingModes.length);\n const shouldRenderRightMapControls = map && isSearchEnabled && Boolean(drawingModes.length);\n const shouldRenderCenterMapControls = map && isSearchEnabled;\n const shouldRenderPolygon =\n !getDrawingMode(drawingMode) && activeOverlay && propEq('type', MAP_DRAWING_MODES.POLYGON, activeOverlay);\n\n return (\n <GoogleMap\n mapTypeId={window.google.maps.MapTypeId.ROADMAP}\n options={googleMapOptions}\n onLoad={setMap}\n zoom={defaultZoom}\n center={defaultCenter}\n onZoomChanged={handleMapMoveStart}\n onDragStart={handleMapMoveStart}\n onIdle={handleMapIdle}\n mapContainerClassName={mapContainerClassName}\n >\n {shouldRenderRightMapControls && (\n <MapControlContainer\n className={styles.mapControlContainer}\n position={window.google.maps.ControlPosition.TOP_RIGHT}\n map={map}\n >\n <TopRightMapControls\n hasActiveOverlay={!!activeOverlay}\n drawingModes={drawingModes}\n drawingMode={drawingMode}\n onDrawingModeChanged={setDrawingMode}\n onClearOverlay={handleClearOverlay}\n />\n </MapControlContainer>\n )}\n\n {shouldRenderCenterMapControls && (\n <MapControlContainer\n className={styles.mapControlContainer}\n position={window.google.maps.ControlPosition.TOP_CENTER}\n map={map}\n >\n <TopCenterMapControls\n onChangeIsSearchOnMapMove={handleChangeIsSearchOnMapMove}\n isSearchOnMapMove={isSearchOnMapMove}\n />\n </MapControlContainer>\n )}\n\n {markerClusterer ? renderMarkerClusterer(markerClustererOptions) : renderMarkers()}\n\n {shouldRenderPolygon && (\n <Polygon\n onLoad={setPolygon}\n path={activeOverlay.path}\n editable={true}\n options={allOverlayOptions}\n onMouseUp={handleOverlayChange}\n onDragEnd={handleOverlayChange}\n />\n )}\n\n {shouldRenderDrawingManager && (\n <DrawingManager\n onPolygonComplete={handleOverlayComplete(MAP_DRAWING_MODES.POLYGON)}\n onCircleComplete={handleOverlayComplete(MAP_DRAWING_MODES.CIRCLE)}\n drawingMode={getDrawingMode(drawingMode)}\n options={{\n drawingControl: false,\n circleOptions: allOverlayOptions,\n polygonOptions: allOverlayOptions\n }}\n />\n )}\n </GoogleMap>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n onlyValue: {\n color: 'rgba(0,0,0,.6)',\n fontSize: '13px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden'\n },\n select: {\n fontSize: '13px',\n color: 'rgba(0,0,0,.6)',\n paddingLeft: '15px',\n '&&&': {\n paddingRight: '35px'\n }\n },\n selectMenu: {\n '& li': {\n fontSize: '13px',\n height: '32px'\n }\n },\n textField: {\n maxWidth: '100%'\n }\n});\n","import React, {useEffect} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\nimport DropDownEditor from '../editors/DropDownEditor/DropDownEditor';\n\nconst SelectorWithOnlyOptionAutoSelect = ({value, onChange, options, classes = {}, emptyLabel}) => {\n const styles = useStyles();\n\n const [firstOption, ...moreOptions] = options;\n const hasOnlyOneOptionToSelect = moreOptions.length === 0;\n\n useEffect(() => {\n if (hasOnlyOneOptionToSelect && value !== firstOption.value) {\n onChange(firstOption.value);\n }\n }, [firstOption.value]); // eslint-disable-line\n\n const displayEmpty = !!emptyLabel;\n\n return (\n <div className={classes.root}>\n {hasOnlyOneOptionToSelect ? (\n <Typography className={classes.onlyValue || styles.onlyValue} variant={'h6'}>\n {firstOption.label}\n </Typography>\n ) : (\n <DropDownEditor\n displayEmpty={displayEmpty}\n disableUnderline={true}\n classes={{\n select: classes.select || styles.select\n }}\n TextFieldProps={{\n classes: {\n root: classes.textField || styles.textField\n }\n }}\n MenuProps={{\n classes: {\n list: classes.selectMenu || styles.selectMenu\n }\n }}\n value={value || ''}\n entries={displayEmpty ? [{value: '', label: emptyLabel}, ...options] : options}\n onChange={(value) => onChange(value || null)}\n />\n )}\n </div>\n );\n};\n\nSelectorWithOnlyOptionAutoSelect.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string\n })\n ),\n classes: PropTypes.shape({\n root: PropTypes.string,\n onlyValue: PropTypes.string,\n select: PropTypes.string,\n selectMenu: PropTypes.string,\n textField: PropTypes.string\n }),\n emptyLabel: PropTypes.string\n};\n\nexport default SelectorWithOnlyOptionAutoSelect;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n '&:last-child > div > div > div': {\n overflow: 'hidden!important'\n }\n },\n rowSkeleton: {\n margin: '15px 25px',\n width: '40%'\n }\n});\n","import React, {useMemo} from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {BasicTable} from '../BasicTableView';\nimport {ColumnData, RenderRowCellProps} from '../BasicTableView/types';\nimport {useStyles} from './styles';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = Omit<React.ComponentProps<typeof BasicTable>, 'rowsData' | 'renderRowCell'> & {\n tableColumnsData: ColumnData[];\n RowCellRenderer?: (props: RenderRowCellProps) => JSX.Element;\n};\n\nconst DefaultRowCellRenderer = () => {\n const styles = useStyles();\n return <Skeleton className={styles.rowSkeleton} />;\n};\n\nexport const TableSkeleton = ({tableColumnsData, RowCellRenderer, ...props}: Props) => {\n const styles = useStyles();\n\n const tableRowsData = useMemo(() => {\n const entries = tableColumnsData.map((column) => [column.id, []]);\n const skeletonRow = Object.fromEntries(entries);\n return [{...skeletonRow, value: {label: '', value: {}, uri: 'skeleton'}}];\n }, [tableColumnsData]);\n\n const renderRowCell = (props: RenderRowCellProps) =>\n RowCellRenderer ? <RowCellRenderer {...props} /> : <DefaultRowCellRenderer />;\n\n return (\n <BasicTable\n autosizing\n containerClassName={styles.container}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n defaultColumnMinWidth={200}\n defaultColumnWidth={250}\n headRowHeight={48}\n renderRowCell={renderRowCell}\n maxHeight={MAX_HEIGHT}\n {...props}\n />\n );\n};\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst VerticalDivider = ({height, margin}) => (\n <div\n style={{\n width: '1px',\n height: `${height}px`,\n borderLeft: '1px solid rgba(0,0,0,0.38)',\n margin: `0 ${margin}px`,\n flexShrink: '0'\n }}\n />\n);\n\nVerticalDivider.propTypes = {\n height: PropTypes.number,\n margin: PropTypes.number\n};\n\nexport default VerticalDivider;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n padding: '8px 16px'\n },\n noCaption: {\n paddingTop: '16px'\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useMemo} from 'react';\nimport {Entity, getAttributesListForReadMode, isEmptyValue} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport {PivotingAttributeContext, useMdmMetadata, useMdmPivotingAttributes} from '../../../../contexts';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {useStyles} from './styles';\n\ntype Props = Omit<AttributesViewProps, 'mode' | 'pinnedAttributes'>;\n\nconst AttributesView = ({\n className,\n entity = {} as Entity,\n caption = '',\n excludeUris = [],\n includeUris = [],\n attributesCount = 16\n}: Props) => {\n const styles = useStyles();\n\n const metadata = useMdmMetadata();\n const pivotingAttributes = useMdmPivotingAttributes();\n\n const filteredAttrTypes = useMemo(\n () => getFilteredAttrTypes(metadata, entity.type, includeUris, excludeUris),\n [excludeUris, includeUris, metadata, entity.type]\n );\n\n const attributesList = getAttributesListForReadMode(filteredAttrTypes, entity);\n\n const isShowAttributeList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n return isShowAttributeList || !isEmptyValue(caption) ? (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={className}>\n {caption && <FacetViewHeader title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n {isShowAttributeList ? (\n <AttributesList\n entity={entity}\n attrTypes={filteredAttrTypes}\n parentUri={entity.uri}\n drawLines={false}\n max={attributesCount}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n </Box>\n </BasicView>\n </PivotingAttributeContext.Provider>\n ) : null;\n};\n\nexport default AttributesView;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n overflow: 'hidden',\n padding: '8px 16px'\n },\n noCaption: {\n paddingTop: '16px'\n }\n});\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n isTempUri,\n getPinnedAttributesForUser,\n Entity,\n AddAttributesPayload,\n ModifyAttributePayload,\n RemoveAttributePayload\n} from '@reltio/mdm-sdk';\nimport Box from '@mui/material/Box';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {ViewIdContext, useMdmAction, useMdmMetadata, useMdmModifiedEntity, useMdmUserRoles} from '../../../../contexts';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {PinnedAttributesContext} from '../contexts/PinnedAttributesContext';\n\nimport {useStyles} from './styles';\n\ntype Props = Omit<AttributesViewProps, 'attributesCount'>;\n\nconst AttributesView = ({\n className,\n mode,\n entity,\n caption = '',\n excludeUris = [],\n includeUris = [],\n pinnedAttributes\n}: Props) => {\n const styles = useStyles();\n const viewId = useContext(ViewIdContext);\n\n const addAttributes = useMdmAction('addAttributes');\n const modifyAttribute = useMdmAction('modifyAttribute');\n const removeAttribute = useMdmAction('removeAttribute');\n const metadata = useMdmMetadata();\n const userRoles = useMdmUserRoles();\n const modifiedEntity = useMdmModifiedEntity(entity.uri) || ({} as Entity);\n\n const pinnedAttributeUris = useMemo(\n () => getPinnedAttributesForUser(pinnedAttributes, userRoles),\n [pinnedAttributes, userRoles]\n );\n\n const filteredAttrTypes = useMemo(\n () => getFilteredAttrTypes(metadata, modifiedEntity.type, includeUris, excludeUris),\n [excludeUris, includeUris, metadata, modifiedEntity.type]\n );\n\n const onAddAttributes = useCallback(\n (params: AddAttributesPayload) => addAttributes(params.map((param) => ({...param, viewId}))),\n [viewId, addAttributes]\n );\n\n const onChangeAttribute = useCallback(\n (params: ModifyAttributePayload) => modifyAttribute({...params, viewId}),\n [viewId, modifyAttribute]\n );\n\n const onDeleteAttribute = useCallback(\n (params: RemoveAttributePayload) => removeAttribute({...params, viewId}),\n [viewId, removeAttribute]\n );\n\n return (\n <BasicView className={className}>\n {caption && <FacetViewHeader title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n <PinnedAttributesContext.Provider value={pinnedAttributeUris}>\n <AttributesList\n entity={modifiedEntity}\n attrTypes={filteredAttrTypes}\n parentUri={modifiedEntity.uri}\n drawLines={false}\n mode={mode}\n showEmptyEditors={isTempUri(modifiedEntity.uri)}\n crosswalks={modifiedEntity.crosswalks}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n </PinnedAttributesContext.Provider>\n </Box>\n </BasicView>\n );\n};\n\nexport default AttributesView;\n","import React from 'react';\nimport {isViewMode} from '@reltio/mdm-sdk';\nimport {AttributesViewProps} from '../types';\nimport ReadModeAttributesView from '../readMode/AttributesView/AttributesView';\nimport EditModeAttributesView from '../editMode/AttributesView/AttributesView';\nimport {useMdmEntityWithDiff, useMdmMode, EntityContext} from '../../../contexts';\n\nconst AttributesView = ({attributesCount, pinnedAttributes, ...restProps}: AttributesViewProps) => {\n const mdmEntity = useMdmEntityWithDiff();\n const mdmMode = useMdmMode();\n\n const entity = restProps.entity || mdmEntity;\n const mode = restProps.mode || mdmMode;\n\n return (\n <EntityContext.Provider value={entity}>\n {isViewMode(mode) ? (\n <ReadModeAttributesView {...restProps} attributesCount={attributesCount} entity={entity} />\n ) : (\n <EditModeAttributesView\n {...restProps}\n mode={mode}\n pinnedAttributes={pinnedAttributes}\n entity={entity}\n />\n )}\n </EntityContext.Provider>\n );\n};\n\nexport default AttributesView;\n","import {useEffect} from 'react';\nimport {evolve, map} from 'ramda';\nimport {entity as History, HistoryDiff, HistoryMode, wrapInArrayIfNeeded} from '@reltio/mdm-sdk';\nimport {useMdmAction, useMdmEntity, useMdmHistoryDiff, useMdmHistoryMode, useMdmHistorySlice} from '../../../contexts';\n\nexport const defaultHistoryDiff: HistoryDiff = {\n appearance: {},\n attributes: {},\n roles: [],\n tags: []\n};\n\nconst fixRefEntity = evolve({\n refEntity: wrapInArrayIfNeeded,\n refRelation: wrapInArrayIfNeeded\n});\n\nconst prepareHistorySlice = (historySlice) => {\n if (historySlice) {\n return evolve({\n attributes: map(map(fixRefEntity))\n })(historySlice);\n }\n return historySlice;\n};\n\nexport const useHistoryDiff = () => {\n const setHistoryDiff = useMdmAction('setHistoryDiff');\n const historySlice = useMdmHistorySlice();\n const historyDiff = useMdmHistoryDiff();\n const historyMode = useMdmHistoryMode();\n const entity = useMdmEntity();\n\n useEffect(() => {\n if (historySlice) {\n const {aEntity, bEntity} = historySlice;\n const historyManager = History.HistoryManager.createHistoryManager();\n const historyDiff: HistoryDiff = historyManager.computeEntityHistoryDiff(\n prepareHistorySlice(historyMode === HistoryMode.Current ? entity : bEntity),\n prepareHistorySlice(aEntity)\n );\n setHistoryDiff(historyDiff);\n }\n }, [historySlice, historyMode, setHistoryDiff, entity]);\n\n return historyDiff || defaultHistoryDiff;\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n dueDate: {\n marginTop: 0,\n marginBottom: 0\n },\n dueDateInput: {\n height: '40px'\n },\n inputLabel: {\n fontSize: '14px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe} from 'ramda';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useWorkflowDueDate} from '../../hooks/useWorkflowDueDate';\nimport {DateEditor} from '../../../editors';\n\nimport {useStyles} from './styles';\n\ntype Props = Pick<WorkflowTaskData, 'taskId' | 'dueDate'> & {\n isTaskOpen?: WorkflowTaskData['isOpen'];\n className?: string;\n};\n\nconst DueDateField = ({taskId, dueDate, isTaskOpen, className}: Props) => {\n const styles = useStyles();\n const {updateDueDate, updateRequestIsInProgress, readOnly} = useWorkflowDueDate({\n dueDate,\n taskId,\n isOpen: isTaskOpen\n });\n\n return (\n <DateEditor\n disabled={updateRequestIsInProgress || readOnly}\n value={dueDate}\n label={i18n.text('Due date')}\n onChange={pipe((date) => date && date.getTime(), updateDueDate)}\n slotProps={{\n textField: {\n className: classnames(styles.dueDate, className),\n size: 'small',\n InputProps: {className: styles.dueDateInput},\n InputLabelProps: {\n classes: {root: styles.inputLabel}\n }\n }\n }}\n />\n );\n};\n\nexport default DueDateField;\n","import {useState, useCallback, useContext} from 'react';\nimport {updateDueDateForTask, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {isOpenTask} from '../helpers';\nimport {useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nexport const useWorkflowDueDate = ({\n dueDate,\n taskId,\n isOpen\n}: Pick<WorkflowTaskData, 'dueDate' | 'taskId' | 'isOpen'>) => {\n const {updateTaskState} = useContext(WorkflowTasksContext) || {};\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n\n const safePromise = useSafePromise();\n const [updateRequestIsInProgress, setUpdateRequestIsInProgress] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canUpdateTask = checkWorkflowPermission('UPDATE_TASK') && isOpenTask(isOpen);\n\n const updateDueDate = useCallback(\n (newValue: number) => {\n if (workflowPath && canUpdateTask && taskId && newValue && dueDate !== newValue) {\n setUpdateRequestIsInProgress(true);\n safePromise(\n updateDueDateForTask({\n taskId,\n workflowPath,\n environment,\n tenant,\n dueDate: newValue\n })\n )\n .then(() => {\n updateTaskState?.(taskId, {dueDate: newValue});\n })\n .catch(showWorkflowError)\n .finally(() => {\n setUpdateRequestIsInProgress(false);\n });\n }\n },\n [workflowPath, taskId, environment, tenant, updateTaskState, safePromise, dueDate, canUpdateTask]\n );\n return {updateDueDate, updateRequestIsInProgress, readOnly: !canUpdateTask};\n};\n","import {useState, useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {updatePriorityForTask, WorkflowPriority, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {isOpenTask} from '../helpers';\nimport {useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\ntype PriorityOption = {label: string; value: number};\n\nexport const useWorkflowPriority = ({\n priority,\n taskId,\n isOpen\n}: Pick<WorkflowTaskData, 'taskId' | 'priority' | 'isOpen'>) => {\n const {updateTaskState} = useContext(WorkflowTasksContext) || {};\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n\n const safePromise = useSafePromise();\n const [updateRequestIsInProgress, setUpdateRequestIsInProgress] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canUpdateTask = checkWorkflowPermission('UPDATE_TASK') && isOpenTask(isOpen);\n\n const updatePriority = useCallback(\n (newValue: PriorityOption) => {\n const {value: newPriority} = newValue;\n if (workflowPath && canUpdateTask && taskId && priority !== newPriority) {\n setUpdateRequestIsInProgress(true);\n safePromise(\n updatePriorityForTask({\n taskId,\n workflowPath,\n environment,\n tenant,\n priority: newPriority\n })\n )\n .then(() => {\n updateTaskState?.(taskId, {priority: newPriority});\n })\n .catch(showWorkflowError)\n .finally(() => {\n setUpdateRequestIsInProgress(false);\n });\n }\n },\n [workflowPath, taskId, environment, tenant, updateTaskState, safePromise, priority, canUpdateTask]\n );\n\n const priorities: PriorityOption[] = useMemo(\n () => [\n {\n label: i18n.text('Low'),\n value: WorkflowPriority.low\n },\n {\n label: i18n.text('Medium'),\n value: WorkflowPriority.medium\n },\n {\n label: i18n.text('High'),\n value: WorkflowPriority.high\n },\n {\n label: i18n.text('Urgent'),\n value: WorkflowPriority.urgent\n }\n ],\n []\n );\n return {priorities, updatePriority, updateRequestIsInProgress, readOnly: !canUpdateTask};\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {propEq} from 'ramda';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\n\nimport DropDownSelector from '../../../DropDownSelector/DropDownSelector';\nimport {useWorkflowPriority} from '../../hooks/useWorkflowPriority';\n\ntype Props = Pick<WorkflowTaskData, 'taskId' | 'priority'> & {\n isTaskOpen?: WorkflowTaskData['isOpen'];\n className?: string;\n};\n\nconst PrioritySelector = ({taskId, priority, isTaskOpen, className}: Props) => {\n const {priorities, updatePriority, updateRequestIsInProgress, readOnly} = useWorkflowPriority({\n taskId,\n priority,\n isOpen: isTaskOpen\n });\n const disabled = updateRequestIsInProgress || readOnly;\n\n return (\n <DropDownSelector\n className={className}\n isDisabled={disabled}\n options={priorities}\n onChange={updatePriority}\n hideSelectedOptions={false}\n label={i18n.text('Priority')}\n value={priorities.find(propEq('value', priority))}\n TextFieldProps={{disabled}}\n height={40}\n />\n );\n};\n\nexport default PrioritySelector;\n","import {makeStyles} from '@mui/styles';\n\nconst pointColor = '#d8d8d8';\nconst lineStyle = '2px solid rgba(0,0,0,0.06)';\nconst pointSize = 6;\nconst blockWidth = 56;\nconst linePadding = 10;\nconst pointPadding = 15;\n\nexport const useStyles = makeStyles({\n decorator: {\n display: 'flex',\n alignItems: 'stretch'\n },\n lineBlock: {\n width: `${blockWidth}px`,\n flexShrink: 0\n },\n withLinePadding: {\n '& $noLine': {\n height: `${linePadding}px`\n },\n '& $line': {\n height: `calc(100% - ${linePadding}px)`\n }\n },\n noLine: {\n height: '0'\n },\n line: {\n height: '100%',\n position: 'relative',\n marginLeft: '31px',\n borderLeft: lineStyle,\n '&:before': {\n position: 'absolute',\n height: pointSize,\n width: pointSize,\n borderRadius: '50%',\n left: -pointSize + 1,\n top: `${pointPadding}px`,\n background: pointColor,\n content: '\"\"',\n display: 'block',\n border: '1px solid white'\n },\n '&$plain': {\n '&:before': {\n width: 0,\n border: 'none'\n }\n },\n '&$last': {\n height: `${pointPadding}px`\n }\n },\n content: {\n flex: 1,\n minWidth: 0\n },\n plain: {},\n last: {},\n rowDivider: {\n marginLeft: 0\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport Divider from '@mui/material/Divider';\n\ntype Props = {\n className?: string;\n children: React.ReactNode;\n plain?: boolean;\n first?: boolean;\n last?: boolean;\n transparent?: boolean;\n divider?: boolean;\n};\n\nconst LineDecorator = ({className, children, plain, first, last, transparent, divider}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(className, styles.decorator)}>\n <div className={classnames(styles.lineBlock, {[styles.withLinePadding]: first})}>\n {!transparent && (\n <>\n <div className={styles.noLine} />\n <div className={classnames(styles.line, {[styles.plain]: plain}, {[styles.last]: last})} />\n </>\n )}\n </div>\n <div className={styles.content}>\n {children}\n {divider && <Divider className={styles.rowDivider} light variant=\"inset\" />}\n </div>\n </div>\n );\n};\n\nexport default LineDecorator;\n","import {WorkflowTaskData} from '@reltio/mdm-sdk';\n\nlet taskToColor = {};\nconst COLORS = [\n '#DC057B',\n '#5DC003',\n '#FEC92F',\n '#F57F27',\n '#B71137',\n '#056B97',\n '#4499AE',\n '#BD81BE',\n '#5F3577',\n '#A68560',\n '#555962'\n];\nlet colorIndex = 0;\n\nexport const resetTaskToColor = () => {\n taskToColor = {};\n colorIndex = 0;\n};\n\nexport const useWorkflowColor = ({\n processDefinitionDisplayName\n}: Pick<WorkflowTaskData, 'processDefinitionDisplayName'>) => {\n const hash = processDefinitionDisplayName;\n if (!taskToColor[hash]) {\n taskToColor[hash] = COLORS[colorIndex];\n colorIndex++;\n if (colorIndex > COLORS.length - 1) {\n colorIndex = 0;\n }\n }\n return taskToColor[hash];\n};\n","import React from 'react';\n\nconst SvgCollaborationIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <path\n d=\"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\"\n id=\"CollaborationIcon_svg__a\"\n />\n </defs>\n <g transform=\"translate(-2 -2)\" stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"CollaborationIcon_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#CollaborationIcon_svg__a\" />\n </mask>\n <path fillOpacity={0.54} fill=\"#000\" mask=\"url(#CollaborationIcon_svg__b)\" d=\"M0 0h24v24H0z\" />\n </g>\n </svg>\n );\n};\n\nexport default SvgCollaborationIcon;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n card: {\n borderBottom: '1px solid rgba(0,0,0,0.06)'\n },\n withBackground: {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n lineWrapper: {\n position: 'relative'\n },\n icon: {\n position: 'absolute',\n top: '8px',\n left: '16px',\n width: '32px',\n height: '32px',\n zIndex: 1\n },\n line: ({color}: {color: string}) => ({\n borderLeft: `3px solid ${color}`,\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0\n }),\n info: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n wordWrap: 'break-word',\n lineHeight: '15px'\n },\n commentsInfo: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: '-4px',\n marginTop: '7px'\n },\n commentsIcon: {\n width: '11px',\n height: '11px',\n marginLeft: '2px',\n marginRight: '6px',\n marginTop: '-2px'\n },\n infoValue: {\n color: theme.palette.text.primary\n },\n infoBlock: {\n display: 'flex',\n flexDirection: 'row',\n marginBottom: '5px'\n },\n header: {\n display: 'flex',\n flexDirection: 'row',\n paddingBottom: '12px'\n },\n flex: {\n flex: 1\n },\n caption: {\n fontSize: '16px',\n color: theme.palette.text.primary\n },\n title: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: '-4px'\n },\n flag: {\n height: '13px',\n width: '13px',\n marginTop: '-2px',\n stroke: '#000000',\n fill: 'none',\n margin: '2px 5px 0 5px'\n },\n date: {\n fontSize: '13px',\n color: theme.palette.text.primary\n },\n mainInfo: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1\n },\n controlsBox: {\n marginRight: '16px',\n marginBottom: '12px',\n marginTop: '13px'\n },\n controlsInRow: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '20px'\n },\n priority: {\n width: '162px'\n },\n comments: {\n marginLeft: '11px'\n }\n}));\n","import React, {useState} from 'react';\nimport classnames from 'classnames';\nimport FlagIcon from '@mui/icons-material/Flag';\nimport i18n from 'ui-i18n';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport CollapseButton from '../../../CollapseButton/CollapseButton';\nimport AssigneeSelector from '../../components/AssigneeSelector/AssigneeSelector';\nimport DueDateField from '../../components/DueDateField/DueDateField';\nimport PrioritySelector from '../../components/PrioritySelector/PrioritySelector';\nimport WorkflowComments from '../../components/WorkflowComments';\nimport {getDCRId} from '../../helpers';\nimport TaskActions from '../../components/TaskActions/TaskActions';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport {useWorkflowColor} from '../../hooks/useWorkflowColor';\nimport {useWorkflowCheckPermission} from '../../hooks/useWorkflowCheckPermission';\nimport CollaborationIcon from '../../../../icons/CollaborationIcon';\nimport {useWorkflowActions} from '../../hooks/useWorkflowActions';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n task: WorkflowTaskData;\n children?: React.ReactNode;\n actions?: React.ReactNode;\n Icon?: React.ElementType;\n};\n\nconst GenericWorkflowTaskCard = ({task, children, actions, Icon}: Props) => {\n const {\n taskId,\n dueDate,\n priority,\n assignee,\n createdBy,\n createTime,\n displayName: step,\n processDefinitionDisplayName,\n objectURIs,\n processInstanceComments,\n possibleActions,\n isOpen: isTaskOpen,\n preferredAction\n } = task;\n const dcrId = getDCRId(objectURIs);\n const color = useWorkflowColor({processDefinitionDisplayName});\n const styles = useStyles({color});\n const [isExpanded, setExpanded] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canViewComments = checkWorkflowPermission('VIEW_PROCESS_INSTANCE_COMMENTS');\n const {actions: workflowActions, actionRequestIsInProgress} = useWorkflowActions({\n taskId,\n possibleActions,\n assignee,\n isOpen: isTaskOpen\n });\n return (\n <div className={styles.card}>\n <div className={classnames({[styles.withBackground]: isExpanded})}>\n <div className={styles.lineWrapper}>\n <div className={styles.line} />\n {Icon && <Icon className={styles.icon} />}\n <LineDecorator plain first transparent={!isExpanded}>\n <div className={styles.mainInfo}>\n <div className={styles.title}>\n <div className={classnames(styles.caption, styles.flex)}>\n {i18n.text(processDefinitionDisplayName)}\n </div>\n <FlagIcon className={styles.flag} />\n <Tooltip title={i18n.text('Due date')}>\n <span className={styles.date}>{i18n.date(dueDate, 'L')}</span>\n </Tooltip>\n <CollapseButton\n isOpen={isExpanded}\n size=\"L\"\n onClick={() => {\n setExpanded(!isExpanded);\n }}\n />\n </div>\n <div className={styles.infoBlock} data-reltio-id=\"info-block\">\n <div className={styles.flex}>\n {dcrId && (\n <div className={styles.info}>\n {i18n.text('DCR ID')}\n {': '}\n <span className={styles.infoValue}>{dcrId}</span>\n </div>\n )}\n <div className={styles.info}>\n {i18n.text('Created by')}\n {': '}\n <span className={styles.infoValue}>{createdBy}</span> {i18n.text('on')}{' '}\n <span className={styles.infoValue}>{i18n.date(createTime, 'L')}</span>\n </div>\n <div className={styles.info}>\n {i18n.text('Step')}\n {': '}\n <span className={styles.infoValue}>{step}</span>\n </div>\n {canViewComments && processInstanceComments?.length > 0 && (\n <div className={styles.commentsInfo}>\n <CollaborationIcon className={styles.commentsIcon} />\n <div className={styles.infoValue}>{processInstanceComments.length}</div>\n </div>\n )}\n </div>\n {actions || (\n <TaskActions actions={workflowActions} isInProgress={actionRequestIsInProgress} />\n )}\n </div>\n </div>\n </LineDecorator>\n </div>\n {isExpanded && (\n <LineDecorator plain>\n <div className={styles.controlsBox}>\n <div className={styles.controlsInRow}>\n <DueDateField taskId={taskId} dueDate={dueDate} isTaskOpen={isTaskOpen} />\n <PrioritySelector\n taskId={taskId}\n priority={priority}\n className={styles.priority}\n isTaskOpen={isTaskOpen}\n />\n </div>\n <AssigneeSelector taskId={taskId} assignee={assignee} isTaskOpen={isTaskOpen} />\n </div>\n </LineDecorator>\n )}\n </div>\n {isExpanded && (\n <>\n {children}\n {canViewComments && (\n <div className={styles.comments}>\n <WorkflowComments\n workflowActions={workflowActions}\n actionRequestIsInProgress={actionRequestIsInProgress}\n preferredAction={preferredAction}\n taskId={taskId}\n processInstanceComments={processInstanceComments}\n isTaskOpen={isTaskOpen}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default GenericWorkflowTaskCard;\n","import React from 'react';\n\nconst SvgDcrTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#42A5F5\" cx={14} cy={14} r={14} />\n <path\n d=\"M16.43 9.87c0 1.59 1.25 2.87 2.79 2.87 1.53 0 2.78-1.28 2.78-2.87C22 8.29 20.75 7 19.22 7c-1.54 0-2.79 1.29-2.79 2.87zm1.4 0c0-.79.62-1.43 1.39-1.43.77 0 1.39.64 1.39 1.43 0 .79-.62 1.44-1.39 1.44-.77 0-1.39-.65-1.39-1.44zm-6.26 8.26c0-1.59-1.25-2.87-2.79-2.87-1.53 0-2.78 1.28-2.78 2.87C6 19.71 7.25 21 8.78 21c1.54 0 2.79-1.29 2.79-2.87zM8.09 9.15v4.31h1.39v-2.87h2.78v2.15l2.78-2.87L12.26 7v2.15H8.09zm11.82 9.7v-4.31h-1.39v2.87h-2.78v-2.15l-2.78 2.87L15.74 21v-2.15h4.17z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDcrTaskIcon;\n","import i18n from 'ui-i18n';\nimport {allPass, always, equals, evolve, pipe, prop, when} from 'ramda';\nimport {\n AttributeType,\n DataTypes,\n DCRAttributeValue,\n DCRObjectsInfo,\n DCRTypes,\n DCREntityInfo,\n getAttrDataTypeDefinition,\n isUrl,\n DCROperationTypes,\n DCRRelationInfo,\n DCRValue,\n PrimitiveValue\n} from '@reltio/mdm-sdk';\n\nexport const getOperationType = (type: string, oldValue?: DCRAttributeValue) => {\n switch (type) {\n case DCRTypes.CREATE_RELATIONSHIP:\n case DCRTypes.INSERT_ATTRIBUTE:\n return DCROperationTypes.ADDED;\n case DCRTypes.UPDATE_TAGS:\n case DCRTypes.UPDATE_ROLES:\n case DCRTypes.UPDATE_ATTRIBUTE:\n return DCROperationTypes.EDITED;\n case DCRTypes.DELETE_ATTRIBUTE:\n case DCRTypes.DELETE_RELATIONSHIP:\n return DCROperationTypes.DELETED;\n case DCRTypes.PIN_ATTRIBUTE:\n return oldValue?.pin ? DCROperationTypes.PIN_DELETED : DCROperationTypes.PINNED;\n case DCRTypes.IGNORE_ATTRIBUTE:\n return oldValue?.ignored ? DCROperationTypes.IGNORE_DELETED : DCROperationTypes.IGNORED;\n }\n};\n\nexport const getOperationLabel = (operation: DCROperationTypes) => {\n const labels = {\n [DCROperationTypes.ADDED]: i18n.text('added'),\n [DCROperationTypes.EDITED]: i18n.text('edited'),\n [DCROperationTypes.DELETED]: i18n.text('deleted'),\n [DCROperationTypes.PINNED]: i18n.text('pinned'),\n [DCROperationTypes.PIN_DELETED]: i18n.text('pin deleted'),\n [DCROperationTypes.IGNORED]: i18n.text('ignored'),\n [DCROperationTypes.IGNORE_DELETED]: i18n.text('ignore deleted')\n };\n\n return labels[operation] || '';\n};\n\nexport const getAttributeDescription = (\n attrType: AttributeType,\n value: DCRAttributeValue,\n currentEntityUri: string,\n objectsInfo: DCRObjectsInfo = {}\n) => {\n let objectLabel: string, objectUri: string;\n\n const relation = objectsInfo[value.refObjectURI] as DCRRelationInfo;\n if (relation) {\n objectUri = currentEntityUri === relation.startObjectUri ? relation.endObjectUri : relation.startObjectUri;\n objectLabel =\n currentEntityUri === relation.startObjectUri ? relation.endObjectLabel : relation.startObjectLabel;\n } else if (value.refEntity) {\n objectUri = value.refEntity.objectURI;\n objectLabel = (objectsInfo[objectUri] as DCREntityInfo).label;\n }\n\n return {\n objectUri,\n objectLabel\n };\n};\n\nexport const getDataTypeDefinition = (attributeType: AttributeType, attributeValue: DCRValue) => {\n return when(\n allPass([pipe(prop('type'), equals(DataTypes.TYPE_STRING)), () => isUrl(attributeValue as PrimitiveValue)]),\n evolve({type: always(DataTypes.TYPE_URL)})\n )(getAttrDataTypeDefinition(attributeType));\n};\n","import {complement, curry, flatten, is, isEmpty, pathOr, propOr, times} from 'ramda';\nimport {\n AttributeType,\n DataTypes,\n DCRAttributes,\n DCRAttributeValue,\n DCRChange,\n DCRTypes,\n DCREntityInfo,\n getAttributeTypeSubAttributes,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n isEmptyValue,\n isSpecialAttribute,\n Metadata,\n DCRRelationInfo\n} from '@reltio/mdm-sdk';\n\nimport {Diff} from '../types/diffTypes';\nimport {getFilteredAttrTypes} from '../../../../attributes/helpers/attributesView';\nimport {getOperationType} from './helpers';\n\nconst getValues = (attributes: DCRAttributes | DCRChange, attrType: AttributeType) => {\n if ('newValue' in attributes || 'oldValue' in attributes) {\n const {newValue, oldValue, type} = attributes;\n const newAttrValues = pathOr([], ['value', attrType.name])(newValue);\n const oldAttrValues = pathOr([], ['value', attrType.name])(oldValue);\n\n const length = Math.max(newAttrValues.length, oldAttrValues.length);\n return times((index) => {\n const attributeValue = {\n newValue: newAttrValues[index],\n oldValue: oldAttrValues[index],\n type\n };\n\n return [{value: attributeValue}];\n }, length);\n }\n const values = attributes[attrType.name];\n return values ? [values] : [];\n};\n\nconst getEntityChanges = curry((metadata: Metadata, entityInfo: DCREntityInfo, changes: DCRAttributes) => {\n const attrTypes: AttributeType[] = getFilteredAttrTypes(metadata, entityInfo.type, [], []);\n return getAttributesList(metadata, attrTypes, changes);\n});\n\nconst getRelationChanges = curry(\n (metadata: Metadata, relationInfo: DCRRelationInfo, changes: DCRAttributes, changeType: DCRTypes): Diff[] => {\n const addRelationOperationIfNeeded = (changes: DCRAttributes, changeType: DCRTypes) => {\n if (changeType === DCRTypes.CREATE_RELATIONSHIP || isEmptyValue(changes)) {\n const operation = getOperationType(changeType);\n return operation ? {operation} : {};\n }\n return {};\n };\n\n const relationType = getRelationType(metadata, relationInfo.type);\n const attrTypes = getRelationAttributesList(metadata, relationInfo.type);\n return flatten([\n {\n level: 1,\n label: propOr('', 'label', relationType),\n attributeType: relationType,\n attributeValue: {...relationInfo, ...changes},\n ...addRelationOperationIfNeeded(changes, changeType)\n },\n getAttributesList(metadata, attrTypes, changes, 2)\n ]);\n }\n);\n\nconst getAttributesList = (\n metadata: Metadata,\n attrTypes: AttributeType[],\n attributes: DCRAttributes | DCRChange,\n level = 0\n): Diff[] => {\n return flatten(\n attrTypes\n .map((attrType) => {\n return getValues(attributes, attrType).map((value) => {\n return value.map((attributeValue) => {\n return dcrAttributesFactory(metadata, attrType, attributeValue, level);\n });\n });\n })\n .filter(complement(isEmpty))\n );\n};\n\nconst getSimpleAttributeValue = (attributeType: AttributeType, attributeValue: DCRAttributeValue) => {\n const value = isSpecialAttribute(attributeType) ? attributeValue : attributeValue.value;\n return is(Object, value) ? value : {newValue: attributeValue, type: DCRTypes.INSERT_ATTRIBUTE};\n};\n\nconst dcrAttributesFactory = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n switch (attributeType.type) {\n case DataTypes.TYPE_NESTED:\n case DataTypes.TYPE_IMAGE:\n return getNestedAttributeChange(metadata, attributeType, attributeValue, level);\n case DataTypes.TYPE_REFERENCE:\n return getReferenceAttributeChange(metadata, attributeType, attributeValue, level);\n default: {\n const value = getSimpleAttributeValue(attributeType, attributeValue);\n return getSimpleAttributeChange(attributeType, value as DCRChange, level);\n }\n }\n};\n\nconst getNestedAttributeChange = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n const attributeTypeList = getAttributeTypeSubAttributes({} as Metadata, attributeType);\n const label = getLabel(attributeType?.label || attributeType?.name);\n return [\n {level, label, attributeType, attributeValue},\n getAttributesList(metadata, attributeTypeList, attributeValue.value as DCRAttributes, level + 1)\n ];\n};\n\nconst getReferenceAttributeChange = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n const attributeTypeList = getAttributeTypeSubAttributes(metadata, attributeType);\n const label = attributeType?.label || attributeType?.name;\n\n return [\n {level, label, attributeType, attributeValue},\n getAttributesList(metadata, attributeTypeList, attributeValue.value as DCRAttributes, level + 1)\n ];\n};\n\nconst getDiffParameters = ({newValue, oldValue, type}: DCRChange) => {\n return type === DCRTypes.UPDATE_ATTRIBUTE ? {type, newValue, oldValue} : {type, newValue: oldValue || newValue};\n};\n\nconst getSimpleAttributeChange = (attributeType: AttributeType, attributeValue: DCRChange, level: number) => {\n const {newValue, oldValue, type} = getDiffParameters(attributeValue);\n const operation = getOperationType(type, oldValue as DCRAttributeValue);\n\n const label = attributeType?.label || attributeType?.name;\n\n return {\n attributeType,\n newValue,\n oldValue,\n operation,\n label,\n level\n };\n};\n\nexport {getEntityChanges, getRelationChanges};\n","import {\n concat,\n curry,\n difference,\n flatten,\n identity,\n isNil,\n omit,\n path,\n pick,\n pipe,\n propEq,\n propOr,\n reduce\n} from 'ramda';\nimport {\n DCRAttributes,\n DCRAttributeValue,\n DCRChange,\n DCRChanges,\n DCRObjectInfo,\n DCRTypes,\n Entity,\n EntityAttrTypes,\n generateTempUri,\n getRoleLabel,\n GroupedObjectsInfo,\n isEmptyValue,\n Metadata,\n Relation\n} from '@reltio/mdm-sdk';\nimport {Diff} from '../types/diffTypes';\nimport {getEntityChanges, getRelationChanges} from './attributesHelpers';\n\nconst ATTRIBUTE_DELIMITER = '/';\nconst SPECIAL_ATTRIBUTES_NAMES = [\n 'defaultProfilePicValue',\n EntityAttrTypes.tags.name,\n EntityAttrTypes.roles.name,\n EntityAttrTypes.startDate.name,\n EntityAttrTypes.endDate.name\n];\n\nconst prepareStartOrEndDate = ({newValue, oldValue}: DCRChange): DCRChange[] => {\n const parseValue = (value) => (isNaN(value) || isEmptyValue(value) ? value : parseInt(value));\n\n const isExistedValue = (value) => value?.length && !isEmptyValue(value) && !isEmptyValue(value[0]);\n\n const isExistNewValue = isExistedValue(newValue);\n const isExistOldValue = isExistedValue(oldValue);\n if (isExistNewValue && isExistOldValue) {\n return [\n {\n type: DCRTypes.UPDATE_ATTRIBUTE,\n oldValue: {value: parseValue(oldValue[0])},\n newValue: {value: parseValue(newValue[0])}\n }\n ];\n } else if (isExistNewValue) {\n return [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: parseValue(newValue[0])}\n }\n ];\n } else if (isExistOldValue) {\n return [\n {\n type: DCRTypes.DELETE_ATTRIBUTE,\n oldValue: {value: parseValue(oldValue[0])}\n }\n ];\n }\n};\n\nconst prepareRolesOrTags = (metadata: Metadata, change: DCRChange): DCRChange[] => {\n const {newValue = [], oldValue = [], type} = change;\n const getLabel = type === DCRTypes.UPDATE_ROLES ? getRoleLabel(metadata) : identity;\n\n const diffNewValue = difference(newValue, oldValue);\n const diffOldValue = difference(oldValue, newValue);\n\n const items = [];\n\n if (diffNewValue.length) {\n items.push({\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: diffNewValue.map(getLabel).join(', ')}\n });\n }\n\n if (diffOldValue.length) {\n items.push({\n type: DCRTypes.DELETE_ATTRIBUTE,\n oldValue: {value: diffOldValue.map(getLabel).join(', ')}\n });\n }\n\n return items;\n};\n\nconst getPath = (change: DCRChange): string => {\n const {type, attributePath, refObjectURI, refAttributeType} = change;\n\n const path = type === DCRTypes.INSERT_ATTRIBUTE ? generateTempUri(attributePath) : attributePath;\n\n if (refObjectURI) {\n const typePath = refAttributeType.split('/attributes/');\n const id = refObjectURI.split(ATTRIBUTE_DELIMITER)[1];\n return [typePath[1], id, path].join(ATTRIBUTE_DELIMITER);\n }\n return path;\n};\n\nconst prepareAttribute = (container: DCRAttributes, change: DCRChange) => {\n const changePath = getPath(change);\n\n const pathArray = changePath.split(ATTRIBUTE_DELIMITER);\n\n let holder: DCRAttributes | DCRAttributeValue = container;\n\n for (let i = 0; i < pathArray.length - 1; i = i + 2) {\n const key = pathArray[i];\n const id = pathArray[i + 1];\n\n const currentValue = (holder[key] || []).find(propEq('id', id));\n\n const newValue = pathArray.length === i + 2 ? change : {};\n const value = currentValue ? currentValue : ({id, value: newValue} as DCRAttributeValue);\n\n const refObjectURI = change.refObjectURI?.indexOf(id) >= 0 && change.refObjectURI;\n if (refObjectURI) {\n value.refObjectURI = refObjectURI;\n }\n\n if (isNil(currentValue)) {\n holder[key] = (holder[key] || []).concat(value);\n }\n\n holder = value.value;\n }\n return container;\n};\n\nconst createEntityOrRelation = (metadata: Metadata, value: Entity | Relation) => {\n const {attributes = {}, startDate, endDate} = value;\n const {roles, tags, defaultProfilePicValue} = value as Entity;\n const newObject = {...attributes} as DCRAttributes;\n\n if (defaultProfilePicValue) {\n newObject['defaultProfilePicValue'] = [defaultProfilePicValue];\n }\n if (roles) {\n newObject[EntityAttrTypes.roles.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: roles.map(getRoleLabel(metadata)).join(', ')}\n }\n ];\n }\n if (tags) {\n newObject[EntityAttrTypes.tags.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: tags.join(', ')}\n }\n ];\n }\n if (startDate) {\n newObject[EntityAttrTypes.startDate.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: startDate}\n }\n ];\n }\n if (endDate) {\n newObject[EntityAttrTypes.endDate.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: endDate}\n }\n ];\n }\n return newObject;\n};\n\nconst mergeAttributesInChange = (\n metadata: Metadata,\n objectInfo: DCRObjectInfo,\n change: DCRChange,\n container: DCRAttributes = {}\n) => {\n const {type} = change;\n\n switch (type) {\n case DCRTypes.UPDATE_PROFILE_PIC_BY_URL:\n container['defaultProfilePicValue'] = [change.newValue];\n break;\n case DCRTypes.UPDATE_TAGS:\n container[EntityAttrTypes.tags.name] = prepareRolesOrTags(metadata, change);\n break;\n case DCRTypes.UPDATE_ROLES: {\n container[EntityAttrTypes.roles.name] = prepareRolesOrTags(metadata, change);\n break;\n }\n case DCRTypes.UPDATE_START_DATE:\n container[EntityAttrTypes.startDate.name] = prepareStartOrEndDate(change);\n break;\n case DCRTypes.UPDATE_END_DATE:\n container[EntityAttrTypes.endDate.name] = prepareStartOrEndDate(change);\n break;\n case DCRTypes.CREATE_RELATIONSHIP:\n case DCRTypes.CREATE_ENTITY: {\n return {\n ...container,\n ...createEntityOrRelation(metadata, change.newValue as Entity | Relation)\n };\n }\n case DCRTypes.INSERT_ATTRIBUTE:\n case DCRTypes.UPDATE_ATTRIBUTE:\n case DCRTypes.DELETE_ATTRIBUTE:\n case DCRTypes.PIN_ATTRIBUTE:\n case DCRTypes.IGNORE_ATTRIBUTE:\n prepareAttribute(container, change);\n break;\n default:\n break;\n }\n\n return container;\n};\n\nconst updateRelation = (metadata: Metadata, changes: DCRChanges, relationInfo: GroupedObjectsInfo['relations'][0]) => {\n const relationChanges: DCRChange[] = propOr([], relationInfo.uri)(changes);\n return relationChanges.reduce((result: DCRAttributes, change) => {\n return mergeAttributesInChange(metadata, relationInfo, change, result);\n }, {});\n};\n\nconst mergeChanges = (\n metadata: Metadata,\n changes: DCRChanges,\n entityInfo: GroupedObjectsInfo['entity'],\n relationsInfo: GroupedObjectsInfo['relations']\n): [Diff[], Diff[]] => {\n const getAttributeChanges = (attributeName: string) =>\n pipe(pick([attributeName]), getEntityChanges(metadata, entityInfo));\n const concatChanges = curry((getters, attributesTree) =>\n reduce((acc, getter) => concat(acc, getter(attributesTree)), [], getters)\n );\n\n const entityInfoChanges: DCRChange[] = propOr([], entityInfo.uri)(changes);\n\n const changesTree = entityInfoChanges.reduce((result: DCRAttributes, change: DCRChange) => {\n return mergeAttributesInChange(metadata, entityInfo, change, result);\n }, {});\n\n const relationsTrees = relationsInfo.map((relationInfo) => updateRelation(metadata, changes, relationInfo));\n\n const entityChanges: Diff[] = concatChanges(\n [\n pipe(omit(SPECIAL_ATTRIBUTES_NAMES), getEntityChanges(metadata, entityInfo)),\n getAttributeChanges(EntityAttrTypes.roles.name),\n getAttributeChanges(EntityAttrTypes.tags.name),\n getAttributeChanges(EntityAttrTypes.startDate.name),\n getAttributeChanges(EntityAttrTypes.endDate.name)\n ],\n changesTree\n );\n\n const relationsChanges: Diff[] = flatten(\n relationsInfo.map((relationInfo, index) => {\n const changeType: DCRTypes = path([relationInfo.uri, 0, 'type'], changes);\n return getRelationChanges(metadata, relationInfo, relationsTrees[index], changeType);\n })\n );\n\n return [entityChanges, relationsChanges];\n};\n\nexport {mergeChanges};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n linkLabel: {\n color: theme.palette.primary.main,\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Link from '@mui/material/Link';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n suggestionsCount: number;\n isExpanded: boolean;\n className?: string;\n};\n\nconst ShowMoreLink = ({suggestionsCount, isExpanded, onClick, className}: Props) => {\n const styles = useStyles();\n return (\n <Link component=\"button\" variant=\"caption\" underline=\"none\" onClick={onClick} className={className}>\n <span className={styles.linkLabel}>\n {isExpanded\n ? i18n.text('View less suggestions')\n : i18n.text('View ${suggestionsCount} more suggestions', {suggestionsCount})}\n </span>\n </Link>\n );\n};\n\nexport default ShowMoreLink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n field: {\n fontSize: '12px',\n lineHeight: '20px',\n color: theme.palette.text.primary,\n marginTop: '6px',\n overflow: 'hidden',\n wordBreak: 'break-word'\n },\n fieldName: {\n color: theme.palette.text.secondary,\n marginRight: '8px'\n },\n difference: {\n marginRight: '8px'\n },\n arrow: {\n margin: '0 4px',\n fontSize: '12px',\n color: theme.palette.text.primary\n },\n chip: {\n height: '20px',\n fontSize: '10px',\n fontWeight: 500,\n lineHeight: '16px',\n letterSpacing: 0,\n flexShrink: 0,\n textTransform: 'capitalize',\n color: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n '&.edited': {\n color: '#CC7500',\n borderColor: '#CC7500'\n },\n '&.added': {\n color: '#599E0E',\n borderColor: '#599E0E'\n },\n '&.deleted': {\n color: '#CF0E26',\n borderColor: '#CF0E26'\n }\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {isNil} from 'ramda';\nimport ArrowRightAltIcon from '@mui/icons-material/ArrowRightAlt';\nimport Chip from '@mui/material/Chip';\nimport {DCROperationTypes} from '@reltio/mdm-sdk';\nimport {getOperationLabel} from '../../helpers/helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n label: React.ReactNode;\n oldValue?: React.ReactNode;\n newValue?: React.ReactNode;\n operation?: DCROperationTypes;\n className?: string;\n};\n\nconst ChangeView = ({label, oldValue, newValue, operation, className}: Props) => {\n const styles = useStyles();\n const value = oldValue || newValue;\n\n return (\n <div className={classnames(styles.field, className)}>\n <span className={styles.fieldName}>{label}:</span>\n {!isNil(value) && (\n <span className={styles.difference}>\n {value}\n {newValue && oldValue && (\n <>\n <ArrowRightAltIcon className={styles.arrow} />\n {newValue}\n </>\n )}\n </span>\n )}\n {operation && (\n <Chip\n variant=\"outlined\"\n label={getOperationLabel(operation)}\n className={classnames(styles.chip, operation)}\n />\n )}\n </div>\n );\n};\n\nexport default ChangeView;\n","import React from 'react';\nimport {DCRObjectsInfo} from '@reltio/mdm-sdk';\n\nexport const AttributesChangesContext = React.createContext<DCRObjectsInfo>(null);\n\nAttributesChangesContext.displayName = 'AttributesChangesContext';\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n level: number;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n linkContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n marginLeft: '4px'\n },\n linkLabel: {\n color: theme.palette.primary.main,\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n disabledLink: {\n pointerEvents: 'none',\n cursor: 'default'\n },\n label: {\n color: theme.palette.text.primary\n },\n change: ({level = 0}: StylesProps) => ({\n marginLeft: `${level * 16}px`\n })\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {isNil} from 'ramda';\nimport classnames from 'classnames';\nimport {ChangeValue, DCRAttributeValue, DCRChange, getAttributeValue, getLabel, isReference} from '@reltio/mdm-sdk';\nimport ChangeView from '../ChangeView/ChangeView';\nimport {AttributesChangesContext} from '../../contexts/AttributesChangesContext';\nimport {getAttributeDescription, getDataTypeDefinition} from '../../helpers/helpers';\nimport {Diff, RelationAttributeValue} from '../../types/diffTypes';\nimport DataTypeValue from '../../../../../DataTypeValue/DataTypeValue';\nimport EntityUriLink from '../../../../../EntityUriLink/EntityUriLink';\nimport {useMdmEntityUri} from '../../../../../../contexts';\nimport {useStyles} from './styles';\n\nconst DiffRenderer = ({label, level, attributeType, attributeValue, oldValue, newValue, operation}: Diff) => {\n const styles = useStyles({level});\n const objectsInfo = useContext(AttributesChangesContext);\n const entityUri = useMdmEntityUri();\n\n const getLinkDescription = useCallback(() => {\n if (isReference(attributeType)) {\n const value =\n (attributeValue.value as DCRChange)?.newValue ?? (attributeValue.value as DCRChange)?.oldValue;\n return getAttributeDescription(\n attributeType,\n (value as DCRAttributeValue) || attributeValue,\n entityUri,\n objectsInfo\n );\n } else if ('endObject' in attributeType) {\n const {endObjectUri, endObjectLabel} = attributeValue as RelationAttributeValue;\n return {\n objectUri: endObjectUri,\n objectLabel: endObjectLabel\n };\n }\n }, [attributeType, attributeValue, entityUri, objectsInfo]);\n\n const renderLink = useCallback(() => {\n const {objectUri, objectLabel} = getLinkDescription() || {};\n\n if (!isNil(objectUri) && !isNil(objectLabel)) {\n const isNotExist = objectsInfo[objectUri]?.isExist === false;\n return (\n <EntityUriLink\n value={objectUri}\n className={classnames(styles.linkContainer, {[styles.disabledLink]: isNotExist})}\n >\n <span className={classnames(styles.linkLabel, {[styles.label]: isNotExist})}>\n {getLabel(objectLabel)}\n </span>\n </EntityUriLink>\n );\n }\n return null;\n }, [getLinkDescription, objectsInfo, styles]);\n\n const changeLabel = useMemo(() => {\n return (\n <span>\n {label}\n {renderLink()}\n </span>\n );\n }, [label, renderLink]);\n\n const renderValue = useCallback(\n (value: ChangeValue) => {\n const attrValue = getAttributeValue(value);\n return (\n <DataTypeValue value={attrValue} dataTypeDefinition={getDataTypeDefinition(attributeType, attrValue)} />\n );\n },\n [attributeType]\n );\n\n return (\n <ChangeView\n className={styles.change}\n label={changeLabel}\n oldValue={oldValue && renderValue(oldValue)}\n newValue={newValue && renderValue(newValue)}\n operation={operation}\n />\n );\n};\n\nexport default DiffRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n title: {\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px',\n fontWeight: 500,\n marginTop: '8px'\n }\n});\n","import React from 'react';\nimport {has} from 'ramda';\nimport DiffRenderer from '../DiffRenderer/DiffRenderer';\nimport {Diff, Title} from '../../types/diffTypes';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n changes: (Diff | Title)[];\n};\n\nconst DCRChangesList = ({changes}: Props) => {\n const styles = useStyles();\n return (\n <>\n {changes.map((change, index) => {\n return has('level', change) ? (\n <DiffRenderer {...(change as Diff)} key={index} />\n ) : (\n <div className={styles.title} key={index}>\n {change.label}\n </div>\n );\n })}\n </>\n );\n};\n\nexport default DCRChangesList;\n","import {has, filter, length, pipe} from 'ramda';\n\nexport const getSuggestionsCount = pipe(filter(has('operation')), length);\n","import {\n ChangeRequest,\n DCRChanges,\n DCRObjectInfo,\n DCRObjectsInfo,\n DCRTypes,\n GroupedObjectsInfo,\n isEntityUri,\n isRelationUri\n} from '@reltio/mdm-sdk';\nimport {allPass, concat, curry, equals, filter, keys, map, pathOr, pipe, prop, uniq} from 'ramda';\n\nexport const getEntitiesObjects = filter(pipe(prop('uri'), isEntityUri));\nexport const getRelationsObjects = filter(pipe(prop('uri'), isRelationUri));\n\nconst getRelations = (objectsWithChanges: DCRObjectInfo, entityUri: string) => {\n return filter(allPass([pipe(prop('uri'), isRelationUri), pipe(prop('startObjectUri'), equals(entityUri))]))(\n objectsWithChanges\n );\n};\n\nexport const extractObjectsFromChangeRequest = (changes: DCRChanges, objectsInfo: DCRObjectsInfo): DCRObjectInfo[] => {\n const getChange = (key) => prop([key], changes);\n return pipe(\n keys,\n filter(getChange),\n map((key) => ({...objectsInfo[key], uri: key}))\n )(objectsInfo);\n};\n\nexport const createEntityRelationsObjectByEntity = curry(\n (objectsWithChanges: DCRObjectInfo, entity: GroupedObjectsInfo['entity']) => {\n return {\n entity,\n relations: getRelations(objectsWithChanges, entity.uri)\n };\n }\n);\n\nexport const createEntityRelationsObjectByRelation = curry(\n (objectsInfo: DCRObjectInfo, relation: GroupedObjectsInfo['relations'][0]) => {\n const entity = objectsInfo[relation.startObjectUri];\n const relations = [relation];\n\n return entity ? {entity: {...entity, uri: relation.startObjectUri}, relations} : {relations};\n }\n);\n\nexport const concatEntityRelationsObjects = (acc: Record<string, GroupedObjectsInfo>, object: GroupedObjectsInfo) => {\n const {entity, relations} = object;\n const {uri: entityUri} = entity;\n\n const mergedRelations = pipe(pathOr([], [entityUri, 'relations']), concat(relations), uniq)(acc);\n\n acc[entityUri] = {\n entity,\n relations: mergedRelations\n };\n\n return acc;\n};\n\nexport const getEntityUriForChangeRequest = (dcrUri: string, entityUri: string) => {\n return `${dcrUri}/changes/${entityUri}`;\n};\n\nexport const isCreateEntityOperation = (dcr: ChangeRequest) => {\n return dcr.type === DCRTypes.CREATE_ENTITY;\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n boxSizing: 'border-box',\n border: '1px solid rgba(0,0,0,0.03)',\n borderRadius: '3px',\n backgroundColor: 'rgba(0,0,0,0.03)',\n padding: '10px',\n margin: '12px 16px 12px 0'\n },\n uri: {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n cursor: 'pointer'\n },\n label: {\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n showMoreLink: {\n marginTop: '8px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, any, flatten, ifElse, propOr} from 'ramda';\nimport {DCRChanges, DCRObjectsInfo, getEntityUriForLink, getLabel, GroupedObjectsInfo} from '@reltio/mdm-sdk';\nimport {Diff, Title} from './types/diffTypes';\nimport {mergeChanges} from './helpers/mergeHelpers';\nimport ShowMoreLink from './components/ShowMoreLink/ShowMoreLink';\nimport DCRChangesList from './components/DCRChangesList/DCRChangesList';\nimport {AttributesChangesContext} from './contexts/AttributesChangesContext';\nimport {useCollapsibleList} from './hooks/useCollapsibleList';\nimport EntityUriLink from '../../../EntityUriLink/EntityUriLink';\nimport {getEntityUriForChangeRequest, isCreateEntityOperation} from '../../helpers/dcrHelpers';\nimport {useMdmMetadata} from '../../../../contexts';\nimport {useStyles} from './styles';\n\ntype Props = {\n changes: DCRChanges;\n objectsInfo: DCRObjectsInfo;\n entityInfo: GroupedObjectsInfo['entity'];\n dcrUri: string;\n relationsInfo?: GroupedObjectsInfo['relations'];\n max?: number;\n};\n\nconst AttributesChanges = ({changes, dcrUri, objectsInfo, entityInfo, relationsInfo, max}: Props) => {\n const styles = useStyles();\n\n const metadata = useMdmMetadata();\n\n const [mergedEntityChanges, mergedRelationsChanges] = useMemo(\n () => mergeChanges(metadata, changes, entityInfo, relationsInfo),\n [metadata, changes, entityInfo, relationsInfo]\n );\n\n const changesList: (Diff | Title)[] = useMemo(() => {\n const relationshipTitle: Title = {label: i18n.text('Relationships')};\n return mergedRelationsChanges.length > 0\n ? flatten([mergedEntityChanges, relationshipTitle, mergedRelationsChanges])\n : mergedEntityChanges;\n }, [mergedEntityChanges, mergedRelationsChanges]);\n\n const {isExpanded, onToggle, itemsToShow, collapsedSuggestionsCount} = useCollapsibleList(changesList, max);\n\n const entityUri: string = ifElse(\n any(isCreateEntityOperation),\n always(getEntityUriForChangeRequest(dcrUri, entityInfo.uri)),\n always(getEntityUriForLink(entityInfo))\n )(propOr([], entityInfo.uri, changes));\n\n const screen: string = ifElse(\n any(isCreateEntityOperation),\n always('dcrReview'),\n always('profile')\n )(propOr([], entityInfo.uri, changes));\n\n return (\n <AttributesChangesContext.Provider value={objectsInfo}>\n <div className={styles.container}>\n <EntityUriLink className={styles.uri} value={entityUri} screen={screen}>\n <div className={styles.label}>{getLabel(entityInfo.label)}</div>\n </EntityUriLink>\n <DCRChangesList changes={itemsToShow} />\n {collapsedSuggestionsCount > 0 && (\n <ShowMoreLink\n onClick={onToggle}\n suggestionsCount={collapsedSuggestionsCount}\n isExpanded={isExpanded}\n className={styles.showMoreLink}\n />\n )}\n </div>\n </AttributesChangesContext.Provider>\n );\n};\n\nexport default AttributesChanges;\n","import {useCallback, useMemo, useState} from 'react';\nimport {getSuggestionsCount} from '../helpers/contextHelpers';\nimport {Diff, Title} from '../types/diffTypes';\n\nconst DEFAULT_VISIBLE_ITEMS_COUNT = 3;\n\nexport const useCollapsibleList = (items: (Diff | Title)[], limit = DEFAULT_VISIBLE_ITEMS_COUNT) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const onToggle = useCallback(() => setIsExpanded((value) => !value), []);\n\n const collapsedItems = useMemo(() => items.slice(0, limit), [items, limit]);\n const suggestionsCount = useMemo(() => getSuggestionsCount(items), [items]);\n const visibleSuggestionsCount = useMemo(() => getSuggestionsCount(collapsedItems), [collapsedItems]);\n\n const itemsToShow = isExpanded ? items : collapsedItems;\n const collapsedSuggestionsCount = suggestionsCount - visibleSuggestionsCount;\n\n return {isExpanded, onToggle, itemsToShow, collapsedSuggestionsCount};\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {flatten, has, isEmpty, map, partition, path, pipe, reduce, values} from 'ramda';\nimport {ChangeRequest, getDataChangeRequest, getEntitiesByUris, GroupedObjectsInfo} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {\n concatEntityRelationsObjects,\n createEntityRelationsObjectByEntity,\n createEntityRelationsObjectByRelation,\n extractObjectsFromChangeRequest,\n getEntitiesObjects,\n getRelationsObjects\n} from '../helpers/dcrHelpers';\nimport {showApiError} from '../helpers/errors';\n\nexport const useChangeRequest = (dcrUri: string) => {\n const [groupedObjects, setGroupedObjects] = useState<GroupedObjectsInfo[]>([]);\n const [dcr, setDcr] = useState<ChangeRequest>(null);\n const safePromise = useSafePromise();\n\n const requestEntities = useCallback((entityUris: string[]) => {\n if (isEmpty(entityUris)) {\n return Promise.resolve([]);\n }\n\n return safePromise(getEntitiesByUris(entityUris, {searchOptions: 'ovOnly', defaultMaxValues: 1}));\n }, []); // eslint-disable-line\n\n useEffect(() => {\n getDataChangeRequest(dcrUri)\n .then((dcr) => {\n const {changes, objectsInfo} = dcr;\n\n const objectsWithChanges = extractObjectsFromChangeRequest(changes, objectsInfo);\n\n const entityObjectsWithRelations: GroupedObjectsInfo[] = pipe(\n getEntitiesObjects,\n map(createEntityRelationsObjectByEntity(objectsWithChanges))\n )(objectsWithChanges);\n\n const relationsObjects: GroupedObjectsInfo[] = pipe(\n getRelationsObjects,\n map(createEntityRelationsObjectByRelation(objectsInfo))\n )(objectsWithChanges);\n\n const [relationsObjectsWithEntity, relationsObjectsWithoutEntity] = partition(\n has('entity'),\n relationsObjects\n );\n\n const entityUris: string[] = relationsObjectsWithoutEntity.map(\n path(['relations', 0, 'startObjectUri'])\n );\n\n requestEntities(entityUris)\n .then((entities) => {\n const relationsObjectsWithRequestedEntities = relationsObjectsWithoutEntity.map(\n (relationsObject, index) => {\n return {\n ...relationsObject,\n entity: entities[index]\n };\n }\n );\n\n pipe(\n flatten,\n reduce(concatEntityRelationsObjects, {}),\n values,\n setGroupedObjects\n )([\n entityObjectsWithRelations,\n relationsObjectsWithEntity,\n relationsObjectsWithRequestedEntities\n ]);\n })\n .catch(showApiError);\n\n setDcr(dcr);\n })\n .catch(showApiError);\n }, [dcrUri, requestEntities]);\n\n return {dcr, groupedObjects};\n};\n","import React from 'react';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from '../GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport {getDCRUri} from '../../helpers';\nimport DcrTaskIcon from '../../../../icons/DcrTaskIcon';\nimport AttributesChanges from '../../components/AttributesChanges/AttributesChanges';\nimport {useChangeRequest} from '../../hooks/useChangeRequest';\n\ntype Props = {\n task: WorkflowTaskData;\n};\n\nconst DataChangeRequestTaskCard = ({task}: Props) => {\n const {objectURIs} = task;\n const dcrUri = getDCRUri(objectURIs);\n\n const {dcr, groupedObjects} = useChangeRequest(dcrUri);\n\n return (\n <GenericWorkflowTaskCard task={task} Icon={DcrTaskIcon}>\n {dcr &&\n groupedObjects.map((object, index: number) => (\n <LineDecorator key={index} last={index === groupedObjects.length - 1} divider={true}>\n <AttributesChanges\n entityInfo={object.entity}\n relationsInfo={object.relations}\n changes={dcr.changes}\n objectsInfo={dcr.objectsInfo}\n dcrUri={dcrUri}\n />\n </LineDecorator>\n ))}\n </GenericWorkflowTaskCard>\n );\n};\n\nexport default DataChangeRequestTaskCard;\n","import React from 'react';\n\nconst SvgPmTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#1976D2\" cx={14} cy={14} r={14} />\n <path\n d=\"M22.5 14L18 9.5V13h-3.5L9 7.5 7.5 9l6.04 6H18v3.5l4.5-4.5zm-11.46 1.46L7.5 19 9 20.5l3.54-3.54-1.5-1.5z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgPmTaskIcon;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n pmCard: {\n marginLeft: '-15px'\n }\n});\n","import React from 'react';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from '../GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport PmTaskIcon from '../../../../icons/PmTaskIcon';\nimport {useMatchesLoader} from '../../../../hooks/useMatchesLoader';\nimport {ProfileMatchCard} from '../../../ProfileMatchCard/ProfileMatchCard';\nimport {useMdmEntity, useMdmMetadata} from '../../../../contexts';\nimport {useStyles} from './styles';\n\ntype Props = {\n task: WorkflowTaskData;\n};\n\nconst defaultOptions = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\n\nconst PotentialMatchTaskCard = ({task}: Props) => {\n const styles = useStyles();\n\n const entity = useMdmEntity();\n const metadata = useMdmMetadata();\n\n const {objectURIs} = task;\n const {matches, entitiesMap} = useMatchesLoader({\n enabled: !!entity.uri,\n entity,\n filter: '',\n rowsPerPage: Number.MAX_SAFE_INTEGER,\n page: 0,\n options: defaultOptions\n });\n const match = matches?.find(({object}) => objectURIs.includes(object.uri));\n\n return (\n <GenericWorkflowTaskCard task={task} Icon={PmTaskIcon}>\n {match && (\n <LineDecorator last>\n <div className={styles.pmCard}>\n <ProfileMatchCard metadata={metadata} entity={entity} match={match} entitiesMap={entitiesMap} />\n </div>\n </LineDecorator>\n )}\n </GenericWorkflowTaskCard>\n );\n};\n\nexport default PotentialMatchTaskCard;\n","import React from 'react';\n\nconst SvgDefaultTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#205191\" cx={14} cy={14} r={14} />\n <path\n d=\"M9.667 20.622c-.92 0-1.667-.744-1.667-1.662V8.99c0-.916.747-1.66 1.667-1.66h2.446A1.993 1.993 0 0114 6l.162.006a1.992 1.992 0 011.725 1.323h2.446c.92 0 1.667.745 1.667 1.662v9.97c0 .917-.747 1.661-1.667 1.661zm9-1.33V8.66h-1.334v1.993h-6.666V8.66H9.333v10.634h9.334zM15.86 14.46v1.302h-5.206V14.46h5.206zm1.494-2v1.302h-6.7V12.46h6.7zM14 7.33c.367 0 .667.298.667.664a.668.668 0 01-1.334 0c0-.366.3-.665.667-.665z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDefaultTaskIcon;\n","import React from 'react';\n\nconst SvgDeleteRequestTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\" opacity={0.87}>\n <circle fill=\"#0D47A1\" cx={14} cy={14} r={14} />\n <path\n d=\"M8.17 9.824v8.995c0 .886.72 1.606 1.607 1.606h8.352c.192 0 .375-.035.546-.097l1.38 1.382.804-.804-1.32-1.32-1.09-1.089-8.993-8.994-1.092-1.092-1.317-1.317-.803.803L8.17 9.824zm9.316 9.316h-8.03v-8.03l8.03 8.03zM9.777 7.575c-.192 0-.376.033-.55.094L10.42 8.86h.32v.322l1.607 1.606h4.819V8.86h1.284v8.03l1.285 1.286V9.182c0-.887-.72-1.607-1.606-1.607h-2.358a1.931 1.931 0 00-1.818-1.285 1.93 1.93 0 00-1.818 1.285H9.777zm3.533.643c0-.353.29-.643.643-.643.353 0 .642.29.642.643a.644.644 0 01-.642.642.644.644 0 01-.643-.642z\"\n fill=\"#FFF\"\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDeleteRequestTaskIcon;\n","import React from 'react';\nimport {PredefinedWorkflowProcessType, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from './GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport DataChangeRequestTaskCard from './DataChangeRequestTaskCard/DataChangeRequestTaskCard';\nimport PotentialMatchTaskCard from './PotentialMatchTaskCard/PotentialMatchTaskCard';\n\nimport DefaultTaskIcon from '../../../icons/DefaultTaskIcon';\nimport DeleteRequestTaskIcon from '../../../icons/DeleteRequestTaskIcon';\n\nexport type FactoryProps = {\n task: WorkflowTaskData;\n};\n\nclass WorkflowTaskCardsFactory {\n static build = ({task}: FactoryProps) => {\n const {processType} = task;\n switch (processType) {\n case PredefinedWorkflowProcessType.dataChangeRequestReview:\n return <DataChangeRequestTaskCard task={task} />;\n case PredefinedWorkflowProcessType.potentialMatchReview:\n return <PotentialMatchTaskCard task={task} />;\n case PredefinedWorkflowProcessType.recommendForDelete:\n return <GenericWorkflowTaskCard task={task} Icon={DeleteRequestTaskIcon} />;\n default:\n return <GenericWorkflowTaskCard task={task} Icon={DefaultTaskIcon} />;\n }\n };\n}\n\nexport default WorkflowTaskCardsFactory;\n","import WorkflowTaskCardsFactory, {FactoryProps} from './WorkflowTaskCardsFactory';\n\nexport const WorkflowTaskCard = ({task}: FactoryProps) => WorkflowTaskCardsFactory.build({task});\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n popoverPaper: {\n width: '464px'\n },\n title: {\n fontSize: '20px',\n fontWeight: 500,\n letterSpacing: '0.25px',\n lineHeight: '24px',\n color: theme.palette.text.primary,\n marginBottom: '17px'\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n padding: '23px 24px 14px 24px'\n },\n simpleDropDownSelector: {\n marginBottom: '20px'\n },\n inputRoot: {\n paddingTop: '0 !important',\n paddingBottom: '0 !important'\n },\n select: {\n fontSize: '14px'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '5px 8px 8px',\n borderTop: '1px solid rgba(0,0,0,0.12)'\n },\n cancelButton: {\n marginRight: '8px'\n },\n input: {\n fontSize: '14px'\n }\n}));\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport TextField from '@mui/material/TextField';\nimport Portal from '@mui/material/Portal';\nimport Snackbar from '@mui/material/Snackbar';\nimport Popover from '@mui/material/Popover';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport SimpleDropDownSelector from '../../../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {useWorkflowDefinitions} from '../../hooks/useWorkflowDefinitions';\nimport {useWorkflowProcessInstance} from '../../hooks/useWorkflowProcessInstance';\nimport {useStyles} from './styles';\n\ntype Props = {\n anchorEl: Element;\n onClose: () => void;\n};\n\nexport const AddWorkflowDialog = ({anchorEl, onClose}: Props) => {\n const styles = useStyles();\n\n const [comment, setComment] = useState('');\n const [taskType, setTaskType] = useState(null);\n const [isOpenSnackbar, setIsOpenSnackbar] = useState(false);\n\n const {definitions} = useWorkflowDefinitions();\n const {processInstance, loading} = useWorkflowProcessInstance();\n\n const handleChangeComment = (e) => {\n setComment(e.target.value);\n };\n\n const handleChangeTaskType = (value) => {\n setTaskType(value);\n };\n\n const handleStart = () => {\n processInstance(comment, taskType?.value)\n .then(() => {\n setIsOpenSnackbar(true);\n setComment('');\n setTaskType(null);\n onClose();\n })\n .catch(() => {});\n };\n\n const handleCloseSnackbar = () => {\n setIsOpenSnackbar(false);\n };\n\n const open = Boolean(anchorEl);\n\n return (\n <>\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n classes={{\n paper: styles.popoverPaper\n }}\n >\n <div className={styles.content}>\n <Typography className={styles.title}>{i18n.text('Add new workflow')}</Typography>\n <SimpleDropDownSelector\n className={styles.simpleDropDownSelector}\n variant=\"filled\"\n height={40}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true\n }\n }}\n placeholder={i18n.text('Select task type')}\n value={taskType}\n onChange={handleChangeTaskType}\n label={''}\n options={definitions.map((definition) => {\n return {\n value: definition.type,\n label: definition.displayName\n };\n })}\n />\n <TextField\n variant=\"filled\"\n hiddenLabel\n size=\"small\"\n placeholder=\"Type a comment\"\n InputProps={{\n disableUnderline: true,\n classes: {\n input: styles.input,\n root: styles.inputRoot\n }\n }}\n value={comment}\n onChange={handleChangeComment}\n multiline={true}\n />\n </div>\n <div className={styles.footer}>\n <Button disabled={loading} className={styles.cancelButton} onClick={onClose}>\n {i18n.text('Cancel')}\n </Button>\n <Button disabled={loading} color=\"primary\" onClick={handleStart}>\n {i18n.text('Start')}\n </Button>\n </div>\n </Popover>\n <Portal container={document.body}>\n <Snackbar\n open={isOpenSnackbar}\n autoHideDuration={5000}\n onClose={handleCloseSnackbar}\n message={i18n.text('A new workflow has started')}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n />\n </Portal>\n </>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {processDefinitions} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {useMdmEntity, useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nconst filterDefinitions = (definitions, entityType) => {\n return definitions.filter(({manualStart, objectTypes}) => {\n return manualStart && (!objectTypes || objectTypes?.some((_entityType) => _entityType === entityType));\n });\n};\n\nexport const useWorkflowDefinitions = () => {\n const [definitions, setDefinitions] = useState([]);\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n const entity = useMdmEntity();\n const entityType = entity.type;\n const safePromise = useSafePromise();\n\n useEffect(() => {\n safePromise(processDefinitions({workflowPath, environment, tenant})).then(({data}) => {\n if (!data) {\n return;\n }\n setDefinitions(filterDefinitions(data, entityType));\n });\n }, [entityType, workflowPath, environment, tenant]);\n\n return {definitions};\n};\n","import {useCallback, useContext, useState} from 'react';\nimport {startProcessInstance} from '@reltio/mdm-sdk';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useMdmEntity, useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nexport const useWorkflowProcessInstance = () => {\n const [loading, setLoading] = useState(false);\n\n const {loadTasks} = useContext(WorkflowTasksContext);\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n const entity = useMdmEntity();\n\n const entityUri = entity.uri;\n\n const processInstance = useCallback(\n (comment, taskType) => {\n setLoading(true);\n\n return startProcessInstance({\n workflowPath,\n tenant,\n environment,\n processType: taskType,\n comment,\n objectURIs: [entityUri]\n })\n .then(() => {\n loadTasks();\n })\n .catch((error) => {\n showWorkflowError(error);\n throw error;\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [entityUri, environment, loadTasks, tenant, workflowPath]\n );\n\n return {processInstance, loading};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n button: {\n padding: '9px 16px 9px 12px',\n marginLeft: 'auto',\n marginRight: '8px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport {useWorkflowCheckPermission} from '../../hooks/useWorkflowCheckPermission';\nimport {AddWorkflowDialog} from '../AddWorkflowDialog/AddWorkflowDialog';\nimport {useStyles} from './styles';\n\nexport const AddWorkflowButton = () => {\n const styles = useStyles();\n const [anchorEl, setAnchorEl] = useState(null);\n\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canStartProcess = checkWorkflowPermission('START_PROCESS_INSTANCE');\n const canViewProcessDefinitions = checkWorkflowPermission('VIEW_PROCESS_DEFINITIONS');\n\n const handleOpen = (e) => setAnchorEl(e.currentTarget);\n const handleClose = () => setAnchorEl(null);\n\n return canStartProcess && canViewProcessDefinitions ? (\n <>\n <Button color=\"primary\" className={styles.button} onClick={handleOpen}>\n <AddIcon className={styles.icon} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n <AddWorkflowDialog anchorEl={anchorEl} onClose={handleClose} />\n </>\n ) : null;\n};\n","import React from 'react';\nimport {partition, propEq} from 'ramda';\nimport Button from '@mui/material/Button';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useWorkflowActions} from '../../hooks/useWorkflowActions';\n\ntype Props = {\n task: WorkflowTaskData;\n};\nexport const TaskActionButtons = ({task}: Props) => {\n const {taskId, possibleActions, assignee, isOpen, preferredAction} = task;\n\n const {actions, actionRequestIsInProgress: disabled} = useWorkflowActions({\n taskId,\n possibleActions,\n assignee,\n isOpen\n });\n\n const [preferredActions, otherActions] = partition(propEq('text', preferredAction.label), actions);\n return (\n <>\n {otherActions.map((action) => (\n <Button variant=\"outlined\" onClick={action.onClick} key={action.text} disabled={disabled}>\n {action.text}\n </Button>\n ))}\n {preferredActions.map((action) => (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={action.onClick}\n key={action.text}\n disabled={disabled}\n >\n {action.text}\n </Button>\n ))}\n </>\n );\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {filter, flatten, isNil, map, mergeLeft, pipe, prop, propEq, reject, uniqBy, when} from 'ramda';\nimport {getEntityUriFromDCRUri, getTasksForEntity, isDCRUri, isTempUri, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks/useSafePromise';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {\n useMdmEntityUri,\n useMdmIsEditableMode,\n useMdmIsWorkflowEnabled,\n useMdmProfileLastLoadedTime,\n useMdmTenant,\n useMdmWorkflowEnvironmentUrl,\n useMdmWorkflowPath\n} from '../../../contexts';\n\ntype Config = {\n processTypes?: string[];\n assignee?: string;\n showClosedTasks?: boolean;\n};\n\nexport const useWorkflowTasks = (config?: Config) => {\n const {processTypes, assignee, showClosedTasks} = config || {};\n\n const [tasks, setTasks] = useState<WorkflowTaskData[]>(null);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n\n const safePromise = useSafePromise();\n const checkWorkflowPermission = useWorkflowCheckPermission();\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const isWorkflowEnabled = useMdmIsWorkflowEnabled();\n const tenant = useMdmTenant();\n const entityUri = useMdmEntityUri();\n const isEditableMode = useMdmIsEditableMode();\n const entityLastLoadedTime = useMdmProfileLastLoadedTime();\n\n const canViewTasks = checkWorkflowPermission('VIEW_TASKS');\n const enabled = !!(workflowPath && environment) && isWorkflowEnabled && canViewTasks;\n\n const loadTasks = useCallback(() => {\n setLoading(true);\n const parsedProcessTypes = !Array.isArray(processTypes) || processTypes.includes('*') ? null : processTypes;\n const requests = (parsedProcessTypes || [null]).map((processType) =>\n getTasksForEntity({\n entityUri: isDCRUri(entityUri) ? getEntityUriFromDCRUri(entityUri) : entityUri,\n workflowPath,\n environment,\n tenant,\n filter: {assignee, processType},\n includeClosed: !!showClosedTasks\n })\n );\n safePromise(Promise.all(requests))\n .then((responses) => {\n const tasks: WorkflowTaskData[] = pipe(\n map(prop('data')),\n reject(isNil),\n flatten,\n uniqBy(prop('taskId')),\n filter(isRequestedTask(parsedProcessTypes, assignee))\n )(responses);\n setTasks(tasks);\n setTotal(tasks.length);\n })\n .catch((error) => {\n console.warn('Workflow error', error);\n })\n .finally(() => {\n setLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n entityUri,\n environment,\n safePromise,\n tenant,\n workflowPath,\n assignee,\n showClosedTasks,\n processTypes,\n entityLastLoadedTime\n ]);\n\n useEffect(() => {\n if (entityUri && enabled && !isTempUri(entityUri)) {\n loadTasks();\n } else {\n setTasks(null);\n setTotal(0);\n }\n }, [enabled, entityUri, loadTasks, isEditableMode]);\n\n const updateTaskState = useCallback((taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => {\n setTasks(map(when(propEq('taskId', taskId), mergeLeft(payload))));\n }, []);\n\n return {\n tasks,\n total,\n loading,\n updateTaskState,\n loadTasks\n };\n};\n\nconst isRequestedTask = (processTypes: string[], assignee: string) => (task: WorkflowTaskData) =>\n (!processTypes || processTypes.includes(task.processType)) && (!assignee || assignee === task.assignee);\n","export const MAP_DRAWING_MODES = {\n CIRCLE: 'circle',\n POLYGON: 'polygon'\n};\n\nexport const DEFAULT_OVERLAY_OPTIONS = {\n fillColor: 'rgb(242,82,82)',\n fillOpacity: 0.1,\n strokeWeight: 2,\n strokeColor: '#F25252',\n clickable: false,\n editable: true,\n zIndex: 1\n};\n\nexport const DEFAULT_GOOGLE_MAP_OPTIONS = {\n mapTypeControl: false,\n streetViewControl: false,\n fullscreenControl: false\n};\n\nexport const MAP_MINIMUM_SCALE_RADIUS = 0.001;\n","import React from 'react';\n\ntype Value = {\n activeEntityUri?: string;\n};\n\nexport const EntityMarkerContext = React.createContext<Value>({});\nEntityMarkerContext.displayName = 'EntityMarkerContext';\n","import React from 'react';\nimport {InterceptHandlers} from '@reltio/mdm-sdk';\n\nexport const InterceptHandlersContext = React.createContext<InterceptHandlers>({});\n\nInterceptHandlersContext.displayName = 'InterceptHandlersContext';\n","import React from 'react';\n\nexport const PageRequestsAbortingContext = React.createContext<AbortSignal>(undefined);\n\nPageRequestsAbortingContext.displayName = 'PageRequestsAbortingContext';\n","import React from 'react';\nimport {QxSandboxApi} from '@reltio/mdm-sdk';\n\nexport const SandboxAPIContext = React.createContext<QxSandboxApi>({\n getCurrentPerspectiveId: () => '',\n setEntityUri: () => {},\n showPerspective: () => {}\n});\n","import {\n CustomActionExtension,\n CustomActionViewConfig,\n CustomScriptExtension,\n getAccessToken,\n RequestAction,\n sendRequestFromCustomSandbox,\n sendWorkflowRequest,\n startProcessFromQuery,\n Entity,\n startProcessInstance\n} from '@reltio/mdm-sdk';\nimport {ProcessRequestParams} from './types';\n\ntype Config = CustomActionExtension | CustomActionViewConfig | CustomScriptExtension;\n\nconst validateParams = (validationUrl: string, permissions?: string[]) => {\n if (!validationUrl) return {errorMessage: 'URL is empty'};\n const allowed = permissions?.some((permission) => {\n const urlOrigin = validationUrl.match(/^(https?:\\/\\/[^:/?#]*).*$/)?.[1];\n const permRegex = new RegExp('^' + permission + '$');\n const decodedPerm = permission.replace(/\\/*$/, '');\n return (\n decodedPerm === validationUrl ||\n (urlOrigin && urlOrigin === decodedPerm) ||\n (decodedPerm?.startsWith('/') && validationUrl?.startsWith(decodedPerm)) ||\n (permission && permRegex.test(validationUrl))\n );\n });\n\n if (!allowed || (permissions?.length || 0) === 0) {\n return {errorMessage: 'Not enough permissions'};\n }\n return false;\n};\n\nconst getAuthHeaders = async (headers: Record<string, string>, servicesPath: string) => {\n const {accessToken} = await getAccessToken({servicesPath});\n return accessToken ? {...headers, Authorization: `Bearer ${accessToken}`} : headers;\n};\n\nexport const processRequest = ({\n params,\n permissions,\n worker,\n metadata,\n config,\n apiPath,\n servicesPath,\n user,\n workflowPath,\n entity,\n tenant,\n entityUri,\n query,\n openSearch,\n environment,\n getCurrentPerspectiveId,\n showPerspective,\n workflowCheckPermission,\n setEntityUri\n}: ProcessRequestParams) => {\n const {name, url, data, method, validationUrl} = params;\n\n const processFromQuery = () => {\n if (!params.processDefinitionId) {\n return new Promise((resolve) => resolve({errorMessage: 'processDefinitionId is empty'}));\n }\n if (!params.searchString) {\n return new Promise((resolve) => resolve({errorMessage: 'searchString is empty'}));\n }\n if (!workflowPath) {\n return new Promise((resolve) => resolve({errorMessage: 'Workflow path is not defined'}));\n }\n const errors = validateParams('/processInstances/_generateFromQuery', permissions);\n if (errors) {\n return new Promise((resolve) => resolve(errors));\n }\n\n return startProcessFromQuery({\n workflowPath,\n processType: params.processDefinitionId,\n searchString: params.searchString,\n tenant,\n environment\n });\n };\n\n const processInstance = () => {\n if (!params.processDefinitionId) {\n return new Promise((resolve) => resolve({errorMessage: 'processDefinitionId is empty'}));\n }\n if (!params.changeRequestURI) {\n return new Promise((resolve) => resolve({errorMessage: 'changeRequestURI is empty'}));\n }\n if (!workflowPath) {\n return new Promise((resolve) => resolve({errorMessage: 'Workflow path is not defined'}));\n }\n const errors = validateParams('/processInstances', permissions);\n if (errors) {\n return new Promise((resolve) => resolve(errors));\n }\n\n return startProcessInstance({\n workflowPath,\n processType: params.processDefinitionId,\n tenant,\n environment,\n objectURIs: [entityUri, params.changeRequestURI],\n comment: params.comment\n });\n };\n\n const workflowRequest = async () => {\n const errors = validateParams(validationUrl, permissions);\n if (errors) {\n return errors;\n }\n const isExternalUrl = url.includes('http:') || url.includes('https:');\n if (!workflowPath && !isExternalUrl) {\n return {errorMessage: 'Workflow path is not defined'};\n }\n const headers = await getAuthHeaders(params.headers, servicesPath);\n return await sendWorkflowRequest({url, method, data, tenant, headers, workflowPath});\n };\n\n const sendApiRequest = async () => {\n const errors = validateParams(validationUrl, permissions);\n if (errors) {\n return Promise.reject(errors);\n }\n const headers = await getAuthHeaders(params.headers, servicesPath);\n return await sendRequestFromCustomSandbox({\n url,\n method,\n data,\n headers,\n noRequestProcessor: true,\n noRetry: true\n });\n };\n\n const handleRequest = (request: Promise<any>) => {\n request\n .then((response) => (response.json ? response.json() : response))\n .then((data) => {\n worker.postMessage({\n action: 'response',\n result: {\n data: JSON.parse(JSON.stringify(data)),\n headers: params.headers,\n status: 200\n },\n ...params\n });\n })\n .catch((error) => {\n worker.postMessage({\n action: 'response',\n result: {\n data: JSON.parse(JSON.stringify(error)),\n headers: params.headers,\n status: 0\n },\n ...params\n });\n });\n };\n\n switch (name) {\n case RequestAction.API: {\n const request = sendApiRequest();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW: {\n const request = workflowRequest();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW_START_PROCESS_FROM_QUERY: {\n const request = processFromQuery();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW_START_PROCESS_INSTANCE: {\n const request = processInstance();\n handleRequest(request);\n break;\n }\n case RequestAction.GET_CONFIGURATION: {\n worker.postMessage({action: 'response', result: metadata, ...params});\n break;\n }\n case RequestAction.GET_UI_CONFIGURATION: {\n const response = {...config, action: {...config.action}};\n if (response.action.permissions) {\n delete response.action.permissions;\n }\n worker.postMessage({action: 'response', result: response, ...params});\n break;\n }\n case RequestAction.SET_ENTITY_URI: {\n const listener = (newEntity: Entity) =>\n worker.postMessage({action: 'response', result: newEntity, ...params});\n setEntityUri(params.entityUri, listener);\n break;\n }\n case RequestAction.SET_PERSPECTIVE: {\n showPerspective(params.perspective);\n worker.postMessage({\n action: 'response',\n result: getCurrentPerspectiveId(),\n ...params\n });\n break;\n }\n case RequestAction.GET_PERSPECTIVE: {\n if (getCurrentPerspectiveId) {\n worker.postMessage({\n action: 'response',\n result: getCurrentPerspectiveId(),\n ...params\n });\n }\n break;\n }\n case RequestAction.WORKFLOW_CHECK_PERMISSION: {\n worker.postMessage({\n action: 'response',\n result: workflowCheckPermission(params.permission),\n ...params\n });\n break;\n }\n case RequestAction.GET_SEARCH_QUERY: {\n worker.postMessage({action: 'response', result: query, ...params});\n break;\n }\n case RequestAction.OPEN_SEARCH: {\n openSearch({viewId: (config as Config).id, searchState: params.searchState || {}});\n break;\n }\n case RequestAction.GET_ENTITY_URI: {\n worker.postMessage({action: 'response', result: entityUri, ...params});\n break;\n }\n case RequestAction.GET_ENTITY: {\n worker.postMessage({action: 'response', result: entity, ...params});\n break;\n }\n case RequestAction.GET_API_PATH: {\n worker.postMessage({action: 'response', result: apiPath, ...params});\n break;\n }\n case RequestAction.WORKFLOW_GET_WORKFLOW_PATH: {\n worker.postMessage({action: 'response', result: workflowPath, ...params});\n break;\n }\n case RequestAction.GET_TENANT: {\n worker.postMessage({action: 'response', result: tenant, ...params});\n break;\n }\n case RequestAction.GET_USER: {\n worker.postMessage({action: 'response', result: user, ...params});\n break;\n }\n case RequestAction.ALERT: {\n worker.postMessage({\n action: 'response',\n result: window.alert(params.text),\n ...params\n });\n break;\n }\n case RequestAction.CONFIRM: {\n worker.postMessage({\n action: 'response',\n result: window.confirm(params.text),\n ...params\n });\n break;\n }\n case RequestAction.PROMPT: {\n worker.postMessage({\n action: 'response',\n result: window.prompt(params.text, params.defaultText || ''),\n ...params\n });\n break;\n }\n case RequestAction.OPEN_WINDOW: {\n window.open(params.url, '_blank');\n break;\n }\n case RequestAction.RELOAD_PAGE: {\n location.reload();\n break;\n }\n }\n};\n","import {\n CustomActionTask,\n CustomActionTaskParams,\n CustomScript,\n CustomScriptPlatform,\n RequestAction,\n RequestHandler,\n ResponseHandler,\n isEmptyValue\n} from '@reltio/mdm-sdk';\nimport {nanoid} from 'nanoid';\n\nexport const isValidCustomScript = (config?: CustomScript) => {\n const {files, platform} = config || {};\n return !isEmptyValue(files) && platform !== CustomScriptPlatform.CLASSIC;\n};\n\nexport const isURLtoProcess = (url: string, processApi: string[] = []) => {\n return processApi.some((request) => {\n const regExp = new RegExp(`^${request}$`);\n return request.replace(/\\/*$/, '') === url || (request && regExp.test(url));\n });\n};\n\nexport const getWorkerURL = (uiPath: string, tenant: string) => {\n return `${uiPath.replace(`${tenant}/`, '')}worker_api.js`;\n};\n\nexport const getRequestFakeUrl = (url: string, apiPath: string, reltioPath: string, tenant: string) => {\n return url.startsWith(apiPath) ? `${reltioPath}${url.replace(apiPath, '')}` : `${reltioPath}/api/${tenant}${url}`;\n};\n\nexport const getResponseFakeUrl = (url: string, apiPath: string, reltioPath: string) => {\n return `${reltioPath}${url.replace(apiPath, '')}`;\n};\n\nexport const getProcessedTask = (task: CustomActionTask, apiPath: string, reltioPath: string, tenant: string) => {\n const {url, name} = task.params as CustomActionTaskParams;\n if (!url) {\n return task;\n }\n const isApiAction = name === RequestAction.API;\n const isGlobalUrl = url.startsWith('/') && !url.startsWith(apiPath);\n const newUrl = isGlobalUrl && isApiAction ? `${apiPath}/api/${tenant}${url}` : url.replace(reltioPath, apiPath);\n\n return {\n ...task,\n params: {\n ...(task.params as CustomActionTaskParams),\n url: newUrl,\n validationUrl: url\n }\n };\n};\n\nexport const getFilesWithArrayBuffer = (files: FileList) => {\n const readFilePromises = Array.from(files).map((file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const content = event.target.result;\n const {lastModified, name, size, type} = file;\n resolve({lastModified, name, size, type, content});\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsArrayBuffer(file);\n });\n });\n return Promise.all(readFilePromises);\n};\n\nconst processInnerHtml = (parent: HTMLElement, worker: Worker, setTooltip) => {\n let handlersToReset = [];\n const uiActions = parent.getAttribute('ui-actions');\n const uiTooltip = parent.getAttribute('ui-tooltip');\n const id = parent.getAttribute('id') || parent.getAttribute('name');\n if (uiActions) {\n uiActions.split(',').forEach((uiAction) => {\n const handler = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const postEventMessage = (files?) => {\n worker.postMessage({\n action: 'event',\n type: 'uiAction',\n data: {type: uiAction, id, event: {...event, files, target: {value: target.value}}}\n });\n };\n if (target.files?.length) {\n getFilesWithArrayBuffer(target.files).then(postEventMessage);\n } else {\n postEventMessage();\n }\n };\n parent.addEventListener(uiAction, handler);\n handlersToReset.push(() => {\n parent.removeEventListener(uiAction, handler);\n });\n });\n parent.removeAttribute('ui-actions');\n }\n if (uiTooltip) {\n setTooltip(uiTooltip);\n }\n parent.childNodes.forEach((child) => {\n if (child.nodeType === 1) {\n //Node.ELEMENT_NODE\n handlersToReset = handlersToReset.concat(processInnerHtml(child as HTMLElement, worker, setTooltip));\n }\n });\n return handlersToReset;\n};\n\ntype ResetHTMLParams = {\n worker: Worker;\n setTooltip: any;\n html?: string;\n innerText?: string;\n setListenersToReset: any;\n setHtml: any;\n};\n\nexport const resetHtml = ({worker, setTooltip, innerText, html, setListenersToReset, setHtml}: ResetHTMLParams) => {\n const docBlock = document.createElement('div');\n docBlock.innerHTML = html || innerText;\n\n const handlersToReset = processInnerHtml(docBlock, worker, setTooltip);\n setListenersToReset(handlersToReset);\n setHtml(docBlock);\n};\n\nexport const setUpRequestInterceptor = ({\n apiPath,\n reltioPath,\n tenant,\n processApiRequest,\n workerRef,\n setRequestListeners\n}): RequestHandler<RequestInit & CustomActionTaskParams> => {\n return ({url, next, resolve, options = {}}) => {\n const fakeURL = getRequestFakeUrl(url, apiPath, reltioPath, tenant);\n const isProcessableUrl = isURLtoProcess(fakeURL, processApiRequest);\n if (isProcessableUrl) {\n const requestId = nanoid();\n setRequestListeners(options, next, requestId, resolve);\n workerRef.current.postMessage({\n action: 'apiRequest',\n id: requestId,\n url: fakeURL,\n method: options.method,\n headers: options.headers,\n data: options.body\n });\n } else {\n next(url, options);\n }\n };\n};\n\nexport const setUpResponseInterceptor = ({\n reltioPath,\n apiPath,\n processApiResponse,\n workerRef,\n setResponseListeners\n}): ResponseHandler<RequestInit & CustomActionTaskParams> => {\n return ({url, response, next, options, abort}) => {\n const fakeURL = getResponseFakeUrl(url, apiPath, reltioPath);\n const isProcessableUrl = isURLtoProcess(fakeURL, processApiResponse);\n if (isProcessableUrl) {\n const responseId = nanoid();\n response\n .json()\n .then((data) => {\n setResponseListeners(next, responseId);\n workerRef.current.postMessage({\n action: 'apiResponse',\n id: responseId,\n url: fakeURL,\n method: options.method,\n data\n });\n })\n .catch((error) => {\n abort(error);\n });\n } else {\n next(response);\n }\n };\n};\n","const defaultAttributes = [\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'allowReorder',\n 'alphabetic',\n 'amplitude',\n 'arabic-form',\n 'ascent',\n 'attributeName',\n 'attributeType',\n 'autoReverse',\n 'azimuth',\n 'baseFrequency',\n 'baseline-shift',\n 'baseProfile',\n 'bbox',\n 'begin',\n 'bias',\n 'by',\n 'calcMode',\n 'cap-height',\n 'checked',\n 'class',\n 'clip',\n 'clipPathUnits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'contentScriptType',\n 'contentStyleType',\n 'cursor',\n 'cx',\n 'cy',\n 'd',\n 'decelerate',\n 'descent',\n 'diffuseConstant',\n 'direction',\n 'disabled',\n 'display',\n 'divisor',\n 'dominant-baseline',\n 'dur',\n 'dx',\n 'dy',\n 'edgeMode',\n 'elevation',\n 'enable-background',\n 'end',\n 'exponent',\n 'externalResourcesRequired',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterRes',\n 'filterUnits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'format',\n 'from',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'hanging',\n 'height',\n 'horiz-adv-x',\n 'horiz-origin-x',\n 'id',\n 'ideographic',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'kerning',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lang',\n 'lengthAdjust',\n 'letter-spacing',\n 'lighting-color',\n 'limitingConeAngle',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'mask',\n 'maskContentUnits',\n 'maskUnits',\n 'mathematical',\n 'max',\n 'media',\n 'method',\n 'min',\n 'mode',\n 'name',\n 'numOctaves',\n 'offset',\n 'opacity',\n 'operator',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'overline-position',\n 'overline-thickness',\n 'panose-1',\n 'paint-order',\n 'path',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointer-events',\n 'points',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'r',\n 'radius',\n 'refX',\n 'refY',\n 'rendering-intent',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'restart',\n 'result',\n 'rotate',\n 'rx',\n 'ry',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'spacing',\n 'specularConstant',\n 'specularExponent',\n 'speed',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stemh',\n 'stemv',\n 'stitchTiles',\n 'stop-color',\n 'stop-opacity',\n 'strikethrough-position',\n 'strikethrough-thickness',\n 'string',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'style',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'target',\n 'targetX',\n 'targetY',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textLength',\n 'to',\n 'transform',\n 'type',\n 'u1',\n 'u2',\n 'underline-position',\n 'underline-thickness',\n 'unicode',\n 'unicode-bidi',\n 'unicode-range',\n 'units-per-em',\n 'v-alphabetic',\n 'v-hanging',\n 'v-ideographic',\n 'v-mathematical',\n 'values',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'viewBox',\n 'viewTarget',\n 'visibility',\n 'width',\n 'widths',\n 'word-spacing',\n 'writing-mode',\n 'x',\n 'x-height',\n 'x1',\n 'x2',\n 'xChannelSelector',\n 'y',\n 'y1',\n 'y2',\n 'yChannelSelector',\n 'z',\n 'zoomAndPan'\n];\n\nconst defaultTags = [\n 'animate',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'mpath',\n 'set',\n 'circle',\n 'ellipse',\n 'line',\n 'polygon',\n 'polyline',\n 'rect',\n 'defs',\n 'glyph',\n 'g',\n 'marker',\n 'mask',\n 'missing-glyph',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'font',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'hkern',\n 'vkern',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'feDistantLight',\n 'fePointLight',\n 'feSpotLight',\n 'circle',\n 'ellipse',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'defs',\n 'g',\n 'svg',\n 'symbol',\n 'use',\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'glyph',\n 'glyphRef',\n 'textPath',\n 'text',\n 'tref',\n 'tspan',\n 'altGlyph',\n 'textPath',\n 'tref',\n 'tspan',\n 'clipPath',\n 'color-profile',\n 'cursor',\n 'filter',\n 'foreignObject',\n 'script',\n 'style',\n 'view',\n 'select',\n 'option',\n 'textarea',\n 'label'\n];\n\nexport default {\n attributes: {\n '*': [...defaultAttributes, 'ui-actions', 'ui-tooltip'],\n img: ['src', 'srcset', 'alt', 'title', 'loading'],\n link: ['href', 'rel'],\n iframe: ['src'],\n a: ['href']\n },\n tags: [...defaultTags, 'a', 'link', 'input', 'button', 'iframe', 'img']\n};\n","import sanitizeHtml, {IOptions} from 'sanitize-html';\nimport sanitizeOptions from './helpers/sanitizerOptions';\n\nexport const useHtmlSanitizer = () => {\n const {allowedAttributes, allowedTags} = sanitizeHtml.defaults;\n const {attributes, tags} = sanitizeOptions;\n const options: IOptions = {\n allowedTags: allowedTags.concat(tags),\n allowedAttributes: {...allowedAttributes, ...attributes},\n allowVulnerableTags: true\n };\n return (html: string) => sanitizeHtml(html, options);\n};\n","import {CSSProperties, useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport {\n CustomAction,\n CustomActionExtension,\n CustomActionTaskParams,\n CustomActionViewConfig,\n CustomScriptPlatform,\n Entity,\n initializeWebWorker,\n isEmptyValue,\n ProcessParams\n} from '@reltio/mdm-sdk';\nimport {omit} from 'ramda';\nimport {useWorkflowCheckPermission} from '../../components/workflow';\nimport {useHtmlSanitizer} from '../useHtmlSanitizer';\nimport {\n InterceptHandlersContext,\n SandboxAPIContext,\n SnackbarContext,\n useMdmAction,\n useMdmApiPath,\n useMdmEntity,\n useMdmEntityUri,\n useMdmIsEditableMode,\n useMdmMetadata,\n useMdmReltioPath,\n useMdmSearchProviderData,\n useMdmServicesPath,\n useMdmTenant,\n useMdmUiPath,\n useMdmUser,\n useMdmWorkflowEnvironmentUrl,\n useMdmWorkflowPath\n} from '../../contexts';\nimport {processRequest} from './API';\nimport {\n getWorkerURL,\n isValidCustomScript,\n resetHtml,\n getProcessedTask,\n setUpRequestInterceptor,\n setUpResponseInterceptor\n} from './helpers';\n\ntype Config = CustomActionViewConfig | CustomActionExtension;\n\nexport const useAPI = (config: Config = {} as Config) => {\n const {processApiRequest, processApiResponse, platform} = config.action || {};\n const [html, setHtml] = useState<HTMLElement>();\n const [listenersToReset, setListenersToReset] = useState<Array<() => void>>([]);\n const [popupListenersToReset, setPopupListenersToReset] = useState<Array<() => void>>([]);\n const [visible, setVisible] = useState(true);\n const [popup, setPopup] = useState<HTMLElement>();\n const [tooltip, setTooltip] = useState<string>(null);\n const [customStyles, setCustomStyles] = useState<{\n height?: number | string;\n width?: number | string;\n pointerEvents?: CSSProperties['pointerEvents'];\n }>({});\n const workerRef = useRef<Worker>();\n const requestListeners = useRef({});\n const responseListeners = useRef({});\n const sanitizeHtml = useHtmlSanitizer();\n\n const openSearch = useMdmAction('openSearch');\n const uiPath = useMdmUiPath();\n const tenant = useMdmTenant();\n const workerUrl = getWorkerURL(uiPath, tenant);\n\n const showSnackbarMessage = useContext(SnackbarContext);\n const qxApi = useContext(SandboxAPIContext);\n const interceptHandlers = useContext(InterceptHandlersContext);\n\n const workflowCheckPermission = useWorkflowCheckPermission();\n\n const metadata = useMdmMetadata() || {};\n const entity = useMdmEntity() || ({} as Entity);\n const apiPath = useMdmApiPath();\n const servicesPath = useMdmServicesPath();\n const reltioPath = useMdmReltioPath();\n const workflowPath = useMdmWorkflowPath();\n const user = useMdmUser();\n const entityUri = useMdmEntityUri();\n const isEditableMode = useMdmIsEditableMode();\n const environment = useMdmWorkflowEnvironmentUrl();\n const {type: typeSearch, data: search} = useMdmSearchProviderData() || {};\n const searchQuery = typeSearch === 'search' ? search?.query : null;\n\n let innerText = '';\n let popupText = '';\n const process = ({task, worker}: ProcessParams) => {\n if (task) {\n switch (task.action) {\n case CustomAction.SET_HTML: {\n const sanitizedHtml = sanitizeHtml((task.params as CustomActionTaskParams).html);\n if ((task.params as CustomActionTaskParams).id) {\n const elem = document.getElementById((task.params as CustomActionTaskParams).id as string);\n if (elem) elem.innerHTML = sanitizedHtml;\n } else if (innerText !== sanitizedHtml) {\n innerText = sanitizedHtml;\n resetHtml({\n worker,\n setTooltip,\n html: sanitizedHtml,\n innerText,\n setListenersToReset,\n setHtml\n });\n }\n break;\n }\n case CustomAction.SHOW_POPUP: {\n const sanitizedPopup = sanitizeHtml(task.params as string);\n popupText = sanitizedPopup;\n resetHtml({\n worker,\n setTooltip,\n html: sanitizedPopup,\n innerText: popupText,\n setListenersToReset: setPopupListenersToReset,\n setHtml: setPopup\n });\n break;\n }\n case CustomAction.HIDE_POPUP: {\n popupText = '';\n setPopup(null);\n break;\n }\n case CustomAction.SET_VISIBILITY: {\n if (task.params === 'visible') {\n setVisible(true);\n resetHtml({\n worker,\n setTooltip,\n innerText,\n setListenersToReset,\n setHtml\n });\n } else {\n setVisible(false);\n }\n break;\n }\n case CustomAction.SET_TOOLTIP: {\n setTooltip(task.params as string);\n break;\n }\n case CustomAction.SET_HEIGHT: {\n setCustomStyles((prev) => ({\n ...prev,\n height: task.params as string | number\n }));\n break;\n }\n case CustomAction.SET_WIDTH: {\n setCustomStyles((prev) => ({\n ...prev,\n width: task.params as string | number\n }));\n break;\n }\n case CustomAction.SET_ENABLED: {\n setCustomStyles((prev) =>\n task.params ? omit(['pointer-events'], prev) : {...prev, 'pointer-events': 'none'}\n );\n break;\n }\n case CustomAction.LOG: {\n console.log(task.params); //eslint-disable-line no-console\n break;\n }\n case CustomAction.MESSAGE: {\n showSnackbarMessage(task.params as string);\n break;\n }\n case CustomAction.REQUEST: {\n const processedTask = getProcessedTask(task, apiPath, reltioPath, tenant);\n processRequest({\n params: processedTask.params as CustomActionTaskParams,\n permissions: config.action.permissions,\n worker,\n metadata,\n config: config as Config,\n user,\n servicesPath,\n apiPath: reltioPath,\n tenant,\n workflowPath,\n entity,\n entityUri,\n environment,\n query: searchQuery,\n openSearch,\n workflowCheckPermission,\n ...qxApi\n });\n break;\n }\n case CustomAction.RETURN_PROCESSED_API_RESPONSE: {\n const {id, data} = task.params as CustomActionTaskParams;\n if (responseListeners.current[id]) {\n responseListeners.current[id].next(data);\n responseListeners.current = omit([id], responseListeners.current);\n }\n break;\n }\n case CustomAction.RETURN_PROCESSED_API_REQUEST: {\n const {id, data} = task.params as CustomActionTaskParams;\n if (requestListeners.current[id]) {\n requestListeners.current[id].resolve(data);\n requestListeners.current = omit([id], requestListeners.current);\n }\n break;\n }\n }\n }\n };\n\n const setRequestListeners = (options, next, requestId, resolve) => {\n requestListeners.current = {\n ...requestListeners.current,\n [requestId]: {options, next, id: requestId, resolve}\n };\n };\n\n const setResponseListeners = (next, responseId) => {\n responseListeners.current = {\n ...responseListeners.current,\n [responseId]: {next}\n };\n };\n\n const requestInterceptor = setUpRequestInterceptor({\n apiPath,\n reltioPath,\n tenant,\n processApiRequest,\n workerRef,\n setRequestListeners\n });\n const responseInterceptor = setUpResponseInterceptor({\n reltioPath,\n apiPath,\n processApiResponse,\n workerRef,\n setResponseListeners\n });\n\n const postEventMessage = (type: string, data: unknown) => {\n workerRef.current?.postMessage({action: 'event', type, data});\n };\n\n const pendingInterceptors = useRef(false);\n\n const needDelayedRequestForInterceptors =\n interceptHandlers &&\n !isEmptyValue(config.action) &&\n platform !== CustomScriptPlatform.CLASSIC &&\n (processApiRequest || processApiResponse);\n\n if (needDelayedRequestForInterceptors) {\n if (!pendingInterceptors.current && !workerRef.current) {\n interceptHandlers.startInterceptorInit();\n pendingInterceptors.current = true;\n }\n }\n\n useEffect(() => {\n if (isValidCustomScript(config.action)) {\n workerRef.current = initializeWebWorker(workerUrl, process, config);\n if (pendingInterceptors.current) {\n interceptHandlers.finishInterceptorInit();\n pendingInterceptors.current = false;\n }\n postEventMessage('updateEntity', entity);\n }\n }, [entity, config]);\n\n useEffect(() => {\n postEventMessage('editMode', isEditableMode);\n }, [isEditableMode]);\n\n useEffect(() => {\n postEventMessage('changeSearchQuery', searchQuery);\n }, [searchQuery]);\n\n useEffect(() => {\n postEventMessage('changeVisibility', visible);\n }, [visible]);\n\n useEffect(\n () => () => {\n listenersToReset.forEach((listener) => listener());\n },\n [listenersToReset]\n );\n //we need to have separate handlers in opposite case main window listeners will be removed on the popup appear\n useEffect(\n () => () => {\n popupListenersToReset.forEach((listener) => listener());\n },\n [popupListenersToReset, listenersToReset]\n );\n\n const onClick = useCallback(() => {\n postEventMessage('execute', null);\n }, [config]);\n\n useEffect(() => {\n if (!isEmptyValue(interceptHandlers) && (processApiRequest || processApiResponse)) {\n const {\n addInternalRequestInterceptor,\n addInternalResponseInterceptor,\n removeInternalRequestInterceptor,\n removeInternalResponseInterceptor\n } = interceptHandlers;\n\n addInternalRequestInterceptor(requestInterceptor);\n addInternalResponseInterceptor(responseInterceptor);\n workerRef.current.onerror = () => {\n removeInternalRequestInterceptor(requestInterceptor);\n removeInternalResponseInterceptor(responseInterceptor);\n };\n return () => {\n removeInternalRequestInterceptor(requestInterceptor);\n removeInternalResponseInterceptor(responseInterceptor);\n };\n }\n }, [config]);\n\n return {html, visible, tooltip, customStyles, onClick, popup};\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {concat, difference, isEmpty, map, pipe, prop, reduce, reject, uniq} from 'ramda';\nimport {\n Comment,\n Entity,\n FilterOptions,\n getFilteredEntities,\n isEntityUri,\n getEntity,\n EntitiesMap,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from './useSafePromise';\nimport {useMdmEntityUriWithDataTenant} from '../contexts';\n\nconst SELECT_OPTION = 'uri,label,type';\n\nexport const useCommentsEntitiesMap = (comments: Comment[]) => {\n const safePromise = useSafePromise();\n const currentEntityUri = useMdmEntityUriWithDataTenant();\n\n const [entitiesMap, setEntitiesMap] = useState<EntitiesMap>({});\n\n const getEntities = useCallback(\n (entitiesUris: string[]) => {\n const requestFilters = [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'uri',\n values: entitiesUris\n }\n ];\n\n const requestOptions = {\n max: entitiesUris.length,\n activeness: ActivityFilter.ALL,\n select: 'uri,label,type'\n };\n return safePromise(getFilteredEntities(requestFilters, requestOptions));\n },\n [safePromise]\n );\n\n const getNotFoundEntity = (entityUri: string) => {\n return getEntity(entityUri, {options: SELECT_OPTION})\n .then((entity: Entity) => ({...entity, uri: entityUri} as Entity))\n .catch(() => ({}));\n };\n\n const addNotFoundEntities = useCallback(\n (entitiesUris: string[], entities: Entity[]) => {\n return safePromise(Promise.all((entitiesUris || []).map(getNotFoundEntity))).then(\n (notFoundEntities: Entity[]) => pipe(reject(isEmpty), concat(entities))(notFoundEntities)\n );\n },\n [safePromise]\n );\n\n useEffect(() => {\n const uniqEntitiesUris = pipe(\n reduce((entitiesUris, comment) => {\n const {objectType: type, relatedObjectUris} = comment;\n\n if (type === 'relation' || type === 'potentialMatch') {\n (relatedObjectUris || []).forEach((uri) => {\n if (uri !== currentEntityUri && isEntityUri(uri) && !entitiesMap[uri]) {\n entitiesUris.push(uri);\n }\n });\n }\n return entitiesUris;\n }, []),\n uniq\n )(comments || []);\n\n if (uniqEntitiesUris.length) {\n getEntities(uniqEntitiesUris)\n .then((results: Entity[]) => {\n const getNotFoundUris = pipe(map(prop('uri')), difference(uniqEntitiesUris));\n\n const notFoundEntities = getNotFoundUris(results);\n return addNotFoundEntities(notFoundEntities, results);\n })\n .then((results) => {\n setEntitiesMap((prevEntitiesMap) =>\n results.reduce(\n (entities, entity) => {\n entities[entity.uri] = entity;\n return entities;\n },\n {...prevEntitiesMap}\n )\n );\n })\n .catch(() => {});\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getEntities, addNotFoundEntities, comments, currentEntityUri]);\n\n return entitiesMap;\n};\n","import {useCallback} from 'react';\nimport {checkConfigPermission, ConfigPermissions} from '@reltio/mdm-sdk';\nimport {useMdmUserRoles} from '../contexts';\n\nconst emptyArray = [];\n\nexport const useConfigPermissions = () => {\n const userRoles = useMdmUserRoles() || emptyArray;\n\n return {\n canCreate: useCallback(checkConfigPermission(ConfigPermissions.CREATE, userRoles), [userRoles]),\n canRead: useCallback(checkConfigPermission(ConfigPermissions.READ, userRoles), [userRoles]),\n canUpdate: useCallback(checkConfigPermission(ConfigPermissions.UPDATE, userRoles), [userRoles]),\n canDelete: useCallback(checkConfigPermission(ConfigPermissions.DELETE, userRoles), [userRoles])\n };\n};\n","import {curry, eqBy, filter, path, prop, reject} from 'ramda';\nimport {useEffect, useMemo, useRef} from 'react';\n\nimport {areOneHierarchyUris, AttributeError, Connection, isEditableMode, markEdited, markNew} from '@reltio/mdm-sdk';\n\nimport {\n useActionsHook,\n useMdmAction,\n useMdmAllRelationsToAddAndEdit,\n useMdmMode,\n useMdmProfileErrors,\n useMdmRelationsDrafts,\n useMdmListener\n} from '../contexts';\n\nconst isConnectionHasError = curry((errors: AttributeError[], connection: Connection) => {\n const relationUri = path(['relation', 'relationUri'], connection);\n return errors.some(\n (error) =>\n areOneHierarchyUris(prop('uri', error), relationUri) ||\n areOneHierarchyUris(prop('parentUri', error), relationUri) ||\n (error.path || []).some(\n (errorPath) => path(['value', 'relation', 'relationUri'], errorPath) === relationUri\n )\n );\n});\n\nconst getInvalidConnections = (errors: AttributeError[] = [], connections: Connection[] = []) =>\n filter(isConnectionHasError(errors), connections);\n\nexport const useExpandInvalidRelations = (configId: string) => {\n const openRelationEditor = useMdmAction('openRelationEditor');\n const mode = useMdmMode();\n const profileErrors = useMdmProfileErrors();\n const shouldOpenInvalidEditors = useRef(true);\n const listenToActions = useActionsHook();\n const {addedConnections = [], editedConnections = []} = useMdmRelationsDrafts(configId) || {};\n const relationsToAddAndEdit = useMdmAllRelationsToAddAndEdit([configId]) || [];\n const preparedConnectionsList = reject(\n (draftConnection: Connection) =>\n relationsToAddAndEdit.some(eqBy(path(['relation', 'relationUri']), draftConnection)),\n [...addedConnections.map(markNew), ...editedConnections.map(markEdited)]\n );\n const invalidConnections = useMemo(\n () => getInvalidConnections(profileErrors, preparedConnectionsList),\n [profileErrors, preparedConnectionsList]\n );\n const expandInvalidRelatonsListener = useMdmListener('expandInvalidRelatonsListener');\n const setShouldOpenInvalidEditors = (shouldOpen: boolean) => (shouldOpenInvalidEditors.current = shouldOpen);\n const listenerCallback = expandInvalidRelatonsListener(() => setShouldOpenInvalidEditors(true));\n\n useEffect(() => {\n if (isEditableMode(mode) && invalidConnections.length && shouldOpenInvalidEditors.current) {\n invalidConnections.forEach((connection: Connection) => openRelationEditor(configId, connection));\n setShouldOpenInvalidEditors(false);\n }\n }, [mode, invalidConnections]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions(listenerCallback);\n return () => stopListeningActions();\n }, [listenToActions]);\n};\n","import i18n from 'ui-i18n';\nimport {useSnackbar} from './useSnackbar';\n\ntype Props = {\n onLayoutReset: () => void;\n onResetUndo: () => void;\n};\n\nexport const useLayoutResetter = ({onLayoutReset, onResetUndo}: Props) => {\n const resetLayout = () => {\n onLayoutReset();\n showSnackbarMessage(\n i18n.text(\n \"The default layout is now restored. It's still not too late to revert your changes. Click Undo to go back to your personalized settings.\"\n )\n );\n };\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n onDismissClick: onResetUndo,\n showDismiss: true,\n autoHideDuration: 5000,\n dismissTitle: i18n.text('Undo')\n });\n\n return {SnackbarRenderer, resetLayout};\n};\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {cond, pipe, prop, T, evolve, filter as filterFn, when, identity, times, length, ifElse, always} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {\n ActivityFilter,\n addGlobalFilterToQuery,\n Connection,\n Entity,\n getRelationsForDataTenantEntity,\n getRelationsForEntity,\n isAvailableEntityTypeUri,\n isAvailableRelationTypeUri,\n isDataTenantEntity,\n isObject,\n isTempUri,\n Mode,\n RelationsContent,\n RelationsRequestConfig,\n RelationsViewConfig,\n wrapInArrayIfNeeded\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from './useSafePromise';\nimport {usePrevious} from './usePrevious';\nimport {\n useMdmAction,\n useMdmDtssPath,\n useMdmGlobalSearchRequestOptions,\n useMdmMetadata,\n useMdmProfileLastLoadedTime,\n useMdmTenant\n} from '../contexts';\n\ntype Props = {\n sorting?: {\n field: string;\n order: string;\n };\n filter?: string;\n page: number;\n rowsPerPage: number;\n config: Pick<RelationsViewConfig, 'suggested' | 'content' | 'id'>;\n entity: Entity;\n relationActivityFilter?: ActivityFilter;\n mode: Mode;\n searchByOv?: boolean;\n showSnackbarMessage?: (message: string) => void;\n};\n\nconst buildSuggestedIds = when(\n identity,\n pipe(\n wrapInArrayIfNeeded,\n length,\n times((n) => n + 1)\n )\n);\nconst isValidRequestConfig = (config: RelationsRequestConfig) => {\n let entry: RelationsRequestConfig | RelationsRequestConfig['nextEntry'] = config;\n while (entry) {\n if (entry.entityTypes?.length === 0) {\n return false;\n }\n entry = entry.nextEntry;\n }\n return true;\n};\n\ntype ConnectionResponse = Array<{connections?: Connection[]; total: number; dataSorted?: boolean}>;\n\nexport const useRelationsLoader = ({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter,\n mode,\n searchByOv = false,\n showSnackbarMessage\n}: Props) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const relationsLoaded = useMdmAction('relationsLoaded');\n const tenant = useMdmTenant();\n const metadata = useMdmMetadata();\n const dtssPath = useMdmDtssPath();\n const {activityFilter, globalFilter} = useMdmGlobalSearchRequestOptions() || {};\n const lastLoadedTime = useMdmProfileLastLoadedTime();\n\n const safePromise = useSafePromise();\n\n const processContent = (content: RelationsContent) => {\n const getUri = when(isObject, prop('uri'));\n const filterRelation = pipe(getUri, isAvailableRelationTypeUri(metadata));\n\n return evolve({\n entityTypes: filterFn(isAvailableEntityTypeUri(metadata)),\n inRelations: filterFn(filterRelation),\n outRelations: filterFn(filterRelation),\n nextEntry: processContent\n })(content);\n };\n\n const suggested = config.suggested;\n const options = useMemo(\n () => ({\n searchByOv\n }),\n [searchByOv]\n );\n const modeRef = useRef<Mode>(mode);\n modeRef.current = mode;\n const loadRelations = useCallback(() => {\n if (entity?.uri) {\n const processedConfig = processContent(config.content);\n const requestConfig = {\n ...processedConfig,\n sortBy: sorting?.field,\n order: sorting?.order,\n returnDates: true,\n returnObjects: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n },\n max: rowsPerPage,\n offset: page * rowsPerPage,\n filter: addGlobalFilterToQuery(globalFilter, filter) || undefined,\n suggested: buildSuggestedIds(suggested)\n };\n const configs = [requestConfig].concat(\n ifElse(\n identity,\n pipe(wrapInArrayIfNeeded, (suggested) =>\n suggested.map((config, i) => ({...config, id: requestConfig.suggested[i]}))\n ),\n always([])\n )(suggested)\n );\n\n const emptyResponsePromise = Promise.resolve([{total: 0}]);\n const request: (entity: Entity) => Promise<ConnectionResponse> = cond([\n [pipe(prop('uri'), isTempUri), () => emptyResponsePromise],\n [\n always(!isValidRequestConfig(requestConfig)),\n () => {\n console.warn('Connections request config has \"entityTypes\": []. Request is blocked.');\n return emptyResponsePromise;\n }\n ],\n [\n isDataTenantEntity,\n (entity) =>\n getRelationsForDataTenantEntity({\n entityUri: entity.uri,\n configs: configs,\n customerTenant: tenant,\n dataTenant: entity.dataTenant,\n dtssPath,\n options\n })\n ],\n [T, (entity) => getRelationsForEntity(entity.uri, configs, options)]\n ]);\n setIsLoading(true);\n safePromise(request(entity))\n .then((result) => {\n if (!Array.isArray(result)) {\n throw Error(JSON.stringify(result));\n }\n const [{connections, total, dataSorted}] = result;\n if (dataSorted === false && showSnackbarMessage) {\n showSnackbarMessage(\n i18n.text(\n 'This profile contains a large number of relationships. We have disabled filtering and sorting to help optimize performance.'\n )\n );\n }\n relationsLoaded({id: config.id, connections, total, mode: modeRef.current});\n })\n .catch((e) => {\n console.warn('Failed to load relations data', e);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n activityFilter,\n metadata,\n config,\n relationsLoaded,\n dtssPath,\n entity?.uri,\n entity?.dataTenant,\n filter,\n globalFilter,\n page,\n relationActivityFilter,\n rowsPerPage,\n safePromise,\n sorting,\n tenant,\n options,\n lastLoadedTime\n ]);\n const isRequestSentRef = useRef<boolean>(false);\n isRequestSentRef.current = false;\n useEffect(() => {\n isRequestSentRef.current = true;\n loadRelations();\n }, [loadRelations]);\n\n const prevMode = usePrevious(mode);\n useEffect(() => {\n if (mode === Mode.Viewing && !isRequestSentRef.current && prevMode !== mode) {\n isRequestSentRef.current = true;\n loadRelations();\n }\n }, [loadRelations, mode, prevMode]);\n return {isLoading, reload: loadRelations};\n};\n","import {useEffect, useRef} from 'react';\n\nexport const useRunOnceAfterValueInitialization = (cb, value) => {\n const isValueInited = useRef(false);\n useEffect(() => {\n if (value && !isValueInited.current) {\n isValueInited.current = true;\n cb();\n }\n }, [cb, value]);\n};\n"],"names":["clearError","omit","accordionSummaryHeight","defaultBorderStyle","makeStyles","theme","accordion","borderTop","borderBottom","fontSize","boxShadow","display","margin","accordionExpanded","accordionSummary","alignItems","height","minHeight","accordionSummaryHeading","flex","typography","pxToRem","fontWeight","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","maxHeight","overflow","paddingTop","paddingBottom","paddingLeft","marginTop","parents","color","palette","text","primary","errorWrapper","lineHeight","flexDirection","errorTitle","attributeTypesPath","secondary","goToIcon","marginLeft","errorsAccordion","backgroundColor","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","icon","marginRight","errorIcon","fill","warningIcon","ErrorsPanel","memo","panels","expandedPanelId","onToggle","ErrorComponent","styles","useStyles","length","map","id","title","items","accordionClassName","accordionDetailsClassName","Accordion","key","square","expanded","onChange","className","classes","root","AccordionSummary","content","expandIcon","ExpandMore","Typography","AccordionDetails","classnames","error","i","displayName","props","width","viewBox","xmlns","fillRule","clipRule","d","fillOpacity","Error","metadata","useMdmMetadata","isEditableMode","useMdmIsEditableMode","displayedMessage","type","source","message","attributeTypeUri","attributeType","ErrorType","ErrorSource","attrType","findAttributeTypeByUri","i18n","attribute","label","getDisplayedErrorMessage","displayedErrorPath","path","errorPath","uri","slice","filter","AttributeValuePathItemType","includes","identity","join","getDisplayedErrorPath","displayedAttributeTypesPath","either","getDisplayedAttributeTypesPath","highlightError","useContext","ScrollToElementContext","showLink","parentUri","SmallIconButton","HyperlinkIcon","size","onClick","tooltipTitle","AttributesErrorsPanel","attributesWithErrors","cachedErrors","allErrors","cacheForAllErrors","useRef","errors1","errors2","equals","areErrorsEqual","current","useCachedErrors","errors","warnings","useMemo","splitErrorsBySeverity","setExpandedPanelId","useState","number","useEffect","handleChange","useCallback","panelId","event","isExpanded","stroke","strokeWidth","main","closeIcon","position","right","bottom","transform","button","padding","FilterButton","enabled","Tooltip","IconButton","Filter","Close","propTypes","PropTypes","searchButton","input","maxWidth","minWidth","background","startAdornment","endAdornment","ExpandableSearchInput","query","value","setValue","isOpen","setIsOpen","Input","autoFocus","placeholder","disableUnderline","pipe","getValue","InputAdornment","Search","CloseIcon","F","always","tap","onKeyPress","when","propEq","trim","T","EmptyStub","style","widthToHide","children","handleWidth","render","link","cursor","wordBreak","selected","popper","borderRadius","HierarchyNodeTitle","isSelected","entityUri","viewId","anchorEl","withEntityDetails","generateEntityUrl","UrlGeneratorsContext","openEntity","useMdmAction","uiPath","useMdmUiPath","isLoading","entityDetails","showEntityDetails","hideEntityDetails","setEntityDetails","setIsLoading","timerId","safePromise","useSafePromise","cancelRequest","Promise","resolve","setTimeout","getEntity","then","finally","clearTimeout","useEntityDetails","showPopper","Boolean","handleClick","onMouseEnter","undefined","onMouseLeave","Link","to","Popper","open","modal","placement","ProfileCard","entity","variant","justifyContent","check","ImportModes","tooltip","noop","mode","INIT","CloudDownloadIcon","PROGRESS","CircularProgress","spinner","SUCCESS","Done","renderCurrentMode","textDecoration","href","e","stopPropagation","preventDefault","alt","src","gif2Url","menuItem","whiteSpace","itemText","textPrimary","textSecondary","MultilineMenuItem","forwardRef","ref","item","onMenuClose","MenuItem","ListItemText","paddingRight","profileCardWrapper","gap","profileCardContainer","flexGrow","rulesContainer","marginBottom","dividerWrapper","alignSelf","divider","relevanceBadge","ProfileMatchCard","entitiesMap","match","showRelevanceBadge","matchRuleSummaries","some","checkMatchRuleSummaryRelevance","object","container","matchRules","MatchRulesBlock","Divider","orientation","RelevanceScoreBadge","scroll","element","scrollIntoView","block","behavior","clearScrollTimer","scrollTimer","isScrolledIntoView","scrollableParent","elemTop","offsetTop","elemBottom","clientHeight","scrollTop","from","highlighted","animationName","animationDuration","animationIterationCount","clickable","alpha","inactive","inactiveBackground","inactiveHoverBackground","inactiveSelectedBackground","inactiveSelectedHoverBackground","justImported","avatar","image","info","overflowWrap","wordWrap","secondaryLabel","businessCard","secondRow","entities","entityToHighlight","selectedEntityUri","onEntityClick","onEntityHover","entitiesImportStatus","entityButtonsRenderer","list","useDidUpdateEffect","querySelectorAll","parentElement","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUriForLink","getEntityUriForLink","importStatus","prop","EntityAvatar","avatarClassName","imageClassName","EntityUriLink","EntityTypeBadge","getEntityId","textAlign","top","left","zIndex","opacity","borderLeft","borderRight","animation","boxSizing","TreeNode","listIndex","swapFrom","swapLength","swapDepth","scaffoldBlockPxWidth","lowerSiblingCounts","connectDropTarget","isOver","draggedNode","canDrop","treeIndex","treeId","getPrevRow","node","rowDirection","otherProps","rowDirectionClass","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","lineClass","push","highlightLineClass","Children","child","cloneElement","defaultProps","isRequired","NodeRendererDefault","toggleChildrenVisibility","connectDragPreview","connectDragSource","isDragging","canDrag","subtitle","isSearchMatch","isSearchFocus","buttons","didDrop","parentNode","nodeTitle","nodeSubtitle","handle","Array","_","index","dropEffect","isDraggedDescendant","isDescendant","isLandingPadActive","buttonStyle","btn","TreePlaceholder","Component","this","drop","border","outline","PlaceholderRendererDefault","memoize","f","savedArgsArray","savedKeysArray","savedResult","args","keysArray","Object","keys","sort","argsArray","arg","memoizedInsertNode","insertNode","memoizedGetFlatDataFromTree","getFlatDataFromTree","memoizedGetDescendantCount","getDescendantCount","DndManager","constructor","treeRef","hoverHandler","hoverProps","dropTargetProps","monitor","component","getItem","targetDepth","getTargetDepth","lastDropTargetNode","lastDropTargetDepth","dragHover","minimumTreeIndex","depth","deferredCallHoverHandler","shouldSkipMoreFrames","rafId","requestAnimationFrame","resetDragVariables","startDrag","endDrag","dndType","treeData","state","draggingTreeData","getNodeKey","customCanDrop","maxDepth","lastCanDropResult","lastCanDropProps","dropTargetDepth","rowAbove","canNodeHaveChildren","Math","min","blocksOffset","dragSourceInitialDepth","relativePosition","findDOMNode","getBoundingClientRect","leftShift","getSourceClientOffset","x","round","direction","getDifferenceFromInitialOffset","max","draggedChildDepth","getDepth","abovePath","aboveNode","newCanDropProps","nodeId","aboveNodeId","addedResult","newNode","expandParent","prevPath","prevParent","prevTreeIndex","nextPath","nextParent","nextTreeIndex","wrapSource","el","nodeDragSource","beginDrag","cancelAnimationFrame","getDropResult","dropTargetNode","dragSource","connect","dragPreview","wrapTarget","nodeDropTarget","result","hover","bind","dropTarget","dragged","wrapPlaceholder","placeholderDropTarget","treeIdCounter","mergeTheme","merged","innerStyle","reactVirtualizedListProps","overridableDefaults","nodeContentRenderer","placeholderRenderer","rowHeight","slideRegionSize","treeNodeRenderer","propKey","ReactSortableTree","super","isVirtualized","dndManager","treePlaceholderRenderer","scrollZoneVirtualList","createScrollingComponent","withScrolling","List","vStrength","createVerticalStrength","hStrength","createHorizontalStrength","draggedMinimumTreeIndex","draggedDepth","searchMatches","searchFocusTreeIndex","dragging","draggingExpandedPaths","ignoreOneTreeUpdate","instanceProps","searchQuery","searchFocusOffset","ignoreTreeChanges","moveNode","handleDndMonitorChange","componentDidMount","loadLazyChildren","stateUpdate","search","setState","clearMonitorSubscription","dragDropManager","getMonitor","subscribeToStateChange","nextProps","prevState","newState","assign","componentDidUpdate","prevProps","onDragStateChanged","walk","callback","pending","onLazyLoadChildren","removeNode","draggedPath","reduce","newTree","changeNodeAtPath","isTreeDataEqual","componentWillUnmount","getRows","ignoreCollapsed","targetNode","onVisibilityToggle","nextParentNode","onMoveNode","seekIndex","expand","singleSearch","searchFinishCallback","searchMethod","onlyExpandSearchedNodes","expandedTreeData","matches","find","toggleExpandedForAll","defaultSearchMethod","expandAllMatchPaths","expandFocusMatchPaths","newDraggingTreeData","nodePath","newDraggingExpandedPaths","gt","append","uniqWith","eqBy","String","dropResult","shouldCopy","shouldCopyOnOutsideDrop","copyNode","resetTree","loadCollapsedLazyChildren","done","childrenArray","oldNode","renderRow","row","matchKeys","generateNodeProps","TreeNodeRenderer","NodeContentRenderer","nodeKey","callbackParams","nodeProps","rowCanDrag","sharedProps","rows","swapTo","fromIndex","toIndex","count","rowsWithoutMoved","slideRows","scrollToInfo","scrollToIndex","containerStyle","Placeholder","PlaceholderContent","ScrollZoneVirtualList","verticalStrength","horizontalStrength","speed","scrollToAlignment","rst__virtualScrollOverride","onScroll","rowCount","estimatedRowSize","rowRenderer","rowStyle","defaultGetNodeKey","polyfill","StyledReactSortableTree","withStyles","SortableTreeWithoutDndContext","DndContext","DragAndDrop","getReactElementText","parent","stringSearch","indexOf","getNodeDataAtTreeIndexOrNextIndex","targetIndex","currentIndex","isPseudoRoot","selfPath","nextIndex","childIndex","childCount","walkDescendants","mapDescendants","nextNode","selfInfo","mapResult","RESULT_MISS","traverse","currentTreeIndex","pathIndex","removedNode","removedTreeIndex","addNodeAtDepthAndIndex","isLastChild","currentDepth","n","insertedTreeIndex","parentPath","insertIndex","pathFragment","newChildren","insertResult","flattened","nodeInfo","older","younger","deepest","matchCount","trav","isSelfMatch","hasFocusMatch","extraInfo","hasChildren","getTreeFromFlatData","flatData","getKey","getParentKey","parentId","rootKey","childrenToParents","parentKey","addNodeUnderParent","addAsFirstChild","hasBeenAdded","changedTreeData","getNodeAtPath","foundNodeInfo","err","removeNodeAtPath","getVisibleNodeInfoAtIndex","getVisibleNodeCount","total","currentNode","editor","overflowX","letterSpacing","dense","actionButtons","withContext","contextValue","connection","relationUri","relationType","relation","highlightedError","isHighlightedErrorType","isAttributeTypeError","config","isNew","getEntityUriFromConnection","getRelationUriFromConnection","isTempEntity","isTempUri","mdmSetInitialInfo","setRelationType","closeRelationEditor","entityCreated","entityDeleted","setRelationEntity","errorDeactivated","errorsSet","addAttributes","modifyAttribute","removeAttribute","addRelation","editRelation","mainEntity","useMdmEntity","initialConnection","useMdmInitialConnection","initialModifiedEntity","useMdmInitialConnectionTempEntity","mdmModifiedEntity","useMdmModifiedEntity","mdmAllModifiedEntities","useMdmModifiedEntities","globalSearchRequestOptions","useMdmGlobalSearchRequestOptions","profileErrors","useMdmProfileErrors","authoringItems","useMdmAuthoringItemsByEntityType","getRelationEditorActiveError","modifiedEntity","allModifiedEntities","errorClassName","useScrollToAttributeError","isSimple","inRelations","inRelationTypes","outRelations","outRelationTypes","getInOutRelations","parentEntityUri","contentSecondLevel","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","attributes","getRelationAttributesFromConnection","getActivenessAttributes","relatedTempEntities","findRelatedTemporaryEntities","relatedTempEntitiesUrisHistory","setInitialInfo","concat","uniq","initialRelatedTempEntities","defaultRelationType","getDefaultRelationTypeObject","initialConnectionChangeablePart","pick","connectionChangeablePart","hasChanges","isEmptyValue","initial","actual","applyAction","curry","canCreateNewEntity","isSuggestMode","onRelationTypeChange","handleClose","updateModifiedEntityLabel","entityType","getEntityType","updateConnectionEntityLabel","setModifiedEntity","deleteModifiedEntity","onChangeEntity","getErrorId","validate","validateConnection","resetErrors","onApply","omitMarks","differenceWith","onCancel","initialTempEntities","onAddAttributes","params","param","onChangeAttribute","onDeleteAttribute","onCreateEntity","entityTypeUri","initValue","newEntityAttrTypes","relationEditorAttributeTypesSelectionStrategy","getCreatableAttributeTypes","newEntity","createTemporaryEntity","attributeTypes","errorMessage","getErrorMessage","getEntityTypesUris","entityTypes","ConnectionRelationTypeSelector","ErrorWrapper","EntitySelector","entityTypesUris","onCreate","attributeTypesSelectionStrategy","AttributesList","attrTypes","showEmptyEditors","Button","disabled","MapControlContainer","controlElement","setControlElement","controlDiv","document","createElement","divIndex","controls","removeAt","classList","add","createPortal","xmlnsXlink","xlinkHref","mask","ButtonWithTooltip","withTooltip","TopRightMapControls","drawingMode","drawingModes","hasActiveOverlay","onDrawingModeChanged","onClearOverlay","changeDrawingModeTo","HighlightOff","Icon","MAP_DRAWING_MODES","RadiusIcon","DrawIcon","getIcon","checkbox","TopCenterMapControls","isSearchOnMapMove","onChangeIsSearchOnMapMove","FormControlLabel","control","Checkbox","checked","target","getMapBoundsPolygon","bounds","getBounds","ne","getNorthEast","sw","getSouthWest","neLat","lat","neLng","lng","swLat","swLng","additionalPoint1","additionalPoint2","center","getCenter","getDrawingMode","window","google","maps","drawing","OverlayType","CIRCLE","POLYGON","fitMapBoundsForOverlay","overlay","existingBounds","LatLngBounds","extend","LatLng","fitBounds","hoveredMarkerIcon","svg2Url","markerIcon","marker","popperAnchor","hovered","setHovered","activeEntityUri","EntityMarkerContext","pathEq","point","setHoveredDebounced","debounce","onMouseOver","onMouseOut","url","scaledSize","Size","visible","options","alignBottom","pane","pixelOffset","closeBoxURL","enableEventPropagation","disableAutoPan","mapControlContainer","libraries","ReltioMap","markers","mapKey","defaultZoom","defaultCenter","loadingElement","isSearchEnabled","activeOverlay","overlayOptions","markerClusterer","markerClustererOptions","mapOptions","mapContainerClassName","onMapBoundsChanged","onOverlayUpdated","onMarkerClicked","isLoaded","loadError","useJsApiLoader","googleMapsApiKey","mapMoveEndTimer","setMap","polygon","setPolygon","setDrawingMode","apiIsLoaded","prevMarkers","usePrevious","prevActiveOverlay","prevApiIsLoaded","markersChanged","apiIsLoadedChanged","shouldUseFitMapBoundsForOverlay","MAP_MINIMUM_SCALE_RADIUS","fitMapBoundsForMarkers","useFitMapBounds","allOverlayOptions","DEFAULT_OVERLAY_OPTIONS","googleMapOptions","DEFAULT_GOOGLE_MAP_OPTIONS","handleChangeIsSearchOnMapMove","handleMapMoveStart","handleMapMoveEnd","handleMapIdle","handleOverlayChange","propOverlay","polygonStateOverlay","stateOverlay","isEmpty","typeActions","getPath","getArray","latlng","radius","getRadius","data","handleOverlayComplete","handleClearOverlay","renderMarkers","clusterer","shouldRenderDrawingManager","shouldRenderRightMapControls","shouldRenderCenterMapControls","shouldRenderPolygon","mapTypeId","MapTypeId","ROADMAP","onLoad","zoom","onZoomChanged","onDragStart","onIdle","ControlPosition","TOP_RIGHT","TOP_CENTER","editable","onMouseUp","onDragEnd","onPolygonComplete","onCircleComplete","drawingControl","circleOptions","polygonOptions","onlyValue","textOverflow","select","selectMenu","textField","SelectorWithOnlyOptionAutoSelect","emptyLabel","firstOption","moreOptions","hasOnlyOneOptionToSelect","displayEmpty","DropDownEditor","TextFieldProps","MenuProps","entries","rowSkeleton","DefaultRowCellRenderer","Skeleton","TableSkeleton","tableColumnsData","RowCellRenderer","tableRowsData","column","fromEntries","BasicTable","autosizing","containerClassName","columnsData","rowsData","defaultColumnMinWidth","defaultColumnWidth","headRowHeight","renderRowCell","VerticalDivider","flexShrink","attributesContainer","noCaption","noData","caption","excludeUris","includeUris","attributesCount","pivotingAttributes","useMdmPivotingAttributes","filteredAttrTypes","getFilteredAttrTypes","isShowAttributeList","getAttributesListForReadMode","values","PivotingAttributeContext","BasicView","FacetViewHeader","Box","drawLines","pinnedAttributes","ViewIdContext","userRoles","useMdmUserRoles","pinnedAttributeUris","getPinnedAttributesForUser","PinnedAttributesContext","crosswalks","restProps","mdmEntity","useMdmEntityWithDiff","mdmMode","useMdmMode","EntityContext","isViewMode","defaultHistoryDiff","appearance","roles","tags","fixRefEntity","evolve","refEntity","wrapInArrayIfNeeded","refRelation","prepareHistorySlice","historySlice","useHistoryDiff","setHistoryDiff","useMdmHistorySlice","historyDiff","useMdmHistoryDiff","historyMode","useMdmHistoryMode","aEntity","bEntity","History","computeEntityHistoryDiff","HistoryMode","dueDate","dueDateInput","inputLabel","taskId","isTaskOpen","updateDueDate","updateRequestIsInProgress","readOnly","updateTaskState","WorkflowTasksContext","workflowPath","useMdmWorkflowPath","environment","useMdmWorkflowEnvironmentUrl","tenant","useMdmTenant","setUpdateRequestIsInProgress","canUpdateTask","useWorkflowCheckPermission","checkWorkflowPermission","isOpenTask","newValue","updateDueDateForTask","catch","showWorkflowError","useWorkflowDueDate","DateEditor","date","getTime","slotProps","InputProps","InputLabelProps","priority","priorities","updatePriority","newPriority","updatePriorityForTask","WorkflowPriority","useWorkflowPriority","DropDownSelector","isDisabled","hideSelectedOptions","decorator","lineBlock","withLinePadding","noLine","line","plain","last","rowDivider","first","transparent","light","taskToColor","COLORS","colorIndex","card","withBackground","lineWrapper","commentsInfo","commentsIcon","infoValue","infoBlock","header","flag","mainInfo","controlsBox","controlsInRow","comments","task","actions","assignee","createdBy","createTime","step","processDefinitionDisplayName","objectURIs","processInstanceComments","possibleActions","preferredAction","dcrId","getDCRId","hash","useWorkflowColor","setExpanded","canViewComments","workflowActions","actionRequestIsInProgress","useWorkflowActions","Flag","CollapseButton","CollaborationIcon","TaskActions","isInProgress","AssigneeSelector","WorkflowComments","cx","cy","r","getOperationType","oldValue","DCRTypes","DCROperationTypes","pin","ignored","getOperationLabel","operation","getDataTypeDefinition","attributeValue","allPass","DataTypes","isUrl","getAttrDataTypeDefinition","getValues","newAttrValues","pathOr","name","oldAttrValues","times","getEntityChanges","entityInfo","changes","getAttributesList","getRelationChanges","relationInfo","changeType","getRelationType","flatten","level","propOr","addRelationOperationIfNeeded","dcrAttributesFactory","complement","getNestedAttributeChange","getReferenceAttributeChange","isSpecialAttribute","is","getSimpleAttributeValue","getSimpleAttributeChange","attributeTypeList","getAttributeTypeSubAttributes","getDiffParameters","SPECIAL_ATTRIBUTES_NAMES","EntityAttrTypes","prepareStartOrEndDate","parseValue","isNaN","parseInt","isExistedValue","isExistNewValue","isExistOldValue","prepareRolesOrTags","change","getRoleLabel","diffNewValue","difference","diffOldValue","prepareAttribute","changePath","attributePath","refObjectURI","refAttributeType","generateTempUri","typePath","split","pathArray","holder","currentValue","isNil","createEntityOrRelation","startDate","endDate","defaultProfilePicValue","newObject","mergeAttributesInChange","objectInfo","linkLabel","suggestionsCount","underline","field","fieldName","arrow","chip","textTransform","ArrowRightAlt","Chip","AttributesChangesContext","React","linkContainer","disabledLink","pointerEvents","objectsInfo","useMdmEntityUri","getLinkDescription","isReference","currentEntityUri","objectLabel","objectUri","startObjectUri","endObjectUri","endObjectLabel","startObjectLabel","objectURI","getAttributeDescription","renderLink","isNotExist","isExist","changeLabel","renderValue","attrValue","getAttributeValue","DataTypeValue","dataTypeDefinition","has","getSuggestionsCount","getEntitiesObjects","isEntityUri","getRelationsObjects","isRelationUri","getRelations","objectsWithChanges","createEntityRelationsObjectByEntity","relations","createEntityRelationsObjectByRelation","concatEntityRelationsObjects","acc","mergedRelations","isCreateEntityOperation","dcr","showMoreLink","dcrUri","relationsInfo","mergedEntityChanges","mergedRelationsChanges","getAttributeChanges","attributeName","concatChanges","getters","attributesTree","getter","changesTree","relationsTrees","updateRelation","mergeChanges","changesList","relationshipTitle","itemsToShow","collapsedSuggestionsCount","limit","setIsExpanded","collapsedItems","visibleSuggestionsCount","useCollapsibleList","ifElse","any","getEntityUriForChangeRequest","screen","Provider","getDCRUri","groupedObjects","setGroupedObjects","setDcr","requestEntities","entityUris","getEntitiesByUris","searchOptions","defaultMaxValues","getDataChangeRequest","extractObjectsFromChangeRequest","entityObjectsWithRelations","relationsObjects","relationsObjectsWithEntity","relationsObjectsWithoutEntity","partition","relationsObjectsWithRequestedEntities","relationsObject","showApiError","useChangeRequest","DcrTaskIcon","pmCard","defaultOptions","showTransitiveMatches","showInactiveEntities","useMatchesLoader","rowsPerPage","Number","MAX_SAFE_INTEGER","page","PmTaskIcon","WorkflowTaskCardsFactory","build","processType","PredefinedWorkflowProcessType","DeleteRequestTaskIcon","DefaultTaskIcon","WorkflowTaskCard","popoverPaper","simpleDropDownSelector","inputRoot","footer","cancelButton","AddWorkflowDialog","onClose","comment","setComment","taskType","setTaskType","isOpenSnackbar","setIsOpenSnackbar","definitions","setDefinitions","processDefinitions","manualStart","objectTypes","_entityType","filterDefinitions","useWorkflowDefinitions","processInstance","loading","setLoading","loadTasks","startProcessInstance","useWorkflowProcessInstance","Popover","anchorOrigin","vertical","horizontal","transformOrigin","paper","SimpleDropDownSelector","definition","TextField","hiddenLabel","multiline","Portal","body","Snackbar","autoHideDuration","buttonLabel","AddWorkflowButton","setAnchorEl","canStartProcess","canViewProcessDefinitions","currentTarget","Add","TaskActionButtons","preferredActions","otherActions","action","useWorkflowTasks","processTypes","showClosedTasks","tasks","setTasks","setTotal","isWorkflowEnabled","useMdmIsWorkflowEnabled","entityLastLoadedTime","useMdmProfileLastLoadedTime","canViewTasks","parsedProcessTypes","isArray","requests","getTasksForEntity","isDCRUri","getEntityUriFromDCRUri","includeClosed","all","responses","reject","uniqBy","isRequestedTask","console","warn","payload","mergeLeft","fillColor","strokeWeight","strokeColor","mapTypeControl","streetViewControl","fullscreenControl","InterceptHandlersContext","PageRequestsAbortingContext","SandboxAPIContext","getCurrentPerspectiveId","setEntityUri","showPerspective","validateParams","validationUrl","permissions","permission","urlOrigin","permRegex","RegExp","decodedPerm","replace","startsWith","test","getAuthHeaders","async","headers","servicesPath","accessToken","getAccessToken","Authorization","processRequest","worker","apiPath","user","openSearch","workflowCheckPermission","method","handleRequest","request","response","json","postMessage","JSON","parse","stringify","status","RequestAction","sendRequestFromCustomSandbox","noRequestProcessor","noRetry","sendApiRequest","isExternalUrl","sendWorkflowRequest","workflowRequest","processDefinitionId","searchString","startProcessFromQuery","processFromQuery","changeRequestURI","listener","perspective","searchState","alert","confirm","prompt","defaultText","location","reload","isValidCustomScript","files","platform","CustomScriptPlatform","isURLtoProcess","processApi","regExp","getWorkerURL","getRequestFakeUrl","reltioPath","getResponseFakeUrl","getProcessedTask","isApiAction","newUrl","processInnerHtml","setTooltip","handlersToReset","uiActions","getAttribute","uiTooltip","uiAction","handler","postEventMessage","readFilePromises","file","reader","FileReader","onload","lastModified","onerror","readAsArrayBuffer","getFilesWithArrayBuffer","addEventListener","removeEventListener","childNodes","nodeType","resetHtml","innerText","html","setListenersToReset","setHtml","docBlock","innerHTML","setUpRequestInterceptor","processApiRequest","workerRef","setRequestListeners","next","fakeURL","requestId","nanoid","setUpResponseInterceptor","processApiResponse","setResponseListeners","abort","responseId","img","iframe","a","useHtmlSanitizer","allowedAttributes","allowedTags","sanitizeHtml","sanitizeOptions","allowVulnerableTags","useAPI","listenersToReset","popupListenersToReset","setPopupListenersToReset","setVisible","popup","setPopup","customStyles","setCustomStyles","requestListeners","responseListeners","workerUrl","showSnackbarMessage","SnackbarContext","qxApi","interceptHandlers","useMdmApiPath","useMdmServicesPath","useMdmReltioPath","useMdmUser","typeSearch","useMdmSearchProviderData","popupText","process","CustomAction","sanitizedHtml","elem","getElementById","sanitizedPopup","prev","log","processedTask","requestInterceptor","responseInterceptor","pendingInterceptors","needDelayedRequestForInterceptors","startInterceptorInit","initializeWebWorker","finishInterceptorInit","addInternalRequestInterceptor","addInternalResponseInterceptor","removeInternalRequestInterceptor","removeInternalResponseInterceptor","useCommentsEntitiesMap","useMdmEntityUriWithDataTenant","setEntitiesMap","getEntities","entitiesUris","requestFilters","FilterOptions","requestOptions","activeness","ActivityFilter","getFilteredEntities","getNotFoundEntity","addNotFoundEntities","notFoundEntities","uniqEntitiesUris","objectType","relatedObjectUris","results","getNotFoundUris","prevEntitiesMap","emptyArray","useConfigPermissions","canCreate","checkConfigPermission","ConfigPermissions","canRead","canUpdate","canDelete","isConnectionHasError","areOneHierarchyUris","useExpandInvalidRelations","configId","openRelationEditor","shouldOpenInvalidEditors","listenToActions","useActionsHook","addedConnections","editedConnections","useMdmRelationsDrafts","relationsToAddAndEdit","useMdmAllRelationsToAddAndEdit","preparedConnectionsList","draftConnection","markNew","markEdited","invalidConnections","connections","getInvalidConnections","expandInvalidRelatonsListener","useMdmListener","setShouldOpenInvalidEditors","shouldOpen","listenerCallback","stopListeningActions","useLayoutResetter","onLayoutReset","onResetUndo","SnackbarRenderer","useSnackbar","onDismissClick","showDismiss","dismissTitle","resetLayout","buildSuggestedIds","isValidRequestConfig","entry","nextEntry","useRelationsLoader","sorting","relationActivityFilter","searchByOv","relationsLoaded","dtssPath","useMdmDtssPath","activityFilter","globalFilter","lastLoadedTime","processContent","getUri","isObject","filterRelation","isAvailableRelationTypeUri","filterFn","isAvailableEntityTypeUri","suggested","modeRef","loadRelations","requestConfig","sortBy","order","returnDates","returnObjects","offset","addGlobalFilterToQuery","configs","emptyResponsePromise","cond","isDataTenantEntity","getRelationsForDataTenantEntity","customerTenant","dataTenant","getRelationsForEntity","dataSorted","isRequestSentRef","prevMode","Mode","useRunOnceAfterValueInitialization","cb","isValueInited"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"1550.js","mappings":"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A,KACA,WACA,aACA,UACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,oBACA,mBACA,SACA,KACA,KACA,IACA,aACA,UACA,kBACA,YACA,WACA,UACA,UACA,oBACA,MACA,KACA,KACA,WACA,YACA,oBACA,MACA,WACA,4BACA,OACA,eACA,YACA,SACA,YACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,SACA,OACA,KACA,KACA,KACA,KACA,aACA,+BACA,6BACA,WACA,oBACA,gBACA,UACA,SACA,cACA,iBACA,KACA,cACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,eACA,mBACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,iBACA,oBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,OACA,mBACA,YACA,eACA,MACA,QACA,SACA,MACA,OACA,OACA,aACA,SACA,UACA,WACA,QACA,SACA,cACA,SACA,WACA,oBACA,qBACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,iBACA,SACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,IACA,SACA,OACA,OACA,mBACA,cACA,YACA,qBACA,mBACA,UACA,SACA,SACA,KACA,KACA,QACA,OACA,kBACA,QACA,UACA,mBACA,mBACA,QACA,eACA,cACA,eACA,QACA,QACA,cACA,aACA,eACA,yBACA,0BACA,SACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,QACA,eACA,iBACA,cACA,SACA,UACA,UACA,cACA,kBACA,iBACA,aACA,KACA,YACA,OACA,KACA,KACA,qBACA,sBACA,UACA,eACA,gBACA,eACA,eACA,YACA,gBACA,iBACA,SACA,UACA,aACA,gBACA,gBACA,UACA,aACA,aACA,QACA,SACA,eACA,eACA,IACA,WACA,KACA,KACA,mBACA,IACA,KACA,KACA,mBACA,IACA,aA2FgC,aAAc,cAC1C60B,IAAK,CAAC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","sources":["webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/helpers.ts","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.tsx","webpack://@reltio/remotes/../components/src/icons/Hyperlink.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/ErrorsPanel/Error.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/AttributesErrorsPanel.tsx","webpack://@reltio/remotes/../components/src/components/AttributesErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../components/src/icons/Filter.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/FilterButton/styles.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/FilterButton/FilterButton.js","webpack://@reltio/remotes/../components/src/components/ExpandableSearchInput/styles.ts","webpack://@reltio/remotes/../components/src/components/ExpandableSearchInput/ExpandableSearchInput.tsx","webpack://@reltio/remotes/../components/src/components/HideOnShrink/HideOnShrink.tsx","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/styles.ts","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/HierarchyNodeTitle.tsx","webpack://@reltio/remotes/../components/src/components/HierarchyNodeTitle/hooks/useEntityDetails.ts","webpack://@reltio/remotes/../components/src/components/ImportButton/styles.ts","webpack://@reltio/remotes/../components/src/components/ImportButton/ImportButton.tsx","webpack://@reltio/remotes/../components/src/components/Link/styles.js","webpack://@reltio/remotes/../components/src/components/Link/Link.tsx","webpack://@reltio/remotes/../components/src/components/LoadingSpinner/SpinnerSmall.gif.tsx","webpack://@reltio/remotes/../components/src/components/LoadingSpinner/LoadingSpinner.tsx","webpack://@reltio/remotes/../components/src/components/MultilineMenuItem/styles.ts","webpack://@reltio/remotes/../components/src/components/MultilineMenuItem/MultilineMenuItem.tsx","webpack://@reltio/remotes/../components/src/components/ProfileMatchCard/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileMatchCard/ProfileMatchCard.tsx","webpack://@reltio/remotes/../components/src/components/ProfilesList/helpers.ts","webpack://@reltio/remotes/../components/src/components/ProfilesList/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfilesList/ProfilesList.tsx","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/classnames.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/treeNodeStyle.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/tree-node.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/node-renderer-default.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/tree-placeholder.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/placeholderRendererDefaultStyle.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/placeholder-renderer-default.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/memoized-tree-data-utils.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/dnd-manager.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/react-sortable-tree.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/generic-utils.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/reactSortableTreeStyles.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/index.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/default-handlers.js","webpack://@reltio/remotes/../components/src/components/ReactSortableTree/utils/tree-data-utils.js","webpack://@reltio/remotes/../components/src/components/RelationEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/RelationEditor/RelationEditor.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/MapControlContainer/MapControlContrainer.tsx","webpack://@reltio/remotes/../components/src/icons/Radius.tsx","webpack://@reltio/remotes/../components/src/icons/Draw.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopRightMapControls/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopRightMapControls/TopRightMapControls.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopCenterMapControls/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/MapControls/TopCenterMapControls/TopCenterMapControls.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/helpers/index.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/icons/marker.inline.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/EntityMarker.tsx","webpack://@reltio/remotes/../components/src/components/ReltioMap/EntityMarker/icons/marker-hover.inline.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/hooks/useFitMapBounds.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioMap/index.tsx","webpack://@reltio/remotes/../components/src/components/SelectorWithOnlyOptionAutoSelect/styles.js","webpack://@reltio/remotes/../components/src/components/SelectorWithOnlyOptionAutoSelect/SelectorWithOnlyOptionAutoSelect.js","webpack://@reltio/remotes/../components/src/components/TableSkeleton/styles.ts","webpack://@reltio/remotes/../components/src/components/TableSkeleton/TableSkeleton.tsx","webpack://@reltio/remotes/../components/src/components/VerticalDivider/VerticalDivider.js","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/history/hooks/useHistoryDiff.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/DueDateField/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/DueDateField/DueDateField.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowDueDate.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowPriority.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/PrioritySelector/PrioritySelector.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/LineDecorator/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/LineDecorator/LineDecorator.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowColor.ts","webpack://@reltio/remotes/../components/src/icons/CollaborationIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/GenericWorkflowTaskCard/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/GenericWorkflowTaskCard/GenericWorkflowTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/DcrTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/helpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/attributesHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/mergeHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ShowMoreLink/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ShowMoreLink/ShowMoreLink.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ChangeView/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/ChangeView/ChangeView.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/contexts/AttributesChangesContext.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DiffRenderer/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DiffRenderer/DiffRenderer.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DCRChangesList/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/components/DCRChangesList/DCRChangesList.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/helpers/contextHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/helpers/dcrHelpers.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/AttributesChanges.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/AttributesChanges/hooks/useCollapsibleList.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useChangeRequest.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/DataChangeRequestTaskCard/DataChangeRequestTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/PmTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/PotentialMatchTaskCard/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/cards/PotentialMatchTaskCard/PotentialMatchTaskCard.tsx","webpack://@reltio/remotes/../components/src/icons/DefaultTaskIcon.tsx","webpack://@reltio/remotes/../components/src/icons/DeleteRequestTaskIcon.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/WorkflowTaskCardsFactory.tsx","webpack://@reltio/remotes/../components/src/components/workflow/cards/WorkflowTaskCard.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowDialog/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowDialog/AddWorkflowDialog.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowDefinitions.ts","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowProcessInstance.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowButton/styles.ts","webpack://@reltio/remotes/../components/src/components/workflow/components/AddWorkflowButton/AddWorkflowButton.tsx","webpack://@reltio/remotes/../components/src/components/workflow/components/TaskActionButtons/TaskActionButtons.tsx","webpack://@reltio/remotes/../components/src/components/workflow/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../components/src/constants/map.ts","webpack://@reltio/remotes/../components/src/contexts/EntityMarkerContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/InterceptHandlersContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/PageRequestsAbortingContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/SandboxAPIContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/API.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/helpers.ts","webpack://@reltio/remotes/../components/src/hooks/helpers/sanitizerOptions.ts","webpack://@reltio/remotes/../components/src/hooks/useHtmlSanitizer.ts","webpack://@reltio/remotes/../components/src/hooks/useAPI/useAPI.ts","webpack://@reltio/remotes/../components/src/hooks/useCommentsEntitiesMap.ts","webpack://@reltio/remotes/../components/src/hooks/useConfigPermissions.ts","webpack://@reltio/remotes/../components/src/hooks/useExpandInvalidRelations.ts","webpack://@reltio/remotes/../components/src/hooks/useLayoutResetter.ts","webpack://@reltio/remotes/../components/src/hooks/useRelationsLoader.ts","webpack://@reltio/remotes/../components/src/hooks/useRunOnceAfterValueInitialization.js"],"sourcesContent":["import {either, equals, identity, omit, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n\nexport const getDisplayedAttributeTypesPath = ({path: errorPath}: AttributeError) => {\n return errorPath\n ?.filter(({type}) => type === AttributeValuePathItemType.attributeValue)\n .map(either(path(['valueType', 'label']), path(['valueType', 'name'])))\n .filter(identity)\n .join(' > ');\n};\n","import {makeStyles} from '@mui/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypesPath: {\n color: theme.palette.text.secondary\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Typography from '@mui/material/Typography';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","import React from 'react';\n\nconst SvgHyperlink: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\"\n fill=\"#000\"\n fillOpacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgHyperlink;\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../../../icons/Hyperlink';\nimport {SmallIconButtonWithTooltip} from '../../SmallIconButton';\nimport {ScrollToElementContext, useMdmIsEditableMode, useMdmMetadata} from '../../../contexts';\nimport {getDisplayedAttributeTypesPath, getDisplayedErrorMessage, getDisplayedErrorPath} from './helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useMdmMetadata();\n const isEditableMode: boolean = useMdmIsEditableMode();\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const displayedAttributeTypesPath = getDisplayedAttributeTypesPath(error);\n const {highlightError} = useContext(ScrollToElementContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n {displayedAttributeTypesPath && (\n <span className={styles.attributeTypesPath}>{displayedAttributeTypesPath}</span>\n )}\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport ErrorIcon from '@mui/icons-material/Warning';\nimport WarningIcon from '@mui/icons-material/Error';\nimport {AttributeError, splitErrorsBySeverity} from '@reltio/mdm-sdk';\nimport {useCachedErrors} from './useCachedErrors';\nimport {ErrorsPanel} from './ErrorsPanel/ErrorsPanel';\nimport {Error} from './ErrorsPanel/Error';\n\nimport useStyles from './styles';\n\ntype Props = {\n attributesWithErrors?: AttributeError[];\n};\n\nexport const AttributesErrorsPanel = ({attributesWithErrors = []}: Props) => {\n const styles = useStyles();\n\n const cachedErrors = useCachedErrors(attributesWithErrors);\n const [errors, warnings] = useMemo(() => splitErrorsBySeverity(cachedErrors), [cachedErrors]);\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './ErrorsPanel/helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React from 'react';\n\nconst SvgFilter: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M18 2V0H0v2l7 8v8l4-2v-6z\" fill=\"currentColor\" fillRule=\"nonzero\" stroke=\"none\" strokeWidth={1} />\n </svg>\n );\n};\n\nexport default SvgFilter;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'filterIcon--enabled': {\n color: theme.palette.primary.main\n },\n closeIcon: {\n position: 'absolute',\n right: '3px',\n bottom: '3px',\n transform: 'scale(0.5)'\n },\n button: {\n padding: '11px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Tooltip from '@mui/material/Tooltip';\nimport FilterIcon from '../../../../icons/Filter';\nimport {useStyles} from './styles';\n\nconst FilterButton = ({enabled, onClick}) => {\n const styles = useStyles();\n\n return (\n <Tooltip title={enabled ? i18n.text('Clear all filters') : i18n.text('Filter')}>\n <IconButton onClick={onClick} classes={{root: styles.button}} size=\"large\">\n {enabled ? (\n <>\n <FilterIcon className={styles['filterIcon--enabled']} />\n <CloseIcon color=\"primary\" className={styles.closeIcon} />\n </>\n ) : (\n <FilterIcon />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n\nFilterButton.propTypes = {\n enabled: PropTypes.bool,\n onClick: PropTypes.func\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n searchButton: {\n padding: '8px'\n },\n input: {\n maxWidth: '350px',\n flex: '1 1',\n minWidth: '160px',\n fontSize: '14px',\n background: 'rgba(0,0,0,0.03) 2px',\n padding: '4px 0',\n marginRight: '4px'\n },\n startAdornment: {\n color: 'rgba(0,0,0,0.54)',\n paddingLeft: '8px'\n },\n endAdornment: {\n marginRight: '4px'\n }\n});\n","import React, {useState, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, F, pipe, propEq, T, tap, trim, when} from 'ramda';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\nimport {SmallIconButton} from '../SmallIconButton';\nimport {getValue} from '../../core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n query: string;\n onChange: (value: string) => void;\n};\n\nexport const ExpandableSearchInput = ({query, onChange}: Props) => {\n const [value, setValue] = useState(query);\n const [isOpen, setIsOpen] = useState(!!query);\n useEffect(() => {\n setValue(query);\n }, [query]);\n const styles = useStyles();\n\n return isOpen ? (\n <Input\n className={styles.input}\n value={value}\n autoFocus={true}\n placeholder={i18n.text('Search')}\n disableUnderline={true}\n onChange={pipe(getValue, setValue)}\n startAdornment={\n <InputAdornment position=\"start\">\n <SearchIcon className={styles.startAdornment} />\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\">\n <SmallIconButton\n size=\"S\"\n icon={CloseIcon}\n className={styles.endAdornment}\n onClick={pipe(F, setIsOpen, always(''), tap(onChange), setValue)}\n />\n </InputAdornment>\n }\n onKeyPress={when(propEq('key', 'Enter'), pipe(always(value), trim, onChange))}\n />\n ) : (\n <IconButton className={styles.searchButton} onClick={pipe(T, setIsOpen)} size=\"large\">\n <SearchIcon />\n </IconButton>\n );\n};\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\ntype Props = {\n children: React.ReactNode;\n widthToHide: number;\n};\n\nconst HideOnShrink = ({widthToHide, children}: Props) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nexport default HideOnShrink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n link: {\n cursor: 'pointer',\n color: theme.palette.primary.main,\n lineHeight: '15px',\n wordBreak: 'break-word'\n },\n selected: {\n fontWeight: 'bold'\n },\n popper: {\n maxWidth: '345px',\n minWidth: '200px',\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)',\n backgroundColor: 'white',\n borderRadius: '2px'\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport Link from '../Link/Link';\nimport Popper from '../Popper/Popper';\nimport ProfileCard from '../ProfileCard/ProfileCard';\nimport {UrlGeneratorsContext, useMdmAction, useMdmUiPath} from '../../contexts';\nimport {useEntityDetails} from './hooks/useEntityDetails';\nimport {useStyles} from './styles';\n\ntype NodeTitleProps = {\n title: string;\n entityUri: string;\n viewId: string;\n isSelected?: boolean;\n anchorEl?: HTMLElement;\n withEntityDetails?: boolean;\n};\n\nexport const HierarchyNodeTitle = ({\n title,\n isSelected,\n entityUri,\n viewId,\n anchorEl,\n withEntityDetails = true\n}: NodeTitleProps) => {\n const styles = useStyles();\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n\n const openEntity = useMdmAction('openEntity');\n const uiPath = useMdmUiPath();\n\n const {isLoading, entityDetails, showEntityDetails, hideEntityDetails} = useEntityDetails(entityUri);\n\n const link = generateEntityUrl({uiPath, uri: entityUri});\n const showPopper = Boolean(anchorEl) && (Boolean(entityDetails) || isLoading);\n\n const handleClick = useCallback(() => {\n openEntity({uri: entityUri, viewId});\n }, [openEntity, entityUri, viewId]);\n\n return (\n <>\n <span\n data-reltio-id=\"reltio-hierarchy-node-title\"\n className={classnames(styles.link, {[styles.selected]: isSelected})}\n onMouseEnter={withEntityDetails ? showEntityDetails : undefined}\n onMouseLeave={withEntityDetails ? hideEntityDetails : undefined}\n >\n <Link to={link} onClick={handleClick}>\n {title}\n </Link>\n </span>\n <Popper anchorEl={anchorEl} className={styles.popper} open={showPopper} modal={false} placement=\"top-start\">\n <ProfileCard entity={entityDetails} variant={isLoading ? 'loading' : 'normal'} />\n </Popper>\n </>\n );\n};\n","import {useState, useCallback, useRef, useEffect} from 'react';\nimport {getEntity} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks/useSafePromise';\n\nexport const useEntityDetails = (entityUri: string) => {\n const [entityDetails, setEntityDetails] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const timerId = useRef(null);\n const safePromise = useSafePromise();\n\n const cancelRequest = useCallback(() => safePromise(Promise.resolve()), [safePromise]);\n\n const showEntityDetails = useCallback(() => {\n timerId.current = setTimeout(() => {\n setIsLoading(true);\n safePromise(getEntity(entityUri))\n .then(setEntityDetails)\n .finally(() => setIsLoading(false));\n }, 1000);\n }, [entityUri, safePromise]);\n\n const hideEntityDetails = useCallback(() => {\n cancelRequest();\n clearTimeout(timerId.current);\n setIsLoading(false);\n setEntityDetails(null);\n }, [cancelRequest]);\n\n useEffect(() => {\n return () => clearTimeout(timerId.current);\n }, []);\n\n return {\n isLoading,\n entityDetails,\n showEntityDetails,\n hideEntityDetails\n };\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px'\n },\n check: {\n color: '#8CC152'\n }\n});\n","import React from 'react';\n\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\nimport DoneIcon from '@mui/icons-material/Done';\nimport {noop} from '../../core';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nexport enum ImportModes {\n INIT = 1,\n PROGRESS = 2,\n SUCCESS = 3,\n DONE = 4\n}\n\ntype Props = {\n tooltip?: string;\n onClick?: () => void;\n classes?: Partial<Record<'root' | 'spinner' | 'button' | 'check', string>>;\n mode?: ImportModes;\n};\n\nconst ImportButton = ({classes = {}, tooltip = '', onClick = noop, mode = ImportModes.INIT}: Props) => {\n const styles = useStyles();\n\n const renderCurrentMode = () => {\n switch (mode) {\n case ImportModes.INIT: {\n return (\n <SmallIconButtonWithTooltip\n className={classes.button}\n size={'M'}\n tooltipTitle={tooltip}\n icon={CloudDownloadIcon}\n onClick={onClick}\n />\n );\n }\n case ImportModes.PROGRESS:\n return <CircularProgress className={classes.spinner} size={24} />;\n case ImportModes.SUCCESS:\n return <DoneIcon className={classnames(styles.check, classes.check)} />;\n default:\n return null;\n }\n };\n return <div className={classnames(styles.root, classes.root)}>{renderCurrentMode()}</div>;\n};\n\nexport default ImportButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n link: {\n textDecoration: 'inherit',\n color: 'inherit',\n '&:visited': {\n textDecoration: 'inherit',\n color: 'inherit'\n }\n }\n});\n","import React, {ReactNode} from 'react';\nimport {useStyles} from './styles';\n\ntype LinkProps = {\n to?: string;\n children?: ReactNode;\n onClick?: () => void;\n};\nconst Link = ({to, children, onClick}: LinkProps) => {\n const styles = useStyles();\n return (\n <a\n href={to}\n onClick={(e) => {\n if (onClick) {\n onClick();\n e.stopPropagation();\n e.preventDefault();\n }\n }}\n className={styles.link}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","export const SpinnerSmall =\n 'R0lGODlhFQALAKIAAP///8Hf75vL5Van0wB4v////wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAFACwAAAIAFQAHAAADLFi6zPSQFEGpGhgXkrEUQShc1bB1wxcGYzGUZ6eKJGVy8lS1aJxJjaAiAkkAACH5BAkKAAUALAAAAwAUAAUAAAMiWLFbJRC6QakCODjBxIzDlW3dB4UBBmhPWQygwrCR9FZDAgAh+QQJCgAFACwIAAMADAAFAAADFBiqVfIvgBmaWHeC6rCklrdw0JMAACH5BAkKAAUALAAAAgAUAAcAAAMkSLpU/vCRQWmLLmg967hYAIxBV4GRSJoWlo1A6X1usXGMUkcJACH5BAkKAAUALAAAAgAOAAcAAAMdWLpF/qSMORudcYg97M2b0BHXAHIelV0pxizQkwAAOw==';\n","import React from 'react';\nimport {gif2Url} from '@reltio/mdm-sdk';\nimport {SpinnerSmall} from './SpinnerSmall.gif';\n\ntype Props = {\n className?: string;\n};\n\nexport const LoadingSpinner = ({className}: Props) => {\n return <img className={className} alt=\"loading\" src={gif2Url(SpinnerSmall)} />;\n};\n\nexport default LoadingSpinner;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n menuItem: {\n whiteSpace: 'inherit',\n width: 200,\n padding: '9px 12px 7px'\n },\n itemText: {\n margin: 0\n },\n textPrimary: {\n fontSize: 14,\n lineHeight: '16px',\n fontWeight: 500\n },\n textSecondary: {\n fontSize: 10,\n lineHeight: '12px'\n }\n}));\n","import React, {forwardRef} from 'react';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport {noop} from '../../core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n item: {\n primary: string;\n secondary: string;\n onClick: () => void;\n };\n onMenuClose?: () => void;\n};\n\nconst MultilineMenuItem = forwardRef(({item, onMenuClose = noop}: Props, ref: React.Ref<HTMLLIElement>) => {\n const styles = useStyles();\n const {primary, secondary, onClick} = item;\n\n const handleClick = () => {\n onMenuClose();\n onClick();\n };\n\n return (\n <MenuItem className={styles.menuItem} ref={ref} onClick={handleClick}>\n <ListItemText\n primary={primary}\n secondary={secondary}\n className={styles.itemText}\n classes={{\n primary: styles.textPrimary,\n secondary: styles.textSecondary\n }}\n />\n </MenuItem>\n );\n});\n\nMultilineMenuItem.displayName = 'MultilineMenuItem';\n\nexport default MultilineMenuItem;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n paddingRight: '12px',\n paddingTop: '8px',\n paddingBottom: '8px',\n '& + &': {\n borderTop: '1px solid rgba(0,0,0, 0.12)'\n }\n },\n profileCardWrapper: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: '4px'\n },\n profileCardContainer: {\n flexGrow: 1,\n paddingBottom: '8px',\n paddingTop: '8px'\n },\n rulesContainer: {\n paddingLeft: '52px',\n marginBottom: '8px',\n display: 'flex',\n alignItems: 'center'\n },\n dividerWrapper: {\n marginLeft: '12px',\n alignSelf: 'stretch'\n },\n divider: {\n borderColor: 'rgba(0,0,0,0.12)'\n },\n relevanceBadge: {\n marginLeft: '12px'\n }\n});\n","import React from 'react';\nimport {checkMatchRuleSummaryRelevance, Entity, Match, Metadata} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport Divider from '@mui/material/Divider';\n\nimport ProfileCard from '../ProfileCard/ProfileCard';\nimport MatchRulesBlock from '../MatchRulesBlock/MatchRulesBlock';\nimport {RelevanceScoreBadge} from '../RelevanceScoreBadge/RelevanceScoreBadge';\nimport {useStyles} from './styles';\n\ntype Props = {\n entitiesMap: {\n [key: string]: Pick<Entity, 'uri' | 'type' | 'label'>;\n };\n entity: Entity;\n match: Match;\n metadata: Metadata;\n children?: React.ReactNode;\n className?: string;\n};\n\nexport const ProfileMatchCard = ({children, entitiesMap, entity, match, metadata, className}: Props) => {\n const styles = useStyles();\n const showRelevanceBadge = match.matchRuleSummaries?.some(checkMatchRuleSummaryRelevance);\n return (\n <div className={classnames(styles.root, className)}>\n <div className={styles.profileCardWrapper}>\n <ProfileCard entity={match.object} classes={{container: styles.profileCardContainer}} />\n {children}\n </div>\n <div className={styles.rulesContainer}>\n {match.matchRules && (\n <MatchRulesBlock match={match} metadata={metadata} entitiesMap={entitiesMap} entity={entity} />\n )}\n {showRelevanceBadge && (\n <>\n <div className={styles.dividerWrapper}>\n <Divider orientation=\"vertical\" className={styles.divider} />\n </div>\n <RelevanceScoreBadge\n className={styles.relevanceBadge}\n matchRuleSummaries={match.matchRuleSummaries}\n />\n </>\n )}\n </div>\n </div>\n );\n};\n","export const scroll = (element) => element && element.scrollIntoView({block: 'end', behavior: 'smooth'});\n\nexport const clearScrollTimer = (scrollTimer) => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n};\n\nexport const isScrolledIntoView = (element, scrollableParent) => {\n if (element && scrollableParent) {\n const elemTop = element.offsetTop;\n const elemBottom = element.offsetTop + element.clientHeight;\n const {clientHeight, scrollTop} = scrollableParent;\n return elemTop >= 0 && elemBottom > scrollTop && elemBottom < scrollTop + clientHeight;\n }\n};\n","import {alpha} from '@mui/material/styles';\nimport {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => {\n return {\n '@keyframes animate': {\n from: {background: 'transparent'},\n '66%': {background: '#f2e68e'},\n '100%': {background: 'transparent'}\n },\n\n highlighted: {\n animationName: '$animate',\n animationDuration: '3s',\n animationIterationCount: 1\n },\n\n item: {\n display: 'flex',\n minHeight: '40px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n flexDirection: 'row',\n\n '&:after': {\n // IE flex & min-height workaround\n content: '',\n minHeight: 'inherit',\n fontSize: 0\n },\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n }\n },\n\n clickable: {\n cursor: 'pointer'\n },\n\n selected: {\n background: alpha(theme.palette.primary.main, 0.12),\n '&:hover': {\n background: alpha(theme.palette.primary.main, 0.24)\n }\n },\n\n inactive: {\n background: theme.inactiveBackground,\n\n '&:hover': {\n background: theme.inactiveHoverBackground\n },\n\n '&$selected': {\n background: theme.inactiveSelectedBackground,\n\n '&:hover': {\n background: theme.inactiveSelectedHoverBackground\n }\n }\n },\n\n justImported: {\n backgroundColor: '#FFFBEB !important'\n },\n\n avatar: {\n marginLeft: '20px'\n },\n\n image: {\n height: '32px',\n width: '32px',\n marginTop: '8px',\n marginBottom: '7px'\n },\n\n info: {\n marginLeft: '20px',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n fontSize: '13px',\n width: '100%',\n overflow: 'hidden',\n overflowWrap: 'break-word',\n wordWrap: 'break-word' // for IE\n },\n\n label: {\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 500,\n color: theme.palette.primary.main,\n marginRight: '17px',\n textDecoration: 'none'\n },\n\n secondaryLabel: {\n marginRight: '12px'\n },\n\n businessCard: {\n color: 'rgba(0, 0, 0, 0.54)'\n },\n\n secondRow: {\n display: 'flex',\n marginTop: '2px',\n alignItems: 'center',\n color: 'rgba(0, 0, 0, 0.54)',\n fontSize: '12px'\n }\n };\n});\n","import React, {useRef} from 'react';\nimport classnames from 'classnames';\nimport {prop} from 'ramda';\nimport {\n Entity,\n getBusinessCardAttributesText,\n getEntityId,\n getEntityUriForLink,\n getLabel,\n isActiveObject\n} from '@reltio/mdm-sdk';\nimport EntityTypeBadge from '../EntityTypeBadge/EntityTypeBadge';\nimport EntityUriLink from '../EntityUriLink/EntityUriLink';\nimport EntityAvatar from '../EntityAvatar/EntityAvatar';\nimport {ImportModes} from '../ImportButton/ImportButton';\nimport {clearScrollTimer, isScrolledIntoView, scroll} from './helpers';\nimport {useDidUpdateEffect} from '../../hooks';\nimport {useMdmMetadata} from '../../contexts';\nimport {useStyles} from './styles';\n\nconst SECOND_SCROLL_PAUSE = 1000;\n\ntype Props = {\n entities: Entity[];\n entityToHighlight?: string;\n selectedEntityUri?: string;\n onEntityClick?: (entityUri: string) => void;\n onEntityHover?: (entityUri: string) => void;\n entitiesImportStatus?: {entityUri: string};\n entityButtonsRenderer?: (entity: Entity) => void;\n};\n\nconst ProfilesList = ({\n entities,\n entityToHighlight,\n selectedEntityUri,\n onEntityClick,\n onEntityHover,\n entitiesImportStatus,\n entityButtonsRenderer\n}: Props) => {\n const styles = useStyles();\n\n const list = useRef(null);\n const scrollTimer = useRef(null);\n\n const metadata = useMdmMetadata();\n\n useDidUpdateEffect(() => {\n if (entityToHighlight) {\n const element = list.current?.querySelectorAll(`[data-entity-uri='${entityToHighlight}']`);\n clearScrollTimer(scrollTimer.current);\n if (element?.length > 0) {\n const scrollableParent = list.current?.parentElement;\n if (!isScrolledIntoView(element[0], scrollableParent)) {\n scroll(element[0]);\n scrollTimer.current = setTimeout(() => {\n if (!isScrolledIntoView(element[0], scrollableParent)) {\n scroll(element[0]);\n }\n }, SECOND_SCROLL_PAUSE);\n }\n }\n }\n\n return () => {\n clearScrollTimer(scrollTimer.current);\n };\n }, [entityToHighlight]);\n\n return (\n <div ref={list}>\n {(entities || []).map((entity) => {\n const label = getLabel(entity.label);\n const secondaryLabel = entity.secondaryLabel;\n const businessCardText = getBusinessCardAttributesText(metadata, entity);\n const isActive = isActiveObject(entity);\n const entityUri = entity.uri;\n const entityUriForLink = getEntityUriForLink(entity);\n\n const importStatus = prop(entityUri, entitiesImportStatus);\n\n return (\n <div\n key={entityUri}\n className={classnames(styles.item, {\n [styles.clickable]: !!onEntityClick,\n [styles.selected]: entityUri === selectedEntityUri,\n [styles.highlighted]: entityUri === entityToHighlight,\n [styles.inactive]: !isActive,\n [styles.justImported]: importStatus === ImportModes.SUCCESS\n })}\n onClick={onEntityClick ? () => onEntityClick(entityUri) : undefined}\n onMouseEnter={onEntityHover ? () => onEntityHover(entityUri) : undefined}\n onMouseLeave={onEntityHover ? () => onEntityHover(null) : undefined}\n data-entity-uri={entityUri}\n >\n <EntityAvatar entity={entity} avatarClassName={styles.avatar} imageClassName={styles.image} />\n <div className={styles.info}>\n <div>\n <EntityUriLink value={entityUriForLink} className={styles.label}>\n {label}\n </EntityUriLink>\n {secondaryLabel && <span className={styles.secondaryLabel}>{secondaryLabel} </span>}\n {businessCardText && <span className={styles.businessCard}>{businessCardText}</span>}\n </div>\n <div className={styles.secondRow}>\n <EntityTypeBadge entity={entity} />\n <div>{getEntityId(entity)}</div>\n </div>\n </div>\n {entityButtonsRenderer && entityButtonsRenderer(entity)}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default ProfilesList;\n","// very simple className utility for creating a classname string...\n// Falsy arguments are ignored:\n//\n// const active = true\n// const className = classnames(\n// \"class1\",\n// !active && \"class2\",\n// active && \"class3\"\n// ); // returns -> class1 class3\";\n//\nexport default function classnames(...classes) {\n // Use Boolean constructor as a filter callback\n // Allows for loose type truthy/falsey checks\n // Boolean(\"\") === false;\n // Boolean(false) === false;\n // Boolean(undefined) === false;\n // Boolean(null) === false;\n // Boolean(0) === false;\n // Boolean(\"classname\") === true;\n return classes.filter(Boolean).join(' ');\n}\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n '@global .rst__node': {\n minWidth: '100%',\n whiteSpace: 'nowrap',\n position: 'relative',\n textAlign: 'left'\n },\n\n '@global .rst__node.rst__rtl': {\n textAlign: 'right'\n },\n\n '@global .rst__nodeContent': {\n position: 'absolute',\n top: 0,\n bottom: 0\n },\n\n /* ==========================================================================\n Scaffold\n \n Line-overlaid blocks used for showing the tree structure\n ========================================================================== */\n '@global .rst__lineBlock, .rst__absoluteLineBlock': {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n\n '@global .rst__absoluteLineBlock': {\n position: 'absolute',\n top: 0\n },\n\n '@global .rst__lineHalfHorizontalRight::before, .rst__lineFullVertical::after, .rst__lineHalfVerticalTop::after, .rst__lineHalfVerticalBottom::after':\n {\n position: 'absolute',\n content: '',\n backgroundColor: 'black'\n },\n\n /**\n * +-----+\n * | |\n * | +--+\n * | |\n * +-----+\n */\n '@global .rst__lineHalfHorizontalRight::before': {\n height: '1px',\n top: '50%',\n right: 0,\n width: '50%'\n },\n\n '@global .rst__rtl.rst__lineHalfHorizontalRight::before': {\n left: 0,\n right: 'initial'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__lineFullVertical::after, .rst__lineHalfVerticalTop::after, .rst__lineHalfVerticalBottom::after': {\n width: '1px',\n left: '50%',\n top: 0,\n height: '100%'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__rtl.rst__lineFullVertical::after, .rst__rtl.rst__lineHalfVerticalTop::after, .rst__rtl.rst__lineHalfVerticalBottom::after':\n {\n right: '50%',\n left: 'initial'\n },\n\n /**\n * +-----+\n * | | |\n * | + |\n * | |\n * +-----+\n */\n '@global .rst__lineHalfVerticalTop::after': {\n height: '50%'\n },\n\n /**\n * +-----+\n * | |\n * | + |\n * | | |\n * +-----+\n */\n '@global .rst__lineHalfVerticalBottom::after': {\n top: 'auto',\n bottom: 0,\n height: '50%'\n },\n\n /* Highlight line for pointing to dragged row destination\n ========================================================================== */\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n '@global .rst__highlightLineVertical': {\n zIndex: 3\n },\n '@global .rst__highlightLineVertical::before': {\n position: 'absolute',\n content: '',\n backgroundColor: '#36c2f6',\n width: '8px',\n marginLeft: '-4px',\n left: '50%',\n top: 0,\n height: '100%'\n },\n\n '@global .rst__rtl.rst__highlightLineVertical::before': {\n marginLeft: 'initial',\n marginRight: '-4px',\n left: 'initial',\n right: '50%'\n },\n\n '@keyframes arrow-pulse': {\n '0%': {\n transform: 'translate(0, 0)',\n opacity: 0\n },\n '30%': {\n transform: 'translate(0, 300%)',\n opacity: 1\n },\n '70%': {\n transform: 'translate(0, 700%)',\n opacity: 1\n },\n '100%': {\n transform: 'translate(0, 1000%)',\n opacity: 0\n }\n },\n '@global .rst__highlightLineVertical::after': {\n content: '',\n position: 'absolute',\n height: 0,\n marginLeft: '-4px',\n left: '50%',\n top: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid white',\n animation: 'arrow-pulse 1s infinite linear both'\n },\n\n '@global .rst__rtl.rst__highlightLineVertical::after': {\n marginLeft: 'initial',\n marginRight: '-4px',\n right: '50%',\n left: 'initial'\n },\n\n /**\n * +-----+\n * | |\n * | +--+\n * | | |\n * +--+--+\n */\n '@global .rst__highlightTopLeftCorner::before': {\n zIndex: 3,\n content: '',\n position: 'absolute',\n borderTop: 'solid 8px #36c2f6',\n borderLeft: 'solid 8px #36c2f6',\n boxSizing: 'border-box',\n height: 'calc(50% + 4px)',\n top: '50%',\n marginTop: '-4px',\n right: 0,\n width: 'calc(50% + 4px)'\n },\n\n '@global .rst__rtl.rst__highlightTopLeftCorner::before': {\n borderRight: 'solid 8px #36c2f6',\n borderLeft: 'none',\n left: 0,\n right: 'initial'\n },\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | +->|\n * +-----+\n */\n '@global .rst__highlightBottomLeftCorner': {\n zIndex: 3\n },\n '@global .rst__highlightBottomLeftCorner::before': {\n content: '',\n position: 'absolute',\n borderBottom: 'solid 8px #36c2f6',\n borderLeft: 'solid 8px #36c2f6',\n boxSizing: 'border-box',\n height: 'calc(100% + 4px)',\n top: 0,\n right: '12px',\n width: 'calc(50% - 8px)'\n },\n\n '@global .rst__rtl.rst__highlightBottomLeftCorner::before': {\n borderRight: 'solid 8px #36c2f6',\n borderLeft: 'none',\n left: '12px',\n right: 'initial'\n },\n\n '@global .rst__highlightBottomLeftCorner::after': {\n content: '',\n position: 'absolute',\n height: 0,\n right: 0,\n top: '100%',\n marginTop: '-12px',\n borderTop: '12px solid transparent',\n borderBottom: '12px solid transparent',\n borderLeft: '12px solid #36c2f6'\n },\n\n '@global .rst__rtl.rst__highlightBottomLeftCorner::after': {\n left: 0,\n right: 'initial',\n borderRight: '12px solid #36c2f6',\n borderLeft: 'none'\n }\n}));\n","import React, {Children, cloneElement} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from './utils/classnames';\nimport {useStyles} from './treeNodeStyle';\n\nconst TreeNode = ({\n children,\n listIndex,\n swapFrom,\n swapLength,\n swapDepth,\n scaffoldBlockPxWidth,\n lowerSiblingCounts,\n connectDropTarget,\n isOver,\n draggedNode,\n canDrop,\n treeIndex,\n /* eslint-disable */\n treeId, // Delete from otherProps\n getPrevRow, // Delete from otherProps\n node, // Delete from otherProps\n path, // Delete from otherProps\n /* eslint-enable */\n rowDirection,\n ...otherProps\n}) => {\n useStyles();\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n let lineClass = '';\n if (lowerSiblingCount > 0) {\n // At this level in the tree, the nodes had sibling nodes further down\n\n if (listIndex === 0) {\n // Top-left corner of the tree\n // +-----+\n // | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineHalfVerticalBottom';\n } else if (i === scaffoldBlockCount - 1) {\n // Last scaffold block in the row, right before the row content\n // +--+--+\n // | | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineFullVertical';\n } else {\n // Simply connecting the line extending down to the next sibling on this level\n // +--+--+\n // | | |\n // | | |\n // | | |\n // +--+--+\n lineClass = 'rst__lineFullVertical';\n }\n } else if (listIndex === 0) {\n // Top-left corner of the tree, but has no siblings\n // +-----+\n // | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfHorizontalRight';\n } else if (i === scaffoldBlockCount - 1) {\n // The last or only node in this level of the tree\n // +--+--+\n // | | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfVerticalTop rst__lineHalfHorizontalRight';\n }\n\n scaffold.push(\n <div\n key={`pre_${1 + i}`}\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineBlock', lineClass, rowDirectionClass)}\n />\n );\n\n if (treeIndex !== listIndex && i === swapDepth) {\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = '';\n\n if (listIndex === swapFrom + swapLength - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner';\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner';\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical';\n }\n\n let style;\n if (rowDirection === 'rtl') {\n style = {\n width: scaffoldBlockPxWidth,\n right: scaffoldBlockPxWidth * i\n };\n } else {\n // Default ltr\n style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i\n };\n }\n\n scaffold.push(\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n style={style}\n className={classnames('rst__absoluteLineBlock', highlightLineClass, rowDirectionClass)}\n />\n );\n }\n });\n\n let style;\n if (rowDirection === 'rtl') {\n style = {right: scaffoldBlockPxWidth * scaffoldBlockCount};\n } else {\n // Default ltr\n style = {left: scaffoldBlockPxWidth * scaffoldBlockCount};\n }\n\n return connectDropTarget(\n <div {...otherProps} className={classnames('rst__node', rowDirectionClass)}>\n {scaffold}\n\n <div className=\"rst__nodeContent\" style={style}>\n {Children.map(children, (child) =>\n cloneElement(child, {\n isOver,\n canDrop,\n draggedNode\n })\n )}\n </div>\n </div>\n );\n};\n\nTreeNode.defaultProps = {\n swapFrom: null,\n swapDepth: null,\n swapLength: null,\n canDrop: false,\n draggedNode: null,\n rowDirection: 'ltr'\n};\n\nTreeNode.propTypes = {\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n swapFrom: PropTypes.number,\n swapDepth: PropTypes.number,\n swapLength: PropTypes.number,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n lowerSiblingCounts: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n listIndex: PropTypes.number.isRequired,\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n\n // used in dndManager\n getPrevRow: PropTypes.func.isRequired,\n node: PropTypes.shape({}).isRequired,\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default TreeNode;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {isDescendant} from './utils/tree-data-utils';\nimport classnames from './utils/classnames';\n//import {useStyles} from './nodeRendererDefaultStyle';\n\nconst NodeRendererDefault = ({\n scaffoldBlockPxWidth,\n toggleChildrenVisibility,\n connectDragPreview,\n connectDragSource,\n isDragging,\n canDrop,\n canDrag,\n node,\n title,\n subtitle,\n draggedNode,\n path,\n treeIndex,\n isSearchMatch,\n isSearchFocus,\n buttons,\n className,\n style,\n didDrop,\n /* eslint-disable */\n treeId,\n isOver, // Not needed, but preserved for other renderers\n parentNode, // Needed for dndManager\n /* eslint-enable */\n rowDirection,\n ...otherProps\n}) => {\n //useStyles();\n const nodeTitle = title || node.title;\n const nodeSubtitle = subtitle || node.subtitle;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n let handle;\n if (canDrag) {\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n handle = (\n <div className=\"rst__loadingHandle\">\n <div className=\"rst__loadingCircle\">\n {[...new Array(12)].map((_, index) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n className={classnames('rst__loadingCirclePoint', rowDirectionClass)}\n />\n ))}\n </div>\n </div>\n );\n } else {\n // Show the handle used to initiate a drag-and-drop\n handle = connectDragSource(<div className=\"rst__moveHandle\" />, {\n dropEffect: 'copy'\n });\n }\n }\n\n const isDraggedDescendant = draggedNode && isDescendant(draggedNode, node);\n const isLandingPadActive = !didDrop && isDragging;\n\n let buttonStyle = {left: -0.5 * scaffoldBlockPxWidth};\n if (rowDirection === 'rtl') {\n buttonStyle = {right: -0.5 * scaffoldBlockPxWidth};\n }\n\n return (\n <div style={{height: '100%'}} {...otherProps}>\n {toggleChildrenVisibility &&\n node.children &&\n (node.children.length > 0 || typeof node.children === 'function') && (\n <div>\n <button\n type=\"button\"\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n node.expanded ? 'rst__collapseButton' : 'rst__expandButton',\n rowDirectionClass\n )}\n style={buttonStyle}\n onClick={() =>\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n })\n }\n />\n\n {node.expanded && !isDragging && (\n <div\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineChildren', rowDirectionClass)}\n />\n )}\n </div>\n )}\n\n <div className={classnames('rst__rowWrapper', rowDirectionClass)}>\n {/* Set the row preview to be used during drag and drop */}\n {connectDragPreview(\n <div\n className={classnames(\n 'rst__row',\n isLandingPadActive && 'rst__rowLandingPad',\n isLandingPadActive && !canDrop && 'rst__rowCancelPad',\n isSearchMatch && 'rst__rowSearchMatch',\n isSearchFocus && 'rst__rowSearchFocus',\n rowDirectionClass,\n className\n )}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n ...style\n }}\n >\n {handle}\n\n <div\n className={classnames(\n 'rst__rowContents',\n !canDrag && 'rst__rowContentsDragDisabled',\n rowDirectionClass\n )}\n >\n <div className={classnames('rst__rowLabel', rowDirectionClass)}>\n <span\n className={classnames(\n 'rst__rowTitle',\n node.subtitle && 'rst__rowTitleWithSubtitle'\n )}\n >\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </span>\n\n {nodeSubtitle && (\n <span className=\"rst__rowSubtitle\">\n {typeof nodeSubtitle === 'function'\n ? nodeSubtitle({\n node,\n path,\n treeIndex\n })\n : nodeSubtitle}\n </span>\n )}\n </div>\n\n <div className=\"rst__rowToolbar\">\n {buttons.map((btn, index) => (\n <div\n key={index} // eslint-disable-line react/no-array-index-key\n className=\"rst__toolbarButton\"\n >\n {btn}\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nNodeRendererDefault.defaultProps = {\n isSearchMatch: false,\n isSearchFocus: false,\n canDrag: false,\n toggleChildrenVisibility: null,\n buttons: [],\n className: '',\n style: {},\n parentNode: null,\n draggedNode: null,\n canDrop: false,\n title: null,\n subtitle: null,\n rowDirection: 'ltr'\n};\n\nNodeRendererDefault.propTypes = {\n node: PropTypes.shape({}).isRequired,\n title: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n subtitle: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n isSearchMatch: PropTypes.bool,\n isSearchFocus: PropTypes.bool,\n canDrag: PropTypes.bool,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n toggleChildrenVisibility: PropTypes.func,\n buttons: PropTypes.arrayOf(PropTypes.node),\n className: PropTypes.string,\n style: PropTypes.shape({}),\n\n // Drag and drop API functions\n // Drag source\n connectDragPreview: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n parentNode: PropTypes.shape({}), // Needed for dndManager\n isDragging: PropTypes.bool.isRequired,\n didDrop: PropTypes.bool.isRequired,\n draggedNode: PropTypes.shape({}),\n // Drop target\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default NodeRendererDefault;\n","import React, {Children, cloneElement, Component} from 'react';\nimport PropTypes from 'prop-types';\n\nclass TreePlaceholder extends Component {\n render() {\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {children, connectDropTarget, treeId, drop, ...otherProps} = this.props;\n return connectDropTarget(\n <div>\n {Children.map(children, (child) =>\n cloneElement(child, {\n ...otherProps\n })\n )}\n </div>\n );\n }\n}\n\nTreePlaceholder.defaultProps = {\n canDrop: false,\n draggedNode: null\n};\n\nTreePlaceholder.propTypes = {\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n treeId: PropTypes.string.isRequired,\n drop: PropTypes.func.isRequired\n};\n\nexport default TreePlaceholder;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n '@global .rst__placeholder': {\n position: 'relative',\n height: '68px',\n maxWidth: '300px',\n padding: '10px'\n },\n '@global .rst__placeholder, .rst__placeholder > *': {\n boxSizing: 'border-box'\n },\n '@global .rst__placeholder::before': {\n border: '3px dashed #d9d9d9',\n content: '',\n position: 'absolute',\n top: '5px',\n right: '5px',\n bottom: '5px',\n left: '5px',\n zIndex: -1\n },\n\n /**\n * The outline of where the element will go if dropped, displayed while dragging\n */\n '@global .rst__placeholderLandingPad, .rst__placeholderCancelPad': {\n border: 'none !important',\n boxShadow: 'none !important',\n outline: 'none !important'\n },\n '@global .rst__placeholderLandingPad *, .rst__placeholderCancelPad *': {\n opacity: '0 !important'\n },\n '@global .rst__placeholderLandingPad::before, .rst__placeholderCancelPad::before': {\n backgroundColor: 'lightblue',\n borderColor: 'white'\n },\n\n /**\n * Alternate appearance of the landing pad when the dragged location is invalid\n */\n '@global .rst__placeholderCancelPad::before': {\n backgroundColor: '#e6a8ad'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from './utils/classnames';\nimport {useStyles} from './placeholderRendererDefaultStyle';\n\nconst PlaceholderRendererDefault = ({isOver, canDrop}) => {\n useStyles();\n return (\n <div\n className={classnames(\n 'rst__placeholder',\n canDrop && 'rst__placeholderLandingPad',\n canDrop && !isOver && 'rst__placeholderCancelPad'\n )}\n />\n );\n};\n\nPlaceholderRendererDefault.defaultProps = {\n isOver: false,\n canDrop: false\n};\n\nPlaceholderRendererDefault.propTypes = {\n isOver: PropTypes.bool,\n canDrop: PropTypes.bool\n};\n\nexport default PlaceholderRendererDefault;\n","import {insertNode, getDescendantCount, getFlatDataFromTree} from './tree-data-utils';\n\nconst memoize = (f) => {\n let savedArgsArray = [];\n let savedKeysArray = [];\n let savedResult = null;\n\n return (args) => {\n const keysArray = Object.keys(args).sort();\n const argsArray = keysArray.map((key) => args[key]);\n\n // If the arguments for the last insert operation are different than this time,\n // recalculate the result\n if (\n argsArray.length !== savedArgsArray.length ||\n argsArray.some((arg, index) => arg !== savedArgsArray[index]) ||\n keysArray.some((key, index) => key !== savedKeysArray[index])\n ) {\n savedArgsArray = argsArray;\n savedKeysArray = keysArray;\n savedResult = f(args);\n }\n\n return savedResult;\n };\n};\n\nexport const memoizedInsertNode = memoize(insertNode);\nexport const memoizedGetFlatDataFromTree = memoize(getFlatDataFromTree);\nexport const memoizedGetDescendantCount = memoize(getDescendantCount);\n","import {DragSource as dragSource, DropTarget as dropTarget} from 'react-dnd';\nimport {findDOMNode} from 'react-dom';\nimport {equals} from 'ramda';\nimport {getDepth} from './tree-data-utils';\nimport {memoizedInsertNode} from './memoized-tree-data-utils';\n\nexport default class DndManager {\n constructor(treeRef) {\n this.treeRef = treeRef;\n this.resetDragVariables();\n }\n\n get startDrag() {\n return this.treeRef.startDrag;\n }\n\n get dragHover() {\n return this.treeRef.dragHover;\n }\n\n get endDrag() {\n return this.treeRef.endDrag;\n }\n\n get drop() {\n return this.treeRef.drop;\n }\n\n get treeId() {\n return this.treeRef.treeId;\n }\n\n get dndType() {\n return this.treeRef.dndType;\n }\n\n get treeData() {\n return this.treeRef.state.draggingTreeData || this.treeRef.props.treeData;\n }\n\n get getNodeKey() {\n return this.treeRef.props.getNodeKey;\n }\n\n get customCanDrop() {\n return this.treeRef.props.canDrop;\n }\n\n get maxDepth() {\n return this.treeRef.props.maxDepth;\n }\n\n resetDragVariables() {\n this.lastDropTargetNode = null;\n this.lastDropTargetDepth = null;\n this.hoverProps = null;\n this.lastCanDropResult = null;\n this.lastCanDropProps = null;\n this.shouldSkipMoreFrames = false;\n this.rafId = null;\n }\n getTargetDepth(dropTargetProps, monitor, component) {\n let dropTargetDepth = 0;\n\n const rowAbove = dropTargetProps.getPrevRow();\n if (rowAbove) {\n let {path} = rowAbove;\n const aboveNodeCannotHaveChildren = !this.treeRef.canNodeHaveChildren(rowAbove.node);\n if (aboveNodeCannotHaveChildren) {\n path = path.slice(0, path.length - 1);\n }\n\n // Limit the length of the path to the deepest possible\n dropTargetDepth = Math.min(path.length, dropTargetProps.path.length);\n }\n\n let blocksOffset;\n let dragSourceInitialDepth = (monitor.getItem().path || []).length;\n\n // When adding node from external source\n if (monitor.getItem().treeId !== this.treeId) {\n // Ignore the tree depth of the source, if it had any to begin with\n dragSourceInitialDepth = 0;\n\n if (component) {\n const relativePosition = findDOMNode(component).getBoundingClientRect(); // eslint-disable-line react/no-find-dom-node\n const leftShift = monitor.getSourceClientOffset().x - relativePosition.left;\n blocksOffset = Math.round(leftShift / dropTargetProps.scaffoldBlockPxWidth);\n } else {\n blocksOffset = dropTargetProps.path.length;\n }\n } else {\n // handle row direction support\n const direction = dropTargetProps.rowDirection === 'rtl' ? -1 : 1;\n\n blocksOffset = Math.round(\n (direction * monitor.getDifferenceFromInitialOffset().x) / dropTargetProps.scaffoldBlockPxWidth\n );\n }\n\n let targetDepth = Math.min(dropTargetDepth, Math.max(0, dragSourceInitialDepth + blocksOffset - 1));\n\n // If a maxDepth is defined, constrain the target depth\n if (typeof this.maxDepth !== 'undefined' && this.maxDepth !== null) {\n const draggedNode = monitor.getItem().node;\n const draggedChildDepth = getDepth(draggedNode);\n\n targetDepth = Math.max(0, Math.min(targetDepth, this.maxDepth - draggedChildDepth - 1));\n }\n\n return targetDepth;\n }\n\n canDrop(dropTargetProps, monitor) {\n if (!monitor.isOver()) {\n return false;\n }\n\n const rowAbove = dropTargetProps.getPrevRow();\n const abovePath = rowAbove ? rowAbove.path : [];\n const aboveNode = rowAbove ? rowAbove.node : {};\n const blocksOffset = Math.round(\n monitor.getDifferenceFromInitialOffset().x / dropTargetProps.scaffoldBlockPxWidth\n );\n const newCanDropProps = {\n nodeId: dropTargetProps.node.nodeId !== undefined ? dropTargetProps.node.nodeId : dropTargetProps.node,\n rowAbove,\n abovePath,\n aboveNodeId: aboveNode.nodeId !== undefined ? aboveNode.nodeId : aboveNode,\n blocksOffset\n };\n if (equals(this.lastCanDropProps, newCanDropProps)) {\n return this.lastCanDropResult;\n }\n this.lastCanDropProps = newCanDropProps;\n const targetDepth = this.getTargetDepth(dropTargetProps, monitor, null);\n\n // Cannot drop if we're adding to the children of the row above and\n // the row above is a function\n if (targetDepth >= abovePath.length && typeof aboveNode.children === 'function') {\n return (this.lastCanDropResult = false);\n }\n\n if (typeof this.customCanDrop === 'function') {\n const {node} = monitor.getItem();\n const addedResult = memoizedInsertNode({\n treeData: this.treeData,\n newNode: node,\n depth: targetDepth,\n getNodeKey: this.getNodeKey,\n minimumTreeIndex: dropTargetProps.listIndex,\n expandParent: true\n });\n\n return (this.lastCanDropResult = this.customCanDrop({\n node,\n prevPath: monitor.getItem().path,\n prevParent: monitor.getItem().parentNode,\n prevTreeIndex: monitor.getItem().treeIndex, // Equals -1 when dragged from external tree\n nextPath: addedResult.path,\n nextParent: addedResult.parentNode,\n nextTreeIndex: addedResult.treeIndex\n }));\n }\n return (this.lastCanDropResult = true);\n }\n\n wrapSource(el) {\n const nodeDragSource = {\n beginDrag: (props) => {\n this.startDrag(props);\n\n return {\n node: props.node,\n parentNode: props.parentNode,\n path: props.path,\n treeIndex: props.treeIndex,\n treeId: props.treeId\n };\n },\n\n endDrag: (props, monitor) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n this.endDrag(monitor.getDropResult());\n this.resetDragVariables();\n },\n\n isDragging: (props, monitor) => {\n const dropTargetNode = monitor.getItem().node;\n const draggedNode = props.node;\n\n return draggedNode === dropTargetNode;\n }\n };\n\n function nodeDragSourcePropInjection(connect, monitor) {\n return {\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n didDrop: monitor.didDrop()\n };\n }\n\n return dragSource(this.dndType, nodeDragSource, nodeDragSourcePropInjection)(el);\n }\n hoverHandler = () => {\n if (this.hoverProps === null) {\n return;\n }\n const {dropTargetProps, monitor, component} = this.hoverProps;\n\n const item = monitor.getItem();\n if (!item) {\n return;\n }\n const targetDepth = this.getTargetDepth(dropTargetProps, monitor, component);\n const draggedNode = item.node;\n const needsRedraw =\n dropTargetProps.node !== this.lastDropTargetNode || targetDepth !== this.lastDropTargetDepth;\n\n if (!needsRedraw) {\n return;\n }\n this.lastDropTargetNode = dropTargetProps.node;\n this.lastDropTargetDepth = targetDepth;\n\n this.dragHover({\n node: draggedNode,\n path: item.path,\n minimumTreeIndex: dropTargetProps.listIndex,\n depth: targetDepth\n });\n\n this.hoverProps = null;\n };\n\n deferredCallHoverHandler = () => {\n if (this.shouldSkipMoreFrames) {\n this.shouldSkipMoreFrames = false;\n this.rafId = requestAnimationFrame(this.deferredCallHoverHandler);\n return;\n }\n this.rafId = null;\n this.hoverHandler();\n };\n\n wrapTarget(el) {\n const nodeDropTarget = {\n drop: (dropTargetProps, monitor, component) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n const result = {\n node: monitor.getItem().node,\n path: monitor.getItem().path,\n treeIndex: monitor.getItem().treeIndex,\n treeId: this.treeId,\n minimumTreeIndex: dropTargetProps.treeIndex,\n depth: this.getTargetDepth(dropTargetProps, monitor, component)\n };\n this.lastDropTargetNode = null;\n this.drop(result);\n\n return result;\n },\n\n hover: (dropTargetProps, monitor, component) => {\n if (this.rafId) {\n this.shouldSkipMoreFrames = true;\n return;\n }\n this.shouldSkipMoreFrames = false;\n this.hoverProps = {\n dropTargetProps,\n monitor,\n component\n };\n this.rafId = requestAnimationFrame(this.deferredCallHoverHandler);\n },\n\n canDrop: this.canDrop.bind(this)\n };\n\n function nodeDropTargetPropInjection(connect, monitor) {\n const dragged = monitor.getItem();\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n draggedNode: dragged ? dragged.node : null\n };\n }\n\n return dropTarget(this.dndType, nodeDropTarget, nodeDropTargetPropInjection)(el);\n }\n\n wrapPlaceholder(el) {\n const placeholderDropTarget = {\n drop: (dropTargetProps, monitor) => {\n const {node, path, treeIndex} = monitor.getItem();\n const result = {\n node,\n path,\n treeIndex,\n treeId: this.treeId,\n minimumTreeIndex: 0,\n depth: 0\n };\n\n this.drop(result);\n\n return result;\n }\n };\n\n function placeholderPropInjection(connect, monitor) {\n const dragged = monitor.getItem();\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n draggedNode: dragged ? dragged.node : null\n };\n }\n\n return dropTarget(this.dndType, placeholderDropTarget, placeholderPropInjection)(el);\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {AutoSizer, List} from 'react-virtualized';\nimport {equals, append, when, always, gt, uniqWith, eqBy, pipe} from 'ramda';\nimport withScrolling, {\n createScrollingComponent,\n createVerticalStrength,\n createHorizontalStrength\n} from 'frontend-collective-react-dnd-scrollzone';\nimport {DndContext} from 'react-dnd';\nimport {polyfill} from 'react-lifecycles-compat';\nimport withStyles from '@mui/styles/withStyles';\nimport {DragAndDrop} from '../DragAndDrop/DragAndDrop';\nimport TreeNode from './tree-node';\nimport NodeRendererDefault from './node-renderer-default';\nimport TreePlaceholder from './tree-placeholder';\nimport PlaceholderRendererDefault from './placeholder-renderer-default';\nimport {walk, changeNodeAtPath, removeNode, insertNode, find, toggleExpandedForAll} from './utils/tree-data-utils';\nimport {\n memoizedInsertNode,\n memoizedGetFlatDataFromTree,\n memoizedGetDescendantCount\n} from './utils/memoized-tree-data-utils';\nimport {slideRows} from './utils/generic-utils';\nimport {defaultGetNodeKey, defaultSearchMethod} from './utils/default-handlers';\nimport DndManager from './utils/dnd-manager';\nimport classnames from './utils/classnames';\nimport {styles} from './reactSortableTreeStyles';\n\nlet treeIdCounter = 1;\n\nconst mergeTheme = (props) => {\n const merged = {\n ...props,\n style: {...props.theme.style, ...props.style},\n innerStyle: {...props.theme.innerStyle, ...props.innerStyle},\n reactVirtualizedListProps: {\n ...props.theme.reactVirtualizedListProps,\n ...props.reactVirtualizedListProps\n }\n };\n\n const overridableDefaults = {\n nodeContentRenderer: NodeRendererDefault,\n placeholderRenderer: PlaceholderRendererDefault,\n rowHeight: 62,\n scaffoldBlockPxWidth: 44,\n slideRegionSize: 100,\n treeNodeRenderer: TreeNode\n };\n Object.keys(overridableDefaults).forEach((propKey) => {\n // If prop has been specified, do not change it\n // If prop is specified in theme, use the theme setting\n // If all else fails, fall back to the default\n if (props[propKey] === null) {\n merged[propKey] =\n typeof props.theme[propKey] !== 'undefined' ? props.theme[propKey] : overridableDefaults[propKey];\n }\n });\n\n return merged;\n};\n\nclass ReactSortableTree extends Component {\n constructor(props) {\n super(props);\n\n const {dndType, nodeContentRenderer, treeNodeRenderer, isVirtualized, slideRegionSize} = mergeTheme(props);\n\n this.dndManager = new DndManager(this);\n\n // Wrapping classes for use with react-dnd\n this.treeId = `rst__${treeIdCounter}`;\n treeIdCounter += 1;\n this.dndType = dndType || this.treeId;\n this.nodeContentRenderer = this.dndManager.wrapSource(nodeContentRenderer);\n this.treePlaceholderRenderer = this.dndManager.wrapPlaceholder(TreePlaceholder);\n this.treeNodeRenderer = this.dndManager.wrapTarget(treeNodeRenderer);\n\n // Prepare scroll-on-drag options for this list\n if (isVirtualized) {\n this.scrollZoneVirtualList = (createScrollingComponent || withScrolling)(List);\n this.vStrength = createVerticalStrength(slideRegionSize);\n this.hStrength = createHorizontalStrength(slideRegionSize);\n }\n\n this.state = {\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n searchMatches: [],\n searchFocusTreeIndex: null,\n dragging: false,\n draggingExpandedPaths: [],\n ignoreOneTreeUpdate: false,\n\n // props that need to be used in gDSFP or static functions will be stored here\n instanceProps: {\n treeData: this.props.treeData || [],\n searchQuery: null,\n searchFocusOffset: null,\n ignoreTreeChanges: false\n }\n };\n\n this.toggleChildrenVisibility = this.toggleChildrenVisibility.bind(this);\n this.moveNode = this.moveNode.bind(this);\n this.startDrag = this.startDrag.bind(this);\n this.dragHover = this.dragHover.bind(this);\n this.endDrag = this.endDrag.bind(this);\n this.drop = this.drop.bind(this);\n this.handleDndMonitorChange = this.handleDndMonitorChange.bind(this);\n }\n\n componentDidMount() {\n ReactSortableTree.loadLazyChildren(this.props);\n const stateUpdate = ReactSortableTree.search(this.props, this.state, true, true, false);\n this.setState(stateUpdate);\n\n // Hook into react-dnd state changes to detect when the drag ends\n // TODO: This is very brittle, so it needs to be replaced if react-dnd\n // offers a more official way to detect when a drag ends\n this.clearMonitorSubscription = this.props.dragDropManager\n .getMonitor()\n .subscribeToStateChange(this.handleDndMonitorChange);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const {instanceProps} = prevState;\n const newState = {};\n\n if (!equals(instanceProps.searchQuery, nextProps.searchQuery)) {\n Object.assign(newState, ReactSortableTree.search(nextProps, prevState, true, true, false));\n } else if (instanceProps.searchFocusOffset !== nextProps.searchFocusOffset) {\n Object.assign(newState, ReactSortableTree.search(nextProps, prevState, true, true, true));\n }\n\n instanceProps.searchQuery = nextProps.searchQuery;\n instanceProps.searchFocusOffset = nextProps.searchFocusOffset;\n newState.instanceProps = instanceProps;\n\n return newState;\n }\n\n // listen to dragging\n componentDidUpdate(prevProps, prevState) {\n // if it is not the same then call the onDragStateChanged\n if (this.state.dragging !== prevState.dragging) {\n if (this.props.onDragStateChanged) {\n this.props.onDragStateChanged({\n isDragging: this.state.dragging,\n draggedNode: this.state.draggedNode\n });\n }\n }\n if (this.state.dragging) {\n const isTreeDataEqual = equals(this.props.treeData, prevProps.treeData);\n if (!isTreeDataEqual) {\n const {treeData: draggingTreeData} = removeNode({\n treeData: this.props.treeData,\n path: prevState.draggedPath,\n getNodeKey: this.props.getNodeKey\n });\n\n this.setState(({draggingExpandedPaths}) => ({\n draggingTreeData: draggingExpandedPaths.reduce((treeData, path) => {\n let newTree;\n try {\n newTree = changeNodeAtPath({\n treeData,\n path,\n newNode: ({node}) => ({...node, expanded: true}),\n getNodeKey: this.props.getNodeKey\n });\n } catch (e) {\n newTree = treeData;\n }\n return newTree;\n }, draggingTreeData)\n }));\n } else if (this.state.draggingTreeData && prevState.draggingTreeData !== this.state.draggingTreeData) {\n walk({\n treeData: this.state.draggingTreeData,\n getNodeKey: this.props.getNodeKey,\n callback: ({node, path, lowerSiblingCounts, treeIndex}) => {\n if (node.pending && node.expanded) {\n this.props.onLazyLoadChildren({\n node,\n path,\n lowerSiblingCounts,\n treeIndex\n });\n }\n }\n });\n }\n } else if (this.props.treeData !== prevProps.treeData) {\n const isTreeDataEqual = equals(this.props.treeData, prevProps.treeData);\n const {ignoreOneTreeUpdate, instanceProps} = this.state;\n const newState = {};\n if (!isTreeDataEqual) {\n if (ignoreOneTreeUpdate) {\n newState.ignoreOneTreeUpdate = false;\n } else {\n newState.searchFocusTreeIndex = null;\n ReactSortableTree.loadLazyChildren(this.props);\n Object.assign(newState, ReactSortableTree.search(this.props, this.state, false, false, false));\n }\n\n newState.draggingTreeData = null;\n newState.draggedNode = null;\n newState.draggedMinimumTreeIndex = null;\n newState.draggedDepth = null;\n newState.dragging = false;\n newState.draggingExpandedPaths = [];\n newState.instanceProps = {...instanceProps, treeData: this.props.treeData};\n\n this.setState(newState);\n }\n }\n }\n\n componentWillUnmount() {\n this.clearMonitorSubscription();\n }\n\n getRows(treeData) {\n return memoizedGetFlatDataFromTree({\n ignoreCollapsed: true,\n getNodeKey: this.props.getNodeKey,\n treeData\n });\n }\n\n handleDndMonitorChange() {\n const monitor = this.props.dragDropManager.getMonitor();\n // If the drag ends and the tree is still in a mid-drag state,\n // it means that the drag was canceled or the dragSource dropped\n // elsewhere, and we should reset the state of this tree\n if (!monitor.isDragging() && this.state.draggingTreeData) {\n this.endDrag();\n }\n }\n\n toggleChildrenVisibility({node: targetNode, path}) {\n const {instanceProps} = this.state;\n\n const treeData = changeNodeAtPath({\n treeData: instanceProps.treeData,\n path,\n newNode: ({node}) => ({...node, expanded: !node.expanded}),\n getNodeKey: this.props.getNodeKey\n });\n\n this.props.onChange(treeData);\n\n this.props.onVisibilityToggle({\n treeData,\n node: targetNode,\n expanded: !targetNode.expanded,\n path\n });\n }\n\n moveNode({node, path: prevPath, treeIndex: prevTreeIndex, depth, minimumTreeIndex}) {\n const {\n treeData,\n treeIndex,\n path,\n parentNode: nextParentNode\n } = insertNode({\n treeData: this.state.draggingTreeData,\n newNode: node,\n depth,\n minimumTreeIndex,\n expandParent: true,\n getNodeKey: this.props.getNodeKey\n });\n this.setState(\n {\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n dragging: false,\n draggingExpandedPaths: []\n },\n () => {\n this.props.onChange(treeData);\n\n this.props.onMoveNode({\n treeData,\n node,\n treeIndex,\n path,\n nextPath: path,\n nextTreeIndex: treeIndex,\n prevPath,\n prevTreeIndex,\n nextParentNode\n });\n }\n );\n }\n\n // returns the new state after search\n static search(props, state, seekIndex, expand, singleSearch) {\n const {\n onChange,\n getNodeKey,\n searchFinishCallback,\n searchQuery,\n searchMethod,\n searchFocusOffset,\n onlyExpandSearchedNodes\n } = props;\n\n const {instanceProps} = state;\n\n // Skip search if no conditions are specified\n if (!searchQuery && !searchMethod) {\n if (searchFinishCallback) {\n searchFinishCallback([]);\n }\n\n return {searchMatches: []};\n }\n\n const newState = {};\n\n // if onlyExpandSearchedNodes collapse the tree and search\n const {treeData: expandedTreeData, matches: searchMatches} = find({\n getNodeKey,\n treeData: onlyExpandSearchedNodes\n ? toggleExpandedForAll({\n treeData: instanceProps.treeData,\n expanded: false\n })\n : instanceProps.treeData,\n searchQuery,\n searchMethod: searchMethod || defaultSearchMethod,\n searchFocusOffset,\n expandAllMatchPaths: expand && !singleSearch,\n expandFocusMatchPaths: !!expand\n });\n\n // Update the tree with data leaving all paths leading to matching nodes open\n if (expand) {\n newState.ignoreOneTreeUpdate = true; // Prevents infinite loop\n onChange(expandedTreeData);\n }\n\n if (searchFinishCallback) {\n searchFinishCallback(searchMatches);\n }\n\n let searchFocusTreeIndex = null;\n if (seekIndex && searchFocusOffset !== null && searchFocusOffset < searchMatches.length) {\n searchFocusTreeIndex = searchMatches[searchFocusOffset].treeIndex;\n }\n\n newState.searchMatches = searchMatches;\n newState.searchFocusTreeIndex = searchFocusTreeIndex;\n\n return newState;\n }\n\n startDrag({path}) {\n this.setState((prevState) => {\n const {\n treeData: draggingTreeData,\n node: draggedNode,\n treeIndex: draggedMinimumTreeIndex\n } = removeNode({\n treeData: prevState.instanceProps.treeData,\n path,\n getNodeKey: this.props.getNodeKey\n });\n\n return {\n draggingTreeData,\n draggedNode,\n draggedDepth: path.length - 1,\n draggedMinimumTreeIndex,\n draggedPath: path,\n dragging: true\n };\n });\n }\n\n dragHover({node: draggedNode, depth: draggedDepth, minimumTreeIndex: draggedMinimumTreeIndex}) {\n // Ignore this hover if it is at the same position as the last hover\n if (\n this.state.draggedDepth === draggedDepth &&\n this.state.draggedMinimumTreeIndex === draggedMinimumTreeIndex\n ) {\n return;\n }\n this.setState(({draggingTreeData, instanceProps, draggingExpandedPaths}) => {\n // Fall back to the tree data if something is being dragged in from\n // an external element\n const newDraggingTreeData = draggingTreeData || instanceProps.treeData;\n\n const addedResult = memoizedInsertNode({\n treeData: newDraggingTreeData,\n newNode: draggedNode,\n depth: draggedDepth,\n minimumTreeIndex: draggedMinimumTreeIndex,\n expandParent: true,\n getNodeKey: this.props.getNodeKey\n });\n\n const rows = this.getRows(addedResult.treeData);\n const expandedParentPath = rows[addedResult.treeIndex].path;\n const nodePath = expandedParentPath.slice(0, -1);\n\n const newDraggingExpandedPaths = pipe(\n when(always(gt(nodePath.length, 0)), append(nodePath)),\n uniqWith(eqBy(String))\n )(draggingExpandedPaths);\n return {\n draggedNode,\n draggedDepth,\n draggedMinimumTreeIndex,\n draggingTreeData: changeNodeAtPath({\n treeData: newDraggingTreeData,\n path: nodePath,\n newNode: ({node}) => ({...node, expanded: true}),\n getNodeKey: this.props.getNodeKey\n }),\n // reset the scroll focus so it doesn't jump back\n // to a search result while dragging\n searchFocusTreeIndex: null,\n dragging: true,\n draggingExpandedPaths: newDraggingExpandedPaths\n };\n });\n }\n\n endDrag(dropResult) {\n const {instanceProps} = this.state;\n\n const resetTree = () =>\n this.setState({\n draggingTreeData: null,\n draggedNode: null,\n draggedMinimumTreeIndex: null,\n draggedDepth: null,\n dragging: false\n });\n\n // Drop was cancelled\n if (!dropResult) {\n resetTree();\n } else if (dropResult.treeId !== this.treeId) {\n // The node was dropped in an external drop target or tree\n const {node, path, treeIndex} = dropResult;\n let shouldCopy = this.props.shouldCopyOnOutsideDrop;\n if (typeof shouldCopy === 'function') {\n shouldCopy = shouldCopy({\n node,\n prevTreeIndex: treeIndex,\n prevPath: path\n });\n }\n\n let treeData = this.state.draggingTreeData || instanceProps.treeData;\n\n // If copying is enabled, a drop outside leaves behind a copy in the\n // source tree\n if (shouldCopy) {\n treeData = changeNodeAtPath({\n treeData: instanceProps.treeData, // use treeData unaltered by the drag operation\n path,\n newNode: ({node: copyNode}) => ({...copyNode}), // create a shallow copy of the node\n getNodeKey: this.props.getNodeKey\n });\n }\n\n this.props.onChange(treeData);\n\n this.props.onMoveNode({\n treeData,\n node,\n treeIndex: null,\n path: null,\n nextPath: null,\n nextTreeIndex: null,\n prevPath: path,\n prevTreeIndex: treeIndex\n });\n }\n }\n\n drop(dropResult) {\n this.moveNode(dropResult);\n }\n\n canNodeHaveChildren(node) {\n const {canNodeHaveChildren} = this.props;\n if (canNodeHaveChildren) {\n return canNodeHaveChildren(node);\n }\n return true;\n }\n\n // Load any children in the tree that are given by a function\n // calls the onChange callback on the new treeData\n static loadLazyChildren(props) {\n walk({\n treeData: props.treeData,\n getNodeKey: props.getNodeKey,\n callback: ({node, path, lowerSiblingCounts, treeIndex}) => {\n // If the node has children defined by a function, and is either expanded\n // or set to load even before expansion, run the function.\n if (node.pending && (node.expanded || props.loadCollapsedLazyChildren)) {\n // Call the children fetching function\n props.onLazyLoadChildren({\n node,\n path,\n lowerSiblingCounts,\n treeIndex,\n\n // Provide a helper to append the new data when it is received\n done: (childrenArray) =>\n props.onChange(\n changeNodeAtPath({\n treeData: props.treeData,\n path,\n newNode: ({node: oldNode}) =>\n // Only replace the old node if it's the one we set off to find children\n // for in the first place\n oldNode === node\n ? {\n ...oldNode,\n children: childrenArray\n }\n : oldNode,\n getNodeKey: props.getNodeKey\n }),\n true\n )\n });\n }\n }\n });\n }\n\n renderRow(row, {listIndex, style, getPrevRow, matchKeys, swapFrom, swapDepth, swapLength}) {\n const {node, parentNode, path, lowerSiblingCounts, treeIndex} = row;\n\n const {canDrag, generateNodeProps, scaffoldBlockPxWidth, searchFocusOffset, rowDirection} = mergeTheme(\n this.props\n );\n const TreeNodeRenderer = this.treeNodeRenderer;\n const NodeContentRenderer = this.nodeContentRenderer;\n const nodeKey = path[path.length - 1];\n const isSearchMatch = nodeKey in matchKeys;\n const isSearchFocus = isSearchMatch && matchKeys[nodeKey] === searchFocusOffset;\n const callbackParams = {\n node,\n parentNode,\n path,\n lowerSiblingCounts,\n treeIndex,\n isSearchMatch,\n isSearchFocus\n };\n const nodeProps = !generateNodeProps ? {} : generateNodeProps(callbackParams);\n const rowCanDrag = typeof canDrag !== 'function' ? canDrag : canDrag(callbackParams);\n\n const sharedProps = {\n treeIndex,\n scaffoldBlockPxWidth,\n node,\n path,\n treeId: this.treeId,\n rowDirection\n };\n\n return (\n <TreeNodeRenderer\n style={style}\n key={nodeKey}\n listIndex={listIndex}\n getPrevRow={getPrevRow}\n lowerSiblingCounts={lowerSiblingCounts}\n swapFrom={swapFrom}\n swapLength={swapLength}\n swapDepth={swapDepth}\n {...sharedProps}\n >\n <NodeContentRenderer\n parentNode={parentNode}\n isSearchMatch={isSearchMatch}\n isSearchFocus={isSearchFocus}\n canDrag={rowCanDrag}\n toggleChildrenVisibility={this.toggleChildrenVisibility}\n {...sharedProps}\n {...nodeProps}\n />\n </TreeNodeRenderer>\n );\n }\n\n render() {\n const {\n dragDropManager,\n style,\n className,\n innerStyle,\n rowHeight,\n isVirtualized,\n placeholderRenderer,\n reactVirtualizedListProps,\n getNodeKey,\n rowDirection\n } = mergeTheme(this.props);\n const {searchMatches, searchFocusTreeIndex, draggedNode, draggedDepth, draggedMinimumTreeIndex} = this.state;\n\n const treeData = this.state.draggingTreeData || this.props.treeData;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n let rows;\n let swapFrom = null;\n let swapLength = null;\n if (draggedNode && draggedMinimumTreeIndex !== null) {\n const addedResult = memoizedInsertNode({\n treeData,\n newNode: draggedNode,\n depth: draggedDepth,\n minimumTreeIndex: draggedMinimumTreeIndex,\n expandParent: true,\n getNodeKey\n });\n\n const swapTo = draggedMinimumTreeIndex;\n swapFrom = addedResult.treeIndex;\n swapLength = 1 + memoizedGetDescendantCount({node: draggedNode});\n rows = slideRows(this.getRows(addedResult.treeData), swapFrom, swapTo, swapLength);\n } else {\n rows = this.getRows(treeData);\n }\n\n // Get indices for rows that match the search conditions\n const matchKeys = {};\n searchMatches.forEach(({path}, i) => {\n matchKeys[path[path.length - 1]] = i;\n });\n\n // Seek to the focused search result if there is one specified\n const scrollToInfo = searchFocusTreeIndex !== null ? {scrollToIndex: searchFocusTreeIndex} : {};\n\n let containerStyle = style;\n let list;\n if (rows.length < 1) {\n const Placeholder = this.treePlaceholderRenderer;\n const PlaceholderContent = placeholderRenderer;\n list = (\n <Placeholder treeId={this.treeId} drop={this.drop}>\n <PlaceholderContent />\n </Placeholder>\n );\n } else if (isVirtualized) {\n containerStyle = {height: '100%', ...containerStyle};\n\n const ScrollZoneVirtualList = this.scrollZoneVirtualList;\n // Render list with react-virtualized\n list = (\n <AutoSizer>\n {({height, width}) => (\n <ScrollZoneVirtualList\n {...scrollToInfo}\n dragDropManager={dragDropManager}\n verticalStrength={this.vStrength}\n horizontalStrength={this.hStrength}\n speed={30}\n scrollToAlignment=\"start\"\n className={this.props.classes.rst__virtualScrollOverride}\n width={width}\n onScroll={({scrollTop}) => {\n this.scrollTop = scrollTop;\n }}\n height={height}\n style={innerStyle}\n rowCount={rows.length}\n estimatedRowSize={typeof rowHeight !== 'function' ? rowHeight : undefined}\n rowHeight={\n typeof rowHeight !== 'function'\n ? rowHeight\n : ({index}) =>\n rowHeight({\n index,\n treeIndex: index,\n node: rows[index].node,\n path: rows[index].path\n })\n }\n rowRenderer={({index, style: rowStyle}) =>\n this.renderRow(rows[index], {\n listIndex: index,\n style: rowStyle,\n getPrevRow: () => rows[index - 1] || null,\n matchKeys,\n swapFrom,\n swapDepth: draggedDepth,\n swapLength\n })\n }\n {...reactVirtualizedListProps}\n />\n )}\n </AutoSizer>\n );\n } else {\n // Render list without react-virtualized\n list = rows.map((row, index) =>\n this.renderRow(row, {\n listIndex: index,\n style: {\n height:\n typeof rowHeight !== 'function'\n ? rowHeight\n : rowHeight({\n index,\n treeIndex: index,\n node: row.node,\n path: row.path\n })\n },\n getPrevRow: () => rows[index - 1] || null,\n matchKeys,\n swapFrom,\n swapDepth: draggedDepth,\n swapLength\n })\n );\n }\n\n return (\n <div className={classnames('rst__tree', className, rowDirectionClass)} style={containerStyle}>\n {list}\n </div>\n );\n }\n}\n\nReactSortableTree.propTypes = {\n classes: PropTypes.object,\n dragDropManager: PropTypes.shape({\n getMonitor: PropTypes.func\n }).isRequired,\n\n // Tree data in the following format:\n // [{title: 'main', subtitle: 'sub'}, { title: 'value2', expanded: true, children: [{ title: 'value3') }] }]\n // `title` is the primary label for the node\n // `subtitle` is a secondary label for the node\n // `expanded` shows children of the node if true, or hides them if false. Defaults to false.\n // `children` is an array of child nodes belonging to the node.\n treeData: PropTypes.arrayOf(PropTypes.object).isRequired,\n\n // Style applied to the container wrapping the tree (style defaults to {height: '100%'})\n style: PropTypes.shape({}),\n\n // Class name for the container wrapping the tree\n className: PropTypes.string,\n\n // Style applied to the inner, scrollable container (for padding, etc.)\n innerStyle: PropTypes.shape({}),\n\n // Used by react-virtualized\n // Either a fixed row height (number) or a function that returns the\n // height of a row given its index: `({ index: number }): number`\n rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n\n // Size in px of the region near the edges that initiates scrolling on dragover\n slideRegionSize: PropTypes.number,\n\n // Custom properties to hand to the react-virtualized list\n // https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types\n reactVirtualizedListProps: PropTypes.shape({}),\n\n // The width of the blocks containing the lines representing the structure of the tree.\n scaffoldBlockPxWidth: PropTypes.number,\n\n // Maximum depth nodes can be inserted at. Defaults to infinite.\n maxDepth: PropTypes.number,\n\n // The method used to search nodes.\n // Defaults to a function that uses the `searchQuery` string to search for nodes with\n // matching `title` or `subtitle` values.\n // NOTE: Changing `searchMethod` will not update the search, but changing the `searchQuery` will.\n searchMethod: PropTypes.func,\n\n // Used by the `searchMethod` to highlight and scroll to matched nodes.\n // Should be a string for the default `searchMethod`, but can be anything when using a custom search.\n searchQuery: PropTypes.any, // eslint-disable-line react/forbid-prop-types\n\n // Outline the <`searchFocusOffset`>th node and scroll to it.\n searchFocusOffset: PropTypes.number,\n\n // Get the nodes that match the search criteria. Used for counting total matches, etc.\n searchFinishCallback: PropTypes.func,\n\n // Generate an object with additional props to be passed to the node renderer.\n // Use this for adding buttons via the `buttons` key,\n // or additional `style` / `className` settings.\n generateNodeProps: PropTypes.func,\n\n // Set to false to disable virtualization.\n // NOTE: Auto-scrolling while dragging, and scrolling to the `searchFocusOffset` will be disabled.\n isVirtualized: PropTypes.bool,\n\n treeNodeRenderer: PropTypes.func,\n\n // Override the default component for rendering nodes (but keep the scaffolding generator)\n // This is an advanced option for complete customization of the appearance.\n // It is best to copy the component in `node-renderer-default.js` to use as a base, and customize as needed.\n nodeContentRenderer: PropTypes.func,\n\n // Override the default component for rendering an empty tree\n // This is an advanced option for complete customization of the appearance.\n // It is best to copy the component in `placeholder-renderer-default.js` to use as a base,\n // and customize as needed.\n placeholderRenderer: PropTypes.func,\n\n theme: PropTypes.shape({\n style: PropTypes.shape({}),\n innerStyle: PropTypes.shape({}),\n reactVirtualizedListProps: PropTypes.shape({}),\n scaffoldBlockPxWidth: PropTypes.number,\n slideRegionSize: PropTypes.number,\n rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n treeNodeRenderer: PropTypes.func,\n nodeContentRenderer: PropTypes.func,\n placeholderRenderer: PropTypes.func\n }),\n\n // Determine the unique key used to identify each node and\n // generate the `path` array passed in callbacks.\n // By default, returns the index in the tree (omitting hidden nodes).\n getNodeKey: PropTypes.func,\n\n // Called whenever tree data changed.\n // Just like with React input elements, you have to update your\n // own component's data to see the changes reflected.\n onChange: PropTypes.func.isRequired,\n\n // Called after node move operation.\n onMoveNode: PropTypes.func,\n\n // Determine whether a node can be dragged. Set to false to disable dragging on all nodes.\n canDrag: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n\n // Determine whether a node can be dropped based on its path and parents'.\n canDrop: PropTypes.func,\n\n // Determine whether a node can have children\n canNodeHaveChildren: PropTypes.func,\n\n // When true, or a callback returning true, dropping nodes to react-dnd\n // drop targets outside of this tree will not remove them from this tree\n shouldCopyOnOutsideDrop: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n\n // Called after children nodes collapsed or expanded.\n onVisibilityToggle: PropTypes.func,\n\n dndType: PropTypes.string,\n\n // Called to track between dropped and dragging\n onDragStateChanged: PropTypes.func,\n\n // Specify that nodes that do not match search will be collapsed\n onlyExpandSearchedNodes: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string,\n\n onLazyLoadChildren: PropTypes.func,\n ignoreTreeChanges: PropTypes.bool\n};\n\nReactSortableTree.defaultProps = {\n canDrag: true,\n canDrop: null,\n canNodeHaveChildren: () => true,\n className: '',\n dndType: null,\n generateNodeProps: null,\n getNodeKey: defaultGetNodeKey,\n innerStyle: {},\n isVirtualized: true,\n maxDepth: null,\n treeNodeRenderer: null,\n nodeContentRenderer: null,\n onMoveNode: () => {},\n onVisibilityToggle: () => {},\n placeholderRenderer: null,\n reactVirtualizedListProps: {},\n rowHeight: null,\n scaffoldBlockPxWidth: null,\n searchFinishCallback: null,\n searchFocusOffset: null,\n searchMethod: null,\n searchQuery: null,\n shouldCopyOnOutsideDrop: false,\n slideRegionSize: null,\n style: {},\n theme: {},\n onDragStateChanged: () => {},\n onlyExpandSearchedNodes: false,\n rowDirection: 'ltr',\n onLazyLoadChildren: () => {},\n ignoreTreeChanges: false\n};\n\npolyfill(ReactSortableTree);\n\nconst StyledReactSortableTree = withStyles(styles)(ReactSortableTree);\n\nconst SortableTreeWithoutDndContext = (props) => (\n <DndContext.Consumer>\n {({dragDropManager}) =>\n dragDropManager === undefined ? null : (\n <StyledReactSortableTree {...props} dragDropManager={dragDropManager} />\n )\n }\n </DndContext.Consumer>\n);\n\nconst SortableTree = (props) => {\n return (\n <DragAndDrop>\n <SortableTreeWithoutDndContext {...props} />\n </DragAndDrop>\n );\n};\n\n// Export the tree component without the react-dnd DragDropContext,\n// for when component is used with other components using react-dnd.\n// see: https://github.com/gaearon/react-dnd/issues/186\nexport {SortableTreeWithoutDndContext};\n\nexport default SortableTree;\n","/* eslint-disable import/prefer-default-export */\n\nexport function slideRows(rows, fromIndex, toIndex, count = 1) {\n const rowsWithoutMoved = [...rows.slice(0, fromIndex), ...rows.slice(fromIndex + count)];\n\n return [\n ...rowsWithoutMoved.slice(0, toIndex),\n ...rows.slice(fromIndex, fromIndex + count),\n ...rowsWithoutMoved.slice(toIndex)\n ];\n}\n","export const styles = () => ({\n /* import styles from react-virtualized/styles.css */\n\n /* Grid default theme */\n '@global .ReactVirtualized__Grid__innerScrollContainer': {\n overflow: 'visible !important' // override base style\n },\n\n '@global .ReactVirtualized__Grid': {\n outline: 'none' //override base style,\n },\n\n /* List default theme */\n '@global .ReactVirtualized__List': {},\n\n // New styles\n rst__virtualScrollOverride: {\n overflow: 'auto !important'\n },\n\n '@global .rst__rtl .ReactVirtualized__Grid__innerScrollContainer': {\n direction: 'rtl'\n }\n});\n","import SortableTree, {SortableTreeWithoutDndContext} from './react-sortable-tree';\n\nexport * from './utils/default-handlers';\nexport * from './utils/tree-data-utils';\nexport default SortableTree;\n\n// Export the tree component without the react-dnd DragDropContext,\n// for when component is used with other components using react-dnd.\n// see: https://github.com/gaearon/react-dnd/issues/186\nexport {SortableTreeWithoutDndContext};\n","export function defaultGetNodeKey({treeIndex}) {\n return treeIndex;\n}\n\n// Cheap hack to get the text of a react object\nfunction getReactElementText(parent) {\n if (typeof parent === 'string') {\n return parent;\n }\n\n if (\n parent === null ||\n typeof parent !== 'object' ||\n !parent.props ||\n !parent.props.children ||\n (typeof parent.props.children !== 'string' && typeof parent.props.children !== 'object')\n ) {\n return '';\n }\n\n if (typeof parent.props.children === 'string') {\n return parent.props.children;\n }\n\n return parent.props.children.map((child) => getReactElementText(child)).join('');\n}\n\n// Search for a query string inside a node property\nfunction stringSearch(key, searchQuery, node, path, treeIndex) {\n if (typeof node[key] === 'function') {\n // Search within text after calling its function to generate the text\n return String(node[key]({node, path, treeIndex})).indexOf(searchQuery) > -1;\n }\n if (typeof node[key] === 'object') {\n // Search within text inside react elements\n return getReactElementText(node[key]).indexOf(searchQuery) > -1;\n }\n\n // Search within string\n return node[key] && String(node[key]).indexOf(searchQuery) > -1;\n}\n\nexport function defaultSearchMethod({node, path, treeIndex, searchQuery}) {\n return (\n stringSearch('title', searchQuery, node, path, treeIndex) ||\n stringSearch('subtitle', searchQuery, node, path, treeIndex)\n );\n}\n\nexport default {defaultSearchMethod, defaultGetNodeKey};\n","/**\n * Performs a depth-first traversal over all of the node descendants,\n * incrementing currentIndex by 1 for each\n */\nfunction getNodeDataAtTreeIndexOrNextIndex({\n targetIndex,\n node,\n currentIndex,\n getNodeKey,\n path = [],\n lowerSiblingCounts = [],\n ignoreCollapsed = true,\n isPseudoRoot = false\n}) {\n // The pseudo-root is not considered in the path\n const selfPath = !isPseudoRoot ? [...path, getNodeKey({node, treeIndex: currentIndex})] : [];\n\n // Return target node when found\n if (currentIndex === targetIndex) {\n return {\n node,\n lowerSiblingCounts,\n path: selfPath\n };\n }\n\n // Add one and continue for nodes with no children or hidden children\n if (!node.children || (ignoreCollapsed && node.expanded !== true)) {\n return {nextIndex: currentIndex + 1};\n }\n\n // Iterate over each child and their descendants and return the\n // target node if childIndex reaches the targetIndex\n let childIndex = currentIndex + 1;\n const childCount = node.children.length;\n for (let i = 0; i < childCount; i += 1) {\n const result = getNodeDataAtTreeIndexOrNextIndex({\n ignoreCollapsed,\n getNodeKey,\n targetIndex,\n node: node.children[i],\n currentIndex: childIndex,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n\n if (result.node) {\n return result;\n }\n\n childIndex = result.nextIndex;\n }\n\n // If the target node is not found, return the farthest traversed index\n return {nextIndex: childIndex};\n}\n\nexport function getDescendantCount({node, ignoreCollapsed = true}) {\n return (\n getNodeDataAtTreeIndexOrNextIndex({\n getNodeKey: () => {},\n ignoreCollapsed,\n node,\n currentIndex: 0,\n targetIndex: -1\n }).nextIndex - 1\n );\n}\n\n/**\n * Walk all descendants of the given node, depth-first\n *\n * @param {Object} args - Function parameters\n * @param {function} args.callback - Function to call on each node\n * @param {function} args.getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean} args.ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} args.isPseudoRoot - If true, this node has no real data, and only serves\n * as the parent of all the nodes in the tree\n * @param {Object} args.node - A tree node\n * @param {Object=} args.parentNode - The parent node of `node`\n * @param {number} args.currentIndex - The treeIndex of `node`\n * @param {number[]|string[]} args.path - Array of keys leading up to node to be changed\n * @param {number[]} args.lowerSiblingCounts - An array containing the count of siblings beneath the\n * previous nodes in this path\n *\n * @return {number|false} nextIndex - Index of the next sibling of `node`,\n * or false if the walk should be terminated\n */\nfunction walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot = false,\n node,\n parentNode = null,\n currentIndex,\n path = [],\n lowerSiblingCounts = []\n}) {\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node, treeIndex: currentIndex})];\n const selfInfo = isPseudoRoot\n ? null\n : {\n node,\n parentNode,\n path: selfPath,\n lowerSiblingCounts,\n treeIndex: currentIndex\n };\n\n if (!isPseudoRoot) {\n const callbackResult = callback(selfInfo);\n\n // Cut walk short if the callback returned false\n if (callbackResult === false) {\n return false;\n }\n }\n\n // Return self on nodes with no children or hidden children\n if (!node.children || (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)) {\n return currentIndex;\n }\n\n // Get all descendants\n let childIndex = currentIndex;\n const childCount = node.children.length;\n if (typeof node.children !== 'function') {\n for (let i = 0; i < childCount; i += 1) {\n childIndex = walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n node: node.children[i],\n parentNode: isPseudoRoot ? null : node,\n currentIndex: childIndex + 1,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n\n // Cut walk short if the callback returned false\n if (childIndex === false) {\n return false;\n }\n }\n }\n\n return childIndex;\n}\n\n/**\n * Perform a change on the given node and all its descendants, traversing the tree depth-first\n *\n * @param {Object} args - Function parameters\n * @param {function} args.callback - Function to call on each node\n * @param {function} args.getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean} args.ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} args.isPseudoRoot - If true, this node has no real data, and only serves\n * as the parent of all the nodes in the tree\n * @param {Object} args.node - A tree node\n * @param {Object=} args.parentNode - The parent node of `node`\n * @param {number} args.currentIndex - The treeIndex of `node`\n * @param {number[]|string[]} args.path - Array of keys leading up to node to be changed\n * @param {number[]} args.lowerSiblingCounts - An array containing the count of siblings beneath the\n * previous nodes in this path\n *\n * @return {number|false} nextIndex - Index of the next sibling of `node`,\n * or false if the walk should be terminated\n */\nfunction mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot = false,\n node,\n parentNode = null,\n currentIndex,\n path = [],\n lowerSiblingCounts = []\n}) {\n const nextNode = {...node};\n\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node: nextNode, treeIndex: currentIndex})];\n const selfInfo = {\n node: nextNode,\n parentNode,\n path: selfPath,\n lowerSiblingCounts,\n treeIndex: currentIndex\n };\n\n // Return self on nodes with no children or hidden children\n if (!nextNode.children || (nextNode.expanded !== true && ignoreCollapsed && !isPseudoRoot)) {\n return {\n treeIndex: currentIndex,\n node: callback(selfInfo)\n };\n }\n\n // Get all descendants\n let childIndex = currentIndex;\n const childCount = nextNode.children.length;\n if (typeof nextNode.children !== 'function') {\n nextNode.children = nextNode.children.map((child, i) => {\n const mapResult = mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n node: child,\n parentNode: isPseudoRoot ? null : nextNode,\n currentIndex: childIndex + 1,\n lowerSiblingCounts: [...lowerSiblingCounts, childCount - i - 1],\n path: selfPath\n });\n childIndex = mapResult.treeIndex;\n\n return mapResult.node;\n });\n }\n\n return {\n node: callback(selfInfo),\n treeIndex: childIndex\n };\n}\n\n/**\n * Count all the visible (expanded) descendants in the tree data.\n *\n * @param {!Object[]} treeData - Tree data\n *\n * @return {number} count\n */\nexport function getVisibleNodeCount({treeData}) {\n const traverse = (node) => {\n if (!node.children || node.expanded !== true || typeof node.children === 'function') {\n return 1;\n }\n\n return 1 + node.children.reduce((total, currentNode) => total + traverse(currentNode), 0);\n };\n\n return treeData.reduce((total, currentNode) => total + traverse(currentNode), 0);\n}\n\n/**\n * Get the <targetIndex>th visible node in the tree data.\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!number} targetIndex - The index of the node to search for\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n *\n * @return {{\n * node: Object,\n * path: []string|[]number,\n * lowerSiblingCounts: []number\n * }|null} node - The node at targetIndex, or null if not found\n */\nexport function getVisibleNodeInfoAtIndex({treeData, index: targetIndex, getNodeKey}) {\n if (!treeData || treeData.length < 1) {\n return null;\n }\n\n // Call the tree traversal with a pseudo-root node\n const result = getNodeDataAtTreeIndexOrNextIndex({\n targetIndex,\n getNodeKey,\n node: {\n children: treeData,\n expanded: true\n },\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: [],\n isPseudoRoot: true\n });\n\n if (result.node) {\n return result;\n }\n\n return null;\n}\n\n/**\n * Walk descendants depth-first and call a callback on each\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {function} callback - Function to call on each node\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return void\n */\nexport function walk({treeData, getNodeKey, callback, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return;\n }\n\n walkDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot: true,\n node: {children: treeData},\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: []\n });\n}\n\n/**\n * Perform a depth-first transversal of the descendants and\n * make a change to every node in the tree\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {function} callback - Function to call on each node\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function map({treeData, getNodeKey, callback, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return [];\n }\n\n return mapDescendants({\n callback,\n getNodeKey,\n ignoreCollapsed,\n isPseudoRoot: true,\n node: {children: treeData},\n currentIndex: -1,\n path: [],\n lowerSiblingCounts: []\n }).node.children;\n}\n\n/**\n * Expand or close every node in the tree\n *\n * @param {!Object[]} treeData - Tree data\n * @param {?boolean} expanded - Whether the node is expanded or not\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function toggleExpandedForAll({treeData, expanded = true}) {\n return map({\n treeData,\n callback: ({node}) => ({...node, expanded}),\n getNodeKey: ({treeIndex}) => treeIndex,\n ignoreCollapsed: false\n });\n}\n\nexport const RESULT_MISS_ERROR_MESSAGE = 'No node found at the given path.';\n\n/**\n * Replaces node at path with object, or callback-defined object\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be changed\n * @param {function|any} newNode - Node to replace the node at the path with, or a function producing the new node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The changed tree data\n */\nexport function changeNodeAtPath({treeData, path, newNode, getNodeKey, ignoreCollapsed = true}) {\n const RESULT_MISS = 'RESULT_MISS';\n const traverse = ({isPseudoRoot = false, node, currentTreeIndex, pathIndex}) => {\n if (!isPseudoRoot && getNodeKey({node, treeIndex: currentTreeIndex}) !== path[pathIndex]) {\n return RESULT_MISS;\n }\n\n if (pathIndex >= path.length - 1) {\n // If this is the final location in the path, return its changed form\n return typeof newNode === 'function' ? newNode({node, treeIndex: currentTreeIndex}) : newNode;\n }\n if (!node.children) {\n // If this node is part of the path, but has no children, return the unchanged node\n throw new Error('Path referenced children of node with no children.');\n }\n\n let nextTreeIndex = currentTreeIndex + 1;\n for (let i = 0; i < node.children.length; i += 1) {\n const result = traverse({\n node: node.children[i],\n currentTreeIndex: nextTreeIndex,\n pathIndex: pathIndex + 1\n });\n\n // If the result went down the correct path\n if (result !== RESULT_MISS) {\n if (result) {\n // If the result was truthy (in this case, an object),\n // pass it to the next level of recursion up\n return {\n ...node,\n children: [...node.children.slice(0, i), result, ...node.children.slice(i + 1)]\n };\n }\n // If the result was falsy (returned from the newNode function), then\n // delete the node from the array.\n return {\n ...node,\n children: [...node.children.slice(0, i), ...node.children.slice(i + 1)]\n };\n }\n\n nextTreeIndex += 1 + getDescendantCount({node: node.children[i], ignoreCollapsed});\n }\n\n return RESULT_MISS;\n };\n\n // Use a pseudo-root node in the beginning traversal\n const result = traverse({\n node: {children: treeData},\n currentTreeIndex: -1,\n pathIndex: -1,\n isPseudoRoot: true\n });\n\n if (result === RESULT_MISS) {\n throw new Error(RESULT_MISS_ERROR_MESSAGE);\n }\n\n return result.children;\n}\n\n/**\n * Removes the node at the specified path and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object[]} changedTreeData - The tree data with the node removed\n */\nexport function removeNodeAtPath({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n return changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: null // Delete the node\n });\n}\n\n/**\n * Removes the node at the specified path and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The tree data with the node removed\n * @return {Object} result.node - The node that was removed\n * @return {number} result.treeIndex - The previous treeIndex of the removed node\n */\nexport function removeNode({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n let removedNode = null;\n let removedTreeIndex = null;\n const nextTreeData = changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: ({node, treeIndex}) => {\n // Store the target node and delete it from the tree\n removedNode = node;\n removedTreeIndex = treeIndex;\n\n return null;\n }\n });\n\n return {\n treeData: nextTreeData,\n node: removedNode,\n treeIndex: removedTreeIndex\n };\n}\n\n/**\n * Gets the node at the specified path\n *\n * @param {!Object[]} treeData\n * @param {number[]|string[]} path - Array of keys leading up to node to be deleted\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {Object|null} nodeInfo - The node info at the given path, or null if not found\n */\nexport function getNodeAtPath({treeData, path, getNodeKey, ignoreCollapsed = true}) {\n let foundNodeInfo = null;\n\n try {\n changeNodeAtPath({\n treeData,\n path,\n getNodeKey,\n ignoreCollapsed,\n newNode: ({node, treeIndex}) => {\n foundNodeInfo = {node, treeIndex};\n return node;\n }\n });\n } catch (err) {\n // Ignore the error -- the null return will be explanation enough\n }\n\n return foundNodeInfo;\n}\n\n/**\n * Adds the node to the specified parent and returns the resulting treeData.\n *\n * @param {!Object[]} treeData\n * @param {!Object} newNode - The node to insert\n * @param {number|string} parentKey - The key of the to-be parentNode of the node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} expandParent - If true, expands the parentNode specified by parentPath\n * @param {boolean=} addAsFirstChild - If true, adds new node as first child of tree\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The updated tree data\n * @return {number} result.treeIndex - The tree index at which the node was inserted\n */\nexport function addNodeUnderParent({\n treeData,\n newNode,\n parentKey = null,\n getNodeKey,\n ignoreCollapsed = true,\n expandParent = false,\n addAsFirstChild = false\n}) {\n if (parentKey === null) {\n return addAsFirstChild\n ? {\n treeData: [newNode, ...(treeData || [])],\n treeIndex: 0\n }\n : {\n treeData: [...(treeData || []), newNode],\n treeIndex: (treeData || []).length\n };\n }\n\n let insertedTreeIndex = null;\n let hasBeenAdded = false;\n const changedTreeData = map({\n treeData,\n getNodeKey,\n ignoreCollapsed,\n callback: ({node, treeIndex, path}) => {\n const key = path ? path[path.length - 1] : null;\n // Return nodes that are not the parent as-is\n if (hasBeenAdded || key !== parentKey) {\n return node;\n }\n hasBeenAdded = true;\n\n const parentNode = {\n ...node\n };\n\n if (expandParent) {\n parentNode.expanded = true;\n }\n\n // If no children exist yet, just add the single newNode\n if (!parentNode.children) {\n insertedTreeIndex = treeIndex + 1;\n return {\n ...parentNode,\n children: [newNode]\n };\n }\n\n if (typeof parentNode.children === 'function') {\n throw new Error('Cannot add to children defined by a function');\n }\n\n let nextTreeIndex = treeIndex + 1;\n for (let i = 0; i < parentNode.children.length; i += 1) {\n nextTreeIndex += 1 + getDescendantCount({node: parentNode.children[i], ignoreCollapsed});\n }\n\n insertedTreeIndex = nextTreeIndex;\n\n const children = addAsFirstChild ? [newNode, ...parentNode.children] : [...parentNode.children, newNode];\n\n return {\n ...parentNode,\n children\n };\n }\n });\n\n if (!hasBeenAdded) {\n throw new Error('No node found with the given key.');\n }\n\n return {\n treeData: changedTreeData,\n treeIndex: insertedTreeIndex\n };\n}\n\nfunction addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n isPseudoRoot = false,\n isLastChild,\n node,\n currentIndex,\n currentDepth,\n getNodeKey,\n path = []\n}) {\n const selfPath = (n) => (isPseudoRoot ? [] : [...path, getNodeKey({node: n, treeIndex: currentIndex})]);\n\n // If the current position is the only possible place to add, add it\n if (currentIndex >= minimumTreeIndex - 1 || (isLastChild && !(node.children && node.children.length))) {\n if (typeof node.children === 'function') {\n throw new Error('Cannot add to children defined by a function');\n } else {\n const extraNodeProps = expandParent ? {expanded: true} : {};\n const nextNode = {\n ...node,\n\n ...extraNodeProps,\n children: node.children ? [newNode, ...node.children] : [newNode]\n };\n\n return {\n node: nextNode,\n nextIndex: currentIndex + 2,\n insertedTreeIndex: currentIndex + 1,\n parentPath: selfPath(nextNode),\n parentNode: isPseudoRoot ? null : nextNode\n };\n }\n }\n\n // If this is the target depth for the insertion,\n // i.e., where the newNode can be added to the current node's children\n if (currentDepth >= targetDepth - 1) {\n // Skip over nodes with no children or hidden children\n if (\n !node.children ||\n typeof node.children === 'function' ||\n (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)\n ) {\n return {node, nextIndex: currentIndex + 1};\n }\n\n // Scan over the children to see if there's a place among them that fulfills\n // the minimumTreeIndex requirement\n let childIndex = currentIndex + 1;\n let insertedTreeIndex = null;\n let insertIndex = null;\n for (let i = 0; i < node.children.length; i += 1) {\n // If a valid location is found, mark it as the insertion location and\n // break out of the loop\n if (childIndex >= minimumTreeIndex) {\n insertedTreeIndex = childIndex;\n insertIndex = i;\n break;\n }\n\n // Increment the index by the child itself plus the number of descendants it has\n childIndex += 1 + getDescendantCount({node: node.children[i], ignoreCollapsed});\n }\n\n // If no valid indices to add the node were found\n if (insertIndex === null) {\n // If the last position in this node's children is less than the minimum index\n // and there are more children on the level of this node, return without insertion\n if (childIndex < minimumTreeIndex && !isLastChild) {\n return {node, nextIndex: childIndex};\n }\n\n // Use the last position in the children array to insert the newNode\n insertedTreeIndex = childIndex;\n insertIndex = node.children.length;\n }\n\n // Insert the newNode at the insertIndex\n const nextNode = {\n ...node,\n children: [...node.children.slice(0, insertIndex), newNode, ...node.children.slice(insertIndex)]\n };\n\n // Return node with successful insert result\n return {\n node: nextNode,\n nextIndex: childIndex,\n insertedTreeIndex,\n parentPath: selfPath(nextNode),\n parentNode: isPseudoRoot ? null : nextNode\n };\n }\n\n // Skip over nodes with no children or hidden children\n if (\n !node.children ||\n typeof node.children === 'function' ||\n (node.expanded !== true && ignoreCollapsed && !isPseudoRoot)\n ) {\n return {node, nextIndex: currentIndex + 1};\n }\n\n // Get all descendants\n let insertedTreeIndex = null;\n let pathFragment = null;\n let parentNode = null;\n let childIndex = currentIndex + 1;\n let newChildren = node.children;\n if (typeof newChildren !== 'function') {\n newChildren = newChildren.map((child, i) => {\n if (insertedTreeIndex !== null) {\n return child;\n }\n\n const mapResult = addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n isLastChild: isLastChild && i === newChildren.length - 1,\n node: child,\n currentIndex: childIndex,\n currentDepth: currentDepth + 1,\n getNodeKey,\n path: [] // Cannot determine the parent path until the children have been processed\n });\n\n if ('insertedTreeIndex' in mapResult) {\n ({insertedTreeIndex, parentNode, parentPath: pathFragment} = mapResult);\n }\n\n childIndex = mapResult.nextIndex;\n\n return mapResult.node;\n });\n }\n\n const nextNode = {...node, children: newChildren};\n const result = {\n node: nextNode,\n nextIndex: childIndex\n };\n\n if (insertedTreeIndex !== null) {\n result.insertedTreeIndex = insertedTreeIndex;\n result.parentPath = [...selfPath(nextNode), ...pathFragment];\n result.parentNode = parentNode;\n }\n\n return result;\n}\n\n/**\n * Insert a node into the tree at the given depth, after the minimum index\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!number} depth - The depth to insert the node at (the first level of the array being depth 0)\n * @param {!number} minimumTreeIndex - The lowest possible treeIndex to insert the node at\n * @param {!Object} newNode - The node to insert into the tree\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n * @param {boolean=} expandParent - If true, expands the parent of the inserted node\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n *\n * @return {Object} result\n * @return {Object[]} result.treeData - The tree data with the node added\n * @return {number} result.treeIndex - The tree index at which the node was inserted\n * @return {number[]|string[]} result.path - Array of keys leading to the node location after insertion\n * @return {Object} result.parentNode - The parent node of the inserted node\n */\nexport function insertNode({\n treeData,\n depth: targetDepth,\n minimumTreeIndex,\n newNode,\n getNodeKey = () => {},\n ignoreCollapsed = true,\n expandParent = false\n}) {\n if (!treeData && targetDepth === 0) {\n return {\n treeData: [newNode],\n treeIndex: 0,\n path: [getNodeKey({node: newNode, treeIndex: 0})],\n parentNode: null\n };\n }\n\n const insertResult = addNodeAtDepthAndIndex({\n targetDepth,\n minimumTreeIndex,\n newNode,\n ignoreCollapsed,\n expandParent,\n getNodeKey,\n isPseudoRoot: true,\n isLastChild: true,\n node: {children: treeData},\n currentIndex: -1,\n currentDepth: -1\n });\n\n if (!('insertedTreeIndex' in insertResult)) {\n throw new Error('No suitable position found to insert.');\n }\n\n const treeIndex = insertResult.insertedTreeIndex;\n return {\n treeData: insertResult.node.children,\n treeIndex,\n path: [...insertResult.parentPath, getNodeKey({node: newNode, treeIndex})],\n parentNode: insertResult.parentNode\n };\n}\n\n/**\n * Get tree data flattened.\n *\n * @param {!Object[]} treeData - Tree data\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`\n *\n * @return {{\n * node: Object,\n * path: []string|[]number,\n * lowerSiblingCounts: []number\n * }}[] nodes - The node array\n */\nexport function getFlatDataFromTree({treeData, getNodeKey, ignoreCollapsed = true}) {\n if (!treeData || treeData.length < 1) {\n return [];\n }\n\n const flattened = [];\n walk({\n treeData,\n getNodeKey,\n ignoreCollapsed,\n callback: (nodeInfo) => {\n flattened.push(nodeInfo);\n }\n });\n\n return flattened;\n}\n\n/**\n * Generate a tree structure from flat data.\n *\n * @param {!Object[]} flatData\n * @param {!function=} getKey - Function to get the key from the nodeData\n * @param {!function=} getParentKey - Function to get the parent key from the nodeData\n * @param {string|number=} rootKey - The value returned by `getParentKey` that corresponds to the root node.\n * For example, if your nodes have id 1-99, you might use rootKey = 0\n *\n * @return {Object[]} treeData - The flat data represented as a tree\n */\nexport function getTreeFromFlatData({\n flatData,\n getKey = (node) => node.id,\n getParentKey = (node) => node.parentId,\n rootKey = '0'\n}) {\n if (!flatData) {\n return [];\n }\n\n const childrenToParents = {};\n flatData.forEach((child) => {\n const parentKey = getParentKey(child);\n\n if (parentKey in childrenToParents) {\n childrenToParents[parentKey].push(child);\n } else {\n childrenToParents[parentKey] = [child];\n }\n });\n\n if (!(rootKey in childrenToParents)) {\n return [];\n }\n\n const trav = (parent) => {\n const parentKey = getKey(parent);\n if (parentKey in childrenToParents) {\n return {\n ...parent,\n children: childrenToParents[parentKey].map((child) => trav(child))\n };\n }\n\n return {...parent};\n };\n\n return childrenToParents[rootKey].map((child) => trav(child));\n}\n\n/**\n * Check if a node is a descendant of another node.\n *\n * @param {!Object} older - Potential ancestor of younger node\n * @param {!Object} younger - Potential descendant of older node\n *\n * @return {boolean}\n */\nexport function isDescendant(older, younger) {\n return (\n !!older.children &&\n typeof older.children !== 'function' &&\n older.children.some((child) => child === younger || isDescendant(child, younger))\n );\n}\n\n/**\n * Get the maximum depth of the children (the depth of the root node is 0).\n *\n * @param {!Object} node - Node in the tree\n * @param {?number} depth - The current depth\n *\n * @return {number} maxDepth - The deepest depth in the tree\n */\nexport function getDepth(node, depth = 0) {\n if (!node.children) {\n return depth;\n }\n\n if (typeof node.children === 'function') {\n return depth + 1;\n }\n\n return node.children.reduce((deepest, child) => Math.max(deepest, getDepth(child, depth + 1)), depth);\n}\n\n/**\n * Find nodes matching a search query in the tree,\n *\n * @param {!function} getNodeKey - Function to get the key from the nodeData and tree index\n * @param {!Object[]} treeData - Tree data\n * @param {?string|number} searchQuery - Function returning a boolean to indicate whether the node is a match or not\n * @param {!function} searchMethod - Function returning a boolean to indicate whether the node is a match or not\n * @param {?number} searchFocusOffset - The offset of the match to focus on\n * (e.g., 0 focuses on the first match, 1 on the second)\n * @param {boolean=} expandAllMatchPaths - If true, expands the paths to any matched node\n * @param {boolean=} expandFocusMatchPaths - If true, expands the path to the focused node\n *\n * @return {Object[]} matches - An array of objects containing the matching `node`s, their `path`s and `treeIndex`s\n * @return {Object[]} treeData - The original tree data with all relevant nodes expanded.\n * If expandAllMatchPaths and expandFocusMatchPaths are both false,\n * it will be the same as the original tree data.\n */\nexport function find({\n getNodeKey,\n treeData,\n searchQuery,\n searchMethod,\n searchFocusOffset,\n expandAllMatchPaths = false,\n expandFocusMatchPaths = true\n}) {\n let matchCount = 0;\n const trav = ({isPseudoRoot = false, node, currentIndex, path = []}) => {\n let matches = [];\n let isSelfMatch = false;\n let hasFocusMatch = false;\n // The pseudo-root is not considered in the path\n const selfPath = isPseudoRoot ? [] : [...path, getNodeKey({node, treeIndex: currentIndex})];\n const extraInfo = isPseudoRoot\n ? null\n : {\n path: selfPath,\n treeIndex: currentIndex\n };\n\n // Nodes with with children that aren't lazy\n const hasChildren = node.children && typeof node.children !== 'function' && node.children.length > 0;\n\n // Examine the current node to see if it is a match\n if (!isPseudoRoot && searchMethod({...extraInfo, node, searchQuery})) {\n if (matchCount === searchFocusOffset) {\n hasFocusMatch = true;\n }\n\n // Keep track of the number of matching nodes, so we know when the searchFocusOffset\n // is reached\n matchCount += 1;\n\n // We cannot add this node to the matches right away, as it may be changed\n // during the search of the descendants. The entire node is used in\n // comparisons between nodes inside the `matches` and `treeData` results\n // of this method (`find`)\n isSelfMatch = true;\n }\n\n let childIndex = currentIndex;\n const newNode = {...node};\n if (hasChildren) {\n // Get all descendants\n newNode.children = newNode.children.map((child) => {\n const mapResult = trav({\n node: child,\n currentIndex: childIndex + 1,\n path: selfPath\n });\n\n // Ignore hidden nodes by only advancing the index counter to the returned treeIndex\n // if the child is expanded.\n //\n // The child could have been expanded from the start,\n // or expanded due to a matching node being found in its descendants\n if (mapResult.node.expanded) {\n childIndex = mapResult.treeIndex;\n } else {\n childIndex += 1;\n }\n\n if (mapResult.matches.length > 0 || mapResult.hasFocusMatch) {\n matches = [...matches, ...mapResult.matches];\n if (mapResult.hasFocusMatch) {\n hasFocusMatch = true;\n }\n\n // Expand the current node if it has descendants matching the search\n // and the settings are set to do so.\n if (\n (expandAllMatchPaths && mapResult.matches.length > 0) ||\n ((expandAllMatchPaths || expandFocusMatchPaths) && mapResult.hasFocusMatch)\n ) {\n newNode.expanded = true;\n }\n }\n\n return mapResult.node;\n });\n }\n\n // Cannot assign a treeIndex to hidden nodes\n if (!isPseudoRoot && !newNode.expanded) {\n matches = matches.map((match) => ({\n ...match,\n treeIndex: null\n }));\n }\n\n // Add this node to the matches if it fits the search criteria.\n // This is performed at the last minute so newNode can be sent in its final form.\n if (isSelfMatch) {\n matches = [{...extraInfo, node: newNode}, ...matches];\n }\n\n return {\n node: matches.length > 0 ? newNode : node,\n matches,\n hasFocusMatch,\n treeIndex: childIndex\n };\n };\n\n const result = trav({\n node: {children: treeData},\n isPseudoRoot: true,\n currentIndex: -1\n });\n\n return {\n matches: result.matches,\n treeData: result.node.children\n };\n}\n\nexport default {\n find,\n getDepth,\n isDescendant,\n getTreeFromFlatData,\n getFlatDataFromTree,\n insertNode,\n addNodeUnderParent,\n getNodeAtPath,\n removeNode,\n removeNodeAtPath,\n changeNodeAtPath,\n toggleExpandedForAll,\n map,\n walk,\n getVisibleNodeInfoAtIndex,\n getVisibleNodeCount,\n getDescendantCount\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n editor: {\n display: 'flex',\n flexDirection: 'column',\n padding: '0 24px 5px',\n overflowX: 'hidden'\n },\n title: {\n color: 'rgba(0, 0, 0, 0.6)',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '24px',\n margin: '17px 0 24px'\n },\n item: {\n marginBottom: '20px'\n },\n dense: {\n marginBottom: 0\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n }\n});\n","import React, {useCallback, useEffect, useMemo, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {always, concat, differenceWith, equals, forEach, omit, path, pick, pipe, prop, when, uniq, curry} from 'ramda';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport {\n createTemporaryEntity,\n findRelatedTemporaryEntities,\n getActivenessAttributes,\n getCreatableAttributeTypes,\n getEntityType,\n getErrorMessage,\n getErrorId,\n omitMarks,\n relationEditorAttributeTypesSelectionStrategy,\n validateConnection,\n updateConnectionEntityLabel,\n isTempUri,\n isEmptyValue,\n getRelationAttributesList,\n getDefaultRelationTypeObject,\n getInOutRelations,\n isSuggestMode,\n isAttributeTypeError,\n getRelationUriFromConnection,\n getRelationEditorActiveError,\n getRelationAttributesFromConnection,\n getEntityUriFromConnection,\n Connection,\n RelationsViewConfig,\n Mode,\n Metadata,\n AttributeError\n} from '@reltio/mdm-sdk';\nimport ConnectionRelationTypeSelector from '../ConnectionRelationTypeSelector/ConnectionRelationTypeSelector';\nimport ErrorWrapper from '../ErrorWrapper/ErrorWrapper';\nimport EntitySelector from '../attributes/editMode/EntitySelector/EntitySelector';\nimport AttributesList from '../attributes/editMode/AttributesList';\nimport {withContext} from '../../HOCs';\nimport {\n isHighlightedErrorType,\n ScrollToElementContext,\n useMdmAction,\n useMdmAuthoringItemsByEntityType,\n useMdmEntity,\n useMdmGlobalSearchRequestOptions,\n useMdmInitialConnection,\n useMdmInitialConnectionTempEntity,\n useMdmModifiedEntities,\n useMdmModifiedEntity,\n useMdmProfileErrors\n} from '../../contexts';\nimport {useScrollToAttributeError} from '../../hooks';\n\nimport {useStyles} from './styles';\n\nconst areRelatedEntitiesChanged = (initial, actual) =>\n initial.length !== actual.length || initial.some((_, i) => initial[i] !== actual[i]);\n\ntype Props = {\n connection: Connection;\n config: RelationsViewConfig;\n mode: Mode;\n metadata: Metadata;\n highlightedError?: React.ContextType<typeof ScrollToElementContext>;\n};\n\nconst RelationEditor = ({connection, config, mode, metadata, highlightedError}: Props) => { //NOSONAR\n const styles = useStyles();\n\n const {relationType, direction} = connection.relation;\n const isNew = connection.isNew;\n const entityUri = getEntityUriFromConnection(connection);\n const relationUri = getRelationUriFromConnection(connection);\n const isTempEntity = isTempUri(entityUri);\n\n const mdmSetInitialInfo = useMdmAction('setInitialInfo');\n const setRelationType = useMdmAction('setRelationType');\n const closeRelationEditor = useMdmAction('closeRelationEditor');\n const entityCreated = useMdmAction('entityCreated');\n const entityDeleted = useMdmAction('entityDeleted');\n const setRelationEntity = useMdmAction('setRelationEntity');\n const errorDeactivated = useMdmAction('errorDeactivated');\n const errorsSet = useMdmAction('errorsSet');\n const addAttributes = useMdmAction('addAttributes');\n const modifyAttribute = useMdmAction('modifyAttribute');\n const removeAttribute = useMdmAction('removeAttribute');\n const addRelation = useMdmAction('addRelation');\n const editRelation = useMdmAction('editRelation');\n\n const mainEntity = useMdmEntity();\n const initialConnection = useMdmInitialConnection(config.id, relationUri);\n const initialModifiedEntity = useMdmInitialConnectionTempEntity(config.id, relationUri);\n const mdmModifiedEntity = useMdmModifiedEntity(entityUri);\n const mdmAllModifiedEntities = useMdmModifiedEntities();\n const globalSearchRequestOptions = useMdmGlobalSearchRequestOptions(['ovOnly']);\n const profileErrors = useMdmProfileErrors();\n const authoringItems = useMdmAuthoringItemsByEntityType(mainEntity?.type);\n\n const error = getRelationEditorActiveError(connection, profileErrors);\n const modifiedEntity = isTempEntity ? mdmModifiedEntity : null;\n const allModifiedEntities = isTempEntity ? mdmAllModifiedEntities : null;\n\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n const {inRelations: inRelationTypes = [], outRelations: outRelationTypes = []} = useMemo(\n () =>\n getInOutRelations({\n content: connection.parentEntityUri ? config.contentSecondLevel : config.content,\n direction,\n relationType,\n mode,\n metadata\n }),\n [config, direction, relationType, mode, metadata, connection.parentEntityUri]\n );\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relationType),\n [relationType, metadata]\n );\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection.relation)\n }),\n [connection]\n );\n const relatedTempEntities = useMemo(\n () => findRelatedTemporaryEntities(allModifiedEntities, modifiedEntity),\n [allModifiedEntities, modifiedEntity]\n );\n const relatedTempEntitiesUrisHistory = useRef([]);\n\n const setInitialInfo = useCallback(\n (entity, connection) => {\n mdmSetInitialInfo(config.id, relationUri, entity, connection);\n },\n [mdmSetInitialInfo]\n );\n\n useEffect(() => {\n if (!initialConnection) {\n setInitialInfo(modifiedEntity, connection);\n }\n }, []);\n\n useEffect(() => {\n relatedTempEntitiesUrisHistory.current = pipe(\n concat(relatedTempEntities.map(prop('uri'))),\n uniq\n )(relatedTempEntitiesUrisHistory.current);\n }, [relatedTempEntities]);\n const initialRelatedTempEntities = useRef(relatedTempEntities);\n const defaultRelationType = getDefaultRelationTypeObject(inRelationTypes, outRelationTypes);\n const initialConnectionChangeablePart = pick(['entity', 'relation'], initialConnection || {});\n const connectionChangeablePart = pick(['entity', 'relation'], connection);\n const hasChanges =\n !isEmptyValue(path(['entity'], connection)) &&\n (!equals(initialConnectionChangeablePart, connectionChangeablePart) ||\n !equals(initialModifiedEntity, modifiedEntity) ||\n areRelatedEntitiesChanged(initialRelatedTempEntities.current, relatedTempEntities));\n const applyAction = useMemo(() => curry(isNew ? addRelation : editRelation), [isNew, addRelation, editRelation]);\n const canCreateNewEntity = !isSuggestMode(mode) || !isTempUri(mainEntity?.uri) || !isEmptyValue(authoringItems);\n\n const onRelationTypeChange = useCallback(\n (relationType) => setRelationType(config.id, relationUri, relationType),\n [config, relationUri, setRelationType]\n );\n\n const handleClose = useCallback(\n () => closeRelationEditor(config.id, relationUri),\n [config, relationUri, closeRelationEditor]\n );\n\n const updateModifiedEntityLabel = useCallback(\n (connection) => {\n if (modifiedEntity) {\n const entityType = getEntityType(metadata, modifiedEntity.type);\n return updateConnectionEntityLabel(entityType, modifiedEntity, connection);\n }\n return connection;\n },\n [modifiedEntity, metadata]\n );\n\n const setModifiedEntity = useCallback((entity) => entityCreated(entity), [entityCreated]);\n\n const deleteModifiedEntity = useCallback((entityUri) => entityDeleted(entityUri), [entityDeleted]);\n\n const onChangeEntity = useCallback(\n (entity) => {\n if (modifiedEntity) {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n setRelationEntity(config.id, relationUri, entity);\n if (error) {\n errorDeactivated(getErrorId(error));\n }\n },\n [config.id, relationUri, setRelationEntity, errorDeactivated, modifiedEntity, deleteModifiedEntity, error]\n );\n\n const validate = useCallback(() => {\n const errors = validateConnection(metadata, allModifiedEntities, connection);\n errorsSet(errors);\n return errors.length === 0;\n }, [connection, metadata, allModifiedEntities, errorsSet]);\n\n const resetErrors = useCallback(() => errorsSet([]), [errorsSet]);\n\n const onApply = useCallback(\n pipe(\n always(connection),\n when(\n validate,\n pipe(\n omitMarks,\n updateModifiedEntityLabel,\n omit(['initial']),\n applyAction(config.id),\n always(\n differenceWith(\n equals,\n relatedTempEntitiesUrisHistory.current,\n relatedTempEntities.map(prop('uri'))\n )\n ),\n forEach(deleteModifiedEntity),\n handleClose\n )\n )\n ),\n [connection, config, updateModifiedEntityLabel, validate, relatedTempEntities]\n );\n\n const onCancel = useCallback(() => {\n if (modifiedEntity !== initialModifiedEntity) {\n if (initialModifiedEntity) {\n setModifiedEntity(initialModifiedEntity);\n if (modifiedEntity && modifiedEntity.uri !== initialModifiedEntity.uri) {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n } else {\n deleteModifiedEntity(modifiedEntity.uri);\n }\n }\n const initialTempEntities = initialRelatedTempEntities.current;\n const entitiesUrisToDelete = differenceWith(\n equals,\n relatedTempEntitiesUrisHistory.current,\n initialTempEntities.map(prop('uri'))\n );\n entitiesUrisToDelete.forEach(deleteModifiedEntity);\n initialTempEntities.forEach(setModifiedEntity);\n resetErrors();\n handleClose();\n }, [handleClose, setModifiedEntity, deleteModifiedEntity, resetErrors, modifiedEntity, initialModifiedEntity]);\n\n const onAddAttributes = useCallback(\n (params) => addAttributes(params.map((param) => ({...param, viewId: config.id}))),\n [config.id, addAttributes]\n );\n\n const onChangeAttribute = useCallback(\n (params) => modifyAttribute({...params, viewId: config.id}),\n [config.id, modifyAttribute]\n );\n\n const onDeleteAttribute = useCallback(\n (params) => removeAttribute({...params, viewId: config.id}),\n [config.id, removeAttribute]\n );\n\n const onCreateEntity = useCallback(\n (entityTypeUri, initValue) => {\n const entityType = getEntityType(metadata, entityTypeUri);\n const newEntityAttrTypes = pipe(\n relationEditorAttributeTypesSelectionStrategy,\n getCreatableAttributeTypes(mode)\n )(entityType);\n const newEntity = createTemporaryEntity({\n entityTypeUri,\n initValue,\n attributeTypes: newEntityAttrTypes,\n metadata,\n mode\n });\n onChangeEntity(newEntity);\n setModifiedEntity(newEntity);\n },\n [setModifiedEntity, onChangeEntity, mode, metadata]\n );\n const errorMessage = getErrorMessage(error);\n\n const getEntityTypesUris = useCallback(() => {\n const {content, contentSecondLevel} = config;\n\n if (contentSecondLevel && connection.parentEntityUri) {\n return contentSecondLevel.entityTypes;\n }\n\n return content.entityTypes;\n }, [config, connection.parentEntityUri]);\n\n return (\n <>\n <div className={styles.editor}>\n <Typography className={styles.title}>\n {isNew ? i18n.text('Add new item') : i18n.text('Edit item')}\n </Typography>\n {defaultRelationType === null && (\n <ConnectionRelationTypeSelector\n className={styles.item}\n relation={connection.relation}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChange={onRelationTypeChange}\n />\n )}\n {Boolean(relationType) && (\n <>\n <div ref={ref} className={errorClassName}>\n <ErrorWrapper errorMessage={errorMessage}>\n <EntitySelector\n className={classnames(styles.item, {\n [styles.dense]:\n errorMessage ||\n (connection.entity && isTempUri(connection.entity.entityUri))\n })}\n entity={connection.entity || {}}\n entityTypesUris={getEntityTypesUris() || []}\n max={config.max || 20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={mode}\n onChange={onChangeEntity}\n onCreate={canCreateNewEntity ? onCreateEntity : undefined}\n metadata={metadata}\n attributeTypesSelectionStrategy={relationEditorAttributeTypesSelectionStrategy}\n />\n </ErrorWrapper>\n </div>\n <AttributesList\n className={styles.item}\n attrTypes={firstLevelRelationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={true}\n mode={mode}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n </>\n )}\n </div>\n <div className={styles.actionButtons}>\n <Button onClick={onCancel}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!hasChanges} onClick={onApply}>\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {connection}) => {\n const {element = {}, type} = contextValue || {};\n const {relationUri, relationType} = connection.relation;\n const isHighlighted =\n isHighlightedErrorType(type) && isAttributeTypeError(element as AttributeError, relationUri, relationType);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n RelationEditor\n);\n","import React, {useEffect, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {MapInstance} from '../../types';\n\ntype Props = {\n children: React.ReactNode;\n className?: string;\n position: number;\n map: MapInstance;\n};\n\nexport const MapControlContainer = ({children, className, position, map}: Props) => {\n const [controlElement, setControlElement] = useState(null);\n\n useEffect(() => {\n const controlDiv = document.createElement('div');\n const divIndex = map.controls[position].length;\n map.controls[position].push(controlDiv);\n setControlElement(controlDiv);\n\n return () => {\n map.controls[position].removeAt(divIndex);\n };\n }, [map, position]);\n\n useEffect(() => {\n if (controlElement && className) {\n controlElement.classList.add(className);\n }\n }, [className, controlElement]);\n\n if (controlElement) {\n return createPortal(children, controlElement);\n }\n\n return null;\n};\n","import React from 'react';\n\nconst SvgRadius: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={18} height={18} viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.61 8.568A1.666 1.666 0 119.432 7.39l3.656-3.657a6.668 6.668 0 101.179 1.179L10.61 8.568zm-7.503 6.325A8.333 8.333 0 1114.893 3.107 8.333 8.333 0 013.107 14.893z\"\n fill=\"#000\"\n stroke=\"none\"\n strokeWidth={1}\n fillRule=\"evenodd\"\n opacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgRadius;\n","import React from 'react';\n\nconst SvgDraw: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <path\n d=\"M18.29 11.44a1.49 1.49 0 012.12 0l1.15 1.15c.59.58.59 1.53 0 2.12L16.27 20H13v-3.27zM18.174 4c0 1.71-.26 3.285-.932 4.563-.946 1.798-2.609 2.724-4.906 2.46l-.855-.116c-4.382-.544-6.626.53-6.626 3.609 0 1.968 1.105 2.924 3.267 3.304.692.121 1.306.165 2.234.176L11 18v2l-.698-.003c-1.016-.013-1.71-.063-2.526-.206-3.018-.53-4.921-2.176-4.921-5.274 0-4.819 3.71-6.378 9.52-5.505 1.575.237 2.506-.255 3.098-1.38.451-.858.666-2.02.697-3.307L16.174 4h2zM18 13.97l-3.45 3.45v1.03h1.03L19.03 15 18 13.97z\"\n id=\"Draw_svg__a\"\n />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"Draw_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#Draw_svg__a\" />\n </mask>\n <g mask=\"url(#Draw_svg__b)\" fill=\"#000\" fillOpacity={0.54}>\n <path d=\"M0 0h24v24H0z\" />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgDraw;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n margin: '2px',\n display: 'flex',\n alignItems: 'center'\n },\n button: {\n color: 'rgba(0,0,0,0.54)',\n padding: 0,\n height: '24px',\n width: '24px',\n minWidth: 0\n },\n icon: {\n width: '20px',\n height: '20px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport {withTooltip} from '../../../../HOCs';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport {MAP_DRAWING_MODES} from '../../../../constants';\nimport RadiusIcon from '../../../../icons/Radius';\nimport DrawIcon from '../../../../icons/Draw';\nimport {DrawingMode, DrawingModes} from '../../types';\nimport {useStyles} from './styles';\n\nexport const ButtonWithTooltip = withTooltip(Button);\n\nconst getIcon = (mode: DrawingMode) => {\n switch (mode) {\n case MAP_DRAWING_MODES.CIRCLE:\n return RadiusIcon;\n case MAP_DRAWING_MODES.POLYGON:\n return DrawIcon;\n default:\n return null;\n }\n};\n\ntype Props = {\n onDrawingModeChanged: (value: DrawingMode | null) => void;\n drawingMode: DrawingMode | null;\n drawingModes: DrawingModes;\n hasActiveOverlay: boolean;\n onClearOverlay: () => void;\n};\n\nexport const TopRightMapControls = ({\n drawingMode,\n drawingModes = [],\n hasActiveOverlay,\n onDrawingModeChanged,\n onClearOverlay\n}: Props) => {\n const styles = useStyles();\n\n const changeDrawingModeTo = (drawingMode) => () => {\n onDrawingModeChanged(drawingMode);\n };\n\n return (\n <div className={styles.container}>\n {drawingMode || hasActiveOverlay ? (\n <ButtonWithTooltip\n tooltipTitle={i18n.text('Clear area')}\n className={styles.button}\n onClick={hasActiveOverlay ? onClearOverlay : changeDrawingModeTo(null)}\n >\n <HighlightOffIcon className={styles.icon} />\n </ButtonWithTooltip>\n ) : (\n drawingModes.map((mode) => {\n const Icon = getIcon(mode);\n return (\n <ButtonWithTooltip\n tooltipTitle={i18n.text('Draw area')}\n key={mode}\n className={styles.button}\n onClick={changeDrawingModeTo(mode)}\n >\n <Icon className={styles.icon} />\n </ButtonWithTooltip>\n );\n })\n )}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n height: '28px',\n marginRight: '7px',\n marginLeft: 0\n },\n label: {\n fontSize: '11px',\n alignSelf: 'center',\n lineHeight: '13px',\n marginLeft: '2px',\n letterSpacing: 0\n },\n checkbox: {\n width: '20px',\n height: '20px',\n boxSizing: 'content-box',\n padding: '5px',\n '& svg': {\n width: '16px',\n height: '16px'\n }\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport {useStyles} from './styles';\n\ntype Props = {\n isSearchOnMapMove: boolean;\n onChangeIsSearchOnMapMove: (value: boolean) => void;\n};\n\nexport const TopCenterMapControls = ({isSearchOnMapMove, onChangeIsSearchOnMapMove}: Props) => {\n const styles = useStyles();\n const onChange = (event) => {\n onChangeIsSearchOnMapMove(event.target.checked);\n };\n return (\n <FormControlLabel\n classes={{\n root: styles.container,\n label: styles.label\n }}\n control={<Checkbox checked={isSearchOnMapMove} onChange={onChange} className={styles.checkbox} />}\n label={i18n.text('Search as I move the map')}\n />\n );\n};\n","import {MAP_DRAWING_MODES, MAP_MINIMUM_SCALE_RADIUS} from '../../../constants';\nimport {DrawingMode, EntityMarker, Overlay, MapInstance} from '../types';\n\nexport const getMapBoundsPolygon = (map: MapInstance) => {\n const bounds = map.getBounds();\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n const neLat = ne.lat(),\n neLng = ne.lng(),\n swLat = sw.lat(),\n swLng = sw.lng();\n const additionalPoint1 = [];\n const additionalPoint2 = [];\n if (!((neLng === 180 && swLng === -180) || (neLng === -180 && swLng === 180))) {\n // excluding corner case when we see more than one \"map unfolding\" (in this case google maps automatically set 180 and -180),\n // we can't describe map bounds as just rectangle, because lng distance can be more than 180\",\n // so we need to add additional points to have correct polygon\n const center = bounds.getCenter();\n additionalPoint1.push([neLat, center.lng()]);\n additionalPoint2.push([swLat, center.lng()]);\n }\n return [[neLat, neLng], ...additionalPoint1, [neLat, swLng], [swLat, swLng], ...additionalPoint2, [swLat, neLng]];\n};\n\nexport const getDrawingMode = (drawingMode: DrawingMode) => {\n switch (drawingMode) {\n case MAP_DRAWING_MODES.CIRCLE:\n return window.google.maps.drawing.OverlayType.CIRCLE;\n case MAP_DRAWING_MODES.POLYGON:\n return window.google.maps.drawing.OverlayType.POLYGON;\n default:\n return null;\n }\n};\n\nexport const fitMapBoundsForMarkers = (markers: EntityMarker[], map: MapInstance, overlay: Overlay) => {\n const bounds = new window.google.maps.LatLngBounds();\n\n markers.forEach((marker) => bounds.extend(marker.point));\n\n if (markers.length === 1) {\n const center = bounds.getCenter();\n\n bounds.extend(\n new window.google.maps.LatLng(\n center.lat() + MAP_MINIMUM_SCALE_RADIUS,\n center.lng() + MAP_MINIMUM_SCALE_RADIUS\n )\n );\n bounds.extend(\n new window.google.maps.LatLng(\n center.lat() - MAP_MINIMUM_SCALE_RADIUS,\n center.lng() - MAP_MINIMUM_SCALE_RADIUS\n )\n );\n }\n\n map.fitBounds(bounds);\n\n if (overlay) {\n fitMapBoundsForOverlay(map, overlay, bounds);\n }\n};\n\nexport const fitMapBoundsForOverlay = (map: MapInstance, overlay: Overlay, existingBounds?) => {\n if (overlay.path) {\n const bounds = existingBounds || new window.google.maps.LatLngBounds();\n overlay.path.forEach(({lat, lng}) => bounds.extend(new window.google.maps.LatLng(lat, lng)));\n map.fitBounds(bounds);\n }\n};\n","export const MARKER = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"22px\" height=\"32px\" viewBox=\"0 0 22 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>View / Map / Marker / Large</title>\n <defs>\n <radialGradient cx=\"50%\" cy=\"50.2950175%\" fx=\"50%\" fy=\"50.2950175%\" r=\"49.7049825%\" gradientTransform=\"translate(0.500000,0.502950),scale(0.777778,1.000000),rotate(90.000000),scale(1.000000,1.293560),translate(-0.500000,-0.502950)\" id=\"radialGradient-1\">\n <stop stop-color=\"#000000\" offset=\"0%\"></stop>\n <stop stop-color=\"#000000\" stop-opacity=\"0\" offset=\"100%\"></stop>\n </radialGradient>\n <path d=\"M20,1 C20.5522847,1 21,1.44771525 21,2 L21,20 C21,20.5522847 20.5522847,21 20,21 L15.2374606,21.0021908 C14.9306693,21.3935449 14.6510143,21.7632851 14.3885453,22.1256523 C12.8309725,24.2760522 12,26.0137017 12,27.5 C12,28.0522847 11.5522847,28.5 11,28.5 C10.4477153,28.5 10,28.0522847 10,27.5 C10,25.7886708 8.84033182,23.6810997 6.73798027,21.0014567 L2,21 C1.44771525,21 1,20.5522847 1,20 L1,2 C1,1.44771525 1.44771525,1 2,1 L20,1 Z\" id=\"path-2\"></path>\n </defs>\n <g id=\"View-/-Map-/-Marker-/-Large\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse id=\"Oval\" fill=\"url(#radialGradient-1)\" opacity=\"0.12\" cx=\"11\" cy=\"28.5\" rx=\"4.5\" ry=\"3.5\"></ellipse>\n <path d=\"M21,0 C21.5522847,-1.01453063e-16 22,0.44771525 22,1 L22,21 C22,21.5522847 21.5522847,22 21,22 L15.7283832,22.0012846 C15.5422129,22.2445529 15.3664776,22.4802332 15.1984183,22.7122576 C13.7560833,24.7035592 13,26.2846074 13,27.5 L13,27.5 L12.9945143,27.6492623 C12.9181651,28.6841222 12.0543618,29.5 11,29.5 C9.8954305,29.5 9,28.6045695 9,27.5 L9,27.5 L8.99485006,27.3298651 C8.91582184,26.0024976 7.93016704,24.2171459 6.23940611,22.000704 L1,22 C0.44771525,22 6.76353751e-17,21.5522847 0,21 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 L21,0 Z\" id=\"Path-3\" fill=\"#FFFFFF\"></path>\n <mask id=\"mask-3\" fill=\"white\">\n <use xlink:href=\"#path-2\"></use>\n </mask>\n <use id=\"Path-2\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" xlink:href=\"#path-2\"></use>\n <rect id=\"Entity-type\" fill=\"#24A8E8\" mask=\"url(#mask-3)\" x=\"0\" y=\"0\" width=\"22\" height=\"32\"></rect>\n </g>\n</svg>`;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n popper: {\n maxWidth: '263px',\n minWidth: '150px',\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)',\n backgroundColor: 'white',\n borderRadius: '2px'\n }\n});\n","import React, {memo, useCallback, useContext, useRef, useState} from 'react';\nimport {pathEq} from 'ramda';\nimport {Marker, InfoBox, MarkerProps} from '@react-google-maps/api';\nimport ProfileCard from '../../ProfileCard/ProfileCard';\nimport Popper from '../../Popper/Popper';\nimport {debounce, svg2Url} from '@reltio/mdm-sdk';\nimport {EntityMarkerContext} from '../../../contexts';\nimport {MARKER} from './icons/marker.inline.svg';\nimport {HOVERED_MARKER} from './icons/marker-hover.inline.svg';\nimport {EntityMarker as EntityMarkerType} from '../types';\nimport {useStyles} from './styles';\n\nconst HIDE_DEBOUNCE_INTERVAL = 50;\nconst MARKER_WIDTH = 22;\nconst MARKER_HEIGHT = 32;\nconst MARKER_CARD_MARGIN = 8;\n\nconst hoveredMarkerIcon = svg2Url(HOVERED_MARKER);\nconst markerIcon = svg2Url(MARKER);\n\ntype Props = {\n marker: EntityMarkerType;\n onClick: (marker: EntityMarkerType) => void;\n} & Omit<MarkerProps, 'onClick' | 'icon' | 'position' | 'visible' | 'onMouseOver' | 'onMouseOut'>;\n\nconst EntityMarker = ({marker, onClick, ...otherProps}: Props) => {\n const styles = useStyles();\n const popperAnchor = useRef();\n const [hovered, setHovered] = useState(false);\n const {activeEntityUri} = useContext(EntityMarkerContext);\n const isActive = pathEq(['entity', 'uri'], activeEntityUri, marker);\n const position = {lat: marker.point.lat, lng: marker.point.lng};\n const setHoveredDebounced = useCallback(debounce(setHovered, HIDE_DEBOUNCE_INTERVAL), []);\n const onMouseOver = useCallback(() => setHoveredDebounced(true), [setHoveredDebounced]);\n const onMouseOut = useCallback(() => setHoveredDebounced(false), [setHoveredDebounced]);\n const handleClick = useCallback(() => onClick(marker), [onClick, marker]);\n\n return (\n <>\n <Popper\n anchorEl={popperAnchor.current}\n open={hovered}\n className={styles.popper}\n modal={false}\n placement=\"top\"\n >\n <ProfileCard entity={marker.entity} onMouseOver={onMouseOver} onMouseOut={onMouseOut} />\n </Popper>\n <Marker\n icon={{\n url: hovered || isActive ? hoveredMarkerIcon : markerIcon,\n // needed for IE:\n scaledSize: new google.maps.Size(MARKER_WIDTH, MARKER_HEIGHT) //eslint-disable-line\n }}\n position={position}\n onClick={handleClick}\n visible={marker.visible !== false}\n onMouseOver={onMouseOver}\n onMouseOut={onMouseOut}\n {...otherProps}\n />\n <InfoBox\n options={{\n alignBottom: true,\n pane: 'mapPane',\n pixelOffset: new google.maps.Size(0, -(MARKER_HEIGHT + MARKER_CARD_MARGIN)), //eslint-disable-line\n closeBoxURL: '',\n enableEventPropagation: true,\n disableAutoPan: true\n }}\n position={position}\n >\n <span ref={popperAnchor} />\n </InfoBox>\n </>\n );\n};\n\nexport default memo(EntityMarker);\n","export const HOVERED_MARKER = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"22px\" height=\"32px\" viewBox=\"0 0 22 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>View / Map / Marker / Large (hover)</title>\n <defs>\n <radialGradient cx=\"50%\" cy=\"50.2950175%\" fx=\"50%\" fy=\"50.2950175%\" r=\"49.7049825%\" gradientTransform=\"translate(0.500000,0.502950),scale(0.777778,1.000000),rotate(90.000000),scale(1.000000,1.293560),translate(-0.500000,-0.502950)\" id=\"radialGradient-1\">\n <stop stop-color=\"#000000\" offset=\"0%\"></stop>\n <stop stop-color=\"#000000\" stop-opacity=\"0\" offset=\"100%\"></stop>\n </radialGradient>\n <path d=\"M21,0 C21.5522847,-1.01453063e-16 22,0.44771525 22,1 L22,21 C22,21.5522847 21.5522847,22 21,22 L15.7283832,22.0012846 C15.5422129,22.2445529 15.3664776,22.4802332 15.1984183,22.7122576 C13.7560833,24.7035592 13,26.2846074 13,27.5 L13,27.5 L12.9945143,27.6492623 C12.9181651,28.6841222 12.0543618,29.5 11,29.5 C9.8954305,29.5 9,28.6045695 9,27.5 L9,27.5 L8.99485006,27.3298651 C8.91582184,26.0024976 7.93016704,24.2171459 6.23940611,22.000704 L1,22 C0.44771525,22 6.76353751e-17,21.5522847 0,21 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 L21,0 Z\" id=\"path-2\"></path>\n </defs>\n <g id=\"View-/-Map-/-Marker-/-Large-(hover)\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse id=\"Oval\" fill=\"url(#radialGradient-1)\" opacity=\"0.32\" cx=\"11\" cy=\"28.5\" rx=\"6\" ry=\"4.66666667\"></ellipse>\n <mask id=\"mask-3\" fill=\"white\">\n <use xlink:href=\"#path-2\"></use>\n </mask>\n <use id=\"Path-2\" fill=\"#FFFFFF\" xlink:href=\"#path-2\"></use>\n <rect id=\"Entity-type\" fill=\"#24A8E8\" mask=\"url(#mask-3)\" x=\"0\" y=\"0\" width=\"22\" height=\"32\"></rect>\n <path d=\"M20,2 L20,20 L14.755,20 L14.6905172,20.0815309 C14.3562717,20.5012516 14.0578656,20.8886742 13.7817711,21.2616986 L13.5786724,21.5390469 C11.92787,23.8181606 11.079024,25.6311217 11.0052669,27.2674145 L11.0052669,27.2674145 L11,27.5 L10.9968324,27.3203844 C10.9285422,25.3781621 9.75347502,23.1598866 7.22124201,20.0010865 L2,20 L2,2 L20,2 Z\" id=\"Path\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" mask=\"url(#mask-3)\"></path>\n </g>\n</svg>`;\n","import {useEffect} from 'react';\nimport {usePrevious} from '../../../hooks';\nimport {fitMapBoundsForMarkers, fitMapBoundsForOverlay} from '../helpers';\n\nexport const useFitMapBounds = ({markers, activeOverlay, isSearchOnMapMove, map}) => {\n const apiIsLoaded = Boolean(map && window.google);\n const prevMarkers = usePrevious(markers);\n const prevActiveOverlay = usePrevious(activeOverlay);\n const prevApiIsLoaded = usePrevious(apiIsLoaded);\n\n useEffect(() => {\n const activeOverlayChanged = prevActiveOverlay !== activeOverlay;\n const markersChanged = prevMarkers !== markers;\n const apiIsLoadedChanged = prevApiIsLoaded !== apiIsLoaded;\n\n const shouldUseFitMapBoundsForOverlay =\n apiIsLoaded && activeOverlay && (activeOverlayChanged || apiIsLoadedChanged);\n const shouldUseFitMapBoundsForMarkers =\n apiIsLoaded && !isSearchOnMapMove && markers.length && (markersChanged || apiIsLoadedChanged);\n\n if (shouldUseFitMapBoundsForMarkers) {\n fitMapBoundsForMarkers(markers, map, activeOverlay);\n } else if (shouldUseFitMapBoundsForOverlay) {\n fitMapBoundsForOverlay(map, activeOverlay);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiIsLoaded, markers, activeOverlay]);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n mapControlContainer: {\n borderRadius: '2px',\n backgroundColor: '#FFFFFF',\n boxShadow: '0 1px 3px 0 rgba(0,0,0,0.15)',\n margin: '10px'\n }\n});\n","import React, {useCallback, useMemo, useRef, useState} from 'react';\nimport {propEq, isEmpty, prop} from 'ramda';\nimport {\n GoogleMap,\n useJsApiLoader,\n GoogleMapProps,\n Polygon,\n DrawingManager,\n MarkerClusterer,\n LoadScriptProps,\n MarkerProps,\n MarkerClustererProps\n} from '@react-google-maps/api';\nimport {noop} from '../../core/utils';\nimport {MapControlContainer} from './MapControls/MapControlContainer/MapControlContrainer';\nimport {TopRightMapControls} from './MapControls/TopRightMapControls/TopRightMapControls';\nimport {TopCenterMapControls} from './MapControls/TopCenterMapControls/TopCenterMapControls';\nimport {getMapBoundsPolygon, getDrawingMode} from './helpers';\nimport EntityMarker from './EntityMarker/EntityMarker';\nimport {DEFAULT_GOOGLE_MAP_OPTIONS, DEFAULT_OVERLAY_OPTIONS, MAP_DRAWING_MODES} from '../../constants';\nimport {DrawingModes, EntityMarker as Marker, MapBounds, Overlay, OverlayPath} from './types';\nimport {useFitMapBounds} from './hooks/useFitMapBounds';\n\nimport {useStyles} from './styles';\n\nconst ON_MAP_MOVE_DEBOUNCE_INTERVAL = 1000;\n\nconst libraries = ['drawing'] as LoadScriptProps['libraries'];\n\ntype MarkerClustererOptions = MarkerClustererProps['options'];\ntype Props = {\n markers?: Marker[];\n mapKey: string;\n defaultZoom?: GoogleMapProps['zoom'];\n defaultCenter?: GoogleMapProps['center'];\n loadingElement: JSX.Element;\n isSearchOnMapMove?: boolean;\n isSearchEnabled?: boolean;\n activeOverlay?: Overlay;\n overlayOptions?: google.maps.PolygonOptions | google.maps.CircleOptions;\n drawingModes?: DrawingModes;\n markerClusterer?: boolean;\n markerClustererOptions?: MarkerClustererOptions;\n mapOptions?: google.maps.MapOptions;\n mapContainerClassName?: string;\n onMapBoundsChanged?: (value: MapBounds | null) => void;\n onOverlayUpdated?: (value: {data: OverlayPath; type: string}) => void;\n onMarkerClicked?: (value: Marker) => void;\n};\n\nexport const ReltioMap = ({\n markers = [],\n mapKey,\n defaultZoom,\n defaultCenter,\n loadingElement,\n isSearchOnMapMove,\n isSearchEnabled,\n activeOverlay,\n overlayOptions = {},\n drawingModes = [],\n markerClusterer,\n markerClustererOptions,\n mapOptions = {},\n mapContainerClassName,\n onMapBoundsChanged = noop,\n onOverlayUpdated = noop,\n onMarkerClicked = noop\n}: Props) => {\n const styles = useStyles();\n const {isLoaded, loadError} = useJsApiLoader({\n googleMapsApiKey: mapKey,\n libraries\n });\n\n const mapMoveEndTimer = useRef(null);\n const [map, setMap] = useState<google.maps.Map>(null);\n const [polygon, setPolygon] = useState(null);\n const [drawingMode, setDrawingMode] = useState(null);\n\n useFitMapBounds({markers, activeOverlay, map, isSearchOnMapMove});\n\n const allOverlayOptions = useMemo(() => ({...DEFAULT_OVERLAY_OPTIONS, ...overlayOptions}), [overlayOptions]);\n const googleMapOptions = useMemo(() => ({...DEFAULT_GOOGLE_MAP_OPTIONS, ...mapOptions}), [mapOptions]);\n\n const handleChangeIsSearchOnMapMove = useCallback(\n (isSearchOnMapMove: boolean) => {\n onMapBoundsChanged(isSearchOnMapMove ? getMapBoundsPolygon(map) : null);\n setDrawingMode(null);\n clearTimeout(mapMoveEndTimer.current);\n },\n [map, onMapBoundsChanged]\n );\n\n const handleMapMoveStart = useCallback(() => {\n clearTimeout(mapMoveEndTimer.current);\n }, []);\n\n const handleMapMoveEnd = useCallback(() => {\n if (!isSearchOnMapMove) return;\n onMapBoundsChanged(getMapBoundsPolygon(map));\n }, [isSearchOnMapMove, map, onMapBoundsChanged]);\n\n const handleMapIdle = useCallback(() => {\n if (!isSearchOnMapMove) return;\n clearTimeout(mapMoveEndTimer.current);\n mapMoveEndTimer.current = setTimeout(handleMapMoveEnd, ON_MAP_MOVE_DEBOUNCE_INTERVAL);\n }, [handleMapMoveEnd, isSearchOnMapMove]);\n\n const handleOverlayChange = useCallback(\n (e, propOverlay?) => {\n const polygonStateOverlay = polygon && {type: MAP_DRAWING_MODES.POLYGON, overlay: polygon};\n const stateOverlay = propOverlay || polygonStateOverlay;\n\n if (isEmpty(stateOverlay)) return;\n\n const {overlay, type} = stateOverlay;\n\n const getPolygonLatLngCoordinates = () =>\n overlay\n .getPath()\n .getArray()\n .map((latlng) => [latlng.lat(), latlng.lng()]);\n\n const getCircleParameters = () => ({radius: overlay.getRadius() / 1000, center: overlay.getCenter()});\n\n const typeActions = {\n [MAP_DRAWING_MODES.POLYGON]: getPolygonLatLngCoordinates,\n [MAP_DRAWING_MODES.CIRCLE]: getCircleParameters\n };\n\n const data = typeActions[type]?.();\n\n if (!data) return;\n\n onOverlayUpdated({data, type});\n },\n [onOverlayUpdated, polygon]\n );\n\n const handleOverlayComplete = useCallback(\n (type) => (overlay) => {\n handleOverlayChange(null, {type, overlay});\n overlay.setMap(null);\n setDrawingMode(null);\n },\n [handleOverlayChange]\n );\n\n const handleClearOverlay = useCallback(() => {\n onOverlayUpdated(null);\n }, [onOverlayUpdated]);\n\n const renderMarkers = (clusterer?: MarkerProps['clusterer']) => {\n return markers\n .filter(prop('point'))\n .map((marker) => (\n <EntityMarker key={marker.id} marker={marker} clusterer={clusterer} onClick={onMarkerClicked} />\n ));\n };\n\n const renderMarkerClusterer = (options?: MarkerClustererOptions) => {\n return <MarkerClusterer options={options}>{renderMarkers}</MarkerClusterer>;\n };\n\n if (loadError) {\n return null;\n }\n\n if (!isLoaded) {\n return loadingElement;\n }\n\n const shouldRenderDrawingManager = isSearchEnabled && Boolean(drawingModes.length);\n const shouldRenderRightMapControls = map && isSearchEnabled && Boolean(drawingModes.length);\n const shouldRenderCenterMapControls = map && isSearchEnabled;\n const shouldRenderPolygon =\n !getDrawingMode(drawingMode) && activeOverlay && propEq('type', MAP_DRAWING_MODES.POLYGON, activeOverlay);\n\n return (\n <GoogleMap\n mapTypeId={window.google.maps.MapTypeId.ROADMAP}\n options={googleMapOptions}\n onLoad={setMap}\n zoom={defaultZoom}\n center={defaultCenter}\n onZoomChanged={handleMapMoveStart}\n onDragStart={handleMapMoveStart}\n onIdle={handleMapIdle}\n mapContainerClassName={mapContainerClassName}\n >\n {shouldRenderRightMapControls && (\n <MapControlContainer\n className={styles.mapControlContainer}\n position={window.google.maps.ControlPosition.TOP_RIGHT}\n map={map}\n >\n <TopRightMapControls\n hasActiveOverlay={!!activeOverlay}\n drawingModes={drawingModes}\n drawingMode={drawingMode}\n onDrawingModeChanged={setDrawingMode}\n onClearOverlay={handleClearOverlay}\n />\n </MapControlContainer>\n )}\n\n {shouldRenderCenterMapControls && (\n <MapControlContainer\n className={styles.mapControlContainer}\n position={window.google.maps.ControlPosition.TOP_CENTER}\n map={map}\n >\n <TopCenterMapControls\n onChangeIsSearchOnMapMove={handleChangeIsSearchOnMapMove}\n isSearchOnMapMove={isSearchOnMapMove}\n />\n </MapControlContainer>\n )}\n\n {markerClusterer ? renderMarkerClusterer(markerClustererOptions) : renderMarkers()}\n\n {shouldRenderPolygon && (\n <Polygon\n onLoad={setPolygon}\n path={activeOverlay.path}\n editable={true}\n options={allOverlayOptions}\n onMouseUp={handleOverlayChange}\n onDragEnd={handleOverlayChange}\n />\n )}\n\n {shouldRenderDrawingManager && (\n <DrawingManager\n onPolygonComplete={handleOverlayComplete(MAP_DRAWING_MODES.POLYGON)}\n onCircleComplete={handleOverlayComplete(MAP_DRAWING_MODES.CIRCLE)}\n drawingMode={getDrawingMode(drawingMode)}\n options={{\n drawingControl: false,\n circleOptions: allOverlayOptions,\n polygonOptions: allOverlayOptions\n }}\n />\n )}\n </GoogleMap>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n onlyValue: {\n color: 'rgba(0,0,0,.6)',\n fontSize: '13px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden'\n },\n select: {\n fontSize: '13px',\n color: 'rgba(0,0,0,.6)',\n paddingLeft: '15px',\n '&&&': {\n paddingRight: '35px'\n }\n },\n selectMenu: {\n '& li': {\n fontSize: '13px',\n height: '32px'\n }\n },\n textField: {\n maxWidth: '100%'\n }\n});\n","import React, {useEffect} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\nimport DropDownEditor from '../editors/DropDownEditor/DropDownEditor';\n\nconst SelectorWithOnlyOptionAutoSelect = ({value, onChange, options, classes = {}, emptyLabel}) => {\n const styles = useStyles();\n\n const [firstOption, ...moreOptions] = options;\n const hasOnlyOneOptionToSelect = moreOptions.length === 0;\n\n useEffect(() => {\n if (hasOnlyOneOptionToSelect && value !== firstOption.value) {\n onChange(firstOption.value);\n }\n }, [firstOption.value]); // eslint-disable-line\n\n const displayEmpty = !!emptyLabel;\n\n return (\n <div className={classes.root}>\n {hasOnlyOneOptionToSelect ? (\n <Typography className={classes.onlyValue || styles.onlyValue} variant={'h6'}>\n {firstOption.label}\n </Typography>\n ) : (\n <DropDownEditor\n displayEmpty={displayEmpty}\n disableUnderline={true}\n classes={{\n select: classes.select || styles.select\n }}\n TextFieldProps={{\n classes: {\n root: classes.textField || styles.textField\n }\n }}\n MenuProps={{\n classes: {\n list: classes.selectMenu || styles.selectMenu\n }\n }}\n value={value || ''}\n entries={displayEmpty ? [{value: '', label: emptyLabel}, ...options] : options}\n onChange={(value) => onChange(value || null)}\n />\n )}\n </div>\n );\n};\n\nSelectorWithOnlyOptionAutoSelect.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string\n })\n ),\n classes: PropTypes.shape({\n root: PropTypes.string,\n onlyValue: PropTypes.string,\n select: PropTypes.string,\n selectMenu: PropTypes.string,\n textField: PropTypes.string\n }),\n emptyLabel: PropTypes.string\n};\n\nexport default SelectorWithOnlyOptionAutoSelect;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n '&:last-child > div > div > div': {\n overflow: 'hidden!important'\n }\n },\n rowSkeleton: {\n margin: '15px 25px',\n width: '40%'\n }\n});\n","import React, {useMemo} from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {BasicTable} from '../BasicTableView';\nimport {ColumnData, RenderRowCellProps} from '../BasicTableView/types';\nimport {useStyles} from './styles';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = Omit<React.ComponentProps<typeof BasicTable>, 'rowsData' | 'renderRowCell'> & {\n tableColumnsData: ColumnData[];\n RowCellRenderer?: (props: RenderRowCellProps) => JSX.Element;\n};\n\nconst DefaultRowCellRenderer = () => {\n const styles = useStyles();\n return <Skeleton className={styles.rowSkeleton} />;\n};\n\nexport const TableSkeleton = ({tableColumnsData, RowCellRenderer, ...props}: Props) => {\n const styles = useStyles();\n\n const tableRowsData = useMemo(() => {\n const entries = tableColumnsData.map((column) => [column.id, []]);\n const skeletonRow = Object.fromEntries(entries);\n return [{...skeletonRow, value: {label: '', value: {}, uri: 'skeleton'}}];\n }, [tableColumnsData]);\n\n const renderRowCell = (props: RenderRowCellProps) =>\n RowCellRenderer ? <RowCellRenderer {...props} /> : <DefaultRowCellRenderer />;\n\n return (\n <BasicTable\n autosizing\n containerClassName={styles.container}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n defaultColumnMinWidth={200}\n defaultColumnWidth={250}\n headRowHeight={48}\n renderRowCell={renderRowCell}\n maxHeight={MAX_HEIGHT}\n {...props}\n />\n );\n};\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst VerticalDivider = ({height, margin}) => (\n <div\n style={{\n width: '1px',\n height: `${height}px`,\n borderLeft: '1px solid rgba(0,0,0,0.38)',\n margin: `0 ${margin}px`,\n flexShrink: '0'\n }}\n />\n);\n\nVerticalDivider.propTypes = {\n height: PropTypes.number,\n margin: PropTypes.number\n};\n\nexport default VerticalDivider;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n padding: '8px 16px'\n },\n noCaption: {\n paddingTop: '16px'\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useMemo} from 'react';\nimport {Entity, getAttributesListForReadMode, isEmptyValue} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport {PivotingAttributeContext, useMdmMetadata, useMdmPivotingAttributes} from '../../../../contexts';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {useStyles} from './styles';\n\nconst DEFAULT_ATTRIBUTES_COUNT = 16;\n\ntype Props = Omit<AttributesViewProps, 'mode' | 'pinnedAttributes'>;\n\nconst AttributesView = ({\n className,\n entity = {} as Entity,\n caption = '',\n excludeUris = [],\n includeUris = [],\n attributesCount: attributesCountProp\n}: Props) => {\n const styles = useStyles();\n\n const metadata = useMdmMetadata();\n const pivotingAttributes = useMdmPivotingAttributes();\n\n const filteredAttrTypes = useMemo(\n () => getFilteredAttrTypes(metadata, entity.type, includeUris, excludeUris),\n [excludeUris, includeUris, metadata, entity.type]\n );\n\n const attributesCount = attributesCountProp || DEFAULT_ATTRIBUTES_COUNT;\n const attributesList = getAttributesListForReadMode(filteredAttrTypes, entity);\n const isShowAttributeList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n return isShowAttributeList || !isEmptyValue(caption) ? (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={className}>\n {caption && <FacetViewHeader title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n {isShowAttributeList ? (\n <AttributesList\n entity={entity}\n attrTypes={filteredAttrTypes}\n parentUri={entity.uri}\n drawLines={false}\n max={attributesCount}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n </Box>\n </BasicView>\n </PivotingAttributeContext.Provider>\n ) : null;\n};\n\nexport default AttributesView;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n overflow: 'hidden',\n padding: '8px 16px'\n },\n noCaption: {\n paddingTop: '16px'\n }\n});\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n isTempUri,\n getPinnedAttributesForUser,\n Entity,\n AddAttributesPayload,\n ModifyAttributePayload,\n RemoveAttributePayload\n} from '@reltio/mdm-sdk';\nimport Box from '@mui/material/Box';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {ViewIdContext, useMdmAction, useMdmMetadata, useMdmModifiedEntity, useMdmUserRoles} from '../../../../contexts';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {PinnedAttributesContext} from '../contexts/PinnedAttributesContext';\n\nimport {useStyles} from './styles';\n\ntype Props = Omit<AttributesViewProps, 'attributesCount'>;\n\nconst AttributesView = ({\n className,\n mode,\n entity,\n caption = '',\n excludeUris = [],\n includeUris = [],\n pinnedAttributes\n}: Props) => {\n const styles = useStyles();\n const viewId = useContext(ViewIdContext);\n\n const addAttributes = useMdmAction('addAttributes');\n const modifyAttribute = useMdmAction('modifyAttribute');\n const removeAttribute = useMdmAction('removeAttribute');\n const metadata = useMdmMetadata();\n const userRoles = useMdmUserRoles();\n const modifiedEntity = useMdmModifiedEntity(entity.uri) || ({} as Entity);\n\n const pinnedAttributeUris = useMemo(\n () => getPinnedAttributesForUser(pinnedAttributes, userRoles),\n [pinnedAttributes, userRoles]\n );\n\n const filteredAttrTypes = useMemo(\n () => getFilteredAttrTypes(metadata, modifiedEntity.type, includeUris, excludeUris),\n [excludeUris, includeUris, metadata, modifiedEntity.type]\n );\n\n const onAddAttributes = useCallback(\n (params: AddAttributesPayload) => addAttributes(params.map((param) => ({...param, viewId}))),\n [viewId, addAttributes]\n );\n\n const onChangeAttribute = useCallback(\n (params: ModifyAttributePayload) => modifyAttribute({...params, viewId}),\n [viewId, modifyAttribute]\n );\n\n const onDeleteAttribute = useCallback(\n (params: RemoveAttributePayload) => removeAttribute({...params, viewId}),\n [viewId, removeAttribute]\n );\n\n return (\n <BasicView className={className}>\n {caption && <FacetViewHeader title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n <PinnedAttributesContext.Provider value={pinnedAttributeUris}>\n <AttributesList\n entity={modifiedEntity}\n attrTypes={filteredAttrTypes}\n parentUri={modifiedEntity.uri}\n drawLines={false}\n mode={mode}\n showEmptyEditors={isTempUri(modifiedEntity.uri)}\n crosswalks={modifiedEntity.crosswalks}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n </PinnedAttributesContext.Provider>\n </Box>\n </BasicView>\n );\n};\n\nexport default AttributesView;\n","import React from 'react';\nimport {isViewMode} from '@reltio/mdm-sdk';\nimport {AttributesViewProps} from '../types';\nimport ReadModeAttributesView from '../readMode/AttributesView/AttributesView';\nimport EditModeAttributesView from '../editMode/AttributesView/AttributesView';\nimport {useMdmEntityWithDiff, useMdmMode, EntityContext} from '../../../contexts';\n\nconst AttributesView = ({attributesCount, pinnedAttributes, ...restProps}: AttributesViewProps) => {\n const mdmEntity = useMdmEntityWithDiff();\n const mdmMode = useMdmMode();\n\n const entity = restProps.entity || mdmEntity;\n const mode = restProps.mode || mdmMode;\n\n return (\n <EntityContext.Provider value={entity}>\n {isViewMode(mode) ? (\n <ReadModeAttributesView {...restProps} attributesCount={attributesCount} entity={entity} />\n ) : (\n <EditModeAttributesView\n {...restProps}\n mode={mode}\n pinnedAttributes={pinnedAttributes}\n entity={entity}\n />\n )}\n </EntityContext.Provider>\n );\n};\n\nexport default AttributesView;\n","import {useEffect} from 'react';\nimport {evolve, map} from 'ramda';\nimport {entity as History, HistoryDiff, HistoryMode, wrapInArrayIfNeeded} from '@reltio/mdm-sdk';\nimport {useMdmAction, useMdmEntity, useMdmHistoryDiff, useMdmHistoryMode, useMdmHistorySlice} from '../../../contexts';\n\nexport const defaultHistoryDiff: HistoryDiff = {\n appearance: {},\n attributes: {},\n roles: [],\n tags: []\n};\n\nconst fixRefEntity = evolve({\n refEntity: wrapInArrayIfNeeded,\n refRelation: wrapInArrayIfNeeded\n});\n\nconst prepareHistorySlice = (historySlice) => {\n if (historySlice) {\n return evolve({\n attributes: map(map(fixRefEntity))\n })(historySlice);\n }\n return historySlice;\n};\n\nexport const useHistoryDiff = () => {\n const setHistoryDiff = useMdmAction('setHistoryDiff');\n const historySlice = useMdmHistorySlice();\n const historyDiff = useMdmHistoryDiff();\n const historyMode = useMdmHistoryMode();\n const entity = useMdmEntity();\n\n useEffect(() => {\n if (historySlice) {\n const {aEntity, bEntity} = historySlice;\n const historyManager = History.HistoryManager.createHistoryManager();\n const historyDiff: HistoryDiff = historyManager.computeEntityHistoryDiff(\n prepareHistorySlice(historyMode === HistoryMode.Current ? entity : bEntity),\n prepareHistorySlice(aEntity)\n );\n setHistoryDiff(historyDiff);\n }\n }, [historySlice, historyMode, setHistoryDiff, entity]);\n\n return historyDiff || defaultHistoryDiff;\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n dueDate: {\n marginTop: 0,\n marginBottom: 0\n },\n dueDateInput: {\n height: '40px'\n },\n inputLabel: {\n fontSize: '14px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe} from 'ramda';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useWorkflowDueDate} from '../../hooks/useWorkflowDueDate';\nimport {DateEditor} from '../../../editors';\n\nimport {useStyles} from './styles';\n\ntype Props = Pick<WorkflowTaskData, 'taskId' | 'dueDate'> & {\n isTaskOpen?: WorkflowTaskData['isOpen'];\n className?: string;\n};\n\nconst DueDateField = ({taskId, dueDate, isTaskOpen, className}: Props) => {\n const styles = useStyles();\n const {updateDueDate, updateRequestIsInProgress, readOnly} = useWorkflowDueDate({\n dueDate,\n taskId,\n isOpen: isTaskOpen\n });\n\n return (\n <DateEditor\n disabled={updateRequestIsInProgress || readOnly}\n value={dueDate}\n label={i18n.text('Due date')}\n onChange={pipe((date) => date && date.getTime(), updateDueDate)}\n slotProps={{\n textField: {\n className: classnames(styles.dueDate, className),\n size: 'small',\n InputProps: {className: styles.dueDateInput},\n InputLabelProps: {\n classes: {root: styles.inputLabel}\n }\n }\n }}\n />\n );\n};\n\nexport default DueDateField;\n","import {useState, useCallback, useContext} from 'react';\nimport {updateDueDateForTask, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {isOpenTask} from '../helpers';\nimport {useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nexport const useWorkflowDueDate = ({\n dueDate,\n taskId,\n isOpen\n}: Pick<WorkflowTaskData, 'dueDate' | 'taskId' | 'isOpen'>) => {\n const {updateTaskState} = useContext(WorkflowTasksContext) || {};\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n\n const safePromise = useSafePromise();\n const [updateRequestIsInProgress, setUpdateRequestIsInProgress] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canUpdateTask = checkWorkflowPermission('UPDATE_TASK') && isOpenTask(isOpen);\n\n const updateDueDate = useCallback(\n (newValue: number) => {\n if (workflowPath && canUpdateTask && taskId && newValue && dueDate !== newValue) {\n setUpdateRequestIsInProgress(true);\n safePromise(\n updateDueDateForTask({\n taskId,\n workflowPath,\n environment,\n tenant,\n dueDate: newValue\n })\n )\n .then(() => {\n updateTaskState?.(taskId, {dueDate: newValue});\n })\n .catch(showWorkflowError)\n .finally(() => {\n setUpdateRequestIsInProgress(false);\n });\n }\n },\n [workflowPath, taskId, environment, tenant, updateTaskState, safePromise, dueDate, canUpdateTask]\n );\n return {updateDueDate, updateRequestIsInProgress, readOnly: !canUpdateTask};\n};\n","import {useState, useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {updatePriorityForTask, WorkflowPriority, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {isOpenTask} from '../helpers';\nimport {useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\ntype PriorityOption = {label: string; value: number};\n\nexport const useWorkflowPriority = ({\n priority,\n taskId,\n isOpen\n}: Pick<WorkflowTaskData, 'taskId' | 'priority' | 'isOpen'>) => {\n const {updateTaskState} = useContext(WorkflowTasksContext) || {};\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n\n const safePromise = useSafePromise();\n const [updateRequestIsInProgress, setUpdateRequestIsInProgress] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canUpdateTask = checkWorkflowPermission('UPDATE_TASK') && isOpenTask(isOpen);\n\n const updatePriority = useCallback(\n (newValue: PriorityOption) => {\n const {value: newPriority} = newValue;\n if (workflowPath && canUpdateTask && taskId && priority !== newPriority) {\n setUpdateRequestIsInProgress(true);\n safePromise(\n updatePriorityForTask({\n taskId,\n workflowPath,\n environment,\n tenant,\n priority: newPriority\n })\n )\n .then(() => {\n updateTaskState?.(taskId, {priority: newPriority});\n })\n .catch(showWorkflowError)\n .finally(() => {\n setUpdateRequestIsInProgress(false);\n });\n }\n },\n [workflowPath, taskId, environment, tenant, updateTaskState, safePromise, priority, canUpdateTask]\n );\n\n const priorities: PriorityOption[] = useMemo(\n () => [\n {\n label: i18n.text('Low'),\n value: WorkflowPriority.low\n },\n {\n label: i18n.text('Medium'),\n value: WorkflowPriority.medium\n },\n {\n label: i18n.text('High'),\n value: WorkflowPriority.high\n },\n {\n label: i18n.text('Urgent'),\n value: WorkflowPriority.urgent\n }\n ],\n []\n );\n return {priorities, updatePriority, updateRequestIsInProgress, readOnly: !canUpdateTask};\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {propEq} from 'ramda';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\n\nimport DropDownSelector from '../../../DropDownSelector/DropDownSelector';\nimport {useWorkflowPriority} from '../../hooks/useWorkflowPriority';\n\ntype Props = Pick<WorkflowTaskData, 'taskId' | 'priority'> & {\n isTaskOpen?: WorkflowTaskData['isOpen'];\n className?: string;\n};\n\nconst PrioritySelector = ({taskId, priority, isTaskOpen, className}: Props) => {\n const {priorities, updatePriority, updateRequestIsInProgress, readOnly} = useWorkflowPriority({\n taskId,\n priority,\n isOpen: isTaskOpen\n });\n const disabled = updateRequestIsInProgress || readOnly;\n\n return (\n <DropDownSelector\n className={className}\n isDisabled={disabled}\n options={priorities}\n onChange={updatePriority}\n hideSelectedOptions={false}\n label={i18n.text('Priority')}\n value={priorities.find(propEq('value', priority))}\n TextFieldProps={{disabled}}\n height={40}\n />\n );\n};\n\nexport default PrioritySelector;\n","import {makeStyles} from '@mui/styles';\n\nconst pointColor = '#d8d8d8';\nconst lineStyle = '2px solid rgba(0,0,0,0.06)';\nconst pointSize = 6;\nconst blockWidth = 56;\nconst linePadding = 10;\nconst pointPadding = 15;\n\nexport const useStyles = makeStyles({\n decorator: {\n display: 'flex',\n alignItems: 'stretch'\n },\n lineBlock: {\n width: `${blockWidth}px`,\n flexShrink: 0\n },\n withLinePadding: {\n '& $noLine': {\n height: `${linePadding}px`\n },\n '& $line': {\n height: `calc(100% - ${linePadding}px)`\n }\n },\n noLine: {\n height: '0'\n },\n line: {\n height: '100%',\n position: 'relative',\n marginLeft: '31px',\n borderLeft: lineStyle,\n '&:before': {\n position: 'absolute',\n height: pointSize,\n width: pointSize,\n borderRadius: '50%',\n left: -pointSize + 1,\n top: `${pointPadding}px`,\n background: pointColor,\n content: '\"\"',\n display: 'block',\n border: '1px solid white'\n },\n '&$plain': {\n '&:before': {\n width: 0,\n border: 'none'\n }\n },\n '&$last': {\n height: `${pointPadding}px`\n }\n },\n content: {\n flex: 1,\n minWidth: 0\n },\n plain: {},\n last: {},\n rowDivider: {\n marginLeft: 0\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport Divider from '@mui/material/Divider';\n\ntype Props = {\n className?: string;\n children: React.ReactNode;\n plain?: boolean;\n first?: boolean;\n last?: boolean;\n transparent?: boolean;\n divider?: boolean;\n};\n\nconst LineDecorator = ({className, children, plain, first, last, transparent, divider}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(className, styles.decorator)}>\n <div className={classnames(styles.lineBlock, {[styles.withLinePadding]: first})}>\n {!transparent && (\n <>\n <div className={styles.noLine} />\n <div className={classnames(styles.line, {[styles.plain]: plain}, {[styles.last]: last})} />\n </>\n )}\n </div>\n <div className={styles.content}>\n {children}\n {divider && <Divider className={styles.rowDivider} light variant=\"inset\" />}\n </div>\n </div>\n );\n};\n\nexport default LineDecorator;\n","import {WorkflowTaskData} from '@reltio/mdm-sdk';\n\nlet taskToColor = {};\nconst COLORS = [\n '#DC057B',\n '#5DC003',\n '#FEC92F',\n '#F57F27',\n '#B71137',\n '#056B97',\n '#4499AE',\n '#BD81BE',\n '#5F3577',\n '#A68560',\n '#555962'\n];\nlet colorIndex = 0;\n\nexport const resetTaskToColor = () => {\n taskToColor = {};\n colorIndex = 0;\n};\n\nexport const useWorkflowColor = ({\n processDefinitionDisplayName\n}: Pick<WorkflowTaskData, 'processDefinitionDisplayName'>) => {\n const hash = processDefinitionDisplayName;\n if (!taskToColor[hash]) {\n taskToColor[hash] = COLORS[colorIndex];\n colorIndex++;\n if (colorIndex > COLORS.length - 1) {\n colorIndex = 0;\n }\n }\n return taskToColor[hash];\n};\n","import React from 'react';\n\nconst SvgCollaborationIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <path\n d=\"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\"\n id=\"CollaborationIcon_svg__a\"\n />\n </defs>\n <g transform=\"translate(-2 -2)\" stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"CollaborationIcon_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#CollaborationIcon_svg__a\" />\n </mask>\n <path fillOpacity={0.54} fill=\"#000\" mask=\"url(#CollaborationIcon_svg__b)\" d=\"M0 0h24v24H0z\" />\n </g>\n </svg>\n );\n};\n\nexport default SvgCollaborationIcon;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n card: {\n borderBottom: '1px solid rgba(0,0,0,0.06)'\n },\n withBackground: {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n lineWrapper: {\n position: 'relative'\n },\n icon: {\n position: 'absolute',\n top: '8px',\n left: '16px',\n width: '32px',\n height: '32px',\n zIndex: 1\n },\n line: ({color}: {color: string}) => ({\n borderLeft: `3px solid ${color}`,\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0\n }),\n info: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n wordWrap: 'break-word',\n lineHeight: '15px'\n },\n commentsInfo: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: '-4px',\n marginTop: '7px'\n },\n commentsIcon: {\n width: '11px',\n height: '11px',\n marginLeft: '2px',\n marginRight: '6px',\n marginTop: '-2px'\n },\n infoValue: {\n color: theme.palette.text.primary\n },\n infoBlock: {\n display: 'flex',\n flexDirection: 'row',\n marginBottom: '5px'\n },\n header: {\n display: 'flex',\n flexDirection: 'row',\n paddingBottom: '12px'\n },\n flex: {\n flex: 1\n },\n caption: {\n fontSize: '16px',\n color: theme.palette.text.primary\n },\n title: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: '-4px'\n },\n flag: {\n height: '13px',\n width: '13px',\n marginTop: '-2px',\n stroke: '#000000',\n fill: 'none',\n margin: '2px 5px 0 5px'\n },\n date: {\n fontSize: '13px',\n color: theme.palette.text.primary\n },\n mainInfo: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1\n },\n controlsBox: {\n marginRight: '16px',\n marginBottom: '12px',\n marginTop: '13px'\n },\n controlsInRow: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '20px'\n },\n priority: {\n width: '162px'\n },\n comments: {\n marginLeft: '11px'\n }\n}));\n","import React, {useState} from 'react';\nimport classnames from 'classnames';\nimport FlagIcon from '@mui/icons-material/Flag';\nimport i18n from 'ui-i18n';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport CollapseButton from '../../../CollapseButton/CollapseButton';\nimport AssigneeSelector from '../../components/AssigneeSelector/AssigneeSelector';\nimport DueDateField from '../../components/DueDateField/DueDateField';\nimport PrioritySelector from '../../components/PrioritySelector/PrioritySelector';\nimport WorkflowComments from '../../components/WorkflowComments';\nimport {getDCRId} from '../../helpers';\nimport TaskActions from '../../components/TaskActions/TaskActions';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport {useWorkflowColor} from '../../hooks/useWorkflowColor';\nimport {useWorkflowCheckPermission} from '../../hooks/useWorkflowCheckPermission';\nimport CollaborationIcon from '../../../../icons/CollaborationIcon';\nimport {useWorkflowActions} from '../../hooks/useWorkflowActions';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n task: WorkflowTaskData;\n children?: React.ReactNode;\n actions?: React.ReactNode;\n Icon?: React.ElementType;\n};\n\nconst GenericWorkflowTaskCard = ({task, children, actions, Icon}: Props) => {\n const {\n taskId,\n dueDate,\n priority,\n assignee,\n createdBy,\n createTime,\n displayName: step,\n processDefinitionDisplayName,\n objectURIs,\n processInstanceComments,\n possibleActions,\n isOpen: isTaskOpen,\n preferredAction\n } = task;\n const dcrId = getDCRId(objectURIs);\n const color = useWorkflowColor({processDefinitionDisplayName});\n const styles = useStyles({color});\n const [isExpanded, setExpanded] = useState(false);\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canViewComments = checkWorkflowPermission('VIEW_PROCESS_INSTANCE_COMMENTS');\n const {actions: workflowActions, actionRequestIsInProgress} = useWorkflowActions({\n taskId,\n possibleActions,\n assignee,\n isOpen: isTaskOpen\n });\n return (\n <div className={styles.card}>\n <div className={classnames({[styles.withBackground]: isExpanded})}>\n <div className={styles.lineWrapper}>\n <div className={styles.line} />\n {Icon && <Icon className={styles.icon} />}\n <LineDecorator plain first transparent={!isExpanded}>\n <div className={styles.mainInfo}>\n <div className={styles.title}>\n <div className={classnames(styles.caption, styles.flex)}>\n {i18n.text(processDefinitionDisplayName)}\n </div>\n <FlagIcon className={styles.flag} />\n <Tooltip title={i18n.text('Due date')}>\n <span className={styles.date}>{i18n.date(dueDate, 'L')}</span>\n </Tooltip>\n <CollapseButton\n isOpen={isExpanded}\n size=\"L\"\n onClick={() => {\n setExpanded(!isExpanded);\n }}\n />\n </div>\n <div className={styles.infoBlock} data-reltio-id=\"info-block\">\n <div className={styles.flex}>\n {dcrId && (\n <div className={styles.info}>\n {i18n.text('DCR ID')}\n {': '}\n <span className={styles.infoValue}>{dcrId}</span>\n </div>\n )}\n <div className={styles.info}>\n {i18n.text('Created by')}\n {': '}\n <span className={styles.infoValue}>{createdBy}</span> {i18n.text('on')}{' '}\n <span className={styles.infoValue}>{i18n.date(createTime, 'L')}</span>\n </div>\n <div className={styles.info}>\n {i18n.text('Step')}\n {': '}\n <span className={styles.infoValue}>{step}</span>\n </div>\n {canViewComments && processInstanceComments?.length > 0 && (\n <div className={styles.commentsInfo}>\n <CollaborationIcon className={styles.commentsIcon} />\n <div className={styles.infoValue}>{processInstanceComments.length}</div>\n </div>\n )}\n </div>\n {actions || (\n <TaskActions actions={workflowActions} isInProgress={actionRequestIsInProgress} />\n )}\n </div>\n </div>\n </LineDecorator>\n </div>\n {isExpanded && (\n <LineDecorator plain>\n <div className={styles.controlsBox}>\n <div className={styles.controlsInRow}>\n <DueDateField taskId={taskId} dueDate={dueDate} isTaskOpen={isTaskOpen} />\n <PrioritySelector\n taskId={taskId}\n priority={priority}\n className={styles.priority}\n isTaskOpen={isTaskOpen}\n />\n </div>\n <AssigneeSelector taskId={taskId} assignee={assignee} isTaskOpen={isTaskOpen} />\n </div>\n </LineDecorator>\n )}\n </div>\n {isExpanded && (\n <>\n {children}\n {canViewComments && (\n <div className={styles.comments}>\n <WorkflowComments\n workflowActions={workflowActions}\n actionRequestIsInProgress={actionRequestIsInProgress}\n preferredAction={preferredAction}\n taskId={taskId}\n processInstanceComments={processInstanceComments}\n isTaskOpen={isTaskOpen}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default GenericWorkflowTaskCard;\n","import React from 'react';\n\nconst SvgDcrTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#42A5F5\" cx={14} cy={14} r={14} />\n <path\n d=\"M16.43 9.87c0 1.59 1.25 2.87 2.79 2.87 1.53 0 2.78-1.28 2.78-2.87C22 8.29 20.75 7 19.22 7c-1.54 0-2.79 1.29-2.79 2.87zm1.4 0c0-.79.62-1.43 1.39-1.43.77 0 1.39.64 1.39 1.43 0 .79-.62 1.44-1.39 1.44-.77 0-1.39-.65-1.39-1.44zm-6.26 8.26c0-1.59-1.25-2.87-2.79-2.87-1.53 0-2.78 1.28-2.78 2.87C6 19.71 7.25 21 8.78 21c1.54 0 2.79-1.29 2.79-2.87zM8.09 9.15v4.31h1.39v-2.87h2.78v2.15l2.78-2.87L12.26 7v2.15H8.09zm11.82 9.7v-4.31h-1.39v2.87h-2.78v-2.15l-2.78 2.87L15.74 21v-2.15h4.17z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDcrTaskIcon;\n","import i18n from 'ui-i18n';\nimport {allPass, always, equals, evolve, pipe, prop, when} from 'ramda';\nimport {\n AttributeType,\n DataTypes,\n DCRAttributeValue,\n DCRObjectsInfo,\n DCRTypes,\n DCREntityInfo,\n getAttrDataTypeDefinition,\n isUrl,\n DCROperationTypes,\n DCRRelationInfo,\n DCRValue,\n PrimitiveValue\n} from '@reltio/mdm-sdk';\n\nexport const getOperationType = (type: string, oldValue?: DCRAttributeValue) => {\n switch (type) {\n case DCRTypes.CREATE_RELATIONSHIP:\n case DCRTypes.INSERT_ATTRIBUTE:\n return DCROperationTypes.ADDED;\n case DCRTypes.UPDATE_TAGS:\n case DCRTypes.UPDATE_ROLES:\n case DCRTypes.UPDATE_ATTRIBUTE:\n return DCROperationTypes.EDITED;\n case DCRTypes.DELETE_ATTRIBUTE:\n case DCRTypes.DELETE_RELATIONSHIP:\n return DCROperationTypes.DELETED;\n case DCRTypes.PIN_ATTRIBUTE:\n return oldValue?.pin ? DCROperationTypes.PIN_DELETED : DCROperationTypes.PINNED;\n case DCRTypes.IGNORE_ATTRIBUTE:\n return oldValue?.ignored ? DCROperationTypes.IGNORE_DELETED : DCROperationTypes.IGNORED;\n }\n};\n\nexport const getOperationLabel = (operation: DCROperationTypes) => {\n const labels = {\n [DCROperationTypes.ADDED]: i18n.text('added'),\n [DCROperationTypes.EDITED]: i18n.text('edited'),\n [DCROperationTypes.DELETED]: i18n.text('deleted'),\n [DCROperationTypes.PINNED]: i18n.text('pinned'),\n [DCROperationTypes.PIN_DELETED]: i18n.text('pin deleted'),\n [DCROperationTypes.IGNORED]: i18n.text('ignored'),\n [DCROperationTypes.IGNORE_DELETED]: i18n.text('ignore deleted')\n };\n\n return labels[operation] || '';\n};\n\nexport const getAttributeDescription = (\n attrType: AttributeType,\n value: DCRAttributeValue,\n currentEntityUri: string,\n objectsInfo: DCRObjectsInfo = {}\n) => {\n let objectLabel: string, objectUri: string;\n\n const relation = objectsInfo[value.refObjectURI] as DCRRelationInfo;\n if (relation) {\n objectUri = currentEntityUri === relation.startObjectUri ? relation.endObjectUri : relation.startObjectUri;\n objectLabel =\n currentEntityUri === relation.startObjectUri ? relation.endObjectLabel : relation.startObjectLabel;\n } else if (value.refEntity) {\n objectUri = value.refEntity.objectURI;\n objectLabel = (objectsInfo[objectUri] as DCREntityInfo).label;\n }\n\n return {\n objectUri,\n objectLabel\n };\n};\n\nexport const getDataTypeDefinition = (attributeType: AttributeType, attributeValue: DCRValue) => {\n return when(\n allPass([pipe(prop('type'), equals(DataTypes.TYPE_STRING)), () => isUrl(attributeValue as PrimitiveValue)]),\n evolve({type: always(DataTypes.TYPE_URL)})\n )(getAttrDataTypeDefinition(attributeType));\n};\n","import {complement, curry, flatten, is, isEmpty, pathOr, propOr, times} from 'ramda';\nimport {\n AttributeType,\n DataTypes,\n DCRAttributes,\n DCRAttributeValue,\n DCRChange,\n DCRTypes,\n DCREntityInfo,\n getAttributeTypeSubAttributes,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n isEmptyValue,\n isSpecialAttribute,\n Metadata,\n DCRRelationInfo\n} from '@reltio/mdm-sdk';\n\nimport {Diff} from '../types/diffTypes';\nimport {getFilteredAttrTypes} from '../../../../attributes/helpers/attributesView';\nimport {getOperationType} from './helpers';\n\nconst getValues = (attributes: DCRAttributes | DCRChange, attrType: AttributeType) => {\n if ('newValue' in attributes || 'oldValue' in attributes) {\n const {newValue, oldValue, type} = attributes;\n const newAttrValues = pathOr([], ['value', attrType.name])(newValue);\n const oldAttrValues = pathOr([], ['value', attrType.name])(oldValue);\n\n const length = Math.max(newAttrValues.length, oldAttrValues.length);\n return times((index) => {\n const attributeValue = {\n newValue: newAttrValues[index],\n oldValue: oldAttrValues[index],\n type\n };\n\n return [{value: attributeValue}];\n }, length);\n }\n const values = attributes[attrType.name];\n return values ? [values] : [];\n};\n\nconst getEntityChanges = curry((metadata: Metadata, entityInfo: DCREntityInfo, changes: DCRAttributes) => {\n const attrTypes: AttributeType[] = getFilteredAttrTypes(metadata, entityInfo.type, [], []);\n return getAttributesList(metadata, attrTypes, changes);\n});\n\nconst getRelationChanges = curry(\n (metadata: Metadata, relationInfo: DCRRelationInfo, changes: DCRAttributes, changeType: DCRTypes): Diff[] => {\n const addRelationOperationIfNeeded = (changes: DCRAttributes, changeType: DCRTypes) => {\n if (changeType === DCRTypes.CREATE_RELATIONSHIP || isEmptyValue(changes)) {\n const operation = getOperationType(changeType);\n return operation ? {operation} : {};\n }\n return {};\n };\n\n const relationType = getRelationType(metadata, relationInfo.type);\n const attrTypes = getRelationAttributesList(metadata, relationInfo.type);\n return flatten([\n {\n level: 1,\n label: propOr('', 'label', relationType),\n attributeType: relationType,\n attributeValue: {...relationInfo, ...changes},\n ...addRelationOperationIfNeeded(changes, changeType)\n },\n getAttributesList(metadata, attrTypes, changes, 2)\n ]);\n }\n);\n\nconst getAttributesList = (\n metadata: Metadata,\n attrTypes: AttributeType[],\n attributes: DCRAttributes | DCRChange,\n level = 0\n): Diff[] => {\n return flatten(\n attrTypes\n .map((attrType) => {\n return getValues(attributes, attrType).map((value) => {\n return value.map((attributeValue) => {\n return dcrAttributesFactory(metadata, attrType, attributeValue, level);\n });\n });\n })\n .filter(complement(isEmpty))\n );\n};\n\nconst getSimpleAttributeValue = (attributeType: AttributeType, attributeValue: DCRAttributeValue) => {\n const value = isSpecialAttribute(attributeType) ? attributeValue : attributeValue.value;\n return is(Object, value) ? value : {newValue: attributeValue, type: DCRTypes.INSERT_ATTRIBUTE};\n};\n\nconst dcrAttributesFactory = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n switch (attributeType.type) {\n case DataTypes.TYPE_NESTED:\n case DataTypes.TYPE_IMAGE:\n return getNestedAttributeChange(metadata, attributeType, attributeValue, level);\n case DataTypes.TYPE_REFERENCE:\n return getReferenceAttributeChange(metadata, attributeType, attributeValue, level);\n default: {\n const value = getSimpleAttributeValue(attributeType, attributeValue);\n return getSimpleAttributeChange(attributeType, value as DCRChange, level);\n }\n }\n};\n\nconst getNestedAttributeChange = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n const attributeTypeList = getAttributeTypeSubAttributes({} as Metadata, attributeType);\n const label = getLabel(attributeType?.label || attributeType?.name);\n return [\n {level, label, attributeType, attributeValue},\n getAttributesList(metadata, attributeTypeList, attributeValue.value as DCRAttributes, level + 1)\n ];\n};\n\nconst getReferenceAttributeChange = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: DCRAttributeValue,\n level: number\n) => {\n const attributeTypeList = getAttributeTypeSubAttributes(metadata, attributeType);\n const label = attributeType?.label || attributeType?.name;\n\n return [\n {level, label, attributeType, attributeValue},\n getAttributesList(metadata, attributeTypeList, attributeValue.value as DCRAttributes, level + 1)\n ];\n};\n\nconst getDiffParameters = ({newValue, oldValue, type}: DCRChange) => {\n return type === DCRTypes.UPDATE_ATTRIBUTE ? {type, newValue, oldValue} : {type, newValue: oldValue || newValue};\n};\n\nconst getSimpleAttributeChange = (attributeType: AttributeType, attributeValue: DCRChange, level: number) => {\n const {newValue, oldValue, type} = getDiffParameters(attributeValue);\n const operation = getOperationType(type, oldValue as DCRAttributeValue);\n\n const label = attributeType?.label || attributeType?.name;\n\n return {\n attributeType,\n newValue,\n oldValue,\n operation,\n label,\n level\n };\n};\n\nexport {getEntityChanges, getRelationChanges};\n","import {\n concat,\n curry,\n difference,\n flatten,\n identity,\n isNil,\n omit,\n path,\n pick,\n pipe,\n propEq,\n propOr,\n reduce\n} from 'ramda';\nimport {\n DCRAttributes,\n DCRAttributeValue,\n DCRChange,\n DCRChanges,\n DCRObjectInfo,\n DCRTypes,\n Entity,\n EntityAttrTypes,\n generateTempUri,\n getRoleLabel,\n GroupedObjectsInfo,\n isEmptyValue,\n Metadata,\n Relation\n} from '@reltio/mdm-sdk';\nimport {Diff} from '../types/diffTypes';\nimport {getEntityChanges, getRelationChanges} from './attributesHelpers';\n\nconst ATTRIBUTE_DELIMITER = '/';\nconst SPECIAL_ATTRIBUTES_NAMES = [\n 'defaultProfilePicValue',\n EntityAttrTypes.tags.name,\n EntityAttrTypes.roles.name,\n EntityAttrTypes.startDate.name,\n EntityAttrTypes.endDate.name\n];\n\nconst prepareStartOrEndDate = ({newValue, oldValue}: DCRChange): DCRChange[] => {\n const parseValue = (value) => (isNaN(value) || isEmptyValue(value) ? value : parseInt(value));\n\n const isExistedValue = (value) => value?.length && !isEmptyValue(value) && !isEmptyValue(value[0]);\n\n const isExistNewValue = isExistedValue(newValue);\n const isExistOldValue = isExistedValue(oldValue);\n if (isExistNewValue && isExistOldValue) {\n return [\n {\n type: DCRTypes.UPDATE_ATTRIBUTE,\n oldValue: {value: parseValue(oldValue[0])},\n newValue: {value: parseValue(newValue[0])}\n }\n ];\n } else if (isExistNewValue) {\n return [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: parseValue(newValue[0])}\n }\n ];\n } else if (isExistOldValue) {\n return [\n {\n type: DCRTypes.DELETE_ATTRIBUTE,\n oldValue: {value: parseValue(oldValue[0])}\n }\n ];\n }\n};\n\nconst prepareRolesOrTags = (metadata: Metadata, change: DCRChange): DCRChange[] => {\n const {newValue = [], oldValue = [], type} = change;\n const getLabel = type === DCRTypes.UPDATE_ROLES ? getRoleLabel(metadata) : identity;\n\n const diffNewValue = difference(newValue, oldValue);\n const diffOldValue = difference(oldValue, newValue);\n\n const items = [];\n\n if (diffNewValue.length) {\n items.push({\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: diffNewValue.map(getLabel).join(', ')}\n });\n }\n\n if (diffOldValue.length) {\n items.push({\n type: DCRTypes.DELETE_ATTRIBUTE,\n oldValue: {value: diffOldValue.map(getLabel).join(', ')}\n });\n }\n\n return items;\n};\n\nconst getPath = (change: DCRChange): string => {\n const {type, attributePath, refObjectURI, refAttributeType} = change;\n\n const path = type === DCRTypes.INSERT_ATTRIBUTE ? generateTempUri(attributePath) : attributePath;\n\n if (refObjectURI) {\n const typePath = refAttributeType.split('/attributes/');\n const id = refObjectURI.split(ATTRIBUTE_DELIMITER)[1];\n return [typePath[1], id, path].join(ATTRIBUTE_DELIMITER);\n }\n return path;\n};\n\nconst prepareAttribute = (container: DCRAttributes, change: DCRChange) => {\n const changePath = getPath(change);\n\n const pathArray = changePath.split(ATTRIBUTE_DELIMITER);\n\n let holder: DCRAttributes | DCRAttributeValue = container;\n\n for (let i = 0; i < pathArray.length - 1; i = i + 2) {\n const key = pathArray[i];\n const id = pathArray[i + 1];\n\n const currentValue = (holder[key] || []).find(propEq('id', id));\n\n const newValue = pathArray.length === i + 2 ? change : {};\n const value = currentValue ? currentValue : ({id, value: newValue} as DCRAttributeValue);\n\n const refObjectURI = change.refObjectURI?.indexOf(id) >= 0 && change.refObjectURI;\n if (refObjectURI) {\n value.refObjectURI = refObjectURI;\n }\n\n if (isNil(currentValue)) {\n holder[key] = (holder[key] || []).concat(value);\n }\n\n holder = value.value;\n }\n return container;\n};\n\nconst createEntityOrRelation = (metadata: Metadata, value: Entity | Relation) => {\n const {attributes = {}, startDate, endDate} = value;\n const {roles, tags, defaultProfilePicValue} = value as Entity;\n const newObject = {...attributes} as DCRAttributes;\n\n if (defaultProfilePicValue) {\n newObject['defaultProfilePicValue'] = [defaultProfilePicValue];\n }\n if (roles) {\n newObject[EntityAttrTypes.roles.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: roles.map(getRoleLabel(metadata)).join(', ')}\n }\n ];\n }\n if (tags) {\n newObject[EntityAttrTypes.tags.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: tags.join(', ')}\n }\n ];\n }\n if (startDate) {\n newObject[EntityAttrTypes.startDate.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: startDate}\n }\n ];\n }\n if (endDate) {\n newObject[EntityAttrTypes.endDate.name] = [\n {\n type: DCRTypes.INSERT_ATTRIBUTE,\n newValue: {value: endDate}\n }\n ];\n }\n return newObject;\n};\n\nconst mergeAttributesInChange = (\n metadata: Metadata,\n objectInfo: DCRObjectInfo,\n change: DCRChange,\n container: DCRAttributes = {}\n) => {\n const {type} = change;\n\n switch (type) {\n case DCRTypes.UPDATE_PROFILE_PIC_BY_URL:\n container['defaultProfilePicValue'] = [change.newValue];\n break;\n case DCRTypes.UPDATE_TAGS:\n container[EntityAttrTypes.tags.name] = prepareRolesOrTags(metadata, change);\n break;\n case DCRTypes.UPDATE_ROLES: {\n container[EntityAttrTypes.roles.name] = prepareRolesOrTags(metadata, change);\n break;\n }\n case DCRTypes.UPDATE_START_DATE:\n container[EntityAttrTypes.startDate.name] = prepareStartOrEndDate(change);\n break;\n case DCRTypes.UPDATE_END_DATE:\n container[EntityAttrTypes.endDate.name] = prepareStartOrEndDate(change);\n break;\n case DCRTypes.CREATE_RELATIONSHIP:\n case DCRTypes.CREATE_ENTITY: {\n return {\n ...container,\n ...createEntityOrRelation(metadata, change.newValue as Entity | Relation)\n };\n }\n case DCRTypes.INSERT_ATTRIBUTE:\n case DCRTypes.UPDATE_ATTRIBUTE:\n case DCRTypes.DELETE_ATTRIBUTE:\n case DCRTypes.PIN_ATTRIBUTE:\n case DCRTypes.IGNORE_ATTRIBUTE:\n prepareAttribute(container, change);\n break;\n default:\n break;\n }\n\n return container;\n};\n\nconst updateRelation = (metadata: Metadata, changes: DCRChanges, relationInfo: GroupedObjectsInfo['relations'][0]) => {\n const relationChanges: DCRChange[] = propOr([], relationInfo.uri)(changes);\n return relationChanges.reduce((result: DCRAttributes, change) => {\n return mergeAttributesInChange(metadata, relationInfo, change, result);\n }, {});\n};\n\nconst mergeChanges = (\n metadata: Metadata,\n changes: DCRChanges,\n entityInfo: GroupedObjectsInfo['entity'],\n relationsInfo: GroupedObjectsInfo['relations']\n): [Diff[], Diff[]] => {\n const getAttributeChanges = (attributeName: string) =>\n pipe(pick([attributeName]), getEntityChanges(metadata, entityInfo));\n const concatChanges = curry((getters, attributesTree) =>\n reduce((acc, getter) => concat(acc, getter(attributesTree)), [], getters)\n );\n\n const entityInfoChanges: DCRChange[] = propOr([], entityInfo.uri)(changes);\n\n const changesTree = entityInfoChanges.reduce((result: DCRAttributes, change: DCRChange) => {\n return mergeAttributesInChange(metadata, entityInfo, change, result);\n }, {});\n\n const relationsTrees = relationsInfo.map((relationInfo) => updateRelation(metadata, changes, relationInfo));\n\n const entityChanges: Diff[] = concatChanges(\n [\n pipe(omit(SPECIAL_ATTRIBUTES_NAMES), getEntityChanges(metadata, entityInfo)),\n getAttributeChanges(EntityAttrTypes.roles.name),\n getAttributeChanges(EntityAttrTypes.tags.name),\n getAttributeChanges(EntityAttrTypes.startDate.name),\n getAttributeChanges(EntityAttrTypes.endDate.name)\n ],\n changesTree\n );\n\n const relationsChanges: Diff[] = flatten(\n relationsInfo.map((relationInfo, index) => {\n const changeType: DCRTypes = path([relationInfo.uri, 0, 'type'], changes);\n return getRelationChanges(metadata, relationInfo, relationsTrees[index], changeType);\n })\n );\n\n return [entityChanges, relationsChanges];\n};\n\nexport {mergeChanges};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n linkLabel: {\n color: theme.palette.primary.main,\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Link from '@mui/material/Link';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n suggestionsCount: number;\n isExpanded: boolean;\n className?: string;\n};\n\nconst ShowMoreLink = ({suggestionsCount, isExpanded, onClick, className}: Props) => {\n const styles = useStyles();\n return (\n <Link component=\"button\" variant=\"caption\" underline=\"none\" onClick={onClick} className={className}>\n <span className={styles.linkLabel}>\n {isExpanded\n ? i18n.text('View less suggestions')\n : i18n.text('View ${suggestionsCount} more suggestions', {suggestionsCount})}\n </span>\n </Link>\n );\n};\n\nexport default ShowMoreLink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n field: {\n fontSize: '12px',\n lineHeight: '20px',\n color: theme.palette.text.primary,\n marginTop: '6px',\n overflow: 'hidden',\n wordBreak: 'break-word'\n },\n fieldName: {\n color: theme.palette.text.secondary,\n marginRight: '8px'\n },\n difference: {\n marginRight: '8px'\n },\n arrow: {\n margin: '0 4px',\n fontSize: '12px',\n color: theme.palette.text.primary\n },\n chip: {\n height: '20px',\n fontSize: '10px',\n fontWeight: 500,\n lineHeight: '16px',\n letterSpacing: 0,\n flexShrink: 0,\n textTransform: 'capitalize',\n color: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n '&.edited': {\n color: '#CC7500',\n borderColor: '#CC7500'\n },\n '&.added': {\n color: '#599E0E',\n borderColor: '#599E0E'\n },\n '&.deleted': {\n color: '#CF0E26',\n borderColor: '#CF0E26'\n }\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {isNil} from 'ramda';\nimport ArrowRightAltIcon from '@mui/icons-material/ArrowRightAlt';\nimport Chip from '@mui/material/Chip';\nimport {DCROperationTypes} from '@reltio/mdm-sdk';\nimport {getOperationLabel} from '../../helpers/helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n label: React.ReactNode;\n oldValue?: React.ReactNode;\n newValue?: React.ReactNode;\n operation?: DCROperationTypes;\n className?: string;\n};\n\nconst ChangeView = ({label, oldValue, newValue, operation, className}: Props) => {\n const styles = useStyles();\n const value = oldValue || newValue;\n\n return (\n <div className={classnames(styles.field, className)}>\n <span className={styles.fieldName}>{label}:</span>\n {!isNil(value) && (\n <span className={styles.difference}>\n {value}\n {newValue && oldValue && (\n <>\n <ArrowRightAltIcon className={styles.arrow} />\n {newValue}\n </>\n )}\n </span>\n )}\n {operation && (\n <Chip\n variant=\"outlined\"\n label={getOperationLabel(operation)}\n className={classnames(styles.chip, operation)}\n />\n )}\n </div>\n );\n};\n\nexport default ChangeView;\n","import React from 'react';\nimport {DCRObjectsInfo} from '@reltio/mdm-sdk';\n\nexport const AttributesChangesContext = React.createContext<DCRObjectsInfo>(null);\n\nAttributesChangesContext.displayName = 'AttributesChangesContext';\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n level: number;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n linkContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n marginLeft: '4px'\n },\n linkLabel: {\n color: theme.palette.primary.main,\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n disabledLink: {\n pointerEvents: 'none',\n cursor: 'default'\n },\n label: {\n color: theme.palette.text.primary\n },\n change: ({level = 0}: StylesProps) => ({\n marginLeft: `${level * 16}px`\n })\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {isNil} from 'ramda';\nimport classnames from 'classnames';\nimport {ChangeValue, DCRAttributeValue, DCRChange, getAttributeValue, getLabel, isReference} from '@reltio/mdm-sdk';\nimport ChangeView from '../ChangeView/ChangeView';\nimport {AttributesChangesContext} from '../../contexts/AttributesChangesContext';\nimport {getAttributeDescription, getDataTypeDefinition} from '../../helpers/helpers';\nimport {Diff, RelationAttributeValue} from '../../types/diffTypes';\nimport DataTypeValue from '../../../../../DataTypeValue/DataTypeValue';\nimport EntityUriLink from '../../../../../EntityUriLink/EntityUriLink';\nimport {useMdmEntityUri} from '../../../../../../contexts';\nimport {useStyles} from './styles';\n\nconst DiffRenderer = ({label, level, attributeType, attributeValue, oldValue, newValue, operation}: Diff) => {\n const styles = useStyles({level});\n const objectsInfo = useContext(AttributesChangesContext);\n const entityUri = useMdmEntityUri();\n\n const getLinkDescription = useCallback(() => {\n if (isReference(attributeType)) {\n const value =\n (attributeValue.value as DCRChange)?.newValue ?? (attributeValue.value as DCRChange)?.oldValue;\n return getAttributeDescription(\n attributeType,\n (value as DCRAttributeValue) || attributeValue,\n entityUri,\n objectsInfo\n );\n } else if ('endObject' in attributeType) {\n const {endObjectUri, endObjectLabel} = attributeValue as RelationAttributeValue;\n return {\n objectUri: endObjectUri,\n objectLabel: endObjectLabel\n };\n }\n }, [attributeType, attributeValue, entityUri, objectsInfo]);\n\n const renderLink = useCallback(() => {\n const {objectUri, objectLabel} = getLinkDescription() || {};\n\n if (!isNil(objectUri) && !isNil(objectLabel)) {\n const isNotExist = objectsInfo[objectUri]?.isExist === false;\n return (\n <EntityUriLink\n value={objectUri}\n className={classnames(styles.linkContainer, {[styles.disabledLink]: isNotExist})}\n >\n <span className={classnames(styles.linkLabel, {[styles.label]: isNotExist})}>\n {getLabel(objectLabel)}\n </span>\n </EntityUriLink>\n );\n }\n return null;\n }, [getLinkDescription, objectsInfo, styles]);\n\n const changeLabel = useMemo(() => {\n return (\n <span>\n {label}\n {renderLink()}\n </span>\n );\n }, [label, renderLink]);\n\n const renderValue = useCallback(\n (value: ChangeValue) => {\n const attrValue = getAttributeValue(value);\n return (\n <DataTypeValue value={attrValue} dataTypeDefinition={getDataTypeDefinition(attributeType, attrValue)} />\n );\n },\n [attributeType]\n );\n\n return (\n <ChangeView\n className={styles.change}\n label={changeLabel}\n oldValue={oldValue && renderValue(oldValue)}\n newValue={newValue && renderValue(newValue)}\n operation={operation}\n />\n );\n};\n\nexport default DiffRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n title: {\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px',\n fontWeight: 500,\n marginTop: '8px'\n }\n});\n","import React from 'react';\nimport {has} from 'ramda';\nimport DiffRenderer from '../DiffRenderer/DiffRenderer';\nimport {Diff, Title} from '../../types/diffTypes';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n changes: (Diff | Title)[];\n};\n\nconst DCRChangesList = ({changes}: Props) => {\n const styles = useStyles();\n return (\n <>\n {changes.map((change, index) => {\n return has('level', change) ? (\n <DiffRenderer {...(change as Diff)} key={index} />\n ) : (\n <div className={styles.title} key={index}>\n {change.label}\n </div>\n );\n })}\n </>\n );\n};\n\nexport default DCRChangesList;\n","import {has, filter, length, pipe} from 'ramda';\n\nexport const getSuggestionsCount = pipe(filter(has('operation')), length);\n","import {\n ChangeRequest,\n DCRChanges,\n DCRObjectInfo,\n DCRObjectsInfo,\n DCRTypes,\n GroupedObjectsInfo,\n isEntityUri,\n isRelationUri\n} from '@reltio/mdm-sdk';\nimport {allPass, concat, curry, equals, filter, keys, map, pathOr, pipe, prop, uniq} from 'ramda';\n\nexport const getEntitiesObjects = filter(pipe(prop('uri'), isEntityUri));\nexport const getRelationsObjects = filter(pipe(prop('uri'), isRelationUri));\n\nconst getRelations = (objectsWithChanges: DCRObjectInfo, entityUri: string) => {\n return filter(allPass([pipe(prop('uri'), isRelationUri), pipe(prop('startObjectUri'), equals(entityUri))]))(\n objectsWithChanges\n );\n};\n\nexport const extractObjectsFromChangeRequest = (changes: DCRChanges, objectsInfo: DCRObjectsInfo): DCRObjectInfo[] => {\n const getChange = (key) => prop([key], changes);\n return pipe(\n keys,\n filter(getChange),\n map((key) => ({...objectsInfo[key], uri: key}))\n )(objectsInfo);\n};\n\nexport const createEntityRelationsObjectByEntity = curry(\n (objectsWithChanges: DCRObjectInfo, entity: GroupedObjectsInfo['entity']) => {\n return {\n entity,\n relations: getRelations(objectsWithChanges, entity.uri)\n };\n }\n);\n\nexport const createEntityRelationsObjectByRelation = curry(\n (objectsInfo: DCRObjectInfo, relation: GroupedObjectsInfo['relations'][0]) => {\n const entity = objectsInfo[relation.startObjectUri];\n const relations = [relation];\n\n return entity ? {entity: {...entity, uri: relation.startObjectUri}, relations} : {relations};\n }\n);\n\nexport const concatEntityRelationsObjects = (acc: Record<string, GroupedObjectsInfo>, object: GroupedObjectsInfo) => {\n const {entity, relations} = object;\n const {uri: entityUri} = entity;\n\n const mergedRelations = pipe(pathOr([], [entityUri, 'relations']), concat(relations), uniq)(acc);\n\n acc[entityUri] = {\n entity,\n relations: mergedRelations\n };\n\n return acc;\n};\n\nexport const getEntityUriForChangeRequest = (dcrUri: string, entityUri: string) => {\n return `${dcrUri}/changes/${entityUri}`;\n};\n\nexport const isCreateEntityOperation = (dcr: ChangeRequest) => {\n return dcr.type === DCRTypes.CREATE_ENTITY;\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n boxSizing: 'border-box',\n border: '1px solid rgba(0,0,0,0.03)',\n borderRadius: '3px',\n backgroundColor: 'rgba(0,0,0,0.03)',\n padding: '10px',\n margin: '12px 16px 12px 0'\n },\n uri: {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n cursor: 'pointer'\n },\n label: {\n fontSize: '12px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n showMoreLink: {\n marginTop: '8px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, any, flatten, ifElse, propOr} from 'ramda';\nimport {DCRChanges, DCRObjectsInfo, getEntityUriForLink, getLabel, GroupedObjectsInfo} from '@reltio/mdm-sdk';\nimport {Diff, Title} from './types/diffTypes';\nimport {mergeChanges} from './helpers/mergeHelpers';\nimport ShowMoreLink from './components/ShowMoreLink/ShowMoreLink';\nimport DCRChangesList from './components/DCRChangesList/DCRChangesList';\nimport {AttributesChangesContext} from './contexts/AttributesChangesContext';\nimport {useCollapsibleList} from './hooks/useCollapsibleList';\nimport EntityUriLink from '../../../EntityUriLink/EntityUriLink';\nimport {getEntityUriForChangeRequest, isCreateEntityOperation} from '../../helpers/dcrHelpers';\nimport {useMdmMetadata} from '../../../../contexts';\nimport {useStyles} from './styles';\n\ntype Props = {\n changes: DCRChanges;\n objectsInfo: DCRObjectsInfo;\n entityInfo: GroupedObjectsInfo['entity'];\n dcrUri: string;\n relationsInfo?: GroupedObjectsInfo['relations'];\n max?: number;\n};\n\nconst AttributesChanges = ({changes, dcrUri, objectsInfo, entityInfo, relationsInfo, max}: Props) => {\n const styles = useStyles();\n\n const metadata = useMdmMetadata();\n\n const [mergedEntityChanges, mergedRelationsChanges] = useMemo(\n () => mergeChanges(metadata, changes, entityInfo, relationsInfo),\n [metadata, changes, entityInfo, relationsInfo]\n );\n\n const changesList: (Diff | Title)[] = useMemo(() => {\n const relationshipTitle: Title = {label: i18n.text('Relationships')};\n return mergedRelationsChanges.length > 0\n ? flatten([mergedEntityChanges, relationshipTitle, mergedRelationsChanges])\n : mergedEntityChanges;\n }, [mergedEntityChanges, mergedRelationsChanges]);\n\n const {isExpanded, onToggle, itemsToShow, collapsedSuggestionsCount} = useCollapsibleList(changesList, max);\n\n const entityUri: string = ifElse(\n any(isCreateEntityOperation),\n always(getEntityUriForChangeRequest(dcrUri, entityInfo.uri)),\n always(getEntityUriForLink(entityInfo))\n )(propOr([], entityInfo.uri, changes));\n\n const screen: string = ifElse(\n any(isCreateEntityOperation),\n always('dcrReview'),\n always('profile')\n )(propOr([], entityInfo.uri, changes));\n\n return (\n <AttributesChangesContext.Provider value={objectsInfo}>\n <div className={styles.container}>\n <EntityUriLink className={styles.uri} value={entityUri} screen={screen}>\n <div className={styles.label}>{getLabel(entityInfo.label)}</div>\n </EntityUriLink>\n <DCRChangesList changes={itemsToShow} />\n {collapsedSuggestionsCount > 0 && (\n <ShowMoreLink\n onClick={onToggle}\n suggestionsCount={collapsedSuggestionsCount}\n isExpanded={isExpanded}\n className={styles.showMoreLink}\n />\n )}\n </div>\n </AttributesChangesContext.Provider>\n );\n};\n\nexport default AttributesChanges;\n","import {useCallback, useMemo, useState} from 'react';\nimport {getSuggestionsCount} from '../helpers/contextHelpers';\nimport {Diff, Title} from '../types/diffTypes';\n\nconst DEFAULT_VISIBLE_ITEMS_COUNT = 3;\n\nexport const useCollapsibleList = (items: (Diff | Title)[], limit = DEFAULT_VISIBLE_ITEMS_COUNT) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const onToggle = useCallback(() => setIsExpanded((value) => !value), []);\n\n const collapsedItems = useMemo(() => items.slice(0, limit), [items, limit]);\n const suggestionsCount = useMemo(() => getSuggestionsCount(items), [items]);\n const visibleSuggestionsCount = useMemo(() => getSuggestionsCount(collapsedItems), [collapsedItems]);\n\n const itemsToShow = isExpanded ? items : collapsedItems;\n const collapsedSuggestionsCount = suggestionsCount - visibleSuggestionsCount;\n\n return {isExpanded, onToggle, itemsToShow, collapsedSuggestionsCount};\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {flatten, has, isEmpty, map, partition, path, pipe, reduce, values} from 'ramda';\nimport {ChangeRequest, getDataChangeRequest, getEntitiesByUris, GroupedObjectsInfo} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {\n concatEntityRelationsObjects,\n createEntityRelationsObjectByEntity,\n createEntityRelationsObjectByRelation,\n extractObjectsFromChangeRequest,\n getEntitiesObjects,\n getRelationsObjects\n} from '../helpers/dcrHelpers';\nimport {showApiError} from '../helpers/errors';\n\nexport const useChangeRequest = (dcrUri: string) => {\n const [groupedObjects, setGroupedObjects] = useState<GroupedObjectsInfo[]>([]);\n const [dcr, setDcr] = useState<ChangeRequest>(null);\n const safePromise = useSafePromise();\n\n const requestEntities = useCallback((entityUris: string[]) => {\n if (isEmpty(entityUris)) {\n return Promise.resolve([]);\n }\n\n return safePromise(getEntitiesByUris(entityUris, {searchOptions: 'ovOnly', defaultMaxValues: 1}));\n }, []); // eslint-disable-line\n\n useEffect(() => {\n getDataChangeRequest(dcrUri)\n .then((dcr) => {\n const {changes, objectsInfo} = dcr;\n\n const objectsWithChanges = extractObjectsFromChangeRequest(changes, objectsInfo);\n\n const entityObjectsWithRelations: GroupedObjectsInfo[] = pipe(\n getEntitiesObjects,\n map(createEntityRelationsObjectByEntity(objectsWithChanges))\n )(objectsWithChanges);\n\n const relationsObjects: GroupedObjectsInfo[] = pipe(\n getRelationsObjects,\n map(createEntityRelationsObjectByRelation(objectsInfo))\n )(objectsWithChanges);\n\n const [relationsObjectsWithEntity, relationsObjectsWithoutEntity] = partition(\n has('entity'),\n relationsObjects\n );\n\n const entityUris: string[] = relationsObjectsWithoutEntity.map(\n path(['relations', 0, 'startObjectUri'])\n );\n\n requestEntities(entityUris)\n .then((entities) => {\n const relationsObjectsWithRequestedEntities = relationsObjectsWithoutEntity.map(\n (relationsObject, index) => {\n return {\n ...relationsObject,\n entity: entities[index]\n };\n }\n );\n\n pipe(\n flatten,\n reduce(concatEntityRelationsObjects, {}),\n values,\n setGroupedObjects\n )([\n entityObjectsWithRelations,\n relationsObjectsWithEntity,\n relationsObjectsWithRequestedEntities\n ]);\n })\n .catch(showApiError);\n\n setDcr(dcr);\n })\n .catch(showApiError);\n }, [dcrUri, requestEntities]);\n\n return {dcr, groupedObjects};\n};\n","import React from 'react';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from '../GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport {getDCRUri} from '../../helpers';\nimport DcrTaskIcon from '../../../../icons/DcrTaskIcon';\nimport AttributesChanges from '../../components/AttributesChanges/AttributesChanges';\nimport {useChangeRequest} from '../../hooks/useChangeRequest';\n\ntype Props = {\n task: WorkflowTaskData;\n};\n\nconst DataChangeRequestTaskCard = ({task}: Props) => {\n const {objectURIs} = task;\n const dcrUri = getDCRUri(objectURIs);\n\n const {dcr, groupedObjects} = useChangeRequest(dcrUri);\n\n return (\n <GenericWorkflowTaskCard task={task} Icon={DcrTaskIcon}>\n {dcr &&\n groupedObjects.map((object, index: number) => (\n <LineDecorator key={index} last={index === groupedObjects.length - 1} divider={true}>\n <AttributesChanges\n entityInfo={object.entity}\n relationsInfo={object.relations}\n changes={dcr.changes}\n objectsInfo={dcr.objectsInfo}\n dcrUri={dcrUri}\n />\n </LineDecorator>\n ))}\n </GenericWorkflowTaskCard>\n );\n};\n\nexport default DataChangeRequestTaskCard;\n","import React from 'react';\n\nconst SvgPmTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#1976D2\" cx={14} cy={14} r={14} />\n <path\n d=\"M22.5 14L18 9.5V13h-3.5L9 7.5 7.5 9l6.04 6H18v3.5l4.5-4.5zm-11.46 1.46L7.5 19 9 20.5l3.54-3.54-1.5-1.5z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgPmTaskIcon;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n pmCard: {\n marginLeft: '-15px'\n }\n});\n","import React from 'react';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from '../GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport LineDecorator from '../../components/LineDecorator/LineDecorator';\nimport PmTaskIcon from '../../../../icons/PmTaskIcon';\nimport {useMatchesLoader} from '../../../../hooks/useMatchesLoader';\nimport {ProfileMatchCard} from '../../../ProfileMatchCard/ProfileMatchCard';\nimport {useMdmEntity, useMdmMetadata} from '../../../../contexts';\nimport {useStyles} from './styles';\n\ntype Props = {\n task: WorkflowTaskData;\n};\n\nconst defaultOptions = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\n\nconst PotentialMatchTaskCard = ({task}: Props) => {\n const styles = useStyles();\n\n const entity = useMdmEntity();\n const metadata = useMdmMetadata();\n\n const {objectURIs} = task;\n const {matches, entitiesMap} = useMatchesLoader({\n enabled: !!entity.uri,\n entity,\n filter: '',\n rowsPerPage: Number.MAX_SAFE_INTEGER,\n page: 0,\n options: defaultOptions\n });\n const match = matches?.find(({object}) => objectURIs.includes(object.uri));\n\n return (\n <GenericWorkflowTaskCard task={task} Icon={PmTaskIcon}>\n {match && (\n <LineDecorator last>\n <div className={styles.pmCard}>\n <ProfileMatchCard metadata={metadata} entity={entity} match={match} entitiesMap={entitiesMap} />\n </div>\n </LineDecorator>\n )}\n </GenericWorkflowTaskCard>\n );\n};\n\nexport default PotentialMatchTaskCard;\n","import React from 'react';\n\nconst SvgDefaultTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <circle fill=\"#205191\" cx={14} cy={14} r={14} />\n <path\n d=\"M9.667 20.622c-.92 0-1.667-.744-1.667-1.662V8.99c0-.916.747-1.66 1.667-1.66h2.446A1.993 1.993 0 0114 6l.162.006a1.992 1.992 0 011.725 1.323h2.446c.92 0 1.667.745 1.667 1.662v9.97c0 .917-.747 1.661-1.667 1.661zm9-1.33V8.66h-1.334v1.993h-6.666V8.66H9.333v10.634h9.334zM15.86 14.46v1.302h-5.206V14.46h5.206zm1.494-2v1.302h-6.7V12.46h6.7zM14 7.33c.367 0 .667.298.667.664a.668.668 0 01-1.334 0c0-.366.3-.665.667-.665z\"\n fill=\"#FFF\"\n opacity={0.87}\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDefaultTaskIcon;\n","import React from 'react';\n\nconst SvgDeleteRequestTaskIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\" opacity={0.87}>\n <circle fill=\"#0D47A1\" cx={14} cy={14} r={14} />\n <path\n d=\"M8.17 9.824v8.995c0 .886.72 1.606 1.607 1.606h8.352c.192 0 .375-.035.546-.097l1.38 1.382.804-.804-1.32-1.32-1.09-1.089-8.993-8.994-1.092-1.092-1.317-1.317-.803.803L8.17 9.824zm9.316 9.316h-8.03v-8.03l8.03 8.03zM9.777 7.575c-.192 0-.376.033-.55.094L10.42 8.86h.32v.322l1.607 1.606h4.819V8.86h1.284v8.03l1.285 1.286V9.182c0-.887-.72-1.607-1.606-1.607h-2.358a1.931 1.931 0 00-1.818-1.285 1.93 1.93 0 00-1.818 1.285H9.777zm3.533.643c0-.353.29-.643.643-.643.353 0 .642.29.642.643a.644.644 0 01-.642.642.644.644 0 01-.643-.642z\"\n fill=\"#FFF\"\n />\n </g>\n </svg>\n );\n};\n\nexport default SvgDeleteRequestTaskIcon;\n","import React from 'react';\nimport {PredefinedWorkflowProcessType, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport GenericWorkflowTaskCard from './GenericWorkflowTaskCard/GenericWorkflowTaskCard';\nimport DataChangeRequestTaskCard from './DataChangeRequestTaskCard/DataChangeRequestTaskCard';\nimport PotentialMatchTaskCard from './PotentialMatchTaskCard/PotentialMatchTaskCard';\n\nimport DefaultTaskIcon from '../../../icons/DefaultTaskIcon';\nimport DeleteRequestTaskIcon from '../../../icons/DeleteRequestTaskIcon';\n\nexport type FactoryProps = {\n task: WorkflowTaskData;\n};\n\nclass WorkflowTaskCardsFactory {\n static build = ({task}: FactoryProps) => {\n const {processType} = task;\n switch (processType) {\n case PredefinedWorkflowProcessType.dataChangeRequestReview:\n return <DataChangeRequestTaskCard task={task} />;\n case PredefinedWorkflowProcessType.potentialMatchReview:\n return <PotentialMatchTaskCard task={task} />;\n case PredefinedWorkflowProcessType.recommendForDelete:\n return <GenericWorkflowTaskCard task={task} Icon={DeleteRequestTaskIcon} />;\n default:\n return <GenericWorkflowTaskCard task={task} Icon={DefaultTaskIcon} />;\n }\n };\n}\n\nexport default WorkflowTaskCardsFactory;\n","import WorkflowTaskCardsFactory, {FactoryProps} from './WorkflowTaskCardsFactory';\n\nexport const WorkflowTaskCard = ({task}: FactoryProps) => WorkflowTaskCardsFactory.build({task});\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n popoverPaper: {\n width: '464px'\n },\n title: {\n fontSize: '20px',\n fontWeight: 500,\n letterSpacing: '0.25px',\n lineHeight: '24px',\n color: theme.palette.text.primary,\n marginBottom: '17px'\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n padding: '23px 24px 14px 24px'\n },\n simpleDropDownSelector: {\n marginBottom: '20px'\n },\n inputRoot: {\n paddingTop: '0 !important',\n paddingBottom: '0 !important'\n },\n select: {\n fontSize: '14px'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '5px 8px 8px',\n borderTop: '1px solid rgba(0,0,0,0.12)'\n },\n cancelButton: {\n marginRight: '8px'\n },\n input: {\n fontSize: '14px'\n }\n}));\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport TextField from '@mui/material/TextField';\nimport Portal from '@mui/material/Portal';\nimport Snackbar from '@mui/material/Snackbar';\nimport Popover from '@mui/material/Popover';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport SimpleDropDownSelector from '../../../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {useWorkflowDefinitions} from '../../hooks/useWorkflowDefinitions';\nimport {useWorkflowProcessInstance} from '../../hooks/useWorkflowProcessInstance';\nimport {useStyles} from './styles';\n\ntype Props = {\n anchorEl: Element;\n onClose: () => void;\n};\n\nexport const AddWorkflowDialog = ({anchorEl, onClose}: Props) => {\n const styles = useStyles();\n\n const [comment, setComment] = useState('');\n const [taskType, setTaskType] = useState(null);\n const [isOpenSnackbar, setIsOpenSnackbar] = useState(false);\n\n const {definitions} = useWorkflowDefinitions();\n const {processInstance, loading} = useWorkflowProcessInstance();\n\n const handleChangeComment = (e) => {\n setComment(e.target.value);\n };\n\n const handleChangeTaskType = (value) => {\n setTaskType(value);\n };\n\n const handleStart = () => {\n processInstance(comment, taskType?.value)\n .then(() => {\n setIsOpenSnackbar(true);\n setComment('');\n setTaskType(null);\n onClose();\n })\n .catch(() => {});\n };\n\n const handleCloseSnackbar = () => {\n setIsOpenSnackbar(false);\n };\n\n const open = Boolean(anchorEl);\n\n return (\n <>\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n classes={{\n paper: styles.popoverPaper\n }}\n >\n <div className={styles.content}>\n <Typography className={styles.title}>{i18n.text('Add new workflow')}</Typography>\n <SimpleDropDownSelector\n className={styles.simpleDropDownSelector}\n variant=\"filled\"\n height={40}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true\n }\n }}\n placeholder={i18n.text('Select task type')}\n value={taskType}\n onChange={handleChangeTaskType}\n label={''}\n options={definitions.map((definition) => {\n return {\n value: definition.type,\n label: definition.displayName\n };\n })}\n />\n <TextField\n variant=\"filled\"\n hiddenLabel\n size=\"small\"\n placeholder=\"Type a comment\"\n InputProps={{\n disableUnderline: true,\n classes: {\n input: styles.input,\n root: styles.inputRoot\n }\n }}\n value={comment}\n onChange={handleChangeComment}\n multiline={true}\n />\n </div>\n <div className={styles.footer}>\n <Button disabled={loading} className={styles.cancelButton} onClick={onClose}>\n {i18n.text('Cancel')}\n </Button>\n <Button disabled={loading} color=\"primary\" onClick={handleStart}>\n {i18n.text('Start')}\n </Button>\n </div>\n </Popover>\n <Portal container={document.body}>\n <Snackbar\n open={isOpenSnackbar}\n autoHideDuration={5000}\n onClose={handleCloseSnackbar}\n message={i18n.text('A new workflow has started')}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n />\n </Portal>\n </>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {processDefinitions} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks';\nimport {useMdmEntity, useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nconst filterDefinitions = (definitions, entityType) => {\n return definitions.filter(({manualStart, objectTypes}) => {\n return manualStart && (!objectTypes || objectTypes?.some((_entityType) => _entityType === entityType));\n });\n};\n\nexport const useWorkflowDefinitions = () => {\n const [definitions, setDefinitions] = useState([]);\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n const entity = useMdmEntity();\n const entityType = entity.type;\n const safePromise = useSafePromise();\n\n useEffect(() => {\n safePromise(processDefinitions({workflowPath, environment, tenant})).then(({data}) => {\n if (!data) {\n return;\n }\n setDefinitions(filterDefinitions(data, entityType));\n });\n }, [entityType, workflowPath, environment, tenant]);\n\n return {definitions};\n};\n","import {useCallback, useContext, useState} from 'react';\nimport {startProcessInstance} from '@reltio/mdm-sdk';\nimport {WorkflowTasksContext} from '../../../contexts/WorkflowTasksContext';\nimport {showWorkflowError} from '../helpers/errors';\nimport {useMdmEntity, useMdmTenant, useMdmWorkflowEnvironmentUrl, useMdmWorkflowPath} from '../../../contexts';\n\nexport const useWorkflowProcessInstance = () => {\n const [loading, setLoading] = useState(false);\n\n const {loadTasks} = useContext(WorkflowTasksContext);\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const tenant = useMdmTenant();\n const entity = useMdmEntity();\n\n const entityUri = entity.uri;\n\n const processInstance = useCallback(\n (comment, taskType) => {\n setLoading(true);\n\n return startProcessInstance({\n workflowPath,\n tenant,\n environment,\n processType: taskType,\n comment,\n objectURIs: [entityUri]\n })\n .then(() => {\n loadTasks();\n })\n .catch((error) => {\n showWorkflowError(error);\n throw error;\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [entityUri, environment, loadTasks, tenant, workflowPath]\n );\n\n return {processInstance, loading};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n button: {\n padding: '9px 16px 9px 12px',\n marginLeft: 'auto',\n marginRight: '8px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport {useWorkflowCheckPermission} from '../../hooks/useWorkflowCheckPermission';\nimport {AddWorkflowDialog} from '../AddWorkflowDialog/AddWorkflowDialog';\nimport {useStyles} from './styles';\n\nexport const AddWorkflowButton = () => {\n const styles = useStyles();\n const [anchorEl, setAnchorEl] = useState(null);\n\n const checkWorkflowPermission = useWorkflowCheckPermission();\n const canStartProcess = checkWorkflowPermission('START_PROCESS_INSTANCE');\n const canViewProcessDefinitions = checkWorkflowPermission('VIEW_PROCESS_DEFINITIONS');\n\n const handleOpen = (e) => setAnchorEl(e.currentTarget);\n const handleClose = () => setAnchorEl(null);\n\n return canStartProcess && canViewProcessDefinitions ? (\n <>\n <Button color=\"primary\" className={styles.button} onClick={handleOpen}>\n <AddIcon className={styles.icon} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n <AddWorkflowDialog anchorEl={anchorEl} onClose={handleClose} />\n </>\n ) : null;\n};\n","import React from 'react';\nimport {partition, propEq} from 'ramda';\nimport Button from '@mui/material/Button';\nimport {WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useWorkflowActions} from '../../hooks/useWorkflowActions';\n\ntype Props = {\n task: WorkflowTaskData;\n};\nexport const TaskActionButtons = ({task}: Props) => {\n const {taskId, possibleActions, assignee, isOpen, preferredAction} = task;\n\n const {actions, actionRequestIsInProgress: disabled} = useWorkflowActions({\n taskId,\n possibleActions,\n assignee,\n isOpen\n });\n\n const [preferredActions, otherActions] = partition(propEq('text', preferredAction.label), actions);\n return (\n <>\n {otherActions.map((action) => (\n <Button variant=\"outlined\" onClick={action.onClick} key={action.text} disabled={disabled}>\n {action.text}\n </Button>\n ))}\n {preferredActions.map((action) => (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={action.onClick}\n key={action.text}\n disabled={disabled}\n >\n {action.text}\n </Button>\n ))}\n </>\n );\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {filter, flatten, isNil, map, mergeLeft, pipe, prop, propEq, reject, uniqBy, when} from 'ramda';\nimport {getEntityUriFromDCRUri, getTasksForEntity, isDCRUri, isTempUri, WorkflowTaskData} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '../../../hooks/useSafePromise';\nimport {useWorkflowCheckPermission} from './useWorkflowCheckPermission';\nimport {\n useMdmEntityUri,\n useMdmIsEditableMode,\n useMdmIsWorkflowEnabled,\n useMdmProfileLastLoadedTime,\n useMdmTenant,\n useMdmWorkflowEnvironmentUrl,\n useMdmWorkflowPath\n} from '../../../contexts';\n\ntype Config = {\n processTypes?: string[];\n assignee?: string;\n showClosedTasks?: boolean;\n};\n\nexport const useWorkflowTasks = (config?: Config) => {\n const {processTypes, assignee, showClosedTasks} = config || {};\n\n const [tasks, setTasks] = useState<WorkflowTaskData[]>(null);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n\n const safePromise = useSafePromise();\n const checkWorkflowPermission = useWorkflowCheckPermission();\n\n const workflowPath = useMdmWorkflowPath();\n const environment = useMdmWorkflowEnvironmentUrl();\n const isWorkflowEnabled = useMdmIsWorkflowEnabled();\n const tenant = useMdmTenant();\n const entityUri = useMdmEntityUri();\n const isEditableMode = useMdmIsEditableMode();\n const entityLastLoadedTime = useMdmProfileLastLoadedTime();\n\n const canViewTasks = checkWorkflowPermission('VIEW_TASKS');\n const enabled = !!(workflowPath && environment) && isWorkflowEnabled && canViewTasks;\n\n const loadTasks = useCallback(() => {\n setLoading(true);\n const parsedProcessTypes = !Array.isArray(processTypes) || processTypes.includes('*') ? null : processTypes;\n const requests = (parsedProcessTypes || [null]).map((processType) =>\n getTasksForEntity({\n entityUri: isDCRUri(entityUri) ? getEntityUriFromDCRUri(entityUri) : entityUri,\n workflowPath,\n environment,\n tenant,\n filter: {assignee, processType},\n includeClosed: !!showClosedTasks\n })\n );\n safePromise(Promise.all(requests))\n .then((responses) => {\n const tasks: WorkflowTaskData[] = pipe(\n map(prop('data')),\n reject(isNil),\n flatten,\n uniqBy(prop('taskId')),\n filter(isRequestedTask(parsedProcessTypes, assignee))\n )(responses);\n setTasks(tasks);\n setTotal(tasks.length);\n })\n .catch((error) => {\n console.warn('Workflow error', error);\n })\n .finally(() => {\n setLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n entityUri,\n environment,\n safePromise,\n tenant,\n workflowPath,\n assignee,\n showClosedTasks,\n processTypes,\n entityLastLoadedTime\n ]);\n\n useEffect(() => {\n if (entityUri && enabled && !isTempUri(entityUri)) {\n loadTasks();\n } else {\n setTasks(null);\n setTotal(0);\n }\n }, [enabled, entityUri, loadTasks, isEditableMode]);\n\n const updateTaskState = useCallback((taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => {\n setTasks(map(when(propEq('taskId', taskId), mergeLeft(payload))));\n }, []);\n\n return {\n tasks,\n total,\n loading,\n updateTaskState,\n loadTasks\n };\n};\n\nconst isRequestedTask = (processTypes: string[], assignee: string) => (task: WorkflowTaskData) =>\n (!processTypes || processTypes.includes(task.processType)) && (!assignee || assignee === task.assignee);\n","export const MAP_DRAWING_MODES = {\n CIRCLE: 'circle',\n POLYGON: 'polygon'\n};\n\nexport const DEFAULT_OVERLAY_OPTIONS = {\n fillColor: 'rgb(242,82,82)',\n fillOpacity: 0.1,\n strokeWeight: 2,\n strokeColor: '#F25252',\n clickable: false,\n editable: true,\n zIndex: 1\n};\n\nexport const DEFAULT_GOOGLE_MAP_OPTIONS = {\n mapTypeControl: false,\n streetViewControl: false,\n fullscreenControl: false\n};\n\nexport const MAP_MINIMUM_SCALE_RADIUS = 0.001;\n","import React from 'react';\n\ntype Value = {\n activeEntityUri?: string;\n};\n\nexport const EntityMarkerContext = React.createContext<Value>({});\nEntityMarkerContext.displayName = 'EntityMarkerContext';\n","import React from 'react';\nimport {InterceptHandlers} from '@reltio/mdm-sdk';\n\nexport const InterceptHandlersContext = React.createContext<InterceptHandlers>({});\n\nInterceptHandlersContext.displayName = 'InterceptHandlersContext';\n","import React from 'react';\n\nexport const PageRequestsAbortingContext = React.createContext<AbortSignal>(undefined);\n\nPageRequestsAbortingContext.displayName = 'PageRequestsAbortingContext';\n","import React from 'react';\nimport {QxSandboxApi} from '@reltio/mdm-sdk';\n\nexport const SandboxAPIContext = React.createContext<QxSandboxApi>({\n getCurrentPerspectiveId: () => '',\n setEntityUri: () => {},\n showPerspective: () => {}\n});\n","import {\n CustomActionExtension,\n CustomActionViewConfig,\n CustomScriptExtension,\n getAccessToken,\n RequestAction,\n sendRequestFromCustomSandbox,\n sendWorkflowRequest,\n startProcessFromQuery,\n Entity,\n startProcessInstance\n} from '@reltio/mdm-sdk';\nimport {ProcessRequestParams} from './types';\n\ntype Config = CustomActionExtension | CustomActionViewConfig | CustomScriptExtension;\n\nconst validateParams = (validationUrl: string, permissions?: string[]) => {\n if (!validationUrl) return {errorMessage: 'URL is empty'};\n const allowed = permissions?.some((permission) => {\n const urlOrigin = validationUrl.match(/^(https?:\\/\\/[^:/?#]*).*$/)?.[1];\n const permRegex = new RegExp('^' + permission + '$');\n const decodedPerm = permission.replace(/\\/*$/, '');\n return (\n decodedPerm === validationUrl ||\n (urlOrigin && urlOrigin === decodedPerm) ||\n (decodedPerm?.startsWith('/') && validationUrl?.startsWith(decodedPerm)) ||\n (permission && permRegex.test(validationUrl))\n );\n });\n\n if (!allowed || (permissions?.length || 0) === 0) {\n return {errorMessage: 'Not enough permissions'};\n }\n return false;\n};\n\nconst getAuthHeaders = async (headers: Record<string, string>, servicesPath: string) => {\n const {accessToken} = await getAccessToken({servicesPath});\n return accessToken ? {...headers, Authorization: `Bearer ${accessToken}`} : headers;\n};\n\nexport const processRequest = ({\n params,\n permissions,\n worker,\n metadata,\n config,\n apiPath,\n servicesPath,\n user,\n workflowPath,\n entity,\n tenant,\n entityUri,\n query,\n openSearch,\n environment,\n getCurrentPerspectiveId,\n showPerspective,\n workflowCheckPermission,\n setEntityUri\n}: ProcessRequestParams) => {\n const {name, url, data, method, validationUrl} = params;\n\n const processFromQuery = () => {\n if (!params.processDefinitionId) {\n return new Promise((resolve) => resolve({errorMessage: 'processDefinitionId is empty'}));\n }\n if (!params.searchString) {\n return new Promise((resolve) => resolve({errorMessage: 'searchString is empty'}));\n }\n if (!workflowPath) {\n return new Promise((resolve) => resolve({errorMessage: 'Workflow path is not defined'}));\n }\n const errors = validateParams('/processInstances/_generateFromQuery', permissions);\n if (errors) {\n return new Promise((resolve) => resolve(errors));\n }\n\n return startProcessFromQuery({\n workflowPath,\n processType: params.processDefinitionId,\n searchString: params.searchString,\n tenant,\n environment\n });\n };\n\n const processInstance = () => {\n if (!params.processDefinitionId) {\n return new Promise((resolve) => resolve({errorMessage: 'processDefinitionId is empty'}));\n }\n if (!params.changeRequestURI) {\n return new Promise((resolve) => resolve({errorMessage: 'changeRequestURI is empty'}));\n }\n if (!workflowPath) {\n return new Promise((resolve) => resolve({errorMessage: 'Workflow path is not defined'}));\n }\n const errors = validateParams('/processInstances', permissions);\n if (errors) {\n return new Promise((resolve) => resolve(errors));\n }\n\n return startProcessInstance({\n workflowPath,\n processType: params.processDefinitionId,\n tenant,\n environment,\n objectURIs: [entityUri, params.changeRequestURI],\n comment: params.comment\n });\n };\n\n const workflowRequest = async () => {\n const errors = validateParams(validationUrl, permissions);\n if (errors) {\n return errors;\n }\n const isExternalUrl = url.includes('http:') || url.includes('https:');\n if (!workflowPath && !isExternalUrl) {\n return {errorMessage: 'Workflow path is not defined'};\n }\n const headers = await getAuthHeaders(params.headers, servicesPath);\n return await sendWorkflowRequest({url, method, data, tenant, headers, workflowPath});\n };\n\n const sendApiRequest = async () => {\n const errors = validateParams(validationUrl, permissions);\n if (errors) {\n return Promise.reject(errors);\n }\n const headers = await getAuthHeaders(params.headers, servicesPath);\n return await sendRequestFromCustomSandbox({\n url,\n method,\n data,\n headers,\n noRequestProcessor: true,\n noRetry: true\n });\n };\n\n const handleRequest = (request: Promise<any>) => {\n request\n .then((response) => (response.json ? response.json() : response))\n .then((data) => {\n worker.postMessage({\n action: 'response',\n result: {\n data: JSON.parse(JSON.stringify(data)),\n headers: params.headers,\n status: 200\n },\n ...params\n });\n })\n .catch((error) => {\n worker.postMessage({\n action: 'response',\n result: {\n data: JSON.parse(JSON.stringify(error)),\n headers: params.headers,\n status: 0\n },\n ...params\n });\n });\n };\n\n switch (name) {\n case RequestAction.API: {\n const request = sendApiRequest();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW: {\n const request = workflowRequest();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW_START_PROCESS_FROM_QUERY: {\n const request = processFromQuery();\n handleRequest(request);\n break;\n }\n case RequestAction.WORKFLOW_START_PROCESS_INSTANCE: {\n const request = processInstance();\n handleRequest(request);\n break;\n }\n case RequestAction.GET_CONFIGURATION: {\n worker.postMessage({action: 'response', result: metadata, ...params});\n break;\n }\n case RequestAction.GET_UI_CONFIGURATION: {\n const response = {...config, action: {...config.action}};\n if (response.action.permissions) {\n delete response.action.permissions;\n }\n worker.postMessage({action: 'response', result: response, ...params});\n break;\n }\n case RequestAction.SET_ENTITY_URI: {\n const listener = (newEntity: Entity) =>\n worker.postMessage({action: 'response', result: newEntity, ...params});\n setEntityUri(params.entityUri, listener);\n break;\n }\n case RequestAction.SET_PERSPECTIVE: {\n showPerspective(params.perspective);\n worker.postMessage({\n action: 'response',\n result: getCurrentPerspectiveId(),\n ...params\n });\n break;\n }\n case RequestAction.GET_PERSPECTIVE: {\n if (getCurrentPerspectiveId) {\n worker.postMessage({\n action: 'response',\n result: getCurrentPerspectiveId(),\n ...params\n });\n }\n break;\n }\n case RequestAction.WORKFLOW_CHECK_PERMISSION: {\n worker.postMessage({\n action: 'response',\n result: workflowCheckPermission(params.permission),\n ...params\n });\n break;\n }\n case RequestAction.GET_SEARCH_QUERY: {\n worker.postMessage({action: 'response', result: query, ...params});\n break;\n }\n case RequestAction.OPEN_SEARCH: {\n openSearch({viewId: (config as Config).id, searchState: params.searchState || {}});\n break;\n }\n case RequestAction.GET_ENTITY_URI: {\n worker.postMessage({action: 'response', result: entityUri, ...params});\n break;\n }\n case RequestAction.GET_ENTITY: {\n worker.postMessage({action: 'response', result: entity, ...params});\n break;\n }\n case RequestAction.GET_API_PATH: {\n worker.postMessage({action: 'response', result: apiPath, ...params});\n break;\n }\n case RequestAction.WORKFLOW_GET_WORKFLOW_PATH: {\n worker.postMessage({action: 'response', result: workflowPath, ...params});\n break;\n }\n case RequestAction.GET_TENANT: {\n worker.postMessage({action: 'response', result: tenant, ...params});\n break;\n }\n case RequestAction.GET_USER: {\n worker.postMessage({action: 'response', result: user, ...params});\n break;\n }\n case RequestAction.ALERT: {\n worker.postMessage({\n action: 'response',\n result: window.alert(params.text),\n ...params\n });\n break;\n }\n case RequestAction.CONFIRM: {\n worker.postMessage({\n action: 'response',\n result: window.confirm(params.text),\n ...params\n });\n break;\n }\n case RequestAction.PROMPT: {\n worker.postMessage({\n action: 'response',\n result: window.prompt(params.text, params.defaultText || ''),\n ...params\n });\n break;\n }\n case RequestAction.OPEN_WINDOW: {\n window.open(params.url, '_blank');\n break;\n }\n case RequestAction.RELOAD_PAGE: {\n location.reload();\n break;\n }\n }\n};\n","import {\n CustomActionTask,\n CustomActionTaskParams,\n CustomScript,\n CustomScriptPlatform,\n RequestAction,\n RequestHandler,\n ResponseHandler,\n isEmptyValue\n} from '@reltio/mdm-sdk';\nimport {nanoid} from 'nanoid';\n\nexport const isValidCustomScript = (config?: CustomScript) => {\n const {files, platform} = config || {};\n return !isEmptyValue(files) && platform !== CustomScriptPlatform.CLASSIC;\n};\n\nexport const isURLtoProcess = (url: string, processApi: string[] = []) => {\n return processApi.some((request) => {\n const regExp = new RegExp(`^${request}$`);\n return request.replace(/\\/*$/, '') === url || (request && regExp.test(url));\n });\n};\n\nexport const getWorkerURL = (uiPath: string, tenant: string) => {\n return `${uiPath.replace(`${tenant}/`, '')}worker_api.js`;\n};\n\nexport const getRequestFakeUrl = (url: string, apiPath: string, reltioPath: string, tenant: string) => {\n return url.startsWith(apiPath) ? `${reltioPath}${url.replace(apiPath, '')}` : `${reltioPath}/api/${tenant}${url}`;\n};\n\nexport const getResponseFakeUrl = (url: string, apiPath: string, reltioPath: string) => {\n return `${reltioPath}${url.replace(apiPath, '')}`;\n};\n\nexport const getProcessedTask = (task: CustomActionTask, apiPath: string, reltioPath: string, tenant: string) => {\n const {url, name} = task.params as CustomActionTaskParams;\n if (!url) {\n return task;\n }\n const isApiAction = name === RequestAction.API;\n const isGlobalUrl = url.startsWith('/') && !url.startsWith(apiPath);\n const newUrl = isGlobalUrl && isApiAction ? `${apiPath}/api/${tenant}${url}` : url.replace(reltioPath, apiPath);\n\n return {\n ...task,\n params: {\n ...(task.params as CustomActionTaskParams),\n url: newUrl,\n validationUrl: url\n }\n };\n};\n\nexport const getFilesWithArrayBuffer = (files: FileList) => {\n const readFilePromises = Array.from(files).map((file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const content = event.target.result;\n const {lastModified, name, size, type} = file;\n resolve({lastModified, name, size, type, content});\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsArrayBuffer(file);\n });\n });\n return Promise.all(readFilePromises);\n};\n\nconst processInnerHtml = (parent: HTMLElement, worker: Worker, setTooltip) => {\n let handlersToReset = [];\n const uiActions = parent.getAttribute('ui-actions');\n const uiTooltip = parent.getAttribute('ui-tooltip');\n const id = parent.getAttribute('id') || parent.getAttribute('name');\n if (uiActions) {\n uiActions.split(',').forEach((uiAction) => {\n const handler = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const postEventMessage = (files?) => {\n worker.postMessage({\n action: 'event',\n type: 'uiAction',\n data: {type: uiAction, id, event: {...event, files, target: {value: target.value}}}\n });\n };\n if (target.files?.length) {\n getFilesWithArrayBuffer(target.files).then(postEventMessage);\n } else {\n postEventMessage();\n }\n };\n parent.addEventListener(uiAction, handler);\n handlersToReset.push(() => {\n parent.removeEventListener(uiAction, handler);\n });\n });\n parent.removeAttribute('ui-actions');\n }\n if (uiTooltip) {\n setTooltip(uiTooltip);\n }\n parent.childNodes.forEach((child) => {\n if (child.nodeType === 1) {\n //Node.ELEMENT_NODE\n handlersToReset = handlersToReset.concat(processInnerHtml(child as HTMLElement, worker, setTooltip));\n }\n });\n return handlersToReset;\n};\n\ntype ResetHTMLParams = {\n worker: Worker;\n setTooltip: any;\n html?: string;\n innerText?: string;\n setListenersToReset: any;\n setHtml: any;\n};\n\nexport const resetHtml = ({worker, setTooltip, innerText, html, setListenersToReset, setHtml}: ResetHTMLParams) => {\n const docBlock = document.createElement('div');\n docBlock.innerHTML = html || innerText;\n\n const handlersToReset = processInnerHtml(docBlock, worker, setTooltip);\n setListenersToReset(handlersToReset);\n setHtml(docBlock);\n};\n\nexport const setUpRequestInterceptor = ({\n apiPath,\n reltioPath,\n tenant,\n processApiRequest,\n workerRef,\n setRequestListeners\n}): RequestHandler<RequestInit & CustomActionTaskParams> => {\n return ({url, next, resolve, options = {}}) => {\n const fakeURL = getRequestFakeUrl(url, apiPath, reltioPath, tenant);\n const isProcessableUrl = isURLtoProcess(fakeURL, processApiRequest);\n if (isProcessableUrl) {\n const requestId = nanoid();\n setRequestListeners(options, next, requestId, resolve);\n workerRef.current.postMessage({\n action: 'apiRequest',\n id: requestId,\n url: fakeURL,\n method: options.method,\n headers: options.headers,\n data: options.body\n });\n } else {\n next(url, options);\n }\n };\n};\n\nexport const setUpResponseInterceptor = ({\n reltioPath,\n apiPath,\n processApiResponse,\n workerRef,\n setResponseListeners\n}): ResponseHandler<RequestInit & CustomActionTaskParams> => {\n return ({url, response, next, options, abort}) => {\n const fakeURL = getResponseFakeUrl(url, apiPath, reltioPath);\n const isProcessableUrl = isURLtoProcess(fakeURL, processApiResponse);\n if (isProcessableUrl) {\n const responseId = nanoid();\n response\n .json()\n .then((data) => {\n setResponseListeners(next, responseId);\n workerRef.current.postMessage({\n action: 'apiResponse',\n id: responseId,\n url: fakeURL,\n method: options.method,\n data\n });\n })\n .catch((error) => {\n abort(error);\n });\n } else {\n next(response);\n }\n };\n};\n","const defaultAttributes = [\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'allowReorder',\n 'alphabetic',\n 'amplitude',\n 'arabic-form',\n 'ascent',\n 'attributeName',\n 'attributeType',\n 'autoReverse',\n 'azimuth',\n 'baseFrequency',\n 'baseline-shift',\n 'baseProfile',\n 'bbox',\n 'begin',\n 'bias',\n 'by',\n 'calcMode',\n 'cap-height',\n 'checked',\n 'class',\n 'clip',\n 'clipPathUnits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'contentScriptType',\n 'contentStyleType',\n 'cursor',\n 'cx',\n 'cy',\n 'd',\n 'decelerate',\n 'descent',\n 'diffuseConstant',\n 'direction',\n 'disabled',\n 'display',\n 'divisor',\n 'dominant-baseline',\n 'dur',\n 'dx',\n 'dy',\n 'edgeMode',\n 'elevation',\n 'enable-background',\n 'end',\n 'exponent',\n 'externalResourcesRequired',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterRes',\n 'filterUnits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'format',\n 'from',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'hanging',\n 'height',\n 'horiz-adv-x',\n 'horiz-origin-x',\n 'id',\n 'ideographic',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'kerning',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lang',\n 'lengthAdjust',\n 'letter-spacing',\n 'lighting-color',\n 'limitingConeAngle',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'mask',\n 'maskContentUnits',\n 'maskUnits',\n 'mathematical',\n 'max',\n 'media',\n 'method',\n 'min',\n 'mode',\n 'name',\n 'numOctaves',\n 'offset',\n 'opacity',\n 'operator',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'overline-position',\n 'overline-thickness',\n 'panose-1',\n 'paint-order',\n 'path',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointer-events',\n 'points',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'r',\n 'radius',\n 'refX',\n 'refY',\n 'rendering-intent',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'restart',\n 'result',\n 'rotate',\n 'rx',\n 'ry',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'spacing',\n 'specularConstant',\n 'specularExponent',\n 'speed',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stemh',\n 'stemv',\n 'stitchTiles',\n 'stop-color',\n 'stop-opacity',\n 'strikethrough-position',\n 'strikethrough-thickness',\n 'string',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'style',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'target',\n 'targetX',\n 'targetY',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textLength',\n 'to',\n 'transform',\n 'type',\n 'u1',\n 'u2',\n 'underline-position',\n 'underline-thickness',\n 'unicode',\n 'unicode-bidi',\n 'unicode-range',\n 'units-per-em',\n 'v-alphabetic',\n 'v-hanging',\n 'v-ideographic',\n 'v-mathematical',\n 'values',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'viewBox',\n 'viewTarget',\n 'visibility',\n 'width',\n 'widths',\n 'word-spacing',\n 'writing-mode',\n 'x',\n 'x-height',\n 'x1',\n 'x2',\n 'xChannelSelector',\n 'y',\n 'y1',\n 'y2',\n 'yChannelSelector',\n 'z',\n 'zoomAndPan'\n];\n\nconst defaultTags = [\n 'animate',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'mpath',\n 'set',\n 'circle',\n 'ellipse',\n 'line',\n 'polygon',\n 'polyline',\n 'rect',\n 'defs',\n 'glyph',\n 'g',\n 'marker',\n 'mask',\n 'missing-glyph',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'font',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'hkern',\n 'vkern',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'feDistantLight',\n 'fePointLight',\n 'feSpotLight',\n 'circle',\n 'ellipse',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'defs',\n 'g',\n 'svg',\n 'symbol',\n 'use',\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'glyph',\n 'glyphRef',\n 'textPath',\n 'text',\n 'tref',\n 'tspan',\n 'altGlyph',\n 'textPath',\n 'tref',\n 'tspan',\n 'clipPath',\n 'color-profile',\n 'cursor',\n 'filter',\n 'foreignObject',\n 'script',\n 'style',\n 'view',\n 'select',\n 'option',\n 'textarea',\n 'label'\n];\n\nexport default {\n attributes: {\n '*': [...defaultAttributes, 'ui-actions', 'ui-tooltip'],\n img: ['src', 'srcset', 'alt', 'title', 'loading'],\n link: ['href', 'rel'],\n iframe: ['src'],\n a: ['href']\n },\n tags: [...defaultTags, 'a', 'link', 'input', 'button', 'iframe', 'img']\n};\n","import sanitizeHtml, {IOptions} from 'sanitize-html';\nimport sanitizeOptions from './helpers/sanitizerOptions';\n\nexport const useHtmlSanitizer = () => {\n const {allowedAttributes, allowedTags} = sanitizeHtml.defaults;\n const {attributes, tags} = sanitizeOptions;\n const options: IOptions = {\n allowedTags: allowedTags.concat(tags),\n allowedAttributes: {...allowedAttributes, ...attributes},\n allowVulnerableTags: true\n };\n return (html: string) => sanitizeHtml(html, options);\n};\n","import {CSSProperties, useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport {\n CustomAction,\n CustomActionExtension,\n CustomActionTaskParams,\n CustomActionViewConfig,\n CustomScriptPlatform,\n Entity,\n initializeWebWorker,\n isEmptyValue,\n ProcessParams\n} from '@reltio/mdm-sdk';\nimport {omit} from 'ramda';\nimport {useWorkflowCheckPermission} from '../../components/workflow';\nimport {useHtmlSanitizer} from '../useHtmlSanitizer';\nimport {\n InterceptHandlersContext,\n SandboxAPIContext,\n SnackbarContext,\n useMdmAction,\n useMdmApiPath,\n useMdmEntity,\n useMdmEntityUri,\n useMdmIsEditableMode,\n useMdmMetadata,\n useMdmReltioPath,\n useMdmSearchProviderData,\n useMdmServicesPath,\n useMdmTenant,\n useMdmUiPath,\n useMdmUser,\n useMdmWorkflowEnvironmentUrl,\n useMdmWorkflowPath\n} from '../../contexts';\nimport {processRequest} from './API';\nimport {\n getWorkerURL,\n isValidCustomScript,\n resetHtml,\n getProcessedTask,\n setUpRequestInterceptor,\n setUpResponseInterceptor\n} from './helpers';\n\ntype Config = CustomActionViewConfig | CustomActionExtension;\n\nexport const useAPI = (config: Config = {} as Config) => {\n const {processApiRequest, processApiResponse, platform} = config.action || {};\n const [html, setHtml] = useState<HTMLElement>();\n const [listenersToReset, setListenersToReset] = useState<Array<() => void>>([]);\n const [popupListenersToReset, setPopupListenersToReset] = useState<Array<() => void>>([]);\n const [visible, setVisible] = useState(true);\n const [popup, setPopup] = useState<HTMLElement>();\n const [tooltip, setTooltip] = useState<string>(null);\n const [customStyles, setCustomStyles] = useState<{\n height?: number | string;\n width?: number | string;\n pointerEvents?: CSSProperties['pointerEvents'];\n }>({});\n const workerRef = useRef<Worker>();\n const requestListeners = useRef({});\n const responseListeners = useRef({});\n const sanitizeHtml = useHtmlSanitizer();\n\n const openSearch = useMdmAction('openSearch');\n const uiPath = useMdmUiPath();\n const tenant = useMdmTenant();\n const workerUrl = getWorkerURL(uiPath, tenant);\n\n const showSnackbarMessage = useContext(SnackbarContext);\n const qxApi = useContext(SandboxAPIContext);\n const interceptHandlers = useContext(InterceptHandlersContext);\n\n const workflowCheckPermission = useWorkflowCheckPermission();\n\n const metadata = useMdmMetadata() || {};\n const entity = useMdmEntity() || ({} as Entity);\n const apiPath = useMdmApiPath();\n const servicesPath = useMdmServicesPath();\n const reltioPath = useMdmReltioPath();\n const workflowPath = useMdmWorkflowPath();\n const user = useMdmUser();\n const entityUri = useMdmEntityUri();\n const isEditableMode = useMdmIsEditableMode();\n const environment = useMdmWorkflowEnvironmentUrl();\n const {type: typeSearch, data: search} = useMdmSearchProviderData() || {};\n const searchQuery = typeSearch === 'search' ? search?.query : null;\n\n let innerText = '';\n let popupText = '';\n const process = ({task, worker}: ProcessParams) => {\n if (task) {\n switch (task.action) {\n case CustomAction.SET_HTML: {\n const sanitizedHtml = sanitizeHtml((task.params as CustomActionTaskParams).html);\n if ((task.params as CustomActionTaskParams).id) {\n const elem = document.getElementById((task.params as CustomActionTaskParams).id as string);\n if (elem) elem.innerHTML = sanitizedHtml;\n } else if (innerText !== sanitizedHtml) {\n innerText = sanitizedHtml;\n resetHtml({\n worker,\n setTooltip,\n html: sanitizedHtml,\n innerText,\n setListenersToReset,\n setHtml\n });\n }\n break;\n }\n case CustomAction.SHOW_POPUP: {\n const sanitizedPopup = sanitizeHtml(task.params as string);\n popupText = sanitizedPopup;\n resetHtml({\n worker,\n setTooltip,\n html: sanitizedPopup,\n innerText: popupText,\n setListenersToReset: setPopupListenersToReset,\n setHtml: setPopup\n });\n break;\n }\n case CustomAction.HIDE_POPUP: {\n popupText = '';\n setPopup(null);\n break;\n }\n case CustomAction.SET_VISIBILITY: {\n if (task.params === 'visible') {\n setVisible(true);\n resetHtml({\n worker,\n setTooltip,\n innerText,\n setListenersToReset,\n setHtml\n });\n } else {\n setVisible(false);\n }\n break;\n }\n case CustomAction.SET_TOOLTIP: {\n setTooltip(task.params as string);\n break;\n }\n case CustomAction.SET_HEIGHT: {\n setCustomStyles((prev) => ({\n ...prev,\n height: task.params as string | number\n }));\n break;\n }\n case CustomAction.SET_WIDTH: {\n setCustomStyles((prev) => ({\n ...prev,\n width: task.params as string | number\n }));\n break;\n }\n case CustomAction.SET_ENABLED: {\n setCustomStyles((prev) =>\n task.params ? omit(['pointer-events'], prev) : {...prev, 'pointer-events': 'none'}\n );\n break;\n }\n case CustomAction.LOG: {\n console.log(task.params); //eslint-disable-line no-console\n break;\n }\n case CustomAction.MESSAGE: {\n showSnackbarMessage(task.params as string);\n break;\n }\n case CustomAction.REQUEST: {\n const processedTask = getProcessedTask(task, apiPath, reltioPath, tenant);\n processRequest({\n params: processedTask.params as CustomActionTaskParams,\n permissions: config.action.permissions,\n worker,\n metadata,\n config: config as Config,\n user,\n servicesPath,\n apiPath: reltioPath,\n tenant,\n workflowPath,\n entity,\n entityUri,\n environment,\n query: searchQuery,\n openSearch,\n workflowCheckPermission,\n ...qxApi\n });\n break;\n }\n case CustomAction.RETURN_PROCESSED_API_RESPONSE: {\n const {id, data} = task.params as CustomActionTaskParams;\n if (responseListeners.current[id]) {\n responseListeners.current[id].next(data);\n responseListeners.current = omit([id], responseListeners.current);\n }\n break;\n }\n case CustomAction.RETURN_PROCESSED_API_REQUEST: {\n const {id, data} = task.params as CustomActionTaskParams;\n if (requestListeners.current[id]) {\n requestListeners.current[id].resolve(data);\n requestListeners.current = omit([id], requestListeners.current);\n }\n break;\n }\n }\n }\n };\n\n const setRequestListeners = (options, next, requestId, resolve) => {\n requestListeners.current = {\n ...requestListeners.current,\n [requestId]: {options, next, id: requestId, resolve}\n };\n };\n\n const setResponseListeners = (next, responseId) => {\n responseListeners.current = {\n ...responseListeners.current,\n [responseId]: {next}\n };\n };\n\n const requestInterceptor = setUpRequestInterceptor({\n apiPath,\n reltioPath,\n tenant,\n processApiRequest,\n workerRef,\n setRequestListeners\n });\n const responseInterceptor = setUpResponseInterceptor({\n reltioPath,\n apiPath,\n processApiResponse,\n workerRef,\n setResponseListeners\n });\n\n const postEventMessage = (type: string, data: unknown) => {\n workerRef.current?.postMessage({action: 'event', type, data});\n };\n\n const pendingInterceptors = useRef(false);\n\n const needDelayedRequestForInterceptors =\n interceptHandlers &&\n !isEmptyValue(config.action) &&\n platform !== CustomScriptPlatform.CLASSIC &&\n (processApiRequest || processApiResponse);\n\n if (needDelayedRequestForInterceptors) {\n if (!pendingInterceptors.current && !workerRef.current) {\n interceptHandlers.startInterceptorInit();\n pendingInterceptors.current = true;\n }\n }\n\n useEffect(() => {\n if (isValidCustomScript(config.action)) {\n workerRef.current = initializeWebWorker(workerUrl, process, config);\n if (pendingInterceptors.current) {\n interceptHandlers.finishInterceptorInit();\n pendingInterceptors.current = false;\n }\n postEventMessage('updateEntity', entity);\n }\n }, [entity, config]);\n\n useEffect(() => {\n postEventMessage('editMode', isEditableMode);\n }, [isEditableMode]);\n\n useEffect(() => {\n postEventMessage('changeSearchQuery', searchQuery);\n }, [searchQuery]);\n\n useEffect(() => {\n postEventMessage('changeVisibility', visible);\n }, [visible]);\n\n useEffect(\n () => () => {\n listenersToReset.forEach((listener) => listener());\n },\n [listenersToReset]\n );\n //we need to have separate handlers in opposite case main window listeners will be removed on the popup appear\n useEffect(\n () => () => {\n popupListenersToReset.forEach((listener) => listener());\n },\n [popupListenersToReset, listenersToReset]\n );\n\n const onClick = useCallback(() => {\n postEventMessage('execute', null);\n }, [config]);\n\n useEffect(() => {\n if (!isEmptyValue(interceptHandlers) && (processApiRequest || processApiResponse)) {\n const {\n addInternalRequestInterceptor,\n addInternalResponseInterceptor,\n removeInternalRequestInterceptor,\n removeInternalResponseInterceptor\n } = interceptHandlers;\n\n addInternalRequestInterceptor(requestInterceptor);\n addInternalResponseInterceptor(responseInterceptor);\n workerRef.current.onerror = () => {\n removeInternalRequestInterceptor(requestInterceptor);\n removeInternalResponseInterceptor(responseInterceptor);\n };\n return () => {\n removeInternalRequestInterceptor(requestInterceptor);\n removeInternalResponseInterceptor(responseInterceptor);\n };\n }\n }, [config]);\n\n return {html, visible, tooltip, customStyles, onClick, popup};\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {concat, difference, isEmpty, map, pipe, prop, reduce, reject, uniq} from 'ramda';\nimport {\n Comment,\n Entity,\n FilterOptions,\n getFilteredEntities,\n isEntityUri,\n getEntity,\n EntitiesMap,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from './useSafePromise';\nimport {useMdmEntityUriWithDataTenant} from '../contexts';\n\nconst SELECT_OPTION = 'uri,label,type';\n\nexport const useCommentsEntitiesMap = (comments: Comment[]) => {\n const safePromise = useSafePromise();\n const currentEntityUri = useMdmEntityUriWithDataTenant();\n\n const [entitiesMap, setEntitiesMap] = useState<EntitiesMap>({});\n\n const getEntities = useCallback(\n (entitiesUris: string[]) => {\n const requestFilters = [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'uri',\n values: entitiesUris\n }\n ];\n\n const requestOptions = {\n max: entitiesUris.length,\n activeness: ActivityFilter.ALL,\n select: 'uri,label,type'\n };\n return safePromise(getFilteredEntities(requestFilters, requestOptions));\n },\n [safePromise]\n );\n\n const getNotFoundEntity = (entityUri: string) => {\n return getEntity(entityUri, {options: SELECT_OPTION})\n .then((entity: Entity) => ({...entity, uri: entityUri} as Entity))\n .catch(() => ({}));\n };\n\n const addNotFoundEntities = useCallback(\n (entitiesUris: string[], entities: Entity[]) => {\n return safePromise(Promise.all((entitiesUris || []).map(getNotFoundEntity))).then(\n (notFoundEntities: Entity[]) => pipe(reject(isEmpty), concat(entities))(notFoundEntities)\n );\n },\n [safePromise]\n );\n\n useEffect(() => {\n const uniqEntitiesUris = pipe(\n reduce((entitiesUris, comment) => {\n const {objectType: type, relatedObjectUris} = comment;\n\n if (type === 'relation' || type === 'potentialMatch') {\n (relatedObjectUris || []).forEach((uri) => {\n if (uri !== currentEntityUri && isEntityUri(uri) && !entitiesMap[uri]) {\n entitiesUris.push(uri);\n }\n });\n }\n return entitiesUris;\n }, []),\n uniq\n )(comments || []);\n\n if (uniqEntitiesUris.length) {\n getEntities(uniqEntitiesUris)\n .then((results: Entity[]) => {\n const getNotFoundUris = pipe(map(prop('uri')), difference(uniqEntitiesUris));\n\n const notFoundEntities = getNotFoundUris(results);\n return addNotFoundEntities(notFoundEntities, results);\n })\n .then((results) => {\n setEntitiesMap((prevEntitiesMap) =>\n results.reduce(\n (entities, entity) => {\n entities[entity.uri] = entity;\n return entities;\n },\n {...prevEntitiesMap}\n )\n );\n })\n .catch(() => {});\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getEntities, addNotFoundEntities, comments, currentEntityUri]);\n\n return entitiesMap;\n};\n","import {useCallback} from 'react';\nimport {checkConfigPermission, ConfigPermissions} from '@reltio/mdm-sdk';\nimport {useMdmUserRoles} from '../contexts';\n\nconst emptyArray = [];\n\nexport const useConfigPermissions = () => {\n const userRoles = useMdmUserRoles() || emptyArray;\n\n return {\n canCreate: useCallback(checkConfigPermission(ConfigPermissions.CREATE, userRoles), [userRoles]),\n canRead: useCallback(checkConfigPermission(ConfigPermissions.READ, userRoles), [userRoles]),\n canUpdate: useCallback(checkConfigPermission(ConfigPermissions.UPDATE, userRoles), [userRoles]),\n canDelete: useCallback(checkConfigPermission(ConfigPermissions.DELETE, userRoles), [userRoles])\n };\n};\n","import {curry, eqBy, filter, path, prop, reject} from 'ramda';\nimport {useEffect, useMemo, useRef} from 'react';\n\nimport {areOneHierarchyUris, AttributeError, Connection, isEditableMode, markEdited, markNew} from '@reltio/mdm-sdk';\n\nimport {\n useActionsHook,\n useMdmAction,\n useMdmAllRelationsToAddAndEdit,\n useMdmMode,\n useMdmProfileErrors,\n useMdmRelationsDrafts,\n useMdmListener\n} from '../contexts';\n\nconst isConnectionHasError = curry((errors: AttributeError[], connection: Connection) => {\n const relationUri = path(['relation', 'relationUri'], connection);\n return errors.some(\n (error) =>\n areOneHierarchyUris(prop('uri', error), relationUri) ||\n areOneHierarchyUris(prop('parentUri', error), relationUri) ||\n (error.path || []).some(\n (errorPath) => path(['value', 'relation', 'relationUri'], errorPath) === relationUri\n )\n );\n});\n\nconst getInvalidConnections = (errors: AttributeError[] = [], connections: Connection[] = []) =>\n filter(isConnectionHasError(errors), connections);\n\nexport const useExpandInvalidRelations = (configId: string) => {\n const openRelationEditor = useMdmAction('openRelationEditor');\n const mode = useMdmMode();\n const profileErrors = useMdmProfileErrors();\n const shouldOpenInvalidEditors = useRef(true);\n const listenToActions = useActionsHook();\n const {addedConnections = [], editedConnections = []} = useMdmRelationsDrafts(configId) || {};\n const relationsToAddAndEdit = useMdmAllRelationsToAddAndEdit([configId]) || [];\n const preparedConnectionsList = reject(\n (draftConnection: Connection) =>\n relationsToAddAndEdit.some(eqBy(path(['relation', 'relationUri']), draftConnection)),\n [...addedConnections.map(markNew), ...editedConnections.map(markEdited)]\n );\n const invalidConnections = useMemo(\n () => getInvalidConnections(profileErrors, preparedConnectionsList),\n [profileErrors, preparedConnectionsList]\n );\n const expandInvalidRelatonsListener = useMdmListener('expandInvalidRelatonsListener');\n const setShouldOpenInvalidEditors = (shouldOpen: boolean) => (shouldOpenInvalidEditors.current = shouldOpen);\n const listenerCallback = expandInvalidRelatonsListener(() => setShouldOpenInvalidEditors(true));\n\n useEffect(() => {\n if (isEditableMode(mode) && invalidConnections.length && shouldOpenInvalidEditors.current) {\n invalidConnections.forEach((connection: Connection) => openRelationEditor(configId, connection));\n setShouldOpenInvalidEditors(false);\n }\n }, [mode, invalidConnections]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions(listenerCallback);\n return () => stopListeningActions();\n }, [listenToActions]);\n};\n","import i18n from 'ui-i18n';\nimport {useSnackbar} from './useSnackbar';\n\ntype Props = {\n onLayoutReset: () => void;\n onResetUndo: () => void;\n};\n\nexport const useLayoutResetter = ({onLayoutReset, onResetUndo}: Props) => {\n const resetLayout = () => {\n onLayoutReset();\n showSnackbarMessage(\n i18n.text(\n \"The default layout is now restored. It's still not too late to revert your changes. Click Undo to go back to your personalized settings.\"\n )\n );\n };\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n onDismissClick: onResetUndo,\n showDismiss: true,\n autoHideDuration: 5000,\n dismissTitle: i18n.text('Undo')\n });\n\n return {SnackbarRenderer, resetLayout};\n};\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {cond, pipe, prop, T, evolve, filter as filterFn, when, identity, times, length, ifElse, always} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {\n ActivityFilter,\n addGlobalFilterToQuery,\n Connection,\n Entity,\n getRelationsForDataTenantEntity,\n getRelationsForEntity,\n isAvailableEntityTypeUri,\n isAvailableRelationTypeUri,\n isDataTenantEntity,\n isObject,\n isTempUri,\n Mode,\n RelationsContent,\n RelationsRequestConfig,\n RelationsViewConfig,\n wrapInArrayIfNeeded\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from './useSafePromise';\nimport {usePrevious} from './usePrevious';\nimport {\n useMdmAction,\n useMdmDtssPath,\n useMdmGlobalSearchRequestOptions,\n useMdmMetadata,\n useMdmProfileLastLoadedTime,\n useMdmTenant\n} from '../contexts';\n\ntype Props = {\n sorting?: {\n field: string;\n order: string;\n };\n filter?: string;\n page: number;\n rowsPerPage: number;\n config: Pick<RelationsViewConfig, 'suggested' | 'content' | 'id'>;\n entity: Entity;\n relationActivityFilter?: ActivityFilter;\n mode: Mode;\n searchByOv?: boolean;\n showSnackbarMessage?: (message: string) => void;\n};\n\nconst buildSuggestedIds = when(\n identity,\n pipe(\n wrapInArrayIfNeeded,\n length,\n times((n) => n + 1)\n )\n);\nconst isValidRequestConfig = (config: RelationsRequestConfig) => {\n let entry: RelationsRequestConfig | RelationsRequestConfig['nextEntry'] = config;\n while (entry) {\n if (entry.entityTypes?.length === 0) {\n return false;\n }\n entry = entry.nextEntry;\n }\n return true;\n};\n\ntype ConnectionResponse = Array<{connections?: Connection[]; total: number; dataSorted?: boolean}>;\n\nexport const useRelationsLoader = ({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter,\n mode,\n searchByOv = false,\n showSnackbarMessage\n}: Props) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const relationsLoaded = useMdmAction('relationsLoaded');\n const tenant = useMdmTenant();\n const metadata = useMdmMetadata();\n const dtssPath = useMdmDtssPath();\n const {activityFilter, globalFilter} = useMdmGlobalSearchRequestOptions() || {};\n const lastLoadedTime = useMdmProfileLastLoadedTime();\n\n const safePromise = useSafePromise();\n\n const processContent = (content: RelationsContent) => {\n const getUri = when(isObject, prop('uri'));\n const filterRelation = pipe(getUri, isAvailableRelationTypeUri(metadata));\n\n return evolve({\n entityTypes: filterFn(isAvailableEntityTypeUri(metadata)),\n inRelations: filterFn(filterRelation),\n outRelations: filterFn(filterRelation),\n nextEntry: processContent\n })(content);\n };\n\n const suggested = config.suggested;\n const options = useMemo(\n () => ({\n searchByOv\n }),\n [searchByOv]\n );\n const modeRef = useRef<Mode>(mode);\n modeRef.current = mode;\n const loadRelations = useCallback(() => {\n if (entity?.uri) {\n const processedConfig = processContent(config.content);\n const requestConfig = {\n ...processedConfig,\n sortBy: sorting?.field,\n order: sorting?.order,\n returnDates: true,\n returnObjects: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n },\n max: rowsPerPage,\n offset: page * rowsPerPage,\n filter: addGlobalFilterToQuery(globalFilter, filter) || undefined,\n suggested: buildSuggestedIds(suggested)\n };\n const configs = [requestConfig].concat(\n ifElse(\n identity,\n pipe(wrapInArrayIfNeeded, (suggested) =>\n suggested.map((config, i) => ({...config, id: requestConfig.suggested[i]}))\n ),\n always([])\n )(suggested)\n );\n\n const emptyResponsePromise = Promise.resolve([{total: 0}]);\n const request: (entity: Entity) => Promise<ConnectionResponse> = cond([\n [pipe(prop('uri'), isTempUri), () => emptyResponsePromise],\n [\n always(!isValidRequestConfig(requestConfig)),\n () => {\n console.warn('Connections request config has \"entityTypes\": []. Request is blocked.');\n return emptyResponsePromise;\n }\n ],\n [\n isDataTenantEntity,\n (entity) =>\n getRelationsForDataTenantEntity({\n entityUri: entity.uri,\n configs: configs,\n customerTenant: tenant,\n dataTenant: entity.dataTenant,\n dtssPath,\n options\n })\n ],\n [T, (entity) => getRelationsForEntity(entity.uri, configs, options)]\n ]);\n setIsLoading(true);\n safePromise(request(entity))\n .then((result) => {\n if (!Array.isArray(result)) {\n throw Error(JSON.stringify(result));\n }\n const [{connections, total, dataSorted}] = result;\n if (dataSorted === false && showSnackbarMessage) {\n showSnackbarMessage(\n i18n.text(\n 'This profile contains a large number of relationships. We have disabled filtering and sorting to help optimize performance.'\n )\n );\n }\n relationsLoaded({id: config.id, connections, total, mode: modeRef.current});\n })\n .catch((e) => {\n console.warn('Failed to load relations data', e);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n activityFilter,\n metadata,\n config,\n relationsLoaded,\n dtssPath,\n entity?.uri,\n entity?.dataTenant,\n filter,\n globalFilter,\n page,\n relationActivityFilter,\n rowsPerPage,\n safePromise,\n sorting,\n tenant,\n options,\n lastLoadedTime\n ]);\n const isRequestSentRef = useRef<boolean>(false);\n isRequestSentRef.current = false;\n useEffect(() => {\n isRequestSentRef.current = true;\n loadRelations();\n }, [loadRelations]);\n\n const prevMode = usePrevious(mode);\n useEffect(() => {\n if (mode === Mode.Viewing && !isRequestSentRef.current && prevMode !== mode) {\n isRequestSentRef.current = true;\n loadRelations();\n }\n }, [loadRelations, mode, prevMode]);\n return {isLoading, reload: loadRelations};\n};\n","import {useEffect, useRef} from 'react';\n\nexport const useRunOnceAfterValueInitialization = (cb, value) => {\n const isValueInited = useRef(false);\n useEffect(() => {\n if (value && !isValueInited.current) {\n isValueInited.current = true;\n cb();\n }\n }, [cb, value]);\n};\n"],"names":["clearError","omit","accordionSummaryHeight","defaultBorderStyle","makeStyles","theme","accordion","borderTop","borderBottom","fontSize","boxShadow","display","margin","accordionExpanded","accordionSummary","alignItems","height","minHeight","accordionSummaryHeading","flex","typography","pxToRem","fontWeight","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","maxHeight","overflow","paddingTop","paddingBottom","paddingLeft","marginTop","parents","color","palette","text","primary","errorWrapper","lineHeight","flexDirection","errorTitle","attributeTypesPath","secondary","goToIcon","marginLeft","errorsAccordion","backgroundColor","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","icon","marginRight","errorIcon","fill","warningIcon","ErrorsPanel","memo","panels","expandedPanelId","onToggle","ErrorComponent","styles","useStyles","length","map","id","title","items","accordionClassName","accordionDetailsClassName","Accordion","key","square","expanded","onChange","className","classes","root","AccordionSummary","content","expandIcon","ExpandMore","Typography","AccordionDetails","classnames","error","i","displayName","props","width","viewBox","xmlns","fillRule","clipRule","d","fillOpacity","Error","metadata","useMdmMetadata","isEditableMode","useMdmIsEditableMode","displayedMessage","type","source","message","attributeTypeUri","attributeType","ErrorType","ErrorSource","attrType","findAttributeTypeByUri","i18n","attribute","label","getDisplayedErrorMessage","displayedErrorPath","path","errorPath","uri","slice","filter","AttributeValuePathItemType","includes","identity","join","getDisplayedErrorPath","displayedAttributeTypesPath","either","getDisplayedAttributeTypesPath","highlightError","useContext","ScrollToElementContext","showLink","parentUri","SmallIconButton","HyperlinkIcon","size","onClick","tooltipTitle","AttributesErrorsPanel","attributesWithErrors","cachedErrors","allErrors","cacheForAllErrors","useRef","errors1","errors2","equals","areErrorsEqual","current","useCachedErrors","errors","warnings","useMemo","splitErrorsBySeverity","setExpandedPanelId","useState","number","useEffect","handleChange","useCallback","panelId","event","isExpanded","stroke","strokeWidth","main","closeIcon","position","right","bottom","transform","button","padding","FilterButton","enabled","Tooltip","IconButton","Filter","Close","propTypes","PropTypes","searchButton","input","maxWidth","minWidth","background","startAdornment","endAdornment","ExpandableSearchInput","query","value","setValue","isOpen","setIsOpen","Input","autoFocus","placeholder","disableUnderline","pipe","getValue","InputAdornment","Search","CloseIcon","F","always","tap","onKeyPress","when","propEq","trim","T","EmptyStub","style","widthToHide","children","handleWidth","render","link","cursor","wordBreak","selected","popper","borderRadius","HierarchyNodeTitle","isSelected","entityUri","viewId","anchorEl","withEntityDetails","generateEntityUrl","UrlGeneratorsContext","openEntity","useMdmAction","uiPath","useMdmUiPath","isLoading","entityDetails","showEntityDetails","hideEntityDetails","setEntityDetails","setIsLoading","timerId","safePromise","useSafePromise","cancelRequest","Promise","resolve","setTimeout","getEntity","then","finally","clearTimeout","useEntityDetails","showPopper","Boolean","handleClick","onMouseEnter","undefined","onMouseLeave","Link","to","Popper","open","modal","placement","ProfileCard","entity","variant","justifyContent","check","ImportModes","tooltip","noop","mode","INIT","CloudDownloadIcon","PROGRESS","CircularProgress","spinner","SUCCESS","Done","renderCurrentMode","textDecoration","href","e","stopPropagation","preventDefault","alt","src","gif2Url","menuItem","whiteSpace","itemText","textPrimary","textSecondary","MultilineMenuItem","forwardRef","ref","item","onMenuClose","MenuItem","ListItemText","paddingRight","profileCardWrapper","gap","profileCardContainer","flexGrow","rulesContainer","marginBottom","dividerWrapper","alignSelf","divider","relevanceBadge","ProfileMatchCard","entitiesMap","match","showRelevanceBadge","matchRuleSummaries","some","checkMatchRuleSummaryRelevance","object","container","matchRules","MatchRulesBlock","Divider","orientation","RelevanceScoreBadge","scroll","element","scrollIntoView","block","behavior","clearScrollTimer","scrollTimer","isScrolledIntoView","scrollableParent","elemTop","offsetTop","elemBottom","clientHeight","scrollTop","from","highlighted","animationName","animationDuration","animationIterationCount","clickable","alpha","inactive","inactiveBackground","inactiveHoverBackground","inactiveSelectedBackground","inactiveSelectedHoverBackground","justImported","avatar","image","info","overflowWrap","wordWrap","secondaryLabel","businessCard","secondRow","entities","entityToHighlight","selectedEntityUri","onEntityClick","onEntityHover","entitiesImportStatus","entityButtonsRenderer","list","useDidUpdateEffect","querySelectorAll","parentElement","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUriForLink","getEntityUriForLink","importStatus","prop","EntityAvatar","avatarClassName","imageClassName","EntityUriLink","EntityTypeBadge","getEntityId","textAlign","top","left","zIndex","opacity","borderLeft","borderRight","animation","boxSizing","TreeNode","listIndex","swapFrom","swapLength","swapDepth","scaffoldBlockPxWidth","lowerSiblingCounts","connectDropTarget","isOver","draggedNode","canDrop","treeIndex","treeId","getPrevRow","node","rowDirection","otherProps","rowDirectionClass","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","lineClass","push","highlightLineClass","Children","child","cloneElement","defaultProps","isRequired","NodeRendererDefault","toggleChildrenVisibility","connectDragPreview","connectDragSource","isDragging","canDrag","subtitle","isSearchMatch","isSearchFocus","buttons","didDrop","parentNode","nodeTitle","nodeSubtitle","handle","Array","_","index","dropEffect","isDraggedDescendant","isDescendant","isLandingPadActive","buttonStyle","btn","TreePlaceholder","Component","this","drop","border","outline","PlaceholderRendererDefault","memoize","f","savedArgsArray","savedKeysArray","savedResult","args","keysArray","Object","keys","sort","argsArray","arg","memoizedInsertNode","insertNode","memoizedGetFlatDataFromTree","getFlatDataFromTree","memoizedGetDescendantCount","getDescendantCount","DndManager","constructor","treeRef","hoverHandler","hoverProps","dropTargetProps","monitor","component","getItem","targetDepth","getTargetDepth","lastDropTargetNode","lastDropTargetDepth","dragHover","minimumTreeIndex","depth","deferredCallHoverHandler","shouldSkipMoreFrames","rafId","requestAnimationFrame","resetDragVariables","startDrag","endDrag","dndType","treeData","state","draggingTreeData","getNodeKey","customCanDrop","maxDepth","lastCanDropResult","lastCanDropProps","dropTargetDepth","rowAbove","canNodeHaveChildren","Math","min","blocksOffset","dragSourceInitialDepth","relativePosition","findDOMNode","getBoundingClientRect","leftShift","getSourceClientOffset","x","round","direction","getDifferenceFromInitialOffset","max","draggedChildDepth","getDepth","abovePath","aboveNode","newCanDropProps","nodeId","aboveNodeId","addedResult","newNode","expandParent","prevPath","prevParent","prevTreeIndex","nextPath","nextParent","nextTreeIndex","wrapSource","el","nodeDragSource","beginDrag","cancelAnimationFrame","getDropResult","dropTargetNode","dragSource","connect","dragPreview","wrapTarget","nodeDropTarget","result","hover","bind","dropTarget","dragged","wrapPlaceholder","placeholderDropTarget","treeIdCounter","mergeTheme","merged","innerStyle","reactVirtualizedListProps","overridableDefaults","nodeContentRenderer","placeholderRenderer","rowHeight","slideRegionSize","treeNodeRenderer","propKey","ReactSortableTree","super","isVirtualized","dndManager","treePlaceholderRenderer","scrollZoneVirtualList","createScrollingComponent","withScrolling","List","vStrength","createVerticalStrength","hStrength","createHorizontalStrength","draggedMinimumTreeIndex","draggedDepth","searchMatches","searchFocusTreeIndex","dragging","draggingExpandedPaths","ignoreOneTreeUpdate","instanceProps","searchQuery","searchFocusOffset","ignoreTreeChanges","moveNode","handleDndMonitorChange","componentDidMount","loadLazyChildren","stateUpdate","search","setState","clearMonitorSubscription","dragDropManager","getMonitor","subscribeToStateChange","nextProps","prevState","newState","assign","componentDidUpdate","prevProps","onDragStateChanged","walk","callback","pending","onLazyLoadChildren","removeNode","draggedPath","reduce","newTree","changeNodeAtPath","isTreeDataEqual","componentWillUnmount","getRows","ignoreCollapsed","targetNode","onVisibilityToggle","nextParentNode","onMoveNode","seekIndex","expand","singleSearch","searchFinishCallback","searchMethod","onlyExpandSearchedNodes","expandedTreeData","matches","find","toggleExpandedForAll","defaultSearchMethod","expandAllMatchPaths","expandFocusMatchPaths","newDraggingTreeData","nodePath","newDraggingExpandedPaths","gt","append","uniqWith","eqBy","String","dropResult","shouldCopy","shouldCopyOnOutsideDrop","copyNode","resetTree","loadCollapsedLazyChildren","done","childrenArray","oldNode","renderRow","row","matchKeys","generateNodeProps","TreeNodeRenderer","NodeContentRenderer","nodeKey","callbackParams","nodeProps","rowCanDrag","sharedProps","rows","swapTo","fromIndex","toIndex","count","rowsWithoutMoved","slideRows","scrollToInfo","scrollToIndex","containerStyle","Placeholder","PlaceholderContent","ScrollZoneVirtualList","verticalStrength","horizontalStrength","speed","scrollToAlignment","rst__virtualScrollOverride","onScroll","rowCount","estimatedRowSize","rowRenderer","rowStyle","defaultGetNodeKey","polyfill","StyledReactSortableTree","withStyles","SortableTreeWithoutDndContext","DndContext","DragAndDrop","getReactElementText","parent","stringSearch","indexOf","getNodeDataAtTreeIndexOrNextIndex","targetIndex","currentIndex","isPseudoRoot","selfPath","nextIndex","childIndex","childCount","walkDescendants","mapDescendants","nextNode","selfInfo","mapResult","RESULT_MISS","traverse","currentTreeIndex","pathIndex","removedNode","removedTreeIndex","addNodeAtDepthAndIndex","isLastChild","currentDepth","n","insertedTreeIndex","parentPath","insertIndex","pathFragment","newChildren","insertResult","flattened","nodeInfo","older","younger","deepest","matchCount","trav","isSelfMatch","hasFocusMatch","extraInfo","hasChildren","getTreeFromFlatData","flatData","getKey","getParentKey","parentId","rootKey","childrenToParents","parentKey","addNodeUnderParent","addAsFirstChild","hasBeenAdded","changedTreeData","getNodeAtPath","foundNodeInfo","err","removeNodeAtPath","getVisibleNodeInfoAtIndex","getVisibleNodeCount","total","currentNode","editor","overflowX","letterSpacing","dense","actionButtons","withContext","contextValue","connection","relationUri","relationType","relation","highlightedError","isHighlightedErrorType","isAttributeTypeError","config","isNew","getEntityUriFromConnection","getRelationUriFromConnection","isTempEntity","isTempUri","mdmSetInitialInfo","setRelationType","closeRelationEditor","entityCreated","entityDeleted","setRelationEntity","errorDeactivated","errorsSet","addAttributes","modifyAttribute","removeAttribute","addRelation","editRelation","mainEntity","useMdmEntity","initialConnection","useMdmInitialConnection","initialModifiedEntity","useMdmInitialConnectionTempEntity","mdmModifiedEntity","useMdmModifiedEntity","mdmAllModifiedEntities","useMdmModifiedEntities","globalSearchRequestOptions","useMdmGlobalSearchRequestOptions","profileErrors","useMdmProfileErrors","authoringItems","useMdmAuthoringItemsByEntityType","getRelationEditorActiveError","modifiedEntity","allModifiedEntities","errorClassName","useScrollToAttributeError","isSimple","inRelations","inRelationTypes","outRelations","outRelationTypes","getInOutRelations","parentEntityUri","contentSecondLevel","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","attributes","getRelationAttributesFromConnection","getActivenessAttributes","relatedTempEntities","findRelatedTemporaryEntities","relatedTempEntitiesUrisHistory","setInitialInfo","concat","uniq","initialRelatedTempEntities","defaultRelationType","getDefaultRelationTypeObject","initialConnectionChangeablePart","pick","connectionChangeablePart","hasChanges","isEmptyValue","initial","actual","applyAction","curry","canCreateNewEntity","isSuggestMode","onRelationTypeChange","handleClose","updateModifiedEntityLabel","entityType","getEntityType","updateConnectionEntityLabel","setModifiedEntity","deleteModifiedEntity","onChangeEntity","getErrorId","validate","validateConnection","resetErrors","onApply","omitMarks","differenceWith","onCancel","initialTempEntities","onAddAttributes","params","param","onChangeAttribute","onDeleteAttribute","onCreateEntity","entityTypeUri","initValue","newEntityAttrTypes","relationEditorAttributeTypesSelectionStrategy","getCreatableAttributeTypes","newEntity","createTemporaryEntity","attributeTypes","errorMessage","getErrorMessage","getEntityTypesUris","entityTypes","ConnectionRelationTypeSelector","ErrorWrapper","EntitySelector","entityTypesUris","onCreate","attributeTypesSelectionStrategy","AttributesList","attrTypes","showEmptyEditors","Button","disabled","MapControlContainer","controlElement","setControlElement","controlDiv","document","createElement","divIndex","controls","removeAt","classList","add","createPortal","xmlnsXlink","xlinkHref","mask","ButtonWithTooltip","withTooltip","TopRightMapControls","drawingMode","drawingModes","hasActiveOverlay","onDrawingModeChanged","onClearOverlay","changeDrawingModeTo","HighlightOff","Icon","MAP_DRAWING_MODES","RadiusIcon","DrawIcon","getIcon","checkbox","TopCenterMapControls","isSearchOnMapMove","onChangeIsSearchOnMapMove","FormControlLabel","control","Checkbox","checked","target","getMapBoundsPolygon","bounds","getBounds","ne","getNorthEast","sw","getSouthWest","neLat","lat","neLng","lng","swLat","swLng","additionalPoint1","additionalPoint2","center","getCenter","getDrawingMode","window","google","maps","drawing","OverlayType","CIRCLE","POLYGON","fitMapBoundsForOverlay","overlay","existingBounds","LatLngBounds","extend","LatLng","fitBounds","hoveredMarkerIcon","svg2Url","markerIcon","marker","popperAnchor","hovered","setHovered","activeEntityUri","EntityMarkerContext","pathEq","point","setHoveredDebounced","debounce","onMouseOver","onMouseOut","url","scaledSize","Size","visible","options","alignBottom","pane","pixelOffset","closeBoxURL","enableEventPropagation","disableAutoPan","mapControlContainer","libraries","ReltioMap","markers","mapKey","defaultZoom","defaultCenter","loadingElement","isSearchEnabled","activeOverlay","overlayOptions","markerClusterer","markerClustererOptions","mapOptions","mapContainerClassName","onMapBoundsChanged","onOverlayUpdated","onMarkerClicked","isLoaded","loadError","useJsApiLoader","googleMapsApiKey","mapMoveEndTimer","setMap","polygon","setPolygon","setDrawingMode","apiIsLoaded","prevMarkers","usePrevious","prevActiveOverlay","prevApiIsLoaded","markersChanged","apiIsLoadedChanged","shouldUseFitMapBoundsForOverlay","MAP_MINIMUM_SCALE_RADIUS","fitMapBoundsForMarkers","useFitMapBounds","allOverlayOptions","DEFAULT_OVERLAY_OPTIONS","googleMapOptions","DEFAULT_GOOGLE_MAP_OPTIONS","handleChangeIsSearchOnMapMove","handleMapMoveStart","handleMapMoveEnd","handleMapIdle","handleOverlayChange","propOverlay","polygonStateOverlay","stateOverlay","isEmpty","typeActions","getPath","getArray","latlng","radius","getRadius","data","handleOverlayComplete","handleClearOverlay","renderMarkers","clusterer","shouldRenderDrawingManager","shouldRenderRightMapControls","shouldRenderCenterMapControls","shouldRenderPolygon","mapTypeId","MapTypeId","ROADMAP","onLoad","zoom","onZoomChanged","onDragStart","onIdle","ControlPosition","TOP_RIGHT","TOP_CENTER","editable","onMouseUp","onDragEnd","onPolygonComplete","onCircleComplete","drawingControl","circleOptions","polygonOptions","onlyValue","textOverflow","select","selectMenu","textField","SelectorWithOnlyOptionAutoSelect","emptyLabel","firstOption","moreOptions","hasOnlyOneOptionToSelect","displayEmpty","DropDownEditor","TextFieldProps","MenuProps","entries","rowSkeleton","DefaultRowCellRenderer","Skeleton","TableSkeleton","tableColumnsData","RowCellRenderer","tableRowsData","column","fromEntries","BasicTable","autosizing","containerClassName","columnsData","rowsData","defaultColumnMinWidth","defaultColumnWidth","headRowHeight","renderRowCell","VerticalDivider","flexShrink","attributesContainer","noCaption","noData","caption","excludeUris","includeUris","attributesCount","attributesCountProp","pivotingAttributes","useMdmPivotingAttributes","filteredAttrTypes","getFilteredAttrTypes","isShowAttributeList","getAttributesListForReadMode","values","PivotingAttributeContext","BasicView","FacetViewHeader","Box","drawLines","pinnedAttributes","ViewIdContext","userRoles","useMdmUserRoles","pinnedAttributeUris","getPinnedAttributesForUser","PinnedAttributesContext","crosswalks","restProps","mdmEntity","useMdmEntityWithDiff","mdmMode","useMdmMode","EntityContext","isViewMode","defaultHistoryDiff","appearance","roles","tags","fixRefEntity","evolve","refEntity","wrapInArrayIfNeeded","refRelation","prepareHistorySlice","historySlice","useHistoryDiff","setHistoryDiff","useMdmHistorySlice","historyDiff","useMdmHistoryDiff","historyMode","useMdmHistoryMode","aEntity","bEntity","History","computeEntityHistoryDiff","HistoryMode","dueDate","dueDateInput","inputLabel","taskId","isTaskOpen","updateDueDate","updateRequestIsInProgress","readOnly","updateTaskState","WorkflowTasksContext","workflowPath","useMdmWorkflowPath","environment","useMdmWorkflowEnvironmentUrl","tenant","useMdmTenant","setUpdateRequestIsInProgress","canUpdateTask","useWorkflowCheckPermission","checkWorkflowPermission","isOpenTask","newValue","updateDueDateForTask","catch","showWorkflowError","useWorkflowDueDate","DateEditor","date","getTime","slotProps","InputProps","InputLabelProps","priority","priorities","updatePriority","newPriority","updatePriorityForTask","WorkflowPriority","useWorkflowPriority","DropDownSelector","isDisabled","hideSelectedOptions","decorator","lineBlock","withLinePadding","noLine","line","plain","last","rowDivider","first","transparent","light","taskToColor","COLORS","colorIndex","card","withBackground","lineWrapper","commentsInfo","commentsIcon","infoValue","infoBlock","header","flag","mainInfo","controlsBox","controlsInRow","comments","task","actions","assignee","createdBy","createTime","step","processDefinitionDisplayName","objectURIs","processInstanceComments","possibleActions","preferredAction","dcrId","getDCRId","hash","useWorkflowColor","setExpanded","canViewComments","workflowActions","actionRequestIsInProgress","useWorkflowActions","Flag","CollapseButton","CollaborationIcon","TaskActions","isInProgress","AssigneeSelector","WorkflowComments","cx","cy","r","getOperationType","oldValue","DCRTypes","DCROperationTypes","pin","ignored","getOperationLabel","operation","getDataTypeDefinition","attributeValue","allPass","DataTypes","isUrl","getAttrDataTypeDefinition","getValues","newAttrValues","pathOr","name","oldAttrValues","times","getEntityChanges","entityInfo","changes","getAttributesList","getRelationChanges","relationInfo","changeType","getRelationType","flatten","level","propOr","addRelationOperationIfNeeded","dcrAttributesFactory","complement","getNestedAttributeChange","getReferenceAttributeChange","isSpecialAttribute","is","getSimpleAttributeValue","getSimpleAttributeChange","attributeTypeList","getAttributeTypeSubAttributes","getDiffParameters","SPECIAL_ATTRIBUTES_NAMES","EntityAttrTypes","prepareStartOrEndDate","parseValue","isNaN","parseInt","isExistedValue","isExistNewValue","isExistOldValue","prepareRolesOrTags","change","getRoleLabel","diffNewValue","difference","diffOldValue","prepareAttribute","changePath","attributePath","refObjectURI","refAttributeType","generateTempUri","typePath","split","pathArray","holder","currentValue","isNil","createEntityOrRelation","startDate","endDate","defaultProfilePicValue","newObject","mergeAttributesInChange","objectInfo","linkLabel","suggestionsCount","underline","field","fieldName","arrow","chip","textTransform","ArrowRightAlt","Chip","AttributesChangesContext","React","linkContainer","disabledLink","pointerEvents","objectsInfo","useMdmEntityUri","getLinkDescription","isReference","currentEntityUri","objectLabel","objectUri","startObjectUri","endObjectUri","endObjectLabel","startObjectLabel","objectURI","getAttributeDescription","renderLink","isNotExist","isExist","changeLabel","renderValue","attrValue","getAttributeValue","DataTypeValue","dataTypeDefinition","has","getSuggestionsCount","getEntitiesObjects","isEntityUri","getRelationsObjects","isRelationUri","getRelations","objectsWithChanges","createEntityRelationsObjectByEntity","relations","createEntityRelationsObjectByRelation","concatEntityRelationsObjects","acc","mergedRelations","isCreateEntityOperation","dcr","showMoreLink","dcrUri","relationsInfo","mergedEntityChanges","mergedRelationsChanges","getAttributeChanges","attributeName","concatChanges","getters","attributesTree","getter","changesTree","relationsTrees","updateRelation","mergeChanges","changesList","relationshipTitle","itemsToShow","collapsedSuggestionsCount","limit","setIsExpanded","collapsedItems","visibleSuggestionsCount","useCollapsibleList","ifElse","any","getEntityUriForChangeRequest","screen","Provider","getDCRUri","groupedObjects","setGroupedObjects","setDcr","requestEntities","entityUris","getEntitiesByUris","searchOptions","defaultMaxValues","getDataChangeRequest","extractObjectsFromChangeRequest","entityObjectsWithRelations","relationsObjects","relationsObjectsWithEntity","relationsObjectsWithoutEntity","partition","relationsObjectsWithRequestedEntities","relationsObject","showApiError","useChangeRequest","DcrTaskIcon","pmCard","defaultOptions","showTransitiveMatches","showInactiveEntities","useMatchesLoader","rowsPerPage","Number","MAX_SAFE_INTEGER","page","PmTaskIcon","WorkflowTaskCardsFactory","build","processType","PredefinedWorkflowProcessType","DeleteRequestTaskIcon","DefaultTaskIcon","WorkflowTaskCard","popoverPaper","simpleDropDownSelector","inputRoot","footer","cancelButton","AddWorkflowDialog","onClose","comment","setComment","taskType","setTaskType","isOpenSnackbar","setIsOpenSnackbar","definitions","setDefinitions","processDefinitions","manualStart","objectTypes","_entityType","filterDefinitions","useWorkflowDefinitions","processInstance","loading","setLoading","loadTasks","startProcessInstance","useWorkflowProcessInstance","Popover","anchorOrigin","vertical","horizontal","transformOrigin","paper","SimpleDropDownSelector","definition","TextField","hiddenLabel","multiline","Portal","body","Snackbar","autoHideDuration","buttonLabel","AddWorkflowButton","setAnchorEl","canStartProcess","canViewProcessDefinitions","currentTarget","Add","TaskActionButtons","preferredActions","otherActions","action","useWorkflowTasks","processTypes","showClosedTasks","tasks","setTasks","setTotal","isWorkflowEnabled","useMdmIsWorkflowEnabled","entityLastLoadedTime","useMdmProfileLastLoadedTime","canViewTasks","parsedProcessTypes","isArray","requests","getTasksForEntity","isDCRUri","getEntityUriFromDCRUri","includeClosed","all","responses","reject","uniqBy","isRequestedTask","console","warn","payload","mergeLeft","fillColor","strokeWeight","strokeColor","mapTypeControl","streetViewControl","fullscreenControl","InterceptHandlersContext","PageRequestsAbortingContext","SandboxAPIContext","getCurrentPerspectiveId","setEntityUri","showPerspective","validateParams","validationUrl","permissions","permission","urlOrigin","permRegex","RegExp","decodedPerm","replace","startsWith","test","getAuthHeaders","async","headers","servicesPath","accessToken","getAccessToken","Authorization","processRequest","worker","apiPath","user","openSearch","workflowCheckPermission","method","handleRequest","request","response","json","postMessage","JSON","parse","stringify","status","RequestAction","sendRequestFromCustomSandbox","noRequestProcessor","noRetry","sendApiRequest","isExternalUrl","sendWorkflowRequest","workflowRequest","processDefinitionId","searchString","startProcessFromQuery","processFromQuery","changeRequestURI","listener","perspective","searchState","alert","confirm","prompt","defaultText","location","reload","isValidCustomScript","files","platform","CustomScriptPlatform","isURLtoProcess","processApi","regExp","getWorkerURL","getRequestFakeUrl","reltioPath","getResponseFakeUrl","getProcessedTask","isApiAction","newUrl","processInnerHtml","setTooltip","handlersToReset","uiActions","getAttribute","uiTooltip","uiAction","handler","postEventMessage","readFilePromises","file","reader","FileReader","onload","lastModified","onerror","readAsArrayBuffer","getFilesWithArrayBuffer","addEventListener","removeEventListener","childNodes","nodeType","resetHtml","innerText","html","setListenersToReset","setHtml","docBlock","innerHTML","setUpRequestInterceptor","processApiRequest","workerRef","setRequestListeners","next","fakeURL","requestId","nanoid","setUpResponseInterceptor","processApiResponse","setResponseListeners","abort","responseId","img","iframe","a","useHtmlSanitizer","allowedAttributes","allowedTags","sanitizeHtml","sanitizeOptions","allowVulnerableTags","useAPI","listenersToReset","popupListenersToReset","setPopupListenersToReset","setVisible","popup","setPopup","customStyles","setCustomStyles","requestListeners","responseListeners","workerUrl","showSnackbarMessage","SnackbarContext","qxApi","interceptHandlers","useMdmApiPath","useMdmServicesPath","useMdmReltioPath","useMdmUser","typeSearch","useMdmSearchProviderData","popupText","process","CustomAction","sanitizedHtml","elem","getElementById","sanitizedPopup","prev","log","processedTask","requestInterceptor","responseInterceptor","pendingInterceptors","needDelayedRequestForInterceptors","startInterceptorInit","initializeWebWorker","finishInterceptorInit","addInternalRequestInterceptor","addInternalResponseInterceptor","removeInternalRequestInterceptor","removeInternalResponseInterceptor","useCommentsEntitiesMap","useMdmEntityUriWithDataTenant","setEntitiesMap","getEntities","entitiesUris","requestFilters","FilterOptions","requestOptions","activeness","ActivityFilter","getFilteredEntities","getNotFoundEntity","addNotFoundEntities","notFoundEntities","uniqEntitiesUris","objectType","relatedObjectUris","results","getNotFoundUris","prevEntitiesMap","emptyArray","useConfigPermissions","canCreate","checkConfigPermission","ConfigPermissions","canRead","canUpdate","canDelete","isConnectionHasError","areOneHierarchyUris","useExpandInvalidRelations","configId","openRelationEditor","shouldOpenInvalidEditors","listenToActions","useActionsHook","addedConnections","editedConnections","useMdmRelationsDrafts","relationsToAddAndEdit","useMdmAllRelationsToAddAndEdit","preparedConnectionsList","draftConnection","markNew","markEdited","invalidConnections","connections","getInvalidConnections","expandInvalidRelatonsListener","useMdmListener","setShouldOpenInvalidEditors","shouldOpen","listenerCallback","stopListeningActions","useLayoutResetter","onLayoutReset","onResetUndo","SnackbarRenderer","useSnackbar","onDismissClick","showDismiss","dismissTitle","resetLayout","buildSuggestedIds","isValidRequestConfig","entry","nextEntry","useRelationsLoader","sorting","relationActivityFilter","searchByOv","relationsLoaded","dtssPath","useMdmDtssPath","activityFilter","globalFilter","lastLoadedTime","processContent","getUri","isObject","filterRelation","isAvailableRelationTypeUri","filterFn","isAvailableEntityTypeUri","suggested","modeRef","loadRelations","requestConfig","sortBy","order","returnDates","returnObjects","offset","addGlobalFilterToQuery","configs","emptyResponsePromise","cond","isDataTenantEntity","getRelationsForDataTenantEntity","customerTenant","dataTenant","getRelationsForEntity","dataSorted","isRequestSentRef","prevMode","Mode","useRunOnceAfterValueInitialization","cb","isValueInited"],"sourceRoot":""}
|