@clickview/lite 0.50.0 → 0.50.1-rc.0
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 +2 -2
- package/dist/css/{6846-lite-db93efd058.chunk.css → 1850-lite-dca6b9e86d.chunk.css} +1 -0
- package/dist/css/{2137-lite-6d16d5d7c2.chunk.css → 2137-lite-7045732fc8.chunk.css} +2 -2
- package/dist/css/{2795-lite-1e800fdd04.chunk.css → 2795-lite-1641e6fbf9.chunk.css} +2 -2
- package/dist/css/{458-lite-ecaf4729d3.chunk.css → 3515-lite-c8a3139b8b.chunk.css} +2 -2
- package/dist/css/{8960-lite-a80ad92ea7.chunk.css → 4489-lite-7d5d204d0c.chunk.css} +8 -7
- package/dist/css/{3515-lite-ecaf4729d3.chunk.css → 458-lite-c8a3139b8b.chunk.css} +2 -2
- package/dist/css/{5242-lite-512783e2fb.chunk.css → 5242-lite-58cdcd1ec4.chunk.css} +2 -2
- package/dist/css/{5446-lite-b68e159c6c.chunk.css → 5446-lite-ae2395342f.chunk.css} +2 -2
- package/dist/css/6102-lite-6e94a699ed.chunk.css +39 -0
- package/dist/css/{1437-lite-b847c9e2b6.chunk.css → 6415-lite-707657102b.chunk.css} +1 -1
- package/dist/css/{9839-lite-53b02845a4.chunk.css → 6850-lite-769c93cb9e.chunk.css} +16 -16
- package/dist/css/{7987-lite-7006eb4ded.chunk.css → 7987-lite-94679244a2.chunk.css} +2 -2
- package/dist/css/{355-lite-e474c8ddce.chunk.css → 8192-lite-8721e2ed68.chunk.css} +8 -7
- package/dist/css/{8316-lite-f60e236048.chunk.css → 8316-lite-9083a6565c.chunk.css} +2 -2
- package/dist/css/{9417-lite-f60e236048.chunk.css → 9417-lite-9083a6565c.chunk.css} +2 -2
- package/dist/css/{9620-lite-b202aa1d5c.chunk.css → 9620-lite-d77e9ad59b.chunk.css} +1 -1
- package/dist/css/{7187-lite-db93efd058.chunk.css → 9818-lite-dca6b9e86d.chunk.css} +1 -0
- package/dist/css/{8139-lite-5511af77bf.chunk.css → 986-lite-3bf6e93049.chunk.css} +1 -0
- package/dist/css/{lite-app-cf9b57ee91.css → lite-app-28b7b96628.css} +8 -6
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1080-d6dfc36c03-lite.chunk.js → 1080-362271a654-lite.chunk.js} +2 -2
- package/dist/scripts/{1080-d6dfc36c03-lite.chunk.js.map → 1080-362271a654-lite.chunk.js.map} +1 -1
- package/dist/scripts/1169-3df974a8eb-lite.chunk.js +2 -0
- package/dist/scripts/1169-3df974a8eb-lite.chunk.js.map +1 -0
- package/dist/scripts/{1285-1ba9b0640e-lite.chunk.js → 1285-818f4ed377-lite.chunk.js} +1 -1
- package/dist/scripts/{1285-1ba9b0640e-lite.chunk.js.map → 1285-818f4ed377-lite.chunk.js.map} +1 -1
- package/dist/scripts/1313-455608bc46-lite.chunk.js +2 -0
- package/dist/scripts/1313-455608bc46-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-2ee86e6e68-lite.chunk.js → 1379-3a1ba4b4d9-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-2ee86e6e68-lite.chunk.js.map → 1379-3a1ba4b4d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1518-be314d1248-lite.chunk.js → 1518-b808d8043f-lite.chunk.js} +2 -2
- package/dist/scripts/1518-b808d8043f-lite.chunk.js.map +1 -0
- package/dist/scripts/{1617-3cf9199cb1-lite.chunk.js → 1617-e1735deb2a-lite.chunk.js} +1 -1
- package/dist/scripts/{1617-3cf9199cb1-lite.chunk.js.map → 1617-e1735deb2a-lite.chunk.js.map} +1 -1
- package/dist/scripts/1672-672f298d82-lite.chunk.js +3 -0
- package/dist/scripts/1672-672f298d82-lite.chunk.js.map +1 -0
- package/dist/scripts/1750-a525866169-lite.chunk.js +2 -0
- package/dist/scripts/1750-a525866169-lite.chunk.js.map +1 -0
- package/dist/scripts/1818-74a3d26afd-lite.chunk.js +2 -0
- package/dist/scripts/1818-74a3d26afd-lite.chunk.js.map +1 -0
- package/dist/scripts/1820-68114ca994-lite.chunk.js +2 -0
- package/dist/scripts/1820-68114ca994-lite.chunk.js.map +1 -0
- package/dist/scripts/{1863-a6e7446cd8-lite.chunk.js → 1863-618c9bd7af-lite.chunk.js} +1 -1
- package/dist/scripts/{1863-a6e7446cd8-lite.chunk.js.map → 1863-618c9bd7af-lite.chunk.js.map} +1 -1
- package/dist/scripts/1905-af9a8f8824-lite.chunk.js +2 -0
- package/dist/scripts/1905-af9a8f8824-lite.chunk.js.map +1 -0
- package/dist/scripts/2004-4e2d98041c-lite.chunk.js +3 -0
- package/dist/scripts/2004-4e2d98041c-lite.chunk.js.map +1 -0
- package/dist/scripts/{209-148abe2aa1-lite.chunk.js → 209-4a54845452-lite.chunk.js} +2 -2
- package/dist/scripts/209-4a54845452-lite.chunk.js.map +1 -0
- package/dist/scripts/2137-093f479ff9-lite.chunk.js +2 -0
- package/dist/scripts/2137-093f479ff9-lite.chunk.js.map +1 -0
- package/dist/scripts/2199-cfc0ff4e1e-lite.chunk.js +2 -0
- package/dist/scripts/2199-cfc0ff4e1e-lite.chunk.js.map +1 -0
- package/dist/scripts/2703-64f709f0d0-lite.chunk.js +2 -0
- package/dist/scripts/2703-64f709f0d0-lite.chunk.js.map +1 -0
- package/dist/scripts/{2795-b3f0673e3e-lite.chunk.js → 2795-0616748349-lite.chunk.js} +1 -1
- package/dist/scripts/{2795-b3f0673e3e-lite.chunk.js.map → 2795-0616748349-lite.chunk.js.map} +1 -1
- package/dist/scripts/2877-40bb796d59-lite.chunk.js +2 -0
- package/dist/scripts/2877-40bb796d59-lite.chunk.js.map +1 -0
- package/dist/scripts/3020-2b9042238c-lite.chunk.js +2 -0
- package/dist/scripts/3020-2b9042238c-lite.chunk.js.map +1 -0
- package/dist/scripts/{3070-47e46e0d89-lite.chunk.js → 3070-fb8eb47716-lite.chunk.js} +1 -1
- package/dist/scripts/{3070-47e46e0d89-lite.chunk.js.map → 3070-fb8eb47716-lite.chunk.js.map} +1 -1
- package/dist/scripts/3231-65bbddef35-lite.chunk.js +2 -0
- package/dist/scripts/3231-65bbddef35-lite.chunk.js.map +1 -0
- package/dist/scripts/3403-12c460d3f6-lite.chunk.js +2 -0
- package/dist/scripts/3403-12c460d3f6-lite.chunk.js.map +1 -0
- package/dist/scripts/3515-4de2fd7070-lite.chunk.js +2 -0
- package/dist/scripts/3515-4de2fd7070-lite.chunk.js.map +1 -0
- package/dist/scripts/3645-72ca9f63df-lite.chunk.js +3 -0
- package/dist/scripts/3645-72ca9f63df-lite.chunk.js.map +1 -0
- package/dist/scripts/3895-a54621a8c4-lite.chunk.js +2 -0
- package/dist/scripts/3895-a54621a8c4-lite.chunk.js.map +1 -0
- package/dist/scripts/458-35c635a2ce-lite.chunk.js +2 -0
- package/dist/scripts/458-35c635a2ce-lite.chunk.js.map +1 -0
- package/dist/scripts/4690-d77e912b9b-lite.chunk.js +2 -0
- package/dist/scripts/4690-d77e912b9b-lite.chunk.js.map +1 -0
- package/dist/scripts/{4718-6df54d3039-lite.chunk.js → 4718-2b58aa560d-lite.chunk.js} +1 -1
- package/dist/scripts/{4718-6df54d3039-lite.chunk.js.map → 4718-2b58aa560d-lite.chunk.js.map} +1 -1
- package/dist/scripts/5143-b6896dad98-lite.chunk.js +2 -0
- package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +1 -0
- package/dist/scripts/5229-036b4d7a22-lite.chunk.js +2 -0
- package/dist/scripts/5229-036b4d7a22-lite.chunk.js.map +1 -0
- package/dist/scripts/{5242-e8f004818c-lite.chunk.js → 5242-2d752ff85e-lite.chunk.js} +1 -1
- package/dist/scripts/{5242-e8f004818c-lite.chunk.js.map → 5242-2d752ff85e-lite.chunk.js.map} +1 -1
- package/dist/scripts/5385-57d7021be7-lite.chunk.js +2 -0
- package/dist/scripts/5385-57d7021be7-lite.chunk.js.map +1 -0
- package/dist/scripts/{5446-de55c3df38-lite.chunk.js → 5446-1ef1639ef6-lite.chunk.js} +1 -1
- package/dist/scripts/{5446-de55c3df38-lite.chunk.js.map → 5446-1ef1639ef6-lite.chunk.js.map} +1 -1
- package/dist/scripts/5595-f33ed220ce-lite.chunk.js +2 -0
- package/dist/scripts/5595-f33ed220ce-lite.chunk.js.map +1 -0
- package/dist/scripts/{5936-4cac311002-lite.chunk.js → 5936-1d99b03e7b-lite.chunk.js} +2 -2
- package/dist/scripts/5936-1d99b03e7b-lite.chunk.js.map +1 -0
- package/dist/scripts/5940-511beff2ee-lite.chunk.js +2 -0
- package/dist/scripts/5940-511beff2ee-lite.chunk.js.map +1 -0
- package/dist/scripts/{610-27e5444f01-lite.chunk.js → 610-6dbeb5cd21-lite.chunk.js} +2 -2
- package/dist/scripts/610-6dbeb5cd21-lite.chunk.js.map +1 -0
- package/dist/scripts/6102-f1851eca08-lite.chunk.js +3 -0
- package/dist/scripts/6102-f1851eca08-lite.chunk.js.map +1 -0
- package/dist/scripts/6189-ce9f0eeb31-lite.chunk.js +2 -0
- package/dist/scripts/6189-ce9f0eeb31-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-010454cb12-lite.chunk.js → 624-7df7efd486-lite.chunk.js} +3 -3
- package/dist/scripts/{624-010454cb12-lite.chunk.js.map → 624-7df7efd486-lite.chunk.js.map} +1 -1
- package/dist/scripts/6263-d74b5b3529-lite.chunk.js +2 -0
- package/dist/scripts/6263-d74b5b3529-lite.chunk.js.map +1 -0
- package/dist/scripts/{6274-46a7af05d7-lite.chunk.js → 6274-15e61b83dc-lite.chunk.js} +1 -1
- package/dist/scripts/{6274-46a7af05d7-lite.chunk.js.map → 6274-15e61b83dc-lite.chunk.js.map} +1 -1
- package/dist/scripts/6415-9d8b88c713-lite.chunk.js +2 -0
- package/dist/scripts/6415-9d8b88c713-lite.chunk.js.map +1 -0
- package/dist/scripts/{6433-fe9efef305-lite.chunk.js → 6433-8dd152d999-lite.chunk.js} +2 -2
- package/dist/scripts/{6433-fe9efef305-lite.chunk.js.map → 6433-8dd152d999-lite.chunk.js.map} +1 -1
- package/dist/scripts/6470-6216086d63-lite.chunk.js +2 -0
- package/dist/scripts/6470-6216086d63-lite.chunk.js.map +1 -0
- package/dist/scripts/6531-597262a181-lite.chunk.js +2 -0
- package/dist/scripts/6531-597262a181-lite.chunk.js.map +1 -0
- package/dist/scripts/6572-4dda098022-lite.chunk.js +2 -0
- package/dist/scripts/6572-4dda098022-lite.chunk.js.map +1 -0
- package/dist/scripts/6587-08d5d85b71-lite.chunk.js +2 -0
- package/dist/scripts/6587-08d5d85b71-lite.chunk.js.map +1 -0
- package/dist/scripts/671-36d34edbf3-lite.chunk.js +2 -0
- package/dist/scripts/671-36d34edbf3-lite.chunk.js.map +1 -0
- package/dist/scripts/{6725-23b09d47ae-lite.chunk.js → 6725-20b1e8b1d2-lite.chunk.js} +2 -2
- package/dist/scripts/6725-20b1e8b1d2-lite.chunk.js.map +1 -0
- package/dist/scripts/6741-ff3e4a33a5-lite.chunk.js +3 -0
- package/dist/scripts/6741-ff3e4a33a5-lite.chunk.js.map +1 -0
- package/dist/scripts/6752-1a9837a40f-lite.chunk.js +2 -0
- package/dist/scripts/6752-1a9837a40f-lite.chunk.js.map +1 -0
- package/dist/scripts/6850-8770bfeefb-lite.chunk.js +3 -0
- package/dist/scripts/6850-8770bfeefb-lite.chunk.js.map +1 -0
- package/dist/scripts/{6863-f04753549c-lite.chunk.js → 6863-b606b8b1e7-lite.chunk.js} +2 -2
- package/dist/scripts/{6863-f04753549c-lite.chunk.js.map → 6863-b606b8b1e7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6930-0a5d94f8b5-lite.chunk.js → 6930-1a681d42fd-lite.chunk.js} +1 -1
- package/dist/scripts/{6930-0a5d94f8b5-lite.chunk.js.map → 6930-1a681d42fd-lite.chunk.js.map} +1 -1
- package/dist/scripts/6948-84a5f8d76f-lite.chunk.js +2 -0
- package/dist/scripts/6948-84a5f8d76f-lite.chunk.js.map +1 -0
- package/dist/scripts/7097-b9a9a0a4ce-lite.chunk.js +2 -0
- package/dist/scripts/7097-b9a9a0a4ce-lite.chunk.js.map +1 -0
- package/dist/scripts/714-9ab1608522-lite.chunk.js +2 -0
- package/dist/scripts/714-9ab1608522-lite.chunk.js.map +1 -0
- package/dist/scripts/7533-e079b2af18-lite.chunk.js +2 -0
- package/dist/scripts/7533-e079b2af18-lite.chunk.js.map +1 -0
- package/dist/scripts/7715-2146591c84-lite.chunk.js +2 -0
- package/dist/scripts/7715-2146591c84-lite.chunk.js.map +1 -0
- package/dist/scripts/7855-92e790c403-lite.chunk.js +2 -0
- package/dist/scripts/7855-92e790c403-lite.chunk.js.map +1 -0
- package/dist/scripts/{7987-1f9189c4c1-lite.chunk.js → 7987-db0037709c-lite.chunk.js} +1 -1
- package/dist/scripts/{7987-1f9189c4c1-lite.chunk.js.map → 7987-db0037709c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8046-1943b1d32b-lite.chunk.js → 8046-836d3b8e04-lite.chunk.js} +1 -1
- package/dist/scripts/{8046-1943b1d32b-lite.chunk.js.map → 8046-836d3b8e04-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2877-db49c758e9-lite.chunk.js → 8157-521ad0f974-lite.chunk.js} +2 -2
- package/dist/scripts/{2877-db49c758e9-lite.chunk.js.map → 8157-521ad0f974-lite.chunk.js.map} +1 -1
- package/dist/scripts/8192-ec320614d9-lite.chunk.js +2 -0
- package/dist/scripts/8192-ec320614d9-lite.chunk.js.map +1 -0
- package/dist/scripts/8218-f3b81c7287-lite.chunk.js +2 -0
- package/dist/scripts/8218-f3b81c7287-lite.chunk.js.map +1 -0
- package/dist/scripts/8316-dad1824a5f-lite.chunk.js +2 -0
- package/dist/scripts/8316-dad1824a5f-lite.chunk.js.map +1 -0
- package/dist/scripts/8354-e30261b594-lite.chunk.js +2 -0
- package/dist/scripts/8354-e30261b594-lite.chunk.js.map +1 -0
- package/dist/scripts/8772-42c022effc-lite.chunk.js +2 -0
- package/dist/scripts/8772-42c022effc-lite.chunk.js.map +1 -0
- package/dist/scripts/8800-c88fefeace-lite.chunk.js +2 -0
- package/dist/scripts/8800-c88fefeace-lite.chunk.js.map +1 -0
- package/dist/scripts/8830-452a71751f-lite.chunk.js +2 -0
- package/dist/scripts/8830-452a71751f-lite.chunk.js.map +1 -0
- package/dist/scripts/8987-32190552fa-lite.chunk.js +2 -0
- package/dist/scripts/8987-32190552fa-lite.chunk.js.map +1 -0
- package/dist/scripts/9016-c359251f82-lite.chunk.js +3 -0
- package/dist/scripts/9016-c359251f82-lite.chunk.js.map +1 -0
- package/dist/scripts/{9226-4cff4347a9-lite.chunk.js → 9226-c236c0eeb1-lite.chunk.js} +2 -2
- package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +1 -0
- package/dist/scripts/9230-d731020b59-lite.chunk.js +3 -0
- package/dist/scripts/9230-d731020b59-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-8ad1f28459-lite.chunk.js → 9395-9175b9efcc-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-8ad1f28459-lite.chunk.js.map → 9395-9175b9efcc-lite.chunk.js.map} +1 -1
- package/dist/scripts/9417-70c6489c67-lite.chunk.js +2 -0
- package/dist/scripts/9417-70c6489c67-lite.chunk.js.map +1 -0
- package/dist/scripts/{9478-5a0abba4f7-lite.chunk.js → 9478-9b168ddc36-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-5a0abba4f7-lite.chunk.js.map → 9478-9b168ddc36-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-b56e03bb19-lite.chunk.js → 953-85fc5f8dbf-lite.chunk.js} +3 -3
- package/dist/scripts/{953-b56e03bb19-lite.chunk.js.map → 953-85fc5f8dbf-lite.chunk.js.map} +1 -1
- package/dist/scripts/9620-630f9e6344-lite.chunk.js +3 -0
- package/dist/scripts/9620-630f9e6344-lite.chunk.js.map +1 -0
- package/dist/scripts/9818-f63bdbbac4-lite.chunk.js +2 -0
- package/dist/scripts/9818-f63bdbbac4-lite.chunk.js.map +1 -0
- package/dist/scripts/9829-097052a2c6-lite.chunk.js +2 -0
- package/dist/scripts/9829-097052a2c6-lite.chunk.js.map +1 -0
- package/dist/scripts/{9843-a3fe640adb-lite.chunk.js → 9843-ec032b6388-lite.chunk.js} +2 -2
- package/dist/scripts/9843-ec032b6388-lite.chunk.js.map +1 -0
- package/dist/scripts/986-ea6d103647-lite.chunk.js +3 -0
- package/dist/scripts/986-ea6d103647-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-d20cb66d1a.min.js +3 -0
- package/dist/scripts/bundle-d20cb66d1a.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/css/6102-lite-4c795e86b6.chunk.css +0 -39
- package/dist/scripts/1169-5dc443f0f1-lite.chunk.js +0 -2
- package/dist/scripts/1169-5dc443f0f1-lite.chunk.js.map +0 -1
- package/dist/scripts/1313-4fb9d38bc0-lite.chunk.js +0 -2
- package/dist/scripts/1313-4fb9d38bc0-lite.chunk.js.map +0 -1
- package/dist/scripts/1437-5b1889cf0d-lite.chunk.js +0 -2
- package/dist/scripts/1437-5b1889cf0d-lite.chunk.js.map +0 -1
- package/dist/scripts/1518-be314d1248-lite.chunk.js.map +0 -1
- package/dist/scripts/1672-e792631d8e-lite.chunk.js +0 -3
- package/dist/scripts/1672-e792631d8e-lite.chunk.js.map +0 -1
- package/dist/scripts/1750-b8e1fca13a-lite.chunk.js +0 -2
- package/dist/scripts/1750-b8e1fca13a-lite.chunk.js.map +0 -1
- package/dist/scripts/1818-ca1e552c00-lite.chunk.js +0 -2
- package/dist/scripts/1818-ca1e552c00-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-2fa6cf6cb2-lite.chunk.js +0 -2
- package/dist/scripts/1820-2fa6cf6cb2-lite.chunk.js.map +0 -1
- package/dist/scripts/1905-a01549439f-lite.chunk.js +0 -2
- package/dist/scripts/1905-a01549439f-lite.chunk.js.map +0 -1
- package/dist/scripts/209-148abe2aa1-lite.chunk.js.map +0 -1
- package/dist/scripts/2137-a993d13a9a-lite.chunk.js +0 -2
- package/dist/scripts/2137-a993d13a9a-lite.chunk.js.map +0 -1
- package/dist/scripts/2199-22d8809e5e-lite.chunk.js +0 -2
- package/dist/scripts/2199-22d8809e5e-lite.chunk.js.map +0 -1
- package/dist/scripts/2703-aebc378d71-lite.chunk.js +0 -2
- package/dist/scripts/2703-aebc378d71-lite.chunk.js.map +0 -1
- package/dist/scripts/3020-9f647705a0-lite.chunk.js +0 -2
- package/dist/scripts/3020-9f647705a0-lite.chunk.js.map +0 -1
- package/dist/scripts/3231-7e9965499c-lite.chunk.js +0 -2
- package/dist/scripts/3231-7e9965499c-lite.chunk.js.map +0 -1
- package/dist/scripts/3355-e65e88adaa-lite.chunk.js +0 -2
- package/dist/scripts/3355-e65e88adaa-lite.chunk.js.map +0 -1
- package/dist/scripts/3403-a2111c4df8-lite.chunk.js +0 -2
- package/dist/scripts/3403-a2111c4df8-lite.chunk.js.map +0 -1
- package/dist/scripts/3515-925a7caeac-lite.chunk.js +0 -2
- package/dist/scripts/3515-925a7caeac-lite.chunk.js.map +0 -1
- package/dist/scripts/355-3bb5ae2ea4-lite.chunk.js +0 -2
- package/dist/scripts/355-3bb5ae2ea4-lite.chunk.js.map +0 -1
- package/dist/scripts/3645-720267b321-lite.chunk.js +0 -3
- package/dist/scripts/3645-720267b321-lite.chunk.js.map +0 -1
- package/dist/scripts/3895-f7f4926229-lite.chunk.js +0 -2
- package/dist/scripts/3895-f7f4926229-lite.chunk.js.map +0 -1
- package/dist/scripts/458-b99f17e0a1-lite.chunk.js +0 -2
- package/dist/scripts/458-b99f17e0a1-lite.chunk.js.map +0 -1
- package/dist/scripts/4690-774e3c0e2a-lite.chunk.js +0 -2
- package/dist/scripts/4690-774e3c0e2a-lite.chunk.js.map +0 -1
- package/dist/scripts/5143-b77fb12d6a-lite.chunk.js +0 -2
- package/dist/scripts/5143-b77fb12d6a-lite.chunk.js.map +0 -1
- package/dist/scripts/5229-f683f705ab-lite.chunk.js +0 -2
- package/dist/scripts/5229-f683f705ab-lite.chunk.js.map +0 -1
- package/dist/scripts/5385-50d4828b70-lite.chunk.js +0 -2
- package/dist/scripts/5385-50d4828b70-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-c622318cd2-lite.chunk.js +0 -2
- package/dist/scripts/5595-c622318cd2-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-4cac311002-lite.chunk.js.map +0 -1
- package/dist/scripts/5940-d841fd31d8-lite.chunk.js +0 -2
- package/dist/scripts/5940-d841fd31d8-lite.chunk.js.map +0 -1
- package/dist/scripts/610-27e5444f01-lite.chunk.js.map +0 -1
- package/dist/scripts/6102-30960404a9-lite.chunk.js +0 -3
- package/dist/scripts/6102-30960404a9-lite.chunk.js.map +0 -1
- package/dist/scripts/6189-13009e2ba9-lite.chunk.js +0 -2
- package/dist/scripts/6189-13009e2ba9-lite.chunk.js.map +0 -1
- package/dist/scripts/6263-82ae071643-lite.chunk.js +0 -2
- package/dist/scripts/6263-82ae071643-lite.chunk.js.map +0 -1
- package/dist/scripts/6470-2cefcc8abd-lite.chunk.js +0 -2
- package/dist/scripts/6470-2cefcc8abd-lite.chunk.js.map +0 -1
- package/dist/scripts/6531-835c743f1b-lite.chunk.js +0 -2
- package/dist/scripts/6531-835c743f1b-lite.chunk.js.map +0 -1
- package/dist/scripts/6572-0aa0696621-lite.chunk.js +0 -2
- package/dist/scripts/6572-0aa0696621-lite.chunk.js.map +0 -1
- package/dist/scripts/671-300e93ac50-lite.chunk.js +0 -2
- package/dist/scripts/671-300e93ac50-lite.chunk.js.map +0 -1
- package/dist/scripts/6725-23b09d47ae-lite.chunk.js.map +0 -1
- package/dist/scripts/6741-937ae1865f-lite.chunk.js +0 -3
- package/dist/scripts/6741-937ae1865f-lite.chunk.js.map +0 -1
- package/dist/scripts/6846-08b00decd8-lite.chunk.js +0 -2
- package/dist/scripts/6846-08b00decd8-lite.chunk.js.map +0 -1
- package/dist/scripts/6948-4ab91f77dc-lite.chunk.js +0 -2
- package/dist/scripts/6948-4ab91f77dc-lite.chunk.js.map +0 -1
- package/dist/scripts/7052-4c36846f80-lite.chunk.js +0 -3
- package/dist/scripts/7052-4c36846f80-lite.chunk.js.map +0 -1
- package/dist/scripts/7097-af8c032133-lite.chunk.js +0 -2
- package/dist/scripts/7097-af8c032133-lite.chunk.js.map +0 -1
- package/dist/scripts/714-2e52398bb7-lite.chunk.js +0 -2
- package/dist/scripts/714-2e52398bb7-lite.chunk.js.map +0 -1
- package/dist/scripts/7187-414ac79d42-lite.chunk.js +0 -2
- package/dist/scripts/7187-414ac79d42-lite.chunk.js.map +0 -1
- package/dist/scripts/7533-f2e71bd0dd-lite.chunk.js +0 -2
- package/dist/scripts/7533-f2e71bd0dd-lite.chunk.js.map +0 -1
- package/dist/scripts/7630-72099a7a26-lite.chunk.js +0 -2
- package/dist/scripts/7630-72099a7a26-lite.chunk.js.map +0 -1
- package/dist/scripts/7715-255bbe16ef-lite.chunk.js +0 -2
- package/dist/scripts/7715-255bbe16ef-lite.chunk.js.map +0 -1
- package/dist/scripts/7855-04bc8e52e3-lite.chunk.js +0 -2
- package/dist/scripts/7855-04bc8e52e3-lite.chunk.js.map +0 -1
- package/dist/scripts/8085-cde67e66df-lite.chunk.js +0 -2
- package/dist/scripts/8085-cde67e66df-lite.chunk.js.map +0 -1
- package/dist/scripts/8139-01ccbc0539-lite.chunk.js +0 -3
- package/dist/scripts/8139-01ccbc0539-lite.chunk.js.map +0 -1
- package/dist/scripts/8218-70b601169b-lite.chunk.js +0 -2
- package/dist/scripts/8218-70b601169b-lite.chunk.js.map +0 -1
- package/dist/scripts/8316-7ab8f108de-lite.chunk.js +0 -2
- package/dist/scripts/8316-7ab8f108de-lite.chunk.js.map +0 -1
- package/dist/scripts/8354-a03785518e-lite.chunk.js +0 -2
- package/dist/scripts/8354-a03785518e-lite.chunk.js.map +0 -1
- package/dist/scripts/8772-05879c5e99-lite.chunk.js +0 -2
- package/dist/scripts/8772-05879c5e99-lite.chunk.js.map +0 -1
- package/dist/scripts/8830-0d2766a50f-lite.chunk.js +0 -2
- package/dist/scripts/8830-0d2766a50f-lite.chunk.js.map +0 -1
- package/dist/scripts/8987-12841dd69c-lite.chunk.js +0 -2
- package/dist/scripts/8987-12841dd69c-lite.chunk.js.map +0 -1
- package/dist/scripts/9016-df37abbca9-lite.chunk.js +0 -3
- package/dist/scripts/9016-df37abbca9-lite.chunk.js.map +0 -1
- package/dist/scripts/9226-4cff4347a9-lite.chunk.js.map +0 -1
- package/dist/scripts/9230-c79353d3ee-lite.chunk.js +0 -3
- package/dist/scripts/9230-c79353d3ee-lite.chunk.js.map +0 -1
- package/dist/scripts/9417-7313907916-lite.chunk.js +0 -2
- package/dist/scripts/9417-7313907916-lite.chunk.js.map +0 -1
- package/dist/scripts/9620-8814c74837-lite.chunk.js +0 -3
- package/dist/scripts/9620-8814c74837-lite.chunk.js.map +0 -1
- package/dist/scripts/9839-5befd54d51-lite.chunk.js +0 -3
- package/dist/scripts/9839-5befd54d51-lite.chunk.js.map +0 -1
- package/dist/scripts/9843-a3fe640adb-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-48ad415564.min.js +0 -3
- package/dist/scripts/bundle-48ad415564.min.js.map +0 -1
- package/dist/css/{7422-lite-22ea72f8e3.chunk.css → 7422-lite-c999db664b.chunk.css} +1 -1
- /package/dist/scripts/{1379-2ee86e6e68-lite.chunk.js.LICENSE.txt → 1379-3a1ba4b4d9-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1672-e792631d8e-lite.chunk.js.LICENSE.txt → 1672-672f298d82-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3645-720267b321-lite.chunk.js.LICENSE.txt → 2004-4e2d98041c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-30960404a9-lite.chunk.js.LICENSE.txt → 3645-72ca9f63df-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-010454cb12-lite.chunk.js.LICENSE.txt → 6102-f1851eca08-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6433-fe9efef305-lite.chunk.js.LICENSE.txt → 624-7df7efd486-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-937ae1865f-lite.chunk.js.LICENSE.txt → 6433-8dd152d999-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7052-4c36846f80-lite.chunk.js.LICENSE.txt → 6741-ff3e4a33a5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8139-01ccbc0539-lite.chunk.js.LICENSE.txt → 6850-8770bfeefb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9016-df37abbca9-lite.chunk.js.LICENSE.txt → 9016-c359251f82-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9230-c79353d3ee-lite.chunk.js.LICENSE.txt → 9230-d731020b59-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-8ad1f28459-lite.chunk.js.LICENSE.txt → 9395-9175b9efcc-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-5a0abba4f7-lite.chunk.js.LICENSE.txt → 9478-9b168ddc36-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-b56e03bb19-lite.chunk.js.LICENSE.txt → 953-85fc5f8dbf-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9620-8814c74837-lite.chunk.js.LICENSE.txt → 9620-630f9e6344-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9839-5befd54d51-lite.chunk.js.LICENSE.txt → 986-ea6d103647-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-48ad415564.min.js.LICENSE.txt → bundle-d20cb66d1a.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{2795-b3f0673e3e-lite.chunk.js.map → 2795-0616748349-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2795-b3f0673e3e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/pagination/Pagination.tsx","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/partial-user-audit-log.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/PartialAuditLogTable.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/PartialUserAuditLog.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/user-audit-log-table.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/UserAuditLogTableUtils.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/UserAuditLogTable.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/empty-state/UserAuditLogEmptyState.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/user-audit-log.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/UserAuditLog.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/audit-log/UserAuditLogView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import * as React from 'react';\n\nimport styles from './search-filters.scss';\n\ninterface PartialSearchFiltersProps {\n count?: number;\n}\n\nexport function PartialSearchFilters({ count = 6 }: PartialSearchFiltersProps): JSX.Element {\n return (\n <div className='d-flex'>\n <div className='d-flex ps-1'>\n {Array(count).fill(null).map((item, index) => (\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\n ))}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\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\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 = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\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;\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 return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\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});","import * as React from 'react';\nimport { Button, ButtonProps } from 'react-bootstrap';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nfunction buildCursor(appLink: Core.AppLink, cursorParam: string, prevHack?: boolean): Core.AppLink {\n if (!cursorParam)\n return null;\n\n const currentParams = appLink.params as HashObject ?? {};\n /* \n Currently the pagination for My Videos shows the previous cursor in the first page cursor,\n so instead of using the previous cursor from the response, the current cursor is being passed\n as the previous cursor in the app link\n */\n\n if (prevHack) {\n if (!currentParams?.previous) {\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: null,\n previous: null\n }\n };\n }\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: currentParams?.previous,\n previous: null\n }\n };\n }\n\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: cursorParam,\n previous: currentParams.cursor\n }\n };\n}\n\ninterface CursorPaginationProps {\n cursors: Cursors;\n appLink?: Core.AppLink;\n className?: string;\n buttonVariant?: ButtonProps['variant'];\n prevHack?: boolean;\n scrollTop?: boolean;\n onClick?: (cursor: string) => void;\n}\n\nPagination.defaultProps = {\n className: 'py-2',\n buttonVariant: 'secondary'\n};\n\nexport function Pagination(\n { appLink, cursors, className, buttonVariant, prevHack, scrollTop, onClick }: CursorPaginationProps\n): JSX.Element {\n function onClickButton(page: 'next' | 'previous'): void {\n if (appLink && !scrollTop)\n ScrollHelper.preventScrollTop();\n\n AnalyticsHelper.logUserAction({ page }, {\n location: LocationContext.Pagination,\n entity: EntityType.Pagination,\n actionType: UserAction.Navigate\n });\n\n if (onClick)\n onClick(cursors[page]);\n }\n\n if (appLink) {\n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <AppLink\n appLink={buildCursor(appLink, cursors.previous, prevHack)}\n className={`btn btn-${buttonVariant} me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='previous' />\n </AppLink>\n \n <AppLink\n appLink={buildCursor(appLink, cursors.next)}\n className={`btn btn-${buttonVariant} ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='next' />\n </AppLink>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n }\n \n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <Button\n variant={buttonVariant}\n className={`me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n >\n <Text phrase='previous' />\n </Button>\n <Button\n variant={buttonVariant}\n className={`btn ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n >\n <Text phrase='next' />\n </Button>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\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\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"rfiJl\",\"partialJobCount\":\"h8k_u\",\"partialCheckbox\":\"HkuOS\",\"partialExportButton\":\"Iul7S\",\"row\":\"mwigG\",\"checkboxColumn\":\"Z5jLG\",\"actionColumn\":\"rLxYh\",\"usersColumn\":\"QZzab\",\"dateColumn\":\"Wf_Jp\",\"performedByColumn\":\"Ubtmj\",\"seeMoreColumn\":\"XdP6u\",\"heading\":\"kRMMH\",\"action\":\"DvDvW\",\"users\":\"goKpg\",\"date\":\"ejYGb\",\"performedBy\":\"NhjyL\"};","import React from 'react';\n\nimport styles from './partial-user-audit-log.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded py-3 ${styles.row}`}>\n <div className={`${styles.checkboxColumn} d-flex justify-content-center`}>\n <div className={`partial-loading-background ${styles.partialCheckbox} ms-0`} />\n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.action}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.users}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.performedBy}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex py-2 mb-1'>\n <div className={`${styles.checkboxColumn}`}>\n \n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialAuditLogTable(): JSX.Element {\n return (\n <>\n <div className='mb-3 mt-n1'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialSearchFilters } from 'libs/shared/apps/search/components/search-filters/PartialSearchFilters';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nimport { PartialAuditLogTable } from './PartialAuditLogTable';\n\nimport styles from './partial-user-audit-log.scss';\n\nexport function PartialUserAuditLog(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <PartialBreadcrumbs />\n\n <div className={`partial-loading-background ${styles.partialJobCount}`} />\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <div className={`partial-loading-background ${styles.partialCheckbox}`} />\n\n <div className='ms-4 ps-3'>\n <PartialSearchFilters count={3} />\n </div>\n\n <div className={`ms-auto partial-loading-background ${styles.partialExportButton}`} />\n </div>\n\n <PartialAuditLogTable />\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { FilterOption, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nconst namespace = 'userManager.userAuditLogFilters';\n\nfunction getSortOptions(): FilterOption[] {\n return [{\n id: 'newest',\n name: LanguageService.getPhrase(namespace, 'newest'),\n default: true\n },\n {\n id: 'oldest',\n name: LanguageService.getPhrase(namespace, 'oldest')\n }];\n}\n\nexport interface UserAuditLogQueryParams {\n cursor: string;\n userType: UserGroup | UserGroup[];\n bulkActionType: BatchJobType | BatchJobType[];\n sort: 'newest' | 'oldest';\n}\n\ninterface UserAuditLogFiltersProps {\n queryParams: UserAuditLogQueryParams;\n appLinks: UserManagerAppLinks;\n}\n\nexport function UserAuditLogFilters(props: UserAuditLogFiltersProps): JSX.Element {\n const filters: SearchFilter<any>[] = [\n Filters.SortBy(getSortOptions()),\n Filters.BulkActionType(),\n Filters.UserType()\n ];\n\n return (\n <SearchFilters\n queryParams={props.queryParams}\n mainFilters={filters}\n appLink={props.appLinks.auditLog}\n analyticsOptions={{\n entity: EntityType.BatchJob,\n location: LocationContext.UserAuditLog\n }}\n hideHeading\n hideDivider\n constantIndices={[]}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"uymuO\"};","import React from 'react';\nimport { CellProps, Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BatchJob } from 'libs/shared/interfaces';\n\nimport styles from './user-audit-log-table.scss';\n\nconst namespace = 'userManager.userAuditLogTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UserAuditLogTableData {\n id: string;\n checked: boolean;\n actionType: string;\n userType: string;\n date: string;\n performedBy: {\n name: string;\n submittedByClickView: boolean;\n };\n}\n\nexport function getColumns(\n summaryAppLink: Core.AppLink,\n onToggleCheckbox: (id: string) => void\n): Column<UserAuditLogTableData>[] {\n const columns: Column<UserAuditLogTableData>[] = [\n {\n Header: '',\n id: 'checkboxes',\n accessor: (data: UserAuditLogTableData) => ({ id: data.id, checked: data.checked }),\n Cell: (cell: CellProps<UserAuditLogTableData, { id: string; checked: boolean; }>) => (\n <div className='text-center mx-auto'>\n <Checkbox\n id={cell.value.id}\n checked={cell.value.checked}\n onChange={() => onToggleCheckbox(cell.value.id)}\n />\n </div>\n ),\n width: 10\n },\n {\n Header: getPhrase('action'),\n accessor: 'actionType',\n id: 'actionType',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 20\n },\n {\n Header: getPhrase('users'),\n accessor: 'userType',\n id: 'userType',\n Cell: ({ value }) => {\n const getValue = () => {\n switch (value) {\n case UserGroup.Learner:\n return getPhrase('students');\n case UserGroup.Staff:\n return getPhrase('staff');\n case UserGroup.Unknown:\n default:\n return getPhrase('unknown');\n }\n };\n\n return (\n <div className='w-100'>\n {getValue()}\n </div>\n );\n },\n width: 10\n },\n {\n Header: getPhrase('date'),\n accessor: 'date',\n id: 'date',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 20\n },\n {\n Header: getPhrase('performedBy'),\n accessor: 'performedBy',\n id: 'performedBy',\n Cell: (cell: CellProps<any, { name: string; submittedByClickView: boolean; }>) => (\n <div className='w-100 d-flex align-items-center'>\n {cell.value.submittedByClickView && (\n <SvgContainer2 className='me-1' size={SvgContainerSize.Small}>\n <ClickViewAvatar />\n </SvgContainer2>\n )}\n {cell.value.name}\n </div>\n ),\n width: 20\n },\n {\n Header: '',\n accessor: 'id',\n id: 'seeMore',\n Cell: ({ value }) => (\n <div className='w-100 d-flex justify-content-end'>\n <AppLink\n className={`info-link text-end me-3 ms-auto ${styles.seeMore}`}\n appLink={{\n ...summaryAppLink,\n args: summaryAppLink.args?.length ? [ ...summaryAppLink.args, value ] : [value]\n }}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </AppLink>\n </div>\n ),\n width: 30\n }\n ];\n\n return columns;\n}\n\nexport function useGetData(jobs: BatchJob[], isChecked: (id: string) => boolean): UserAuditLogTableData[] {\n return jobs.map(job => {\n const formattedDate = DateHelper.format(job.dateCreated, 'DD/MM/YYYY, hh:mmA');\n\n return {\n id: job.id,\n checked: isChecked(job.id),\n actionType: BulkUserActionsHelper.mapJobTypeToName(job.type),\n userType: BulkUserActionsHelper.mapDataTypeToUserType(job.dataType),\n date: formattedDate,\n performedBy: {\n name: job.submitterName,\n submittedByClickView: job.submittedByClickView\n }\n };\n });\n}","import React from 'react';\n\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './UserAuditLogTableUtils';\n\nconst TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n row: 'striped-row rounded audit-log-row',\n cell: 'd-flex align-items-center py-3 px-2'\n};\n\ninterface UserAuditLogTableProps {\n jobs: BatchJobCollection;\n appLinks: UserManagerAppLinks;\n onToggleCheckbox: (id: string) => void;\n isChecked: (id: string) => boolean;\n}\n\nexport function UserAuditLogTable(props: UserAuditLogTableProps): JSX.Element {\n const data = useGetData(props.jobs.data, props.isChecked);\n\n return (\n <Table\n columns={getColumns(props.appLinks.bulkActionSummary, props.onToggleCheckbox)}\n data={data}\n theme={TABLE_THEME}\n />\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.auditLogEmptyState';\n\ninterface UserAuditLogEmptyStateProps {\n imageUrl: string;\n}\n\nexport function UserAuditLogEmptyState(props: UserAuditLogEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bulkCheckbox\":\"NMw5T\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { UserManagerConstants } from 'libs/shared/apps/user-manager/constants/UserManagerConstants';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { UserAuditLogFilters, UserAuditLogQueryParams } from './components/audit-log-filters/UserAuditLogFilters';\nimport { UserAuditLogTable } from './components/audit-log-table/UserAuditLogTable';\nimport { UserAuditLogEmptyState } from './empty-state/UserAuditLogEmptyState';\n\nimport styles from './user-audit-log.scss';\n\nconst namespace = 'userManager.auditLog';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UserAuditLogProps {\n jobs: BatchJobCollection;\n appLinks: UserManagerAppLinks;\n queryParams: UserAuditLogQueryParams;\n onClickExport: (ids: string[]) => Promise<void>;\n emptyStateImageUrl: string;\n}\n\nexport function UserAuditLog(props: UserAuditLogProps): JSX.Element {\n const referrer: UserGroup = LocalStorageHelper.get(UserManagerConstants.AUDIT_LOG_REFERRER_KEY);\n\n const [ showExportSpinner, setShowExportSpinner ] = React.useState(false);\n\n const CheckboxHelper = useBulkCheckboxManager(props.jobs.data);\n const alerts = useAlerts();\n\n function onClickExport(): void {\n if (showExportSpinner)\n return;\n\n setShowExportSpinner(true);\n\n const selectedIds = CheckboxHelper.getSelected();\n\n props.onClickExport(selectedIds)\n .then(() => alerts.success(getPhrase('exportSuccess')))\n .catch(() => alerts.error(getPhrase('exportError')))\n .finally(() => setShowExportSpinner(false));\n }\n\n return (\n <>\n <h1 className='h2'><Text namespace={namespace} phrase='heading' /></h1>\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <Breadcrumbs\n breadcrumbs={[\n { name: getPhrase('settingsBreadcrumb'), appLink: props.appLinks.settings },\n { name: getPhrase(referrer === UserGroup.Learner ? 'studentManager' : 'staffManager'), appLink: props.appLinks.userManager },\n { name: getPhrase('heading'), active: true }\n ]}\n />\n\n <p className='mb-0 fw-semibold'>\n <Text\n namespace={namespace}\n phrase='totalJobs'\n options={{ showing: props.jobs.data.length, smartCount: props.jobs.count }}\n />\n </p>\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <Checkbox\n className={styles.bulkCheckbox}\n id='bulk-audit-log-checkbox'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n\n <div className='ms-4 ps-1'>\n <UserAuditLogFilters queryParams={props.queryParams} appLinks={props.appLinks} />\n </div>\n\n <SpinnerButton\n variant='dark'\n className='ms-auto'\n onClick={onClickExport}\n disabled={!CheckboxHelper.hasSomeSelections() || showExportSpinner}\n showSpinner={showExportSpinner}\n >\n <Text namespace={namespace} phrase='export' />\n </SpinnerButton>\n </div>\n\n {props.jobs.data?.length ? (\n <UserAuditLogTable\n jobs={props.jobs}\n appLinks={props.appLinks}\n onToggleCheckbox={CheckboxHelper.onToggleItem}\n isChecked={CheckboxHelper.isChecked}\n />\n ) : (\n <UserAuditLogEmptyState imageUrl={props.emptyStateImageUrl} />\n )}\n\n {!!props.jobs.pagination?.cursors && (\n <Pagination\n className='p-0 text-end pb-3'\n cursors={props.jobs.pagination.cursors}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n />\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { PartialUserAuditLog } from 'libs/shared/apps/user-manager/components/audit-log/partial-loading/PartialUserAuditLog';\nimport { UserAuditLog } from 'libs/shared/apps/user-manager/components/audit-log/UserAuditLog';\nimport { UserManagerConstants } from 'libs/shared/apps/user-manager/constants/UserManagerConstants';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.userAuditLogView';\n\ninterface UserAuditLogViewProps {\n queryParams: UserAuditLogQueryParams;\n}\n\nexport function UserAuditLogView(props: UserAuditLogViewProps): JSX.Element {\n const referrer: UserGroup = LocalStorageHelper.get(UserManagerConstants.AUDIT_LOG_REFERRER_KEY);\n\n const jobs = Flight.useBasicFetch<BatchJobCollection>(JobRequests.getJobs(props.queryParams));\n \n useHandleObjectError(jobs);\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const appLinks = getUserManagerAppLinks(referrer);\n\n function onClickExport(jobIds: string[]): Promise<void> {\n return fetchAsync<void>(JobRequests.sendJobReports(jobIds));\n }\n\n if (!jobs.hasCompleted)\n return <div className='px-3'><PartialUserAuditLog /></div>;\n\n return (\n <div className='px-3'>\n <UserAuditLog\n jobs={jobs.data}\n appLinks={appLinks}\n queryParams={props.queryParams}\n onClickExport={onClickExport}\n emptyStateImageUrl={ImageUrls.EmptyStates.Search.RESULTS}\n />\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","PartialSearchFilters","count","className","Array","fill","map","item","index","key","BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","b","idx","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","buildCursor","cursorParam","prevHack","currentParams","params","previous","application","action","args","cursor","Pagination","cursors","buttonVariant","scrollTop","onClick","onClickButton","page","location","entity","actionType","value","display","phrase","next","variant","defaultProps","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","generateCacheKey","flightObjs","obj","statusCode","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","toString","get","isBulkChecked","every","setSelected","ids","id","set","i","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","getMap","usePrevious","ref","PartialRow","PartialHeader","PartialAuditLogTable","PartialUserAuditLog","namespace","UserAuditLogFilters","props","filters","LanguageService","default","SearchFilters","queryParams","mainFilters","appLinks","auditLog","analyticsOptions","hideHeading","hideDivider","constantIndices","getPhrase","TABLE_THEME","table","header","headerCell","row","cell","UserAuditLogTable","jobs","summaryAppLink","onToggleCheckbox","data","job","formattedDate","DateHelper","dateCreated","checked","BulkUserActionsHelper","type","userType","dataType","date","performedBy","submitterName","submittedByClickView","Table","columns","bulkActionSummary","Header","accessor","Cell","Checkbox","onChange","UserGroup","getValue","SvgContainer2","SvgContainer","ClickViewAvatar","AppLink","Text","theme","UserAuditLogEmptyState","EmptyState","src","imageUrl","UserAuditLog","referrer","LocalStorageHelper","UserManagerConstants","showExportSpinner","setShowExportSpinner","CheckboxHelper","alerts","settings","userManager","showing","smartCount","indeterminate","SpinnerButton","selectedIds","onClickExport","then","success","error","disabled","showSpinner","emptyStateImageUrl","pagination","ContextService","UserAuditLogView","JobRequests","useSetPageMetadata","title","fetchAsync","hasCompleted","jobIds","ImageUrls","createJob","url","getJobs","bulkActionTypes","userTypes","sort","order","bulkActionType","getJob","getJobProgress","invalidationKeys","getJobResults","status","getYearGroupRolloverStatus","customerId","sendJobReports","getJobSummary"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/2795-0616748349-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/pagination/Pagination.tsx","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/partial-user-audit-log.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/PartialAuditLogTable.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/partial-loading/PartialUserAuditLog.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/user-audit-log-table.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/UserAuditLogTableUtils.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/components/audit-log-table/UserAuditLogTable.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/empty-state/UserAuditLogEmptyState.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/user-audit-log.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/audit-log/UserAuditLog.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/audit-log/UserAuditLogView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import * as React from 'react';\n\nimport styles from './search-filters.scss';\n\ninterface PartialSearchFiltersProps {\n count?: number;\n}\n\nexport function PartialSearchFilters({ count = 6 }: PartialSearchFiltersProps): JSX.Element {\n return (\n <div className='d-flex'>\n <div className='d-flex ps-1'>\n {Array(count).fill(null).map((item, index) => (\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\n ))}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\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\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 = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\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;\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 return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\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});","import * as React from 'react';\nimport { Button, ButtonProps } from 'react-bootstrap';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nfunction buildCursor(appLink: Core.AppLink, cursorParam: string, prevHack?: boolean): Core.AppLink {\n if (!cursorParam)\n return null;\n\n const currentParams = appLink.params as HashObject ?? {};\n /* \n Currently the pagination for My Videos shows the previous cursor in the first page cursor,\n so instead of using the previous cursor from the response, the current cursor is being passed\n as the previous cursor in the app link\n */\n\n if (prevHack) {\n if (!currentParams?.previous) {\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: null,\n previous: null\n }\n };\n }\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: currentParams?.previous,\n previous: null\n }\n };\n }\n\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: cursorParam,\n previous: currentParams.cursor\n }\n };\n}\n\ninterface CursorPaginationProps {\n cursors: Cursors;\n appLink?: Core.AppLink;\n className?: string;\n buttonVariant?: ButtonProps['variant'];\n prevHack?: boolean;\n scrollTop?: boolean;\n onClick?: (cursor: string) => void;\n}\n\nPagination.defaultProps = {\n className: 'py-2',\n buttonVariant: 'secondary'\n};\n\nexport function Pagination(\n { appLink, cursors, className, buttonVariant, prevHack, scrollTop, onClick }: CursorPaginationProps\n): JSX.Element {\n function onClickButton(page: 'next' | 'previous'): void {\n if (appLink && !scrollTop)\n ScrollHelper.preventScrollTop();\n\n AnalyticsHelper.logUserAction({ page }, {\n location: LocationContext.Pagination,\n entity: EntityType.Pagination,\n actionType: UserAction.Navigate\n });\n\n if (onClick)\n onClick(cursors[page]);\n }\n\n if (appLink) {\n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <AppLink\n appLink={buildCursor(appLink, cursors.previous, prevHack)}\n className={`btn btn-${buttonVariant} me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='previous' />\n </AppLink>\n \n <AppLink\n appLink={buildCursor(appLink, cursors.next)}\n className={`btn btn-${buttonVariant} ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='next' />\n </AppLink>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n }\n \n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <Button\n variant={buttonVariant}\n className={`me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n >\n <Text phrase='previous' />\n </Button>\n <Button\n variant={buttonVariant}\n className={`btn ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n >\n <Text phrase='next' />\n </Button>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\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\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"rfiJl\",\"partialJobCount\":\"h8k_u\",\"partialCheckbox\":\"HkuOS\",\"partialExportButton\":\"Iul7S\",\"row\":\"mwigG\",\"checkboxColumn\":\"Z5jLG\",\"actionColumn\":\"rLxYh\",\"usersColumn\":\"QZzab\",\"dateColumn\":\"Wf_Jp\",\"performedByColumn\":\"Ubtmj\",\"seeMoreColumn\":\"XdP6u\",\"heading\":\"kRMMH\",\"action\":\"DvDvW\",\"users\":\"goKpg\",\"date\":\"ejYGb\",\"performedBy\":\"NhjyL\"};","import React from 'react';\n\nimport styles from './partial-user-audit-log.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded py-3 ${styles.row}`}>\n <div className={`${styles.checkboxColumn} d-flex justify-content-center`}>\n <div className={`partial-loading-background ${styles.partialCheckbox} ms-0`} />\n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.action}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.users}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.performedBy}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex py-2 mb-1'>\n <div className={`${styles.checkboxColumn}`}>\n \n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialAuditLogTable(): JSX.Element {\n return (\n <>\n <div className='mb-3 mt-n1'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialSearchFilters } from 'libs/shared/apps/search/components/search-filters/PartialSearchFilters';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nimport { PartialAuditLogTable } from './PartialAuditLogTable';\n\nimport styles from './partial-user-audit-log.scss';\n\nexport function PartialUserAuditLog(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <PartialBreadcrumbs />\n\n <div className={`partial-loading-background ${styles.partialJobCount}`} />\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <div className={`partial-loading-background ${styles.partialCheckbox}`} />\n\n <div className='ms-4 ps-3'>\n <PartialSearchFilters count={3} />\n </div>\n\n <div className={`ms-auto partial-loading-background ${styles.partialExportButton}`} />\n </div>\n\n <PartialAuditLogTable />\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { FilterOption, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nconst namespace = 'userManager.userAuditLogFilters';\n\nfunction getSortOptions(): FilterOption[] {\n return [{\n id: 'newest',\n name: LanguageService.getPhrase(namespace, 'newest'),\n default: true\n },\n {\n id: 'oldest',\n name: LanguageService.getPhrase(namespace, 'oldest')\n }];\n}\n\nexport interface UserAuditLogQueryParams {\n cursor: string;\n userType: UserGroup | UserGroup[];\n bulkActionType: BatchJobType | BatchJobType[];\n sort: 'newest' | 'oldest';\n}\n\ninterface UserAuditLogFiltersProps {\n queryParams: UserAuditLogQueryParams;\n appLinks: UserManagerAppLinks;\n}\n\nexport function UserAuditLogFilters(props: UserAuditLogFiltersProps): JSX.Element {\n const filters: SearchFilter<any>[] = [\n Filters.SortBy(getSortOptions()),\n Filters.BulkActionType(),\n Filters.UserType()\n ];\n\n return (\n <SearchFilters\n queryParams={props.queryParams}\n mainFilters={filters}\n appLink={props.appLinks.auditLog}\n analyticsOptions={{\n entity: EntityType.BatchJob,\n location: LocationContext.UserAuditLog\n }}\n hideHeading\n hideDivider\n constantIndices={[]}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"uymuO\"};","import React from 'react';\nimport { CellProps, Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BatchJob } from 'libs/shared/interfaces';\n\nimport styles from './user-audit-log-table.scss';\n\nconst namespace = 'userManager.userAuditLogTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UserAuditLogTableData {\n id: string;\n checked: boolean;\n actionType: string;\n userType: string;\n date: string;\n performedBy: {\n name: string;\n submittedByClickView: boolean;\n };\n}\n\nexport function getColumns(\n summaryAppLink: Core.AppLink,\n onToggleCheckbox: (id: string) => void\n): Column<UserAuditLogTableData>[] {\n const columns: Column<UserAuditLogTableData>[] = [\n {\n Header: '',\n id: 'checkboxes',\n accessor: (data: UserAuditLogTableData) => ({ id: data.id, checked: data.checked }),\n Cell: (cell: CellProps<UserAuditLogTableData, { id: string; checked: boolean; }>) => (\n <div className='text-center mx-auto'>\n <Checkbox\n id={cell.value.id}\n checked={cell.value.checked}\n onChange={() => onToggleCheckbox(cell.value.id)}\n />\n </div>\n ),\n width: 10\n },\n {\n Header: getPhrase('action'),\n accessor: 'actionType',\n id: 'actionType',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 20\n },\n {\n Header: getPhrase('users'),\n accessor: 'userType',\n id: 'userType',\n Cell: ({ value }) => {\n const getValue = () => {\n switch (value) {\n case UserGroup.Learner:\n return getPhrase('students');\n case UserGroup.Staff:\n return getPhrase('staff');\n case UserGroup.Unknown:\n default:\n return getPhrase('unknown');\n }\n };\n\n return (\n <div className='w-100'>\n {getValue()}\n </div>\n );\n },\n width: 10\n },\n {\n Header: getPhrase('date'),\n accessor: 'date',\n id: 'date',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 20\n },\n {\n Header: getPhrase('performedBy'),\n accessor: 'performedBy',\n id: 'performedBy',\n Cell: (cell: CellProps<any, { name: string; submittedByClickView: boolean; }>) => (\n <div className='w-100 d-flex align-items-center'>\n {cell.value.submittedByClickView && (\n <SvgContainer2 className='me-1' size={SvgContainerSize.Small}>\n <ClickViewAvatar />\n </SvgContainer2>\n )}\n {cell.value.name}\n </div>\n ),\n width: 20\n },\n {\n Header: '',\n accessor: 'id',\n id: 'seeMore',\n Cell: ({ value }) => (\n <div className='w-100 d-flex justify-content-end'>\n <AppLink\n className={`info-link text-end me-3 ms-auto ${styles.seeMore}`}\n appLink={{\n ...summaryAppLink,\n args: summaryAppLink.args?.length ? [ ...summaryAppLink.args, value ] : [value]\n }}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </AppLink>\n </div>\n ),\n width: 30\n }\n ];\n\n return columns;\n}\n\nexport function useGetData(jobs: BatchJob[], isChecked: (id: string) => boolean): UserAuditLogTableData[] {\n return jobs.map(job => {\n const formattedDate = DateHelper.format(job.dateCreated, 'DD/MM/YYYY, hh:mmA');\n\n return {\n id: job.id,\n checked: isChecked(job.id),\n actionType: BulkUserActionsHelper.mapJobTypeToName(job.type),\n userType: BulkUserActionsHelper.mapDataTypeToUserType(job.dataType),\n date: formattedDate,\n performedBy: {\n name: job.submitterName,\n submittedByClickView: job.submittedByClickView\n }\n };\n });\n}","import React from 'react';\n\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './UserAuditLogTableUtils';\n\nconst TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n row: 'striped-row rounded audit-log-row',\n cell: 'd-flex align-items-center py-3 px-2'\n};\n\ninterface UserAuditLogTableProps {\n jobs: BatchJobCollection;\n appLinks: UserManagerAppLinks;\n onToggleCheckbox: (id: string) => void;\n isChecked: (id: string) => boolean;\n}\n\nexport function UserAuditLogTable(props: UserAuditLogTableProps): JSX.Element {\n const data = useGetData(props.jobs.data, props.isChecked);\n\n return (\n <Table\n columns={getColumns(props.appLinks.bulkActionSummary, props.onToggleCheckbox)}\n data={data}\n theme={TABLE_THEME}\n />\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.auditLogEmptyState';\n\ninterface UserAuditLogEmptyStateProps {\n imageUrl: string;\n}\n\nexport function UserAuditLogEmptyState(props: UserAuditLogEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bulkCheckbox\":\"NMw5T\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { UserManagerConstants } from 'libs/shared/apps/user-manager/constants/UserManagerConstants';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { UserAuditLogFilters, UserAuditLogQueryParams } from './components/audit-log-filters/UserAuditLogFilters';\nimport { UserAuditLogTable } from './components/audit-log-table/UserAuditLogTable';\nimport { UserAuditLogEmptyState } from './empty-state/UserAuditLogEmptyState';\n\nimport styles from './user-audit-log.scss';\n\nconst namespace = 'userManager.auditLog';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UserAuditLogProps {\n jobs: BatchJobCollection;\n appLinks: UserManagerAppLinks;\n queryParams: UserAuditLogQueryParams;\n onClickExport: (ids: string[]) => Promise<void>;\n emptyStateImageUrl: string;\n}\n\nexport function UserAuditLog(props: UserAuditLogProps): JSX.Element {\n const referrer: UserGroup = LocalStorageHelper.get(UserManagerConstants.AUDIT_LOG_REFERRER_KEY);\n\n const [ showExportSpinner, setShowExportSpinner ] = React.useState(false);\n\n const CheckboxHelper = useBulkCheckboxManager(props.jobs.data);\n const alerts = useAlerts();\n\n function onClickExport(): void {\n if (showExportSpinner)\n return;\n\n setShowExportSpinner(true);\n\n const selectedIds = CheckboxHelper.getSelected();\n\n props.onClickExport(selectedIds)\n .then(() => alerts.success(getPhrase('exportSuccess')))\n .catch(() => alerts.error(getPhrase('exportError')))\n .finally(() => setShowExportSpinner(false));\n }\n\n return (\n <>\n <h1 className='h2'><Text namespace={namespace} phrase='heading' /></h1>\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <Breadcrumbs\n breadcrumbs={[\n { name: getPhrase('settingsBreadcrumb'), appLink: props.appLinks.settings },\n { name: getPhrase(referrer === UserGroup.Learner ? 'studentManager' : 'staffManager'), appLink: props.appLinks.userManager },\n { name: getPhrase('heading'), active: true }\n ]}\n />\n\n <p className='mb-0 fw-semibold'>\n <Text\n namespace={namespace}\n phrase='totalJobs'\n options={{ showing: props.jobs.data.length, smartCount: props.jobs.count }}\n />\n </p>\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <Checkbox\n className={styles.bulkCheckbox}\n id='bulk-audit-log-checkbox'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n\n <div className='ms-4 ps-1'>\n <UserAuditLogFilters queryParams={props.queryParams} appLinks={props.appLinks} />\n </div>\n\n <SpinnerButton\n variant='dark'\n className='ms-auto'\n onClick={onClickExport}\n disabled={!CheckboxHelper.hasSomeSelections() || showExportSpinner}\n showSpinner={showExportSpinner}\n >\n <Text namespace={namespace} phrase='export' />\n </SpinnerButton>\n </div>\n\n {props.jobs.data?.length ? (\n <UserAuditLogTable\n jobs={props.jobs}\n appLinks={props.appLinks}\n onToggleCheckbox={CheckboxHelper.onToggleItem}\n isChecked={CheckboxHelper.isChecked}\n />\n ) : (\n <UserAuditLogEmptyState imageUrl={props.emptyStateImageUrl} />\n )}\n\n {!!props.jobs.pagination?.cursors && (\n <Pagination\n className='p-0 text-end pb-3'\n cursors={props.jobs.pagination.cursors}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n />\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { PartialUserAuditLog } from 'libs/shared/apps/user-manager/components/audit-log/partial-loading/PartialUserAuditLog';\nimport { UserAuditLog } from 'libs/shared/apps/user-manager/components/audit-log/UserAuditLog';\nimport { UserManagerConstants } from 'libs/shared/apps/user-manager/constants/UserManagerConstants';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJobCollection } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.userAuditLogView';\n\ninterface UserAuditLogViewProps {\n queryParams: UserAuditLogQueryParams;\n}\n\nexport function UserAuditLogView(props: UserAuditLogViewProps): JSX.Element {\n const referrer: UserGroup = LocalStorageHelper.get(UserManagerConstants.AUDIT_LOG_REFERRER_KEY);\n\n const jobs = Flight.useBasicFetch<BatchJobCollection>(JobRequests.getJobs(props.queryParams));\n \n useHandleObjectError(jobs);\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const appLinks = getUserManagerAppLinks(referrer);\n\n function onClickExport(jobIds: string[]): Promise<void> {\n return fetchAsync<void>(JobRequests.sendJobReports(jobIds));\n }\n\n if (!jobs.hasCompleted)\n return <div className='px-3'><PartialUserAuditLog /></div>;\n\n return (\n <div className='px-3'>\n <UserAuditLog\n jobs={jobs.data}\n appLinks={appLinks}\n queryParams={props.queryParams}\n onClickExport={onClickExport}\n emptyStateImageUrl={ImageUrls.EmptyStates.Search.RESULTS}\n />\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","PartialSearchFilters","count","className","Array","fill","map","item","index","key","BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","b","idx","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","buildCursor","cursorParam","prevHack","currentParams","params","previous","application","action","args","cursor","Pagination","cursors","buttonVariant","scrollTop","onClick","onClickButton","page","location","entity","actionType","value","display","phrase","next","variant","defaultProps","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","generateCacheKey","flightObjs","obj","statusCode","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","toString","get","isBulkChecked","every","setSelected","ids","id","set","i","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","getMap","usePrevious","ref","PartialRow","PartialHeader","PartialAuditLogTable","PartialUserAuditLog","namespace","UserAuditLogFilters","props","filters","LanguageService","default","SearchFilters","queryParams","mainFilters","appLinks","auditLog","analyticsOptions","hideHeading","hideDivider","constantIndices","getPhrase","TABLE_THEME","table","header","headerCell","row","cell","UserAuditLogTable","jobs","summaryAppLink","onToggleCheckbox","data","job","formattedDate","DateHelper","dateCreated","checked","BulkUserActionsHelper","type","userType","dataType","date","performedBy","submitterName","submittedByClickView","Table","columns","bulkActionSummary","Header","accessor","Cell","Checkbox","onChange","UserGroup","getValue","SvgContainer2","SvgContainer","ClickViewAvatar","AppLink","Text","theme","UserAuditLogEmptyState","EmptyState","src","imageUrl","UserAuditLog","referrer","LocalStorageHelper","UserManagerConstants","showExportSpinner","setShowExportSpinner","CheckboxHelper","alerts","settings","userManager","showing","smartCount","indeterminate","SpinnerButton","selectedIds","onClickExport","then","success","error","disabled","showSpinner","emptyStateImageUrl","pagination","ContextService","UserAuditLogView","JobRequests","useSetPageMetadata","title","fetchAsync","hasCompleted","jobIds","ImageUrls","createJob","url","getJobs","bulkActionTypes","userTypes","sort","order","bulkActionType","getJob","getJobProgress","invalidationKeys","getJobResults","status","getYearGroupRolloverStatus","customerId","sendJobReports","getJobSummary"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2877],{19670:(e,t,a)=>{a.d(t,{o:()=>p});var n=a(32735),r=a(1048),i=a(11607),l=a(87311),o=a(91743),c=a(83345),s=a(54610),d=a(67453),m=a(80385),u=a(93563),v="shared.videoAtAGlance";function p(e){var t=(0,m.Wp)(e.video,e.theme),a=(0,m.md)(e.video,e.pointsOfInterest,t,e.suppressInteractivity),p=(0,m.RH)(e.pointsOfInterest,t);if(!t)return n.createElement(n.Fragment,null);var h,g,f,E,b,y=(null===(f=null===(g=null==(h=e.theme)?void 0:h.data)||void 0===g?void 0:g.colours)||void 0===f?void 0:f.primary)&&(null===(b=null===(E=null==h?void 0:h.data)||void 0===E?void 0:E.colours)||void 0===b?void 0:b.secondary)?h.data.colours:{primary:"#F5F4FF",secondary:"#9294FF"},k="function"==typeof e.onClickShowDescription,C="function"==typeof e.onClickShowCurriculumLinks;return n.createElement("div",{className:"rounded border px-3 px-sm-5 py-3 mb-3 position-relative d-flex justify-content-center ".concat(u.Z.container),style:{backgroundColor:y.primary}},n.createElement("div",{className:"".concat(u.Z.content," d-flex align-items-center pt-4 pt-sm-0")},n.createElement("div",null,n.createElement("h2",{className:"h4"},n.createElement(c.x,{namespace:v,phrase:"videoAtAGlance"})),k&&n.createElement(i.L,{onClick:e.onClickShowDescription,className:"".concat(u.Z.detailsBtn," position-absolute cursor-pointer me-4 fw-semibold text-info")},n.createElement(c.x,{namespace:v,phrase:"readFullDescription"})),n.createElement("div",{ref:p,onClick:function(t){return(0,m.$H)(t,e.pointsOfInterest,e.setStartTime)},dangerouslySetInnerHTML:{__html:a}}),function(){var t,a,r,i;return(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?n.createElement("div",{className:"py-1"},n.createElement(o.P,Object.assign({tags:null===(i=null===(r=e.video)||void 0===r?void 0:r.tags)||void 0===i?void 0:i.data,themeColours:y},l.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity)))):n.createElement(n.Fragment,null)}(),n.createElement("div",{className:"mt-2"},C&&n.createElement(i.L,{onClick:e.onClickShowCurriculumLinks,className:"cursor-pointer d-inline-block fw-semibold text-info"},n.createElement(c.x,{namespace:v,phrase:"seeCurriculumLinks"}))))),function(){var t,a,i,l=null!==(i=null===(a=null===(t=e.theme)||void 0===t?void 0:t.data)||void 0===a?void 0:a.images)&&void 0!==i?i:{};return r.t.keys(l).filter((function(e){return!r.t.isEmpty(l[e])})).map((function(e){var t,a,r=d.j.createUrl(null===(t=l[e])||void 0===t?void 0:t.url,{size:s.h2.Medium});return n.createElement("div",{key:null===(a=l[e])||void 0===a?void 0:a.fileId,className:"".concat(u.Z[e]," ").concat(u.Z.background," d-none d-lg-block"),style:{backgroundImage:"url('".concat(r,"')")}})}))}())}},80385:(e,t,a)=>{a.d(t,{$H:()=>p,RH:()=>g,Wp:()=>f,md:()=>h});var n=a(32735),r=a(16367),i=a(34468),l=a(73758),o=a(93264),c=a(93563);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var d=/(\[.*\]\(cv:\/\/poi\?id=[0-9]+\))/g,m=/[0-9]+/,u=/\[.*\]/,v=/[\[\]]/g;function p(e,t,a){e.preventDefault();var n=e.target.getAttribute("href");if((null==n?void 0:n.includes("cv://poi"))&&(null==t?void 0:t.length)){var r=n.split("cv://poi?id=")[1],i=t.find((function(e){return e.id.toString()===r}));a&&i&&a(i.startTime)}}function h(e,t,a,i){var l,c,p,h=(c=(0,n.useState)(""),p=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,l,o=[],c=!0,s=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=i.call(a)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(c,p)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?s(e,t):void 0}}(c,p)||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.")}()),g=h[0],f=h[1];return(0,n.useEffect)((function(){if(a){var n=function(e,t,a){var n=function(e,t,a){return(null==t?void 0:t.length)?e.content.replace(d,(function(e){var n=e.match(m);if(!(null==n?void 0:n.length))return e;var r=t.find((function(e){return e.id.toString()===n[0]})),i=e.match(u);if(!r||!(null==i?void 0:i.length))return e;var l='<span class="me-2">'.concat(o.T.ToDisplayDuration(1e3*r.startTime),"</span>"),c=i[0];return c=(c=c.replace(v,""))||r.description,c="".concat(l," ").concat(c),a?'<span class="d-flex">'.concat(c,"</span>"):e.replace(u,"[".concat(c,"]"))})):e.content}(e,t,a);return r(n).split('a href="cv://poi').join('a class="d-flex" href="cv://poi')}(e.glance,t,i);f(n)}}),[null===(l=e.glance)||void 0===l?void 0:l.content,null==t?void 0:t.length,a]),g}function g(e,t){var a=(0,n.useRef)();function r(){var t=this.getAttribute("href");if((null==t?void 0:t.includes("cv://poi"))&&(null==e?void 0:e.length)){var a=t.split("cv://poi?id=")[1];if(a){var n=e.find((function(e){return e.id.toString()===a}));n&&l.n.trigger("glance:poi:mouseover",n)}}}function o(){l.n.trigger("glance:poi:mouseleave")}function s(){var e;return null===(e=a.current)||void 0===e?void 0:e.querySelectorAll('[href*="cv://poi"]')}return(0,i.R)("player:poi:mouseover",(function(e){var t,n=null==e?void 0:e.id;n&&(null===(t=function(e){var t;return null===(t=a.current)||void 0===t?void 0:t.querySelector('[href="cv://poi?id='.concat(e,'"]'))}(n))||void 0===t||t.classList.add(c.Z.highlightPoi))}),null,t),(0,i.R)("player:poi:mouseleave",(function(){var e;null===(e=s())||void 0===e||e.forEach((function(e){return e.classList.remove(c.Z.highlightPoi)}))}),null,t),(0,n.useEffect)((function(){if(a.current&&t){var e=s();return e.forEach((function(e){return e.addEventListener("mouseover",r)})),e.forEach((function(e){return e.addEventListener("mouseleave",o)})),function(){e.forEach((function(e){return e.removeEventListener("mouseover",r)})),e.forEach((function(e){return e.removeEventListener("mouseleave",o)}))}}}),[a.current]),a}function f(e,t){var a,n;return t&&(null===(a=e.glance)||void 0===a?void 0:a.content)&&"text/markdown"===(null===(n=e.glance)||void 0===n?void 0:n.format)}},73804:(e,t,a)=>{a.d(t,{X:()=>C});var n=a(32735),r=a(42648),i=a(23481),l=a(110),o=a(78259),c=a(65858),s=a(11607),d=a(25723),m=a(87311),u=a(91743),v=a(83345),p=a(40178),h=a(31908),g=a(8730);const f={closeButton:"ZwHXo",descriptionBorder:"J_Z5i"};var E="shared.videoDetails",b=i.T.encloseNamespace(E);function y(e){var t=e.label,a=e.items,r=e.className;if(!(a&&a.data&&a.data.length))return n.createElement(n.Fragment,null);var i=a.data.map((function(e){return e.name})).join(", ");return n.createElement("div",{className:r},t,": ",i)}function k(e){var t,a,r,i,o,c,s,d,m,u=e.video;if(!h.M.isVideo(u)&&!h.M.isClip(u))return n.createElement(n.Fragment,null);var p=h.M.getParentVideo(u);return n.createElement("div",{className:u.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(v.x,{phrase:"details"})),!!p.productionYear&&n.createElement("div",{className:"mb-1"},n.createElement(v.x,{phrase:"productionYear",options:{year:p.productionYear}})),n.createElement(y,{label:b("productionCompanies",{smartCount:null===(a=null===(t=p.productionCompanies)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length}),items:p.productionCompanies,className:"mb-1"}),n.createElement(y,{label:b("distributors",{smartCount:null===(i=null===(r=p.distributors)||void 0===r?void 0:r.data)||void 0===i?void 0:i.length}),items:p.distributors,className:"mb-1"}),n.createElement(y,{label:b("producers",{smartCount:null===(c=null===(o=p.producers)||void 0===o?void 0:o.data)||void 0===c?void 0:c.length}),items:p.producers,className:"mb-1"}),n.createElement(y,{label:b("directors",{smartCount:null===(d=null===(s=p.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:p.directors,className:"mb-1"}),!!p.dateBroadcast&&n.createElement("div",{className:"mb-1"},n.createElement(v.x,{phrase:"dateBroadcast",options:{date:l.O.format(p.dateBroadcast,"DD/MM/YYYY")}})),!!p.channel&&n.createElement("div",{className:"mb-1"},n.createElement(v.x,{phrase:"channel",options:{channel:p.channel.name}})),!((null===(m=u._isClickViewCurated)||void 0===m?void 0:m.value)||!u.dateCreated)&&n.createElement("div",{className:"mb-1"},n.createElement(v.x,{phrase:"dateUploaded",options:{date:l.O.format(u.dateCreated,"DD/MM/YYYY")}})))}function C(e){var t,a=e.video,i=e.maxHeight,l=void 0===i?p.x:i,b=h.M.getParentVideo(a),y=!!e.video.description,C=(0,g._)(e.video)||!!b.productionYear||!!b.dateBroadcast||!!b.channel||!(!a.dateCreated||(null===(t=a._isClickViewCurated)||void 0===t?void 0:t.value)),N="function"==typeof e.onClickClose,w="function"==typeof e.onClickShowCurriculumLinks;return y||C?n.createElement(v.D.Provider,{value:E},n.createElement("div",{className:"rounded border p-3 mb-3 position-relative"},n.createElement(r.$B,{autoHeight:!0,autoHeightMax:l},n.createElement("div",{className:"row g-0"},y&&n.createElement("div",{className:C?"".concat(f.descriptionBorder," pe-3 col-md-7"):"col-12"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(v.x,{phrase:"description"})),n.createElement(d.m,{text:a.description,title:a.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:c.LZ.PlayPage,entity:c.py.Video,actionType:c.Vw.Click,descriptor:c._S.LaunchImmersiveReader},analyticsData:{id:a.id,type:"description"}})),n.createElement("p",{className:"mb-0",dangerouslySetInnerHTML:{__html:o.O.linkifyText(e.video.description,{nl2br:!0})}}),n.createElement(u.P,Object.assign({tags:function(){var t,a;return e.hideTags||h.M.isInteractive(e.video)||!(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?null:e.video.tags.data}()},m.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"})),w&&n.createElement(s.L,{onClick:e.onClickShowCurriculumLinks,className:"cursor-pointer d-inline-block fw-semibold text-info mt-2 mb-1"},n.createElement(v.x,{namespace:E,phrase:"seeCurriculumLinks"}))),C&&n.createElement(k,Object.assign({},e)))),N&&n.createElement("button",{type:"button",className:"btn-close ".concat(f.closeButton),"aria-label":"Close",onClick:e.onClickClose}))):n.createElement(n.Fragment,null)}},92805:(e,t,a)=>{a.d(t,{H:()=>r});var n=a(32735);function r(){return n.createElement("div",{className:"p-3 mb-3 border rounded"},n.createElement("div",{className:"row"},n.createElement("div",{className:"pe-3 col-md-7 border-right"},n.createElement("div",{className:"partial-loading-background mb-2",style:{height:"1.5rem",width:"12rem"}}),n.createElement("div",{className:"partial-loading-background mb-2",style:{height:"4.5rem"}}),n.createElement("div",{className:"partial-loading-background",style:{height:"1.5rem",width:"15rem"}})),n.createElement("div",{className:"col-md-5 ps-md-3 pt-3 pt-md-0"},n.createElement("div",{className:"partial-loading-background mb-2",style:{height:"1.5rem",width:"7rem"}}),n.createElement("div",{className:"partial-loading-background mb-2",style:{height:"1.5rem",width:"10rem"}}),n.createElement("div",{className:"partial-loading-background mb-2",style:{height:"1.5rem",width:"12rem"}}),n.createElement("div",{className:"partial-loading-background mb-2 me-2 d-inline-block",style:{height:"1.5rem",width:"3rem"}}),n.createElement("div",{className:"partial-loading-background mb-2 me-2 d-inline-block",style:{height:"1.5rem",width:"4rem"}}),n.createElement("div",{className:"partial-loading-background mb-2 me-2 d-inline-block",style:{height:"1.5rem",width:"3.5rem"}}),n.createElement("div",{className:"partial-loading-background mb-2 me-2 d-inline-block",style:{height:"1.5rem",width:"4.5rem"}}))))}},3133:(e,t,a)=>{a.d(t,{R:()=>s});var n=a(32735),r=a(20789),i=a(86794),l=a(2786),o=a(64818);const c={avatarContainer:"kd18L",cvIcon:"smUBc"};function s(e){var t;if(!e.owner&&!e.isClickViewCurated)return n.createElement(n.Fragment,null);if(e.isClickViewCurated)return n.createElement("div",{className:"clamp-1 d-flex align-items-center"},n.createElement("div",{className:"".concat(c.avatarContainer," me-1 border rounded-circle position-relative")},n.createElement(i.b,{className:"me-1 ".concat(c.cvIcon)},n.createElement(l.Sd,null))),"ClickView");var a=o.l.getCommunityName(e.owner);return a?n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"".concat(c.avatarContainer," me-1")},n.createElement(r.q,{imageCdnUrl:e.imageCdnUrl,initials:o.l.getInitials(e.owner.name,e.owner.surname),imageUrl:null===(t=e.owner.avatar)||void 0===t?void 0:t.url})),n.createElement("div",{className:"clamp-1"},a)):n.createElement(n.Fragment,null)}},15446:(e,t,a)=>{a.d(t,{C:()=>d});var n=a(32735),r=a(65858),i=a(36848),l=a(89118),o=a(3133),c=a(54610),s=a(68626);var d=n.memo((function(e){var t;return n.createElement("div",{className:"flex-shrink-0 px-1 ".concat("hzP5u")},n.createElement("div",{className:"row m-0 border rounded p-2 h-100"},n.createElement("div",{className:"col-6 p-0"},n.createElement(l.u,{video:e.data,appLink:e.getAppLink(e.data),type:"cosmetic",imageOptions:{size:c.h2.Small},textPosition:s.z.Independent,analyticsOptions:{location:r.LZ.SlidingListItem},preload:!0})),n.createElement("div",{className:"col-6 p-0"},n.createElement("div",{className:"ps-2"},n.createElement(i.F,{appLink:e.getAppLink(e.data)},n.createElement("h3",{className:"h6 mb-1"},n.createElement("span",{className:"clamp-2"},e.data.name))),n.createElement(o.R,{owner:e.data.owner,isClickViewCurated:null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value,imageCdnUrl:e.imageCdnUrl})))))}))},47862:(e,t,a)=>{a.d(t,{K:()=>m});var n=a(32735),r=a(65858),i=a(36848),l=a(83345),o=a(89118),c=a(3133),s=a(54610),d=a(68626);var m=n.memo((function(e){var t,a=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]});return n.createElement("div",{className:"flex-shrink-0 px-1 ".concat("rXatl")},n.createElement("div",{className:"row m-0 border rounded p-2 h-100"},n.createElement("div",{className:"col-6 p-0"},n.createElement(o.u,{video:e.data,appLink:e.getAppLink(e.data),type:"cosmetic",imageOptions:{size:s.h2.Small},textPosition:d.z.Independent,preload:!0,analyticsOptions:{location:r.LZ.SlidingListItem}})),n.createElement("div",{className:"col-6 p-0"},n.createElement("div",{className:"ps-2"},n.createElement(i.F,{appLink:e.getAppLink(e.data)},n.createElement("h3",{className:"h6 mb-1"},n.createElement("span",{className:"clamp-2"},e.data.name))),n.createElement(c.R,{owner:e.data.owner,isClickViewCurated:null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value,imageCdnUrl:e.imageCdnUrl}),n.createElement(i.F,{className:"info-link",appLink:a},n.createElement(l.x,{namespace:"shared.interactiveWidgetItem",phrase:"previewQuestions"}))))))}))},26733:(e,t,a)=>{a.d(t,{s:()=>C,R:()=>N});var n=a(32735),r=a(39202),i=a(49985),l=a(65858),o=a(36848),c=a(11607),s=a(75891),d=a(83914),m=a(60995),u=a(76177),v=a(61150),p=a(71063),h=a(4594),g=a(1164),f=a(79967),E=a(45778),b=a(54297),y=a(35223);const k={imageStyle:"I9E5O",item:"tqUFn",dashboard:"o7j7p",playPage:"V2RwX",aspectRatio:"OnJDH",outerContainer:"CIFy7",innerContainer:"oUZPD",actions:"jzGAm",titleBelow:"Cpjs3",thumbnailContainer:"EDiGi",titleAbove:"e9ejn",teacherPack:"_tdVE",text:"g5NWS",hoverState:"xRYhX",atomGuide:"X39wU",studentActivity:"X9pMl",additionalMaterials:"qRVUo",userUploaded:"_18JaV",imageTypeResource:"KYtZL",download:"fbb_e"};function C(e){var t,a,r,i,l=null;"metadata"in e.data&&(l=e.data.metadata);var o=E.G.isType(e.data,h.E.Resource);return n.createElement(n.Fragment,null,n.createElement("div",{className:k.aspectRatio},n.createElement("div",{className:k.outerContainer},n.createElement("div",{className:function(t){var a,n="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return k.atomGuide;case"student-activity":return k.studentActivity;case"teacher-pack":return k.teacherPack;case"additional-materials":return k.additionalMaterials;default:return k.userUploaded}}(t)," ").concat(k.innerContainer);return(null===(a=e.theme)||void 0===a?void 0:a.containerClass)?n+=" ".concat(e.theme.containerClass):n+=" pt-3 px-3",e.applyHoverState&&(n+=" ".concat(k.hoverState)),n}(null==l?void 0:l.resourceType)},"above"===e.titlePosition&&n.createElement(u.u,{title:e.data.name},n.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(k.text)},n.createElement("span",{className:"clamp-1"},e.data.name))),n.createElement("div",{className:"\n ".concat(null!==(a=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==a?a:""," w-75 overflow-hidden \n ").concat(k.thumbnailContainer," ").concat("above"===e.titlePosition?k.titleAbove:""," \n ").concat(k.imageStyle,"\n ")},n.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage})),o&&e.onClickDownload&&"normal"===e.actionBehaviour&&n.createElement("div",{className:k.actions},n.createElement(c.L,{onClick:function(t){return e.onClickDownload(t,e.data)},className:"".concat(k.download," d-flex align-items-center justify-content-center")},n.createElement(d.x,{svgName:y.vn.Download}))),!e.hideTypeBadge&&o&&n.createElement(v.y,{typeId:h.E.Resource})))),"below"===e.titlePosition&&n.createElement("div",{className:"mt-1 ".concat(k.titleBelow)},E.G.isType(e.data,h.E.Resource)&&!!(null===(i=null===(r=e.data)||void 0===r?void 0:r.metadata)||void 0===i?void 0:i.resourceType)&&n.createElement(m.m,null,b.C.getResourceTypeName(e.data.metadata.resourceType)),n.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}C.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var N=n.memo((function(e){var t,a,c,s,d=(t=e.data,a=e.actionBehaviour,s=(0,f.k)(),"public"===a||!s.xs&&!s.sm&&"resource"===t.type&&"metadata"in t&&(t.metadata.type===g.L.Image||(t.metadata.type===g.L.Pdf?!!t.url:!!(null===(c=t.pdf)||void 0===c?void 0:c.url)))),m=Object.assign(Object.assign({},e.analyticsData),e.data),u=Object.assign(Object.assign({},e.analyticsOptions),{actionType:l.Vw.Click,entity:e.data.typeId===h.E.Resource?l.py.Resource:l.py.Link});function v(){i.k.logUserAction(m,u)}var E,b=Object.assign(Object.assign({},e),{applyHoverState:d||!!e.data.url});return n.createElement("div",{className:"px-1 flex-shrink-0 ".concat(k.item," ").concat("play-page"===e.location?k.playPage:k.dashboard," ").concat(p.M.RESOURCE_ITEM_SELECTOR)},(E="d-block no-decoration","link"===e.data.type?n.createElement("a",{href:e.data.url,target:"_blank",className:E,onClick:v},n.createElement(C,Object.assign({},b))):d?"public"===e.actionBehaviour?n.createElement("div",{className:"".concat(E," cursor-pointer d-inline"),onClick:function(){v(),r.C$.trigger(e.getAppLink(e.data))}},n.createElement(C,Object.assign({},b))):n.createElement(o.F,{appLink:e.getAppLink(e.data),className:E,analyticsData:m,analyticsOptions:u},n.createElement(C,Object.assign({},b))):e.data.url?n.createElement("a",{href:e.data.url,className:E,onClick:v},n.createElement(C,Object.assign({},b))):n.createElement("div",{className:E},n.createElement(C,Object.assign({},b)))))}))},28907:(e,t,a)=>{a.d(t,{r:()=>i});var n=a(99940),r=a(97395),i={theme:function(e){return{url:"/api/domain/v1/themes/".concat(e),key:"themes:".concat(e)}},themeImages:function(e,t){return{url:r._.urlBuilder("/api/domain/v1/themes",{name:e,type:t}),key:"themes:".concat(e,":").concat(t)}},themes:function(e){var t="/api/domain/v1/themes",a="themes";return e&&(t+="?type=".concat(e),a+=":type:".concat(e)),{url:t,key:a,formatData:function(e){return e.sort((function(e,t){return e.name.localeCompare(t.name)}))}}},createTheme:function(e,t,a,r){return{url:"/api/domain/v1/themes",key:"theme",data:e,type:n.k.POST,invalidationKeys:"themes",success:t,error:a,always:r}},updateTheme:function(e,t,a,r,i){return{url:"/api/domain/v1/themes/".concat(e),key:"update:theme:".concat(e),data:t,type:n.k.PUT,success:a,error:r,always:i}},deleteTheme:function(e,t,a,r){return{url:"/api/domain/v1/themes/".concat(e),key:"delete:theme:".concat(e),type:n.k.DELETE,invalidationKeys:"themes",success:t,error:a,always:r}}}},93563:(e,t,a)=>{a.d(t,{Z:()=>n});const n={container:"BImYH",background:"aAY0j",topLeft:"azcIT",bottomLeft:"mBkCx",topRight:"tcN5n",bottomRight:"sHsOr",detailsBtn:"jyxT7",content:"PeWbM",highlightPoi:"un8Q0"}}}]);
|
|
2
|
+
//# sourceMappingURL=2877-40bb796d59-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2877-40bb796d59-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/video-at-a-glance/VideoAtAGlance.tsx","file:///app/packages/libs/shared/src/components/video-at-a-glance/VideoAtAGlanceUtils.ts","file:///app/packages/libs/shared/src/components/video-details/video-details.scss","file:///app/packages/libs/shared/src/components/video-details/VideoDetails.tsx","file:///app/packages/libs/shared/src/components/video-details/VideoDetailsPartial.tsx","file:///app/packages/libs/shared/src/components/video-owner-text/video-owner-text.scss","file:///app/packages/libs/shared/src/components/video-owner-text/VideoOwnerText.tsx","file:///app/packages/libs/shared/src/components/widgets/items/clip-widget-item/ClipWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/clip-widget-item/clip-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/InteractiveWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/interactive-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/ResourceWidgetItem.tsx","file:///app/packages/libs/shared/src/flight-requests/ThemeRequests.ts","file:///app/packages/libs/shared/src/components/video-at-a-glance/video-at-a-glance.scss"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PointOfInterest, Tag, Theme, ThemeColours, Video } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { hasGlanceData, onClickMarkDown, useGlanceMarkdown, useHighlightPointOfInterest } from './VideoAtAGlanceUtils';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlance';\n\nfunction getThemeColours(theme: Theme): ThemeColours {\n if (theme?.data?.colours?.primary && theme?.data?.colours?.secondary)\n return theme.data.colours;\n\n // On the off chance that a theme is in use that doesn't have any colours, safely fall back to these generic colours.\n return {\n primary: '#F5F4FF',\n secondary: '#9294FF'\n };\n}\n\ninterface VideoAtAGlanceProps {\n video: Video;\n theme: Theme;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickShowCurriculumLinks?: () => void;\n onClickShowDescription?: () => void;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n}\n\nexport function VideoAtAGlance(props: VideoAtAGlanceProps): JSX.Element {\n const canViewGlance = hasGlanceData(props.video, props.theme);\n\n const markdownHTML = useGlanceMarkdown(\n props.video,\n props.pointsOfInterest,\n canViewGlance,\n props.suppressInteractivity\n );\n \n const glanceContentRef = useHighlightPointOfInterest(props.pointsOfInterest, canViewGlance);\n \n if (!canViewGlance)\n return <></>;\n\n const themeColours = getThemeColours(props.theme);\n\n const showDescriptionLink = typeof props.onClickShowDescription === 'function';\n const showCurriculumsLink = typeof props.onClickShowCurriculumLinks === 'function';\n\n return (\n <div\n className={`rounded border px-3 px-sm-5 py-3 mb-3 position-relative d-flex justify-content-center ${styles.container}`}\n style={{ backgroundColor: themeColours.primary }}\n >\n <div className={`${styles.content} d-flex align-items-center pt-4 pt-sm-0`}>\n <div>\n <h2 className='h4'><Text namespace={namespace} phrase='videoAtAGlance' /></h2>\n {showDescriptionLink && (\n <DivButton\n onClick={props.onClickShowDescription}\n className={`${styles.detailsBtn} position-absolute cursor-pointer me-4 fw-semibold text-info`}\n >\n <Text namespace={namespace} phrase='readFullDescription' />\n </DivButton>\n )}\n <div\n ref={glanceContentRef}\n onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) =>\n onClickMarkDown(event, props.pointsOfInterest, props.setStartTime)\n }\n dangerouslySetInnerHTML={{ __html: markdownHTML }}\n />\n\n {(() => {\n if (!props.video.tags?.data?.length)\n return <></>;\n\n return (\n <div className='py-1'>\n <TagList\n tags={props.video?.tags?.data}\n themeColours={themeColours}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n />\n </div>\n );\n })()}\n\n <div className='mt-2'>\n {showCurriculumsLink && (\n <DivButton\n onClick={props.onClickShowCurriculumLinks}\n className='cursor-pointer d-inline-block fw-semibold text-info'\n >\n <Text namespace={namespace} phrase='seeCurriculumLinks' />\n </DivButton>\n )}\n </div>\n </div>\n </div>\n\n {(() => {\n const themeImages = props.theme?.data?.images ?? {};\n\n const themeImageSegments = ObjectHelper\n .keys(themeImages)\n .filter((key: keyof typeof themeImages) => {\n return !ObjectHelper.isEmpty(themeImages[key]);\n });\n\n return themeImageSegments.map((segment: keyof typeof themeImages) => {\n const url = ImageHelper.createUrl(themeImages[segment]?.url, { size: ImageSize.Medium });\n\n return (\n <div\n key={themeImages[segment]?.fileId}\n className={`${styles[segment]} ${styles.background} d-none d-lg-block`}\n style={{\n backgroundImage: `url('${url}')`\n }}\n />\n );\n });\n })()}\n </div>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Theme, Video } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_REGEX = /(\\[.*\\]\\(cv:\\/\\/poi\\?id=[0-9]+\\))/g;\nconst POI_ID_REGEX = /[0-9]+/;\nconst POI_TEXT_REGEX = /\\[.*\\]/;\nconst POI_TEXT_BRACES_REGEX = /[\\[\\]]/g;\n\nfunction injectPointOfInterestData(\n glance: Glance,\n pointsOfInterest: PointOfInterest[],\n suppressInteractivity?: boolean\n): string {\n if (!pointsOfInterest?.length)\n return glance.content;\n\n return glance.content.replace(POI_REGEX, (substr: string) => {\n const idMatch = substr.match(POI_ID_REGEX);\n \n if (!idMatch?.length)\n return substr;\n\n const poi = pointsOfInterest.find(p => p.id.toString() === idMatch[0]);\n const poiTextMatch = substr.match(POI_TEXT_REGEX);\n \n if (!poi || !poiTextMatch?.length)\n return substr;\n\n const timestamp = `<span class=\"me-2\">${DurationHelper.ToDisplayDuration(poi.startTime * 1000)}</span>`;\n\n let poiText = poiTextMatch[0];\n // strip []\n poiText = poiText.replace(POI_TEXT_BRACES_REGEX, '');\n // if no custom text, set POI description as text\n poiText = poiText || poi.description;\n // prepend timestamp to text and add []\n poiText = `${timestamp} ${poiText}`;\n\n // When we are rendering in a public context without the player we will show simple spans\n return !suppressInteractivity\n ? substr.replace(POI_TEXT_REGEX, `[${poiText}]`)\n : `<span class=\"d-flex\">${poiText}</span>`;\n });\n}\n\nfunction getGlanceContent(\n glance: Glance,\n pointsOfInterest: PointOfInterest[],\n suppressInteractivity?: boolean\n): string {\n const content = injectPointOfInterestData(glance, pointsOfInterest, suppressInteractivity);\n\n return marked(content)\n .split('a href=\"cv://poi')\n .join('a class=\"d-flex\" href=\"cv://poi');\n}\n\n/**\n * Because the markdown is injected as a HTML string, we cannot attach click event handlers directly onto\n * the links that we want to. Instead, we attach one click handler to the entire markdown container, meaning\n * click events bubble up, and we can use `event.target` to see which element was clicked.\n */\nexport function onClickMarkDown(\n event: React.MouseEvent<HTMLDivElement, MouseEvent>,\n pointsOfInterest?: PointOfInterest[],\n setStartTime?: (timeVideosStat: number) => void\n): void {\n event.preventDefault();\n\n const href = (event.target as HTMLDivElement).getAttribute('href');\n\n // Ignore click events that do not have a href\n if (!href?.includes('cv://poi') || !pointsOfInterest?.length)\n return;\n \n // When a timestamp is clicked, we update the player time\n const poiId = href.split('cv://poi?id=')[1];\n const poi = pointsOfInterest.find(p => p.id.toString() === poiId);\n setStartTime && poi && setStartTime(poi.startTime);\n}\n\nexport function useGlanceMarkdown(\n video: Video,\n pointsOfInterest?: PointOfInterest[],\n hasGlanceData?: boolean,\n suppressInteractivity?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getGlanceContent(video.glance, pointsOfInterest, suppressInteractivity);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, pointsOfInterest?.length, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function useHighlightPointOfInterest(\n pointsOfInterest: PointOfInterest[],\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n const poiEls = getAllPoiEls();\n\n poiEls.forEach(el => el.addEventListener('mouseover', onGlancePoiMouseOver));\n poiEls.forEach(el => el.addEventListener('mouseleave', onGlancePoiMouseLeave));\n\n return () => {\n poiEls.forEach(el => el.removeEventListener('mouseover', onGlancePoiMouseOver));\n poiEls.forEach(el => el.removeEventListener('mouseleave', onGlancePoiMouseLeave));\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(pointOfInterest: PointOfInterest): void {\n const poiId = pointOfInterest?.id;\n\n if (!poiId)\n return;\n\n getPoiEl(poiId)?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n getAllPoiEls()?.forEach(el => el.classList.remove(styles.highlightPoi));\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n const href = this.getAttribute('href');\n\n if (!href?.includes('cv://poi') || !pointsOfInterest?.length)\n return;\n\n const id = href.split('cv://poi?id=')[1];\n\n if (!id)\n return;\n\n const poi = pointsOfInterest.find(p => p.id.toString() === id);\n\n if (poi)\n EventsService.trigger('glance:poi:mouseover', poi);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n function getPoiEl(id: string): HTMLAnchorElement {\n return ref.current?.querySelector(`[href=\"cv://poi?id=${id}\"]`);\n }\n\n function getAllPoiEls(): NodeListOf<HTMLAnchorElement> {\n return ref.current?.querySelectorAll(`[href*=\"cv://poi\"]`);\n }\n\n return ref;\n}\n\nexport function hasGlanceData(video: Video | Clip, glanceTheme: Theme): boolean {\n return glanceTheme &&\n video.glance?.content &&\n video.glance?.format === 'text/markdown';\n}","// extracted by mini-css-extract-plugin\nexport default {\"closeButton\":\"ZwHXo\",\"descriptionBorder\":\"J_Z5i\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { hasPPDD } from './VideoDetailsUtils';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarProps): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarProps {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n onClickClose?: () => void;\n onClickShowCurriculumLinks?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n}\n\nexport function VideoDetailsWithScrollbar(props: VideoDetailsWithScrollbarProps): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n const canClose = typeof props.onClickClose === 'function';\n const showCurriculumLinks = typeof props.onClickShowCurriculumLinks === 'function';\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags.data;\n }\n\n if (!showDescription && !showDetails)\n return <></>;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='rounded border p-3 mb-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n <p className='mb-0' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true }) }} />\n <TagList\n tags={getTags()}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n {showCurriculumLinks && (\n <DivButton\n onClick={props.onClickShowCurriculumLinks}\n className='cursor-pointer d-inline-block fw-semibold text-info mt-2 mb-1'\n >\n <Text namespace={namespace} phrase='seeCurriculumLinks' />\n </DivButton>\n )}\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n </Scrollbars>\n\n {canClose && (\n <button\n type='button'\n className={`btn-close ${styles.closeButton}`}\n aria-label='Close'\n onClick={props.onClickClose}\n />\n )}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nexport function VideoDetailsPartial(): JSX.Element {\n return (\n <div className='p-3 mb-3 border rounded'>\n <div className='row'>\n <div className='pe-3 col-md-7 border-right'>\n <div className='partial-loading-background mb-2' style={{ height: '1.5rem', width: '12rem' }}></div>\n <div className='partial-loading-background mb-2' style={{ height: '4.5rem' }}></div>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '15rem' }}></div>\n </div>\n <div className='col-md-5 ps-md-3 pt-3 pt-md-0'>\n <div className='partial-loading-background mb-2' style={{ height: '1.5rem', width: '7rem' }}></div>\n <div className='partial-loading-background mb-2' style={{ height: '1.5rem', width: '10rem' }}></div>\n <div className='partial-loading-background mb-2' style={{ height: '1.5rem', width: '12rem' }}></div>\n <div className='partial-loading-background mb-2 me-2 d-inline-block' style={{ height: '1.5rem', width: '3rem' }}></div>\n <div className='partial-loading-background mb-2 me-2 d-inline-block' style={{ height: '1.5rem', width: '4rem' }}></div>\n <div className='partial-loading-background mb-2 me-2 d-inline-block' style={{ height: '1.5rem', width: '3.5rem' }}></div>\n <div className='partial-loading-background mb-2 me-2 d-inline-block' style={{ height: '1.5rem', width: '4.5rem' }}></div>\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kd18L\",\"cvIcon\":\"smUBc\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { ClickViewPlayLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './video-owner-text.scss';\n\ninterface VideoOwnerTextProps {\n owner: User;\n isClickViewCurated: boolean;\n imageCdnUrl: string;\n}\n\nexport function VideoOwnerText(props: VideoOwnerTextProps): JSX.Element {\n if (!props.owner && !props.isClickViewCurated)\n return <></>;\n\n if (props.isClickViewCurated) {\n return (\n <div className='clamp-1 d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1 border rounded-circle position-relative`}>\n <SvgContainer2 className={`me-1 ${styles.cvIcon}`}>\n <ClickViewPlayLogo />\n </SvgContainer2>\n </div>\n ClickView\n </div>\n );\n }\n\n const name = UserHelper.getCommunityName(props.owner);\n\n if (!name)\n return <></>;\n\n return (\n <div className='d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1`}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.owner.name, props.owner.surname)}\n imageUrl={props.owner.avatar?.url}\n />\n </div>\n <div className='clamp-1'>\n {name}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoOwnerText } from 'libs/shared/components/video-owner-text/VideoOwnerText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, Video } from 'libs/shared/interfaces';\n\nimport styles from './clip-widget-item.scss';\n\nexport interface ClipWidgetItemProps extends FixedWidgetItemProps<Clip> {\n video: Video;\n imageCdnUrl: string;\n}\n\nexport const ClipWidgetItem = React.memo(function(props: ClipWidgetItemProps): JSX.Element {\n return (\n <div className={`flex-shrink-0 px-1 ${styles.item}`}>\n <div className='row m-0 border rounded p-2 h-100'>\n <div className='col-6 p-0'>\n <VideoThumbnail\n video={props.data}\n appLink={props.getAppLink(props.data)}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n preload\n />\n </div>\n\n <div className='col-6 p-0'>\n <div className='ps-2'>\n <AppLink appLink={props.getAppLink(props.data)}>\n <h3 className='h6 mb-1'><span className='clamp-2'>{props.data.name}</span></h3>\n </AppLink>\n\n <VideoOwnerText\n owner={props.data.owner}\n isClickViewCurated={props.data._isClickViewCurated?.value}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n </div>\n </div>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"hzP5u\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoOwnerText } from 'libs/shared/components/video-owner-text/VideoOwnerText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, InteractiveMetadata, Video } from 'libs/shared/interfaces';\n\nimport styles from './interactive-widget-item.scss';\n\nconst namespace = 'shared.interactiveWidgetItem';\n\nexport interface InteractiveWidgetItemProps extends FixedWidgetItemProps<InteractiveMetadata> {\n video: Video | Clip;\n questionsAppLink: Core.AppLink;\n imageCdnUrl: string;\n}\n\nexport const InteractiveWidgetItem = React.memo(function(props: InteractiveWidgetItemProps): JSX.Element {\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n return (\n <div className={`flex-shrink-0 px-1 ${styles.item}`}>\n <div className='row m-0 border rounded p-2 h-100'>\n <div className='col-6 p-0'>\n <VideoThumbnail\n video={props.data}\n appLink={props.getAppLink(props.data)}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n />\n </div>\n\n <div className='col-6 p-0'>\n <div className='ps-2'>\n <AppLink appLink={props.getAppLink(props.data)}>\n <h3 className='h6 mb-1'><span className='clamp-2'>{props.data.name}</span></h3>\n </AppLink>\n\n <VideoOwnerText\n owner={props.data.owner}\n isClickViewCurated={props.data._isClickViewCurated?.value}\n imageCdnUrl={props.imageCdnUrl}\n />\n\n <AppLink className='info-link' appLink={questionsAppLink}>\n <Text namespace={namespace} phrase='previewQuestions' />\n </AppLink>\n </div>\n </div>\n </div>\n </div>\n );\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"rXatl\"};","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"I9E5O\",\"item\":\"tqUFn\",\"dashboard\":\"o7j7p\",\"playPage\":\"V2RwX\",\"aspectRatio\":\"OnJDH\",\"outerContainer\":\"CIFy7\",\"innerContainer\":\"oUZPD\",\"actions\":\"jzGAm\",\"titleBelow\":\"Cpjs3\",\"thumbnailContainer\":\"EDiGi\",\"titleAbove\":\"e9ejn\",\"teacherPack\":\"_tdVE\",\"text\":\"g5NWS\",\"hoverState\":\"xRYhX\",\"atomGuide\":\"X39wU\",\"studentActivity\":\"X9pMl\",\"additionalMaterials\":\"qRVUo\",\"userUploaded\":\"_18JaV\",\"imageTypeResource\":\"KYtZL\",\"download\":\"fbb_e\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nfunction useCanPreview(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (e: React.MouseEvent<HTMLElement>, resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n}\n\nResourceTile.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTile(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => props.onClickDownload(e, props.data as Resource)}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemProps extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItem = React.memo(function(props: ResourceWidgetItemProps): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreview(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTile {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTile {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTile {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { Theme } from 'libs/shared/interfaces';\n\nimport { ThemeType } from '../enums/ThemeType';\n\nexport const ThemeRequests = {\n theme(id: string): Flight.Request {\n return {\n url: `/api/domain/v1/themes/${id}`,\n key: `themes:${id}`\n };\n },\n\n themeImages(name: string, type: ThemeType): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('/api/domain/v1/themes', { name, type }),\n key: `themes:${name}:${type}`\n };\n },\n\n themes(type?: string): Flight.Request {\n let url = '/api/domain/v1/themes';\n let key = 'themes';\n\n if (type) {\n url += `?type=${type}`;\n key += `:type:${type}`;\n }\n\n return {\n url,\n key,\n formatData: (themes: Theme[]) => {\n return themes.sort((a, b) => a.name.localeCompare(b.name));\n }\n };\n },\n\n createTheme(\n data: Theme,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '/api/domain/v1/themes',\n key: 'theme',\n data,\n type: HttpVerbs.POST,\n invalidationKeys: 'themes',\n success,\n error,\n always\n };\n },\n\n updateTheme(\n id: string,\n data: Theme,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/themes/${id}`,\n key: `update:theme:${id}`,\n data,\n type: HttpVerbs.PUT,\n success,\n error,\n always\n };\n },\n\n deleteTheme(\n id: string,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/themes/${id}`,\n key: `delete:theme:${id}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: 'themes',\n success,\n error,\n always\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"BImYH\",\"background\":\"aAY0j\",\"topLeft\":\"azcIT\",\"bottomLeft\":\"mBkCx\",\"topRight\":\"tcN5n\",\"bottomRight\":\"sHsOr\",\"detailsBtn\":\"jyxT7\",\"content\":\"PeWbM\",\"highlightPoi\":\"un8Q0\"};"],"names":["namespace","VideoAtAGlance","props","canViewGlance","video","theme","markdownHTML","pointsOfInterest","suppressInteractivity","glanceContentRef","themeColours","data","colours","primary","secondary","showDescriptionLink","onClickShowDescription","showCurriculumsLink","onClickShowCurriculumLinks","className","style","backgroundColor","phrase","onClick","ref","event","setStartTime","dangerouslySetInnerHTML","__html","tags","length","getTagAppLink","themeImages","images","filter","key","map","segment","url","size","fileId","backgroundImage","POI_REGEX","POI_ID_REGEX","POI_TEXT_REGEX","POI_TEXT_BRACES_REGEX","onClickMarkDown","preventDefault","href","target","getAttribute","includes","poiId","split","poi","find","p","id","toString","startTime","useGlanceMarkdown","hasGlanceData","useState","setMarkdownHTML","useEffect","content","glance","replace","substr","idMatch","match","poiTextMatch","timestamp","poiText","description","injectPointOfInterestData","join","getGlanceContent","useHighlightPointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","this","onGlancePoiMouseLeave","getAllPoiEls","current","querySelectorAll","pointOfInterest","querySelector","getPoiEl","classList","add","forEach","el","remove","poiEls","addEventListener","removeEventListener","glanceTheme","format","getPhrase","LanguageService","CommaList","label","items","commaSeperated","i","name","DetailsSection","VideoHelper","parentVideo","Text","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbar","maxHeight","showDescription","showDetails","canClose","onClickClose","showCurriculumLinks","autoHeight","autoHeightMax","ImmersiveReader","text","title","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","analyticsOptions","location","entity","actionType","descriptor","analyticsData","type","LinkifyHelper","nl2br","TagList","hideTags","getTags","TagHelper","DivButton","VideoDetailsPartial","height","width","VideoOwnerText","owner","isClickViewCurated","SvgContainer2","UserHelper","Avatar","imageCdnUrl","initials","surname","imageUrl","avatar","ClipWidgetItem","VideoThumbnail","appLink","getAppLink","imageOptions","textPosition","ThumbnailTextPosition","preload","AppLink","InteractiveWidgetItem","questionsAppLink","args","ResourceTile","metadata","isResource","MasterTypeHelper","MasterType","resourceType","baseClass","getColour","containerClass","applyHoverState","getInnerContainerClass","titlePosition","Tooltip","thumbnailContainerClass","ResourceThumbnail","resource","imageErrorFallbackUrl","preloadImage","onClickDownload","actionBehaviour","e","SvgContainer","svgName","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItem","breakpoints","canPreview","useBreakpoints","xs","sm","ResourceFileType","pdf","logAction","AnalyticsHelper","tileProps","SeoConstants","ThemeRequests","themes","formatData","sort","a","b","localeCompare","createTheme","success","error","always","invalidationKeys","updateTheme","deleteTheme"],"sourceRoot":""}
|