@clickview/reports 0.89.0-rc.0 → 0.89.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +262 -262
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{B-Ygge5X2.chunk.js → 9w-0PYPT2.chunk.js} +2 -2
- package/dist/scripts/{B-Ygge5X2.chunk.js.map → 9w-0PYPT2.chunk.js.map} +1 -1
- package/dist/scripts/{B2vNpjBe2.chunk.js → B9pFKWJ02.chunk.js} +2 -2
- package/dist/scripts/{B2vNpjBe2.chunk.js.map → B9pFKWJ02.chunk.js.map} +1 -1
- package/dist/scripts/{CgRzcaPA2.chunk.js → BNN5pscb2.chunk.js} +2 -2
- package/dist/scripts/{CgRzcaPA2.chunk.js.map → BNN5pscb2.chunk.js.map} +1 -1
- package/dist/scripts/{CaEKrEVr.chunk.js → BnSjmWJq.chunk.js} +2 -2
- package/dist/scripts/{CaEKrEVr.chunk.js.map → BnSjmWJq.chunk.js.map} +1 -1
- package/dist/scripts/{DiGtRGOr.chunk.js → BnzWs-z6.chunk.js} +2 -2
- package/dist/scripts/{DiGtRGOr.chunk.js.map → BnzWs-z6.chunk.js.map} +1 -1
- package/dist/scripts/{Cn2gjFFW2.chunk.js → C2ypnyI02.chunk.js} +2 -2
- package/dist/scripts/{Cn2gjFFW2.chunk.js.map → C2ypnyI02.chunk.js.map} +1 -1
- package/dist/scripts/{DJcJp7v8.chunk.js → CLk46QjF.chunk.js} +2 -2
- package/dist/scripts/{DJcJp7v8.chunk.js.map → CLk46QjF.chunk.js.map} +1 -1
- package/dist/scripts/{CetIvuh92.chunk.js → CO_jJj0j2.chunk.js} +2 -2
- package/dist/scripts/{CetIvuh92.chunk.js.map → CO_jJj0j2.chunk.js.map} +1 -1
- package/dist/scripts/{BDvsE_VK2.chunk.js → CSucqxC_2.chunk.js} +2 -2
- package/dist/scripts/{BDvsE_VK2.chunk.js.map → CSucqxC_2.chunk.js.map} +1 -1
- package/dist/scripts/{CBsl5x752.chunk.js → CTdvdzIT2.chunk.js} +2 -2
- package/dist/scripts/{CBsl5x752.chunk.js.map → CTdvdzIT2.chunk.js.map} +1 -1
- package/dist/scripts/CcjaxIhQ.chunk.js +1 -0
- package/dist/scripts/{B1oWolq8.chunk.js → Ci_TQUTp.chunk.js} +2 -2
- package/dist/scripts/{B1oWolq8.chunk.js.map → Ci_TQUTp.chunk.js.map} +1 -1
- package/dist/scripts/{DeOoaF9L.chunk.js → CzyQ8kBM.chunk.js} +2 -2
- package/dist/scripts/{DeOoaF9L.chunk.js.map → CzyQ8kBM.chunk.js.map} +1 -1
- package/dist/scripts/{DStv8HCO.chunk.js → D09t8fP0.chunk.js} +2 -2
- package/dist/scripts/{DStv8HCO.chunk.js.map → D09t8fP0.chunk.js.map} +1 -1
- package/dist/scripts/{DW99FddT2.chunk.js → DD6DxO8_2.chunk.js} +2 -2
- package/dist/scripts/{DW99FddT2.chunk.js.map → DD6DxO8_2.chunk.js.map} +1 -1
- package/dist/scripts/{D9h-ARYb2.chunk.js → DFrb5tDP2.chunk.js} +2 -2
- package/dist/scripts/{D9h-ARYb2.chunk.js.map → DFrb5tDP2.chunk.js.map} +1 -1
- package/dist/scripts/{akSezG_a2.chunk.js → DMfhvxDs2.chunk.js} +2 -2
- package/dist/scripts/{akSezG_a2.chunk.js.map → DMfhvxDs2.chunk.js.map} +1 -1
- package/dist/scripts/{BJikOj1X.chunk.js → DNRNNhy3.chunk.js} +2 -2
- package/dist/scripts/{BJikOj1X.chunk.js.map → DNRNNhy3.chunk.js.map} +1 -1
- package/dist/scripts/{Dv0X7vtO.chunk.js → DRThGgko.chunk.js} +2 -2
- package/dist/scripts/{Dv0X7vtO.chunk.js.map → DRThGgko.chunk.js.map} +1 -1
- package/dist/scripts/{CiL7Usrw.chunk.js → DTga4UBD.chunk.js} +2 -2
- package/dist/scripts/{CiL7Usrw.chunk.js.map → DTga4UBD.chunk.js.map} +1 -1
- package/dist/scripts/DfzH_ahn.chunk.js +1 -0
- package/dist/scripts/{CXKHpDxD.chunk.js → DjoLfFO8.chunk.js} +2 -2
- package/dist/scripts/{CXKHpDxD.chunk.js.map → DjoLfFO8.chunk.js.map} +1 -1
- package/dist/scripts/{Bp2lnEra.chunk.js → DjtI-11t.chunk.js} +2 -2
- package/dist/scripts/{Bp2lnEra.chunk.js.map → DjtI-11t.chunk.js.map} +1 -1
- package/dist/scripts/{Du8vq00B.chunk.js → DnC9RoGV.chunk.js} +3 -3
- package/dist/scripts/{Du8vq00B.chunk.js.map → DnC9RoGV.chunk.js.map} +1 -1
- package/dist/scripts/{BSEHFBul.chunk.js → Pvqa-Uuo.chunk.js} +2 -2
- package/dist/scripts/{BSEHFBul.chunk.js.map → Pvqa-Uuo.chunk.js.map} +1 -1
- package/dist/scripts/{2K4rAC5A2.chunk.js → XIOc3Va_2.chunk.js} +2 -2
- package/dist/scripts/{2K4rAC5A2.chunk.js.map → XIOc3Va_2.chunk.js.map} +1 -1
- package/dist/scripts/{DzJf6gXa.chunk.js → ZeBQ-OW-.chunk.js} +2 -2
- package/dist/scripts/{DzJf6gXa.chunk.js.map → ZeBQ-OW-.chunk.js.map} +1 -1
- package/dist/scripts/{app-BBppvgGe.js → app-DomX9RS2.js} +3 -3
- package/dist/scripts/{app-BBppvgGe.js.map → app-DomX9RS2.js.map} +1 -1
- package/dist/scripts/{D4W-E97s2.chunk.js → hLeAzv3u2.chunk.js} +2 -2
- package/dist/scripts/{D4W-E97s2.chunk.js.map → hLeAzv3u2.chunk.js.map} +1 -1
- package/dist/scripts/{kFxyYsah.chunk.js → kAYaBqYw.chunk.js} +2 -2
- package/dist/scripts/{kFxyYsah.chunk.js.map → kAYaBqYw.chunk.js.map} +1 -1
- package/dist/scripts/{C-W6YIv-.chunk.js → kzm6epUV.chunk.js} +2 -2
- package/dist/scripts/{C-W6YIv-.chunk.js.map → kzm6epUV.chunk.js.map} +1 -1
- package/dist/scripts/{DVmy2mN0.chunk.js → vJbbo87R.chunk.js} +2 -2
- package/dist/scripts/{DVmy2mN0.chunk.js.map → vJbbo87R.chunk.js.map} +1 -1
- package/dist/scripts/{CMdB_3nq2.chunk.js → wJ4aGP5K2.chunk.js} +2 -2
- package/dist/scripts/{CMdB_3nq2.chunk.js.map → wJ4aGP5K2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/CkdTzI6P.chunk.js +0 -1
- package/dist/scripts/DKeKn7Hr.chunk.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{N as e,P as t,Q as n,U as r,et as i,qn as a,st as o,z as s}from"./Db8SRTe2.chunk.js";import{g as c,n as l}from"./ClFr_vFf.chunk.js";import{t as u}from"./BpIQdoUJ.chunk.js";import{t as d}from"./Czi36umi.chunk.js";import{t as f}from"./NRdjeteL.chunk.js";import{c as p,x as m}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{N as e,P as t,Q as n,U as r,et as i,qn as a,st as o,z as s}from"./Db8SRTe2.chunk.js";import{g as c,n as l}from"./ClFr_vFf.chunk.js";import{t as u}from"./BpIQdoUJ.chunk.js";import{t as d}from"./Czi36umi.chunk.js";import{t as f}from"./NRdjeteL.chunk.js";import{c as p,x as m}from"./app-DomX9RS2.js";import{t as h}from"./C2smR6gI2.chunk.js";var g=a(o()),_=t(),v=`reports.removeLogo`,y=u.encloseNamespace(v);function b(t){let[a,o]=g.useState(!1),u=c(),b=h(),x=m();async function S(){o(!0);try{await u(p.removeLogo(t.customerId,t.logoId)),b.success(y(x?`successTertiary`:`success`)),e.logUserAction({id:t.logoId},{actionType:n.Remove,entity:s.Logo,workflowPhase:i.Complete,location:r.Popup}),t.closePopup()}catch{b.success(y(x?`errorTertiary`:`error`)),o(!1)}}return(0,_.jsxs)(d,{closePopup:t.closePopup,title:y(x?`removeSchoolCrestTertiary`:`removeSchoolCrest`),children:[(0,_.jsx)(`p`,{children:(0,_.jsx)(l,{namespace:v,phrase:x?`areYouSureTertiary`:`areYouSure`})}),(0,_.jsxs)(f,{children:[(0,_.jsx)(f.Cancel,{onClick:t.closePopup}),(0,_.jsx)(f.Submit,{onClick:S,text:y(`remove`),showSpinner:a,variant:`danger`})]})]})}export{b as RemoveLogoView};
|
|
2
|
+
//# sourceMappingURL=kAYaBqYw.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"kAYaBqYw.chunk.js","names":[],"sources":["../../src/shared/views/remove-logo/RemoveLogoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { LogoRequests } from 'shared/flight-requests/LogoRequests';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\n\nconst namespace = 'reports.removeLogo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RemoveLogoViewProps extends PopupViewProps {\n logoId: string;\n customerId: string;\n}\n\nexport function RemoveLogoView(props: RemoveLogoViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n const isTertiary = useIsTertiary();\n\n async function onClickRemove(): Promise<void> {\n setShowSpinner(true);\n\n try {\n await fetchAsync(LogoRequests.removeLogo(props.customerId, props.logoId));\n\n alerts.success(getPhrase(isTertiary ? 'successTertiary' : 'success'));\n\n AnalyticsHelper.logUserAction({\n id: props.logoId\n }, {\n actionType: UserAction.Remove,\n entity: EntityType.Logo,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n props.closePopup();\n } catch {\n alerts.success(getPhrase(isTertiary ? 'errorTertiary' : 'error'));\n setShowSpinner(false);\n }\n }\n\n return (\n <Popup\n closePopup={props.closePopup}\n title={isTertiary ? getPhrase('removeSchoolCrestTertiary') : getPhrase('removeSchoolCrest')}\n >\n <p><Text namespace={namespace} phrase={isTertiary ? 'areYouSureTertiary' : 'areYouSure'} /></p>\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n onClick={onClickRemove}\n text={getPhrase('remove')}\n showSpinner={showSpinner}\n variant='danger'\n />\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"4WAiBM,EAAY,qBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAO7D,SAAgB,EAAe,EAAyC,CACtE,GAAM,CAAE,EAAa,GAAA,EAAyB,SAAS,GAAM,CAEvD,EAAa,GAAyB,CAEtC,EAAS,GAAW,CACpB,EAAa,GAAe,CAElC,eAAe,GAA+B,CAC5C,EAAe,GAAK,CAEpB,GAAI,CACF,MAAM,EAAW,EAAa,WAAW,EAAM,WAAY,EAAM,OAAO,CAAC,CAEzE,EAAO,QAAQ,EAAU,EAAa,kBAAoB,UAAU,CAAC,CAErE,EAAgB,cAAc,CAC5B,GAAI,EAAM,OACX,CAAE,CACD,WAAY,EAAW,OACvB,OAAQ,EAAW,KACnB,cAAe,EAAc,SAC7B,SAAU,EAAgB,MAC3B,CAAC,CAEF,EAAM,YAAY,MACZ,CACN,EAAO,QAAQ,EAAU,EAAa,gBAAkB,QAAQ,CAAC,CACjE,EAAe,GAAM,EAIzB,OACE,EAAA,EAAA,MAAC,EAAD,CACE,WAAY,EAAM,WAClB,MAAoB,EAAb,EAAuB,4BAAyC,oBAAoB,UAF7F,EAIE,EAAA,EAAA,KAAC,IAAD,CAAA,UAAG,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAQ,EAAa,qBAAuB,aAAgB,CAAA,CAAI,CAAA,EAE/F,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,WAAc,CAAA,EAClD,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,QAAS,EACT,KAAM,EAAU,SAAS,CACZ,cACb,QAAQ,SACR,CAAA,CACW,CAAA,CAAA,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Gn as e,P as t,st as n}from"./Db8SRTe2.chunk.js";import{i as r,r as i}from"./B4CGL9yn.chunk.js";import{n as a}from"./r5AG2PFt.chunk.js";import{a as o,o as s}from"./vy77iKWZ.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{O as l}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{Gn as e,P as t,st as n}from"./Db8SRTe2.chunk.js";import{i as r,r as i}from"./B4CGL9yn.chunk.js";import{n as a}from"./r5AG2PFt.chunk.js";import{a as o,o as s}from"./vy77iKWZ.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{O as l}from"./app-DomX9RS2.js";var u={isType(e,t){return e?.typeId?e.typeId===t:e?.type?.toLowerCase()===a[t].toLowerCase()},isResource(e){return u.isType(e,a.Resource)},isClassification(e){return e.type===`Subject`}},d={colours:`amber.apricot.aqua.azure.black.blue.bronze.brown.chocolate.copper.coral.cream.crimson.cyan.emerald.gold.green.grey.indigo.ivory.jade.lavender.lime.maroon.mint.navy.olive.orange.peach.pink.plum.purple.red.rose.ruby.sage.salmon.sapphire.scarlet.silver.sky.teal.turquoise.violet.white.yellow`.split(`.`),animals:`aardvark.albatross.alligator.alpaca.ant.anteater.antelope.ape.armadillo.baboon.badger.bat.bear.beaver.bee.beetle.bison.blackbird.boar.bobcat.bonobo.buffalo.butterfly.camel.canary.capybara.caribou.cat.caterpillar.chameleon.cheetah.chimpanzee.chinchilla.chipmunk.clownfish.cockatoo.cougar.cow.coyote.crab.crane.crocodile.crow.deer.dingo.dog.dolphin.donkey.dove.dragonfly.duck.eagle.elephant.elk.emu.falcon.ferret.finch.firefly.fish.flamingo.fox.frog.gazelle.gecko.gerbil.giraffe.goat.goldfish.goose.gorilla.grasshopper.gull.hamster.hare.hawk.hedgehog.heron.hippopotamus.horse.hummingbird.iguana.impala.jaguar.jellyfish.kangaroo.kingfisher.kiwi.koala.koi.ladybug.lemur.leopard.lion.lizard.llama.lobster.lynx.macaw.magpie.manatee.mandrill.marlin.meerkat.mole.mongoose.monkey.moose.mouse.mule.narwhal.newt.nightingale.ocelot.octopus.orangutan.orca.ostrich.otter.owl.ox.panda.panther.parakeet.parrot.peacock.pelican.penguin.pheasant.pigeon.platypus.pony.porcupine.possum.pufferfish.puffin.puma.quail.rabbit.raccoon.raven.reindeer.rhinoceros.roadrunner.robin.rooster.salamander.salmon.seahorse.seal.shark.sheep.sloth.snail.snake.sparrow.squid.squirrel.starfish.stingray.stork.swallow.swan.swordfish.tapir.tiger.toad.tortoise.toucan.trout.tuna.turtle.wallaby.walrus.weasel.whale.wildebeest.wolf.wolverine.woodpecker.yak.zebra`.split(`.`)},f=c.encloseNamespace(`shared.analyticsUtils`);function p(e){return e.charAt(0).toUpperCase()+e.slice(1)}function m(e){if(!e)return 0;let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t|=0}return Math.abs(t)}function h(e,t){let n=Math.floor(new Date().getMinutes()/5),r=m(`${e||t}-${n}`),i=d.colours[r%d.colours.length],a=d.animals[Math.floor(r/d.colours.length)%d.animals.length];return`${p(i)} ${p(a)}`}function g(e,t){return e?t?h(e.id,e.sessionId):e.deleted?f(`deleted`):s.getFullName(e)||f(`anonUser`):f(`anonUser`)}n();var _=t();function v(e){return(0,_.jsx)(`svg`,{...e,children:(0,_.jsx)(`path`,{d:`m16.837 9.842-1.138-3.678a1.65 1.65 0 0 0-.887-1.01 1.67 1.67 0 0 0-1.348-.02l-1.14.486a.8.8 0 0 1-.647 0l-1.14-.488a1.67 1.67 0 0 0-1.348.021 1.65 1.65 0 0 0-.887 1.01L7.164 9.842a7.17 7.17 0 0 0-3.062 1.85.41.41 0 0 0 .314.683h15.17c.162 0 .31-.094.376-.241a.41.41 0 0 0-.064-.44 7.17 7.17 0 0 0-3.061-1.852M9.094 6.404a.836.836 0 0 1 1.117-.516l1.135.484c.416.181.89.181 1.306 0l1.137-.485a.836.836 0 0 1 1.117.516l.976 3.153a16.17 16.17 0 0 0-7.764 0zm-3.59 5.148c1.455-1.019 3.866-1.645 6.497-1.645a14.5 14.5 0 0 1 4.41.651c.74.229 1.444.563 2.087.994zm9.807 1.645a2.9 2.9 0 0 0-2.508 1.447 1.61 1.61 0 0 0-1.604 0c-.763-1.323-2.425-1.835-3.807-1.173s-2.016 2.272-1.452 3.69a2.93 2.93 0 0 0 3.6 1.704 2.906 2.906 0 0 0 1.968-3.445.88.88 0 0 1 .986 0 2.87 2.87 0 0 0 1.269 3.088 2.91 2.91 0 0 0 3.351-.176c.966-.762 1.341-2.048.935-3.204s-1.505-1.932-2.738-1.93m-6.62 4.936c-1.143 0-2.07-.92-2.07-2.056s.927-2.057 2.07-2.057 2.069.92 2.069 2.057a2.065 2.065 0 0 1-2.07 2.056m6.62 0c-1.142 0-2.069-.92-2.069-2.056s.927-2.057 2.07-2.057 2.068.92 2.068 2.057a2.065 2.065 0 0 1-2.069 2.056`,fill:`currentColor`})})}var y={iconCircle:`_iconCircle_186sk_1`,dot:`_dot_186sk_8`};function b(e){let t=e.type===`anon`;return e.type===`student-reach`?(0,_.jsx)(`div`,{className:`position-relative h-100 w-100`,children:(0,_.jsx)(`div`,{className:`${y.iconCircle} bg-orange text-light ${e.extraClasses||``}`,children:(0,_.jsx)(i,{svg:l,size:e.anonymousSvgSize||r.Large,className:`svg-container w-100 h-100`})})}):t?(0,_.jsxs)(`div`,{className:`position-relative h-100 w-100`,children:[(0,_.jsx)(`div`,{className:`${y.iconCircle} bg-gray-700 text-light ${e.extraClasses||``}`,children:(0,_.jsx)(i,{svg:v,size:e.anonymousSvgSize||r.Large,className:`svg-container w-100 h-100`})}),e.showDot&&(0,_.jsx)(`div`,{className:`${y.dot} rounded-circle bg-danger`})]}):(0,_.jsx)(o,{imageCdnUrl:e.imageCdnUrl,initials:e.initials,imageUrl:e.imageUrl,extraClasses:e.extraClasses,showDot:e.showDot,anonymiseUsers:e.anonymiseUsers})}var x=e(((e,t)=>{function n(){return t.exports=n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},t.exports.__esModule=!0,t.exports.default=t.exports,n.apply(null,arguments)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports}));export{u as i,b as n,g as r,x as t};
|
|
2
|
+
//# sourceMappingURL=kzm6epUV.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C-W6YIv-.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/MasterTypeHelper.ts","../../../../libs/shared/src/apps/analytics/utils/anon-name-dictionaries.json","../../../../libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","../../../../libs/shared/src/images/svg/objects/AnonymousSvg.tsx","../../../../libs/shared/src/components/engagement-avatar/engagement-avatar.module.scss","../../../../libs/shared/src/components/engagement-avatar/EngagementAvatar.tsx","../../../../../node_modules/@babel/runtime/helpers/extends.js"],"sourcesContent":["import { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classification, Resource } from 'libs/shared/interfaces';\n\nexport const MasterTypeHelper = {\n isType<T extends BaseObject>(obj: any, typeId: MasterType): obj is T {\n if (obj?.typeId)\n return obj.typeId === typeId;\n\n // Fallback to comparing actual string types\n return obj?.type?.toLowerCase() === MasterType[typeId].toLowerCase();\n },\n\n isResource(obj: any): obj is Resource {\n return MasterTypeHelper.isType<Resource>(obj, MasterType.Resource);\n },\n\n isClassification(obj: any): obj is Classification {\n return obj.type === 'Subject';\n }\n};\n","{\n \"colours\": [\n \"amber\",\n \"apricot\",\n \"aqua\",\n \"azure\",\n \"black\",\n \"blue\",\n \"bronze\",\n \"brown\",\n \"chocolate\",\n \"copper\",\n \"coral\",\n \"cream\",\n \"crimson\",\n \"cyan\",\n \"emerald\",\n \"gold\",\n \"green\",\n \"grey\",\n \"indigo\",\n \"ivory\",\n \"jade\",\n \"lavender\",\n \"lime\",\n \"maroon\",\n \"mint\",\n \"navy\",\n \"olive\",\n \"orange\",\n \"peach\",\n \"pink\",\n \"plum\",\n \"purple\",\n \"red\",\n \"rose\",\n \"ruby\",\n \"sage\",\n \"salmon\",\n \"sapphire\",\n \"scarlet\",\n \"silver\",\n \"sky\",\n \"teal\",\n \"turquoise\",\n \"violet\",\n \"white\",\n \"yellow\"\n ],\n \"animals\": [\n \"aardvark\", \"albatross\", \"alligator\", \"alpaca\", \"ant\", \"anteater\", \"antelope\", \"ape\", \"armadillo\",\n \"baboon\", \"badger\", \"bat\", \"bear\", \"beaver\", \"bee\", \"beetle\", \"bison\", \"blackbird\", \"boar\", \"bobcat\", \"bonobo\", \"buffalo\", \"butterfly\",\n \"camel\", \"canary\", \"capybara\", \"caribou\", \"cat\", \"caterpillar\", \"chameleon\",\n \"cheetah\", \"chimpanzee\", \"chinchilla\", \"chipmunk\", \"clownfish\", \"cockatoo\", \"cougar\", \"cow\", \"coyote\",\n \"crab\", \"crane\", \"crocodile\", \"crow\",\n \"deer\", \"dingo\", \"dog\", \"dolphin\", \"donkey\", \"dove\", \"dragonfly\", \"duck\",\n \"eagle\", \"elephant\", \"elk\", \"emu\",\n \"falcon\", \"ferret\", \"finch\", \"firefly\", \"fish\", \"flamingo\", \"fox\", \"frog\",\n \"gazelle\", \"gecko\", \"gerbil\", \"giraffe\", \"goat\", \"goldfish\", \"goose\", \"gorilla\", \"grasshopper\", \"gull\",\n \"hamster\", \"hare\", \"hawk\", \"hedgehog\", \"heron\", \"hippopotamus\", \"horse\", \"hummingbird\",\n \"iguana\", \"impala\",\n \"jaguar\", \"jellyfish\",\n \"kangaroo\", \"kingfisher\", \"kiwi\", \"koala\", \"koi\",\n \"ladybug\", \"lemur\", \"leopard\", \"lion\", \"lizard\", \"llama\", \"lobster\", \"lynx\",\n \"macaw\", \"magpie\", \"manatee\", \"mandrill\", \"marlin\", \"meerkat\", \"mole\", \"mongoose\", \"monkey\", \"moose\", \"mouse\", \"mule\",\n \"narwhal\", \"newt\", \"nightingale\",\n \"ocelot\", \"octopus\", \"orangutan\", \"orca\", \"ostrich\", \"otter\", \"owl\", \"ox\",\n \"panda\", \"panther\", \"parakeet\", \"parrot\", \"peacock\", \"pelican\", \"penguin\", \"pheasant\", \"pigeon\", \"platypus\",\n \"pony\", \"porcupine\", \"possum\", \"pufferfish\", \"puffin\", \"puma\",\n \"quail\",\n \"rabbit\", \"raccoon\", \"raven\", \"reindeer\", \"rhinoceros\", \"roadrunner\", \"robin\", \"rooster\",\n \"salamander\", \"salmon\", \"seahorse\", \"seal\", \"shark\", \"sheep\", \"sloth\", \"snail\", \"snake\", \"sparrow\",\n \"squid\", \"squirrel\", \"starfish\", \"stingray\", \"stork\", \"swallow\", \"swan\", \"swordfish\",\n \"tapir\", \"tiger\", \"toad\", \"tortoise\", \"toucan\", \"trout\", \"tuna\", \"turtle\",\n \"wallaby\", \"walrus\", \"weasel\", \"whale\", \"wildebeest\", \"wolf\", \"wolverine\", \"woodpecker\",\n \"yak\",\n \"zebra\"\n ]\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport dictionaries from './anon-name-dictionaries.json';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction capitalize(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\nfunction stringToSeed(input: string): number {\n if (!input)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction generateAnonName(userId: string, sessionId: string): string {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n *\n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n *\n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const bucket = Math.floor((new Date()).getMinutes() / 5);\n const seed = stringToSeed(`${userId || sessionId}-${bucket}`);\n // Treat the seed as a mixed-radix number: the low \"digit\" (mod) picks the colour, the next\n // \"digit\" (quotient) picks the animal. This decorrelates the two indices so every pair is\n // reachable and consecutive seeds cycle through all colours before the animal advances.\n const colour = dictionaries.colours[seed % dictionaries.colours.length];\n const animal = dictionaries.animals[Math.floor(seed / dictionaries.colours.length) % dictionaries.animals.length];\n return `${capitalize(colour)} ${capitalize(animal)}`;\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return generateAnonName(user.id, user.sessionId);\n}\n","import React from 'react';\n\nexport function AnonymousSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n d='m16.837 9.842-1.138-3.678a1.65 1.65 0 0 0-.887-1.01 1.67 1.67 0 0 0-1.348-.02l-1.14.486a.8.8 0 0 1-.647 0l-1.14-.488a1.67 1.67 0 0 0-1.348.021 1.65 1.65 0 0 0-.887 1.01L7.164 9.842a7.17 7.17 0 0 0-3.062 1.85.41.41 0 0 0 .314.683h15.17c.162 0 .31-.094.376-.241a.41.41 0 0 0-.064-.44 7.17 7.17 0 0 0-3.061-1.852M9.094 6.404a.836.836 0 0 1 1.117-.516l1.135.484c.416.181.89.181 1.306 0l1.137-.485a.836.836 0 0 1 1.117.516l.976 3.153a16.17 16.17 0 0 0-7.764 0zm-3.59 5.148c1.455-1.019 3.866-1.645 6.497-1.645a14.5 14.5 0 0 1 4.41.651c.74.229 1.444.563 2.087.994zm9.807 1.645a2.9 2.9 0 0 0-2.508 1.447 1.61 1.61 0 0 0-1.604 0c-.763-1.323-2.425-1.835-3.807-1.173s-2.016 2.272-1.452 3.69a2.93 2.93 0 0 0 3.6 1.704 2.906 2.906 0 0 0 1.968-3.445.88.88 0 0 1 .986 0 2.87 2.87 0 0 0 1.269 3.088 2.91 2.91 0 0 0 3.351-.176c.966-.762 1.341-2.048.935-3.204s-1.505-1.932-2.738-1.93m-6.62 4.936c-1.143 0-2.07-.92-2.07-2.056s.927-2.057 2.07-2.057 2.069.92 2.069 2.057a2.065 2.065 0 0 1-2.07 2.056m6.62 0c-1.142 0-2.069-.92-2.069-2.056s.927-2.057 2.07-2.057 2.068.92 2.068 2.057a2.065 2.065 0 0 1-2.069 2.056'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .iconCircle {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 100%;\n }\n\n .dot {\n position: absolute;\n top: -0.1rem;\n right: -0.1rem;\n width: 0.8rem;\n height: 0.8rem;\n }\n}\n","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { AnonymousSvg } from 'libs/shared/images/svg/objects/AnonymousSvg';\nimport { GroupSvg } from 'libs/shared/images/svg/objects/GroupSvg';\nimport { EngagementType } from 'libs/shared/interfaces';\n\nimport styles from './engagement-avatar.module.scss';\n\ninterface EngagementAvatarProps {\n imageCdnUrl: string;\n initials: string;\n imageUrl?: string;\n extraClasses?: string;\n showDot?: boolean;\n anonymiseUsers?: boolean;\n /** When set, determines the avatar icon based on engagement type. */\n type?: EngagementType;\n anonymousSvgSize?: SvgContainerSize;\n}\n\nexport function EngagementAvatar(props: EngagementAvatarProps): JSX.Element {\n const isAnonymous = props.type === 'anon';\n const isClassroomViews = props.type === 'student-reach';\n\n if (isClassroomViews) {\n return (\n <div className='position-relative h-100 w-100'>\n <div className={`${styles.iconCircle} bg-orange text-light ${props.extraClasses || ''}`}>\n <SvgContainer\n svg={GroupSvg}\n size={props.anonymousSvgSize || SvgContainerSize.Large}\n className='svg-container w-100 h-100'\n />\n </div>\n </div>\n );\n }\n\n if (isAnonymous) {\n return (\n <div className='position-relative h-100 w-100'>\n <div className={`${styles.iconCircle} bg-gray-700 text-light ${props.extraClasses || ''}`}>\n <SvgContainer\n svg={AnonymousSvg}\n size={props.anonymousSvgSize || SvgContainerSize.Large}\n className='svg-container w-100 h-100'\n />\n </div>\n {props.showDot && <div className={`${styles.dot} rounded-circle bg-danger`} />}\n </div>\n );\n }\n\n return (\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.initials}\n imageUrl={props.imageUrl}\n extraClasses={props.extraClasses}\n showDot={props.showDot}\n anonymiseUsers={props.anonymiseUsers}\n />\n );\n}\n","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"x_google_ignoreList":[6],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kzm6epUV.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/MasterTypeHelper.ts","../../../../libs/shared/src/apps/analytics/utils/anon-name-dictionaries.json","../../../../libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","../../../../libs/shared/src/images/svg/objects/AnonymousSvg.tsx","../../../../libs/shared/src/components/engagement-avatar/engagement-avatar.module.scss","../../../../libs/shared/src/components/engagement-avatar/EngagementAvatar.tsx","../../../../../node_modules/@babel/runtime/helpers/extends.js"],"sourcesContent":["import { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classification, Resource } from 'libs/shared/interfaces';\n\nexport const MasterTypeHelper = {\n isType<T extends BaseObject>(obj: any, typeId: MasterType): obj is T {\n if (obj?.typeId)\n return obj.typeId === typeId;\n\n // Fallback to comparing actual string types\n return obj?.type?.toLowerCase() === MasterType[typeId].toLowerCase();\n },\n\n isResource(obj: any): obj is Resource {\n return MasterTypeHelper.isType<Resource>(obj, MasterType.Resource);\n },\n\n isClassification(obj: any): obj is Classification {\n return obj.type === 'Subject';\n }\n};\n","{\n \"colours\": [\n \"amber\",\n \"apricot\",\n \"aqua\",\n \"azure\",\n \"black\",\n \"blue\",\n \"bronze\",\n \"brown\",\n \"chocolate\",\n \"copper\",\n \"coral\",\n \"cream\",\n \"crimson\",\n \"cyan\",\n \"emerald\",\n \"gold\",\n \"green\",\n \"grey\",\n \"indigo\",\n \"ivory\",\n \"jade\",\n \"lavender\",\n \"lime\",\n \"maroon\",\n \"mint\",\n \"navy\",\n \"olive\",\n \"orange\",\n \"peach\",\n \"pink\",\n \"plum\",\n \"purple\",\n \"red\",\n \"rose\",\n \"ruby\",\n \"sage\",\n \"salmon\",\n \"sapphire\",\n \"scarlet\",\n \"silver\",\n \"sky\",\n \"teal\",\n \"turquoise\",\n \"violet\",\n \"white\",\n \"yellow\"\n ],\n \"animals\": [\n \"aardvark\", \"albatross\", \"alligator\", \"alpaca\", \"ant\", \"anteater\", \"antelope\", \"ape\", \"armadillo\",\n \"baboon\", \"badger\", \"bat\", \"bear\", \"beaver\", \"bee\", \"beetle\", \"bison\", \"blackbird\", \"boar\", \"bobcat\", \"bonobo\", \"buffalo\", \"butterfly\",\n \"camel\", \"canary\", \"capybara\", \"caribou\", \"cat\", \"caterpillar\", \"chameleon\",\n \"cheetah\", \"chimpanzee\", \"chinchilla\", \"chipmunk\", \"clownfish\", \"cockatoo\", \"cougar\", \"cow\", \"coyote\",\n \"crab\", \"crane\", \"crocodile\", \"crow\",\n \"deer\", \"dingo\", \"dog\", \"dolphin\", \"donkey\", \"dove\", \"dragonfly\", \"duck\",\n \"eagle\", \"elephant\", \"elk\", \"emu\",\n \"falcon\", \"ferret\", \"finch\", \"firefly\", \"fish\", \"flamingo\", \"fox\", \"frog\",\n \"gazelle\", \"gecko\", \"gerbil\", \"giraffe\", \"goat\", \"goldfish\", \"goose\", \"gorilla\", \"grasshopper\", \"gull\",\n \"hamster\", \"hare\", \"hawk\", \"hedgehog\", \"heron\", \"hippopotamus\", \"horse\", \"hummingbird\",\n \"iguana\", \"impala\",\n \"jaguar\", \"jellyfish\",\n \"kangaroo\", \"kingfisher\", \"kiwi\", \"koala\", \"koi\",\n \"ladybug\", \"lemur\", \"leopard\", \"lion\", \"lizard\", \"llama\", \"lobster\", \"lynx\",\n \"macaw\", \"magpie\", \"manatee\", \"mandrill\", \"marlin\", \"meerkat\", \"mole\", \"mongoose\", \"monkey\", \"moose\", \"mouse\", \"mule\",\n \"narwhal\", \"newt\", \"nightingale\",\n \"ocelot\", \"octopus\", \"orangutan\", \"orca\", \"ostrich\", \"otter\", \"owl\", \"ox\",\n \"panda\", \"panther\", \"parakeet\", \"parrot\", \"peacock\", \"pelican\", \"penguin\", \"pheasant\", \"pigeon\", \"platypus\",\n \"pony\", \"porcupine\", \"possum\", \"pufferfish\", \"puffin\", \"puma\",\n \"quail\",\n \"rabbit\", \"raccoon\", \"raven\", \"reindeer\", \"rhinoceros\", \"roadrunner\", \"robin\", \"rooster\",\n \"salamander\", \"salmon\", \"seahorse\", \"seal\", \"shark\", \"sheep\", \"sloth\", \"snail\", \"snake\", \"sparrow\",\n \"squid\", \"squirrel\", \"starfish\", \"stingray\", \"stork\", \"swallow\", \"swan\", \"swordfish\",\n \"tapir\", \"tiger\", \"toad\", \"tortoise\", \"toucan\", \"trout\", \"tuna\", \"turtle\",\n \"wallaby\", \"walrus\", \"weasel\", \"whale\", \"wildebeest\", \"wolf\", \"wolverine\", \"woodpecker\",\n \"yak\",\n \"zebra\"\n ]\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport dictionaries from './anon-name-dictionaries.json';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction capitalize(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\nfunction stringToSeed(input: string): number {\n if (!input)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction generateAnonName(userId: string, sessionId: string): string {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n *\n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n *\n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const bucket = Math.floor((new Date()).getMinutes() / 5);\n const seed = stringToSeed(`${userId || sessionId}-${bucket}`);\n // Treat the seed as a mixed-radix number: the low \"digit\" (mod) picks the colour, the next\n // \"digit\" (quotient) picks the animal. This decorrelates the two indices so every pair is\n // reachable and consecutive seeds cycle through all colours before the animal advances.\n const colour = dictionaries.colours[seed % dictionaries.colours.length];\n const animal = dictionaries.animals[Math.floor(seed / dictionaries.colours.length) % dictionaries.animals.length];\n return `${capitalize(colour)} ${capitalize(animal)}`;\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return generateAnonName(user.id, user.sessionId);\n}\n","import React from 'react';\n\nexport function AnonymousSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n d='m16.837 9.842-1.138-3.678a1.65 1.65 0 0 0-.887-1.01 1.67 1.67 0 0 0-1.348-.02l-1.14.486a.8.8 0 0 1-.647 0l-1.14-.488a1.67 1.67 0 0 0-1.348.021 1.65 1.65 0 0 0-.887 1.01L7.164 9.842a7.17 7.17 0 0 0-3.062 1.85.41.41 0 0 0 .314.683h15.17c.162 0 .31-.094.376-.241a.41.41 0 0 0-.064-.44 7.17 7.17 0 0 0-3.061-1.852M9.094 6.404a.836.836 0 0 1 1.117-.516l1.135.484c.416.181.89.181 1.306 0l1.137-.485a.836.836 0 0 1 1.117.516l.976 3.153a16.17 16.17 0 0 0-7.764 0zm-3.59 5.148c1.455-1.019 3.866-1.645 6.497-1.645a14.5 14.5 0 0 1 4.41.651c.74.229 1.444.563 2.087.994zm9.807 1.645a2.9 2.9 0 0 0-2.508 1.447 1.61 1.61 0 0 0-1.604 0c-.763-1.323-2.425-1.835-3.807-1.173s-2.016 2.272-1.452 3.69a2.93 2.93 0 0 0 3.6 1.704 2.906 2.906 0 0 0 1.968-3.445.88.88 0 0 1 .986 0 2.87 2.87 0 0 0 1.269 3.088 2.91 2.91 0 0 0 3.351-.176c.966-.762 1.341-2.048.935-3.204s-1.505-1.932-2.738-1.93m-6.62 4.936c-1.143 0-2.07-.92-2.07-2.056s.927-2.057 2.07-2.057 2.069.92 2.069 2.057a2.065 2.065 0 0 1-2.07 2.056m6.62 0c-1.142 0-2.069-.92-2.069-2.056s.927-2.057 2.07-2.057 2.068.92 2.068 2.057a2.065 2.065 0 0 1-2.069 2.056'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .iconCircle {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 100%;\n }\n\n .dot {\n position: absolute;\n top: -0.1rem;\n right: -0.1rem;\n width: 0.8rem;\n height: 0.8rem;\n }\n}\n","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { AnonymousSvg } from 'libs/shared/images/svg/objects/AnonymousSvg';\nimport { GroupSvg } from 'libs/shared/images/svg/objects/GroupSvg';\nimport { EngagementType } from 'libs/shared/interfaces';\n\nimport styles from './engagement-avatar.module.scss';\n\ninterface EngagementAvatarProps {\n imageCdnUrl: string;\n initials: string;\n imageUrl?: string;\n extraClasses?: string;\n showDot?: boolean;\n anonymiseUsers?: boolean;\n /** When set, determines the avatar icon based on engagement type. */\n type?: EngagementType;\n anonymousSvgSize?: SvgContainerSize;\n}\n\nexport function EngagementAvatar(props: EngagementAvatarProps): JSX.Element {\n const isAnonymous = props.type === 'anon';\n const isClassroomViews = props.type === 'student-reach';\n\n if (isClassroomViews) {\n return (\n <div className='position-relative h-100 w-100'>\n <div className={`${styles.iconCircle} bg-orange text-light ${props.extraClasses || ''}`}>\n <SvgContainer\n svg={GroupSvg}\n size={props.anonymousSvgSize || SvgContainerSize.Large}\n className='svg-container w-100 h-100'\n />\n </div>\n </div>\n );\n }\n\n if (isAnonymous) {\n return (\n <div className='position-relative h-100 w-100'>\n <div className={`${styles.iconCircle} bg-gray-700 text-light ${props.extraClasses || ''}`}>\n <SvgContainer\n svg={AnonymousSvg}\n size={props.anonymousSvgSize || SvgContainerSize.Large}\n className='svg-container w-100 h-100'\n />\n </div>\n {props.showDot && <div className={`${styles.dot} rounded-circle bg-danger`} />}\n </div>\n );\n }\n\n return (\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.initials}\n imageUrl={props.imageUrl}\n extraClasses={props.extraClasses}\n showDot={props.showDot}\n anonymiseUsers={props.anonymiseUsers}\n />\n );\n}\n","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"x_google_ignoreList":[6],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{m as n,n as r}from"./ClFr_vFf.chunk.js";import{t as i}from"./W6_Zq9he.chunk.js";import{t as a}from"./DQnWJjP7.chunk.js";import{t as o}from"./r5AG2PFt.chunk.js";import{n as s}from"./DZAzLV_d.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{t as l}from"./Drne0tRP.chunk.js";import{t as u}from"./44-tnsP5.chunk.js";import{t as d}from"./Clx0FzVV.chunk.js";import{r as f,x as p}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{m as n,n as r}from"./ClFr_vFf.chunk.js";import{t as i}from"./W6_Zq9he.chunk.js";import{t as a}from"./DQnWJjP7.chunk.js";import{t as o}from"./r5AG2PFt.chunk.js";import{n as s}from"./DZAzLV_d.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{t as l}from"./Drne0tRP.chunk.js";import{t as u}from"./44-tnsP5.chunk.js";import{t as d}from"./Clx0FzVV.chunk.js";import{r as f,x as p}from"./app-DomX9RS2.js";import{a as m,i as h,n as g,s as _,t as v}from"./DFrb5tDP2.chunk.js";import{n as y,t as b}from"./C2ypnyI02.chunk.js";import{i as x,t as S}from"./DjoLfFO8.chunk.js";var C=o();t();var w={logins(e,t,n,r){return{url:s.urlBuilder(`{gateway}/v1/analytics/logins`,{...e,timeOffset:a.getTimezoneOffset()}),key:b(`logins`,e),normalize:!1,success:t,error:n,always:r}}},T=e(),E={image:`_image_zpxv9_1`},D=c.encloseNamespace(`reportsShared.schoolLoginsByGroupCardEmptyState`);function O(){return(0,T.jsxs)(d,{className:`flex-grow-1 justify-content-center`,children:[(0,T.jsx)(d.Image,{src:l.EmptyStates.Shared.School,className:E.image}),(0,T.jsx)(d.Heading,{className:`h6`,children:D(`heading`)}),(0,T.jsx)(d.Info,{className:`w-100`,children:D(`description`)})]})}var k=`logins.schoolLoginsByGroupCard`;function A(){let e=f(`logins`),t=n(w.logins(e)),i=p(),a=e=>e===`Unknown`||e===null?`Staff`:e,o=g(t.data?.yearGroupCount?.map(e=>({name:a(e.name),count:e.count}))),s=o?.reduce((e,t)=>e+t.y,0);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`h6 mb-1`,children:(0,T.jsx)(r,{namespace:k,phrase:i?`totalLoginsTertiary`:`totalLogins`,options:{logins:s}})}),o.length?(0,T.jsx)(C.Scrollbars,{className:`position-relative`,children:(0,T.jsx)(`div`,{className:`position-absolute w-100`,children:(0,T.jsx)(_,{data:o})})}):(0,T.jsx)(O,{})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-50`,children:`\xA0`})})}var j={MONTH:35,YEAR:365},M={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},N={day:`D MMM`,month:`MMM`,year:`YYYY`};function P(e){let t=a.diffBetween(e.end,e.start,`day`);return t>j.YEAR?`year`:t>j.MONTH?`month`:`day`}function F(e,t){let n=[],r=a.convertUTCToLocal(e.start),i=a.convertUTCToLocal(e.end),o=a.format(r,M[t]);for(;!a.isAfter(o,i,t);)n.push(o),o=a.format(a.add(o,1,t),M[t]);return n}function I(e,t){if(!e)return null;let n=P(t),r=F(t,n),o={};e.forEach(e=>{if(!e.userType)return;let t=`groupedDateWatched`in e&&e.groupedDateWatched||`groupedLoggedOn`in e&&e.groupedLoggedOn,r=a.format(a.convertUTCToLocal(t),M[n]);o[e.userType]=o[e.userType]??{},o[e.userType][r]=o[e.userType][r]??0,o[e.userType][r]+=e.count});let s=Object.keys(o);return s.length?{categories:r.map(e=>a.format(e,N[n])),data:i.sortBy(s.map(e=>({name:m(e),type:`line`,data:r.map(t=>o[e][t]??0),color:h(e)})),`name`)}:{categories:r.map(e=>a.format(e,N[n])),data:[]}}var L=`logins.schoolLoginsByMonthCard`;function R(){let e=f(`logins`),t=I(n(w.logins(e)).data?.data,e);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:t?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,T.jsx)(r,{namespace:L,phrase:`loginActivity`})}),(0,T.jsx)(v,{categories:t.categories,data:t.data})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var z={column2:`_column2_1cfp0_1`,column1:`_column1_1cfp0_1`},B=c.encloseNamespace(`logins.schoolLoginOverview`);function V(){return u({title:B(`title`)}),y(B(`title`)),x(S()),(0,T.jsx)(`div`,{children:(0,T.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,T.jsx)(`div`,{className:`${z.column1}`,children:(0,T.jsx)(A,{})}),(0,T.jsx)(`div`,{className:`${z.column2}`,children:(0,T.jsx)(R,{})})]})})}export{V as SchoolLoginOverview};
|
|
2
|
+
//# sourceMappingURL=vJbbo87R.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DVmy2mN0.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'> </div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'> </div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vJbbo87R.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'> </div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'> </div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{f as n}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{f as n}from"./DFrb5tDP2.chunk.js";t();var r=e();function i(e){return(0,r.jsx)(`svg`,{...e,children:(0,r.jsx)(`path`,{fill:`currentColor`,d:n})})}export{i as t};
|
|
2
|
+
//# sourceMappingURL=wJ4aGP5K2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"wJ4aGP5K2.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/objects/CogSvg.tsx"],"sourcesContent":["import React from 'react';\n\nimport { COG_SVG_PATH } from './CogSvgPath';\n\nexport function CogSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path fill='currentColor' d={COG_SVG_PATH} />\n </svg>\n );\n}\n"],"mappings":"uGAIA,SAAgB,EAAO,EAAsC,CAC3D,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,YACP,EAAA,EAAA,KAAC,OAAD,CAAM,KAAK,eAAe,EAAG,EAAgB,CAAA,CACzC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./CaEKrEVr.chunk.js";export{e as GenerateReportView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./app-BBppvgGe.js";export{e as ErrorView};
|