@clickview/lite 0.52.3-dev.1 → 0.52.3-dev.2
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/languages/en.json +1 -1
- package/dist/scripts/1063-5a732288dc-lite.chunk.js +2 -0
- package/dist/scripts/1063-5a732288dc-lite.chunk.js.map +1 -0
- package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
- package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-c5138ef662-lite.chunk.js} +2 -2
- package/dist/scripts/1125-c5138ef662-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-9b7d850bab-lite.chunk.js +2 -0
- package/dist/scripts/1169-9b7d850bab-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
- package/dist/scripts/1672-0d1fc90529-lite.chunk.js +3 -0
- package/dist/scripts/1672-0d1fc90529-lite.chunk.js.map +1 -0
- package/dist/scripts/1725-99450ed637-lite.chunk.js +2 -0
- package/dist/scripts/1725-99450ed637-lite.chunk.js.map +1 -0
- package/dist/scripts/1891-5914c54eca-lite.chunk.js +2 -0
- package/dist/scripts/1891-5914c54eca-lite.chunk.js.map +1 -0
- package/dist/scripts/1896-399a91d18c-lite.chunk.js +2 -0
- package/dist/scripts/1896-399a91d18c-lite.chunk.js.map +1 -0
- package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
- package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
- package/dist/scripts/209-fe96739cb5-lite.chunk.js +2 -0
- package/dist/scripts/209-fe96739cb5-lite.chunk.js.map +1 -0
- package/dist/scripts/2134-b8d5c46887-lite.chunk.js +2 -0
- package/dist/scripts/2134-b8d5c46887-lite.chunk.js.map +1 -0
- package/dist/scripts/2142-f71cf5c71f-lite.chunk.js +2 -0
- package/dist/scripts/2142-f71cf5c71f-lite.chunk.js.map +1 -0
- package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js +2 -0
- package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js.map +1 -0
- package/dist/scripts/2548-c5dd2899df-lite.chunk.js +2 -0
- package/dist/scripts/2548-c5dd2899df-lite.chunk.js.map +1 -0
- package/dist/scripts/2952-c3a826b714-lite.chunk.js +2 -0
- package/dist/scripts/2952-c3a826b714-lite.chunk.js.map +1 -0
- package/dist/scripts/3404-23125f10ea-lite.chunk.js +2 -0
- package/dist/scripts/3404-23125f10ea-lite.chunk.js.map +1 -0
- package/dist/scripts/3633-f3609526a5-lite.chunk.js +2 -0
- package/dist/scripts/3633-f3609526a5-lite.chunk.js.map +1 -0
- package/dist/scripts/3728-eed9e78985-lite.chunk.js +2 -0
- package/dist/scripts/3728-eed9e78985-lite.chunk.js.map +1 -0
- package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
- package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
- package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js +2 -0
- package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js.map +1 -0
- package/dist/scripts/4273-e42f763f00-lite.chunk.js +3 -0
- package/dist/scripts/4273-e42f763f00-lite.chunk.js.map +1 -0
- package/dist/scripts/4395-d0815835c8-lite.chunk.js +2 -0
- package/dist/scripts/4395-d0815835c8-lite.chunk.js.map +1 -0
- package/dist/scripts/4502-af4903784e-lite.chunk.js +2 -0
- package/dist/scripts/4502-af4903784e-lite.chunk.js.map +1 -0
- package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
- package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
- package/dist/scripts/5573-4352a3537e-lite.chunk.js +2 -0
- package/dist/scripts/5573-4352a3537e-lite.chunk.js.map +1 -0
- package/dist/scripts/5595-3acc9593bf-lite.chunk.js +2 -0
- package/dist/scripts/5595-3acc9593bf-lite.chunk.js.map +1 -0
- package/dist/scripts/5606-69c0ca2b97-lite.chunk.js +2 -0
- package/dist/scripts/5606-69c0ca2b97-lite.chunk.js.map +1 -0
- package/dist/scripts/5877-628732da21-lite.chunk.js +2 -0
- package/dist/scripts/5877-628732da21-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-cd98109a7b-lite.chunk.js +2 -0
- package/dist/scripts/5936-cd98109a7b-lite.chunk.js.map +1 -0
- package/dist/scripts/{5940-f335f8c290-lite.chunk.js → 5940-2767b40c40-lite.chunk.js} +2 -2
- package/dist/scripts/5940-2767b40c40-lite.chunk.js.map +1 -0
- package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
- package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
- package/dist/scripts/6138-2ef7ee071a-lite.chunk.js +2 -0
- package/dist/scripts/6138-2ef7ee071a-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-575b07d922-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
- package/dist/scripts/{624-575b07d922-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
- package/dist/scripts/6263-8a7931bf51-lite.chunk.js +2 -0
- package/dist/scripts/6263-8a7931bf51-lite.chunk.js.map +1 -0
- package/dist/scripts/6290-28ae0e8a60-lite.chunk.js +2 -0
- package/dist/scripts/6290-28ae0e8a60-lite.chunk.js.map +1 -0
- package/dist/scripts/6470-9a700cabce-lite.chunk.js +2 -0
- package/dist/scripts/6470-9a700cabce-lite.chunk.js.map +1 -0
- package/dist/scripts/6481-035d218a77-lite.chunk.js +2 -0
- package/dist/scripts/6481-035d218a77-lite.chunk.js.map +1 -0
- package/dist/scripts/6532-59e9abf69d-lite.chunk.js +2 -0
- package/dist/scripts/6532-59e9abf69d-lite.chunk.js.map +1 -0
- package/dist/scripts/6596-f75129c039-lite.chunk.js +2 -0
- package/dist/scripts/6596-f75129c039-lite.chunk.js.map +1 -0
- package/dist/scripts/6604-9adec889c7-lite.chunk.js +2 -0
- package/dist/scripts/6604-9adec889c7-lite.chunk.js.map +1 -0
- package/dist/scripts/6746-3f501b95cf-lite.chunk.js +2 -0
- package/dist/scripts/6746-3f501b95cf-lite.chunk.js.map +1 -0
- package/dist/scripts/714-c00ad56229-lite.chunk.js +2 -0
- package/dist/scripts/714-c00ad56229-lite.chunk.js.map +1 -0
- package/dist/scripts/7163-84c2b15394-lite.chunk.js +2 -0
- package/dist/scripts/7163-84c2b15394-lite.chunk.js.map +1 -0
- package/dist/scripts/7178-ed74c33056-lite.chunk.js +2 -0
- package/dist/scripts/7178-ed74c33056-lite.chunk.js.map +1 -0
- package/dist/scripts/7223-0bfab7e57a-lite.chunk.js +2 -0
- package/dist/scripts/7223-0bfab7e57a-lite.chunk.js.map +1 -0
- package/dist/scripts/7234-84c087600e-lite.chunk.js +2 -0
- package/dist/scripts/7234-84c087600e-lite.chunk.js.map +1 -0
- package/dist/scripts/7267-fd5085f5c9-lite.chunk.js +2 -0
- package/dist/scripts/7267-fd5085f5c9-lite.chunk.js.map +1 -0
- package/dist/scripts/7633-6c1ffdd082-lite.chunk.js +2 -0
- package/dist/scripts/7633-6c1ffdd082-lite.chunk.js.map +1 -0
- package/dist/scripts/7679-8f2d6a3487-lite.chunk.js +2 -0
- package/dist/scripts/7679-8f2d6a3487-lite.chunk.js.map +1 -0
- package/dist/scripts/7757-7e293be936-lite.chunk.js +2 -0
- package/dist/scripts/7757-7e293be936-lite.chunk.js.map +1 -0
- package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js +2 -0
- package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js.map +1 -0
- package/dist/scripts/7818-230982fc27-lite.chunk.js +2 -0
- package/dist/scripts/7818-230982fc27-lite.chunk.js.map +1 -0
- package/dist/scripts/8323-360541a2a8-lite.chunk.js +3 -0
- package/dist/scripts/8323-360541a2a8-lite.chunk.js.map +1 -0
- package/dist/scripts/8709-c4f1068232-lite.chunk.js +2 -0
- package/dist/scripts/8709-c4f1068232-lite.chunk.js.map +1 -0
- package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js +2 -0
- package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js.map +1 -0
- package/dist/scripts/9010-024dcc8f9a-lite.chunk.js +2 -0
- package/dist/scripts/9010-024dcc8f9a-lite.chunk.js.map +1 -0
- package/dist/scripts/9016-82d7e0afb9-lite.chunk.js +3 -0
- package/dist/scripts/9016-82d7e0afb9-lite.chunk.js.map +1 -0
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js +2 -0
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +1 -0
- package/dist/scripts/9230-ae200d2bd3-lite.chunk.js +3 -0
- package/dist/scripts/9230-ae200d2bd3-lite.chunk.js.map +1 -0
- package/dist/scripts/9359-1fb4413e0d-lite.chunk.js +2 -0
- package/dist/scripts/9359-1fb4413e0d-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
- package/dist/scripts/9399-d7a92ce84a-lite.chunk.js +2 -0
- package/dist/scripts/9399-d7a92ce84a-lite.chunk.js.map +1 -0
- package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-fd31f9f016-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
- package/dist/scripts/{953-fd31f9f016-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
- package/dist/scripts/9719-9736913451-lite.chunk.js +3 -0
- package/dist/scripts/9719-9736913451-lite.chunk.js.map +1 -0
- package/dist/scripts/999-bdc7956050-lite.chunk.js +2 -0
- package/dist/scripts/999-bdc7956050-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-9f8729bedb.min.js +3 -0
- package/dist/scripts/bundle-9f8729bedb.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js +0 -2
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js.map +0 -1
- package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js +0 -2
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js.map +0 -1
- package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
- package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
- package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
- package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
- package/dist/scripts/1818-64a145c5fe-lite.chunk.js +0 -2
- package/dist/scripts/1818-64a145c5fe-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-993521951d-lite.chunk.js +0 -2
- package/dist/scripts/1820-993521951d-lite.chunk.js.map +0 -1
- package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
- package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
- package/dist/scripts/1896-32a6eeda5c-lite.chunk.js +0 -2
- package/dist/scripts/1896-32a6eeda5c-lite.chunk.js.map +0 -1
- package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
- package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
- package/dist/scripts/209-de1729d1b1-lite.chunk.js +0 -2
- package/dist/scripts/209-de1729d1b1-lite.chunk.js.map +0 -1
- package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
- package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
- package/dist/scripts/2548-b81ae38f1f-lite.chunk.js +0 -2
- package/dist/scripts/2548-b81ae38f1f-lite.chunk.js.map +0 -1
- package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
- package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
- package/dist/scripts/3404-171fdee802-lite.chunk.js +0 -2
- package/dist/scripts/3404-171fdee802-lite.chunk.js.map +0 -1
- package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
- package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
- package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
- package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
- package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js +0 -2
- package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js.map +0 -1
- package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
- package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
- package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
- package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
- package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
- package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
- package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
- package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
- package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
- package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-c4397e12a8-lite.chunk.js +0 -2
- package/dist/scripts/5595-c4397e12a8-lite.chunk.js.map +0 -1
- package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
- package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
- package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
- package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-6fe810d3cb-lite.chunk.js +0 -2
- package/dist/scripts/5936-6fe810d3cb-lite.chunk.js.map +0 -1
- package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +0 -1
- package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
- package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
- package/dist/scripts/6138-21ae042a7b-lite.chunk.js +0 -2
- package/dist/scripts/6138-21ae042a7b-lite.chunk.js.map +0 -1
- package/dist/scripts/6263-3455286798-lite.chunk.js +0 -2
- package/dist/scripts/6263-3455286798-lite.chunk.js.map +0 -1
- package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
- package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
- package/dist/scripts/6415-b29029aa1b-lite.chunk.js +0 -2
- package/dist/scripts/6415-b29029aa1b-lite.chunk.js.map +0 -1
- package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
- package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
- package/dist/scripts/6481-899eba8b3d-lite.chunk.js +0 -2
- package/dist/scripts/6481-899eba8b3d-lite.chunk.js.map +0 -1
- package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
- package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
- package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
- package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
- package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
- package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
- package/dist/scripts/679-e18e7956d0-lite.chunk.js +0 -2
- package/dist/scripts/679-e18e7956d0-lite.chunk.js.map +0 -1
- package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
- package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
- package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
- package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
- package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
- package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
- package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
- package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
- package/dist/scripts/7679-b01da2c09d-lite.chunk.js +0 -2
- package/dist/scripts/7679-b01da2c09d-lite.chunk.js.map +0 -1
- package/dist/scripts/7757-320e868e90-lite.chunk.js +0 -2
- package/dist/scripts/7757-320e868e90-lite.chunk.js.map +0 -1
- package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
- package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
- package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
- package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
- package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
- package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
- package/dist/scripts/8478-0292f02489-lite.chunk.js +0 -2
- package/dist/scripts/8478-0292f02489-lite.chunk.js.map +0 -1
- package/dist/scripts/8766-bcc7f11eac-lite.chunk.js +0 -2
- package/dist/scripts/8766-bcc7f11eac-lite.chunk.js.map +0 -1
- package/dist/scripts/8800-335154fe11-lite.chunk.js +0 -2
- package/dist/scripts/8800-335154fe11-lite.chunk.js.map +0 -1
- package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
- package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
- package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
- package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
- package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
- package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
- package/dist/scripts/9308-362f86711f-lite.chunk.js +0 -3
- package/dist/scripts/9308-362f86711f-lite.chunk.js.map +0 -1
- package/dist/scripts/9359-cc085d48a4-lite.chunk.js +0 -2
- package/dist/scripts/9359-cc085d48a4-lite.chunk.js.map +0 -1
- package/dist/scripts/9399-2a314327ac-lite.chunk.js +0 -2
- package/dist/scripts/9399-2a314327ac-lite.chunk.js.map +0 -1
- package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
- package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-fcc536bb54.min.js +0 -3
- package/dist/scripts/bundle-fcc536bb54.min.js.map +0 -1
- /package/dist/css/{5143-lite-676baa8218.chunk.css → 1063-lite-676baa8218.chunk.css} +0 -0
- /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
- /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
- /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
- /package/dist/css/{9308-lite-a3c7435ba4.chunk.css → 4273-lite-a3c7435ba4.chunk.css} +0 -0
- /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
- /package/dist/css/{3922-lite-e22262b911.chunk.css → 6596-lite-e22262b911.chunk.css} +0 -0
- /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
- /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
- /package/dist/css/{8478-lite-e22262b911.chunk.css → 9010-lite-e22262b911.chunk.css} +0 -0
- /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
- /package/dist/css/{1820-lite-c88eb54bee.chunk.css → 999-lite-c88eb54bee.chunk.css} +0 -0
- /package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-575b07d922-lite.chunk.js.LICENSE.txt → 1672-0d1fc90529-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 4273-e42f763f00-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 8323-360541a2a8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-82d7e0afb9-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9308-362f86711f-lite.chunk.js.LICENSE.txt → 9230-ae200d2bd3-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-fd31f9f016-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-9736913451-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-fcc536bb54.min.js.LICENSE.txt → bundle-9f8729bedb.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4273-e42f763f00-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/apps/upload/utils/FileExtensionsHelper.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/enums/FeedbackType.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/flight-requests/FollowRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsScroll.tsx","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/table-of-contents.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-coming-soon/ClassificationComingSoon.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-filter/AudienceFilter.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/audiences/ClassificationDashboardAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/classification-tabs.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-dashboard-nav/ClassificationDashboardNav.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/ClassificationDashboard.tsx","file:///app/packages/libs/shared/src/apps/subjects/hooks/useGetTopicsWidgets.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard.tsx","file:///app/packages/projects/lite/src/apps/subjects/errors/TopicNotFoundError.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/ClassificationViewUtils.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/curated-classification-view.scss","file:///app/packages/projects/lite/src/apps/subjects/views/classification/CuratedClassificationView.tsx","file:///app/packages/projects/lite/src/apps/subjects/hooks/useFetchClassificationDashboard.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-gray-900 text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <span\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n >\n {lowerCaseToTitleCase(audience.name)}\n </span>\n );\n}","import * as _ from 'underscore';\n\n/**\n * This are kept as separate variables for when we eventually need a single group of them.\n * For example when we add image upload support.\n */\n\nconst pdfExtensions = ['pdf'];\nconst docExtensions = [ 'doc', 'docx', 'dotx', 'dot', 'rtf', 'docm', 'odt' ];\nconst textExtensions = [ 'csv', 'txt' ];\nconst excelExtensions = [ 'xls', 'xlt', 'xlsx' ];\nconst imageExtensions = [ 'jpg', 'tif', 'png', 'bmp', 'gif', 'jpeg' ];\nconst videoMimeType = 'video/*';\nconst archiveExtensions = [ 'zip', 'rar' ];\nconst powerPointExtensions = [ 'ppt', 'pot', 'pps', 'pptx' ];\n\nconst subtitleExtensions = ['srt'];\n\nconst FileExtensions = {\n IMAGES: `.${imageExtensions.join(',.')}`,\n VIDEO: videoMimeType,\n MIXED_MEDIA: `.${imageExtensions.join(',.')},${videoMimeType}`,\n RESOURCES: `.${[\n ...docExtensions,\n ...excelExtensions,\n ...powerPointExtensions,\n ...pdfExtensions,\n ...textExtensions,\n ...imageExtensions,\n ...archiveExtensions\n ].join(',.')}`,\n SUBTITLES: `.${subtitleExtensions.join(',.')}`\n};\n\nconst FileExtensionHelper = {\n getResourceType(extension: string): string {\n const ext = extension.toLowerCase();\n\n if (_.contains(docExtensions, ext)) return 'document';\n if (_.contains(excelExtensions, ext)) return 'excel';\n if (_.contains(powerPointExtensions, ext)) return 'powerpoint';\n if (_.contains(pdfExtensions, ext)) return 'pdf';\n\n if (_.contains(textExtensions, ext)) return 'text';\n if (_.contains(imageExtensions, ext)) return 'image';\n if (_.contains(archiveExtensions, ext)) return 'archive';\n if (_.contains(subtitleExtensions, ext)) return 'subtitle';\n\n return '';\n }\n};\n\nexport { FileExtensions, FileExtensionHelper };","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","export enum FeedbackType {\n Other,\n SuggestImprovement,\n ReportBug,\n RequestVideo,\n RaiseIssue,\n GivePraise,\n Footer,\n RequestLivestream\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 { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackRequests = {\n submitFeedback(requestData: FeedbackFormRequest, formValues: Record<string, string>): Flight.Request {\n return {\n url: '{gateway}/v1/feedback',\n key: 'submit:feedback',\n type: HttpVerbs.POST,\n data: {\n ...requestData,\n ...formValues\n }\n };\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nconst endpoints = {\n follow: () => `/api/domain/v1/subjects/classifications/following`,\n unfollow: (ids: string[]) => UrlHelper.urlBuilder('/api/domain/v1/subjects/classifications/following', { id: ids })\n};\n\nexport const FollowRequests = {\n /**\n * @param data - array of object ids the user is going to follow\n */\n follow(\n ids: string[],\n userId: string,\n success?: (data: string[]) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: endpoints.follow(),\n key: `follow:${ids.join(',')}`,\n type: HttpVerbs.POST,\n data: ids,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: [userId]\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n },\n\n unfollow(ids: string[], userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: endpoints.unfollow(ids),\n key: `unfollow:${ids.join(',')}`,\n type: HttpVerbs.DELETE,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: []\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n }\n};\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 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\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import React from 'react';\n\nimport { usePrevious } from './usePrevious';\n\nconst HEADER_OFFSET = 80; // Size of header + some extra spacing\n\nexport const useTableOfContentsScroll = (elements: Element[], activeId: string) => {\n const [ hasDoneInitialScroll, setHasDoneInitialScroll ] = React.useState(false);\n\n const previousId = usePrevious(activeId);\n const currentId = activeId;\n\n React.useLayoutEffect(() => {\n if (!hasDoneInitialScroll || previousId !== currentId) {\n const target = elements.find(heading => heading && (heading?.id === currentId));\n\n if (target) {\n const rec = target.getBoundingClientRect();\n\n window.scrollBy({\n top: rec.top - HEADER_OFFSET,\n behavior: 'smooth'\n });\n \n if (!hasDoneInitialScroll)\n setHasDoneInitialScroll(true);\n }\n }\n }, [ elements, previousId, currentId, hasDoneInitialScroll ]);\n};","import Dropzone from 'dropzone';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { FeedbackUserDetails } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackFormHelper = {\n getUserInfo: (\n currentUser: CurrentUser,\n customer: Customer\n ): FeedbackUserDetails => {\n return {\n id: currentUser.id,\n username: currentUser.username,\n email: currentUser.email,\n userType: currentUser.role === UserRole.Admin ? 'Admin' : 'Staff',\n customerId: currentUser.customerId,\n cvcId: customer.crmId,\n customerName: customer.name,\n instanceRegion: currentUser.instanceRegion,\n contentRegion: currentUser.contentRegion,\n firstName: currentUser.givenName,\n lastName: currentUser.familyName\n };\n },\n\n mapInstanceRegionToTag: (instanceRegion: InstanceRegion): string => {\n switch (instanceRegion) {\n case InstanceRegion.AU:\n return 'au';\n case InstanceRegion.NZ:\n return 'nz';\n case InstanceRegion.UK:\n return 'uk';\n case InstanceRegion.US:\n return 'us';\n }\n },\n\n getTags: (currentUser: CurrentUser, product: ProductId, hasStudentExperience: boolean, extraTags: string[]) => {\n const tags = [\n product,\n ...extraTags\n ];\n\n tags.push(hasStudentExperience ? 'student' : 'staff');\n \n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n \n const regionTag = FeedbackFormHelper.mapInstanceRegionToTag(currentUser.instanceRegion);\n \n if (regionTag)\n tags.push(regionTag);\n\n return tags;\n },\n\n categorizeFiles(files: UploadItem[]) {\n return files.reduce((result, file) => {\n const fileInfo = file.get('fileInfo');\n if (Dropzone.isValidFile(file.get('file'), FileExtensions.VIDEO)) {\n result.videoUrls.push(fileInfo?.url);\n } else {\n result.imageUrls.push(fileInfo?.url);\n }\n return result;\n }, {\n imageUrls: [],\n videoUrls: []\n });\n }\n};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ClassificationCounts } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { Classification } from 'libs/shared/interfaces';\n\nconst namespace = 'subject.classificationHeaderDetails';\n\nconst Separator = ({ className }: { className: string }) =>\n <span className={className}>•</span>;\n\ninterface ClassificationHeaderDetailsProps {\n classification: Classification & ClassificationCounts;\n}\n\nexport function ClassificationHeaderDetails(props: ClassificationHeaderDetailsProps): React.ReactElement {\n // TODO: read counts from classification metadata and externalMetadata when data has been cleaned up \n const { childDashboardVideoCount, childDashboardResourceCount, childClassificationCount } = props.classification;\n\n return (\n <p className='mb-n1 font-size-normal fw-normal mt-1'>\n {!!childClassificationCount && (\n <>\n {childClassificationCount >= 1000\n ? <Text namespace={namespace} phrase='topics' options={{ count: childClassificationCount.toLocaleString() }} />\n : <Text namespace={namespace} phrase='topic' options={{ smartCount: childClassificationCount }} />\n }\n </>\n )}\n {!!childDashboardVideoCount && (\n <>\n <Separator className='mx-2' />\n {childDashboardVideoCount >= 1000\n ? <Text namespace={namespace} phrase='videos' options={{ count: childDashboardVideoCount.toLocaleString() }} />\n : <Text namespace={namespace} phrase='video' options={{ smartCount: childDashboardVideoCount }} />\n }\n </>\n )}\n {!!childDashboardResourceCount && (\n <>\n <Separator className='mx-2' />\n {childDashboardResourceCount >= 1000\n ? <Text namespace={namespace} phrase='resources' options={{ count: childDashboardResourceCount.toLocaleString() }} />\n : <Text namespace={namespace} phrase='resource' options={{ smartCount: childDashboardResourceCount }} />\n }\n </>\n )}\n </p>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.curatedClassificationEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedClassificationEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function CuratedClassificationEmptyState(props: CuratedClassificationEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForNP')} />\n {!props.isReadonly ? (\n <EmptyState.Heading>\n <Text phrase='headingForNP' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={cvSvgLibrary.Plus}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"k1iOO\",\"mobile\":\"QwoBj\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { CuratedWidget } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './table-of-contents.scss';\n\ninterface TableOfContentsContainerProps {\n widgets: CuratedWidget[];\n title: string;\n activeId: string;\n appLink?: Core.AppLink;\n clickable?: boolean;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isSmallScreen?: boolean;\n}\ninterface TableOfContentsProps extends TableOfContentsContainerProps {\n getAppLink: (widget: CuratedWidget) => Core.AppLink\n}\n\nfunction TableOfContentsMobile(props: TableOfContentsProps) {\n const [ isExpanded, setIsExpanded ] = React.useState(false);\n\n function logUserAction() {\n const analyticsOptions = {\n actionType: !isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.Dashboard\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n setIsExpanded(!isExpanded);\n logUserAction();\n }\n\n return (\n <div className={`${styles.mobile} d-inline-flex gap-1`}>\n \n {isExpanded && (\n <div className='bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3'>\n <h2 className='h5'>{props.title}</h2>\n <TableOfContentsList\n items={props.widgets}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n onItemClick={() => setIsExpanded(false)}\n />\n </div>\n )}\n <div className={styles.container}>\n <IconButton\n className='btn btn-outline-dark'\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps): JSX.Element {\n return (\n <aside className='col-3'>\n <div className={`${styles.container} ps-3`}>\n <h2 className='h5'>{props.title}</h2>\n \n <TableOfContentsList\n items={props.widgets}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n />\n </div>\n </aside>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsContainerProps): JSX.Element {\n function getAppLink(widget: CuratedWidget): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n \n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = widget.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n return (\n <>\n {!props.isSmallScreen\n ? <TableOfContents {...props} getAppLink={getAppLink} />\n : <TableOfContentsMobile {...props} getAppLink={getAppLink} />\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'subjects.teacherOnlyEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TeacherOnlyEmptyStateProps {\n imageUrl: string;\n ctaAppLink?: () => Core.AppLink;\n}\n\nexport function TeacherOnlyEmptyState(props: TeacherOnlyEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('heading')} />\n <EmptyState.Heading>\n <Text phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={props.ctaAppLink?.()}\n className='btn btn-dark'\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.classificationComingSoon';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ComingSoonProps {\n data: Classification;\n onToggleFollow?: () => void;\n canFollowSubjects: boolean;\n imageUrl: string;\n showFollowButtonSpinner: boolean;\n}\n\nexport function ClassificationComingSoon(props: ComingSoonProps): JSX.Element {\n const isFollowing = !!props.data.followers?.data?.length;\n function onClick(): void {\n props.onToggleFollow?.();\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState className='pt-0'>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('comingSoon')} />\n\n <EmptyState.Heading>\n <Text phrase='comingSoon' />\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n {props.canFollowSubjects && (\n <ActionButton\n svgName={isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell}\n onClick={onClick}\n showSpinner={props.showFollowButtonSpinner}\n className={`btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`}\n >\n <Text phrase={isFollowing ? 'following' : 'follow'} />\n </ActionButton>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item/AudienceItem';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nconst namespace = 'subjects.audienceFilter';\n\ninterface AudienceFilterProps {\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n disabled?: boolean;\n appLink: Core.AppLink;\n disablePersist?: boolean;\n}\n\nexport function AudienceFilter(props: AudienceFilterProps): React.ReactElement {\n const { audiences, activeAudiences, appLink } = props;\n\n const isDisabled = props.disabled || !appLink;\n\n const [ , setActiveAudiences ] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n React.useEffect(() => {\n if (!props.disablePersist)\n setActiveAudiences(activeAudiences);\n }, [activeAudiences]);\n\n function onToggleAudience(audience: PresentationAudience, isSelected: boolean): void {\n if (isDisabled)\n return;\n\n const activeAudienceNames = isSelected\n ? [ ...(activeAudiences?.map(a => a.name) ?? []), audience.name ]\n : activeAudiences.map(a => a.name).filter(name => name !== audience.name);\n\n const getParams = () => {\n const otherParams = ObjectHelper.omit(appLink.params, ['a']);\n\n if (!activeAudienceNames.length)\n return otherParams;\n\n return Object.assign({}, otherParams, { a: activeAudienceNames });\n };\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params: getParams()\n }, { replace: true });\n }\n\n function onClickClearAudiences(): void {\n if (isDisabled)\n return;\n\n const params = ObjectHelper.omit(appLink.params, ['a']);\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params\n }, { replace: true });\n }\n\n if (!audiences || !audiences.length)\n return <></>;\n\n return (\n <div className='d-flex flex-wrap row-gap-2'>\n {audiences.map((a: PresentationAudience) => (\n <AudienceItem\n key={a.masterId}\n audience={a}\n highlight={!isDisabled && !!activeAudiences?.find(aa => aa.masterId === a.masterId)}\n setAudience={onToggleAudience}\n isDisabled={isDisabled}\n />\n ))}\n {(!isDisabled && !!activeAudiences && !!Object.keys(activeAudiences).length) && (\n <DivButton className='info-link d-inline-block ms-1' onClick={onClickClearAudiences}>\n <Text namespace={namespace} phrase='clear' />\n </DivButton>\n )}\n </div>\n );\n}\n\nconst PARTIAL_AUDIENCES = PartialLoadingHelper.getPartialLoadingItems({ numItems: 6 });\n\nexport const PartialAudienceFilter = () => (\n <div className={'d-flex flex-wrap row-gap-2'}>\n {PARTIAL_AUDIENCES.map(({ width }, idx) => (\n <span\n key={idx}\n className='rounded-pill partial-loading-background me-1'\n dangerouslySetInnerHTML={{ __html: ' ' }}\n style={{ width }}\n />\n ))}\n </div>\n);","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\ninterface ClassificationDashboardAudiencesProps {\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n appLink: Core.AppLink;\n isReadonly: boolean;\n disablePersist: boolean;\n}\n\nexport function ClassificationDashboardAudiences(props: ClassificationDashboardAudiencesProps): JSX.Element {\n return (\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.isReadonly}\n appLink={props.appLink}\n disablePersist={props.disablePersist}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"curatedTopicTab\":\"CmVlO\",\"tabTransition\":\"rX31t\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useProductTipsContext } from 'libs/shared/context/product-tips-context/ProductTipsContext';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { useDirectoryTabProductTipSwitcher } from '../../../hooks/useDirectoryTabProductTipSwitcher';\n\nimport styles from './classification-tabs.scss';\n\nconst namespace = 'shared.classificationDashboard';\n\nexport type ClassificationTab = 'new-releases' | 'all-topics' | 'curated-topic' | 'video-list';\n\nfunction getTabs(\n props: ClassificationTabsProps,\n breakpoints: Breakpoints,\n activeTab: ClassificationTab,\n isHighlighting: boolean\n): PillTab[] {\n const showText = breakpoints.lg || breakpoints.xl || breakpoints.xxl || breakpoints.xs;\n\n function getTopicTabClassName(): string {\n let className = isHighlighting ? styles.tabTransition : '';\n\n if (breakpoints.xs)\n return className + ' w-100';\n\n if (showText)\n return className = ` ${styles.curatedTopicTab}`;\n\n return className;\n }\n\n if (TopicsHelper.isTopLevelTopic(props.classification)) {\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'newReleases') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'new-releases',\n svgName: cvSvgLibrary.Sparkle,\n analyticsData: {\n id: 'new-releases',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'newReleases'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n \n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'allTopics') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationDirectory?.(props.classification) : null,\n active: activeTab === 'all-topics',\n svgName: cvSvgLibrary.Grid,\n analyticsData: {\n id: 'all-topics',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'allTopics'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationDirectory?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n }\n\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'topic') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'curated-topic',\n svgName: cvSvgLibrary.Rectangles,\n analyticsData: {\n id: 'curated-topic',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'topic'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: getTopicTabClassName()\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'videoList') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationVideos?.(props.classification) : null,\n active: activeTab === 'video-list',\n svgName: cvSvgLibrary.WidgetSeries,\n analyticsData: {\n id: 'video-list',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'videoList'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationVideos?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n}\n\ninterface ClassificationTabsProps {\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n isReadonly: boolean;\n}\n\nexport function ClassificationTabs(props: ClassificationTabsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { tab, isHighlighting } = useDirectoryTabProductTipSwitcher(props.activeTab);\n\n const { setProductTipRef } = useProductTipsContext('topics-directory-tab');\n\n return (\n <PillTabSelector\n borderRadius='sm'\n containerRef={el => setProductTipRef(el)}\n className={breakpoints.xs ? 'w-100' : ''}\n listClassName='d-flex flex-nowrap'\n tabs={getTabs(props, breakpoints, tab, isHighlighting)}\n />\n );\n}","import React from 'react';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedDashboard, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationDashboardAudiences } from '../audiences/ClassificationDashboardAudiences';\nimport { ClassificationTab, ClassificationTabs } from '../classification-tabs/ClassificationTabs';\n\nfunction shouldHideAudiences(\n audiences: PresentationAudience[],\n activeAudiences: PresentationAudience[],\n isEmpty: boolean,\n isComingSoon: boolean\n): boolean {\n if (isComingSoon)\n return true;\n\n if (isEmpty && !activeAudiences?.length)\n return true;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return true;\n\n return false;\n}\n\ninterface ClassificationDashboardNavProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n getBreadcrumbs: () => Breadcrumb[];\n\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n canViewTopicTabs: boolean;\n isComingSoon: boolean;\n isEmpty: boolean;\n isViewingCurrentPresentation: boolean;\n isReadonly: boolean;\n}\n\nexport function ClassificationDashboardNav(props: ClassificationDashboardNavProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const hideAudiences = shouldHideAudiences(\n props.audiences,\n props.activeAudiences,\n props.isEmpty,\n props.isComingSoon\n );\n\n function canShowTabs(): boolean {\n if (!props.classification || !props.dashboard)\n return false;\n\n if (CuratedDashboardHelper.isSystemGeneratedDashboard(props.dashboard.widgets))\n return false;\n\n // TODO: This is controlled by a domain option that will eventually be deleted on release\n if (!props.canViewTopicTabs)\n return false;\n\n /**\n * For our top-level topics, we can show the topic tab if the topic has a directory dashboard.\n */\n if (TopicsHelper.isTopLevelTopic(props.classification))\n return props.hasTopicDirectoryDashboard;\n\n /**\n * For our lower level topics, we can show the video tab if the topic has one\n */\n if (props.hasTopicVideosDashboard)\n return true;\n\n return false;\n }\n\n function getContainerClass(): string {\n let className = 'd-flex flex-column py-3 mb-3';\n\n if (!props.isComingSoon)\n className += ' border-bottom';\n\n if ((canShowTabs() || hideAudiences) && !breakpoints.xs)\n return className;\n\n return className + ' row-gap-3';\n }\n\n function getTopRowClass(): string {\n if (hideAudiences) {\n if (breakpoints.xs)\n return 'd-flex flex-column justify-content-between row-gap-3';\n\n return 'd-flex align-items-center justify-content-between';\n }\n\n let className = '';\n\n className += 'd-flex align-items-center justify-content-between mb-1';\n\n if (breakpoints.xs)\n className += ' row-gap-3 mb-0';\n\n return className;\n }\n\n function getBottomRowClass(): string {\n let className = 'd-flex align-items-end justify-content-between';\n\n if (breakpoints.xs)\n className += ' row-gap-3 flex-wrap';\n\n return className;\n }\n\n return (\n <div className={getContainerClass()}>\n <div className={getTopRowClass()}>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n {canShowTabs() && hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n\n <div className={getBottomRowClass()}>\n {!hideAudiences && (\n <ClassificationDashboardAudiences\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n appLink={props.appLinks.audience?.()}\n isReadonly={props.isReadonly}\n disablePersist={!props.isViewingCurrentPresentation}\n />\n )}\n\n {canShowTabs() && !hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeaderDetails } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails';\nimport { CuratedClassificationEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState';\nimport { TableOfContentsContainer } from 'libs/shared/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents';\nimport { TeacherOnlyEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState';\nimport { useGetTopicsWidgets } from 'libs/shared/apps/subjects/hooks/useGetTopicsWidgets';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CalendarEvent, CalendarEventContentType, CanFavouriteFunc, Classification, CuratedDashboard, CuratedWidget, CuratedWidgetQueryParams, DashboardStatus, DashboardTargetType, FavouriteFunc, Presentation, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationComingSoon } from './classification-coming-soon/ClassificationComingSoon';\nimport { ClassificationDashboardNav } from './classification-dashboard-nav/ClassificationDashboardNav';\nimport { ClassificationTab } from './classification-tabs/ClassificationTabs';\n\nconst namespace = 'shared.classificationDashboard';\n\nfunction isHeadingWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.Blurb && widget.templateId === WidgetTemplate.Heading;\n}\n\nfunction isTopicWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.CuratedClassifications || widget.widgetId === WidgetTypeId.Classifications;\n}\n\ninterface ClassificationDashboardProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n canViewTopicTabs: boolean;\n tab: ClassificationTab;\n specialEvent?: CalendarEvent;\n\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n getBannerActions?: () => ActionOptions[];\n getBreadcrumbs?: () => Breadcrumb[];\n onToggleFollow?: (classification: Classification, locationContext: LocationContext) => void;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n canFollowSubjects: boolean;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n\n appLinks?: WidgetAppLinks;\n\n imageCdnUrl: string\n emptyImageUrl: string;\n comingSoonImageUrl?: string;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n\n scrollToWidgetId?: string;\n tableOfContentsId?: string;\n\n // Means the dashboard contains no linked or working filters\n isReadonly?: boolean;\n\n // Means the dashboard is being previewed by ClickView staff either in product or in curator\n isPreviewing?: boolean;\n\n // Means the parent topic for the dashboard has a status of \"Coming Soon\"\n isComingSoon?: boolean;\n\n showFollowButtonSpinner?: boolean;\n \n isViewCurrentPresentation?: boolean;\n\n yearGroups?: YearGroup[];\n\n // By default widgets will always be lazyloaded. We override this behaviour only in extenuating \n // circumstances, such as dynamic rendering for SEO.\n lazyLoad?: boolean;\n\n moviesAndTv?: boolean;\n\n isTeacherOnly?: boolean;\n\n // Fallback url to display for the company logo. Only used by Streamable Learning atm\n companyLogoFallbackUrl?: string;\n\n subTextType?: VideoSubTextType;\n \n contentType?: CalendarEventContentType;\n\n isBot?: boolean;\n\n isPlugin: boolean;\n}\n\nClassificationDashboard.defaultProps = {\n appLinks: {}\n};\n\nexport function ClassificationDashboard(props: ClassificationDashboardProps): JSX.Element {\n const { widgets, videoList, videoListWidgetId } = useGetTopicsWidgets(props.dashboard, props.activeAudiences);\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.LGDown);\n const headingRef = React.useRef<Set<Element>>(new Set());\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n\n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n const [ controlledId, setControlledId ] = React.useState(window.location.hash.slice(1) || '');\n\n const [ tableOfContentActiveId, setTableOfContentActiveId ] = React.useState<string>('');\n\n const headingElements = Array.from(headingRef.current);\n useTableOfContentsScroll(headingElements, props.tableOfContentsId);\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n function shouldShowEmptyState(): boolean {\n if (props.isComingSoon)\n return false;\n\n if (props.isTeacherOnly)\n return false;\n\n if (!props.dashboard)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Archived && !props.isReadonly)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Draft && !props.isPreviewing)\n return true;\n\n if (!widgets?.length)\n return true;\n\n if (videoList && videoList.length)\n return false;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n React.useEffect(() => {\n /**\n * When we add the first widget of the dashboard, the showEmptyState is `true`, the WidgetContainer is not going to be rendered to lazyload the `content`\n * so we set the emptyWidget to initial make sure the widget container is rendered to lazyload `widget.content`\n * and let the WidgetContainer to re-set the empty state based on the actual `widget.content` from backend\n */\n if (showEmptyState) {\n setEmptyWidgets(initialEmptyWidgets);\n }\n }, [widgets?.length]);\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n let index = 0;\n\n /**\n * Every time a widget is identified as empty, we check each heading blurb widget\n * to see if it should be hidden. This will be the case when all widgets beneath a heading\n * (up until the next heading) are empty.\n */\n while (index < widgets.length) {\n const currentWidget = widgets[index];\n\n if (!isHeadingWidget(currentWidget)) {\n index++;\n continue;\n }\n\n let isHeadingEmpty = true;\n let subWidgetIndex = index + 1;\n\n while (isHeadingEmpty && subWidgetIndex < widgets.length) {\n const headingSubWidget = widgets[subWidgetIndex];\n\n if (isHeadingWidget(headingSubWidget))\n break;\n\n if (!newEmptyState[headingSubWidget.id] && !isTopicWidget(headingSubWidget))\n isHeadingEmpty = false;\n\n subWidgetIndex++;\n }\n\n index = subWidgetIndex;\n\n newEmptyState[currentWidget.id] = isHeadingEmpty;\n }\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function hideWidget(widget: CuratedWidget): boolean {\n return isHeadingWidget(widget) && emptyWidgets[widget.id];\n }\n\n function useLargeDashboardSpacing(): boolean {\n const target = CuratedDashboardHelper.getDashboardTargetType(props.dashboard);\n\n if (props.moviesAndTv || target === DashboardTargetType.ClassificationVideos)\n return false;\n\n return true;\n }\n\n function getWidgetHeading(widget: CuratedWidget, index: number): string {\n if (widget.widgetId === WidgetTypeId.ClassificationDashboardExternalMedia) {\n const previousWidget = widgets[index - 1];\n\n if (emptyWidgets[previousWidget.id])\n return widget.name.replace('Other videos', 'Videos');\n\n return widget.name;\n }\n\n return widget.name;\n }\n\n const widgetsInTableOfContents = widgets.filter(w => {\n return !hideWidget(w) && !!w.metadata?.showInTableOfContents;\n });\n\n const shouldShowTableOfContents = widgetsInTableOfContents.length >= 2;\n const shouldShowSideTableOfContents = shouldShowTableOfContents && !isSmallScreen;\n\n const isTopLevelTopic = TopicsHelper.isTopLevelTopic(props.classification);\n /**\n * We don't put the .topic-dashboard class when we're in a movies and tv classification\n * because we don't want the extra padding between widgets.\n */\n return (\n <div className={`bg-white px-4 ${useLargeDashboardSpacing() ? 'dashboard-spacing-lg' : ''}`}>\n <BannerHeader\n heading={props.classification.name}\n banner={props.classification.banner}\n imageCdnUrl={props.imageCdnUrl}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n specialEvent={props.specialEvent}\n calendarTheme={{\n background: 'bg-light-blue',\n border: 'border-light-blue'\n }}\n showComingSoon={props.isComingSoon}\n detailsComponent={isTopLevelTopic\n ? () => <ClassificationHeaderDetails classification={props.classification} />\n : null\n }\n />\n\n <ClassificationDashboardNav\n dashboard={props.dashboard}\n classification={props.classification}\n presentation={props.presentation}\n appLinks={props.appLinks}\n activeTab={props.tab}\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n getBreadcrumbs={props.getBreadcrumbs}\n hasTopicDirectoryDashboard={props.hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={props.hasTopicVideosDashboard}\n canViewTopicTabs={props.canViewTopicTabs}\n isComingSoon={props.isComingSoon}\n isEmpty={showEmptyState}\n isViewingCurrentPresentation={props.isViewCurrentPresentation}\n isReadonly={props.isReadonly}\n />\n\n {props.isComingSoon && (\n <ClassificationComingSoon\n imageUrl={props.comingSoonImageUrl}\n data={props.classification}\n canFollowSubjects={props.canFollowSubjects}\n showFollowButtonSpinner={props.showFollowButtonSpinner}\n onToggleFollow={() => props.onToggleFollow(props.classification, LocationContext.ClassificationComingSoon)}\n />\n )}\n\n {!props.isComingSoon && (\n <div className={`${shouldShowSideTableOfContents ? 'row no-wrap' : ''}`}>\n <div className={shouldShowSideTableOfContents ? 'col-9' : ''}>\n {widgets.map((widget, idx) => {\n if (hideWidget(widget))\n return <React.Fragment key={widget.id}></React.Fragment>;\n\n return (\n <WidgetContainerView\n headingElementRef={headingRef}\n key={widget.id}\n id={widget.id}\n name={getWidgetHeading(widget, idx)}\n description={widget.description}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n audiences={props.audiences}\n getContentRequest={getWidgetContentRequest}\n setIsEmpty={onSetIsEmpty}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n appLinks={props.appLinks}\n yearGroups={props.yearGroups}\n presentation={props.presentation}\n analyticsData={props.analyticsData}\n isScrollToTargetWidget={props.scrollToWidgetId === widget.id}\n imageCdnUrl={props.imageCdnUrl}\n onSubmitFeedback={props.onSubmitFeedback}\n metadata={widget.metadata}\n isBot={props.isBot}\n hasTableOfContents={shouldShowSideTableOfContents}\n lazyLoad={props.lazyLoad}\n dashboardTarget={CuratedDashboardHelper.getDashboardTargetType(props.dashboard)}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n contentType={props.contentType}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n preferences={widget.preferences}\n onToggleFollowClassification={props.onToggleFollow}\n isPlugin={props.isPlugin}\n />\n );\n })}\n </div>\n\n {shouldShowTableOfContents && (\n <TableOfContentsContainer\n widgets={widgetsInTableOfContents}\n title={props.classification.name}\n activeId={tableOfContentActiveId}\n clickable={!props.isReadonly}\n analyticsData={props.analyticsData}\n setControlledId={setControlledId}\n isSmallScreen={isSmallScreen}\n />\n )}\n\n {!!videoList?.length && (\n <>\n <WidgetHeader name={LanguageService.getPhrase(namespace, 'videos')} description='' />\n <VideoList\n videos={videoList}\n yearGroups={props.yearGroups}\n getVideoAppLink={(v, opts) => props.appLinks.videoType(v, { ...opts, contextId: videoListWidgetId })}\n getSubTextAppLink={props.appLinks.subText}\n hasPermissions={props.hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n getPreviewQuestionsAppLink={props.appLinks.previewQuestions}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.appLinks.classroomGuide}\n getInteractiveGuidanceAppLink={props.appLinks.interactiveGuidance}\n getResourceGuidanceAppLink={props.appLinks.resourceGuidance}\n />\n </>\n )}\n </div>\n )}\n\n {showEmptyState && (\n <CuratedClassificationEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.appLinks.widgetWizard}\n />\n )}\n\n {props.isTeacherOnly && (\n <TeacherOnlyEmptyState\n imageUrl={props.emptyImageUrl}\n ctaAppLink={() => props.appLinks.allTopics(props.classification.presentationId)}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, CuratedMediaWidget, CuratedWidget, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nexport interface Response {\n widgets: CuratedWidget[];\n\n videoList?: Video[];\n videoListWidgetId?: string;\n}\n\n/**\n * This hook helps us with custom logic for to display system generated dashboards in a slightly\n * different way.\n */\nexport function useGetTopicsWidgets(dashboard: CuratedDashboard, activeAudiences: PresentationAudience[]): Response {\n const {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget\n } = React.useMemo(() => {\n if (!dashboard) {\n return {\n isSystemGeneratedDashboard: false,\n systemGeneratedVideoWidget: null\n };\n }\n\n const isSystemGeneratedDashboard = CuratedDashboardHelper.isSystemGeneratedDashboard(dashboard.widgets);\n\n return {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget: dashboard.widgets.find(widget => {\n return widget.widgetId === WidgetTypeId.ClassificationPinnedVideos;\n })\n };\n }, [dashboard?.id]);\n\n const systemGeneratedVideoContent = Flight.useBasicFetch<CuratedMediaWidget<Video[]>>(\n !!systemGeneratedVideoWidget &&\n DashboardRequests.dashboardWidgetContent(\n systemGeneratedVideoWidget?.id,\n CuratedDashboardHelper.getWidgetParams(\n systemGeneratedVideoWidget.widgetId,\n systemGeneratedVideoWidget.templateId,\n CuratedDashboardHelper.getDashboardTargetType(dashboard),\n activeAudiences?.map(a => a.masterId)\n ),\n systemGeneratedVideoWidget?.templateId\n )\n );\n\n // Non system generated dashboards are returned as per usual\n if (!isSystemGeneratedDashboard)\n return { widgets: ArrayHelper.sortBy(dashboard?.widgets, 'index') };\n\n // System generated dashboard have the video widget removed and returned as a separate video list\n return {\n widgets: dashboard?.widgets?.filter(widget => widget.widgetId !== WidgetTypeId.ClassificationPinnedVideos) ?? [],\n videoList: systemGeneratedVideoContent.data?.content ?? [],\n videoListWidgetId: systemGeneratedVideoWidget?.id\n };\n}","import React from 'react';\n\nimport { PartialAudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nexport function PartialClassificationDashboard(): JSX.Element {\n return (\n <div className='bg-white px-4'>\n <PartialBannerHeader />\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <PartialBreadcrumbs />\n <PartialAudienceFilter />\n </div>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'subjects.topicNotFoundError';\n\nexport class TopicNotFoundError extends ErrorPageError {\n constructor() {\n super('Topic doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'TopicNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, DashboardTargetType, Playlist, PlaylistCollection, Resource, Series, SeriesCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nexport interface ClassificationViewQueryParams {\n a?: string[];\n dashboardId?: string;\n preview?: 'true';\n tocId?: string;\n mtv?: boolean;\n}\n\nconst OMITTED_PARAMS = [ 'preview', 'dashboardId', 'skipPrompt' ];\n\n/**\n * Checks if the classification would have any content with\n * no filters applied\n */\nexport function hasNoContentUnfiltered(classification: Classification): boolean {\n if (!classification)\n return false;\n\n return (\n classification.series?.count === 0 &&\n classification.pinnedVideos?.count === 0 &&\n classification.playlists?.count === 0\n );\n}\n\ninterface HeroVideoWithVideoList {\n heroVideo: Video;\n videoList: Video[];\n}\n\nexport function extractHeroVideo(\n series: SeriesCollection,\n playlists: PlaylistCollection,\n videos: VideoCollection,\n classification: Classification\n): HeroVideoWithVideoList {\n if (!series || !playlists || !videos || !classification)\n return {\n heroVideo: null,\n videoList: videos && videos.data\n };\n\n // If the subject has no series/playlists, and has only 1 video, that video is displayed as the hero.\n if (!series.data.length && !playlists.data.length && videos.data.length === 1) {\n return {\n heroVideo: ArrayHelper.first(videos.data),\n videoList: []\n };\n }\n\n const pinnedVideoIndex = videos.data.findIndex(video => video.id === classification.pinnedVideoMasterId);\n\n if (pinnedVideoIndex === -1)\n return {\n heroVideo: null,\n videoList: videos.data\n };\n\n return {\n heroVideo: videos.data[pinnedVideoIndex],\n videoList: videos.data.filter(vid => vid.id !== classification.pinnedVideoMasterId)\n };\n}\nconst getPhrase = LanguageService.encloseNamespace('subjects.classification');\n\nexport function getBannerActions(\n classification: Classification,\n canFollowSubjects: boolean,\n onFollow: () => void,\n showFollowButtonSpinner: boolean,\n isSmallScreen: boolean\n): ActionOptions[] {\n if (!canFollowSubjects)\n return [];\n\n const isFollowing = !!classification.followers?.data?.length;\n\n return [{\n label: getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: onFollow,\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n}\n\nexport function getClassificationAppLinks(\n classification: Classification,\n targetType: DashboardTargetType,\n params: ClassificationViewQueryParams\n): WidgetAppLinks {\n return {\n audience: () => {\n switch (targetType) {\n case DashboardTargetType.ClassificationDirectory: {\n return null;\n }\n case DashboardTargetType.ClassificationVideos: {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ classification.id, TextHelper.slugify(classification.name) ],\n params\n };\n }\n default: {\n return ClassificationAppLinkHelper.getAppLink(classification, params);\n }\n }\n },\n \n classification: (_classification: Classification | null) => {\n const appLinkClassification = _classification || classification;\n\n return ClassificationAppLinkHelper.getAppLink(\n appLinkClassification,\n ObjectHelper.omit(params, OMITTED_PARAMS)\n );\n },\n\n classificationDirectory: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n classificationVideos: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n moviesAndTv: params.mtv\n })\n ),\n\n allTopics: (presentationId: string) => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL,\n params: { presentationId }\n }),\n\n series: (series: Series) => {\n return SeriesAppLinkHelper.getSeriesAppLink(series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n });\n },\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }\n }),\n\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => {\n if (!canViewResources) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId\n }\n };\n },\n\n classroomGuide: VideoAppLinkHelper.getClassroomGuideAppLink,\n interactiveGuidance: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n resourceGuidance: VideoAppLinkHelper.getResourceGuidanceAppLink\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"followButton\":\"HlRXj\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CalendarRequests } from 'libs/shared/apps/calendar/flight-request/CalendarRequests';\nimport { ClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { PartialClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { FeedbackRequests } from 'libs/shared/flight-requests/FeedbackRequests';\nimport { FollowRequests } from 'libs/shared/flight-requests/FollowRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CalendarEvent, Classification, Config, CurrentUser, Customer, DashboardTargetType, Presentation, PresentationAudience, RegionAlternative, YearGroup } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { TopicNotFoundError } from 'apps/subjects/errors/TopicNotFoundError';\nimport { useFetchClassificationDashboard } from 'apps/subjects/hooks/useFetchClassificationDashboard';\n\nimport { ClassificationViewQueryParams, getClassificationAppLinks } from './ClassificationViewUtils';\n\nimport styles from './curated-classification-view.scss';\n\ninterface CuratedClassificationViewProps {\n id: string;\n queryParams?: ClassificationViewQueryParams;\n targetType: DashboardTargetType;\n}\n\nCuratedClassificationView.defaultProps = {\n queryParams: {}\n};\n\nconst namespace = 'subjects.classification';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function CuratedClassificationView(props: CuratedClassificationViewProps): React.ReactElement {\n const [ showFollowButtonSpinner, setShowFollowButtonSpinner ] = React.useState<boolean>(false);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n currentUser.data &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(props.id, currentUser.data?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const specialEvent = Flight.useBasicFetch<CalendarEvent>(\n classification.data &&\n CalendarRequests.nextTopicSpecialEvent(props.id, classification.data.presentationId)\n );\n\n const {\n activePresentation,\n availablePresentations,\n canAccessPresentation\n } = usePresentation();\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const path = Flight.useBasicFetch<Classification[]>(ClassificationRequests.path(props.id));\n\n const {\n dashboard,\n hasTopicDirectoryDashboard,\n hasTopicVideosDashboard,\n canViewTopicTabs,\n isPreviewing,\n isTeacherOnly\n } = useFetchClassificationDashboard(props.id, props.queryParams, props.targetType);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n ClassificationRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getClassificationMetadata({\n content: classification.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, () => (\n ClassificationAppLinkHelper.getAppLink(classification.data)\n ))\n }));\n\n useHandleObjectError(classification, {\n notFound: TopicNotFoundError\n });\n useDeepLinks({ id: props.id, app: 'topics' });\n\n const isViewCurrentPresentation = activePresentation?.id === presentation.data?.id;\n \n const isSmallScreen = useMediaQuery(MediaQueryStrings.MDDown);\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.ExpandableVideoThumbnail);\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const canFollowSubjects = hasPermissions(PermissionName.FollowSubjects);\n const isComingSoon = (\n classification.data?.status === ClassificationStatus.ComingSoon &&\n !isPreviewing\n );\n\n /**\n * We use the current active audiences to re-fetch content for that specific audience set.\n */\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n const activeAudienceIds = activeAudiences?.map(a => a.masterId) ?? [];\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard.data);\n\n /**\n * Following\n */\n function onToggleFollow(followedClassification: Classification, location: LocationContext) {\n if (!canFollowSubjects || !classification)\n return;\n\n const isTogglingCurrentTopic = followedClassification.id.toString() === classification.data?.id?.toString();\n\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(true);\n\n const isFollowing = TopicsHelper.isFollowing(followedClassification);\n\n const request = isFollowing\n ? FollowRequests.unfollow\n : FollowRequests.follow;\n\n fetchAsync(request([followedClassification.id], currentUser.data?.id))\n .then(() => {\n AnalyticsHelper.logUserAction(analyticsData, {\n location,\n actionType: UserAction.Follow,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: isFollowing ? ToggleDescriptor.Off : ToggleDescriptor.On,\n entity: EntityType.Classification\n });\n\n if (!isTogglingCurrentTopic) {\n alerts.success(getPhrase(isFollowing ? 'unfollowed' : 'followed', { name: followedClassification.name }));\n }\n })\n .finally(() => {\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(false);\n });\n }\n\n async function onSubmitFeedback(feedback: DashboardFeedbackData): Promise<void> {\n const promise = await fetchAsync<void>(FeedbackRequests.submitFeedback({\n type: FeedbackType.Footer,\n user: FeedbackFormHelper.getUserInfo(currentUser.data, customer.data),\n tags: FeedbackFormHelper.getTags(\n currentUser.data,\n ProductId.Primary,\n hasPermissions(PermissionName.StudentExperience),\n [ 'topics', 'in product feedback' ]\n )\n }, {\n reaction: feedback.type,\n feedback: feedback.content,\n location: 'Topic Footer',\n presentationName: presentation.data.description,\n presentationId: presentation.data.id,\n dashboardName: dashboard.data.name,\n dashboardId: dashboard.data.id,\n classificationName: classification.data.name,\n classificationId: classification.data.id\n }));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.data.id,\n classificationId: classification.data.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.ClassificationFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n function getBannerActions(): ActionOptions[] {\n const isFollowing = !!classification.data?.followers?.data?.length;\n\n if (!canFollowSubjects)\n return [];\n\n const actions: ActionOptions[] = [{\n label: isMobile ? '' : getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: () => onToggleFollow(classification.data, LocationContext.Banner),\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'} ${styles.followButton}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(MasterType.Subject, classification.data?.id, presentation.data?.id),\n openInNewTab: true\n });\n \n return actions;\n }\n\n const appLinks = getClassificationAppLinks(classification.data, targetType, props.queryParams);\n\n const breadcrumbs = useBreadcrumbs({ name: classification.data?.name });\n function getBreadcrumbs(): () => Breadcrumb[] {\n if (!canAccessPresentation(presentation.data?.id))\n return;\n\n return () => breadcrumbs;\n }\n \n /**\n * Additional topics data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length,\n activeAudienceNames: activeAudiences?.length ? activeAudiences.map(a => a.name) : null,\n activeAudienceIds: activeAudienceIds.length ? activeAudienceIds : null\n };\n\n const dataLoaded = !!config.data\n && dashboard.hasCompleted\n && !!classification.data\n && !!presentation.data\n && !!path.data\n && !!availablePresentations\n && !!audiences.data\n && specialEvent.hasCompleted;\n\n if (!dataLoaded)\n return <PartialClassificationDashboard />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='position-relative'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='topic' />}\n <ClassificationDashboard\n dashboard={dashboard.data}\n classification={classification.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n getBreadcrumbs={getBreadcrumbs()}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n presentation={presentation.data}\n onToggleFollow={onToggleFollow}\n getBannerActions={getBannerActions}\n audiences={props.queryParams.mtv ? null : audiences.data}\n activeAudiences={activeAudiences}\n analyticsData={analyticsData}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n emptyImageUrl={isTeacherOnly ? ImageUrls.EmptyStates.Topics.TEACHER_ONLY : ImageUrls.EmptyStates.Topics.TOPIC}\n isComingSoon={isComingSoon}\n showFollowButtonSpinner={showFollowButtonSpinner}\n comingSoonImageUrl={ImageUrls.EmptyStates.Topics.COMING_SOON}\n appLinks={appLinks}\n isPreviewing={isPreviewing}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n isViewCurrentPresentation={isViewCurrentPresentation}\n canFollowSubjects={canFollowSubjects}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n tableOfContentsId={props.queryParams.tocId}\n yearGroups={yearGroups.data}\n lazyLoad={!SeoHelper.isBot()}\n moviesAndTv={props.queryParams.mtv}\n isTeacherOnly={isTeacherOnly}\n specialEvent={specialEvent.data}\n isBot={SeoHelper.isBot()}\n canViewTopicTabs={canViewTopicTabs}\n hasTopicDirectoryDashboard={hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={hasTopicVideosDashboard}\n tab={TopicsHelper.getActiveTopicTab(classification.data, props.targetType)}\n // just... one... more.. prop....\n isPlugin={isPlugin}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}\n","import { useSettings } from 'libs/shared/hooks/useSettings';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\n\nimport { ClassificationViewQueryParams } from '../views/classification/ClassificationViewUtils';\n\nexport function useFetchClassificationDashboard(\n id: string,\n queryParams: ClassificationViewQueryParams,\n targetType: DashboardTargetType\n) {\n const { hasTopicDirectories } = useSettings(null);\n\n const {\n dashboard: curatedTopicDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.Classification\n });\n\n const { dashboard: directoryDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationDirectory\n });\n\n const { dashboard: videosDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationVideos\n });\n\n function getDashboard() {\n switch (targetType) {\n case DashboardTargetType.Classification:\n return curatedTopicDashboard;\n case DashboardTargetType.ClassificationDirectory:\n return directoryDashboard;\n case DashboardTargetType.ClassificationVideos:\n return videosDashboard;\n }\n }\n\n return {\n dashboard: getDashboard(),\n canViewTopicTabs: hasTopicDirectories,\n hasTopicDirectoryDashboard: !!directoryDashboard.data,\n hasTopicVideosDashboard: !!videosDashboard.data,\n isTeacherOnly,\n isPreviewing\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["CalendarRequests","calendarEvents","from","to","presentationId","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","Date","objectType","formatData","events","AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","className","onClick","FunctionHelper","role","name","split","map","s","charAt","toUpperCase","substring","join","defaultProps","pdfExtensions","docExtensions","textExtensions","excelExtensions","imageExtensions","videoMimeType","archiveExtensions","powerPointExtensions","subtitleExtensions","FileExtensions","IMAGES","VIDEO","MIXED_MEDIA","RESOURCES","SUBTITLES","FileExtensionHelper","getResourceType","extension","ext","toLowerCase","TabContents","tab","svgName","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","active","appLink","analyticsData","analyticsOptions","onSelect","onSelectTab","TableOfContentsList","actionType","entity","location","items","item","idx","localState","DivButton","id","activeId","ScrollHelper","setControlledId","onItemClick","AppLink","getAppLink","appLinkOptions","replace","FeedbackType","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","FeedbackRequests","submitFeedback","requestData","formValues","endpoints","ids","FollowRequests","follow","userId","success","error","followers","invalidationKeys","unfollow","generateCacheKey","flightObjs","obj","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","usePrevious","value","current","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","heading","window","setTimeout","isIntersecting","target","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","length","useTableOfContentsScroll","elements","hasDoneInitialScroll","setHasDoneInitialScroll","previousId","currentId","find","rec","getBoundingClientRect","scrollBy","top","behavior","FeedbackFormHelper","getUserInfo","currentUser","customer","username","email","userType","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapInstanceRegionToTag","getTags","product","hasStudentExperience","extraTags","tags","push","regionTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","namespace","Separator","ClassificationHeaderDetails","classification","childDashboardVideoCount","childDashboardResourceCount","childClassificationCount","Text","phrase","options","toLocaleString","smartCount","getPhrase","LanguageService","CuratedClassificationEmptyState","isArchived","dashboard","EmptyState","src","imageUrl","altText","isReadonly","Tooltip","title","spanHack","text","addWidgetApplink","icon","disabled","TableOfContentsMobile","isExpanded","setIsExpanded","widgets","IconButton","AnalyticsHelper","TableOfContents","TableOfContentsContainer","widget","currentAppLink","ContextService","tocId","isSmallScreen","TeacherOnlyEmptyState","ctaAppLink","ClassificationComingSoon","isFollowing","canFollowSubjects","ActionButton","onToggleFollow","showSpinner","showFollowButtonSpinner","AudienceFilter","audiences","activeAudiences","setActiveAudiences","SharedViewModelKeys","undefined","storage","onToggleAudience","isSelected","otherParams","activeAudienceNames","a","filter","ObjectHelper","Object","assign","disablePersist","masterId","aa","keys","PARTIAL_AUDIENCES","PartialLoadingHelper","numItems","PartialAudienceFilter","width","dangerouslySetInnerHTML","__html","style","ClassificationDashboardAudiences","getTabs","breakpoints","activeTab","isHighlighting","showText","lg","xl","xxl","xs","TopicsHelper","appLinks","classificationName","presentation","presentationDescription","description","classificationDirectory","classificationVideos","ClassificationTabs","useBreakpoints","useDirectoryTabProductTipSwitcher","setProductTipRef","el","ClassificationDashboardNav","isEmpty","hideAudiences","isComingSoon","AudienceHelper","canShowTabs","canViewTopicTabs","hasTopicDirectoryDashboard","hasTopicVideosDashboard","getTopRowClass","Breadcrumbs","breadcrumbs","getBreadcrumbs","getBottomRowClass","isViewingCurrentPresentation","isHeadingWidget","widgetId","WidgetTypeId","templateId","WidgetTemplate","ClassificationDashboard","isSystemGeneratedDashboard","systemGeneratedVideoWidget","systemGeneratedVideoContent","DashboardRequests","videoList","content","videoListWidgetId","useGetTopicsWidgets","headingRef","Set","initialEmptyWidgets","acc","emptyWidgets","setEmptyWidgets","hash","slice","tableOfContentActiveId","setTableOfContentActiveId","getWidgetContentRequest","widgetTypeId","template","tableOfContentsId","showEmptyState","isTeacherOnly","isPreviewing","values","every","state","onSetIsEmpty","newEmptyState","currentWidget","isHeadingEmpty","subWidgetIndex","headingSubWidget","hideWidget","getWidgetHeading","previousWidget","widgetsInTableOfContents","w","metadata","showInTableOfContents","shouldShowTableOfContents","shouldShowSideTableOfContents","isTopLevelTopic","moviesAndTv","BannerHeader","banner","imageCdnUrl","actions","getBannerActions","actionsDropdownClassName","specialEvent","calendarTheme","background","border","showComingSoon","detailsComponent","isViewCurrentPresentation","comingSoonImageUrl","WidgetContainerView","headingElementRef","getContentRequest","setIsEmpty","setFavourite","canFavourite","yearGroups","isScrollToTargetWidget","scrollToWidgetId","onSubmitFeedback","isBot","hasTableOfContents","lazyLoad","dashboardTarget","widgetIndex","hasPermissions","hasLocalPermissions","companyLogoFallbackUrl","subTextType","contentType","resourceThumbnailFallbackImageUrl","preferences","onToggleFollowClassification","isPlugin","clickable","WidgetHeader","VideoList","videos","getVideoAppLink","v","opts","videoType","contextId","getSubTextAppLink","subText","presentationAudiences","getPreviewQuestionsAppLink","previewQuestions","getClassroomGuideAppLink","classroomGuide","getInteractiveGuidanceAppLink","interactiveGuidance","getResourceGuidanceAppLink","resourceGuidance","emptyImageUrl","widgetWizard","allTopics","PartialClassificationDashboard","TopicNotFoundError","application","action","ErrorPageError","OMITTED_PARAMS","CuratedClassificationView","queryParams","setShowFollowButtonSpinner","alerts","fetchAsync","usePermissions","usePluginHelper","config","ConfigRequests","UserRequests","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","PermissionName","CustomerRequests","ClassificationRequests","AudienceRequests","usePresentation","activePresentation","availablePresentations","canAccessPresentation","isAuthenticated","path","targetType","hasTopicDirectories","useSettings","curatedTopicDashboard","directoryDashboard","videosDashboard","getDashboard","useFetchClassificationDashboard","regionAlternatives","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","allowIndexing","hrefLang","ClassificationAppLinkHelper","useDeepLinks","app","isMobile","useLiteFavourites","u","videoActions","useVideoActions","ClassificationStatus","activeAudienceIds","followedClassification","isTogglingCurrentTopic","toString","request","then","workflowPhase","descriptor","args","TextHelper","_classification","appLinkClassification","video","VideoAppLinkHelper","context","RelatedVideosContext","mtv","series","SeriesAppLinkHelper","playlist","resource","videoId","canViewResources","getClassificationAppLinks","useBreadcrumbs","presentationName","currentClassificationId","currentClassificationName","followingCurrentClassification","hasCompleted","VideoActionsContext","PreviewBanner","label","button","tooltip","href","MasterType","openInNewTab","ImageUrls","feedback","user","ProductId","reaction","dashboardName","dashboardId","promise","feedbackType"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4395],{49935:(e,t,r)=>{"use strict";r.d(t,{Oo:()=>b,b2:()=>y});var n=r(32735),a=r(23481),o=r(36848),l=r(86764),c=r(3747),i=r(5859),u=r(35223),s=r(83914);function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,l,c=[],i=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);i=!0);}catch(e){u=!0,a=e}finally{try{if(!i&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(u)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(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.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var p=a.T.encloseNamespace("shared.breadcrumbComponent"),d=n.forwardRef((function(e,t){var r=e.breadcrumb,a=r.name,l=r.appLink,c=r.active,i=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,a):n.createElement(o.F,{appLink:l,ref:t},i&&n.createElement(s.x,{svgName:u.vn.ChevronLeft,size:s.S.Small}),n.createElement("span",{className:i?"ms-2":""},a)))})),b=function(e){var t=e.breadcrumbs,r=(0,c.a)(l.r.XS),a=(null==t?void 0:t.length)||0,o=f(n.useState(!1),2),i=o[0],u=o[1],s=f(n.useState(!1),2),m=s[0],b=s[1],y=n.useRef();if(n.useEffect((function(){var e,r=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;a>3&&r>56&&u(!0)}),[null==t?void 0:t.length]),n.useLayoutEffect((function(){var e;m&&(null===(e=y.current)||void 0===e||e.focus())}),[y.current,m]),!a||r&&a<2)return n.createElement(n.Fragment,null);if(r)return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(d,{breadcrumb:t[a-2],withBackIcon:!0})));var v=n.createElement(d,{breadcrumb:t[0]}),g=a>2?n.createElement(d,{breadcrumb:t[a-2]}):n.createElement(n.Fragment,null),h=n.createElement(d,{breadcrumb:t[a-1]}),E=t.slice(1,a-2);return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},v,i?n.createElement("li",{className:"breadcrumb-item"},n.createElement("button",{className:"btn-link",onClick:function(){u(!1),b(!0)},"aria-label":p("expand")},"...")):E.map((function(e,t){return n.createElement(d,{key:t,breadcrumb:e,ref:0===t?y:null})})),g,h))},y=n.memo((function(e){var t=e.numItems,r=void 0===t?3:t;return(0,c.a)(l.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},i.u.getPartialLoadingItems({numItems:r}).map((function(e,t){var r=e.width;return n.createElement("li",{key:t,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:r},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},66903:(e,t,r)=>{"use strict";r.d(t,{k:()=>s});var n=r(32735),a=r(80130),o=r(59087),l=r(23481);const c={normal:"Q1UGv",copyBtn:"J3fBx"};function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var u=l.T.encloseNamespace("shared.copyInput");function s(e){var t,r,l=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,l,c=[],i=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);i=!0);}catch(e){u=!0,a=e}finally{try{if(!i&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(u)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(t,r)||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=l[0],f=l[1],m=n.createElement("div",{className:"input-group"},n.createElement("input",{type:"text",autoComplete:"off",className:"form-control ".concat("normal"===e.styling?c.normal:""),spellCheck:!1,value:e.value,readOnly:!0}),n.createElement(o.CopyToClipboard,{text:e.value},n.createElement("button",{className:"btn btn-outline-dark border border-secondary py-0 text-nowrap",onClick:function(t){t.preventDefault(),e.onCopy&&e.onCopy(),s||(f(!0),setTimeout((function(){return f(!1)}),2e3))}},s?e.copiedText||u("copied"):e.copyText||u("copy"))));return e.label?n.createElement(a.Z.Group,{className:"form-group"},n.createElement(a.Z.Label,null,e.label),m):m}s.defaultProps={styling:"normal"}},99705:(e,t,r)=>{"use strict";var n,a;r.d(t,{b:()=>a}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(n||(n={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="22110291468057",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097"}(a||(a={}))},5859:(e,t,r)=>{"use strict";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}r.d(t,{u:()=>o});var a={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=Object.assign(Object.assign({},a),t);return(e=Array(r.numItems),function(e){if(Array.isArray(e))return n(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 n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(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.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*r.maxWidth),r.minWidth),"px")}}))}}},81803:(e,t,r)=>{"use strict";r.d(t,{d:()=>d});var n=r(32735),a=r(81886),o=r(23481),l=r(49935),c=r(22902),i=r(14070),u=r(97291),s=r(96368);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var m="settings.settingsLayout",p=function(e){var t=(0,c.T)().hasPermissions,r=(0,s.e)();if(e)return t(e);var n=a.Q.C$.getCurrentAppLink();return n.application!==u.O.SETTINGS||r.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===n.action}))}))};function d(e){var t,r=p(e.requiredPermissions);if(n.useEffect((function(){r||a.Q.C$.trigger({application:u.O.SETTINGS,action:i.e.Settings.HOME},{replace:!0})}),[r]),!r)return n.createElement(n.Fragment,null);var c,s=e.breadcrumbs.map((function(t,r){return{name:t,appLink:{application:u.O.SETTINGS,action:i.e.Settings.HOME},active:r===e.breadcrumbs.length-1}}));return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"d-flex align-items-center justify-content-between"},n.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),n.createElement("div",{className:"pb-3"},n.createElement(l.Oo,{breadcrumbs:[{name:o.T.getPhrase(m,"settingsBreadcrumb"),appLink:{application:u.O.SETTINGS,action:i.e.Settings.HOME}}].concat((c=s,function(e){if(Array.isArray(e))return f(e)}(c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(c)||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.")}()))})),e.description&&n.createElement(n.Fragment,null,n.createElement("p",null,e.description),n.createElement("hr",null)),e.children)}},84395:(e,t,r)=>{"use strict";r.r(t),r.d(t,{RssFeedView:()=>g});var n=r(32735),a=r(23481),o=r(97395),l=r(20354),c=r(66903),i=r(83345),u=r(99705),s=r(39151),f=r(1666),m=r(31949),p=r(12778),d=r(81803);const b={schoolId:"a8qc7",feedUrl:"U0FAn"};var y="settings.rssFeed",v=a.T.encloseNamespace(y);function g(){var e=l.a.useBasicFetch(m.N.currentUser()),t=l.a.useBasicFetch(e.data&&f.h.customer(e.data.customerId)),r=l.a.useBasicFetch(s.L.config());if(!(e.hasCompleted&&t.hasCompleted&&r.hasCompleted))return n.createElement(n.Fragment,null);var a=o._.urlBuilder(o._.safeUrlConcat(r.data.onlineUrl,"/feed"),{schoolId:t.data.customerGuid});return n.createElement(d.d,{heading:v("heading"),breadcrumbs:[v("heading")]},n.createElement("p",null,n.createElement(i.x,{namespace:y,phrase:"info"})," ",n.createElement("a",{href:p.o.getLiteArticle(u.b.RssFeed),target:"_blank",className:"text-info btn-link"},n.createElement(i.x,{namespace:y,phrase:"learnMore"}))),n.createElement("div",{className:b.schoolId},n.createElement(c.k,{value:t.data.customerGuid,copyText:v("copy"),label:v("schoolId")})),n.createElement("div",{className:b.feedUrl},n.createElement(c.k,{value:a,label:v("feedUrl")})))}},91969:(e,t,r)=>{"use strict";var n=r(47033),a={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var r,o,l,c,i,u,s=!1;t||(t={}),r=t.debug||!1;try{if(l=n(),c=document.createRange(),i=document.getSelection(),(u=document.createElement("span")).textContent=e,u.ariaHidden="true",u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){r&&console.warn("unable to use e.clipboardData"),r&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var o=a[t.format]||a.default;window.clipboardData.setData(o,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(u),c.selectNodeContents(u),i.addRange(c),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");s=!0}catch(n){r&&console.error("unable to copy using execCommand: ",n),r&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),s=!0}catch(n){r&&console.error("unable to copy using clipboardData: ",n),r&&console.error("falling back to prompt"),o=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(o,e)}}finally{i&&("function"==typeof i.removeRange?i.removeRange(c):i.removeAllRanges()),u&&document.body.removeChild(u),l()}return s}},44818:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var a=c(r(32735)),o=c(r(91969)),l=["text","onCopy","options","children"];function c(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){d(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function f(e,t){return f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},f(e,t)}function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var b=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}(y,e);var t,r,c,i,b=(c=y,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=p(c);if(i){var r=p(this).constructor;e=Reflect.construct(t,arguments,r)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return m(e)}(this,e)});function y(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,y);for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return d(m(e=b.call.apply(b,[this].concat(r))),"onClick",(function(t){var r=e.props,n=r.text,l=r.onCopy,c=r.children,i=r.options,u=a.default.Children.only(c),s=(0,o.default)(n,i);l&&l(n,s),u&&u.props&&"function"==typeof u.props.onClick&&u.props.onClick(t)})),e}return t=y,(r=[{key:"render",value:function(){var e=this.props,t=(e.text,e.onCopy,e.options,e.children),r=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,l),n=a.default.Children.only(t);return a.default.cloneElement(n,u(u({},r),{},{onClick:this.onClick}))}}])&&s(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),y}(a.default.PureComponent);t.CopyToClipboard=b,d(b,"defaultProps",{onCopy:void 0,options:void 0})},59087:(e,t,r)=>{"use strict";var n=r(44818).CopyToClipboard;n.CopyToClipboard=n,e.exports=n},47033:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,r=[],n=0;n<e.rangeCount;n++)r.push(e.getRangeAt(n));switch(t.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":t.blur();break;default:t=null}return e.removeAllRanges(),function(){"Caret"===e.type&&e.removeAllRanges(),e.rangeCount||r.forEach((function(t){e.addRange(t)})),t&&t.focus()}}}}]);
|
|
2
|
+
//# sourceMappingURL=4395-d0815835c8-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4395-d0815835c8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/copy-input/copy-input.scss","file:///app/packages/libs/shared/src/components/copy-input/CopyInput.tsx","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rss-feed/rss-feed.scss","file:///app/packages/projects/lite/src/apps/settings/views/rss-feed/RssFeedView.tsx","file:///app/node_modules/copy-to-clipboard/index.js","file:///app/node_modules/react-copy-to-clipboard/lib/Component.js","file:///app/node_modules/react-copy-to-clipboard/lib/index.js","file:///app/node_modules/toggle-selection/index.js"],"sourcesContent":["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 { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"normal\":\"Q1UGv\",\"copyBtn\":\"J3fBx\"};","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport styles from './copy-input.scss';\n\nconst namespace = 'shared.copyInput';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInputProps {\n value: string;\n label?: string;\n // Greyed means the input will be greyed out. Normal means it will appear like a normal input\n styling?: 'greyed' | 'normal';\n onCopy?: () => void;\n copyText?: string;\n copiedText?: string;\n}\n\nCopyInput.defaultProps = {\n styling: 'normal'\n};\n\nexport function CopyInput(props: CopyInputProps): JSX.Element {\n const [ showCopiedText, setShowCopiedText ] = React.useState(false);\n\n function onCopy(e: React.MouseEvent): void {\n e.preventDefault();\n\n if (props.onCopy)\n props.onCopy();\n\n if (showCopiedText)\n return;\n\n setShowCopiedText(true);\n setTimeout(() => setShowCopiedText(false), 2000);\n }\n\n const input = (\n <div className='input-group'>\n <input\n type='text'\n autoComplete='off'\n className={`form-control ${props.styling === 'normal' ? styles.normal : ''}`}\n spellCheck={false}\n value={props.value}\n readOnly\n />\n <CopyToClipboard text={props.value}>\n <button\n className={`btn btn-outline-dark border border-secondary py-0 text-nowrap`}\n onClick={onCopy}\n >\n {showCopiedText ?\n props.copiedText || getPhrase('copied') :\n props.copyText || getPhrase('copy')\n }\n </button>\n </CopyToClipboard>\n </div>\n );\n\n if (props.label) {\n return (\n <Form.Group className='form-group'>\n <Form.Label>{props.label}</Form.Label>\n {input}\n </Form.Group>\n );\n }\n\n return input;\n}\n","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '22110291468057',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097'\n}\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"schoolId\":\"a8qc7\",\"feedUrl\":\"U0FAn\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CopyInput } from 'libs/shared/components/copy-input/CopyInput';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport styles from './rss-feed.scss';\n\nconst namespace = 'settings.rssFeed';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function RssFeedView(): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const customer = Flight.useBasicFetch<Customer>(\n currentUser.data && CustomerRequests.customer(currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dataLoded = (\n currentUser.hasCompleted &&\n customer.hasCompleted &&\n config.hasCompleted\n );\n\n if (!dataLoded)\n return <></>;\n\n const feedUrl = UrlHelper.urlBuilder(\n UrlHelper.safeUrlConcat(config.data.onlineUrl, '/feed'),\n { schoolId: customer.data.customerGuid }\n );\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n >\n <p>\n <Text namespace={namespace} phrase='info' /> \n <a href={ArticleHelper.getLiteArticle(LiteSupportArticle.RssFeed)} target='_blank' className='text-info btn-link'>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n </p>\n\n <div className={styles.schoolId}>\n <CopyInput value={customer.data.customerGuid} copyText={getPhrase('copy')} label={getPhrase('schoolId')} />\n </div>\n <div className={styles.feedUrl}>\n <CopyInput value={feedUrl} label={getPhrase('feedUrl')} />\n </div>\n </SettingsLayout>\n );\n}","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","LanguageService","CopyInput","showCopiedText","setShowCopiedText","input","type","autoComplete","styling","spellCheck","value","readOnly","CopyToClipboard","text","e","preventDefault","onCopy","setTimeout","copiedText","copyText","label","Form","defaultProps","OnlineSupportArticle","LiteSupportArticle","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Array","Math","max","floor","random","namespace","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","i","heading","headingButton","description","children","RssFeedView","currentUser","UserRequests","customer","data","CustomerRequests","customerId","config","ConfigRequests","hasCompleted","feedUrl","UrlHelper","onlineUrl","schoolId","customerGuid","Text","phrase","href","ArticleHelper","target","deselectCurrent","clipboardToIE11Formatting","module","exports","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","clipboardData","console","warn","window","clearData","setData","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","prompt","removeRange","removeAllRanges","removeChild","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_defineProperties","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_getPrototypeOf","getPrototypeOf","_React$PureComponent","subClass","superClass","TypeError","create","_inherits","Constructor","protoProps","Derived","hasNativeReflectConstruct","_super","Reflect","construct","sham","Proxy","Boolean","valueOf","call","_isNativeReflectConstruct","result","Super","NewTarget","this","_possibleConstructorReturn","_this","instance","_classCallCheck","_len","args","_key","concat","event","_this$props","elem","Children","only","_this$props2","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","cloneElement","PureComponent","undefined","rangeCount","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur"],"sourceRoot":""}
|