@riboseinc/paneron-registry-kit 2.2.2 → 2.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/package.json +4 -3
  2. package/types/item.d.ts +1 -0
  3. package/types/item.js +8 -0
  4. package/types/item.js.map +1 -1
  5. package/views/GenericRelatedItemView.js +89 -75
  6. package/views/GenericRelatedItemView.js.map +1 -1
  7. package/views/change-request/ChangeRequestContext.js +8 -5
  8. package/views/change-request/ChangeRequestContext.js.map +1 -1
  9. package/views/change-request/objectChangeset.d.ts +3 -1
  10. package/views/change-request/objectChangeset.js +4 -1
  11. package/views/change-request/objectChangeset.js.map +1 -1
  12. package/views/detail/ChangeRequest/index.d.ts +0 -1
  13. package/views/detail/ChangeRequest/index.js +143 -128
  14. package/views/detail/ChangeRequest/index.js.map +1 -1
  15. package/views/detail/ChangeRequest/transitions.js +14 -9
  16. package/views/detail/ChangeRequest/transitions.js.map +1 -1
  17. package/views/detail/RegisterHome/index.js +1 -1
  18. package/views/detail/RegisterHome/index.js.map +1 -1
  19. package/views/detail/RegisterItem/index.js +34 -48
  20. package/views/detail/RegisterItem/index.js.map +1 -1
  21. package/views/hooks/useItemClassConfig.d.ts +1 -2
  22. package/views/hooks/useItemClassConfig.js +1 -7
  23. package/views/hooks/useItemClassConfig.js.map +1 -1
  24. package/views/hooks/useSingleRegisterItemData.d.ts +1 -1
  25. package/views/hooks/useSingleRegisterItemData.js +4 -3
  26. package/views/hooks/useSingleRegisterItemData.js.map +1 -1
  27. package/views/index.js +34 -24
  28. package/views/index.js.map +1 -1
  29. package/views/itemPathUtils.d.ts +3 -8
  30. package/views/itemPathUtils.js +26 -1
  31. package/views/itemPathUtils.js.map +1 -1
  32. package/views/protocolRegistry.d.ts +1 -1
  33. package/views/protocolRegistry.js.map +1 -1
  34. package/views/sidebar/Browse/index.js +43 -35
  35. package/views/sidebar/Browse/index.js.map +1 -1
  36. package/views/sidebar/Registration/index.js +12 -11
  37. package/views/sidebar/Registration/index.js.map +1 -1
  38. package/views/sidebar/Search/index.js +48 -43
  39. package/views/sidebar/Search/index.js.map +1 -1
  40. package/views/util.d.ts +1 -0
  41. package/views/util.js +3 -1
  42. package/views/util.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../../../src/views/detail/ChangeRequest/transitions.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAyB,MAAM,mBAAmB,CAAC;AAC1G,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAiHlF,+JAA+J;AAC/J,MAAM,CAAC,MAAM,iBAAiB,GAC9B,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE;;IACzB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,EACJ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gCAAgC,GACjC,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS,CAAC;IAE1C,MAAM,WAAW,GAAG,OAAO,CAAC,CAC1B,GAAG,EAAE,CAAC,WAAW;QACf,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC;QACjC,CAAC,CAAC,EAAE,CACP,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAU;QAC1B,sDAAsD;QACtD,eAAe,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAE,GACvC,gCAA8E,CAC7E,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EACtB,SAAS,EACT,SAAS,EACT,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QACpB,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,kBAAkB;gBACrB,OAAO;oBACL,GAAG,SAAS;oBACZ,eAAe,EAAE,SAAS;iBAC3B,CAAC;YACJ,KAAK,mBAAmB;gBACtB,OAAO;oBACL,GAAG,SAAS;oBACZ,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;iBACtC,CAAC;YACJ,KAAK,yBAAyB;gBAC5B,OAAO;oBACL,GAAG,SAAS;oBACZ,UAAU,EAAE,MAAM,CAAC,OAAO;iBAC3B,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;IACH,CAAC,EACD,YAAY,EACZ,IAAI,CAAC,CAAC;IAER,MAAM,qBAAqB,GAAG,MAAA,CAAC,aAAa,IAAI,KAAK,CAAC,eAAe;QACnE,CAAC,CAAC,MAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,eAAe,CAAC,0CAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,SAAS,CACZ,mCAAI,SAAS,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,IAAI,KAAK,CAAC,eAAe,EAAE;YAC1C,IAAI,CAAC,qBAAqB,EAAE;gBAC1B,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;aACxC;SACF;IACH,CAAC,EAAE;QACD,aAAa;QACb,KAAK,CAAC,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,GAEvD,OAAO,CAAC,GAAG,EAAE;;QACX,IAAI,EAAE,IAAI,qBAAqB,EAAE;YAC/B,IAAI;gBACF,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAClD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,SAAS,EAAE,MAAC,CAAS,CAAC,OAAO,mCAAI,GAAG,CAAC,EAAE,CAAC,CAAC;aAClD;YACD,OAAO,CAAC,KAAK,CAAC,UAA2B,EAAE,SAAS,CAAC,CAAC;SACvD;aAAM;YACL,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;SACvD;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAElG,MAAM,0BAA0B,GAAG,WAAW,CAC9C,KAAK,WAAW,EAAqC;QACnD,MAAM,YAAY,GAAG,CAAC,MAAM,aAAa,CAAC;YACxC,WAAW,EAAE;gBACX,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;oBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;oBAC9C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAG,EAAE,EAAE,CAAC,QAAQ,CAAC;gBACjC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,aAAa,KAAK,cAAc,CAAC;oBAClF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAE,IAAqB,CAAC,kBAAkB,CAAC;aAC7D;SACF,CAAC,CAAC,CAAC,IAAgD,CAAC;QACrD,oDAAoD;QACpD,MAAM,WAAW,GAAG,CAAC,MAAM,aAAa,CAAC;YACvC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;gBAC/E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAG,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;SACvD,CAAC,CAAC,CAAC,IAAgD,CAAC;QACrD,kDAAkD;QAClD,OAAO,MAAM,0BAA0B,CACnC,EAAE,CAAC,EAAE,EACL,YAAY,KAAK,SAAS,EAC1B,EAAE,CAAC,KAAK,EACR,YAAY,EACZ,WAAW,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,gBAAgB,GAAG,WAAW,CACpC,KAAK,WAAW,aAA2C,EAAE,UAAyB;QACpF,IAAI,aAAa,IAAI,aAAa,IAAI,WAAW,IAAI,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;YACvG,MAAM,KAAK,GAAG;gBACZ,GAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAA8B;gBACnE,KAAK,EAAE,aAAa,CAAC,WAAW;aACjC,CAAC;YACF,+EAA+E;YAC/E,MAAM,SAAS,GAAoB;gBACjC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBACrB,QAAQ,EAAE,EAAE;oBACZ,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC;YACF,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACxD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;aACnE;YACD,MAAM,aAAa,CAAC;gBAClB,aAAa,EAAE,GAAG,aAAa,CAAC,KAAK,KAAK;gBAC1C,eAAe,EAAE,SAAS;aAC3B,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;SAC/E;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,aAAa,GAAG,qBAAqB,KAAK,SAAS,IAAI,CAAC,MAAM,IAAI,mBAAmB,KAAK,SAAS,CAAC;IAE1G,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS;QAC1E,WAAW,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,IAAC,UAAU,IACP,aAAa,EAAE,KAAK,CAAC,eAAe,EACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;oBACpD,CAAC,CAAC,QAAQ,CAAC;wBACP,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE;qBAC5C,CAAC;oBACJ,CAAC,CAAC,KAAK,CAAC,IACX,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAChC,IAAC,KAAK,IACJ,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,SACL,CACH,CACU;YACf,CAAC,CAAC,IAAI;QACP,CAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,MAAM;YAC5B,CAAC,CAAC,IAAC,OAAO,IACJ,MAAM,EAAE,0BAA0B,KAAK,SAAS,EAChD,SAAS,EAAC,QAAQ,EAClB,aAAa,EAAC,KAAK,EACnB,MAAM,EAAC,SAAS,EAChB,OAAO,EAAE,0BAAG,0BAA0B,CAAI;gBAC5C,IAAC,qBAAqB,CAAC,MAAM,IAC3B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;wBAC7C,CAAC,CAAC,KAAK,CAAC,UAAU;wBAClB,CAAC,CAAC,EAAE,EACN,QAAQ,EAAE,CAAC,MAAM;wBACf,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;4BACpB,IAAI,EAAE,yBAAyB;4BAC/B,OAAO;yBACR,CAAC;wBACJ,CAAC,CAAC,SAAS,GACb,CACM;YACZ,CAAC,CAAC,IAAI;QACP,qBAAqB;YACpB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,CAAC,aAAa,EACxB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC7C,OAAO,EAAE,GAAG,EAAE,CACZ,mBAAmB;oBACjB,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAC3D,qBAAqB,EAAE,mBAAmB,CAAC;oBAC9C,CAAC,CAAC,KAAK,CAAC,IAEb,qBAAqB,CAAC,KAAK,CACrB;YACX,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,UAAU,kBAAkB,CAAC,EAAW;IAC5C,MAAM,GAAG,GAAqC,EAAE,CAAC;IACjD,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE;QAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,2BAA2B,EAAE,0BAAG,EAAE,CAAC,aAAa,CAAI,CAAC,CAAC,CAAC;KAClE;IACD,IAAI,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE;QAClC,GAAG,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,0BAAG,EAAE,CAAC,oBAAoB,CAAI,CAAC,CAAC,CAAC;KACxE;IACD,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,CAAC,uBAAuB,EAAE,0BAAG,EAAE,CAAC,gBAAgB,CAAI,CAAC,CAAC,CAAC;KACjE;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;QAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,0BAAG,EAAE,CAAC,YAAY,CAAI,CAAC,CAAC,CAAC;KACzD;IACD,IAAI,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;QAChC,GAAG,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,0BAAG,EAAE,CAAC,kBAAkB,CAAI,CAAC,CAAC,CAAC;KAClE;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AA4BD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAM,EACN,WAAgC;IAEhC,MAAM,mBAAmB,GAAG,WAAW,CAAC,EAAE,CAAC,KAA6B,CAAC,CAAC;IAC1E,IAAI,mBAAmB,EAAE;QACvB,OAAO,CACJ,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAmC;YACtE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAC1D,CAAC;KACH;SAAM;QACL,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;;IAC9C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAA,WAAW,CAAC,KAA6B,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,CAAC;AAGD,MAAM,4BAA4B,GAKlC,SAAS,4BAA4B,CAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE;IACjE,OAAO;QACL,GAAG,EAAE;QACL,oBAAoB,EAAE,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,EAAE;KACjD,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,wBAAwB,GAM9B,SAAS,wBAAwB,CAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE;IACzD,IAAI,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,EAAE,CAAA,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;IACD,OAAO;QACL,GAAG,EAAE;QACL,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,WAAW,GAIjB,SAAS,WAAW,CAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IACxC,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,EAAE,CAAA,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;KAC/C;IACD,OAAO;QACL,GAAG,EAAE;QACL,YAAY;QACZ,YAAY,EAAE,SAAS;KACxB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,0BAA0B,GAKhC,SAAS,0BAA0B,CAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC7D,IAAI,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,EAAE,CAAA,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,OAAO;QACL,GAAG,EAAE;QACL,kBAAkB;QAClB,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,qBAAqB,GACgC;IACzD,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS;IAC/B,MAAM,EAAE,IAAI;IACZ,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9F,IAAI,EAAE,CAAC,EAAmB,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,EAAE;QACL,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC;CACM,CAAC;AAGX,MAAM,oBAAoB,GAGrB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,gBAAgB;QAC/B,IAAC,uBAAuB,IACtB,QAAQ,QACR,KAAK,EAAE,KAAK,CAAC,aAAa,EAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAChB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAExD,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,uBAAuB,GAA4B,UAAU,KAAK;IACtE,OAAO,IAAC,QAAQ,IACd,IAAI,QACJ,GAAG,EAAE,GAAG,CAAA,mBAAmB,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,KACrB,KAAK,GACT,CAAC;AACL,CAAC,CAAC;AAGF,MAAM,mBAAmB,GAC4C;IACnE,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;IAC9B,mBAAmB,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CACxC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CACtE;IACD,MAAM,EAAE,oBAAoB;IAC5B,IAAI,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE;;QAC3B,IAAI,CAAC,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,0CAAE,IAAI,EAAE,CAAA,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC/C;QACD,OAAO;YACL,GAAG,EAAE;YACL,GAAG,cAAc;YACjB,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAA;IACH,CAAC;CACF,CAAA;AAGD,MAAM,0BAA0B,GAG3B,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,yBAAyB;QACxC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,oBAAoB,EACjC,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAE/D,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,sBAAsB,GAGvB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,wBAAwB;QACvC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAC7B,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG;gBACT,gBAAgB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK;aAC1C,CAAC,GAEJ,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,mBAAmB,GAGpB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,mBAAmB;QAClC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,YAAY,EACzB,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAEvD,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,wBAAwB,GAGzB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,uBAAuB;QACtC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,kBAAkB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAE7D,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAuC;IAC9D,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS;IAC9B,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,SAAS;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE,SAAS;IACvD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS;CAC/B,CAAC;AAIF,sEAAsE;AACtE,MAAM,WAAW,GAAmB;IAClC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,mBAAmB;KACzC;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE;YAC5C,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,iCAAiC;YACvD,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACzF,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE,4BAA4B;SACnC;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACzF,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE,SAAS,kCAAkC,CAAC,EAAE,EAAE,OAAO;;gBAC3D,IAAI,CAAC,MAAA,OAAO,CAAC,oBAAoB,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACtD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;iBACvF;gBACD,OAAO,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;SACF;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE;QAC5C,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9F,MAAM,EAAE,sBAAsB;YAC9B,IAAI,EAAE,wBAAwB;SAC/B;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9F,MAAM,EAAE,sBAAsB;YAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,CAAC;gBACjD,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9F,MAAM,EAAE,sBAAsB;YAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,CAAC;gBACjD,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;QACrC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,mBAAmB;QACxC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;KAC5C;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,EAAE,CAAC,aAAa;YACrC,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,WAAW;SAClB;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;YAC3B,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB;YACtC,mBAAmB,EAAE,EAAE,CAAC,aAAa;YACrC,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACb,GAAG,EAAE;gBACL,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YAC7B,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB;YACxC,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO;YAClE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,0BAA0B;SACjC;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO;YAClE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,0BAA0B;SACjC;KACF;CACO,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useEffect, useMemo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, RadioGroup, Radio, FormGroup, TextArea, TextAreaProps, Intent } from '@blueprintjs/core';\nimport { Tooltip2 as Tooltip } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport type { RegisterItem, RegisterStakeholder, Supersession } from '../../../types';\nimport { itemPathInCR, crIDToCRPath } from '../../itemPathUtils';\nimport * as CR from '../../../types/cr';\nimport { proposalsToObjectChangeset } from '../../change-request/objectChangeset';\n\n\n// XXX: simplify\n//type TransitionInputWidget<TO extends BaseCR, FROM extends BaseCR> =\n// TO[\"state\"] extends keyof Transitions\n// ? FROM[\"state\"] extends keyof Transitions[TO[\"state\"]]\n// ? Transitions[TO[\"state\"]][FROM[\"state\"]] extends Transition<any, any, infer P>\n// ? React.FC<{\n// inputData: P;\n// onConfirm: (inputData: P) => Promise<void>;\n// }>\n// : never\n// : never\n// : never\n\n// type TransitionInputWidget<P extends Record<string, any> | undefined> =\n// React.FC<{\n// //inputData: P;\n// onConfirm: (inputData: P) => Promise<void>;\n// }>\n// \n// \n// type TransitionWidgetConfiguration<T> =\n// T extends Transition<infer C, infer C2, infer P>\n// ? {\n// title: JSX.Element | string\n// hint?: JSX.Element | string\n// Widget: TransitionInputWidget<P>;\n// stakeholderCanTransition: (stakeholder: RegisterStakeholder, cr: C) => boolean;\n// typeGuard: (c: BaseCR) => c is C;\n// targetState: C2[\"state\"];\n// }\n// : never\n// \n// //const SubmitterInput: TransitionInputWidget<SubmitterInput> = function ({ inputData, onConfirm }) {\n// // return <></>;\n// //}\n// \n// const ProposalInput: TransitionInputWidget<SubmitterInput> = function ({ onConfirm }) {\n// return <></>;\n// };\n// \n// const DraftInput: TransitionInputWidget<SubmitterInput> = function ({ onConfirm }) {\n// return <></>;\n// };\n// \n// const SubmitToControlBodyInput: TransitionInputWidget<RegisterManagerInput> = function ({ onConfirm }) {\n// return <></>;\n// };\n// \n// //type C = Transitions[typeof State.DRAFT][typeof State.PROPOSED]\n// \n// const propose: TransitionWidgetConfiguration<Transitions[typeof State.DRAFT][typeof State.PROPOSED]> = {\n// Widget: ProposalInput,\n// title: \"Propose\",\n// stakeholderCanTransition: isSubmitter,\n// typeGuard: isDrafted,\n// targetState: State.PROPOSED,\n// };\n// const updateDraft: TransitionWidgetConfiguration<Transitions[typeof State.DRAFT][typeof State.DRAFT]> = {\n// Widget: DraftInput,\n// title: \"Update draft\",\n// stakeholderCanTransition: isSubmitter,\n// typeGuard: isDrafted,\n// targetState: State.DRAFT,\n// };\n// const submitToControlBody: TransitionWidgetConfiguration<Transitions[typeof State.PROPOSED][typeof State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]> = {\n// Widget: SubmitToControlBodyInput,\n// title: \"Update draft\",\n// stakeholderCanTransition: isSubmitter,\n// typeGuard: isProposed,\n// targetState: State.SUBMITTED_FOR_CONTROL_BODY_REVIEW,\n// };\n// \n// const options = [updateDraft, propose, submitToControlBody];\n// \n// const RegisterManagerInput: TransitionInputWidget<RegisterManagerInput> = function ({ onConfirm }) {\n// return (\n// <FormGroup label=\"Content summary:\">\n// <TextArea\n// fill\n// value={value.contentSummary || ''} readOnly={!onChange}\n// onChange={handleSummaryChange} />\n// </FormGroup>\n// );\n// }\n//type TransitionWidgetsConfiguration = {\n// [Statuses in `${keyof Transitions}_${keyof Transitions}`]:\n// Statuses extends `${infer F}_${infer T}`\n// ? F extends keyof Transitions\n// ? T extends keyof Transitions[F]\n// ? TransitionWidgetConfiguration<Transitions[F][T]>\n// : never\n// : never\n// : never\n//}\n\ninterface State {\n chosenNextState?: CR.StateType;\n\n /**\n * Can contain any fields. Upon transition,\n * they will be validated against selected `chosenNextState`.\n */\n stateInput: Partial<CR.StateInput>;\n}\n\ntype Action =\n | { type: 'unset-next-state' }\n | { type: 'choose-next-state'; payload: { state: CR.StateType } }\n | { type: 'update-next-state-input'; payload: Record<string, any> }\n\n//export const TransitionOptions: C extends CR.Base ? C[\"state\"] extends keyof CR.Transitions ? React.FC<{ cr: CR.Base }> : never : never = function ({ cr }) {\nexport const TransitionOptions: React.FC<{ cr: CR.Base, className?: string }> =\nfunction ({ cr, className }) {\n const { stakeholder, subregisters } = useContext(BrowserCtx);\n const {\n getObjectData,\n updateObjects,\n performOperation,\n operationKey,\n usePersistentDatasetStateReducer,\n } = useContext(DatasetContext);\n\n const isBusy = operationKey !== undefined;\n\n const transitions = useMemo((\n () => stakeholder\n ? getTransitions(cr, stakeholder)\n : []\n ), [JSON.stringify(stakeholder), JSON.stringify(cr)]);\n\n const initialState: State = {\n // Pre-select next state to first available transition\n chosenNextState: transitions.length > 0\n ? transitions[0][0]\n : undefined,\n stateInput: {},\n };\n\n const [ state, dispatch, stateRecalled ] =\n (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n `${cr.id}-${cr.state}`,\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'unset-next-state':\n return {\n ...prevState,\n chosenNextState: undefined,\n };\n case 'choose-next-state':\n return {\n ...prevState,\n chosenNextState: action.payload.state,\n };\n case 'update-next-state-input':\n return {\n ...prevState,\n stateInput: action.payload,\n };\n default:\n throw new Error(\"Unexpected state\");\n }\n },\n initialState,\n null);\n\n const selectedTransitionCfg = (stateRecalled && state.chosenNextState\n ? transitions.find(([t, ]) => t === state.chosenNextState)?.[1]\n : undefined\n ) ?? undefined;\n\n useEffect(() => {\n if (stateRecalled && state.chosenNextState) {\n if (!selectedTransitionCfg) {\n dispatch({ type: 'unset-next-state' });\n }\n }\n }, [\n stateRecalled,\n state.chosenNextState,\n JSON.stringify(selectedTransitionCfg),\n ]);\n\n const [validatedStateInput, stateInputValidationErrors]:\n [CR.StateInput, undefined] | [undefined, string] =\n useMemo(() => {\n if (cr && selectedTransitionCfg) {\n try {\n selectedTransitionCfg.func(cr, state.stateInput);\n } catch (e) {\n return [undefined, (e as any).message ?? `${e}`];\n }\n return [state.stateInput as CR.StateInput, undefined];\n } else {\n return [undefined, \"no CR or no transition selected\"];\n }\n }, [JSON.stringify(cr), JSON.stringify(selectedTransitionCfg), JSON.stringify(state.stateInput)]);\n\n const getItemChangesetAsApproved = useCallback(\n async function (cr: CR.Accepted | CR.AcceptedOnAppeal): Promise<ObjectChangeset> {\n const origItemData = (await getObjectData({\n objectPaths: [\n ...Object.entries(cr.items).\n filter(([, prop]) => prop.type !== 'addition').\n map(([itemPath, ]) => itemPath),\n ...Object.values(cr.items).\n filter(prop => prop.type === 'amendment' && prop.amendmentType === 'supersession').\n flatMap(prop => (prop as Supersession).supersedingItemIDs),\n ],\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got orig item data\", origItemData);\n const newItemData = (await getObjectData({\n objectPaths: Object.entries(cr.items).\n filter(([, prop]) => prop.type === 'clarification' || prop.type === 'addition').\n map(([itemPath, ]) => itemPathInCR(itemPath, cr.id)),\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got new item data\", newItemData);\n return await proposalsToObjectChangeset(\n cr.id,\n subregisters !== undefined,\n cr.items,\n origItemData,\n newItemData);\n }, [JSON.stringify(cr), JSON.stringify(subregisters)]);\n\n const handleTransition = useCallback(\n async function (transitionCfg: typeof selectedTransitionCfg, stateInput: CR.StateInput) {\n if (transitionCfg && updateObjects && stakeholder && transitionCfg.canBeTransitionedBy(stakeholder, cr)) {\n const newCR = {\n ...(transitionCfg.func(cr, stateInput) as Omit<CR.SomeCR, 'state'>),\n state: transitionCfg.targetState,\n };\n //console.debug(\"Transitioning CR\", JSON.stringify(cr), JSON.stringify(newCR));\n const changeset: ObjectChangeset = {\n [crIDToCRPath(cr.id)]: {\n oldValue: cr,\n newValue: newCR,\n },\n };\n if (CR.isAccepted(newCR) || CR.isAcceptedOnAppeal(newCR)) {\n Object.assign(changeset, await getItemChangesetAsApproved(newCR));\n }\n await updateObjects({\n commitMessage: `${transitionCfg.title} CR`,\n objectChangeset: changeset,\n });\n } else {\n throw new Error(\"Either transition is not specified or dataset is read-only\");\n }\n }, [updateObjects, JSON.stringify(stakeholder), JSON.stringify(cr)]);\n\n const canTransition = selectedTransitionCfg !== undefined && !isBusy && validatedStateInput !== undefined;\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className}>\n {transitions.length > 0\n ? <RadioGroup\n selectedValue={state.chosenNextState}\n onChange={(evt) => CR.isState(evt.currentTarget.value)\n ? dispatch({\n type: 'choose-next-state',\n payload: { state: evt.currentTarget.value },\n })\n : void 0}>\n {transitions.map(([state, cfg]) => \n <Radio\n key={state}\n label={cfg.title}\n value={state}\n disabled={isBusy}\n large\n />\n )}\n </RadioGroup>\n : null}\n {selectedTransitionCfg?.Widget\n ? <Tooltip\n isOpen={stateInputValidationErrors !== undefined}\n placement='bottom'\n targetTagName='div'\n intent='warning'\n content={<>{stateInputValidationErrors}</>}>\n <selectedTransitionCfg.Widget\n value={Object.keys(state.stateInput).length > 0\n ? state.stateInput\n : cr}\n onChange={!isBusy\n ? (payload) => dispatch({\n type: 'update-next-state-input',\n payload,\n })\n : undefined}\n />\n </Tooltip>\n : null}\n {selectedTransitionCfg\n ? <Button\n disabled={!canTransition}\n intent={canTransition ? 'primary' : undefined}\n onClick={() =>\n validatedStateInput\n ? performOperation('transitioning CR state', handleTransition)\n (selectedTransitionCfg, validatedStateInput)\n : void 0\n }>\n {selectedTransitionCfg.title}\n </Button>\n : null}\n </div>\n );\n};\n\n\nexport function getPastTransitions(cr: CR.Base): [key: string, el: JSX.Element][] {\n const els: [key: string, el: JSX.Element][] = [];\n if (CR.hasSubmitterInput(cr)) {\n els.push(['Submitter’s justification', <>{cr.justification}</>]);\n }\n if (CR.hasRegisterManagerInput(cr)) {\n els.push(['Register manager’s notes', <>{cr.registerManagerNotes}</>]);\n }\n if (CR.hasControlBodyInput(cr)) {\n els.push(['Control body decision', <>{cr.controlBodyNotes}</>]);\n }\n if (CR.hasAppealRequest(cr)) {\n els.push(['Reason for appeal', <>{cr.appealReason}</>]);\n }\n if (CR.hasRegisterOwnerInput(cr)) {\n els.push(['Register owner notes', <>{cr.registerOwnerNotes}</>]);\n }\n return els;\n}\n\n//export const PastTransitions: React.FC<{ cr: CR.Base }> = function ({ cr }) {\n// const els: JSX.Element[] = [];\n// if (CR.hasSubmitterInput(cr)) {\n// els.push(<SubmitterInputWidget value={cr} />);\n// }\n// if (CR.hasRegisterManagerInput(cr)) {\n// els.push(<RegisterManagerNotesWidget value={cr} />);\n// }\n// if (CR.hasControlBodyInput(cr)) {\n// els.push(<ControlBodyNotesWidget value={cr} />);\n// }\n// if (CR.hasAppealRequest(cr)) {\n// els.push(<AppealRequestWidget value={cr} />);\n// }\n// if (CR.hasRegisterOwnerInput(cr)) {\n// els.push(<RegisterOwnerNotesWidget value={cr} />);\n// }\n// return <>{els}</>;\n//}\n\n\ntype PossibleTransitionForCR<CR extends CR.Base> = [\n targetState: CR.StateType,\n cfg: CR.TransitionConfig<CR, CR.SomeCR, any>,\n];\n\n/**\n * Returns a list of transitions\n * that can be performed on given CR by given stakeholder.\n */\nexport function getTransitions<CR extends CR.Base>(\n cr: CR,\n stakeholder: RegisterStakeholder,\n): PossibleTransitionForCR<CR>[] {\n const possibleTransitions = TRANSITIONS[cr.state as keyof CR.Transitions];\n if (possibleTransitions) {\n return (\n (Object.entries(possibleTransitions) as PossibleTransitionForCR<CR>[]).\n filter(([, t]) => t.canBeTransitionedBy(stakeholder, cr))\n );\n } else {\n return [];\n }\n}\n\n\n/**\n * Returns True if there is no possible transition for given state.\n */\nexport function isFinalState(state: CR.StateType): boolean {\n return (Object.keys(TRANSITIONS[state as keyof CR.Transitions] ?? {})).length < 1;\n}\n\n\nconst applyRegisterManagerDecision: CR.Transition<\n CR.Proposed,\n CR.SubmittedForControlBodyReview\n| CR.ReturnedForClarificationByManager,\n CR.RegisterManagerInput> =\nfunction applyRegisterManagerDecision (cr, { registerManagerNotes }) {\n return {\n ...cr,\n registerManagerNotes: registerManagerNotes ?? '',\n };\n}\n\n\nconst applyControlBodyDecision: CR.Transition<\n CR.SubmittedForControlBodyReview,\n CR.Accepted\n| CR.Rejected\n| CR.ReturnedForClarificationByControlBody,\n CR.ControlBodyInput> =\nfunction applyControlBodyDecision (cr, { controlBodyNotes }) {\n if (!controlBodyNotes?.trim()) {\n throw new Error(\"Control body decision is required.\");\n }\n return {\n ...cr,\n controlBodyNotes,\n };\n}\n\n\nconst applyAppeal: CR.Transition<\n CR.Rejected,\n CR.Appealed,\n CR.AppealRequest> =\nfunction applyAppeal (cr, { appealReason }) {\n if (!appealReason?.trim()) {\n throw new Error(\"Appeal reason is required.\");\n }\n return {\n ...cr,\n appealReason,\n timeDisposed: undefined,\n };\n}\n\n\nconst applyRegisterOwnerDecision: CR.Transition<\n CR.Appealed,\n CR.AcceptedOnAppeal\n| CR.RejectionUpheld,\n CR.RegisterOwnerInput> =\nfunction applyRegisterOwnerDecision (cr, { registerOwnerNotes }) {\n if (!registerOwnerNotes?.trim()) {\n throw new Error(\"Register owner note is required.\");\n }\n return {\n ...cr,\n registerOwnerNotes,\n timeDisposed: new Date(),\n };\n}\n\n\nconst WITHDRAWAL_TRANSITION:\nCR.TransitionConfig<CR.Withdrawable, CR.Withdrawn, null> = {\n title: \"Withdraw\",\n targetState: CR.State.WITHDRAWN,\n Widget: null,\n canBeTransitionedBy: (stakeholder, cr) => cr.timeProposed && CR.isSubmittedBy(stakeholder, cr),\n func: (cr: CR.Withdrawable) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n} as const;\n\n\nconst SubmitterInputWidget: React.FC<{\n value: CR.SubmitterInput\n onChange?: (newVal: CR.SubmitterInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Justification:\">\n <TransitionInputTextArea\n required\n value={value.justification}\n onChange={(evt) =>\n onChange?.({ justification: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst TransitionInputTextArea: React.FC<TextAreaProps> = function (props) {\n return <TextArea\n fill\n css={css`resize: vertical;`}\n readOnly={!props.onChange}\n {...props}\n />;\n};\n\n\nconst PROPOSAL_TRANSITION:\nCR.TransitionConfig<CR.Proposable, CR.Proposed, CR.SubmitterInput> = {\n title: \"Propose\",\n targetState: CR.State.PROPOSED,\n canBeTransitionedBy: ((stakeholder, cr) =>\n CR.isSubmittedBy(stakeholder, cr) && Object.keys(cr.items).length > 0\n ),\n Widget: SubmitterInputWidget,\n func: (cr, submitterInput) => {\n if (!submitterInput?.justification?.trim()) {\n throw new Error(\"Justification is required.\");\n }\n return {\n ...cr,\n ...submitterInput,\n timeProposed: new Date(),\n }\n },\n}\n\n\nconst RegisterManagerNotesWidget: React.FC<{\n value: CR.RegisterManagerInput\n onChange?: (newVal: CR.RegisterManagerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register manager notes:\">\n <TransitionInputTextArea\n value={value.registerManagerNotes}\n required\n onChange={evt =>\n onChange?.({ registerManagerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst ControlBodyNotesWidget: React.FC<{\n value: CR.ControlBodyInput\n onChange?: (newVal: CR.ControlBodyInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Control body decision:\">\n <TransitionInputTextArea\n value={value.controlBodyNotes}\n required\n onChange={evt =>\n onChange?.({\n controlBodyNotes: evt.currentTarget.value,\n })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst AppealRequestWidget: React.FC<{\n value: CR.AppealRequest\n onChange?: (newVal: CR.AppealRequest) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Appeal reasoning:\">\n <TransitionInputTextArea\n value={value.appealReason}\n required\n onChange={evt =>\n onChange?.({ appealReason: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst RegisterOwnerNotesWidget: React.FC<{\n value: CR.RegisterOwnerInput\n onChange?: (newVal: CR.RegisterOwnerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register owner notes:\">\n <TransitionInputTextArea\n value={value.registerOwnerNotes}\n required\n onChange={evt =>\n onChange?.({ registerOwnerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nexport const STATE_INTENT: { [key in CR.StateType]?: Intent } = {\n [CR.State.PROPOSED]: 'primary',\n [CR.State.RETURNED_FOR_CLARIFICATION]: 'primary',\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: 'primary',\n [CR.State.APPEALED]: 'warning',\n};\n\n\n\n/** Associates transition implementation with source/target states. */\nconst TRANSITIONS: CR.Transitions = {\n [CR.State.DRAFT]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n },\n [CR.State.PROPOSED]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n title: \"Submit for control body review\",\n targetState: CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW,\n canBeTransitionedBy: (stakeholder) => ['owner', 'manager'].indexOf(stakeholder.role) >= 0,\n Widget: RegisterManagerNotesWidget,\n func: applyRegisterManagerDecision,\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (stakeholder) => ['owner', 'manager'].indexOf(stakeholder.role) >= 0,\n Widget: RegisterManagerNotesWidget,\n func: function applyRegisterManagerReturnDecision(cr, payload) {\n if ((payload.registerManagerNotes ?? '').trim() === '') {\n throw new Error(\"Register manager notes are required if returning for clarification\");\n }\n return applyRegisterManagerDecision(cr, payload);\n },\n },\n },\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: applyControlBodyDecision,\n },\n [CR.State.ACCEPTED]: {\n title: \"Accept\",\n targetState: CR.State.ACCEPTED,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n [CR.State.REJECTED]: {\n title: \"Reject\",\n targetState: CR.State.REJECTED,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n },\n [CR.State.REJECTED]: {\n [CR.State.APPEALED]: {\n title: \"Appeal\",\n targetState: CR.State.APPEALED,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: AppealRequestWidget,\n func: applyAppeal,\n },\n },\n [CR.State.APPEALED]: {\n [CR.State.APPEAL_WITHDRAWN]: {\n title: \"Withdraw appeal\",\n targetState: CR.State.APPEAL_WITHDRAWN,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: null,\n func: (cr) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n },\n [CR.State.ACCEPTED_ON_APPEAL]: {\n title: \"Accept on appeal\",\n targetState: CR.State.ACCEPTED_ON_APPEAL,\n canBeTransitionedBy: (stakeholder) => stakeholder.role === 'owner',\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n [CR.State.REJECTION_UPHELD_ON_APPEAL]: {\n title: \"Uphold rejection\",\n targetState: CR.State.REJECTION_UPHELD_ON_APPEAL,\n canBeTransitionedBy: (stakeholder) => stakeholder.role === 'owner',\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n },\n} as const;\n"]}
1
+ {"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../../../src/views/detail/ChangeRequest/transitions.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useEffect, useMemo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, RadioGroup, Radio, FormGroup, TextArea, TextAreaProps, Intent } from '@blueprintjs/core';\nimport { Tooltip2 as Tooltip } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport type { RegisterItem, RegisterStakeholder, Supersession } from '../../../types';\nimport { itemPathInCR, crIDToCRPath } from '../../itemPathUtils';\nimport * as CR from '../../../types/cr';\nimport { proposalsToObjectChangeset } from '../../change-request/objectChangeset';\n\n\ninterface State {\n chosenNextState?: CR.StateType;\n\n /**\n * Can contain any fields. Upon transition,\n * they will be validated against selected `chosenNextState`.\n */\n stateInput: Partial<CR.StateInput>;\n}\n\ntype Action =\n | { type: 'unset-next-state' }\n | { type: 'choose-next-state'; payload: { state: CR.StateType } }\n | { type: 'update-next-state-input'; payload: Record<string, any> }\n\n//export const TransitionOptions: C extends CR.Base ? C[\"state\"] extends keyof CR.Transitions ? React.FC<{ cr: CR.Base }> : never : never = function ({ cr }) {\nexport const TransitionOptions: React.FC<{ cr: CR.Base, className?: string }> =\nfunction ({ cr, className }) {\n const { stakeholder, subregisters } = useContext(BrowserCtx);\n const {\n getObjectData,\n updateObjects,\n performOperation,\n operationKey,\n usePersistentDatasetStateReducer,\n } = useContext(DatasetContext);\n\n const isBusy = operationKey !== undefined;\n\n const transitions = useMemo((\n () => stakeholder\n ? getTransitions(cr, stakeholder)\n : []\n ), [\n JSON.stringify(stakeholder),\n // IMPORTANT: Below two dependencies arise\n // from within `getTransitions()` implementation, which in turn\n // further depends on individual transitions.\n cr.state,\n cr.submittingStakeholderGitServerUsername,\n ]);\n\n const initialState: State = useMemo((() => ({\n // Pre-select next state to first available transition\n chosenNextState: transitions.length > 0\n ? transitions[0][0]\n : undefined,\n stateInput: {},\n })), [transitions]);\n\n const [ state, dispatch, stateRecalled ] =\n (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n `${cr.id}-${cr.state}`,\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'unset-next-state':\n return {\n ...prevState,\n chosenNextState: undefined,\n };\n case 'choose-next-state':\n return {\n ...prevState,\n chosenNextState: action.payload.state,\n };\n case 'update-next-state-input':\n return {\n ...prevState,\n stateInput: action.payload,\n };\n default:\n throw new Error(\"Unexpected state\");\n }\n },\n initialState,\n null);\n\n const selectedTransitionCfg = useMemo((() =>\n (\n stateRecalled && state.chosenNextState\n ? transitions.find(([t, ]) => t === state.chosenNextState)?.[1]\n : undefined\n ) ?? undefined\n ), [stateRecalled, state.chosenNextState, transitions]);\n\n useEffect(() => {\n if (stateRecalled && state.chosenNextState) {\n if (!selectedTransitionCfg) {\n dispatch({ type: 'unset-next-state' });\n }\n }\n }, [\n stateRecalled,\n state.chosenNextState,\n selectedTransitionCfg,\n ]);\n\n const [validatedStateInput, stateInputValidationErrors]:\n [CR.StateInput, undefined] | [undefined, string] =\n useMemo(() => {\n if (cr && selectedTransitionCfg) {\n try {\n selectedTransitionCfg.func(cr, state.stateInput);\n } catch (e) {\n return [undefined, (e as any).message ?? `${e}`];\n }\n return [state.stateInput as CR.StateInput, undefined];\n } else {\n return [undefined, \"no CR or no transition selected\"];\n }\n }, [JSON.stringify(cr), selectedTransitionCfg, state.stateInput]);\n\n const getItemChangesetAsApproved = useCallback(\n async function (cr: CR.Accepted | CR.AcceptedOnAppeal): Promise<ObjectChangeset> {\n const origItemData = (await getObjectData({\n objectPaths: [\n ...Object.entries(cr.items).\n filter(([, prop]) => prop.type !== 'addition').\n map(([itemPath, ]) => itemPath),\n ...Object.values(cr.items).\n filter(prop => prop.type === 'amendment' && prop.amendmentType === 'supersession').\n flatMap(prop => (prop as Supersession).supersedingItemIDs),\n ],\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got orig item data\", origItemData);\n const newItemData = (await getObjectData({\n objectPaths: Object.entries(cr.items).\n filter(([, prop]) => prop.type === 'clarification' || prop.type === 'addition').\n map(([itemPath, ]) => itemPathInCR(itemPath, cr.id)),\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got new item data\", newItemData);\n return await proposalsToObjectChangeset(\n cr.id,\n subregisters !== undefined,\n cr.items,\n origItemData,\n newItemData);\n }, [cr.id, JSON.stringify(cr.items), subregisters === undefined, getObjectData]);\n\n const handleTransition = useCallback(\n async function (transitionCfg: typeof selectedTransitionCfg, stateInput: CR.StateInput) {\n if (transitionCfg && updateObjects && stakeholder && transitionCfg.canBeTransitionedBy(stakeholder, cr)) {\n const newCR = {\n ...(transitionCfg.func(cr, stateInput) as Omit<CR.SomeCR, 'state'>),\n state: transitionCfg.targetState,\n };\n //console.debug(\"Transitioning CR\", JSON.stringify(cr), JSON.stringify(newCR));\n const changeset: ObjectChangeset = {\n [crIDToCRPath(cr.id)]: {\n oldValue: cr,\n newValue: newCR,\n },\n };\n if (CR.isAccepted(newCR) || CR.isAcceptedOnAppeal(newCR)) {\n Object.assign(changeset, await getItemChangesetAsApproved(newCR));\n }\n await updateObjects({\n commitMessage: `${transitionCfg.title} CR`,\n objectChangeset: changeset,\n });\n } else {\n throw new Error(\"Either transition is not specified or dataset is read-only\");\n }\n }, [updateObjects, JSON.stringify(stakeholder), JSON.stringify(cr)]);\n\n const canTransition = selectedTransitionCfg !== undefined && !isBusy && validatedStateInput !== undefined;\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className}>\n {transitions.length > 0\n ? <RadioGroup\n selectedValue={state.chosenNextState}\n onChange={(evt) => CR.isState(evt.currentTarget.value)\n ? dispatch({\n type: 'choose-next-state',\n payload: { state: evt.currentTarget.value },\n })\n : void 0}>\n {transitions.map(([state, cfg]) => \n <Radio\n key={state}\n label={cfg.title}\n value={state}\n disabled={isBusy}\n large\n />\n )}\n </RadioGroup>\n : null}\n {selectedTransitionCfg?.Widget\n ? <Tooltip\n isOpen={stateInputValidationErrors !== undefined}\n placement='bottom'\n targetTagName='div'\n intent='warning'\n content={<>{stateInputValidationErrors}</>}>\n <selectedTransitionCfg.Widget\n value={Object.keys(state.stateInput).length > 0\n ? state.stateInput\n : cr}\n onChange={!isBusy\n ? (payload) => dispatch({\n type: 'update-next-state-input',\n payload,\n })\n : undefined}\n />\n </Tooltip>\n : null}\n {selectedTransitionCfg\n ? <Button\n disabled={!canTransition}\n intent={canTransition ? 'primary' : undefined}\n onClick={() =>\n validatedStateInput\n ? performOperation('transitioning CR state', handleTransition)\n (selectedTransitionCfg, validatedStateInput)\n : void 0\n }>\n {selectedTransitionCfg.title}\n </Button>\n : null}\n </div>\n );\n};\n\n\nexport function getPastTransitions(cr: CR.Base): [key: string, el: JSX.Element][] {\n const els: [key: string, el: JSX.Element][] = [];\n if (CR.hasSubmitterInput(cr)) {\n els.push(['Submitter’s justification', <>{cr.justification}</>]);\n }\n if (CR.hasRegisterManagerInput(cr)) {\n els.push(['Register manager’s notes', <>{cr.registerManagerNotes}</>]);\n }\n if (CR.hasControlBodyInput(cr)) {\n els.push(['Control body decision', <>{cr.controlBodyNotes}</>]);\n }\n if (CR.hasAppealRequest(cr)) {\n els.push(['Reason for appeal', <>{cr.appealReason}</>]);\n }\n if (CR.hasRegisterOwnerInput(cr)) {\n els.push(['Register owner notes', <>{cr.registerOwnerNotes}</>]);\n }\n return els;\n}\n\n//export const PastTransitions: React.FC<{ cr: CR.Base }> = function ({ cr }) {\n// const els: JSX.Element[] = [];\n// if (CR.hasSubmitterInput(cr)) {\n// els.push(<SubmitterInputWidget value={cr} />);\n// }\n// if (CR.hasRegisterManagerInput(cr)) {\n// els.push(<RegisterManagerNotesWidget value={cr} />);\n// }\n// if (CR.hasControlBodyInput(cr)) {\n// els.push(<ControlBodyNotesWidget value={cr} />);\n// }\n// if (CR.hasAppealRequest(cr)) {\n// els.push(<AppealRequestWidget value={cr} />);\n// }\n// if (CR.hasRegisterOwnerInput(cr)) {\n// els.push(<RegisterOwnerNotesWidget value={cr} />);\n// }\n// return <>{els}</>;\n//}\n\n\ntype PossibleTransitionForCR<CR extends CR.Base> = [\n targetState: CR.StateType,\n cfg: CR.TransitionConfig<CR, CR.SomeCR, any>,\n];\n\n/**\n * Returns a list of transitions\n * that can be performed on given CR by given stakeholder.\n */\nexport function getTransitions<CR extends CR.Base>(\n cr: CR,\n stakeholder: RegisterStakeholder,\n): PossibleTransitionForCR<CR>[] {\n const possibleTransitions = TRANSITIONS[cr.state as keyof CR.Transitions];\n if (possibleTransitions) {\n return (\n (Object.entries(possibleTransitions) as PossibleTransitionForCR<CR>[]).\n filter(([, t]) => t.canBeTransitionedBy(stakeholder, cr))\n );\n } else {\n return [];\n }\n}\n\n\n/**\n * Returns True if there is no possible transition for given state.\n */\nexport function isFinalState(state: CR.StateType): boolean {\n return (Object.keys(TRANSITIONS[state as keyof CR.Transitions] ?? {})).length < 1;\n}\n\n\nconst applyRegisterManagerDecision: CR.Transition<\n CR.Proposed,\n CR.SubmittedForControlBodyReview\n| CR.ReturnedForClarificationByManager,\n CR.RegisterManagerInput> =\nfunction applyRegisterManagerDecision (cr, { registerManagerNotes }) {\n return {\n ...cr,\n registerManagerNotes: registerManagerNotes ?? '',\n };\n}\n\n\nconst applyControlBodyDecision: CR.Transition<\n CR.SubmittedForControlBodyReview,\n CR.Accepted\n| CR.Rejected\n| CR.ReturnedForClarificationByControlBody,\n CR.ControlBodyInput> =\nfunction applyControlBodyDecision (cr, { controlBodyNotes }) {\n if (!controlBodyNotes?.trim()) {\n throw new Error(\"Control body decision is required.\");\n }\n return {\n ...cr,\n controlBodyNotes,\n };\n}\n\n\nconst applyAppeal: CR.Transition<\n CR.Rejected,\n CR.Appealed,\n CR.AppealRequest> =\nfunction applyAppeal (cr, { appealReason }) {\n if (!appealReason?.trim()) {\n throw new Error(\"Appeal reason is required.\");\n }\n return {\n ...cr,\n appealReason,\n timeDisposed: undefined,\n };\n}\n\n\nconst applyRegisterOwnerDecision: CR.Transition<\n CR.Appealed,\n CR.AcceptedOnAppeal\n| CR.RejectionUpheld,\n CR.RegisterOwnerInput> =\nfunction applyRegisterOwnerDecision (cr, { registerOwnerNotes }) {\n if (!registerOwnerNotes?.trim()) {\n throw new Error(\"Register owner note is required.\");\n }\n return {\n ...cr,\n registerOwnerNotes,\n timeDisposed: new Date(),\n };\n}\n\n\nconst WITHDRAWAL_TRANSITION:\nCR.TransitionConfig<CR.Withdrawable, CR.Withdrawn, null> = {\n title: \"Withdraw\",\n targetState: CR.State.WITHDRAWN,\n Widget: null,\n canBeTransitionedBy: (stakeholder, cr) => cr.timeProposed && CR.isSubmittedBy(stakeholder, cr),\n func: (cr: CR.Withdrawable) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n} as const;\n\n\nconst SubmitterInputWidget: React.FC<{\n value: CR.SubmitterInput\n onChange?: (newVal: CR.SubmitterInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Justification:\">\n <TransitionInputTextArea\n required\n value={value.justification}\n onChange={(evt) =>\n onChange?.({ justification: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst TransitionInputTextArea: React.FC<TextAreaProps> = function (props) {\n return <TextArea\n fill\n css={css`resize: vertical;`}\n readOnly={!props.onChange}\n {...props}\n />;\n};\n\n\nconst PROPOSAL_TRANSITION:\nCR.TransitionConfig<CR.Proposable, CR.Proposed, CR.SubmitterInput> = {\n title: \"Propose\",\n targetState: CR.State.PROPOSED,\n canBeTransitionedBy: ((stakeholder, cr) =>\n CR.isSubmittedBy(stakeholder, cr) && Object.keys(cr.items).length > 0\n ),\n Widget: SubmitterInputWidget,\n func: (cr, submitterInput) => {\n if (!submitterInput?.justification?.trim()) {\n throw new Error(\"Justification is required.\");\n }\n return {\n ...cr,\n ...submitterInput,\n timeProposed: new Date(),\n }\n },\n}\n\n\nconst RegisterManagerNotesWidget: React.FC<{\n value: CR.RegisterManagerInput\n onChange?: (newVal: CR.RegisterManagerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register manager notes:\">\n <TransitionInputTextArea\n value={value.registerManagerNotes}\n required\n onChange={evt =>\n onChange?.({ registerManagerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst ControlBodyNotesWidget: React.FC<{\n value: CR.ControlBodyInput\n onChange?: (newVal: CR.ControlBodyInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Control body decision:\">\n <TransitionInputTextArea\n value={value.controlBodyNotes}\n required\n onChange={evt =>\n onChange?.({\n controlBodyNotes: evt.currentTarget.value,\n })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst AppealRequestWidget: React.FC<{\n value: CR.AppealRequest\n onChange?: (newVal: CR.AppealRequest) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Appeal reasoning:\">\n <TransitionInputTextArea\n value={value.appealReason}\n required\n onChange={evt =>\n onChange?.({ appealReason: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst RegisterOwnerNotesWidget: React.FC<{\n value: CR.RegisterOwnerInput\n onChange?: (newVal: CR.RegisterOwnerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register owner notes:\">\n <TransitionInputTextArea\n value={value.registerOwnerNotes}\n required\n onChange={evt =>\n onChange?.({ registerOwnerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nexport const STATE_INTENT: { [key in CR.StateType]?: Intent } = {\n [CR.State.PROPOSED]: 'primary',\n [CR.State.RETURNED_FOR_CLARIFICATION]: 'primary',\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: 'primary',\n [CR.State.APPEALED]: 'warning',\n};\n\n\n\n/** Associates transition implementation with source/target states. */\nconst TRANSITIONS: CR.Transitions = {\n [CR.State.DRAFT]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n },\n [CR.State.PROPOSED]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n title: \"Submit for control body review\",\n targetState: CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW,\n canBeTransitionedBy: (stakeholder) => ['owner', 'manager'].indexOf(stakeholder.role) >= 0,\n Widget: RegisterManagerNotesWidget,\n func: applyRegisterManagerDecision,\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (stakeholder) => ['owner', 'manager'].indexOf(stakeholder.role) >= 0,\n Widget: RegisterManagerNotesWidget,\n func: function applyRegisterManagerReturnDecision(cr, payload) {\n if ((payload.registerManagerNotes ?? '').trim() === '') {\n throw new Error(\"Register manager notes are required if returning for clarification\");\n }\n return applyRegisterManagerDecision(cr, payload);\n },\n },\n },\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: applyControlBodyDecision,\n },\n [CR.State.ACCEPTED]: {\n title: \"Accept\",\n targetState: CR.State.ACCEPTED,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n [CR.State.REJECTED]: {\n title: \"Reject\",\n targetState: CR.State.REJECTED,\n canBeTransitionedBy: (stakeholder) => ['owner', 'control-body'].indexOf(stakeholder.role) >= 0,\n Widget: ControlBodyNotesWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n },\n [CR.State.REJECTED]: {\n [CR.State.APPEALED]: {\n title: \"Appeal\",\n targetState: CR.State.APPEALED,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: AppealRequestWidget,\n func: applyAppeal,\n },\n },\n [CR.State.APPEALED]: {\n [CR.State.APPEAL_WITHDRAWN]: {\n title: \"Withdraw appeal\",\n targetState: CR.State.APPEAL_WITHDRAWN,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: null,\n func: (cr) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n },\n [CR.State.ACCEPTED_ON_APPEAL]: {\n title: \"Accept on appeal\",\n targetState: CR.State.ACCEPTED_ON_APPEAL,\n canBeTransitionedBy: (stakeholder) => stakeholder.role === 'owner',\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n [CR.State.REJECTION_UPHELD_ON_APPEAL]: {\n title: \"Uphold rejection\",\n targetState: CR.State.REJECTION_UPHELD_ON_APPEAL,\n canBeTransitionedBy: (stakeholder) => stakeholder.role === 'owner',\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n },\n} as const;\n"]}
@@ -103,7 +103,7 @@ const RegisterHome = function () {
103
103
  const crID = fileData.proposalDraft.id;
104
104
 
105
105
  try {
106
- const changeset = await (0, _objectChangeset.importedProposalToCRObjectChangeset)(fileData, itemClasses, getObjectData, async function findObjects(predicate) {
106
+ const changeset = await (0, _objectChangeset.importedProposalToCRObjectChangeset)(fileData, itemClasses, stakeholder.gitServerUsername, getObjectData, async function findObjects(predicate) {
107
107
  const result = await getMapReducedData({
108
108
  chains: {
109
109
  _: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState } from 'react';\n//import { Helmet } from 'react-helmet';\nimport { jsx, css } from '@emotion/react';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { Menu, MenuDivider, MenuItem, InputGroup, Button, NonIdealState, Spinner, Callout } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { registerStakeholderPlain } from '../../RegisterStakeholder';\nimport { newCRObjectChangeset, importedProposalToCRObjectChangeset } from '../../change-request/objectChangeset';\nimport { isImportableCR } from '../../../types/cr';\nimport { Protocols } from '../../protocolRegistry';\nimport { crIDToCRPath } from '../../itemPathUtils';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { customViews, registerMetadata, stakeholder, offline, itemClasses } = useContext(BrowserCtx);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n getMapReducedData,\n } = useContext(DatasetContext);\n\n const [ newProposalIdea, setNewProposalIdea ] = useState<string>('');\n\n const registerVersion = registerMetadata?.version;\n const canCreateCR = (\n stakeholder &&\n stakeholder.role &&\n stakeholder.gitServerUsername?.trim() !== '' &&\n makeRandomID &&\n updateObjects &&\n (registerVersion?.id ?? '').trim() !== '');\n\n async function createCR(justification: string): Promise<string> {\n if (canCreateCR) {\n const id = await makeRandomID();\n await updateObjects({\n commitMessage: \"start new proposal\",\n objectChangeset: newCRObjectChangeset(\n id,\n justification,\n registerVersion!,\n stakeholder.gitServerUsername!,\n ),\n });\n return id;\n } else {\n throw new Error(\"Unable to create proposal: read-only dataset\");\n }\n }\n\n async function handleNewProposal() {\n if (newProposalIdea) {\n const crID = await performOperation(\"creating proposal\", createCR)(newProposalIdea);\n setNewProposalIdea('');\n spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(crID)}`);\n }\n }\n\n async function getCRImportChangeset(): Promise<[ObjectChangeset, string]> {\n if (!requestFileFromFilesystem) {\n throw new Error(\"Cannot request file from filesystem\");\n }\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n const crID = fileData.proposalDraft.id;\n try {\n const changeset = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n getObjectData,\n async function findObjects(predicate: string) {\n const result = (await getMapReducedData({\n chains: {\n _: {\n mapFunc: `\n const data = value.data;\n if (data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n },\n }));\n // NOTE: map returns an empty object if there’re no items,\n // but we promise to return a list.\n if (!Array.isArray(result._)) {\n return [];\n }\n return result._;\n },\n );\n return [changeset, crID];\n } catch (e) {\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n\n async function handleImportProposal() {\n const [objectChangeset, crID] = await performOperation(\n 'reading proposal data',\n getCRImportChangeset,\n )();\n\n await performOperation(\n 'creating proposal',\n updateObjects ?? (async () => { throw new Error(\"Read-only dataset\"); }),\n )({\n commitMessage: \"import proposal\",\n objectChangeset,\n });\n\n setNewProposalIdea('');\n spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(crID)}`);\n }\n\n const menu = (\n <Menu css={css`margin: 10px;`}>\n <MenuDivider title=\"Quick links\" />\n {customViews.map((cv, _) => \n <MenuItem\n key={cv.id}\n text={cv.label}\n title={cv.description}\n icon={cv.icon}\n onClick={() => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`)}\n />\n )}\n {customViews.length > 0 ? <MenuDivider /> : null}\n\n <MenuItem\n text={`Propose a change to version ${registerMetadata?.version?.id ?? '(missing)'}`}\n disabled={!canCreateCR}\n icon=\"lightbulb\"\n title={canCreateCR\n ? \"A blank proposal will be created and opened in a new tab.\"\n : undefined}>\n <InputGroup\n value={newProposalIdea || undefined}\n placeholder=\"Your idea…\"\n title=\"Justification draft (you can change this later)\"\n onChange={evt => setNewProposalIdea(evt.currentTarget.value)}\n rightElement={\n <Button\n small\n intent={newProposalIdea ? 'primary': undefined}\n disabled={!newProposalIdea}\n onClick={handleNewProposal}\n icon=\"tick\"\n />\n }\n />\n </MenuItem>\n <MenuItem\n text=\"Import proposal\"\n icon=\"import\"\n disabled={!canCreateCR}\n onClick={handleImportProposal}\n />\n <MenuItem\n text=\"View register metadata\"\n icon=\"properties\"\n onClick={() => spawnTab(Protocols.REGISTER_META)}\n />\n </Menu>\n );\n\n const intro = <Callout intent=\"primary\" css={css`text-align: left;`}>\n {stakeholder\n ? <>You can create proposals as {registerStakeholderPlain(stakeholder)}.</>\n : offline\n ? <>\n Because this repository is offline (no remote configured),\n and remote username is currently required for proposal,\n you cannot create proposals.</>\n : <>\n Since your remote username is not in the list of stakeholders,\n you cannot create proposals currently.\n </>}\n </Callout>\n\n const greeting = registerMetadata\n ? <NonIdealState\n title={`Welcome to ${registerMetadata.name}`}\n description={<>\n {intro}\n {menu}\n </>}\n />\n : registerMetadata === undefined\n ? <NonIdealState\n icon={<Spinner />}\n description=\"Loading register information…\"\n />\n : <NonIdealState\n icon=\"heart-broken\"\n title=\"Register metadata is missing or invalid.\"\n description={<>\n {menu}\n </>}\n />;\n\n return greeting;\n}\n\nexport default RegisterHome;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState } from 'react';\n//import { Helmet } from 'react-helmet';\nimport { jsx, css } from '@emotion/react';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { Menu, MenuDivider, MenuItem, InputGroup, Button, NonIdealState, Spinner, Callout } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { registerStakeholderPlain } from '../../RegisterStakeholder';\nimport { newCRObjectChangeset, importedProposalToCRObjectChangeset } from '../../change-request/objectChangeset';\nimport { isImportableCR } from '../../../types/cr';\nimport { Protocols } from '../../protocolRegistry';\nimport { crIDToCRPath } from '../../itemPathUtils';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { customViews, registerMetadata, stakeholder, offline, itemClasses } = useContext(BrowserCtx);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n getMapReducedData,\n } = useContext(DatasetContext);\n\n const [ newProposalIdea, setNewProposalIdea ] = useState<string>('');\n\n const registerVersion = registerMetadata?.version;\n const canCreateCR = (\n stakeholder &&\n stakeholder.role &&\n stakeholder.gitServerUsername?.trim() !== '' &&\n makeRandomID &&\n updateObjects &&\n (registerVersion?.id ?? '').trim() !== '');\n\n async function createCR(justification: string): Promise<string> {\n if (canCreateCR) {\n const id = await makeRandomID();\n await updateObjects({\n commitMessage: \"start new proposal\",\n objectChangeset: newCRObjectChangeset(\n id,\n justification,\n registerVersion!,\n stakeholder.gitServerUsername!,\n ),\n });\n return id;\n } else {\n throw new Error(\"Unable to create proposal: read-only dataset\");\n }\n }\n\n async function handleNewProposal() {\n if (newProposalIdea) {\n const crID = await performOperation(\"creating proposal\", createCR)(newProposalIdea);\n setNewProposalIdea('');\n spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(crID)}`);\n }\n }\n\n async function getCRImportChangeset(): Promise<[ObjectChangeset, string]> {\n if (!requestFileFromFilesystem) {\n throw new Error(\"Cannot request file from filesystem\");\n }\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n const crID = fileData.proposalDraft.id;\n try {\n const changeset = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function findObjects(predicate: string) {\n const result = (await getMapReducedData({\n chains: {\n _: {\n mapFunc: `\n const data = value.data;\n if (data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n },\n }));\n // NOTE: map returns an empty object if there’re no items,\n // but we promise to return a list.\n if (!Array.isArray(result._)) {\n return [];\n }\n return result._;\n },\n );\n return [changeset, crID];\n } catch (e) {\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n\n async function handleImportProposal() {\n const [objectChangeset, crID] = await performOperation(\n 'reading proposal data',\n getCRImportChangeset,\n )();\n\n await performOperation(\n 'creating proposal',\n updateObjects ?? (async () => { throw new Error(\"Read-only dataset\"); }),\n )({\n commitMessage: \"import proposal\",\n objectChangeset,\n });\n\n setNewProposalIdea('');\n spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(crID)}`);\n }\n\n const menu = (\n <Menu css={css`margin: 10px;`}>\n <MenuDivider title=\"Quick links\" />\n {customViews.map((cv, _) => \n <MenuItem\n key={cv.id}\n text={cv.label}\n title={cv.description}\n icon={cv.icon}\n onClick={() => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`)}\n />\n )}\n {customViews.length > 0 ? <MenuDivider /> : null}\n\n <MenuItem\n text={`Propose a change to version ${registerMetadata?.version?.id ?? '(missing)'}`}\n disabled={!canCreateCR}\n icon=\"lightbulb\"\n title={canCreateCR\n ? \"A blank proposal will be created and opened in a new tab.\"\n : undefined}>\n <InputGroup\n value={newProposalIdea || undefined}\n placeholder=\"Your idea…\"\n title=\"Justification draft (you can change this later)\"\n onChange={evt => setNewProposalIdea(evt.currentTarget.value)}\n rightElement={\n <Button\n small\n intent={newProposalIdea ? 'primary': undefined}\n disabled={!newProposalIdea}\n onClick={handleNewProposal}\n icon=\"tick\"\n />\n }\n />\n </MenuItem>\n <MenuItem\n text=\"Import proposal\"\n icon=\"import\"\n disabled={!canCreateCR}\n onClick={handleImportProposal}\n />\n <MenuItem\n text=\"View register metadata\"\n icon=\"properties\"\n onClick={() => spawnTab(Protocols.REGISTER_META)}\n />\n </Menu>\n );\n\n const intro = <Callout intent=\"primary\" css={css`text-align: left;`}>\n {stakeholder\n ? <>You can create proposals as {registerStakeholderPlain(stakeholder)}.</>\n : offline\n ? <>\n Because this repository is offline (no remote configured),\n and remote username is currently required for proposal,\n you cannot create proposals.</>\n : <>\n Since your remote username is not in the list of stakeholders,\n you cannot create proposals currently.\n </>}\n </Callout>\n\n const greeting = registerMetadata\n ? <NonIdealState\n title={`Welcome to ${registerMetadata.name}`}\n description={<>\n {intro}\n {menu}\n </>}\n />\n : registerMetadata === undefined\n ? <NonIdealState\n icon={<Spinner />}\n description=\"Loading register information…\"\n />\n : <NonIdealState\n icon=\"heart-broken\"\n title=\"Register metadata is missing or invalid.\"\n description={<>\n {menu}\n </>}\n />;\n\n return greeting;\n}\n\nexport default RegisterHome;\n"]}
@@ -15,12 +15,12 @@ var _core = require("@blueprintjs/core");
15
15
 
16
16
  var _context = require("@riboseinc/paneron-extension-kit/context");
17
17
 
18
+ var _util = require("@riboseinc/paneron-extension-kit/util");
19
+
18
20
  var _HelpTooltip = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/HelpTooltip"));
19
21
 
20
22
  var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
21
23
 
22
- var _useItemRef = _interopRequireDefault(require("../../hooks/useItemRef"));
23
-
24
24
  var _useSingleRegisterItemData = _interopRequireDefault(require("../../hooks/useSingleRegisterItemData"));
25
25
 
26
26
  var _useItemClassConfig = _interopRequireDefault(require("../../hooks/useItemClassConfig"));
@@ -31,7 +31,7 @@ var _types = require("../../../types");
31
31
 
32
32
  var _BrowserCtx = require("../../BrowserCtx");
33
33
 
34
- var _util = require("../../util");
34
+ var _util2 = require("../../util");
35
35
 
36
36
  var _itemPathUtils = require("../../itemPathUtils");
37
37
 
@@ -61,47 +61,41 @@ const ItemDetail = function ({
61
61
  uri,
62
62
  inProposalWithID
63
63
  }) {
64
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
64
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; //const { value: itemData } = useSingleRegisterItemData(ref);
65
65
 
66
- const {
67
- value: ref
68
- } = (0, _useItemRef.default)(uri);
69
- const {
70
- value: clsConfig
71
- } = (0, _useItemClassConfig.default)((_a = ref === null || ref === void 0 ? void 0 : ref.classID) !== null && _a !== void 0 ? _a : 'NONEXISTENT_CLASS_ID'); //const { value: itemData } = useSingleRegisterItemData(ref);
72
66
 
73
67
  const {
74
68
  updateObjects,
75
69
  makeRandomID,
76
70
  performOperation,
77
- operationKey
71
+ isBusy
78
72
  } = (0, _react.useContext)(_context.DatasetContext);
79
73
  const {
80
74
  spawnTab
81
75
  } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
82
- const isBusy = operationKey !== undefined;
83
76
  const {
84
77
  jumpTo,
85
78
  subregisters,
86
79
  useRegisterItemData,
87
80
  activeChangeRequestID: globallyActiveCRID
88
81
  } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
82
+ const ref = (0, _itemPathUtils.useItemRef)(subregisters !== undefined, uri);
83
+ const itemClass = (0, _useItemClassConfig.default)((_a = ref === null || ref === void 0 ? void 0 : ref.classID) !== null && _a !== void 0 ? _a : 'NONEXISTENT_CLASS_ID');
89
84
  const {
90
85
  changeRequest: activeCR,
91
86
  canEdit: activeCRIsEditable
92
87
  } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
93
- const itemClass = clsConfig;
94
88
  const itemClassID = (_b = itemClass === null || itemClass === void 0 ? void 0 : itemClass.meta) === null || _b === void 0 ? void 0 : _b.id;
95
- const itemRef = ref !== null && ref !== void 0 ? ref : dummyRef;
89
+ const itemRef = ref !== null && ref !== void 0 ? ref : _types.DUMMY_REF;
96
90
  const {
97
91
  itemID,
98
92
  subregisterID
99
93
  } = itemRef;
100
94
  const _itemPath = `${itemClassID !== null && itemClassID !== void 0 ? itemClassID : 'NONEXISTENT_CLASS'}/${itemID}.yaml`;
101
95
  const itemPath = subregisterID ? `/subregisters/${subregisterID}/${_itemPath}` : `/${_itemPath}`;
102
- const itemRequest = {
96
+ const itemRequest = (0, _react.useMemo)(() => ({
103
97
  itemPaths: [itemPath]
104
- };
98
+ }), [itemPath]);
105
99
  const itemResponse = useRegisterItemData(itemRequest);
106
100
  const itemData = itemResponse.value[itemPath];
107
101
  const [editedClarification, setEditedClarification] = (0, _react.useState)(null); //const [ diffMode, setDiffMode ] = useState<boolean>(false);
@@ -110,33 +104,33 @@ const ItemDetail = function ({
110
104
  const diffMode = false;
111
105
  const proposal = (_c = activeCR && activeCR.items[itemPath] ? activeCR.items[itemPath] : null) !== null && _c !== void 0 ? _c : null;
112
106
 
113
- const handleClearProposal = () => performProposalOperation("draft: clear proposal", null);
107
+ const handleClearProposal = () => performProposalOperation('clearing draft proposal', null);
114
108
 
115
- const handleRetire = () => performProposalOperation("draft: propose retirement", {
109
+ const handleRetire = () => performProposalOperation('proposing retirement of an item', {
116
110
  type: 'amendment',
117
111
  amendmentType: 'retirement'
118
112
  });
119
113
 
120
- const handleInvalidate = () => performProposalOperation("draft: propose invalidation", {
114
+ const handleInvalidate = () => performProposalOperation('proposing invalidation', {
121
115
  type: 'amendment',
122
116
  amendmentType: 'invalidation'
123
117
  });
124
118
 
125
- const handleSupersedeWith = items => performProposalOperation("draft: propose supersession", {
119
+ const handleSupersedeWith = items => performProposalOperation('proposing supersession', {
126
120
  type: 'amendment',
127
121
  amendmentType: 'supersession',
128
122
  supersedingItemIDs: items
129
123
  });
130
124
 
131
125
  const handleClarify = async () => {
132
- await performProposalOperation("draft: clarify item", {
126
+ await performProposalOperation('proposing clarification', {
133
127
  type: 'clarification'
134
128
  });
135
129
  setEditedClarification(null);
136
130
  };
137
131
 
138
132
  const handleEditAddition = async () => {
139
- await performProposalOperation("draft: edit added item", {
133
+ await performProposalOperation('editing proposed addition', {
140
134
  type: 'addition'
141
135
  });
142
136
  setEditedClarification(null);
@@ -169,7 +163,7 @@ const ItemDetail = function ({
169
163
  // omits oldValue for item data payloads.
170
164
  _dangerouslySkipValidation: true
171
165
  });
172
- }, [updateObjects, activeCRIsEditable, itemPath, JSON.stringify(activeCR), JSON.stringify(itemData), JSON.stringify(editedClarification)]); // TODO: Very similar to `handleAdd()` in Browse sidebar menu; refactor?
166
+ }, [editedClarification, activeCRIsEditable, itemPath, JSON.stringify(itemData), JSON.stringify(activeCR), updateObjects]); // TODO: Very similar to `handleAdd()` in Browse sidebar menu; refactor?
173
167
 
174
168
  const handleProposeLikeThis = (0, _react.useCallback)(async function _handleProposeLikeThis() {
175
169
  if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR || !itemClass || !(0, _types.isRegisterItem)(itemData)) {
@@ -214,13 +208,13 @@ const ItemDetail = function ({
214
208
  } else {
215
209
  throw new Error("Newly created item did not pass validation (this is likely a bug in RegistryKit");
216
210
  }
217
- }, [updateObjects, activeCRIsEditable, itemPath, JSON.stringify(activeCR), JSON.stringify(itemData)]);
211
+ }, [updateObjects, activeCRIsEditable, itemPath, activeCR === null || activeCR === void 0 ? void 0 : activeCR.id, activeCR === null || activeCR === void 0 ? void 0 : activeCR.state, Object.entries((_d = activeCR === null || activeCR === void 0 ? void 0 : activeCR.items) !== null && _d !== void 0 ? _d : {}).flat().map(i => JSON.stringify(i)).toString(), itemData ? JSON.stringify((0, _util.normalizeObject)(itemData)) : itemData]);
218
212
 
219
213
  if (!itemClass) {
220
214
  return (0, _react2.jsx)(_core.NonIdealState, {
221
215
  icon: "heart-broken",
222
216
  title: "Unable to show item",
223
- description: `View for ${(_d = ref === null || ref === void 0 ? void 0 : ref.itemID) !== null && _d !== void 0 ? _d : uri} cannot be retrieved from item class configuration`
217
+ description: `View for ${(_e = ref === null || ref === void 0 ? void 0 : ref.itemID) !== null && _e !== void 0 ? _e : uri} cannot be retrieved from item class configuration`
224
218
  });
225
219
  } else if ((0, _types.isRegisterItem)(itemData)) {
226
220
  let details;
@@ -235,7 +229,7 @@ const ItemDetail = function ({
235
229
  } : undefined
236
230
  });
237
231
  } else {
238
- const DetailView = (_e = itemClass.views.detailView) !== null && _e !== void 0 ? _e : itemClass.views.editView;
232
+ const DetailView = (_f = itemClass.views.detailView) !== null && _f !== void 0 ? _f : itemClass.views.editView;
239
233
  details = (0, _react2.jsx)(DetailView, {
240
234
  itemRef: itemRef,
241
235
  itemData: itemData.data
@@ -287,13 +281,13 @@ const ItemDetail = function ({
287
281
  itemID: id,
288
282
  classID: itemClass.meta.id,
289
283
  subregisterID
290
- })) : (_f = itemData.supersededBy) !== null && _f !== void 0 ? _f : [],
284
+ })) : (_g = itemData.supersededBy) !== null && _g !== void 0 ? _g : [],
291
285
  onChange: !isBusy && activeCRIsEditable && ((proposal === null || proposal === void 0 ? void 0 : proposal.type) === 'amendment' && proposal.amendmentType === 'supersession' || !proposal && itemData.status === 'valid') ? items => items.length > 0 ? handleSupersedeWith(items.map(ref => ref.itemID)) : handleClearProposal() : undefined
292
286
  })) : null;
293
287
  const clarificationHasChanges = JSON.stringify(editedClarification) !== JSON.stringify(itemData.data);
294
288
  const clarificationAction = proposal && (proposal === null || proposal === void 0 ? void 0 : proposal.type) !== 'amendment' || activeCRIsEditable && !proposal && itemData.status === 'valid' ? (0, _react2.jsx)(FormGroup, {
295
289
  inline: true,
296
- label: `${(_g = proposal === null || proposal === void 0 ? void 0 : proposal.type) !== null && _g !== void 0 ? _g : "clarification"}: `,
290
+ label: `${(_h = proposal === null || proposal === void 0 ? void 0 : proposal.type) !== null && _h !== void 0 ? _h : "clarification"}: `,
297
291
  css: (0, _react2.css)`margin: 0;`
298
292
  }, activeCRIsEditable ? (0, _react2.jsx)(_core.ButtonGroup, null, editedClarification ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_core.Button, {
299
293
  intent: clarificationHasChanges ? "primary" : undefined,
@@ -329,22 +323,22 @@ const ItemDetail = function ({
329
323
  // we will render proposal’s title if the item appears in the change request
330
324
  // (makes sense because the user *is* technically viewing a proposal then).
331
325
 
332
- const windowTitle = activeCR && (!globallyActiveCRID || activeCR.id !== globallyActiveCRID || activeCR.items[itemPath]) ? `Proposal ${(0, _util.maybeEllipsizeString)(activeCR.justification, 20)}…` : `${(_h = itemClass.meta.title) !== null && _h !== void 0 ? _h : 'register item'} #${itemData.id}`;
333
- return (0, _react2.jsx)(_util.TabContentsWithActions, {
326
+ const windowTitle = activeCR && (!globallyActiveCRID || activeCR.id !== globallyActiveCRID || activeCR.items[itemPath]) ? `Proposal ${(0, _util2.maybeEllipsizeString)(activeCR.justification, 20)}…` : `${(_j = itemClass.meta.title) !== null && _j !== void 0 ? _j : 'register item'} #${itemData.id}`;
327
+ return (0, _react2.jsx)(_util2.TabContentsWithActions, {
334
328
  actions: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(FormGroup, {
335
329
  inline: true,
336
330
  labelInfo: (0, _react2.jsx)(_HelpTooltip.default, {
337
331
  icon: 'info-sign',
338
- content: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_core.H5, null, itemClass.meta.title), (_j = itemClass.meta.description) !== null && _j !== void 0 ? _j : "No description is provided for this register item class.", (0, _react2.jsx)(_core.UL, null, (0, _react2.jsx)("li", null, "Class ID: ", itemClassID), (0, _react2.jsx)("li", null, "Subregister ID: ", subregisterID !== null && subregisterID !== void 0 ? subregisterID : 'N/A'), (0, _react2.jsx)("li", null, "UUID: ", itemID)))
332
+ content: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_core.H5, null, itemClass.meta.title), (_k = itemClass.meta.description) !== null && _k !== void 0 ? _k : "No description is provided for this register item class.", (0, _react2.jsx)(_core.UL, null, (0, _react2.jsx)("li", null, "Class ID: ", itemClassID), (0, _react2.jsx)("li", null, "Subregister ID: ", subregisterID !== null && subregisterID !== void 0 ? subregisterID : 'N/A'), (0, _react2.jsx)("li", null, "UUID: ", itemID)))
339
333
  }),
340
334
  label: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("strong", null, itemClass.meta.title), subregisterID ? (0, _react2.jsx)("span", {
341
335
  title: "Subregister"
342
- }, " in ", (_l = (_k = subregisters === null || subregisters === void 0 ? void 0 : subregisters[subregisterID]) === null || _k === void 0 ? void 0 : _k.title) !== null && _l !== void 0 ? _l : subregisterID) : null),
336
+ }, " in ", (_m = (_l = subregisters === null || subregisters === void 0 ? void 0 : subregisters[subregisterID]) === null || _l === void 0 ? void 0 : _l.title) !== null && _m !== void 0 ? _m : subregisterID) : null),
343
337
  css: (0, _react2.css)`margin: 0; .bp4-form-content { display: flex; flex-flow: row wrap; gap: 10px; }`
344
338
  }, itemStatus, supersedingItems, clarificationAction, proposeLikeThis)),
345
339
  main: (0, _react2.jsx)(_core.Card, {
346
340
  css: (0, _react2.css)`position: absolute; inset: ${inProposalWithID ? '0' : '10px'}; overflow-y: auto;`
347
- }, (0, _react2.jsx)(_util.RegisterHelmet, null, (0, _react2.jsx)("title", null, windowTitle)), details)
341
+ }, (0, _react2.jsx)(_util2.RegisterHelmet, null, (0, _react2.jsx)("title", null, windowTitle)), details)
348
342
  });
349
343
  } else if (itemResponse.isUpdating) {
350
344
  return (0, _react2.jsx)("div", {
@@ -380,24 +374,21 @@ const ItemTitle = function ({
380
374
  var _a, _b;
381
375
 
382
376
  const {
383
- value: ref
384
- } = (0, _useItemRef.default)(uri);
385
- const {
386
- value: clsConfig
387
- } = (0, _useItemClassConfig.default)((_a = ref === null || ref === void 0 ? void 0 : ref.classID) !== null && _a !== void 0 ? _a : 'NONEXISTENT_CLASS_ID');
377
+ subregisters
378
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
379
+ const ref = (0, _itemPathUtils.useItemRef)(subregisters !== undefined, uri);
380
+ const clsConfig = (0, _useItemClassConfig.default)((_a = ref === null || ref === void 0 ? void 0 : ref.classID) !== null && _a !== void 0 ? _a : 'NONEXISTENT_CLASS_ID');
388
381
  const {
389
382
  value: itemData
390
383
  } = (0, _useSingleRegisterItemData.default)(ref);
391
-
392
- const fallbackView = () => {
384
+ const fallbackView = (0, _react.useCallback)(() => {
393
385
  var _a;
394
386
 
395
387
  return (0, _react2.jsx)(_react.default.Fragment, null, (_a = ref === null || ref === void 0 ? void 0 : ref.itemID) !== null && _a !== void 0 ? _a : uri);
396
- };
397
-
388
+ }, [uri]);
398
389
  const View = itemData ? (_b = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.views.listItemView) !== null && _b !== void 0 ? _b : fallbackView : fallbackView;
399
390
  return (0, _react2.jsx)(View, {
400
- itemRef: ref !== null && ref !== void 0 ? ref : dummyRef,
391
+ itemRef: ref !== null && ref !== void 0 ? ref : _types.DUMMY_REF,
401
392
  itemData: itemData
402
393
  });
403
394
  };
@@ -407,11 +398,6 @@ var _default = {
407
398
  title: ItemTitle
408
399
  };
409
400
  exports.default = _default;
410
- const dummyRef = {
411
- itemID: 'NONEXISTENT_ITEM_ID',
412
- classID: 'NONEXISTENT_CLASS_ID',
413
- subregisterID: undefined
414
- };
415
401
  const FormGroup = (0, _styled.default)(_core.FormGroup)`
416
402
  margin: 0;
417
403
  label.bp4-label {