@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.1
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/dist/bundles.json +1 -1
- package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{1867-lite-991b6e8255.chunk.css → 3922-lite-e22262b911.chunk.css} +2 -1
- package/dist/css/{6546-lite-991b6e8255.chunk.css → 8478-lite-e22262b911.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js +2 -0
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js +2 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-6f35e2e9bb-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-6f35e2e9bb-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js → 2548-b81ae38f1f-lite.chunk.js} +2 -2
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js.map → 2548-b81ae38f1f-lite.chunk.js.map} +1 -1
- package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js +2 -0
- package/dist/scripts/{6546-faa6f93a0e-lite.chunk.js.map → 3922-d40b0ce5aa-lite.chunk.js.map} +1 -1
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-575b07d922-lite.chunk.js} +3 -3
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-575b07d922-lite.chunk.js.map} +1 -1
- package/dist/scripts/8478-0292f02489-lite.chunk.js +2 -0
- package/dist/scripts/{1867-260ef9f8c2-lite.chunk.js.map → 8478-0292f02489-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-4cf6f3948e-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-4cf6f3948e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-fd31f9f016-lite.chunk.js} +3 -3
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-fd31f9f016-lite.chunk.js.map} +1 -1
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-724fc2e388.min.js → bundle-fcc536bb54.min.js} +3 -3
- package/dist/scripts/{bundle-724fc2e388.min.js.map → bundle-fcc536bb54.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
- package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
- package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
- package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 624-575b07d922-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-4cf6f3948e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-fd31f9f016-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-fcc536bb54.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1169-9b1c04fd85-lite.chunk.js","mappings":"8LAeM,SAAUA,EAAmBC,GACjC,IAAcC,EAAkBD,EAAxBE,KAER,OACE,gBAAC,IAAS,CACRC,IAAKF,EAAcG,GACnBC,UAAS,gFAA2E,QAAU,YAAIL,EAAMM,SAAW,aAAkB,IACrIC,QAAS,kBAAMP,EAAMQ,mBAAmBP,EAAcG,GAAGK,WAAW,GAEpE,uBAAKJ,UAAS,mBAAc,UAAY,2BACtC,uBACEK,IAAK,cAAsBT,EAAcU,MAAMC,IAAK,CAAEC,KAAM,aAC5DC,IAAKb,EAAcc,KACnBV,UAAU,oBAGd,uBAAKA,UAAU,QACZJ,EAAcc,MAIvB,C,mFC7BMC,EAAY,yBACZC,EAAY,qBAAiCD,GAM7C,SAAUE,EAA0BlB,GACxC,OACE,gBAAC,IAAU,CAACK,UAAU,QACpB,gBAAC,UAAgB,CAACK,IAAKV,EAAMmB,cAAeC,QAASH,EAAU,aAAcJ,KAAK,UAClF,gBAAC,YAAkB,KACjB,gBAAC,IAAI,CAACG,UAAWA,EAAWK,OAAO,kBAErC,gBAAC,SAAe,KACd,gBAAC,IAAI,CAACL,UAAWA,EAAWK,OAAO,eAI3C,C,kDCtBA,IAAMC,EAA+B,WAAH,OAChC,gCACE,uBAAKjB,UAAS,qFCLS,WDMvB,2BACE,uBAAKA,UAAS,0CCPsB,WDSpC,uBAAKA,UAAU,eACb,uBAAKA,UAAS,gCCVmC,UDW/C,uBAAKA,UAAS,kFAGhB,uBAAKA,UAAS,qCCdyD,aDiB1E,EAGC,SAAUkB,IACd,OACE,2BACE,uBAAKlB,UAAU,QACb,gBAACiB,EAA4B,OAG/B,uBAAKjB,UAAU,QACb,gBAACiB,EAA4B,OAG/B,2BACE,gBAACA,EAA4B,OAIrC,C,8FEpCA,SAAgB,kBAAoB,QAAQ,cAAgB,QAAQ,YAAc,QAAQ,YAAc,QAAQ,oBAAsB,S,2tBCStI,IAAME,EAAwB,mBAExBR,EAAY,yBAEZS,EAAkB,sFAkBxB,SAASC,EAAe1B,GACtB,SAAS2B,IACP,IAAMC,EAAYH,EAAkB,mBAGpC,OAAKzB,EAAM6B,KAAKd,MAAQf,EAAM8B,gBACrBF,EAAY,mCAEdA,EAAY,cACrB,CAEA,IAAMG,EAAU,WAWhB,OATA,aAAgB,WACd,GAAKA,EAAQC,QAAb,CAGA,IAAQC,EAAUF,EAAQC,QAAQE,wBAA1BD,MAERjC,EAAMmC,mBAAmBF,EAJjB,CAKV,GAAG,CAACF,EAAQC,UAGV,uBAAK3B,UAAU,UAENL,EAAM6B,KAAKO,aAOXpC,EAAM6B,KAAKd,MAAQf,EAAM8B,gBAE1B,gCACE,uBACEzB,UAAU,wBACVgC,MAAO,CAAEC,SAAUtC,EAAMuC,UAAY,GAAH,OAAMvC,EAAMuC,UAAS,MAAO,SAE9D,sBAAIC,IAAKT,EAAS1B,UAAWsB,KAC3B,gBAACc,EAAA,EAAI,CAACzB,UAAWA,EAAWK,OAAO,aAGvC,qBAAGhB,UAAU,wBAAwBqC,wBAAyB,CAAEC,OAAQ3C,EAAM6B,KAAKO,gBASpFpC,EAAM6B,KAAKd,MAASf,EAAM8B,gBAI7B,gCACE,uBACEzB,UAAU,wBACVgC,MAAO,CAAEC,SAAUtC,EAAMuC,UAAY,GAAH,OAAMvC,EAAMuC,UAAS,MAAO,SAE9D,sBAAIC,IAAKT,EAAS1B,UAAWsB,KAA2B3B,EAAM6B,KAAKd,OAErE,qBAAGV,UAAU,wBAAwBqC,wBAAyB,CAAEC,OAAQ3C,EAAM6B,KAAKO,gBAV9E,qBAAG/B,UAAU,MAAMqC,wBAAyB,CAAEC,OAAQ3C,EAAM6B,KAAKO,eA3BjE,qBAAG/B,UAAU,MAAMqC,wBAAyB,CAAEC,OAAQ3C,EAAM6B,KAAKd,QA2ClF,CAQA,SAAS6B,EAAkB5C,GACzB,IAyBQ6C,EACAC,EAOAC,EAjCFC,EAA8E,CAAC,EAEjFlB,GAAkB,EAuCtB,SAASmB,EAAkBpB,GACzB,IAAMxB,EAAY,OAElB,OAAKwB,EAAKd,MAASe,EAGZzB,EAFEA,EAAY,SAAW,qBAGlC,CAEA,OA9CAL,EAAMkD,QAAQC,eAAeC,SAAQ,SAAAC,GACnC,IAAMC,EAAWD,EAAeE,EAAA,QAAqBC,KAAI,SAAAC,GAAE,OAAIA,EAAG1C,IAAI,IAAE2C,KAAK,OAEzEV,EAAgBM,GAClBD,EAAeE,EAAA,QAAqBH,SAAQ,SAAAvB,GACrCmB,EAAgBM,GAAUK,MAAK,SAAAC,GAAC,OAAIA,EAAE7C,OAASc,EAAKd,IAAI,MAC3DiC,EAAgBM,GAAUO,KAAKhC,GAG3BA,EAAKd,OACPe,GAAkB,GAExB,IAKFkB,EAAgBM,GAAYD,EAAeE,EAAA,OAC7C,IA6BE,gCACE,sBAAIlD,UAAS,UAAKoB,EAAe,kDA3B7BoB,EAAkB7C,EAAMkD,QAAQK,EAAA,YAAyBxC,KACzD+B,EAAiB9C,EAAMkD,QAAQK,EAAA,WAAwBxC,MAOvDgC,EAA0BF,EAAgBiB,MAAMtC,IAG7C,GAAP,OAAUuB,EAAwB,GAAE,cAAMA,EAAwB,GAAE,cAAMD,GAErE,GAAP,OAAUD,EAAe,cAAMC,KAkB7B,uBAAKzC,UAAS,eAAU,sBACrB0D,OAAOC,KAAKhB,GAAiBQ,KAAI,SAACF,EAAUW,GAC3C,OACE,uBAAK9D,IAAK8D,EAAG5D,UAAW,eACrBiD,GAAY,sBAAIjD,UAAU,yBAAyBiD,GACpD,sBAAIjD,UAAU,iBACX2C,EAAgBM,GAAUE,KAAI,SAAA3B,GAAI,OACjC,sBAAI1B,IAAK0B,EAAKzB,GAAIC,UAAW4C,EAAkBpB,IAC7C,gBAACH,EAAc,CACbG,KAAMA,EACNU,UAAWvC,EAAMuC,UACjBJ,mBAAoBnC,EAAMmC,mBAC1BL,gBAAiBA,IAEhB,KAKf,KAIR,CAWM,SAAUoC,EAAkBlE,G,UACqB,G,EAAjB,WAAe,G,EAAE,E,o4BAA7CuC,EAAS,KAAE4B,EAAY,KAE/B,SAAShC,EAAmBF,GAW1BkC,GAAa,SAAAC,GACX,OAAIA,GAAcnC,EACTmC,EAEFnC,CACT,GACF,CAUA,IAAMoC,EAAqB,WAAc,WACvC,IAAMC,EAA6B,CAAC,EAgDpC,OA9CAtE,EAAMuE,gBAAgBnB,SAAQ,SAAAF,GAC5B,IAAIsB,EAA8C,KAC9CC,EAAgD,KAC9CC,EAA2C,GAC3CC,EAA4C,GAElDzB,EAAQE,SAAQ,SAAAwB,GACd,OAAQA,EAAcC,MACpB,KAAKtB,EAAA,UACHiB,EAAUI,EACV,MACF,KAAKrB,EAAA,WACHkB,EAAWG,EACX,MACF,KAAKrB,EAAA,OACHmB,EAAMb,KAAKe,GACX,MACF,KAAKrB,EAAA,OACHoB,EAAOd,KAAKe,GAKlB,IAEA,IAAMzE,EAAM,GAAH,OAAMqE,EAAQpE,GAAE,YAAIqE,EAASrE,IAElCkE,EAAOnE,GACTmE,EAAOnE,GAAKgD,eAAeU,KAAK,EAAD,KAC5BN,EAAA,OAAsBmB,GACtBnB,EAAA,OAAsBoB,IAM3BL,EAAOnE,GAAO,EAAH,OACRoD,EAAA,UAAyBiB,GACzBjB,EAAA,WAA0BkB,GAAQ,iBACnB,CAAC,EAAD,KACblB,EAAA,OAAsBmB,GACtBnB,EAAA,OAAsBoB,IAG7B,IAEOL,CACT,GAAG,CAACtE,EAAMuE,kBAEV,OAAKvE,EAAMuE,iBAGe,QAArB,EAAAvE,EAAMuE,uBAAe,eAAEO,QAK1B,sBAAIzE,UAAU,qBACX0D,OAAOC,KAAKK,GAAoBb,KAAI,SAACuB,EAAYd,GAAC,OACjD,sBAAI9D,IAAG,kBAAa8D,GAAK5D,UAAW,iBAClC,gBAACuC,EAAiB,CAChBM,QAASmB,EAAmBU,GAC5B5C,mBAAoBA,EACpBI,UAAWA,IAEV,KAZF,gBAACrB,EAAA,EAAyB,CAACC,cAAenB,EAAMmB,gBAHhD,gBAACI,EAAA,EAAsB,KAmBlC,C,kFChSM,SAAUyD,EAAkBhF,G,UAChC,OACE,gBAAC,KAAa,CACZiF,YAAoC,QAAxB,EAAAjF,EAAMkF,0BAAkB,eAAE9E,IAAKJ,EAAMmF,YAAYC,oBAAsB,KACnFC,eAAe,gBACfC,eAAgB,SAAAC,G,QACd,OACE,gBAAC,IAAkB,iBACbA,EAAM,CACVjF,UAAsC,QAA5B,EAAwB,QAAxB,EAAAN,EAAMkF,0BAAkB,eAAE9E,UAAE,eAAEK,cAAe8E,EAAOrF,KAAKE,GAAGK,WACtED,mBAAoBR,EAAMQ,qBAGhC,EACAgF,wBAAyB,kBAAM,gBAAC,IAAc,KAAG,EACjDC,eAAgB,CAA8B,QAA5B,EAAwB,QAAxB,EAAAzF,EAAMkF,0BAAkB,eAAE9E,UAAE,eAAEK,WAAYT,EAAMQ,oBAClEkF,kBAAmB1F,EAAM0F,mBAG/B,C,6DCzBaC,EAAiB,QAAW,YAA+C,QAApCC,SAC5CC,EAAa,0FAAH,YAD0C,IAAG,KAAE,EACsD,YAAI,gBAEzH,OACE,uBAAKxF,UAAU,QACb,wBAAMA,UAAWwF,GAAU,KAGjC,G,0FChBA,IAAYtC,E,iBAAZ,SAAYA,GACV,8BACA,gCACA,wBACA,uBACD,CALD,CAAYA,IAAAA,EAAc,I,2RCkB1B,IAAMvC,EAAY,yBACZC,EAAY6E,EAAA,mBAAiC9E,GAW7C,SAAU+E,EAA+B/F,GAC7C,I,IAAA,EAOIA,EAAMmF,YANRa,EAAS,EAATA,UACAC,EAAgB,EAAhBA,iBACAC,EAAoB,EAApBA,qBACA3B,EAAe,EAAfA,gBACA4B,EAAgB,EAAhBA,iBACAC,EAA0B,EAA1BA,2BAGkF,G,EAA9B,a,EAA8B,E,o4BAA5ElB,EAAkB,KAAEmB,EAAqB,KAE3CC,GAAS,SA6Cf,OA3CA,aAAgB,WACTN,IAGAd,GACHmB,EAAsBJ,QAAAA,EAAoBM,EAAA,QAAkBL,IAChE,GAAG,CAAED,aAAgB,EAAhBA,EAAkB7F,GAAI4F,IAqCtBhG,EAAMwG,wBAA2BJ,EAIpC,2BACEhG,GAAIqG,EAAA,kBACJjE,IAAK,SAAAkE,G,MACFA,IAAsB,QAAhB,EAAA1G,EAAM2G,kBAAU,eAAE3E,UAAYhC,EAAM2G,WAAW3E,QAAQ4E,IAAIH,EAAA,kBAAgCC,EACpG,EACArG,UAAU,qBAEV,sBAAIA,UAAU,iBACZ,gBAACoC,EAAA,EAAI,CAACzB,UAAWA,EAAWK,OAAO,aAErC,uBAAKhB,UAAU,QACb,gBAAC2E,EAAA,EAAiB,CAChBG,YAAanF,EAAMmF,YACnBD,mBAAoBA,EACpB1E,mBArDR,SAA4BqG,G,QACpBC,EAAgBZ,EAAqBvC,MAAK,SAAAoD,GAAC,OAAIA,EAAE3G,GAAGK,aAAeoG,CAAY,KAEhFC,aAAa,EAAbA,EAAe1G,MAGM,QAAtB,EAAA8E,aAAkB,EAAlBA,EAAoB9E,UAAE,eAAEK,eAAgC,QAAjB,EAAAqG,aAAa,EAAbA,EAAe1G,UAAE,eAAEK,cAG9D4F,EAAsBS,GAuBtBX,EAAiBW,GAfC,WAChBE,EAAA,gBAA8B,CAC5B5G,GAAI0G,EAAc1G,GAClBW,KAAM+F,EAAc1G,GACpBgC,YAAa0E,EAAc1E,YAC3B6E,QAASjH,EAAMkH,MAAM9G,GACrB+G,UAAWnH,EAAMkH,MAAMnG,MACtB,CACDqG,OAAQ,kBACRC,WAAY,YACZC,WAAY,gBACZC,SAAU,eAEd,IAnBgB,WAEdlB,EAAsBnB,GACtBoB,EAAOkB,MAAMvG,EAAU,gBACzB,IAkBF,KAwBI,uBAAKZ,UAAU,oCACb,gBAAC,KAAU,CAACoH,YAAU,EAACC,cAAe1H,EAAM2H,QAC1C,uBAAKtH,UAAU,OACX2F,EAGE,gBAAC9B,EAAA,EAAiB,CAChBK,gBAAiBA,EACjBpD,cAAenB,EAAMmB,gBAJvB,gBAACI,EAAA,EAAsB,UAzB5B,gCAqCX,C,gUC5HA,SAAgB,KAAO,QAAQ,YAAc,SC0C7C,IAAM,EAAY,cAyBZ,SAAUqG,EAAW5H,G,oBACnB6H,GAAgB,SAEdC,GAAmB,EAAAC,EAAA,KAAnBD,eACAE,EAAeC,EAAA,mBAA6BjI,EAAMkH,OAAlDc,WAER,GAOI,EAAAE,EAAA,GAA0BlI,EAAMmI,mBANlCC,EAAuB,EAAvBA,wBACAC,EAA0B,EAA1BA,2BACAC,EAAY,EAAZA,aACAC,EAAe,EAAfA,gBACAC,EAAuB,EAAvBA,wBACAC,GAAuB,EAAvBA,wBAGIC,IAAY,QAAc1I,EAAMkH,QAAUlH,EAAM2I,cAAcC,cAEpE,IAAwC,EAAAC,EAAA,GAAmBH,IAAnD/B,GAAU,GAAVA,WAAYmC,GAAe,GAAfA,gBACdC,GAAQD,GAAgBtF,KAAI,SAAAwF,G,MAChC,MAAO,CACL5I,GAAI4I,EAAI5I,GACRW,KAAM,sBACJiI,EAAI5I,GACJ,CACE6I,MAAOjJ,EAAMiJ,MACbC,aAAclJ,EAAMkJ,aACpBC,UAAgC,QAArB,EAAAnJ,EAAMkH,MAAMiC,iBAAS,eAAEjJ,OAI1C,IAEMkJ,GAAanB,EAAA,sBAAgCjI,EAAMkH,OACnDmC,GAAuBvB,EAAewB,EAAA,sBAE5C,EAAAC,EAAA,GAAgC,CAC9BC,YAAanB,EACbS,gBAAAA,GACAR,aAAAA,EACAC,gBAAAA,KAGF,EAAAkB,EAAA,GAAyBX,GAAiBR,GAO1C,IAAMoB,GAAkC,UAAa,GAE/CC,IAAa,UAEnB,SAASC,K,YACPF,GAAgC1H,UAA4C,QAAjC,EAAwB,QAAxB,EAAA6F,aAAa,EAAbA,EAAegC,iBAAS,eAAE7H,eAAO,eAAE8H,YAC7C,QAAjC,EAAwB,QAAxB,EAAAjC,aAAa,EAAbA,EAAegC,iBAAS,eAAE7H,eAAO,SAAE+H,OACrC,CAEA,SAASC,K,QACFN,GAAgC1H,UAGJ,QAAjC,EAAwB,QAAxB,EAAA6F,aAAa,EAAbA,EAAegC,iBAAS,eAAE7H,eAAO,SAAEiI,OACrC,CAUA,IAAMC,GAA+C,uBAAvBrC,EAAcsC,MAAiCnK,EAAM2I,cAAcyB,oBAEjG,OACE,gBAAC,aAAiC,CAACC,MAAO,GACxC,uBAAKhK,UAAS,4CAAuCL,EAAMsK,8BAAgC,MAAQ,KACjG,wBAAMjK,UAAS,UAAK,OAAW,YAZ/BL,EAAMsK,+BAAiC9B,EAClC,GAAP,OAAU,cAAkB,UAE1BxI,EAAMsK,gCAAkC9B,EACnC,YADT,IAUM,gBAAC+B,EAAA,EAAiB,CAChBC,aAAcxK,EAAMkH,MAAMuD,cAC1BC,WAAY1K,EAAM0K,WAClBC,SAAU3K,EAAMkH,MAAM9G,GACtBwK,aAAcC,EAAA,QACdC,qBAAsB9K,EAAM8K,uBAG7B1B,IAAc,gBAAC2B,EAAA,EAAc,CAACC,OAAQhL,EAAMkH,MAAM8D,OAAQ3B,qBAAsBA,KAEjF,2BACEjJ,GAAIqG,EAAA,QACJpG,UAAS,eAAU4K,EAAA,0BACnBzI,IAAK,SAAAkE,GAASA,IAAMC,cAAU,EAAVA,GAAY3E,UAAY2E,GAAW3E,QAAQ4E,IAAIH,EAAA,QAAsBC,EAAK,GAE7FsB,GACC,gBAACkD,EAAA,EAAoB,CACnB/K,IAAKH,EAAMkH,MAAM9G,GACjBuK,SAAU3K,EAAMkH,MAAM9G,GACtBwK,aAAc5K,EAAMkH,MAAM8D,OAC1BG,QAASnL,EAAMmL,QACfC,QAAqB,QAAZ,EAAApL,EAAMqL,cAAM,eAAED,QACvBE,UAAuB,QAAZ,EAAAtL,EAAMqL,cAAM,eAAEC,UACzBC,SAAsB,QAAZ,EAAAvL,EAAMqL,cAAM,eAAEE,SACxBC,YAAyB,QAAZ,EAAAxL,EAAMqL,cAAM,eAAEI,IAC3BC,UAA0B,QAAf,EAAY,QAAZ,EAAA1L,EAAMqL,cAAM,eAAEM,SAAC,QAAgB,QAAZ,EAAA3L,EAAMqL,cAAM,eAAEK,UAC5CE,QAAqB,QAAZ,EAAA5L,EAAMqL,cAAM,eAAEO,QACvBzB,KAAK,UACL5C,SAAS,cAGb,uBAAKlH,UAAW6J,GAAwB,GAAK,UAC3C,gBAAC2B,EAAA,EAAiB,CAChB3E,MAAOlH,EAAMkH,MACb4E,QAAS,CACPC,YAAa,YACbC,OAAQ,oBAEVnH,KAA6B,uBAAvBgD,EAAcsC,KAAgC,MAAQ,aAKlE,gBAAC8B,EAAA,EAAuB,CACtBC,MAAOlM,EAAMkH,MACbwD,WAAY1K,EAAM0K,WAClByB,UAAWnM,EAAMmM,UACjBC,iBAAkB,SAAAC,GAAM,OAAI1C,GAAWyC,iBAAiBC,EAAQrM,EAAMqL,OAAOI,IAAI,EACjF9C,cAAe3I,EAAM2I,cACrBwC,QAASnL,EAAMmL,UAGhBzC,GACC,gBAAC4D,EAAA,EAAgB,CACfpF,MAAOlH,EAAMkH,MACbqF,iBAAkBvM,EAAMuM,iBACxBC,aAAc,SAACC,GAAgB,MAAC,OAA+B,QAA/B,EAAA5E,EAAcgC,UAAU7H,eAAO,eAAE0K,YAAYD,EAAK,EAClFE,cAAehD,GAAWgD,cAC1BC,sBAAuB5M,EAAM2I,cAAcyB,oBAC3CxB,cAAeF,KAGjB,gBAAC,IAA2B,CAC1BxB,MAAOlH,EAAMkH,MACbP,WAAYA,GACZiD,wBAAyBA,GACzBI,sBAAuBA,GACvB2C,cAAehD,GAAWgD,cAC1BC,sBAAuB5M,EAAM2I,cAAcyB,sBAI/C,gBAACrE,EAA8B,CAC7BY,WAAYA,GACZO,MAAOlH,EAAMkH,MACbS,OAAQ,IACRxC,YAAanF,EAAMmF,YACnBhE,cAAe0L,EAAA,+BACfrG,uBAAwBxG,EAAM2I,cAAcnC,yBAG9C,gBAACsG,EAAA,EAAiB,CAChBnG,WAAYA,GACZO,MAAOlH,EAAMkH,MACb6F,iBAAkB/M,EAAM2I,cAAcqE,qBACtCC,YAAajN,EAAMiN,YACnBC,WACEvD,GAAWwD,mBAAmBnN,EAAMkH,MAAM9G,GAAIJ,EAAMmL,QAASnL,EAAM2I,cAAcqE,sBAEnFI,cAAe,CAAEnG,QAASjH,EAAMkH,MAAM9G,GAAI+G,UAAWnH,EAAMkH,MAAMnG,MACjEsM,6BAA8BR,EAAA,iCAGhC,gBAACS,EAAA,EAAoB,CACnB3G,WAAYA,GACZO,MAAOlH,EAAMkH,MACbgC,aAAclJ,EAAMkJ,aACpB+D,YAAajN,EAAMiN,YACnBG,cAAe,CAAEnG,QAASjH,EAAMkH,MAAM9G,GAAI+G,UAAWnH,EAAMkH,MAAMnG,MACjEwM,oBAAqBvN,EAAM2I,cAAc4E,oBACzC7C,WAAY1K,EAAM0K,WAClB8C,aAAcxN,EAAMwN,aACpBC,aAAczN,EAAMyN,aACpBC,SAAU1N,EAAM0N,WAGlB,gBAACC,EAAA,EAAa,CACZzG,MAAOlH,EAAMkH,MACbP,WAAYA,GACZsC,MAAOjJ,EAAMiJ,MACb2E,aAAc5N,EAAM2I,cAAciF,aAClClD,WAAY1K,EAAM0K,WAClByB,UAAWnM,EAAMmM,UACjBc,YAAajN,EAAMiN,YACnBO,aAAcxN,EAAMwN,aACpBC,aAAczN,EAAMyN,aACpBL,cAAe,CAAEnG,QAASjH,EAAMkH,MAAM9G,GAAI+G,UAAWnH,EAAMkH,MAAMnG,MACjE2M,SAAU1N,EAAM0N,WAIjBhF,IACC,gBAAC,IAA2B,CAC1BxB,MAAOlH,EAAMkH,MACbP,WAAYA,GACZiD,wBAAyBA,GACzBI,sBAAuBA,GACvB2C,cAAehD,GAAWgD,cAC1BC,sBAAuB5M,EAAM2I,cAAcyB,oBAC3CyD,aAAW,IAIf,gBAACC,EAAA,EAAa,CACZC,aAAc/N,EAAMkH,MACpBP,WAAYA,GACZ+D,WAAY1K,EAAM0K,WAClBsD,cAAehO,EAAMgO,cACrBC,YAAajO,EAAMiO,YACnBT,aAAcxN,EAAMwN,aACpBC,aAAczN,EAAMyN,aACpBS,gBAAiB,SAACC,EAAGC,GAAI,OAAKC,EAAA,aAA8BF,EAAG,OAAF,wBACxDC,GAAI,CACPhD,QAASpL,EAAMqL,OAAOD,QACtBE,UAAWtL,EAAMqL,OAAOC,UACxBC,SAAUvL,EAAMqL,OAAOE,SACvBJ,QAASnL,EAAMmL,QACfK,YAAaxL,EAAMqL,OAAOI,MAC1B,EACFU,UAAWnM,EAAMmM,UACjBX,YAAaxL,EAAMqL,OAAOI,IAC1BiC,SAAU1N,EAAM0N,YAIpB,gBAACY,EAAA,EAAwB,CACvBC,WAAY/F,EACZgG,cAAe/F,GACfM,MAAOA,GACP0F,SAAUrG,EACVG,gBAAiBA,EACjB6E,cAAe,CAAEnG,QAASjH,EAAMkH,MAAM9G,GAAI+G,UAAWnH,EAAMkH,MAAMnG,MACjE2N,WAAY1O,EAAMsK,iCAM5B,C,mCC1TA,SAAgB,kBAAoB,QAAQ,cAAgB,QAAQ,YAAc,QAAQ,YAAc,QAAQ,QAAU,QAAQ,oBAAsB,QAAQ,SAAW,QAAQ,IAAM,QAAQ,MAAQ,QAAQ,OAAS,QAAQ,SAAW,Q","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumLinksV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumsWidget.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumLinksWithScrollbarV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/components/play-page/play-page.scss","file:///app/packages/projects/lite/src/shared/views/play/v2/components/play-page/PlayPageV2.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"i4D3h\",\"curriculumSet\":\"WCdf9\",\"areaLeafSet\":\"o8H8s\",\"closeButton\":\"McsPs\",\"leafDescriptionOnly\":\"xmEEo\"};","import React from 'react';\n\nimport { CurriculumLinksEmptyState } from 'libs/shared/components/curriculum-links/CurriculumLinksEmptyState';\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n if (!areaAndLeafSets[areaText].find(l => l.name === leaf.name)) {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n }\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksV2Props {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksV2(props: CurriculumLinksV2Props): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n\n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\ninterface CurriculumsWidgetProps {\n curriculums: CurriculumData;\n selectedCurriculum: Presentation;\n onChangeCurriculum: (curriculumId: string) => void;\n noNegativePadding?: boolean;\n}\n\nexport function CurriculumsWidget(props: CurriculumsWidgetProps): JSX.Element {\n return (\n <DynamicWidget\n collection={props.selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={_props => {\n return (\n <CurriculumLinkItem\n {..._props}\n selected={props.selectedCurriculum?.id?.toString() === _props.data.id.toString()}\n onChangeCurriculum={props.onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[ props.selectedCurriculum?.id?.toString(), props.onChangeCurriculum ]}\n noNegativePadding={props.noNegativePadding}\n />\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { CurriculumLinksV2 } from './CurriculumLinksV2';\nimport { CurriculumsWidget } from './CurriculumsWidget';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarV2Props {\n video: Video;\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n canViewCurriculumLinks: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function CurriculumLinksWithScrollbarV2(props: CurriculumLinksWithScrollbarV2Props): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum,\n customerHasCurriculumLinks\n } = props.curriculums;\n\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(activeCurriculum ?? ArrayHelper.first(availableCurriculums));\n }, [ activeCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(getPhrase('updateFailed'));\n };\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n if (!props.canViewCurriculumLinks || !customerHasCurriculumLinks)\n return <></>;\n \n return (\n <section\n id={PlayPageAnchor.CurriculumLinks}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.CurriculumLinks, el);\n }}\n className='play-page-section'\n >\n <h2 className='h4 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <div className='mb-2'>\n <CurriculumsWidget\n curriculums={props.curriculums}\n selectedCurriculum={selectedCurriculum}\n onChangeCurriculum={onChangeCurriculum}\n />\n </div>\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n {!hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinksV2\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n />\n )}\n </div>\n </Scrollbars>\n </div>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"xSI0l\",\"expandedToc\":\"j5FCv\"};","import React from 'react';\n\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { CurriculumLinksWithScrollbarV2 } from 'libs/shared/components/play-page-v2/curriculum-links/CurriculumLinksWithScrollbarV2';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, CurriculumData, FavouriteFunc, InteractiveMetadata, PointOfInterest, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getAppLinks } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\n\nimport styles from './play-page.scss';\n\nconst namespace = 'shared.play';\n\ninterface PlayPageV2Props {\n video: Video;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n}\n\nexport function PlayPageV2(props: PlayPageV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.video.resources?.data\n }\n )\n };\n });\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const appLinkFns = getAppLinks();\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return `${styles.expandedToc} col-9`;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row' : ''}`}>\n <main className={`${styles.main} ${getMainClassName()}`}>\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n )}\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <CurriculumLinksWithScrollbarV2\n headingRef={headingRef}\n video={props.video}\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n canViewCurriculumLinks={props.featureAccess.canViewCurriculumLinks}\n />\n \n <PlayPageResources\n headingRef={headingRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n appLinkFns.getResourceAppLink(props.video.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n />\n\n <PlayPageInteractives\n headingRef={headingRef}\n video={props.video}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n video={props.video}\n headingRef={headingRef}\n clips={props.clips}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n />\n )}\n\n <RelatedVideos\n currentVideo={props.video}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n isPlugin={props.isPlugin}\n />\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","namespace","getPhrase","CurriculumLinksEmptyState","emptyStateUrl","altText","phrase","PartialCurriculumLinkSection","PartialCurriculumLinks","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","Text","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","CurriculumType","map","ca","join","find","l","push","match","Object","keys","i","CurriculumLinksV2","setCodeWidth","currentVal","curriculumLinkSets","newSet","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","length","linkSetKey","CurriculumsWidget","collection","selectedCurriculum","curriculums","nonEmptyCurriculums","childClassName","childComponent","_props","partialLoadingComponent","widgetDataDeps","noNegativePadding","PartialTagItem","tagClass","classNames","LanguageService","CurriculumLinksWithScrollbarV2","hasLoaded","activeCurriculum","availableCurriculums","updateCurriculum","customerHasCurriculumLinks","setSelectedCurriculum","alerts","ArrayHelper","canViewCurriculumLinks","PlayPageAnchor","el","headingRef","set","curriculumId","newCurriculum","c","AnalyticsHelper","videoId","video","videoName","entity","actionType","descriptor","location","error","autoHeight","autoHeightMax","height","PlayPageV2","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsId","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","featureAccess","canViewGlance","useSectionHeadings","headingElements","items","ele","clips","interactives","resources","isArchived","hasStudentExperience","PermissionName","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","shouldPlayOnExitImmersiveReader","appLinkFns","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","showPlayerPlaceholder","mode","canViewPublicLayout","value","shouldShowSideTableOfContents","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","t","endTime","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlanceV2","pointsOfInterest","setStartTime","time","currentTime","getTagAppLink","suppressInteractivity","ImageUrls","PlayPageResources","canViewResources","canViewResourceItems","imageCdnUrl","getAppLink","getResourceAppLink","analyticsData","resourceThumbnailFallbackUrl","PlayPageInteractives","canViewInteractives","setFavourite","canFavourite","isPlugin","PlayPageClips","canViewClips","showHeading","RelatedVideos","currentVideo","relatedVideos","currentUser","getVideoAppLink","v","opts","VideoAppLinkHelper","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 1379-
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1379],{91379:(t,e,r)=>{r.r(e),r.d(e,{PlayViewContainer:()=>u});var n=r(32735),o=r(37802);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(){a=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",l=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,a=Object.create(i.prototype),c=new F(n||[]);return o(a,"_invoke",{value:j(t,r,c)}),a}function p(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var y="suspendedStart",v="suspendedYield",d="executing",g="completed",m={};function w(){}function b(){}function L(){}var x={};h(x,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(V([])));_&&_!==r&&n.call(_,u)&&(x=_);var k=L.prototype=w.prototype=Object.create(x);function P(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function O(t,e){function r(o,a,c,u){var l=p(t[o],t,a);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==i(h)&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,c,u)}),(function(t){r("throw",t,c,u)})):e.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return r("throw",t,c,u)}))}u(l.arg)}var a;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return a=a?a.then(o,o):o()}})}function j(e,r,n){var o=y;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===g){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=S(c,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var l=p(e,r,n);if("normal"===l.type){if(o=n.done?g:v,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=g,n.method="throw",n.arg=l.arg)}}}function S(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,S(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=p(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,m;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,m):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function G(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function N(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function F(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(G,this),this.reset(!0)}function V(e){if(e||""===e){var r=e[u];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return a.next=a}}throw new TypeError(i(e)+" is not iterable")}return b.prototype=L,o(k,"constructor",{value:L,configurable:!0}),o(L,"constructor",{value:b,configurable:!0}),b.displayName=h(L,f,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,L):(t.__proto__=L,h(t,f,"GeneratorFunction")),t.prototype=Object.create(k),t},e.awrap=function(t){return{__await:t}},P(O.prototype),h(O.prototype,l,(function(){return this})),e.AsyncIterator=O,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new O(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},P(k),h(k,f,"Generator"),h(k,u,(function(){return this})),h(k,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=V,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(N),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),m},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),N(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;N(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:V(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),m}},e}var c=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))};function u(t){var e=this,i=(0,o.r)(null),u=i.hasPlayPageV2,l=i.isLoadingSettings,f=n.useMemo((function(){if(!l)return n.lazy((function(){return c(e,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u?Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(3767),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(6450),r.e(322),r.e(
|
|
3
|
-
//# sourceMappingURL=1379-
|
|
1
|
+
/*! For license information please see 1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1379],{91379:(t,e,r)=>{r.r(e),r.d(e,{PlayViewContainer:()=>u});var n=r(32735),o=r(37802);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(){a=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",l=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,a=Object.create(i.prototype),c=new F(n||[]);return o(a,"_invoke",{value:j(t,r,c)}),a}function p(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var y="suspendedStart",v="suspendedYield",d="executing",g="completed",m={};function w(){}function b(){}function L(){}var x={};h(x,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(V([])));_&&_!==r&&n.call(_,u)&&(x=_);var k=L.prototype=w.prototype=Object.create(x);function P(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function O(t,e){function r(o,a,c,u){var l=p(t[o],t,a);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==i(h)&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,c,u)}),(function(t){r("throw",t,c,u)})):e.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return r("throw",t,c,u)}))}u(l.arg)}var a;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return a=a?a.then(o,o):o()}})}function j(e,r,n){var o=y;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===g){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=S(c,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var l=p(e,r,n);if("normal"===l.type){if(o=n.done?g:v,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=g,n.method="throw",n.arg=l.arg)}}}function S(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,S(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=p(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,m;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,m):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function G(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function N(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function F(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(G,this),this.reset(!0)}function V(e){if(e||""===e){var r=e[u];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return a.next=a}}throw new TypeError(i(e)+" is not iterable")}return b.prototype=L,o(k,"constructor",{value:L,configurable:!0}),o(L,"constructor",{value:b,configurable:!0}),b.displayName=h(L,f,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,L):(t.__proto__=L,h(t,f,"GeneratorFunction")),t.prototype=Object.create(k),t},e.awrap=function(t){return{__await:t}},P(O.prototype),h(O.prototype,l,(function(){return this})),e.AsyncIterator=O,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new O(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},P(k),h(k,f,"Generator"),h(k,u,(function(){return this})),h(k,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=V,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(N),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),m},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),N(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;N(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:V(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),m}},e}var c=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))};function u(t){var e=this,i=(0,o.r)(null),u=i.hasPlayPageV2,l=i.isLoadingSettings,f=n.useMemo((function(){if(!l)return n.lazy((function(){return c(e,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u?Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(3767),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(6450),r.e(322),r.e(1076),r.e(1169),r.e(2548)]).then(r.bind(r,75085)):Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(322),r.e(184),r.e(9139),r.e(9808)]).then(r.bind(r,69630));case 2:return e=t.sent,t.abrupt("return",{default:"PlayViewV2"in e?e.PlayViewV2:e.PlayView});case 4:case"end":return t.stop()}}),t)})))}))}),[l]);return l?n.createElement(n.Fragment,null):n.createElement(n.Suspense,{fallback:n.createElement(n.Fragment,null)},n.createElement(f,Object.assign({},t)))}}}]);
|
|
3
|
+
//# sourceMappingURL=1379-6f35e2e9bb-lite.chunk.js.map
|
package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-6f35e2e9bb-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1379-
|
|
1
|
+
{"version":3,"file":"scripts/1379-6f35e2e9bb-lite.chunk.js","mappings":";miOAUM,SAAUA,EAAkBC,GAAoB,WACpD,GAA6C,OAAY,MAAjDC,EAAa,EAAbA,cAAeC,EAAiB,EAAjBA,kBAEjBC,EAAO,WAAc,WACzB,IAAID,EAGJ,OAAO,QAAW,kBAAW,gHACZ,OADY,SACLD,EAAgB,iMAA4B,4KAAqB,OAA3E,OAANG,EAAS,EAAH,uBACJ,CACNC,QAAS,eAAgBD,EACvBA,EAAOE,WACPF,EAAOG,WACV,0CACF,GACH,GAAG,CAACL,IAEJ,OAAIA,EACK,iCAGP,gBAAC,WAAc,CAACM,SAAU,kCACxB,gBAACL,EAAI,iBAAKH,IAGhB","sources":["file:///app/packages/projects/lite/src/shared/views/play/PlayViewContainer.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nexport interface PlayViewProps {\n id: string;\n queryParams?: PlayViewQueryParams;\n}\n\nexport function PlayViewContainer(props: PlayViewProps): JSX.Element {\n const { hasPlayPageV2, isLoadingSettings } = useSettings(null);\n\n const View = React.useMemo(() => {\n if (isLoadingSettings)\n return;\n\n return React.lazy(async () => {\n const module = await (hasPlayPageV2 ? import('./v2/PlayViewV2') : import('./PlayView'));\n return ({\n default: 'PlayViewV2' in module ?\n module.PlayViewV2 :\n module.PlayView\n });\n });\n }, [isLoadingSettings]);\n\n if (isLoadingSettings)\n return <></>;\n\n return (\n <React.Suspense fallback={<></>}>\n <View {...props} />\n </React.Suspense>\n );\n}"],"names":["PlayViewContainer","props","hasPlayPageV2","isLoadingSettings","View","module","default","PlayViewV2","PlayView","fallback"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2548],{94644:(e,a,t)=>{t.d(a,{r:()=>u});var i=t(50242),n=t(81886),r=t(67058),d=t(14553),s=t(49267),o=t(49075),c={notFound:r.d,forbidden:{rating:d.q,yearLevel:d.q,region:s.a,privacy:d.q},badRequest:o._};function u(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var d=Object.assign(Object.assign({},c),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==i.o.NotFound?r!==i.o.Forbidden?t.badRequest||n.Q.Ry.throw(new d.badRequest):t.forbidden||n.Q.Ry.throw(new d.forbidden.privacy):t.notFound||n.Q.Ry.throw(new d.notFound))}}},91286:(e,a,t)=>{t.d(a,{v:()=>d});var i=t(32735),n=t(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function d(e,a,t){var d=Array.isArray(e)?e:[e];(0,i.useEffect)((function(){d.forEach((function(e){(0,n.r)(e.statusCode,a,t)}))}),[r(d),a,t])}},75085:(e,a,t)=>{t.r(a),t.d(a,{PlayViewV2:()=>D});var i=t(32735),n=t(50242),r=t(81886),d=t(23481),s=t(20354),o=t(28400),c=t(65858),u=t(78417),l=t(16714),v=t(67058),f=t(61990),h=t(33803),p=t(89454),g=t(43012),m=t(39151),y=t(1666),b=t(20768),F=t(98064),C=t(31949),P=t(1575),w=t(26304),I=t(91286),R=t(22902),B=t(79612),q=t(76753),A=t(14070),V=t(97291),k=t(51855),x=t(82817),L=t(7179),O=t(49948),E=t(36873),M=t(27638),S=t(86698),_=t(35014),G=t(97816),N=t(33192),Q=t(81812),T=t(61169),U=d.T.encloseNamespace("shared.play"),j={notFound:f.l,forbidden:{privacy:h.G}};function D(e){var a,t,d,f=e.queryParams,h=f.context,D=f.contextId,H=f.playNext,Y=f.mtv,Z=(0,M.u)(c.LZ.PlayPage),z=Z.setFavourite,J=Z.canFavourite,K=(0,R.T)().hasPermissions,W=(0,k.G)().isPlugin,X=(0,S.y)().activePresentation,$=(0,_.I)(),ee=s.a.useBasicFetch(F.D.streamableLearning()),ae=s.a.useBasicFetch(C.N.currentUser()),te=s.a.useBasicFetch(P.R.video(e.id)),ie=s.a.useBasicFetch(g.e.videoClips(e.id)),ne=s.a.useBasicFetch(b.b.videoInteractives(e.id)),re=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(a=ae.data)||void 0===a?void 0:a.isAuthenticated)&&y.h.yearGroups(ae.data.customerId)),se=s.a.useBasicFetch(X&&p.O.audiencesByPresentationId(X.id)),oe=(0,Q.a)(),ce=s.a.useBasicFetch(te.statusCode===n.o.Forbidden&&P.R.video(e.id,u.r.StripMetadata)),ue=(0,x.M)(e.id,!0),le=(0,E.k)({video:te.data,context:h,contextId:D,moviesAndTv:Y,currentUser:ae.data}),ve=(0,O.l)(e.id,!0),fe=s.a.useBasicFetch(P.R.regionAlternatives(e.id));return(0,B.M)(q.CG.getVideoMetadata({content:te.data,regionAlternatives:fe.data,phraseContext:{phraseHandler:U,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:N.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:N.f.allowIndexing(),hrefLang:N.f.getContentHrefLang(fe.data,(function(e,a){return{application:V.O.VIDEOS,action:A.e.Videos.PLAY_VIDEO,args:[e,o.m.slugify(a)]}}))})),(0,I.v)(te,j,{forbidden:!0}),(0,G.V)(null!==(t=le.videos)&&void 0!==t?t:[]),(0,L.P)({id:e.id,app:"videos"}),(0,w.b)(ce),i.useEffect((function(){var e;te.data&&ee.data&&(null===(e=te.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===ee.data.objectId})))&&r.Q.Ry.throw(new v.d)}),[te.hasCompleted,ee.hasCompleted]),te.data&&ae.hasCompleted&&re.hasCompleted&&ve.hasCompleted?i.createElement(T.R,{video:te.data,clips:ie.data,interactives:ne.data,yearGroups:de.data,curriculums:ue,relatedVideos:le,setFavourite:z,canFavourite:J,imageCdnUrl:re.data.imageCdnUrl,currentUser:ae.data,pointsOfInterest:ve.items,playNext:H,featureAccess:$,audiences:se.data,params:e.queryParams,canManageVideoAccess:K(l.C.ManageVideoAccess),shouldShowSideTableOfContents:oe,tableOfContentsId:null===(d=e.queryParams)||void 0===d?void 0:d.tocId,isPlugin:W}):i.createElement(i.Fragment,null)}D.defaultProps={queryParams:{}}}}]);
|
|
2
|
+
//# sourceMappingURL=2548-b81ae38f1f-lite.chunk.js.map
|
package/dist/scripts/{6094-24c430efb3-lite.chunk.js.map → 2548-b81ae38f1f-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6094-24c430efb3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(ClipRequests.videoClips(props.id));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","interactives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","name","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/2548-b81ae38f1f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(ClipRequests.videoClips(props.id));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","interactives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","name","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3922],{94644:(e,a,i)=>{i.d(a,{r:()=>l});var t=i(50242),n=i(81886),r=i(67058),s=i(14553),c=i(49267),o=i(49075),d={notFound:r.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:o._};function l(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},d),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==t.o.NotFound?r!==t.o.Forbidden?i.badRequest||n.Q.Ry.throw(new s.badRequest):i.forbidden||n.Q.Ry.throw(new s.forbidden.privacy):i.notFound||n.Q.Ry.throw(new s.notFound))}}},91286:(e,a,i)=>{i.d(a,{v:()=>s});var t=i(32735),n=i(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,a,i){var s=Array.isArray(e)?e:[e];(0,t.useEffect)((function(){s.forEach((function(e){(0,n.r)(e.statusCode,a,i)}))}),[r(s),a,i])}},44110:(e,a,i)=>{i.d(a,{i:()=>s});var t=i(20354),n=i(89454),r=i(86698),s=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,s=a||i();return t.a.useBasicFetch(!!s&&n.O.presentationAudiences(s.id))}},36073:(e,a,i)=>{i.r(a),i.d(a,{PlayClipViewV2:()=>q});var t=i(32735),n=i(50242),r=i(23481),s=i(20354),c=i(65858),o=i(78417),d=i(16714),l=i(67058),u=i(33803),p=i(43012),v=i(39151),m=i(1666),g=i(20768),y=i(31949),f=i(1575),h=i(26304),I=i(91286),P=i(22902),C=i(15311),A=i(79612),E=i(76753),V=i(51855),b=i(7179),F=i(49948),O=i(36873),R=i(27638),L=i(44110),G=i(35014),x=i(97816),k=i(81812),S=i(14085),T=r.T.encloseNamespace("shared.playClipV2"),w={notFound:l.d,forbidden:{privacy:u.G}};function q(e){var a,i,r,l,u,q=e.queryParams,N=q.context,U=q.contextId,_=q.mtv,M=(0,C.r)().hasProduct,j=(0,R.u)(c.LZ.PlayClip),B=j.setFavourite,D=j.canFavourite,H=(0,P.T)().hasPermissions,W=(0,V.G)().isPlugin,Q=s.a.useBasicFetch(y.N.currentUser()),K=s.a.useBasicFetch(v.L.config()),Y=s.a.useBasicFetch(p.e.clip(e.id)),Z=s.a.useBasicFetch(g.b.videoInteractives(e.id)),J=s.a.useBasicFetch(!!(null===(a=Y.data)||void 0===a?void 0:a._parentVideo)&&f.R.video(Y.data._parentVideo.id));(0,x.V)([J.data]);var z=s.a.useBasicFetch(!!(null===(i=Y.data)||void 0===i?void 0:i._parentVideo)&&p.e.videoClips(Y.data._parentVideo.id)),X=s.a.useBasicFetch(Y.statusCode===n.o.Forbidden&&p.e.clip(e.id,o.r.StripMetadata)),$=(0,O.k)({video:J.data,context:N,contextId:U,moviesAndTv:_,currentUser:Q.data}),ee=(0,L.i)(),ae=s.a.useBasicFetch((null===(r=Q.data)||void 0===r?void 0:r.isAuthenticated)&&m.h.yearGroups(Q.data.customerId)),ie=(0,k.a)(),te=(0,F.l)(e.id,!0),ne=(0,G.I)();return(0,A.M)(E.CG.getClipMetadata({content:Y.data,phraseContext:{phraseHandler:T,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,I.v)(Y,w,{forbidden:!0}),(0,x.V)(null!==(l=$.videos)&&void 0!==l?l:[]),(0,h.b)(X),(0,b.P)({id:e.id,app:"clips"}),Y.data&&Q.hasCompleted&&K.hasCompleted&&te.hasCompleted?t.createElement(S.S,{clip:Y.data,clips:z.data,interactives:Z.data,originalVideo:J.data,currentUser:Q.data,yearGroups:ae.data,relatedVideos:"playlist"===N?$:Object.assign(Object.assign({},$),{videos:[]}),canFavourite:D,setFavourite:B,hasProduct:M,queryParams:e.queryParams,audiences:ee.data,imageCdnUrl:K.data.imageCdnUrl,canManageVideoAccess:H(d.C.ManageVideoAccess),pointsOfInterest:te.items,featureAccess:ne,tableOfContentsId:null===(u=e.queryParams)||void 0===u?void 0:u.tocId,shouldShowSideTableOfContents:ie,isPlugin:W}):t.createElement(t.Fragment,null)}q.defaultProps={queryParams:{}}},14085:(e,a,i)=>{i.d(a,{S:()=>H});var t=i(32735),n=i(28400),r=i(5640),s=i(8887),c=i(51184),o=i(64921),d=i(95812),l=i(53709),u=i(71063),p=i(10439),v=i(35429),m=i(4594),g=i(16714),y=i(12754),f=i(22902),h=i(65332),I=i(76196),P=i(59598),C=i(31908),A=i(26492),E=i(9465),V=i(91479),b=i(47938),F=i(81024),O=i(78166),R=i(99742),L=i(14070),G=i(97291),x=i(22490),k=i(63010),S=i(14476),T=i(53256),w=i(83345),q=i(13231),N=i(51365),U=i(10671),_=i(10741),M="shared.playClipV2";function j(e){var a=(0,f.T)().hasPermissions,i=(0,U._)({location:U.i.VideoItem});return t.createElement("section",{className:"play-page-section",id:P.K.ClippedFrom,ref:function(a){var i;a&&(null===(i=e.headingRef)||void 0===i?void 0:i.current)&&e.headingRef.current.set(P.K.ClippedFrom,a)}},t.createElement("h2",{className:"h4 mb-0"},t.createElement(w.x,{namespace:M,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(q.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:a,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return _.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink})))}const B={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:G.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:G.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function H(e){var a,i,w,q,N,U,_,M,H,W=(0,v.g)(),Q=(0,f.T)().hasPermissions,K=C.M.getCanBeConsumed(e.clip).canConsume,Y=(0,k.Q)(e.tableOfContentsId),Z=Y.tableOfContentsActiveId,J=Y.setTableOfContentsActiveId,z=Y.controlledId,X=Y.setControlledId,$=Y.tableOfContentsExpanded,ee=Y.onToggleTableOfContents,ae=(0,c.Wp)(e.clip)&&e.featureAccess.canViewGlance,ie=(0,S.i)(ae),te=ie.headingRef,ne=ie.headingElements,re=ne.map((function(a){var i;return{id:a.id,name:T.d.getSectionHeading(a.id,{clips:e.clips,interactives:e.interactives,resources:null===(i=e.clip.resources)||void 0===i?void 0:i.data,isPlayClipPage:!0})}}));(0,h.D)({setActiveId:J,headingElements:ne,controlledId:z,setControlledId:X}),(0,I.P)(ne,e.tableOfContentsId);var se=C.M.isVideoTypeArchived(e.clip),ce=Q(g.C.StudentExperience),oe=t.useRef(!1);function de(){var e,a,i,t;oe.current=!(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==W?void 0:W.playerRef)||void 0===i?void 0:i.current)||void 0===t||t.pause()}function le(){var e,a;oe.current&&(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function ue(){var a,i;return!(!e.originalVideo||!(null===(a=e.clip._canBeConsumed)||void 0===a?void 0:a.value)||!(null===(i=e.currentUser)||void 0===i?void 0:i.isAuthenticated)||!e.hasProduct(y.x.Primary)||ce)}var pe="picture-in-picture"===W.mode||e.featureAccess.canViewPublicLayout,ve=null!==(i=null===(a=e.clips)||void 0===a?void 0:a.filter((function(a){return a.id.toString()!==e.clip.id.toString()})))&&void 0!==i?i:[];return t.createElement("div",{className:"px-4 play-page-sections-container"},t.createElement("main",{className:"".concat(B.main," ").concat(e.shouldShowSideTableOfContents&&$?B.expandedToc:e.shouldShowSideTableOfContents&&!$?"pe-4":void 0)},t.createElement(b.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:m.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),se&&t.createElement(A.T,{typeId:e.clip.typeId,hasStudentExperience:ce}),t.createElement("section",{id:P.K.Video,className:"mb-2 ".concat(u.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==te?void 0:te.current)&&te.current.set(P.K.Video,e)}},K&&t.createElement(p.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(w=e.queryParams)||void 0===w?void 0:w.context,contextId:null===(q=e.queryParams)||void 0===q?void 0:q.contextId,moviesAndTv:null===(N=e.queryParams)||void 0===N?void 0:N.mtv,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,startTime:null!==(M=null===(_=e.queryParams)||void 0===_?void 0:_.t)&&void 0!==M?M:null===(H=e.queryParams)||void 0===H?void 0:H.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:pe?"":"d-none"},t.createElement(F.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ue()?{application:G.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,n.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),ae?t.createElement(o.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var a;return null===(a=W.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ae}):t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),t.createElement(l.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:D(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:R.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:te}),t.createElement(d.J,{video:e.clip,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:te,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),t.createElement(r.O,{clips:ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,headingRef:te,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},isPlugin:e.isPlugin}),ae&&t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),!!ue()&&t.createElement(j,{originalVideo:e.originalVideo,setFavourite:e.setFavourite,canFavourite:e.canFavourite,yearGroups:e.yearGroups,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:te,isPlugin:e.isPlugin,getClassroomGuideAppLink:x.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:x.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:x.W.getResourceGuidanceAppLink}),t.createElement(O.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin})),t.createElement(E.h,{isExpanded:$,setIsExpanded:ee,items:re,activeId:Z,setControlledId:X,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
|
|
2
|
+
//# sourceMappingURL=3922-d40b0ce5aa-lite.chunk.js.map
|
package/dist/scripts/{6546-faa6f93a0e-lite.chunk.js.map → 3922-d40b0ce5aa-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6546-faa6f93a0e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/PlayClipViewV2.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/play-clip-v2.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/PlayClipV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayClipViewContainer';\n\nimport { PlayClipV2 } from './components/play-clip/PlayClipV2';\n\nconst namespace = 'shared.playClipV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipViewV2(props: PlayViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayClip);\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<Clip[]>(\n !!clip.data?._parentVideo && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClipV2\n clip={clip.data}\n clips={childClips.data}\n interactives={interactives.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n canFavourite={canFavourite}\n setFavourite={setFavourite}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n imageCdnUrl={config.data.imageCdnUrl}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClipV2';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n getInteractiveGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink: (id: string, type: MasterType) => Core.AppLink;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"iQ0Ie\",\"expandedToc\":\"sIoV8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, FavouriteFunc, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\nimport { ClippedFrom } from 'shared/views/play-clip/v2/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip-v2.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipV2Props {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n}\n\nexport function PlayClipV2(props: PlayClipV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, props.tableOfContentsId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return styles.expandedToc;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n return (\n <div className='px-4 play-page-sections-container'>\n <main className={`${styles.main} ${getMainClassName()}`}>\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n )}\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n yearGroups={props.yearGroups}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n \n </div>\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","getPhrase","clipErrors","PlayClipViewV2","props","queryParams","context","contextId","mtv","hasProduct","u","setFavourite","canFavourite","hasPermissions","isPlugin","currentUser","config","clip","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","yearGroups","isAuthenticated","customerId","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","imageCdnUrl","canManageVideoAccess","items","tableOfContentsId","tocId","defaultProps","namespace","ClippedFrom","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","current","set","Text","phrase","VideoActionsContext","value","VideoList","getVideoAppLink","v","opts","VideoAppLinkHelper","playNext","shareId","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClipV2","playerContext","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","canViewGlance","useSectionHeadings","headingElements","ele","name","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","hasStudentExperience","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","mode","canViewPublicLayout","otherClips","filter","c","toString","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","key","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","VideoAtAGlanceV2","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","canViewResources","canViewResourceItems","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","PlayPageClips","canViewClips","RelatedVideos","currentVideo","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3922-d40b0ce5aa-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/PlayClipViewV2.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/play-clip-v2.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/PlayClipV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayClipViewContainer';\n\nimport { PlayClipV2 } from './components/play-clip/PlayClipV2';\n\nconst namespace = 'shared.playClipV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipViewV2(props: PlayViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayClip);\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<Clip[]>(\n !!clip.data?._parentVideo && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClipV2\n clip={clip.data}\n clips={childClips.data}\n interactives={interactives.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n canFavourite={canFavourite}\n setFavourite={setFavourite}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n imageCdnUrl={config.data.imageCdnUrl}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClipV2';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n getInteractiveGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink: (id: string, type: MasterType) => Core.AppLink;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"iQ0Ie\",\"expandedToc\":\"sIoV8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, FavouriteFunc, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\nimport { ClippedFrom } from 'shared/views/play-clip/v2/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip-v2.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipV2Props {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n}\n\nexport function PlayClipV2(props: PlayClipV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, props.tableOfContentsId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return styles.expandedToc;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n return (\n <div className='px-4 play-page-sections-container'>\n <main className={`${styles.main} ${getMainClassName()}`}>\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n )}\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n yearGroups={props.yearGroups}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n \n </div>\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","getPhrase","clipErrors","PlayClipViewV2","props","queryParams","context","contextId","mtv","hasProduct","u","setFavourite","canFavourite","hasPermissions","isPlugin","currentUser","config","clip","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","yearGroups","isAuthenticated","customerId","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","imageCdnUrl","canManageVideoAccess","items","tableOfContentsId","tocId","defaultProps","namespace","ClippedFrom","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","current","set","Text","phrase","VideoActionsContext","value","VideoList","getVideoAppLink","v","opts","VideoAppLinkHelper","playNext","shareId","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClipV2","playerContext","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","canViewGlance","useSectionHeadings","headingElements","ele","name","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","hasStudentExperience","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","mode","canViewPublicLayout","otherClips","filter","c","toString","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","key","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","VideoAtAGlanceV2","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","canViewResources","canViewResourceItems","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","PlayPageClips","canViewClips","RelatedVideos","currentVideo","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
|