@clickview/lite 0.48.0-rc.7 → 0.48.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/scripts/{1285-c322e093f9-lite.chunk.js → 1285-c3795fed18-lite.chunk.js} +2 -2
- package/dist/scripts/1285-c3795fed18-lite.chunk.js.map +1 -0
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3012-b5208d6981-lite.chunk.js → 3012-fd3eb34a14-lite.chunk.js} +2 -2
- package/dist/scripts/3012-fd3eb34a14-lite.chunk.js.map +1 -0
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
- package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
- package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-6e5494bf09-lite.chunk.js} +3 -3
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-6e5494bf09-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
- package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
- package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-11bfce2e8c.min.js +3 -0
- package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-11bfce2e8c.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1285-c322e093f9-lite.chunk.js.map +0 -1
- package/dist/scripts/3012-b5208d6981-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-8f540a1154.min.js +0 -3
- /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-6e5494bf09-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-11bfce2e8c.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1285-c322e093f9-lite.chunk.js","mappings":"mJAKMA,E,SAAY,mBADA,mBAOZ,SAAUC,EAAeC,GAC7B,IAAMC,EAAsB,cAAfD,EAAME,KAAuBJ,EAAU,aAAeA,EAAU,gBAE7E,OACE,uBAAKK,UAAU,kFACZF,EAAI,IAWX,C,sECOaG,EAAyB,SAACC,GAAsE,IAA5CC,EAAA,uDAAsC,CAAC,EACtG,EAA6CA,EAArCC,QAAAA,OAAO,IAAG,OAAI,EAAEC,EAAqBF,EAArBE,iBAElBC,EAAUH,EAAQI,aAAeJ,EAAQI,aAAe,IAAIC,IAE5DC,EAAQ,SAAiCH,GAEzCI,GAAc,SAEdC,GAAiB,OAAYT,GAC7BU,GAAgB,OAAYP,GAwClC,SAASQ,IACPJ,EAAMK,QAAQC,QACdL,GACF,CA6BA,SAASM,EAAUC,GAMjB,MALoB,iBAATA,EACTA,EAAOA,EAAKC,WACW,iBAATD,IACdA,EAAOA,EAAKb,GAASc,YAEhBT,EAAMK,QAAQK,IAAIF,EAC3B,CAuBA,SAASG,IACP,SAAKlB,aAAU,EAAVA,EAAYmB,SAGVnB,EAAWoB,MAAMN,EAC1B,CAEA,SAASO,EAAYC,GACnBA,EAAIC,SAAQ,SAAAC,GACVjB,EAAMK,QAAQa,IAAID,GAAI,EACxB,IACAhB,GACF,CAUA,OAtHA,aAAgB,WAIVP,EAAQI,cAORF,GAAoBO,IAAkBP,IAO1BM,aAAc,EAAdA,EAAgBiB,KAAI,SAAAC,GAAC,OAAIA,EAAEzB,EAAQ,IAAE0B,WACzC5B,aAAU,EAAVA,EAAY0B,KAAI,SAAAC,GAAC,OAAIA,EAAEzB,EAAQ,IAAE0B,SAK7CjB,GACF,GAAG,CAAEF,EAAgBC,EAAeV,EAAYC,EAAQI,eAExD,aAAgB,W,OACa,QAAtB,EAAAJ,EAAQ4B,sBAAc,eAAEV,SAG7BE,EAAYpB,EAAQ4B,eACtB,GAAG,IAsFI,CACLC,aA/EF,WACE,IAAMC,GAAYb,IAElBlB,EAAWuB,SAAQ,SAAAR,GACbgB,EACFxB,EAAMK,QAAQa,IAAIV,EAAKb,GAASc,YAAY,GAE5CT,EAAMK,QAAO,OAAQG,EAAKb,GAASc,WACvC,IAEAR,GACF,EAqEEwB,aAlEF,SAAsBR,GACpB,IAAMS,GAAiB1B,EAAMK,QAAQK,IAAIO,EAAGR,YAExCiB,EACF1B,EAAMK,QAAQa,IAAID,EAAGR,WAAYiB,GAEjC1B,EAAMK,QAAO,OAAQY,EAAGR,YAE1BR,GACF,EA0DE0B,YA9CF,WACE,OAAOC,MAAMC,KAAK7B,EAAMK,QAAQyB,OAClC,EA6CEvB,UAAAA,EACAwB,YAAapB,IACbqB,YA7CF,YACOvC,aAAU,EAAVA,EAAYmB,UAEjBnB,EAAWuB,SAAQ,SAAAR,GACjBR,EAAMK,QAAO,OAAQG,EAAKb,GAASc,WACrC,IACAR,IACF,EAuCEgC,kBApCF,WACE,SAAKxC,aAAU,EAAVA,EAAYmB,WAGRnB,EAAWyC,MAAK,SAAA1B,GAAI,OAAID,EAAUC,EAAK,GAClD,EAgCEM,YAAAA,EACAqB,iBAjBF,WACE,OAAOnC,EAAMK,QAAQ+B,IACvB,EAgBEhC,MAAAA,EACAiC,OAfF,WACE,OAAOrC,EAAMK,OACf,EAeF,C,kDClLM,SAAUiC,EAAeC,GAC7B,IAAMC,EAAM,WAIZ,OAHA,aAAgB,WACdA,EAAInC,QAAUkC,CAChB,IACOC,EAAInC,OACb,C,kDCLM,SAAUoC,EAAqBC,GACnC,OAAQA,GACN,KAAK,SACH,MAAO,OACT,KAAK,WACH,MAAO,SACT,KAAK,UACH,MAAO,QACT,KAAK,SACH,MAAO,OACT,KAAK,WACH,MAAO,SACT,KAAK,WACH,MAAO,SACT,QACE,MAAO,OAEb,C,mRCVMC,EAAY,kCAOZ,SAAUC,EAA0BxD,GACxC,OACE,gBAAC,aAAiC,CAACmD,MAAOI,GACxC,gBAACE,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,oCAEvB,gBAACF,EAAA,UAAkB,KAAC,gBAACG,EAAA,EAAI,CAACC,OAAO,uBACjC,gBAACJ,EAAA,OAAe,CAACtD,UAAS,eAAWH,EAAM8D,eAA0B,GAAT,SAC1D,gBAACF,EAAA,EAAI,CAACC,OAAO,oBAGd7D,EAAM8D,iBAAmB9D,EAAM+D,aAC9B,gBAACN,EAAA,MAAc,CACbxD,KAAM+D,EAAA,YAA0BT,EAAW,iBAC3CU,QAAS,CACPC,YAAa,iBACbC,OAAQ,6BAIZnE,EAAM8D,iBAAmB9D,EAAM+D,aAC/B,gBAACN,EAAA,OAAe,KAAC,gBAACG,EAAA,EAAI,CAACC,OAAO,cAE/B7D,EAAM+D,aACL,qBAAG5D,UAAU,uCAAuCiE,KAAM,GAAIC,OAAO,UAClEL,EAAA,YAA0BT,EAAW,kBAMlD,CClCA,IAAM,EAAY,+CACZzD,EAAYkE,EAAA,mBAAiC,GAE7CM,EAAgC,iFAChCC,EAA2B,GAS3B,SAAUC,IACd,OACE,gBAAC,aAAiC,CAACrB,MAAO,GACxC,gBAACM,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,oCAEvB,gBAACF,EAAA,UAAkB,KAAC,gBAACG,EAAA,EAAI,CAACC,OAAO,uBAEjC,gBAACJ,EAAA,OAAe,CAACtD,UAAU,QAAQ,gBAACyD,EAAA,EAAI,CAACC,OAAO,oBAEhD,qBAAG1D,UAAU,uCAAuCiE,KAAMG,EAA0BF,OAAO,UACxFvE,EAAU,kBAKrB,CAEM,SAAU2E,EAAkCzE,GAChD,OAAIA,EAAM0E,oBACD,gBAAClB,EAAyB,CAACM,eAAgB9D,EAAM8D,iBAGxD,gBAAC,aAAiC,CAACX,MAAO,GACxC,gBAACM,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,oCAEvB,gBAACF,EAAA,UAAkB,KAAC,gBAACG,EAAA,EAAI,CAACC,OAAO,uBAEjC,gBAACJ,EAAA,OAAe,KAAC,gBAACG,EAAA,EAAI,CAACC,OAAO,oBAC9B,gBAACJ,EAAA,MAAc,CACbxD,KAAM+D,EAAA,YAA0B,EAAW,eAC3CW,KAAM,UACNV,QAAS,CACPC,YAAa,eACbC,OAAQ,oCACRS,KAAM,CAAC5E,EAAM6E,UAAUhD,OAI3B,qBAAG1B,UAAU,uCAAuCiE,KAAME,EAA+BD,OAAO,UAC7FrE,EAAM8E,qBAKjB,C,gJChEM,SAAUC,EAAmB/E,G,MACjC,OAAKA,EAAMgF,MAIT,uBAAK7E,UAAS,wCAAkC,OAAyC,QAApB,EAAAH,EAAMgF,MAAMC,gBAAQ,eAAEC,UACxFlF,EAAMgF,MAAMG,MAJR,gCAOX,CAOM,SAAUC,EAAuBpF,GACrC,OAAKA,EAAMqF,MAIT,gBAACC,EAAA,EAAS,CAACC,QAASvF,EAAMuF,QAASpF,UAAS,8CAA8C,IACtFH,EAAMqF,OAJH,gCAOX,CCZA,IAAM,EAAY,oCAEZG,EAAqB,SAAC3D,EAAY4D,GAAgB,MAAM,CAC5DvB,YAAa,eACbC,OAAQ,yBACRS,KAAM,CAAC/C,GACP6D,OAAQ,CACNC,YAAaF,EAAS1D,KAAI,SAAA6D,GAAC,OAAIA,EAAE/D,EAAE,KAEtC,EAEKgE,EAA6B,SAACJ,EAAkBT,GAKpD,OAJwBS,EAASK,QAAO,SAAAC,GACtC,OAAOf,EAAMgB,MAAMC,KAAKnD,MAAK,SAAAoD,GAAC,OAAIA,EAAErE,GAAGR,aAAe0E,EAAQlE,GAAGR,UAAU,GAC7E,IAEuBG,MACzB,EAmBM,SAAU2E,EAAuBnG,G,MACrC,GAAoC,EAAAI,EAAA,GAAuBJ,EAAMoG,OAAQ,CACvElE,eAAgBlC,EAAMqG,cAActE,KAAI,SAAA6D,GAAC,OAAIA,EAAE/D,EAAE,MAD3CQ,EAAY,EAAZA,aAAclB,EAAS,EAATA,UAsBtB,aAAgB,WAGdnB,EAAMoG,OAAOxE,SAAQ,SAAA0E,GACnB,IAAMC,EAAuBV,EAA2B7F,EAAMwG,iBAAkBF,KAG1EC,GAAwBA,IAAyBvG,EAAMwG,iBAAiBhF,QAAWL,EAAUmF,EAAEzE,OAMhG0E,IAAwBpF,EAAUmF,EAAEzE,MALvCQ,EAAaiE,EAAEzE,GASnB,GACF,IAEA,IAEM4E,EAA4B,CAChCC,MAAO1G,EAAM2G,WAAa,MAAQ,SAWpC,OAHI3G,EAAM4G,WACRH,EAAcI,MAAO,GAGrB,gBAACC,EAAA,EAAQ,iBAAKL,GACZ,gBAACK,EAAA,SAAe,CACdC,GAAG,MACHlF,GAAI7B,EAAM6B,GACV1B,UAAS,UAAKH,EAAM4G,SAAW,aAAe,iBAAgB,YAnB9C,uCAmB+D,cAE/E,gBAACI,EAAA,EAAY,CACXC,QAAS,WACTC,MAAOlH,EAAM4G,SAAW5G,EAAMmH,iBAAmBnD,EAAA,YAA0B,EAAW,qBACtFoD,iBAAiB,MACjBC,iBAAe,EACfC,yBAAyB,MAG7B,gBAACR,EAAA,OAAa,QACG,QAAZ,EAAA9G,EAAMoG,cAAM,eAAE5E,SACf,uBAAKrB,UAAU,2BACb,qBAAGA,UAAU,QAAO,gBAACyD,EAAA,EAAI,CAACL,UAAW,EAAWM,OAAO,gBACvD,sBAAI1D,UAAU,sBACXH,EAAMoG,OAAOrE,KAAI,SAAAiD,GAAK,OACrB,sBAAIuC,IAAKvC,EAAMnD,GAAI1B,UAAU,2CAC3B,gBAACqH,EAAA,EAAQ,CACP3F,GAAE,UAAK7B,EAAM6B,GAAE,YAAImD,EAAMnD,IACzB4F,QAAStG,EAAU6D,EAAMnD,IACzB6F,SAAU,kBA7E5B,SAAkB1C,GAChB,IAAM2C,GAAaxG,EAAU6D,EAAMnD,IACnC7B,EAAM4H,cAAc5C,EAAO2C,GAE3BtF,EAAa2C,EAAMnD,GACrB,CAwEkC,CAASmD,EAAM,EAC/B6C,gBAAiBhC,EAA2B7F,EAAMwG,iBAAkBxB,KAEtE,gBAACD,EAAkB,CAACC,MAAOA,IACxB,MAKb,gBAAC8C,EAAA,EAAO,CACNvC,QAhFR,WACMvF,EAAM4G,UAGVmB,EAAA,gBAA8B,CAAC,EAAGA,EAAA,eAA6B/H,EAAMgI,iBAAkB,CACrFC,WAAY,YACZC,cAAe,WACfC,OAAQ,sBAEZ,EAwEQlE,QAASuB,EAAmBxF,EAAM6E,UAAUhD,GAAI7B,EAAMwG,kBACtDrG,UAAWH,EAAM4G,SAAW,WAAa,8CAEzC,gBAACI,EAAA,EAAY,CAACC,QAAS,YACvB,gBAACrD,EAAA,EAAI,CAACL,UAAW,EAAWM,OAAO,gBAK7C,CA1GAsC,EAAuBiC,aAAe,CACpC/B,cAAe,I,2DCvDjB,UAAgB,gBAAkB,QAAQ,KAAO,S,2hCC6BjD,IACM,GAAYrC,EAAA,mBADA,yCAGZqE,GAAwB,SAACxG,GAAU,MAAM,CAC7CqC,YAAa,iBACbC,OAAQ,0BACRS,KAAM,CAAC/C,GACP6D,OAAQ,CAAE4C,SAAUC,EAAA,WACrB,EAEKC,GAA2B,SAACC,EAAmBC,GAAmB,MAAM,CAC5ExE,YAAa,eACbC,OAAQ,+BACRS,KAAM,CAAC8D,GACPhD,OAAQ,CACNiD,WAAY,CAACF,IAEhB,EAeK,SAAUG,GAA2B5I,G,MACwC,KAArB,YAAe,GAAM,GAAzE6I,EAAqB,KAAEC,EAAwB,KACkB,KAArB,YAAe,GAAM,GAAjEC,EAAiB,KAAEC,EAAoB,KAGyD,KAA1C,WAAuC,CAAC,GAAE,GAAhGC,EAAsB,KAAEC,EAAyB,KAEnDC,EAAe,SAA6B,MAC5CC,EAAc,SAA6B,MAEzCC,GAAmB,EAAAC,EAAA,KAAnBD,eAGR,aAAgB,WACdE,IAEIR,GAGJD,GAAyB,EAC3B,GAAG,CAAC9I,EAAMwJ,eAAehI,SAOzB,IAsEQiI,EAtEFC,EAA0BC,EAAA,YALhC,WACEJ,IACAT,GAAyB,EAC3B,GAEkE,KAoDlE,SAASS,IACPL,EAA0BlJ,EAAMwJ,eAAeI,QAAO,SAACC,EAAK7E,GAE1D,OADA6E,EAAI7E,EAAMnD,KAAM,EACTgI,CACT,GAAG,CAAC,GACN,CAoDA,OA3GA,QAAkB,WACZd,GAGJW,GACF,IAMA,aAAgB,WACd,GAAKP,EAAalI,SAAYmI,EAAYnI,SAAY4H,EAAtD,CAGA,IAAMiB,EAAiBX,EAAalI,QAAQ8I,kBAC5C,GAAKD,EAAL,CAEA,IAUIE,EAC6C,EAX3CC,EAAeH,EAAeI,wBAAwBC,EAEtDC,EAAwD,CAAC,EAQrC,E,gmBAAA,CACNjB,EAAalI,QAAQoJ,UAAQ,IAAjD,IAAK,EAAL,qBAAmD,KAAxCC,EAAK,QACVA,EAAMzI,KACRuI,EAA2BE,EAAMzI,IAAMyI,EAAMJ,wBAAwBC,IAAMF,EAC3ED,EAAgBI,EAA2BE,EAAMzI,IAAMyI,EAAMzI,GAAKmI,EAErE,CAED,+BACIZ,EAAYnI,QAAQiJ,wBAAwBC,IAAMF,IACpDG,EAA2BJ,IAAiB,GAE9Cd,EAA0BkB,GAC1BtB,GAAyB,EAzBE,CAHnB,CA6BV,GAAG,CAACD,IAkEF,uBAAK1I,UAAU,uCACb,gBAACqH,EAAA,EAAQ,CACP3F,GAAI7B,EAAM+F,QAAQlE,GAClB4F,QAASzH,EAAMyH,QACfC,SAAU1H,EAAMuK,iBAChBpK,UAAU,OACVyG,SAAU5G,EAAMwK,WAGlB,uBAAKrK,UAAS,UAAK,mBAAsB,UACvC,gBAACsK,EAAA,EAAM,CACLC,YAAa1K,EAAM2K,OAAOD,YAC1BE,SAAUC,EAAA,cAAuB7K,EAAM+F,QAAQZ,KAAMnF,EAAM+F,QAAQ+E,SACnEC,SAA8B,QAApB,EAAA/K,EAAM+F,QAAQiF,cAAM,eAAEC,OAIpC,qBAAG9K,UAAS,eAAU,QAAW,oCAAoCH,EAAM+F,QAAQZ,KAAI,IAAGnF,EAAM+F,QAAQ+E,SAExG,uBAEE3K,UAAS,UAAK0I,EAAwB,YAAc,GAAE,mCACtDzF,IAAK+F,GAEJnJ,EAAMwJ,eAAezH,KAAI,SAAAiD,GACxB,OAAKiE,EAAuBjE,EAAMnD,IAIhC,uBAAK0F,IAAKvC,EAAMnD,GAAI1B,UAAU,YAAY0B,GAAImD,EAAMnD,IAClD,gBAACkD,EAAkB,CAACC,MAAOA,KAJtB,gBAAC,WAAc,CAACuC,IAAKvC,EAAMnD,IAOtC,IACA,uBAAKuB,IAAKgG,EAAajJ,UAAU,aAC/B,gBAACiF,EAAsB,CAACC,MApFvB6F,OAAOxI,KAAKuG,GAAwBW,QAAO,SAACvE,EAAO8F,GAIxD,OAHKlC,EAAuBkC,IAC1B9F,IAEKA,CACT,GAAG,GA+E4DE,QAnGjE,WACEyD,GAAqB,GACrBO,GACF,MAoGI,gBAACpD,EAAsB,CACrBtE,GAAE,oBAAe7B,EAAM+F,QAAQlE,IAC/BgD,UAAW7E,EAAM6E,UACjBuB,OAAQpG,EAAMoL,gBACd5E,iBAAkB,CAACxG,EAAM+F,SACzBM,cAAerG,EAAMwJ,eACrB5B,cAAe,SAAC5C,EAAOqG,GAAQ,OAAKrL,EAAMsL,cAActL,EAAM+F,QAASf,EAAOqG,EAAS,EACvFrD,iBAAkB,CAAEuD,SAAU,qCAC9B5E,YAAU,EACVC,SAAU5G,EAAMwK,SAChBrD,iBAAkBnH,EAAMwL,kBAG1B,gBAAC,IAAW,CACV/B,SA7FEA,EAA2B,GAE7BJ,EAAeoC,EAAA,gBACjBhC,EAAQiC,KAAK,CACXC,MAAO,GAAU,eACjB1H,QAASoE,GAAsBrI,EAAM+F,QAAQlE,IAC7C+E,SAAU5G,EAAMwK,SAChBrK,UAAWH,EAAMwK,SAAW,WAAa,GACzCoB,QAAS5L,EAAMwK,SAAWxK,EAAMwL,gBAAkB,GAClDjG,QAAS,WACPwC,EAAA,gBAA8B,CAAElG,GAAI7B,EAAM+F,QAAQlE,IAAM,CACtDoG,WAAY,UACZE,OAAQ,UACRD,cAAe,WACfqD,SAAU,qCAEd,IAGJ9B,EAAQiC,KAAK,CACXC,MAAO,GAAU,iBACjB1H,QAASuE,GAAyBxI,EAAM+F,QAAQlE,GAAI7B,EAAM6E,UAAUhD,IACpE+E,SAAU5G,EAAMwK,SAChBrK,UAAWH,EAAMwK,SAAW,WAAa,cACzCoB,QAAS5L,EAAMwK,SAAWxK,EAAMwL,gBAAkB,GAClDjG,QAAS,WACPwC,EAAA,gBAA8B,CAAElG,GAAI7B,EAAM6E,UAAUhD,GAAIgK,OAAQ7L,EAAM+F,QAAQlE,IAAM,CAClFoG,WAAY,gBACZE,OAAQ,eACR2D,WAAY,UACZ5D,cAAe,WACfqD,SAAU,qCAEd,IAGK9B,GA0DHsC,yBAAyB,QAIjC,C,gBChOM,GAAY,qCACZ,GAAY/H,EAAA,mBAAiC,IAa7C,SAAUgI,GAAwBhM,G,MAC9B6E,EAAgC7E,EAAhC6E,UAAWY,EAAqBzF,EAArByF,SAAUW,EAAWpG,EAAXoG,OAEvB6F,GAAW,UACXC,GAAS,SAETC,GAAiB,EAAA/L,EAAA,GAAuBqF,EAASQ,MACjDmG,EAAiBD,EAAe5J,cAAcf,OAE9C6K,EAAoBjG,EAAON,QAAO,SAAAd,G,QACtC,KAAsB,QAAjB,EAAW,QAAX,EAAAA,EAAMgB,aAAK,eAAEC,YAAI,eAAEzE,QACtB,OAAO,EAET,IAAI8K,GAAmB,EACnBC,EAAQ,EAEN5D,EAAawD,EAAe5J,cAElC,GAAKoG,EAAWnH,OAAhB,CACS,iBAGP,IAAMK,EAAK8G,EAAW4D,GACjBvH,EAAMgB,MAAMC,KAAKnD,MAAK,SAAC0J,GAAQ,OAAKA,EAAI3K,GAAGR,aAAeQ,EAAGR,UAAU,MAC1EiL,GAAmB,GAErBC,G,EALF,aAMSA,EAAQ5D,EAAWnH,QAE5B,OAAO8K,CAVC,CAWV,IAuEMG,GAAa,OAAc,YAEjC,OAAkB,QAAb,EAAAhH,EAASQ,YAAI,eAAEzE,QAYlB,gCACE,uBAAKrB,UAAS,yCAAoCsM,EAAa,OAAS,SACtE,gBAACjF,EAAA,EAAQ,CACP3F,GAAG,iCACH6F,SAAUyE,EAAehK,aACzBsF,QAAS0E,EAAexJ,YACxBxC,UAAU,OACV0H,cAAesE,EAAetJ,oBAC9B+D,SAAU5G,EAAMwK,WAGlB,gBAACrE,EAAsB,CACrBtE,GAAG,iBACHgD,UAAWA,EACX2B,iBAAkB2F,EAAe5J,cAAcR,KAAI,SAAAF,GACjD,OAAO7B,EAAMyF,SAASQ,KAAKnD,MAAK,SAAA8C,GAAC,OAAIA,EAAE/D,GAAGR,aAAeQ,EAAGR,UAAU,GACxE,IACA+E,OAAQA,EACRwB,cA1DR,SAAuB5C,EAAuB2C,GAC5C,IAAM+E,EAAqBP,EAAe5J,cAEpCoK,EAAUhF,EAAYiF,GAAA,qBAAuCA,GAAA,0BAEnE,UACEX,EACAU,EAAQD,EAAoB1H,EAAMnD,GAAIgD,EAAUhD,IAAI,WAClDkG,EAAA,gBAA8B,CAC5BlG,GAAImD,EAAMnD,GACVgL,aAAcH,EAAmBlL,QAChC,CACDyG,WAAY,eACZE,OAAQ,oBACR2D,WAAY,UACZ5D,cAAe,cACfqD,SAAU,+BAGZW,EAAOY,QAAQ,GAAU,aAAc,CAAEC,UAAW/H,EAAMG,KAAM6H,YAAY,IAC9E,IAAG,WACDd,EAAOe,MAAM,GAAU,WAAY,CAAEF,UAAW/H,EAAMG,KAAM6H,YAAY,IAC1E,IAEJ,EAmCQpG,UAAWwF,GAAkBpM,EAAMwK,SACnCnE,cAAegG,EACfrE,iBAAkB,CAAEuD,SAAU,8BAC9BpE,iBAAkBnH,EAAMwK,UAAYxG,EAAA,YAA0B,GAAW,yBAE3E,gBAACsB,EAAA,EAAS,CACRnF,UAAS,mBAAciM,GAAkBpM,EAAMwK,SAAW,4BAA8B,IACxFjF,QA7FR,WACE,GAAK6G,IAAkBpM,EAAMwK,SAA7B,CAGA,IAAM7B,EAAawD,EAAe5J,cAElCwF,EAAA,gBAA8B,CAC5BlG,GAAIgD,EAAUhD,GACdgL,aAAclE,EAAWnH,QACxB,CACD2G,OAAQ,eACR2D,WAAY,UACZ5D,cAAe,WACfD,WAAY,gBACZsD,SAAU,+BAGZ,eAA2B,CACzBrH,YAAa,eACbC,OAAQ,+BACRS,KAAM,CAACC,EAAUhD,IACjB6D,OAAQ,CACNiD,WAAAA,IApBI,CAuBV,GAsEQ,gBAACuE,EAAA,EAAO,CACNC,UAAQ,EACRjG,MAAOlH,EAAMwK,SAAWxG,EAAA,YAA0B,GAAW,uBAAyB,IAEtF,gBAACgD,EAAA,EAAY,CACXC,QAAS,YACTC,MAAOlD,EAAA,YAA0B,GAAW,UAC5CoD,iBAAiB,MACjBC,iBAAe,MAIrB,gBAAC6F,EAAA,EAAO,CACNC,UAAQ,EACRjG,MAAOlH,EAAMwK,SAAWxG,EAAA,YAA0B,GAAW,uBAAyB,IAEtF,gBAACoJ,EAAA,EAAU,CACT7H,QAhIV,WACEwC,EAAA,gBAA8B,CAAElG,GAAIgD,EAAUhD,IAAM,CAClDsG,OAAQ,eACR2D,WAAY,UACZ5D,cAAe,WACfD,WAAY,eACZsD,SAAU,+BAGZ,eAA2B,CACzBrH,YAAa,eACbC,OAAQ,oCACRS,KAAM,CAACC,EAAUhD,KAErB,EAmHUoF,QAAS,UACT9G,UAAU,uBACVyG,SAAU5G,EAAMwK,UAEhB,gBAAC5G,EAAA,EAAI,CAACL,UAAW,GAAWM,OAAO,kBAKzC,sBAAI1D,UAAU,8BACXsF,EAASQ,KAAKlE,KAAI,SAAAgE,GAAO,OACxB,sBAAIwB,IAAKxB,EAAQlE,IACf,gBAAC+G,GAA0B,CACzB/D,UAAWA,EACXkB,QAASA,EACTqF,gBAAiBpL,EAAMoG,OACvBuE,OAAQ3K,EAAM2K,OACdnB,eAAgBxJ,EAAMoG,OAAON,QAAO,SAAAQ,GAAC,OAAIA,EAAEN,MAAMC,KAAKnD,MAAK,SAAAoD,GAAC,OAAIA,EAAErE,KAAOkE,EAAQlE,EAAE,GAAC,IACpF4F,QAAS0E,EAAehL,UAAU4E,EAAQlE,IAC1C0I,iBAAkB,kBAAM4B,EAAe9J,aAAa0D,EAAQlE,GAAG,EAC/DyJ,cAAetL,EAAMsL,cACrBd,SAAUxK,EAAMwK,SAChBgB,gBAAiBxL,EAAMwK,SAAW,GAAU,uBAAyB,KAEpE,MAhFT,gBAAC/F,EAAiC,CAChCI,UAAW7E,EAAM6E,UACjBC,mBAAoB,GAAU,sBAC9BJ,oBAAqB1E,EAAM0E,oBAC3BZ,eAAgB9D,EAAM8D,gBAiF9B,C,2BC5OA,SAA8D,QAA9D,GAAmF,QAAnF,GAA+I,QAA/I,GAA4J,QCMrJ,IAAMuJ,GAAiC,QAAW,WACvD,OACE,uBAAKlN,UAAU,QAEb,uBAAKA,UAAS,0CDVM,WCapB,uBAAKA,UAAU,QACb,gBAAC,MAAkB,CAACmN,SAAU,KAIhC,uBAAKnN,UAAU,QACb,gBAACoN,GAAA,EAAsB,OAGzB,uBAAKpN,UAAU,kCAEb,uBAAKA,UAAS,0CAAqC,MAEnD,uBAAKA,UAAS,0CAAqC,MAEnD,uBAAKA,UAAS,6CAAwC,MAGtD,uBAAKA,UAAS,qCD/BmF,YCmCnG,sBAAIA,UAAU,8BACXqC,MAAM,IAAIgL,KAAK,MAAMzL,KAAI,SAACgE,EAAS/D,GAAC,OACnC,sBAAIuF,IAAKvF,GACP,uBAAK7B,UAAU,uCAEb,uBAAKA,UAAS,0CAAqC,MAGnD,uBAAKA,UAAS,0CD3Ce,WC8C7B,uBAAKA,UAAU,QACb,uBAAKA,UAAS,qCD/CiG,YCmDjH,uBAAKA,UAAU,kBACZsN,KAAKC,SAAW,GAEb,gCACE,uBAAKvN,UAAS,uDAAkD,GAAY,YDvDuE,WCwDnJ,uBAAKA,UAAS,kDAA6C,GAAY,YAAI,OAE3E,uBAAKA,UAAS,kDAA6C,GAAY,YAAI,OAKnF,uBAAKA,UAAS,0CAAqC,MAEnD,uBAAKA,UAAS,qCDjEmK,YCmEhL,KAKf,I,mCC9CM,GAAY6D,EAAA,mBADA,gCAGZ2J,GAAuB,CAC3BxF,OAAQ,oBACR2D,WAAY,UACZ5D,cAAe,cACfqD,SAAU,qCAON,SAAUqC,GAAsB5N,G,cAC9B6N,EAAc,kBAAkCC,EAAA,iBAChDjJ,EAAY,kBAAgCgJ,EAAY5H,MAC5D2G,GAAA,eAA+B5M,EAAM6B,GAAIgM,EAAY5H,KAAKpE,KACtD4D,EAAW,kBAAqCmH,GAAA,uBAAuC5M,EAAM6B,KAC7FkM,EAAc,kBAAqCF,EAAY5H,MACnE+H,GAAA,WAA6BH,EAAY5H,KAAKgI,WAAY1F,EAAA,YACtDnC,EAAS,kBAA+CwG,GAAA,qBAAqC5M,EAAM6B,KACnG8I,EAAS,kBAA6BuD,EAAA,YAEtCC,EAA0C,QAA7B,EAAc,QAAd,EAAAtJ,EAAUoB,YAAI,eAAEmI,qBAAa,eAAEC,SAE5CpC,GAAW,UACT5C,GAAmB,EAAAC,EAAA,KAAnBD,eAOR,SAASiC,EAAcvF,EAAef,EAAuBqG,GAC3D,IAAMiD,EAAgB,CACpBzM,GAAImD,EAAMnD,GACVgL,aAAc,GAGVF,EAAUtB,EACZuB,GAAA,qBAAqC,CAAC7G,EAAQlE,IAAKmD,EAAMnD,GAAI7B,EAAM6B,IAAI,WACvEkG,EAAA,gBAA8BuG,EAAe,OAAF,wBACtCX,IAAoB,CACvB1F,WAAY,iBAEhB,IACE2E,GAAA,0BAA0C,CAAC7G,EAAQlE,IAAKmD,EAAMnD,GAAI7B,EAAM6B,IAAI,WAC5EkG,EAAA,gBAA8BuG,EAAe,OAAF,wBACtCX,IAAoB,CACvB1F,WAAY,kBAEhB,IAEF,UAAagE,EAAUU,EACzB,CAYA,OAtCA,EAAA4B,EAAA,GAAmB,CACjBrH,MAAO,GAAU,YAAa,CAAEsH,cAA6B,QAAd,EAAA3J,EAAUoB,YAAI,eAAEd,UAEjE,EAAAsJ,GAAA,GAAyB5J,GAoCtBA,EAAUoB,OACM,QAAb,EAAAR,EAASQ,YAAI,eAAEA,QACJ,QAAX,EAAAG,EAAOH,YAAI,eAAEA,OACb0E,EAAO1E,MACP8H,EAAY9H,KAKhB,gBAACyI,GAAA,EAAe,CACd7J,UAAWA,EAAUoB,KACrB4H,YAAaA,EAAY5H,KACzB0I,YAvBJ,SAAqBC,EAAoBC,EAAuBC,GAC9D,IAAIX,EAAJ,CAEA,IAAMxB,EAAUiC,EACZhC,GAAA,eACAA,GAAA,iBAEJ,UAAaX,EAAUU,EAAQ9H,EAAUoB,KAAM4I,EAAWC,GALlD,CAMV,EAgBIC,UAAU,WACVZ,WAAYA,GAEV,W,gBACA,OAAIA,EAEA,gCACE,gBAACpO,EAAA,EAAc,CAACG,KAAK,cACrB,gBAACsE,EAAmC,QAInB,QAAnB,EAAa,QAAb,EAAAiB,EAASQ,YAAI,eAAEA,YAAI,eAAEzE,QAErB,gBAACwK,GAAuB,CACtBnH,UAAWA,EAAUoB,KACrBR,SAAUA,EAASQ,KACnBG,OAAQA,EAAOH,KAAKA,KACpBqF,cAAeA,EACfX,OAAQA,EAAO1E,KACfvB,sBAA4C,QAAtB,EAAgB,QAAhB,EAAAqJ,EAAY9H,YAAI,eAAEA,YAAI,eAAEzE,QAC9CsC,eAAgBuF,EAAeoC,EAAA,eAC/BjB,SAAU2D,IAMd,gBAAC1J,EAAiC,CAChCI,UAAWA,EAAUoB,KACrBnB,mBAAoB,GAAU,sBAC9BJ,sBAA4C,QAAtB,EAAgB,QAAhB,EAAAqJ,EAAY9H,YAAI,eAAEA,YAAI,eAAEzE,QAC9CsC,eAAgBuF,EAAeoC,EAAA,gBAGrC,CAhCE,IAVG,gBAAC4B,GAA8B,KA6C1C,C","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms/empty-state/ClassroomsNoStudentsState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/ClassroomGroupPill.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/manage-classroom-student-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/ManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/partial-manage-classroom-students.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-students/ClassroomStudentsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text} \n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\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 { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\ninterface ClassroomsNoStudentsStateProps {\n canManageUsers: boolean;\n isRostering?: boolean;\n}\n\nexport function ClassroomsNoStudentsState(props: ClassroomsNoStudentsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='noStudentsHeading' /></EmptyState.Heading>\n <EmptyState.Info className={`w-33 ${!props.canManageUsers ? 'mb-0' : ''}`}>\n <Text phrase='noStudentsInfo' />\n </EmptyState.Info>\n\n {props.canManageUsers && !props.isRostering && (\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'noStudentsCta')}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STUDENTS\n }}\n />\n )}\n {!props.canManageUsers && !props.isRostering && (\n <EmptyState.Info><Text phrase='askAdmin' /></EmptyState.Info>\n )}\n {props.isRostering && (\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\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 { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsNoStudentsState } from 'apps/classrooms/views/classrooms/empty-state/ClassroomsNoStudentsState';\n\nconst namespace = 'classrooms.manageClassroomStudentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STUDENT_ENGAGEMENT_IDEAS_LINK = 'https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf';\nconst ROSTERING_KB_ARTICLE_URL = '';\n\ninterface ManageClassroomStudentsEmptyStateProps {\n classroom: Classroom;\n classroomIdeasText: string;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n}\n\nexport function RosteredClassroomStudentsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2' ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n <a className='btn btn-link info-link font-semibold' href={ROSTERING_KB_ARTICLE_URL} target='_blank'>\n {getPhrase('rosteringCta')}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomStudentsEmptyState(props: ManageClassroomStudentsEmptyStateProps): JSX.Element {\n if (props.schoolHasNoStudents)\n return <ClassroomsNoStudentsState canManageUsers={props.canManageUsers} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='emptyStateInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addStudents')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [props.classroom.id]\n }}\n />\n\n <a className='btn btn-link info-link font-semibold' href={STUDENT_ENGAGEMENT_IDEAS_LINK} target='_blank'>\n {props.classroomIdeasText}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\n\ninterface ClassroomGroupProps {\n group: ClassroomGroup;\n}\n\nexport function ClassroomGroupPill(props: ClassroomGroupProps): JSX.Element {\n if (!props.group)\n return <></>;\n\n return (\n <div className={`classroom-pill text-white bg-${mapColourToBsVariant(props.group.metadata?.colour)}`}>\n {props.group.name}\n </div>\n );\n}\n\ninterface ClassroomGroupExpanderProps {\n count: number;\n onClick: () => void;\n}\n\nexport function ClassroomGroupExpander(props: ClassroomGroupExpanderProps): JSX.Element {\n if (!props.count)\n return <></>;\n\n return (\n <DivButton onClick={props.onClick} className={`classroom-pill bg-white border border-dark`}>\n +{props.count}\n </DivButton>\n );\n}","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { PropsWithAnalyticsOptions, User } from 'libs/shared/interfaces';\nimport { Classroom, ClassroomGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nconst namespace = 'classrooms.classroomGroupDropdown';\n\nconst getNewGroupAppLink = (id: string, students: User[]) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id],\n params: {\n addStudents: students.map(s => s.id)\n }\n});\n\nconst getCheckedStudentsForGroup = (students: User[], group: ClassroomGroup) => {\n const studentsInGroup = students.filter(student => {\n return group.users.data.find(u => u.id.toString() === student.id.toString());\n });\n\n return studentsInGroup.length;\n};\n\ntype ClassroomGroupDropdownProps = PropsWithAnalyticsOptions<{\n id: string;\n classroom: Classroom;\n selectedStudents: User[];\n groups: ClassroomGroup[];\n onSelectGroup: (group: ClassroomGroup, toggleOn?: boolean) => void;\n preselections?: ClassroomGroup[];\n\n alignRight?: boolean;\n disabled?: boolean;\n disabledTooltips?: string;\n}>;\n\nClassroomGroupDropdown.defaultProps = {\n preselections: []\n};\n\nexport function ClassroomGroupDropdown(props: ClassroomGroupDropdownProps): JSX.Element {\n const { onToggleItem, isChecked } = useBulkCheckboxManager(props.groups, {\n preselectedIds: props.preselections.map(s => s.id)\n });\n\n function onChange(group: ClassroomGroup): void {\n const shouldAdd = !isChecked(group.id);\n props.onSelectGroup(group, shouldAdd);\n\n onToggleItem(group.id);\n }\n\n function onClickCreateNewGroup(): void {\n if (props.disabled)\n return;\n\n AnalyticsHelper.logUserAction({}, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup\n }));\n }\n\n React.useEffect(() => {\n // On each passthrough, validate that the checkbox states are valid\n // This is needed because the group/student state is managed in 2 separate places on the same page\n props.groups.forEach(g => {\n const totalCheckedForGroup = getCheckedStudentsForGroup(props.selectedStudents, g);\n\n // Validate if unchecked checkbox should be checked\n if (!!totalCheckedForGroup && totalCheckedForGroup === props.selectedStudents.length && !isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n\n // Validate if checked checkbox should be unchecked\n if (!totalCheckedForGroup && isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n });\n });\n\n const buttonClasses = 'me-2 d-inline-block svg-container sm';\n\n const dropdownProps: HashObject = {\n align: props.alignRight ? 'end' : 'start'\n };\n\n /**\n * This prop is applied like this so that when `props.disabled` it false, the prop is omitted altogether.\n * This is because we want `react-bootstrap` to control the open state, and if we used the `show` prop\n * at all times we'd be preventing that.\n */\n if (props.disabled)\n dropdownProps.show = false;\n\n return (\n <Dropdown {...dropdownProps}>\n <Dropdown.Toggle\n as='div'\n id={props.id}\n className={`${props.disabled ? 'text-light' : 'cursor-pointer'} ${buttonClasses} no-caret`}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Group}\n title={props.disabled ? props.disabledTooltips : LanguageService.getPhrase(namespace, 'addToGroupTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n tooltipSpanHackClassName=''\n />\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {!!props.groups?.length && (\n <div className='px-2 border-bottom mb-1'>\n <p className='mb-0'><Text namespace={namespace} phrase='addToGroup' /></p>\n <ul className='list-unstyled pe-3'>\n {props.groups.map(group => (\n <li key={group.id} className='d-flex align-items-center bg-white my-1'>\n <Checkbox\n id={`${props.id}:${group.id}`}\n checked={isChecked(group.id)}\n onChange={() => onChange(group)}\n indeterminate={!!getCheckedStudentsForGroup(props.selectedStudents, group)}\n />\n <ClassroomGroupPill group={group} />\n </li>\n ))}\n </ul>\n </div>\n )}\n <AppLink\n onClick={onClickCreateNewGroup}\n appLink={getNewGroupAppLink(props.classroom.id, props.selectedStudents)}\n className={props.disabled ? 'disabled' : 'text-nowrap d-flex align-items-center px-2'}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} />\n <Text namespace={namespace} phrase='createNew' />\n </AppLink>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"rfVnC\",\"name\":\"RYLWZ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { ClassroomGroup, Config } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ClassroomGroupExpander, ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nimport styles from './manage-classroom-student-item.scss';\n\ntype GroupVisibilityMapping = { [id: string]: boolean };\n\nconst namespace = 'classrooms.manageClassroomStudentItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getEditStudentAppLink = (id: string) => ({\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.EDIT_USER,\n args: [id],\n params: { userType: UserGroup.Learner }\n});\n\nconst getRemoveStudentsAppLink = (studentId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroomId],\n params: {\n studentIds: [studentId]\n }\n});\n\ninterface ManageClassroomStudentItemProps {\n classroom: Classroom;\n student: User;\n classroomGroups: ClassroomGroup[];\n selectedGroups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onToggleCheckbox: () => void;\n checked: boolean;\n readOnly?: boolean;\n readOnlyTooltip?: string;\n}\n\nexport function ManageClassroomStudentItem(props: ManageClassroomStudentItemProps): JSX.Element {\n const [ isComputingTruncation, setIsComputingTruncation ] = React.useState(false);\n const [ hasExpandedGroups, setHasExpandedGroups ] = React.useState(false);\n\n // Maps a group to it's visibility state.\n const [ groupVisibilityMapping, setGroupVisibilityMapping ] = React.useState<GroupVisibilityMapping>({});\n\n const groupListRef = React.useRef<HTMLDivElement>(null);\n const expanderRef = React.useRef<HTMLDivElement>(null);\n\n const { hasPermissions } = usePermissions();\n\n // Every time the selected groups array changes, we want to re-compute which groups should be truncated\n React.useEffect(() => {\n renderAllGroups();\n\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n setIsComputingTruncation(true);\n }, [props.selectedGroups.length]);\n\n function onResize(): void {\n renderAllGroups();\n setIsComputingTruncation(true);\n }\n\n const throttledResizeListener = FunctionHelper.throttle(onResize, 300);\n\n useResizeListener(() => {\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n throttledResizeListener();\n });\n\n /**\n * This iterates through each group element, and detects if any of them don't\n * fit on the first row of items. The elements that don't will be hidden.\n */\n React.useEffect(() => {\n if (!groupListRef.current || !expanderRef.current || !isComputingTruncation)\n return;\n\n const firstGroupPill = groupListRef.current.firstElementChild as HTMLDivElement;\n if (!firstGroupPill) return;\n\n const topRowHeight = firstGroupPill.getBoundingClientRect().y;\n\n const nextGroupVisibilityMapping: { [id: string]: boolean } = {};\n\n /**\n * Here we're checking if the y-coordinate of any groups\n * don't match the y-coordinate of the first group (which should\n * always be on the first row). This way we know if they should be\n * hidden or not.\n */\n let lastVisibleId: string;\n for (const child of groupListRef.current.children) {\n if (child.id) {\n nextGroupVisibilityMapping[child.id] = child.getBoundingClientRect().y === topRowHeight;\n lastVisibleId = nextGroupVisibilityMapping[child.id] ? child.id : lastVisibleId;\n }\n }\n\n // If the expander button has also wrapped, we hide the last element that we were going to make visible.\n if (expanderRef.current.getBoundingClientRect().y !== topRowHeight)\n nextGroupVisibilityMapping[lastVisibleId] = false;\n\n setGroupVisibilityMapping(nextGroupVisibilityMapping);\n setIsComputingTruncation(false);\n }, [isComputingTruncation]);\n\n function onClickShowAllGroups(): void {\n setHasExpandedGroups(true);\n renderAllGroups();\n }\n\n // Updates the group visibility mapping to display all groups\n function renderAllGroups(): void {\n setGroupVisibilityMapping(props.selectedGroups.reduce((acc, group) => {\n acc[group.id] = true;\n return acc;\n }, {} as GroupVisibilityMapping));\n }\n\n // Returns the number of groups that are invisible\n function getInvisibleGroupCount(): number {\n return Object.keys(groupVisibilityMapping).reduce((count, groupId) => {\n if (!groupVisibilityMapping[groupId])\n count++;\n \n return count;\n }, 0);\n }\n\n function getActions(): ActionOptions[] {\n const actions: ActionOptions[] = [];\n\n if (hasPermissions(PermissionName.ManageUsers))\n actions.push({\n label: getPhrase('editStudent'),\n appLink: getEditStudentAppLink(props.student.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : '',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.student.id }, {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n actions.push({\n label: getPhrase('removeStudent'),\n appLink: getRemoveStudentsAppLink(props.student.id, props.classroom.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : 'text-danger',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.classroom.id, userId: props.student.id }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n <Checkbox\n id={props.student.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.student.name, props.student.surname)}\n imageUrl={props.student.avatar?.url}\n />\n </div>\n\n <p className={`me-2 ${styles.name} text-truncate mb-0 text-nowrap`}>{props.student.name} {props.student.surname}</p>\n\n <div\n // When we are computing the truncation, we want all group elements to be rendered but invisible.\n className={`${isComputingTruncation ? 'invisible' : ''} me-auto d-flex flex-wrap mt-n1`}\n ref={groupListRef}\n >\n {props.selectedGroups.map(group => {\n if (!groupVisibilityMapping[group.id]) // Don't render any groups that are marked as hidden\n return <React.Fragment key={group.id}></React.Fragment>;\n\n return (\n <div key={group.id} className='me-1 mt-1' id={group.id}>\n <ClassroomGroupPill group={group} />\n </div>\n );\n })}\n <div ref={expanderRef} className='me-1 mt-1'>\n <ClassroomGroupExpander count={getInvisibleGroupCount()} onClick={onClickShowAllGroups} />\n </div>\n </div>\n\n <ClassroomGroupDropdown\n id={`add-group-${props.student.id}`}\n classroom={props.classroom}\n groups={props.classroomGroups}\n selectedStudents={[props.student]}\n preselections={props.selectedGroups}\n onSelectGroup={(group, toggleOn) => props.onToggleGroup(props.student, group, toggleOn)}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudentListItem }}\n alignRight\n disabled={props.readOnly}\n disabledTooltips={props.readOnlyTooltip}\n />\n\n <MoreActions\n actions={getActions()}\n actionsDropdownClassName='btn'\n />\n </div>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config } from 'libs/shared/interfaces';\nimport { ClassroomGroup, User, UserCollection } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ManageClassroomStudentItem } from 'apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nimport { ManageClassroomStudentsEmptyState } from './empty-state/ManageClassroomStudentsEmptyState';\n\nconst namespace = 'classrooms.manageClassroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ManageClassroomStudentsProps {\n classroom: Classroom;\n students: UserCollection;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n groups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomStudents(props: ManageClassroomStudentsProps): JSX.Element {\n const { classroom, students, groups } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const CheckboxHelper = useBulkCheckboxManager(students.data);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n const bulkPreselections = groups.filter(group => {\n if (!group.users?.data?.length)\n return false;\n\n let allStudentsFound = true;\n let index = 0;\n\n const studentIds = CheckboxHelper.getSelected();\n\n if (!studentIds.length)\n return;\n\n do {\n const id = studentIds[index];\n if (!group.users.data.find((stu: any) => stu.id.toString() === id.toString()))\n allStudentsFound = false;\n\n index++;\n } while (index < studentIds.length);\n\n return allStudentsFound;\n });\n\n function onClickAddStudents(): void {\n AnalyticsHelper.logUserAction({ id: classroom.id }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [classroom.id]\n });\n }\n\n function onClickBulkRemoveStudents(): void {\n if (!selectionCount || props.readOnly)\n return;\n\n const studentIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: classroom.id,\n studentCount: studentIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroom.id],\n params: {\n studentIds\n }\n });\n }\n\n function onSelectGroup(group: ClassroomGroup, shouldAdd: boolean): void {\n const selectedStudentIds = CheckboxHelper.getSelected();\n\n const request = shouldAdd ? ClassroomRequests.addStudentsToGroup : ClassroomRequests.removeStudentsFromGroup;\n\n Flight.fetch(\n dispatch,\n request(selectedStudentIds, group.id, classroom.id, () => {\n AnalyticsHelper.logUserAction({\n id: group.id,\n studentCount: selectedStudentIds.length\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudents\n });\n\n alerts.success(getPhrase('addSuccess', { groupName: group.name, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('addError', { groupName: group.name, escapeText: true }));\n })\n );\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!students.data?.length) {\n return (\n <ManageClassroomStudentsEmptyState\n classroom={props.classroom}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={props.schoolHasNoStudents}\n canManageUsers={props.canManageUsers}\n />\n );\n }\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n <Checkbox\n id='manage-classroom-students-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <ClassroomGroupDropdown\n id='bulk-add-group'\n classroom={classroom}\n selectedStudents={CheckboxHelper.getSelected().map(id => {\n return props.students.data.find(s => s.id.toString() === id.toString());\n })}\n groups={groups}\n onSelectGroup={onSelectGroup}\n disabled={!selectionCount || props.readOnly}\n preselections={bulkPreselections}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudents }}\n disabledTooltips={props.readOnly && LanguageService.getPhrase(namespace, 'disabledByRostering')}\n />\n <DivButton\n className={`me-auto ${!selectionCount || props.readOnly ? 'text-light cursor-default' : ''}`}\n onClick={onClickBulkRemoveStudents}\n >\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </Tooltip>\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n onClick={onClickAddStudents}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark'\n disabled={props.readOnly}\n >\n <Text namespace={namespace} phrase='addStudent' />\n </IconButton>\n </Tooltip>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {students.data.map(student => (\n <li key={student.id}>\n <ManageClassroomStudentItem\n classroom={classroom}\n student={student}\n classroomGroups={props.groups}\n config={props.config}\n selectedGroups={props.groups.filter(g => g.users.data.find(u => u.id === student.id))}\n checked={CheckboxHelper.isChecked(student.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(student.id)}\n onToggleGroup={props.onToggleGroup}\n readOnly={props.readOnly}\n readOnlyTooltip={props.readOnly ? getPhrase('disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"YrP_G\",\"avatar\":\"droqZ\",\"checkbox\":\"pJf6R\",\"actionIcon\":\"MSvzY\",\"addStudents\":\"j62jt\",\"studentName\":\"gorcb\",\"group\":\"IFmvc\",\"sm\":\"pOcvk\",\"lg\":\"SdQ90\",\"moreActions\":\"S7p4K\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-students.scss';\n\nexport const PartialManageClassroomStudents = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`mx-4 partial-loading-background ${styles.checkbox}`} />\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new students button */}\n <div className={`partial-loading-background ${styles.addStudents}`} />\n </div>\n\n {/* Students list */}\n <ul className='striped-list list-unstyled'>\n {Array(20).fill(null).map((student, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Student name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.studentName}`} />\n </div>\n\n {/* Groups list. Randomly renders either 1 or 2 groups. Group widths are randomly generated */}\n <div className='me-auto d-flex'>\n {Math.random() > 0.5\n ? (\n <>\n <div className={`partial-loading-background rounded-pill me-1 ${styles.group} ${styles.lg}`} />\n <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n </>\n ) : <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n }\n </div>\n\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* More actions */}\n <div className={`partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, ClassroomGroup, ClassroomGroupCollection, Config, CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\n\nimport { ManageClassroomStudentsEmptyState, RosteredClassroomStudentsEmptyState } from 'apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState';\nimport { ManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/ManageClassroomStudents';\nimport { PartialManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'classrooms.classroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseAnalyticsOptions = {\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudentListItem\n};\n\ninterface ClassroomStudentsViewProps {\n id: string;\n}\n\nexport function ClassroomStudentsView(props: ClassroomStudentsViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const students = Flight.useBasicFetch<UserCollection>(ClassroomRequests.getClassroomStudents(props.id));\n const allStudents = Flight.useBasicFetch<UserCollection>(currentUser.data &&\n UserManagerRequests.getUsers(currentUser.data.customerId, UserGroup.Learner));\n const groups = Flight.useBasicFetch<ClassroomGroupCollection>(ClassroomRequests.getClassroomGroups(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n const dispatch = useDispatch();\n const { hasPermissions } = usePermissions();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n function onToggleGroup(student: User, group: ClassroomGroup, toggleOn: boolean): void {\n const analyticsData = {\n id: group.id,\n studentCount: 1\n };\n\n const request = toggleOn\n ? ClassroomRequests.addStudentsToGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Associate\n });\n })\n : ClassroomRequests.removeStudentsFromGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate\n });\n });\n\n Flight.fetch(dispatch, request);\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (\n !classroom.data\n || !students.data?.data\n || !groups.data?.data\n || !config.data\n || !allStudents.data\n )\n return <PartialManageClassroomStudents />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='students'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered)\n return (\n <>\n <RosteringAlert type='classroom'/>\n <RosteredClassroomStudentsEmptyState />\n </>\n );\n\n if (students.data?.data?.length) {\n return (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={groups.data.data}\n onToggleGroup={onToggleGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n readOnly={isRostered}\n />\n );\n }\n\n return (\n <ManageClassroomStudentsEmptyState\n classroom={classroom.data}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n })()}\n </ClassroomLayout>\n );\n}\n"],"names":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","usePrevious","value","ref","mapColourToBsVariant","groupColour","namespace","ClassroomsNoStudentsState","EmptyState","src","ImageUrls","Text","phrase","canManageUsers","isRostering","LanguageService","appLink","application","action","href","target","STUDENT_ENGAGEMENT_IDEAS_LINK","ROSTERING_KB_ARTICLE_URL","RosteredClassroomStudentsEmptyState","ManageClassroomStudentsEmptyState","schoolHasNoStudents","icon","args","classroom","classroomIdeasText","ClassroomGroupPill","group","metadata","colour","name","ClassroomGroupExpander","count","DivButton","onClick","getNewGroupAppLink","students","params","addStudents","s","getCheckedStudentsForGroup","filter","student","users","data","u","ClassroomGroupDropdown","groups","preselections","g","totalCheckedForGroup","selectedStudents","dropdownProps","align","alignRight","disabled","show","Dropdown","as","SvgContainer","svgName","title","disabledTooltips","tooltipPlacement","tooltipSpanHack","tooltipSpanHackClassName","key","Checkbox","checked","onChange","shouldAdd","onSelectGroup","indeterminate","AppLink","AnalyticsHelper","analyticsOptions","actionType","workflowPhase","entity","defaultProps","getEditStudentAppLink","userType","UserGroup","getRemoveStudentsAppLink","studentId","classroomId","studentIds","ManageClassroomStudentItem","isComputingTruncation","setIsComputingTruncation","hasExpandedGroups","setHasExpandedGroups","groupVisibilityMapping","setGroupVisibilityMapping","groupListRef","expanderRef","hasPermissions","usePermissions","renderAllGroups","selectedGroups","actions","throttledResizeListener","FunctionHelper","reduce","acc","firstGroupPill","firstElementChild","lastVisibleId","topRowHeight","getBoundingClientRect","y","nextGroupVisibilityMapping","children","child","onToggleCheckbox","readOnly","Avatar","imageCdnUrl","config","initials","UserHelper","surname","imageUrl","avatar","url","Object","groupId","classroomGroups","toggleOn","onToggleGroup","location","readOnlyTooltip","PermissionName","push","label","tooltip","userId","descriptor","actionsDropdownClassName","ManageClassroomStudents","dispatch","alerts","CheckboxHelper","selectionCount","bulkPreselections","allStudentsFound","index","stu","edgeToEdge","selectedStudentIds","request","ClassroomRequests","studentCount","success","groupName","escapeText","error","Tooltip","spanHack","IconButton","PartialManageClassroomStudents","numItems","PartialPillTabSelector","fill","Math","random","baseAnalyticsOptions","ClassroomStudentsView","currentUser","UserRequests","allStudents","UserManagerRequests","customerId","ConfigRequests","isRostered","_integrations","rostered","analyticsData","useSetPageMetadata","classroomName","useHandleClassroomErrors","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","activeTab"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3012-b5208d6981-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/manage-classroom-teacher-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/partial-manage-classroom-teachers.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-teachers/ClassroomTeachersView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text} \n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\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 { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.manageClassroomTeachersEmptyState';\n\ninterface ManageClassroomTeachersEmptyStateProps {\n classroom: Classroom;\n}\n\nexport function RosteredClassroomTeachersEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n {/* todo add kb link */}\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomTeachersEmptyState(props: ManageClassroomTeachersEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n \n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addTeachers')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kTynd\",\"name\":\"UWi4G\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-teacher-item.scss';\n\nconst namespace = 'classrooms.manageClassroomTeacherItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getRemoveTeachersAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [teacherId]\n }\n});\n\nconst getAssignAsOwnerAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ASSIGN_AS_OWNER,\n args: [ classroomId, teacherId ]\n});\n\nconst getRevokeOwnershipAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REVOKE_OWNERSHIP,\n args: [ classroomId, teacherId ]\n});\n\ninterface ManageClassroomTeacherItemProps {\n classroom: Classroom;\n teacher: User;\n config: Config;\n onToggleCheckbox: () => void;\n checked: boolean;\n isOwner: (userId: string) => boolean;\n currentUser: CurrentUser;\n readOnly?: boolean;\n readonlyTooltip?: string;\n}\n\nexport function ManageClassroomTeacherItem(props: ManageClassroomTeacherItemProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const teacherIsAdmin = UserHelper.getUserRole(props.teacher) === UserRole.Admin;\n\n function getCanManageTeacher(): boolean {\n // Current user can perform any action on themselves\n if (props.currentUser.id === props.teacher.id)\n return true;\n\n // This permission allows total control over a classroom\n if (hasPermissions(PermissionName.ManageAllClassrooms))\n return true;\n\n // Regular teachers or owners cannot perform actions on admins in the classroom\n if (teacherIsAdmin)\n return false;\n\n return props.isOwner(props.currentUser.id);\n }\n\n const canManageTeacher = getCanManageTeacher();\n\n const actionDisabled = !canManageTeacher || props.readOnly;\n\n function getActions(): ActionOptions[] {\n // Non-owners cannot perform any actions on other classroom teachers\n if (!props.isOwner(props.currentUser.id))\n return [];\n\n const actions: ActionOptions[] = [];\n\n const disabledClassName = 'text-secondary disabled cursor-default';\n\n // Actions are different if the user item is for the current user\n const isManagingCurrentUser = props.currentUser.id === props.teacher.id;\n\n if (!isManagingCurrentUser) {\n if (props.isOwner(props.teacher.id)) {\n actions.push({\n order: 0,\n label: getPhrase('revokeOwnership'),\n appLink: getRevokeOwnershipAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Demote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRevokeOwnershipFromAdmin') : ''\n });\n } else {\n actions.push({\n order: 0,\n label: getPhrase('assignAsOwner'),\n appLink: getAssignAsOwnerAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Promote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotAssignAdminAsOwner') : ''\n });\n }\n }\n\n actions.push({\n order: 10,\n label: isManagingCurrentUser ? getPhrase('leaveClassroom') : getPhrase('removeTeacher'),\n appLink: getRemoveTeachersAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.classroom.id,\n userId: props.teacher.id\n },\n analyticsOptions: {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : 'text-danger',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRemoveAdmin') : ''\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n {props.isOwner(props.currentUser.id) && (\n <Checkbox\n id={props.teacher.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n )}\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.teacher.name, props.teacher.surname)}\n imageUrl={props.teacher.avatar?.url}\n />\n </div>\n\n <p className={`${styles.name} me-2 text-truncate mb-0 text-nowrap`}>{UserHelper.getFullName(props.teacher)}</p>\n\n {!!teacherIsAdmin && (\n <div className={`classroom-pill text-white bg-navy`}>\n <Text namespace={namespace} phrase='admin' />\n </div>\n )}\n\n {(!teacherIsAdmin && props.isOwner(props.teacher.id)) && (\n <div className={`classroom-pill text-white bg-indigo`}>\n <Text namespace={namespace} phrase='owner' />\n </div>\n )}\n\n <MoreActions\n actions={getActions()}\n className='ms-auto'\n actionsDropdownClassName='btn btn-link'\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ManageClassroomTeacherItem } from 'apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem';\n\nimport { ManageClassroomTeachersEmptyState } from './empty-state/ManageClassroomTeachersEmptyState';\n\nconst namespace = 'classrooms.manageClassroomTeachers';\n\ninterface ManageClassroomTeachersProps {\n classroom: Classroom;\n isOwner: (teacherId: string) => boolean;\n currentUser: CurrentUser;\n teachers: User[];\n config: Config;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomTeachers(props: ManageClassroomTeachersProps): JSX.Element {\n const CheckboxHelper = useBulkCheckboxManager(props.teachers);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n function onClickBulkRemoveTeachers(): void {\n if (!selectionCount || !props.isOwner(props.currentUser.id) || props.readOnly)\n return;\n\n const teacherIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n teacherCount: teacherIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomTeachers\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [props.classroom.id],\n params: {\n teacherIds\n }\n });\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.teachers?.length)\n return <ManageClassroomTeachersEmptyState classroom={props.classroom} />;\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n {props.isOwner(props.currentUser.id) && (\n <>\n <Checkbox\n id='manage-classroom-teachers-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <DivButton\n className={!selectionCount || props.readOnly ? 'me-auto text-light cursor-default' : 'me-auto'}\n onClick={onClickBulkRemoveTeachers}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n disabled={props.readOnly}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark ms-auto'\n appLink={props.readOnly\n ? null\n : {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n analyticsData={{ id: props.classroom.id }}\n analyticsOptions={{\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomTeachers\n }}\n >\n <Text namespace={namespace} phrase='addTeacher' />\n </IconButton>\n </Tooltip>\n </>\n )}\n </div>\n\n <ul className='striped-list list-unstyled'>\n {props.teachers.map(teacher => (\n <li key={teacher.id}>\n <ManageClassroomTeacherItem\n classroom={props.classroom}\n teacher={teacher}\n config={props.config}\n checked={CheckboxHelper.isChecked(teacher.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(teacher.id)}\n currentUser={props.currentUser}\n isOwner={props.isOwner}\n readOnly={props.readOnly}\n readonlyTooltip={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"FQwVf\",\"avatar\":\"mYQWy\",\"checkbox\":\"svGp0\",\"actionIcon\":\"rKbj_\",\"addTeachers\":\"qigWD\",\"teacherName\":\"SiD8n\",\"moreActions\":\"sAUZY\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-teachers.scss';\n\nexport const PartialManageClassroomTeachers = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`ms-2 me-4 partial-loading-background ${styles.checkbox}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new teachers button */}\n <div className={`partial-loading-background ${styles.addTeachers}`} />\n </div>\n\n {/* Teachers list */}\n <ul className='striped-list list-unstyled'>\n {Array(3).fill(null).map((teacher, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Teacher name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.teacherName}`} />\n </div>\n\n {/* More actions */}\n <div className={`ms-auto partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ManageClassroomTeachersEmptyState, RosteredClassroomTeachersEmptyState } from 'apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState';\nimport { ManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers';\nimport { PartialManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomTeachers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomTeachersViewProps {\n id: string;\n}\n\nexport function ClassroomTeachersView(props: ClassroomTeachersViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const owners = Flight.useBasicFetch<User[]>(ClassroomRequests.getClassroomOwners(props.id));\n const invitees = Flight.useBasicFetch<User[]>(\n currentUser.data?.customerId && ClassroomRequests.getClassroomInvitees(props.id, currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n const { isOwner: currentUserIsOwner } = useCheckClassroomPermissions(props.id);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n \n function isOwner(teacherId: string): boolean {\n if (teacherId === currentUser.data.id)\n return currentUserIsOwner;\n\n return owners.data.some(owner => owner.id.toString() === teacherId.toString());\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (!classroom.data || !invitees.hasCompleted || !owners.hasCompleted || !config.data)\n return <PartialManageClassroomTeachers />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='teachers'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered) {\n return (\n <>\n <RosteringAlert type='classroom'/>\n <RosteredClassroomTeachersEmptyState/>\n </>\n );\n }\n\n if (invitees.data?.length) {\n return (\n <ManageClassroomTeachers\n config={config.data}\n classroom={classroom.data}\n teachers={invitees.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly={isRostered}\n />\n );\n }\n\n return <ManageClassroomTeachersEmptyState classroom={classroom.data}/>;\n })()}\n\n </ClassroomLayout>\n );\n}\n"],"names":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","usePrevious","value","ref","namespace","RosteredClassroomTeachersEmptyState","EmptyState","src","ImageUrls","Text","phrase","href","target","LanguageService","ManageClassroomTeachersEmptyState","icon","appLink","application","action","args","classroom","getRemoveTeachersAppLink","teacherId","classroomId","params","teacherIds","getAssignAsOwnerAppLink","getRevokeOwnershipAppLink","ManageClassroomTeacherItem","hasPermissions","usePermissions","teacherIsAdmin","UserHelper","teacher","UserRole","canManageTeacher","currentUser","PermissionName","isOwner","actionDisabled","readOnly","Checkbox","checked","onChange","onToggleCheckbox","disabled","Avatar","imageCdnUrl","config","initials","name","surname","imageUrl","avatar","url","actions","disabledClassName","isManagingCurrentUser","push","order","label","analyticsData","analyticsOptions","actionType","entity","descriptor","workflowPhase","location","tooltip","readonlyTooltip","userId","getActions","actionsDropdownClassName","ManageClassroomTeachers","CheckboxHelper","teachers","selectionCount","edgeToEdge","indeterminate","DivButton","onClick","AnalyticsHelper","teacherCount","SvgContainer","svgName","title","tooltipPlacement","tooltipSpanHack","Tooltip","spanHack","IconButton","key","PartialManageClassroomTeachers","numItems","PartialPillTabSelector","fill","ClassroomTeachersView","UserRequests","data","ClassroomRequests","owners","invitees","customerId","ConfigRequests","dispatch","currentUserIsOwner","isRostered","_integrations","rostered","some","owner","useSetPageMetadata","classroomName","useHandleClassroomErrors","hasCompleted","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","request","activeTab"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/5595-3763b14d77-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/components/caret/Caret.tsx","file:///app/packages/libs/shared/src/components/caret/caret.scss","file:///app/packages/libs/shared/src/components/drag-drop-move/DragDropMoveWrapper.tsx","file:///app/packages/libs/shared/src/components/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.tsx","file:///app/packages/libs/shared/src/components/folder-list/FolderList.tsx","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/partial-folder-list.scss","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBuildBreadcrumbs.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseFetchAllChildFolders.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseHandleLibraryType.ts","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/LibraryFolderViewUtils.ts","file:///app/packages/projects/lite/src/apps/libraries/views/library/LibraryView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <> </>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n <>\n <span className='d-flex align-items-center'>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n \n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </span>\n </>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <div className='dropdown-menu dropdown-menu-end dropdown-menu-right' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <React.Fragment key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </React.Fragment>\n );\n }\n \n return (\n <React.Fragment key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </React.Fragment>\n );\n })\n }\n </div>\n </div>\n );\n}","import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={DateHelper.format(specialEvent.startDate, 'MMMM')}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block partial-loading-background rounded-circle overflow-hidden me-3`}>\n {props.logo?.url &&\n <LazyImage src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Small })} />}\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Small })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import React from 'react';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './caret.scss';\n\ntype CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n\nconst getDirectionClass = (direction: CaretDirection) => {\n switch (direction) {\n case 'up':\n return styles.up;\n case 'down':\n return styles.down;\n case 'right':\n return styles.right;\n case 'left':\n return styles.left;\n }\n};\n\ninterface CaretProps {\n direction?: CaretDirection;\n className?: string;\n}\n\nCaret.defaultProps = {\n direction: 'right'\n};\n\nexport function Caret(props: CaretProps): JSX.Element {\n return (\n <SvgContainer\n svgName={cvSvgLibrary.Caret}\n className={`${getDirectionClass(props.direction)} svg-container d-inline-block ${props.className}`}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"up\":\"JAT0R\",\"down\":\"ld41u\",\"left\":\"jZTRR\",\"right\":\"HHkPe\"};","import React from 'react';\nimport { useDraggable, UseDraggableArguments, useDroppable, UseDroppableArguments } from '@dnd-kit/core';\n\ninterface DragDropMoveWrapperProps extends React.PropsWithChildren {\n droppable?: UseDroppableArguments,\n draggable?: UseDraggableArguments\n dragStyle?: string;\n dropStye?: string;\n setIsDragging?: React.Dispatch<React.SetStateAction<boolean>>\n isDragging?: boolean;\n}\n\nexport function DragDropMoveWrapper(props: DragDropMoveWrapperProps) {\n const {\n active: dragActive,\n isDragging,\n attributes,\n listeners,\n setNodeRef: draggableRef\n } = useDraggable({ ...props.draggable, disabled: !props.draggable });\n const {\n isOver,\n over,\n active: dropActive,\n setNodeRef: droppableRef\n } = useDroppable({ ...props.droppable, disabled: !props.droppable });\n\n React.useEffect(() => {\n const data = props.draggable?.data;\n if (Array.isArray(data) && data?.includes(dragActive?.id.toString())) {\n props.setIsDragging?.(isDragging);\n } else {\n props.setIsDragging?.(false);\n }\n }, [isDragging]);\n\n function isSelected() {\n const data = props.draggable?.data;\n return Array.isArray(data) && data.includes(props.draggable.id.toString());\n }\n\n return (\n <div\n ref={draggableRef}\n {...listeners}\n {...attributes}\n className={`${props.draggable ? 'cursor-grab' : 'cursor-default'} ${(isDragging && dragActive) || (props.isDragging && isSelected()) ? props.dragStyle : null}`}\n >\n <div\n ref={droppableRef}\n className={(dropActive && isOver && dragActive?.id !== over?.id) ? props.dropStye : null}\n >\n {props.children}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolderView(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolderView}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFolderHeading\":\"dhbsL\",\"partialFolderThumbnail\":\"CI9vk\",\"partialFolderName\":\"l0Nll\"};","import React from 'react';\n\nimport styles from './partial-folder-list.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n \n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number; }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}> </div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}","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 { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { Folder, MasterNestedObject } from 'libs/shared/interfaces';\n\ninterface BuildOptions {\n folderId: string;\n firstItem?: Breadcrumb;\n lastItem?: Breadcrumb;\n getAppLink: (folder: MasterNestedObject<Folder>) => Core.AppLink;\n}\n\nexport function useBuildBreadcrumbs(options: BuildOptions): Breadcrumb[] {\n const { folderId, firstItem, lastItem, getAppLink } = options;\n\n const parentTree = Flight.useBasicFetch<MasterNestedObject<Folder>>(LibraryRequests.folderParentTree(folderId));\n\n if (!parentTree.data?.children?.length)\n return [];\n\n const searchStack: {\n node: MasterNestedObject<Folder>,\n path: MasterNestedObject<Folder>[]\n }[] = parentTree.data.children.map(c => ({ node: c, path: [c]}));\n\n let breadcrumbs: Breadcrumb[] = [];\n\n while (searchStack.length) {\n const { node, path } = searchStack.pop();\n \n if (node.data.id.toString() === folderId.toString())\n breadcrumbs = path.map(object => ({\n name: object.data.name,\n appLink: getAppLink(object)\n }));\n\n if (node.children)\n searchStack.push(...node.children.map(c => ({ node: c, path: [ ...path, c ]})));\n }\n\n if (firstItem) breadcrumbs.unshift(firstItem);\n if (lastItem) breadcrumbs.push(lastItem);\n\n breadcrumbs[breadcrumbs.length - 1].active = true;\n\n return breadcrumbs;\n}\n ","import { Flight } from 'libs/common/flight';\n\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult, useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport function useFetchAllChildFolders(parentId?: string): SelectAllPagesResult<Folder> {\n const fetch = Flight.useGetFetch();\n\n function getRequest(cursor?: string): Flight.Request {\n return LibraryRequests.childFolders(parentId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetch(getRequest(cursor));\n }\n\n useFetchAll(!!parentId && getRequest, !!parentId && fetchNext);\n\n return (useSelectAllPages<Folder>(!!parentId && ((cursor?: string) => getRequest(cursor).key)));\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { MasterObjectTypes } from 'libs/shared/enums/MasterObjectTypes';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { Library } from 'libs/shared/interfaces';\n\n/**\n * This hook prevents the libraries UI to be used for anything \n * other than customer libraries i.e Hosted, Exchange, Workspace etc\n */\nexport function useHandleLibraryType(request: Flight.Response<Library>): void {\n React.useEffect(() => {\n if (!request.hasCompleted || request.hasError)\n return;\n\n if (request.data.type !== MasterObjectTypes.CustomLibrary)\n Core.ErrorHelper.throw(new NotFoundError());\n }, [request.hasCompleted]);\n}","import { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { useBuildBreadcrumbs } from 'libs/shared/hooks/useBuildBreadcrumbs';\nimport { Folder, Library, VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getVideoAppLink(video: VideoTypes): Core.AppLink {\n switch (video.typeId) {\n case MasterType.Clip:\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ video.id, TextHelper.slugify(video.name) ]\n };\n case MasterType.Interactive:\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ video.id, TextHelper.slugify(video.name) ]\n };\n default:\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.id, TextHelper.slugify(video.name) ]\n };\n }\n}\n\nexport function getFolderAppLink(libraryId: string, folder: Folder, sort: string): Core.AppLink {\n if (!libraryId || !folder)\n return null;\n\n return {\n application: AppChannels.LIBRARIES,\n action: Actions.Libraries.FOLDER,\n args: [ libraryId, folder.id, TextHelper.slugify(folder.name) ],\n params: {\n sort\n }\n };\n}\n\nexport function getFolderBgColourClass(folder: Folder | Library): string {\n let charCode = 0;\n\n for (let i = 0; i < folder.name?.length ?? 0; i++) {\n charCode += folder.name.charCodeAt(i);\n }\n\n return BG_COLOUR_CLASS_NAMES[charCode % BG_COLOUR_CLASS_NAMES.length];\n}\n\nexport function useGetFolderBreadcrumbs(folderId: string, library: Library, sort: VideoSortType): Breadcrumb[] {\n return useBuildBreadcrumbs({\n folderId: library && folderId,\n getAppLink: object => getFolderAppLink(library.id, object.data, sort),\n firstItem: {\n name: library?.name,\n appLink: {\n application: AppChannels.LIBRARIES,\n action: Actions.Libraries.LIBRARY,\n args: [ library?.id, TextHelper.slugify(library?.name) ]\n }\n }\n });\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, SearchSourceDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { SourceFilterOptions } from 'libs/shared/apps/search/interfaces';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Folder, Library } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useFetchAllChildFolders } from 'apps/libraries/hooks/UseFetchAllChildFolders';\nimport { useHandleLibraryType } from 'apps/libraries/hooks/UseHandleLibraryType';\nimport { getFolderAppLink, getFolderBgColourClass } from 'apps/libraries/views/library-folder/LibraryFolderViewUtils';\n\nconst namespace = 'libraries.library';\n\ninterface LibraryViewProps {\n id: string;\n sort?: VideoSortType;\n}\n\nexport function LibraryView(props: LibraryViewProps): JSX.Element {\n const { focusSearchBar } = useFocusSearchBar();\n\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries([ 'customLibrary', 'sharedLibrary' ]));\n const library = Flight.useBasicFetch<Library>(LibraryRequests.library(props.id));\n const libraryFolders = useFetchAllChildFolders(library.data?.categoryTree?.id);\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id, props.sort);\n\n useSetPageMetadata({ title: library.data?.name });\n useHandleObjectError(library);\n useHandleLibraryType(library);\n\n return (\n <>\n {library.data\n ? (\n <BannerHeader\n heading={library.data.name}\n blockColourClass={getFolderBgColourClass(library.data)}\n logo={library.data.owner?.logo}\n />\n ) : <PartialBannerHeader />\n }\n\n {(() => {\n if (!libraryFolders?.items)\n return <div className='mt-3 px-3'><PartialFolderList count={10} /></div>;\n\n if (!libraryFolders.items.length)\n return <></>;\n\n return (\n <div className='mt-3 px-2'>\n <FolderList\n folders={libraryFolders.items}\n getAppLink={(f: Folder) => getFolderAppLink(props.id, f, sort)}\n expandFolders\n extraButtons={\n <IconButton\n svgName={cvSvgLibrary.Search}\n appLink={{\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n source: SourceFilterOptions.School\n }\n }}\n className='btn btn-outline-dark mb-3 me-2 d-none d-sm-inline-block'\n onClick={focusSearchBar}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.Libraries,\n actionType: UserAction.Click,\n descriptor: SearchSourceDescriptor.School\n }}\n >\n <Text namespace={namespace} phrase='searchLibrary' options={{ smartCount: libraries.data?.length ?? 1 }} />\n </IconButton>\n }\n />\n </div>\n );\n })()}\n </>\n );\n}\n"],"names":["namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","GenericCalendarDate","AppLink","appLink","getAppLink","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","Actions","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","length","map","idx","key","href","onClick","tooltip","showSpinner","openInNewTab","disabled","iconButton","sortComponent","dropdownToggleClassName","actionsDropdownClassName","dropdownToggleSvgSize","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","id","size","showDivider","undefined","group","defaultProps","S","PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","BackButton","textShadow","backToName","color","extraClasses","backPhrase","colorClass","textShadowClass","RATIO","getSizeClass","heading","BannerHeader","banner","imageCdnUrl","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","backgroundImage","DetailsComponent","detailsComponent","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","calendarTheme","Text","phrase","LazyImage","src","container","prevProps","nextProps","PartialBannerHeader","getDirectionClass","direction","Caret","DragDropMoveWrapper","data","draggable","dragActive","active","isDragging","attributes","listeners","draggableRef","setNodeRef","droppable","isOver","over","dropActive","droppableRef","Array","isArray","includes","toString","setIsDragging","ref","dragStyle","dropStye","children","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","getFolderActions","drag","drop","name","BaseImage","imageType","imageClassName","ImageFallback","EXPANDED_FOLDERS_KEY","FolderList","breakpoints","LocalStorageHelper","_hasExpandedFolders","setHasExpandedFolders","hasExpandedFolders","expandFolders","folderLimit","xl","lg","md","onToggleFolderView","displayableFolders","folders","slice","canToggleCollapsedView","showHeading","DivButton","options","count","extraButtons","f","PartialFolder","PartialFolderList","fill","_","i","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","useBuildBreadcrumbs","folderId","firstItem","lastItem","parentTree","searchStack","c","node","path","breadcrumbs","pop","object","unshift","useFetchAllChildFolders","parentId","fetch","getRequest","cursor","useHandleLibraryType","request","hasCompleted","hasError","getVideoAppLink","video","typeId","application","args","getFolderAppLink","libraryId","params","getFolderBgColourClass","charCode","charCodeAt","useGetFolderBreadcrumbs","library","LibraryView","focusSearchBar","libraries","libraryFolders","categoryTree","user","owner","items","source","entity","location","actionType","descriptor","smartCount"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7293],{91200:(e,t,a)=>{a.d(t,{Y:()=>c});var n=a(32735),i=a(68050),r=a(69111),l=a(84231);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}function c(e){var t,a=function(e){if(Array.isArray(e))return s(e)}(t=Array(e.numItems))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?s(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),c=e.itemClassName||"";return n.createElement(n.Fragment,null,e.showHeading&&n.createElement("div",{className:"".concat(l.Z.partialHeading," mb-1 partial-loading-background")}),n.createElement(i.Z,{className:"mx-n1 mb-n2"},a.map((function(e,t){return n.createElement(r.Z,{key:t,xs:6,sm:4,lg:3,className:"".concat(c," px-1 pb-2")},n.createElement("div",{className:"".concat(l.Z.playlistItem," partial-loading-background rounded-3")}))}))))}c.defaultProps={numItems:8}},48745:(e,t,a)=>{a.d(t,{t:()=>k});var n=a(32735),i=a(82602),r=a(23481),l=a(110),s=a(65858),c=a(83345);const o={fontSmall:"OYBRp"};var m="playlists.playlistCount";function d(e){var t=function(e){var t,a,n,i,r,l;return!!e&&(null!==(a=null===(t=e.videos)||void 0===t?void 0:t.count)&&void 0!==a?a:0)+(null!==(i=null===(n=e.interactives)||void 0===n?void 0:n.count)&&void 0!==i?i:0)+(null!==(l=null===(r=e.clips)||void 0===r?void 0:r.count)&&void 0!==l?l:0)}(e.playlist);return!1===t||Number.isNaN(t)?n.createElement(n.Fragment,null):n.createElement("span",{className:o.fontSmall},n.createElement(c.x,{namespace:m,phrase:"count",options:{smartCount:t}}))}var u=a(20789),p=a(89725),v=a(64818);function g(e){var t,a,i,r=e.playlist._liteOwner;if(null===(t=e.playlist._isClickViewCurated)||void 0===t?void 0:t.value)return n.createElement(p.F,null);if(!(null==r?void 0:r.id)||!(null===(a=e.currentUser)||void 0===a?void 0:a.id))return n.createElement(n.Fragment,null);if(r.id.toString()===e.currentUser.id.toString())return n.createElement(n.Fragment,null);var l="string"==typeof r.avatar?r.avatar:null===(i=r.avatar)||void 0===i?void 0:i.url;return n.createElement(u.q,{imageUrl:l,imageCdnUrl:e.imageCdnUrl,initials:v.l.getInitials(r.name,r.surname)})}var y=a(36848),f=a(40955),b=a(75163),E=a(5465),h=a(54610),C=a(80143),N=a(9085),S=a(67453),w=a(84231),x="playlists.playlistList";function k(e){var t,a,c=S.j.createUrl(e.data.cover&&e.data.cover.url,{size:h.h2.Medium,resizeType:h.Nq.Cover}),o=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,m=(0,C.n)(o,e.presentationAudiences),u=w.Z.playlistItem,p=!!c||!!e.showFallbackImage;p&&(u+=" ".concat(w.Z.playlistItemGradient)),!p&&e.bgColourClassNames&&(u+=" ".concat(w.Z.playlistItem," ").concat((0,N.x)(e.data.name,e.bgColourClassNames))),"round"===e.itemStyle&&(u+=" rounded-3 overflow-hidden"),"round-left"===e.itemStyle&&(u+=" rounded-start-lg overflow-hidden");var v=Object.assign(Object.assign({},e.analyticsData),{id:null===(t=e.data)||void 0===t?void 0:t.id,name:null===(a=e.data)||void 0===a?void 0:a.name}),k=Object.assign(Object.assign({},e.analyticsOptions),{entity:s.py.Playlist});return n.createElement(y.F,{appLink:e.appLink,analyticsData:v,analyticsOptions:k,title:function(){var t;return!e.data.contentModifiedDate||(null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value)?"":r.T.getPhrase(x,"lastUpdated",{timeago:(0,i.WU)(l.O.convertUTCToLocal(e.data.contentModifiedDate))})}()},n.createElement(b.Z,{data:c,alt:e.data.name,className:u},!!e.showFallbackImage&&n.createElement(E.oy,{type:E.mS.Playlist}),n.createElement("div",{className:"text-white ".concat(w.Z.playlistMetadata)},!!e.showCount&&n.createElement(d,{playlist:e.data}),n.createElement("h5",{className:"mb-0 ".concat(e.titleClassName||"")},n.createElement("span",{className:"clamp-2"},e.data.name)),!!o&&!!o.length&&!!m&&n.createElement(f.P,{className:"".concat(e.audienceLabelClass?e.audienceLabelClass:""," mt-1"),audience:m,border:"white"})),!!e.showOwner&&!!e.imageCdnUrl&&n.createElement("div",{className:w.Z.ownerAvatarContainer},n.createElement(g,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl}))))}k.defaultProps={itemStyle:"square"}},31273:(e,t,a)=>{a.d(t,{P:()=>o});var n=a(32735),i=a(68050),r=a(69111),l=a(65858),s=a(48745),c={actionType:l.Vw.Click,entity:l.py.Playlist,location:l.LZ.PlaylistListItem,descriptor:l._S.Cover};function o(e){return n.createElement(i.Z,{className:"mx-n1"},e.extraPlaylistItem&&n.createElement(r.Z,{key:"extra-playlist-item",xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},e.extraPlaylistItem),e.playlists.map((function(t){return n.createElement(r.Z,{key:t.id,xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},n.createElement(s.t,{data:t,appLink:e.getPlaylistAppLink(t),imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,presentationAudiences:e.presentationAudiences,bgColourClassNames:e.bgColourClassNames,showCount:e.showCount,showOwner:e.showOwner,showFallbackImage:e.showFallbackImage,titleClassName:e.itemTitleClassName,itemStyle:e.itemStyle,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),c)}))})))}},98981:(e,t,a)=>{a.d(t,{YA:()=>n.Y,tN:()=>i.t});var n=a(91200),i=(a(31273),a(48745))},3626:(e,t,a)=>{a.d(t,{J:()=>S});var n=a(32735),i=a(68050),r=a(69111),l=a(49985),s=a(65858),c=a(40955),o=a(18559),m=a(17464),d=a(72355),u=a(66190),p=a(77590),v=a(85784),g=a(70872),y=a(11882),f=a(54610),b=a(68626),E=a(80143),h=a(59598),C=a(31908);const N={partialHeroThumbnail:"z0_Sm",partialSeriesText:"xuWtC",partialVideoTitleText:"fXYdC",partialBadge:"FlUpr",partialDescription:"YgWxP",partialSubject:"QBKwQ",partialHeading:"S__E9",guidance:"Ax9h2",description:"zejMP",details:"MRyVe"};function S(e){var t,a=e.video,S=e.presentationAudiences,w=e.getVideoAppLink,x=e.subTextAppLink,k=e.hideInteractiveBadge,I=null===(t=null==a?void 0:a.subjectPresentationAudiences)||void 0===t?void 0:t.data,O=(0,E.n)(I,S),A=l.k.mergeOptions(e.analyticsOptions,{location:s.LZ.ClassificationHero,entity:C.M.getAnalyticsEntity(a)}),j=n.useRef();return a?n.createElement(i.Z,null,n.createElement(r.Z,{xs:12,md:6},n.createElement("div",{ref:j},n.createElement(d.u,{analyticsData:e.analyticsData,analyticsOptions:A,video:a,appLink:w(e.video,{}),imageOptions:{size:f.h2.Medium},textPosition:b.z.Independent,type:"static",setFavourite:e.setFavourite,canFavourite:e.canFavourite,audience:"thumbnail"===e.badgePosition?O:null,newDurationStyle:e.newDurationStyle,hideRating:"thumbnail"!==e.badgePosition||!!O,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:"none"}))),n.createElement(r.Z,{xs:12,md:6,className:"".concat(N.details," position-relative")},n.createElement(v.Q,{analyticsData:e.analyticsData,analyticsOptions:A,video:a}),n.createElement(y.$,{type:e.subTextType,analyticsData:e.analyticsData,analyticsOptions:A,video:a,appLink:x,className:"text-reset"}),n.createElement(g.u,{video:a,analyticsData:e.analyticsData,analyticsOptions:A,appLink:w(e.video,{}),linkClassName:"d-inline-block",textClassName:"h4",yearGroups:e.yearGroups}),"info-panel"===e.badgePosition&&n.createElement(m.c,{className:"pb-1"},!k&&n.createElement(o.C,{type:o.g.Interactive,data:a.interactives}),n.createElement(o.C,{type:o.g.Rating,data:a.rating}),n.createElement(o.C,{type:o.g.ProductionYear,data:a.productionYear})),n.createElement("p",{className:"mb-1"},n.createElement("span",{className:N.description},a.description)),"info-panel"===e.badgePosition&&n.createElement(c.P,{audience:O,className:"mt-1",border:"dark"}),e.showVideoGuidance&&n.createElement("div",{className:"d-flex ".concat(N.guidance)},n.createElement(u.Y,{video:a,appLink:e.getVideoAppLink(a,{scrollToPosition:h.K.Interactives}),analyticsData:e.analyticsData,analyticsOptions:A}),n.createElement(p.x,{video:a,appLink:e.getVideoAppLink(a,{scrollToPosition:h.K.Resources}),analyticsData:e.analyticsData,analyticsOptions:A})))):n.createElement(n.Fragment,null)}S.defaultProps={newDurationStyle:!0,badgePosition:"thumbnail"}},34004:(e,t,a)=>{a.d(t,{r:()=>p});var n=a(32735),i=a(40955),r=a(18559),l=a(75163),s=a(5465),c=a(54610),o=a(49439),m=a(80143);const d={labelContainer:"ieonz",hoverActive:"vqHCl",mask:"qEOPN",largeHoverTitle:"ZYApF",smallHoverTitle:"qcfHO",largeHoverDescription:"Uh4gM",smallHoverDescription:"TiqqV"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}function p(e){var t,a,p=(t=(0,o.L)({className:d.hoverActive}),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,l,s=[],c=!0,o=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){o=!0,i=e}finally{try{if(!c&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(o)throw i}}return s}}(t,a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),v=p[0],g=p[1],y=e.series&&e.series.subjectPresentationAudiences&&e.series.subjectPresentationAudiences.data||[],f=(0,m.n)(y,e.presentationAudiences),b=!!(y&&y.length&&f);return n.createElement("div",{ref:v},g&&n.createElement("div",{className:"py-3 text-white text-center mb-3 ".concat(d.mask)},n.createElement("h3",{className:"fw-semibold ".concat(d.hoverTitle," ").concat(e.isSmall?d.smallHoverTitle:d.largeHoverTitle)},n.createElement("span",{className:"clamp-3"},e.series.name)),!!e.series.description&&n.createElement("p",{className:"".concat(d.hoverDescription," ").concat(e.isSmall?d.smallHoverDescription:d.largeHoverDescription," mb-0")},e.series.description)),n.createElement(l.Z,{data:e.series.tallPoster,alt:e.series.name,imageType:c.__.TallPosters,preload:e.preloadImage,imageOptions:{size:c.h2.Large},imageClassName:e.imageClass?e.imageClass:"rounded-3"},n.createElement(s.oy,{type:s.mS.Series}),n.createElement("div",{className:"position-absolute text-white ".concat(d.labelContainer)},b?n.createElement(i.P,{audience:f,border:"white"}):n.createElement(r.C,{type:r.g.Rating,data:e.series.rating}))))}},2192:(e,t,a)=>{a.d(t,{M:()=>y,Q:()=>f});var n=a(32735),i=a(45157),r=a(36848),l=a(60376),s=a(5465),c=a(83914),o=a(83345),m=a(54610),d=a(67453),u=a(35223),p=a(92038),v=function(e){var t=e.name,a=e.multiline,i="".concat(p.Z.comingSoonPanel," \n d-flex flex-column align-items-center justify-content-center px-3 text-center"),r="";return a?r+=" ".concat(p.Z.clamped," clamp-2"):(i+=" text-nowrap",r+=" text-truncate"),n.createElement("div",{className:i},n.createElement("small",{className:"text-secondary"},n.createElement(o.x,{namespace:"shared.subjectWidgetItem",phrase:"comingSoon"})),n.createElement("p",{className:"".concat(p.Z.name," h6")},n.createElement("span",{className:r},t)))},g=function(e){var t=e.name,a=e.multiline,i=e.subtitle,r="px-3 d-flex flex-column justify-content-center",l="".concat(p.Z.name," h6");return a?l+=" clamp-3 text-start":(r+=" text-nowrap text-truncate",l+=" text-truncate mb-0 pb-1"),n.createElement("div",{className:r},i&&n.createElement("div",{className:"text-secondary clamp-1 ".concat(p.Z.text)},i),n.createElement("div",{className:l,title:t},t))};function y(e){var t=d.j.createUrl(e.coverUrl,{size:e.isLarge?m.h2.Medium:m.h2.Small}),a={name:e.data.name,multiline:e.isLarge||e.multiline,subtitle:e.subtitle};return n.createElement("div",{className:"border d-flex position-relative ".concat(e.className," ").concat(p.Z.widgetItem," ").concat(e.isSelected?"border-success border-2":""),id:"".concat(e.data.id,"-").concat(i.Y.getRandomInt())},e.isSelected&&n.createElement("div",{className:"".concat(p.Z.selectedMask," border-2")}),n.createElement("div",{className:"".concat(p.Z.imagePanel," ").concat(e.isLarge?p.Z.large:"")},e.isSelected&&!e.hideCheckmark&&n.createElement("div",{className:p.Z.selected},n.createElement(l.f,{svgName:u.vn.Check,svgSize:c.S.Large,textVariant:"white",variant:"green"})),n.createElement("div",{className:"".concat(p.Z.image," ").concat(e.imageClassName),style:e.coverUrl?{backgroundImage:"url('".concat(t,"')")}:{}}),!e.hideFallback&&n.createElement(s.oy,{type:s.mS.Subject,extraClasses:e.isLarge?p.Z.large:""})),e.isComingSoon?n.createElement(v,Object.assign({},a)):n.createElement(g,Object.assign({},a)))}function f(e){var t,a=e.getChildAppLink?e.getChildAppLink(e.data):null;return n.createElement(n.Fragment,null,a?n.createElement(r.F,{className:p.Z.appLink,appLink:a,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,appLinkOptions:null===(t=e.getChildAppLinkOptions)||void 0===t?void 0:t.call(e)},n.createElement(y,Object.assign({},e))):n.createElement(y,Object.assign({},e)))}},43741:(e,t,a)=>{a.d(t,{M:()=>o,Q:()=>c});var n=a(32735),i=a(45157),r=a(5465),l=a(92038);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}var c=function(){var e,t,a=(e=n.useState(i.Y.getRandomInt(5)+3+"rem"),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,l,s=[],c=!0,o=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){o=!0,i=e}finally{try{if(!c&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(o)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?s(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return n.createElement("div",{className:"border d-flex position-relative me-2 ".concat(l.Z.widgetItem)},n.createElement("div",{className:l.Z.imagePanel}),n.createElement("div",{className:"px-2",style:{width:a}}),n.createElement("div",{className:l.Z.partialIcon},n.createElement(r.oy,{type:r.mS.Subject})))},o=function(){return n.createElement("div",{className:"border d-flex position-relative me-2 ".concat(l.Z.widgetItem)},n.createElement("div",{className:"".concat(l.Z.partialLargeImage)}),n.createElement("div",{className:"px-2"}),n.createElement("div",{className:l.Z.partialIcon},n.createElement(r.oy,{type:r.mS.Subject,extraClasses:l.Z.partialLargeFallback})))}},91028:(e,t,a)=>{a.d(t,{V:()=>c});var n=a(32735),i=a(65858),r=a(2192),l=a(52641),s=a(2284),c=n.memo((function(e){var t,a,c,o,m,d=(null===(t=e.data)||void 0===t?void 0:t.status)===s.W.ComingSoon,u=function(e,t){var a;if((null==t?void 0:t.length)>=l._.MULTI_PRESENTATION_THRESHOLD)return null===(a=null==t?void 0:t.find((function(t){return t.id===e})))||void 0===a?void 0:a.name}(e.data.presentationId,null==e?void 0:e.availablePresentations),p=Object.assign(Object.assign({},e.analyticsData),{id:null===(a=e.data)||void 0===a?void 0:a.id,name:null===(c=e.data)||void 0===c?void 0:c.name,presentationId:e.data.presentationId,comingSoon:!!d}),v=Object.assign(Object.assign({location:i.LZ.ClassificationListItem},e.analyticsOptions),{actionType:i.Vw.Click,entity:i.py.Classification,descriptor:i._S.Cover});return n.createElement(r.Q,Object.assign({},e,{analyticsData:p,analyticsOptions:v,coverUrl:null===(o=e.data.cover)||void 0===o?void 0:o.url,subtitle:(null===(m=e.getSubtitle)||void 0===m?void 0:m.call(e,e.data))||u,isComingSoon:d}))}))},9513:(e,t,a)=>{a.d(t,{Ml:()=>i.M,Qh:()=>i.Q,Vz:()=>n.V});var n=a(91028),i=a(43741),r=(a(32735),a(65858));a(36848),a(83914),a(83345),a(35223),a(92038),r.Vw.Click,r.py.UserSetting,r._S.Tile,a(2786),r.Vw.Click,r.py.Url,r._S.Tile},2284:(e,t,a)=>{var n;a.d(t,{W:()=>n}),function(e){e.Draft="Draft",e.ComingSoon="ComingSoon",e.Published="Published"}(n||(n={}))},84231:(e,t,a)=>{a.d(t,{Z:()=>n});const n={playlistItem:"CaRJx",playlistItemGradient:"BI7p2",playlistMetadata:"eDk1l",partialHeading:"w4lWh",ownerAvatarContainer:"JImqE"}},92038:(e,t,a)=>{a.d(t,{Z:()=>n});const n={appLink:"fFjKN",name:"A_by9",selectedMask:"xSQtR",widgetItem:"Ys9W_",text:"JfAoy",imagePanel:"aUNDc",partialLargeImage:"RuLxv",selected:"BViJb",image:"LkTep",dragHandle:"CJqvP",large:"R5clw",comingSoonPanel:"Wa2PG",editSubjectsItem:"gGNFD",allSubjectsItem:"IHdlJ",logoContainer:"Nzaes",draggingItem:"zUOye",partialLargeFallback:"FmJP9",partialIcon:"sdZuo"}},82602:(e,t,a)=>{a.d(t,{WU:()=>o});var n=["second","minute","hour","day","week","month","year"],i=["秒","分钟","小时","天","周","个月","年"],r={},l=function(e,t){r[e]=t},s=[60,60,24,7,365/7/12,12];function c(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var o=function(e,t,a){var n=function(e,t){return(+(t?c(t):new Date)-+c(e))/1e3}(e,a&&a.relativeDate);return function(e,t){for(var a=e<0?1:0,n=e=Math.abs(e),i=0;e>=s[i]&&i<s.length;i++)e/=s[i];return(e=Math.floor(e))>(0==(i*=2)?9:1)&&(i+=1),t(e,i,n)[a].replace("%s",e.toString())}(n,function(e){return r[e]||r.en_US}(t))};l("en_US",(function(e,t){if(0===t)return["just now","right now"];var a=n[Math.floor(t/2)];return e>1&&(a+="s"),[e+" "+a+" ago","in "+e+" "+a]})),l("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var a=i[~~(t/2)];return[e+" "+a+"前",e+" "+a+"后"]}))}}]);
|
|
2
|
-
//# sourceMappingURL=7293-afd3349468-lite.chunk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8261],{11921:(e,t,a)=>{a.d(t,{F:()=>o});var r=a(32735),n=a(35223),l=a(83914);var i=function(e){switch(e){case"up":return"JAT0R";case"down":return"ld41u";case"right":return"HHkPe";case"left":return"jZTRR"}};function o(e){return r.createElement(l.x,{svgName:n.vn.Caret,className:"".concat(i(e.direction)," svg-container d-inline-block ").concat(e.className)})}o.defaultProps={direction:"right"}},83834:(e,t,a)=>{a.d(t,{$:()=>S});var r=a(32735),n=a(57900),l=a(11921),i=a(11607),o=a(97395),c=a(83657),s=a(36848),d=a(88711),u=a(75163),m=a(5465),p=a(54610);const f={actions:"cN3nB",actionsContainer:"xM37V",dropStyle:"kvCLS",dragStyle:"md9Na"};function v(e){var t,a=e.folder.thumbnail?o._.urlBuilder(e.folder.thumbnail.url,{size:p.h2.Small}):null,n=null===(t=e.getFolderActions)||void 0===t?void 0:t.call(e,e.folder);return r.createElement(d.j,{draggable:e.drag&&{id:e.folder.id,data:e.folder},droppable:e.drop&&{id:e.folder.id,data:e.folder},dropStye:f.dropStyle,dragStyle:f.dragStyle},r.createElement("div",{className:"position-relative"},r.createElement(s.F,{className:"rounded-3 d-block text-decoration-none",appLink:e.getAppLink(e.folder),title:e.folder.name},r.createElement(u.Z,{data:a,imageType:p.__.Thumbnails,imageClassName:"rounded-top-lg"},r.createElement(m.oy,{name:e.folder.name,type:m.mS.Folder,extraClasses:"rounded-top-lg"})),r.createElement("h3",{className:"bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2"},r.createElement("span",{className:"text-truncate d-block"},e.folder.name))),(null==n?void 0:n.length)&&r.createElement(c.e,{actions:n,className:f.actionsContainer,actionsDropdownClassName:f.actions,dropdownToggleSvgSize:null})))}var h=a(83345),g=a(79967);function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}var y="libraries.folderList",E="has:expanded:library:folders";function S(e){var t,a,o,c=(a=r.useState(n.SG.get(E)||!1),o=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(a,o)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?b(e,t):void 0}}(a,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],d=c[1],u=e.expandFolders||s,m=(t=(0,g.k)()).xxl||t.xl||t.lg?6:t.md?4:3;function p(){d(!u),n.SG.set(E,!u)}var f=u?e.folders:e.folders.slice(0,m),S=e.folders.length>m&&!e.expandFolders;return r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex justify-content-between align-items-center"},e.showHeading&&r.createElement(i.L,{className:"d-inline-flex align-items-center mb-2 px-2 ".concat(S?"":"cursor-default"),onClick:p},S&&r.createElement(l.F,{direction:u?"down":"right"}),r.createElement("h2",{className:"h4 mb-0"},r.createElement(h.x,{namespace:y,phrase:"folders",options:{count:e.folders.length}}))),!(u||!S)&&r.createElement("div",{className:"d-flex justify-content-end justify-self-end px-2"},r.createElement(i.L,{onClick:p,className:"text-dark hover-text-underline d-inline-block"},r.createElement(h.x,{namespace:y,phrase:"seeAll",options:{count:e.folders.length}}))),!(!u||!S)&&r.createElement("div",{className:"d-flex justify-content-end justify-self-end px-2"},r.createElement(i.L,{onClick:p,className:"text-dark hover-text-underline d-inline-block"},r.createElement(h.x,{namespace:y,phrase:"seeLess"}))),e.extraButtons?e.extraButtons:r.createElement(r.Fragment,null)),r.createElement("div",{className:"row mx-1"},f.map((function(t){return r.createElement("div",{key:t.id,className:"col-4 col-md-3 col-lg-2 px-1 pb-3"},r.createElement(v,{folder:t,getAppLink:e.getAppLink,getFolderActions:e.getFolderActions,drag:e.drag,drop:e.drop}))}))))}S.defaultProps={showHeading:!0}},65403:(e,t,a)=>{a.d(t,{i:()=>i});var r=a(32735);const n={partialFolderHeading:"dhbsL",partialFolderThumbnail:"CI9vk",partialFolderName:"l0Nll"};var l=function(){return r.createElement("div",{className:"col-4 col-md-3 col-lg-2 px-1 pb-3"},r.createElement("div",{className:"".concat(n.partialFolderThumbnail," partial-loading-background rounded-top-lg")}),r.createElement("div",{className:"".concat(n.partialFolderName," partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2")}," "))};function i(e){var t=e.count,a=void 0===t?3:t;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(n.partialFolderHeading," h4 mb-2 partial-loading-background")}," "),r.createElement("div",{className:"row mx-n1"},Array(a).fill(null).map((function(e,t){return r.createElement(l,{key:t})}))))}},17087:(e,t,a)=>{a.d(t,{T:()=>o});var r=a(20354),n=a(98064);function l(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function o(e){var t,a,i=e.folderId,o=e.firstItem,c=e.lastItem,s=e.getAppLink,d=r.a.useBasicFetch(n.D.folderParentTree(i));if(!(null===(a=null===(t=d.data)||void 0===t?void 0:t.children)||void 0===a?void 0:a.length))return[];for(var u=d.data.children.map((function(e){return{node:e,path:[e]}})),m=[],p=function(){var e=u.pop(),t=e.node,a=e.path;t.data.id.toString()===i.toString()&&(m=a.map((function(e){return{name:e.data.name,appLink:s(e)}}))),t.children&&u.push.apply(u,l(t.children.map((function(e){return{node:e,path:[].concat(l(a),[e])}}))))};u.length;)p();return o&&m.unshift(o),c&&m.push(c),m[m.length-1].active=!0,m}},98860:(e,t,a)=>{a.d(t,{P:()=>o});var r=a(20354),n=a(98064),l=a(3010),i=a(45719);function o(e){var t=r.a.useGetFetch();function a(t){return n.D.childFolders(e,t)}return(0,l.i)(!!e&&a,!!e&&function(e){t(a(e))}),(0,i.P)(!!e&&function(e){return a(e).key})}},21325:(e,t,a)=>{a.d(t,{o:()=>o});var r=a(32735),n=a(81886),l=a(96560),i=a(67058);function o(e){r.useEffect((function(){e.hasCompleted&&!e.hasError&&e.data.type!==l.r.CustomLibrary&&n.Q.Ry.throw(new i.d)}),[e.hasCompleted])}},3435:(e,t,a)=>{a.r(t),a.d(t,{LibraryFolderView:()=>te});var r=a(32735),n=a(70680),l=a(23481),i=a(20354),o=a(65858),c=a(43500),s=a(89043),d=a(49935),u=a(83834),m=a(10874),p=a(4201),f=a(83345),v=a(79718),h=a(51365),g=a(94644),b=a(39151),y=a(1666),E=a(98064),S=a(31949),k=a(1575),L=a(69883),x=a(91286),F=a(60115),N=a(79612),A=a(35223),C=a(68140),I=a(14070),w=a(97291),O=a(10671),T=a(27638),V=a(44110),B=a(97816),j=a(71020),P=a(13231),R=a(22902),D=a(10741),H=a(23232),_=a(99742),M="libraries.libraryFolderEmptyState";function Z(){return r.createElement(f.D.Provider,{value:M},r.createElement(H.u,null,r.createElement(H.u.Image,{src:_.W.EmptyStates.Libraries.FOLDER}),r.createElement(H.u.Heading,null,r.createElement(f.x,{phrase:"heading"})),r.createElement(H.u.Info,null,r.createElement(f.x,{phrase:"info"}))))}var G=a(8406),U=a(82431),z="libraries.libraryFolderVideos";function W(e){var t,a=(0,p.of)().focusSearchBar,n=(0,R.T)().hasPermissions;return e.videos.length||e.hasSubFolders?e.videos.length?r.createElement("div",null,e.hasSubFolders&&r.createElement("div",{className:"d-flex justify-content-between align-items-center"},r.createElement("h2",{className:"h4 mb-0"},r.createElement(f.x,{namespace:z,phrase:"videos"})),r.createElement("div",{className:"d-flex"},r.createElement(m.h,{svgName:A.vn.Search,appLink:{application:w.O.SEARCH,action:I.e.Search.HOME,params:{source:c.fi.School}},className:"btn btn-outline-dark d-none d-sm-inline-block",onClick:a,analyticsData:{},analyticsOptions:{entity:o.py.SearchResults,location:o.LZ.Libraries,actionType:o.Vw.Click,descriptor:o.Bk.School}},r.createElement(f.x,{namespace:z,phrase:"searchLibrary",options:{smartCount:null===(t=e.libraries)||void 0===t?void 0:t.length}})),r.createElement(v.p,{variant:"outline-dark",type:e.sort,getSortAppLink:e.getSortAppLink,analyticsOptions:{location:o.LZ.VideoListHeader,entity:o.py.Video,actionType:o.Vw.Sort,workflowPhase:o.eu.Complete}}))),r.createElement(P.E4,{videos:e.videos,yearGroups:e.yearGroups,getVideoAppLink:G.lS,getSubTextAppLink:function(e){return U.j.getSeriesAppLink(e.series)},setFavourite:e.setFavourite,canFavourite:e.canFavourite,presentationAudiences:e.audiences,hasPermissions:n,getPreviewQuestionsAppLink:function(e){return D.j.getPreviewQuestionsAppLink(e)}}),(e.hasMore||e.isFetching)&&r.createElement(j._,{isFetching:e.isFetching,fetchNext:e.fetchNext,nextCursor:e.nextCursor})):r.createElement(r.Fragment,null):r.createElement(Z,null)}var $=a(98860),Q=a(21325),Y=a(65403),J=a(74696);const K={subheading:"IJZtA"};function q(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"m-3"},r.createElement(Y.i,null)),r.createElement("div",{className:"mx-3 mb-3"},r.createElement("div",{className:"".concat(K.subheading," partial-loading-background mb-2")}),r.createElement(J.S,null)))}var X="libraries.libraryFolder",ee=l.T.encloseNamespace(X);function te(e){var t,a,l,j,P,R,D,H,_=(0,n.I0)(),M=(0,L.Z)(),Z=(0,p.of)().focusSearchBar,U=i.a.useBasicFetch(E.D.domainLibraries(["customLibrary","sharedLibrary"])),z=i.a.useBasicFetch(E.D.library(e.libraryId)),Y=i.a.useBasicFetch(E.D.folder(e.folderId)),J=(0,$.P)(e.folderId),K=i.a.useBasicFetch(S.N.currentUser()),te=i.a.useBasicFetch(b.L.config()),ae=i.a.useBasicFetch((null===(t=K.data)||void 0===t?void 0:t.isAuthenticated)&&y.h.yearGroups(K.data.customerId)),re=(0,O._)({location:O.i.VideoItem}),ne=(0,T.u)(o.LZ.VideoThumbnail),le=ne.setFavourite,ie=ne.canFavourite,oe=(0,G.Bf)(e.folderId,z.data,e.sort),ce=(0,V.i)();(0,N.M)({title:null===(a=Y.data)||void 0===a?void 0:a.name}),(0,x.v)([z,Y]),(0,Q.o)(z);var se=!!K.data&&C.d.getOrSetSortType(K.data.id,e.sort),de=(0,F.K)(ve,he,(function(e,t){if(1===e)return(0,g.r)(t);M.error(ee("error"))})),ue=de.items,me=de.hasMore,pe=de.isFetching,fe=de.nextCursor;function ve(t){return k.R.collectionVideos(e.folderId,se,t)}function he(e){return i.a.getFetch(_)(ve(e))}(0,B.V)(ue);var ge=!(!J.hasCompleted||(null===(l=J.items)||void 0===l?void 0:l.length));return r.createElement(h.M.Provider,{value:re},z.data&&Y.data&&te.data?r.createElement(s.p,{heading:Y.data.name,banner:Y.data.banner,imageCdnUrl:te.data.imageCdnUrl,blockColourClass:(0,G.WO)(Y.data),logo:null===(j=z.data.owner)||void 0===j?void 0:j.logo}):r.createElement(s.v,null),r.createElement("div",{className:"d-flex justify-content-between align-items-center py-3 mx-3 ".concat(ge?"":"border-bottom")},z.data&&Y.data?r.createElement(d.Oo,{breadcrumbs:oe}):r.createElement(d.b2,null),r.createElement("div",{className:"d-flex"},(ge||!(null==ue?void 0:ue.length))&&r.createElement(m.h,{svgName:A.vn.Search,appLink:{application:w.O.SEARCH,action:I.e.Search.HOME,params:{source:c.fi.School}},className:"btn btn-outline-dark d-none d-sm-inline-block",onClick:Z,analyticsData:{},analyticsOptions:{entity:o.py.SearchResults,location:o.LZ.Libraries,actionType:o.Vw.Click,descriptor:o.Bk.School}},r.createElement(f.x,{namespace:X,phrase:"searchLibrary",options:{smartCount:null!==(R=null===(P=U.data)||void 0===P?void 0:P.length)&&void 0!==R?R:1}})),ge&&Y.data&&r.createElement(v.p,{variant:"outline-dark",type:se,getSortAppLink:function(t){return(0,G.a5)(e.libraryId,Y.data,t)},analyticsOptions:{location:o.LZ.VideoListHeader,entity:o.py.Video,actionType:o.Vw.Sort,workflowPhase:o.eu.Complete}}))),ue&&J?r.createElement(r.Fragment,null,!!(null===(D=J.items)||void 0===D?void 0:D.length)&&r.createElement("div",{className:"px-2 py-3"},r.createElement(u.$,{folders:J.items,getAppLink:function(t){return(0,G.a5)(e.libraryId,t,se)},expandFolders:!ue.length})),r.createElement("div",{className:"px-3 pb-3"},r.createElement(W,{videos:ue,yearGroups:ae.data,hasSubFolders:!!(null===(H=J.items)||void 0===H?void 0:H.length),setFavourite:le,canFavourite:ie,hasMore:me,isFetching:pe,fetchNext:he,nextCursor:fe,sort:se,getSortAppLink:function(t){return(0,G.a5)(e.libraryId,Y.data,t)},audiences:ce.data,libraries:U.data}))):r.createElement(q,null))}},8406:(e,t,a)=>{a.d(t,{Bf:()=>m,WO:()=>u,a5:()=>d,lS:()=>s});var r=a(28400),n=a(7733),l=a(4594),i=a(17087),o=a(14070),c=a(97291);function s(e){switch(e.typeId){case l.E.Clip:return{application:c.O.CLIPS,action:o.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]};case l.E.Interactive:return{application:c.O.INTERACTIVES,action:o.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]};default:return{application:c.O.VIDEOS,action:o.e.Videos.PLAY_VIDEO,args:[e.id,r.m.slugify(e.name)]}}}function d(e,t,a){return e&&t?{application:c.O.LIBRARIES,action:o.e.Libraries.FOLDER,args:[e,t.id,r.m.slugify(t.name)],params:{sort:a}}:null}function u(e){for(var t,a,r=0,l=0;null!==(a=l<(null===(t=e.name)||void 0===t?void 0:t.length))&&void 0!==a&&a;l++)r+=e.name.charCodeAt(l);return n.o[r%n.o.length]}function m(e,t,a){return(0,i.T)({folderId:t&&e,getAppLink:function(e){return d(t.id,e.data,a)},firstItem:{name:null==t?void 0:t.name,appLink:{application:c.O.LIBRARIES,action:o.e.Libraries.LIBRARY,args:[null==t?void 0:t.id,r.m.slugify(null==t?void 0:t.name)]}}})}}}]);
|
|
2
|
-
//# sourceMappingURL=8261-72453f1978-lite.chunk.js.map
|