-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 121 KB
/
.eslintcache
1
[{"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\App.tsx":"1","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\Shapes.tsx":"2","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilSpecificGroup.tsx":"3","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintGameScene.tsx":"4","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\Paint.tsx":"5","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintFinalScene.tsx":"6","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\reportWebVitals.ts":"7","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\provider\\GenericUserProvider.tsx":"8","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\AuthHeader.tsx":"9","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\SettingsComponent.tsx":"10","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesGameScene.tsx":"11","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\SettingsPopover.tsx":"12","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilsSettings.tsx":"13","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PEWelcomeScene.tsx":"14","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\Starfall.tsx":"15","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\StoryGameScene.tsx":"16","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\StoryFinalScene.tsx":"17","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\Story.tsx":"18","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\ScoreScene.tsx":"19","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesScoreScene.tsx":"20","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\teachers\\pages\\TeacherSpecificGroup.tsx":"21","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\groups\\provider\\GroupsProvider.tsx":"22","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\index.tsx":"23","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\Footer.tsx":"24","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\api\\GamesApi.tsx":"25","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilHome.tsx":"26","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\WelcomeScene.tsx":"27","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\GameScene.tsx":"28","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesWelcomeScene.tsx":"29","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\Signup.tsx":"30","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilsGroups.tsx":"31","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PE.tsx":"32","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\activities\\provider\\ActivitiesProvider.tsx":"33","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\HomeComponent.tsx":"34","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\activities\\api\\ActivitiesApi.tsx":"35","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PEGameScene.tsx":"36","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\api\\AuthenticationApi.tsx":"37","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\groups\\api\\GroupsApi.tsx":"38","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\index.tsx":"39","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\provider\\GamesProvider.tsx":"40","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilMenuBar.tsx":"41","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintWelcomeScene.tsx":"42","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\PrivateRoute.tsx":"43","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\teachers\\pages\\TeacherMenuBar.tsx":"44","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\api\\GenericUserApi.tsx":"45"},{"size":5246,"mtime":1623095016865,"results":"46","hashOfConfig":"47"},{"size":1596,"mtime":1623095326948,"results":"48","hashOfConfig":"47"},{"size":15984,"mtime":1623158166747,"results":"49","hashOfConfig":"47"},{"size":6831,"mtime":1623098349512,"results":"50","hashOfConfig":"47"},{"size":1271,"mtime":1623096254101,"results":"51","hashOfConfig":"47"},{"size":831,"mtime":1623095964093,"results":"52","hashOfConfig":"47"},{"size":390,"mtime":1619514190152,"results":"53","hashOfConfig":"47"},{"size":17415,"mtime":1618479076153,"results":"54","hashOfConfig":"47"},{"size":485,"mtime":1618566209660,"results":"55","hashOfConfig":"47"},{"size":12247,"mtime":1620222234947,"results":"56","hashOfConfig":"47"},{"size":7593,"mtime":1622052654573,"results":"57","hashOfConfig":"47"},{"size":2896,"mtime":1620222180000,"results":"58","hashOfConfig":"47"},{"size":800,"mtime":1619689801691,"results":"59","hashOfConfig":"47"},{"size":3012,"mtime":1623147149257,"results":"60","hashOfConfig":"47"},{"size":1764,"mtime":1623148591792,"results":"61","hashOfConfig":"47"},{"size":3961,"mtime":1623167199472,"results":"62","hashOfConfig":"47"},{"size":1418,"mtime":1623167468789,"results":"63","hashOfConfig":"47"},{"size":1271,"mtime":1623156878116,"results":"64","hashOfConfig":"47"},{"size":1541,"mtime":1623157595475,"results":"65","hashOfConfig":"47"},{"size":1611,"mtime":1623167513200,"results":"66","hashOfConfig":"47"},{"size":45439,"mtime":1623173422603,"results":"67","hashOfConfig":"47"},{"size":10791,"mtime":1621172028361,"results":"68","hashOfConfig":"47"},{"size":121,"mtime":1614938326589,"results":"69","hashOfConfig":"47"},{"size":1156,"mtime":1623074207939,"results":"70","hashOfConfig":"47"},{"size":390,"mtime":1618659227491,"results":"71","hashOfConfig":"47"},{"size":606,"mtime":1616499229884,"results":"72","hashOfConfig":"47"},{"size":722,"mtime":1615647087440,"results":"73","hashOfConfig":"47"},{"size":2819,"mtime":1622030354090,"results":"74","hashOfConfig":"47"},{"size":1150,"mtime":1622052620789,"results":"75","hashOfConfig":"47"},{"size":7658,"mtime":1619697538138,"results":"76","hashOfConfig":"47"},{"size":2951,"mtime":1623073930394,"results":"77","hashOfConfig":"47"},{"size":1207,"mtime":1622811016463,"results":"78","hashOfConfig":"47"},{"size":18060,"mtime":1623011808032,"results":"79","hashOfConfig":"47"},{"size":1270,"mtime":1616499229957,"results":"80","hashOfConfig":"47"},{"size":2367,"mtime":1621177343744,"results":"81","hashOfConfig":"47"},{"size":2014,"mtime":1622799654999,"results":"82","hashOfConfig":"47"},{"size":1164,"mtime":1614854358769,"results":"83","hashOfConfig":"47"},{"size":917,"mtime":1618411293802,"results":"84","hashOfConfig":"47"},{"size":521,"mtime":1618563582107,"results":"85","hashOfConfig":"47"},{"size":2947,"mtime":1618659230874,"results":"86","hashOfConfig":"47"},{"size":1319,"mtime":1621954388843,"results":"87","hashOfConfig":"47"},{"size":1235,"mtime":1622843653545,"results":"88","hashOfConfig":"47"},{"size":951,"mtime":1618562706598,"results":"89","hashOfConfig":"47"},{"size":1622,"mtime":1623009122665,"results":"90","hashOfConfig":"47"},{"size":2534,"mtime":1618478400832,"results":"91","hashOfConfig":"47"},{"filePath":"92","messages":"93","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"94","usedDeprecatedRules":"95"},"1r26a3c",{"filePath":"96","messages":"97","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"98","usedDeprecatedRules":"95"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"101","usedDeprecatedRules":"102"},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"107","usedDeprecatedRules":"95"},{"filePath":"108","messages":"109","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"110","usedDeprecatedRules":"102"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"113"},{"filePath":"114","messages":"115","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"113"},{"filePath":"116","messages":"117","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"102"},{"filePath":"118","messages":"119","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"120","messages":"121","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"122","usedDeprecatedRules":"95"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"125","messages":"126","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"127"},{"filePath":"128","messages":"129","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"130","usedDeprecatedRules":"95"},{"filePath":"131","messages":"132","errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"133","usedDeprecatedRules":"95"},{"filePath":"134","messages":"135","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"136","messages":"137","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"138","messages":"139","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"140"},{"filePath":"141","messages":"142","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"102"},{"filePath":"143","messages":"144","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"102"},{"filePath":"145","messages":"146","errorCount":0,"warningCount":15,"fixableErrorCount":0,"fixableWarningCount":0,"source":"147","usedDeprecatedRules":"95"},{"filePath":"148","messages":"149","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"150","messages":"151","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"152","messages":"153","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"154","usedDeprecatedRules":"95"},{"filePath":"155","messages":"156","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"157","messages":"158","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"159"},{"filePath":"160","messages":"161","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"162","messages":"163","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"164","messages":"165","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"166","messages":"167","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"168","messages":"169","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"170","messages":"171","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"172","messages":"173","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"174","messages":"175","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"102"},{"filePath":"176","messages":"177","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"102"},{"filePath":"178","messages":"179","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"180","messages":"181","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"182","messages":"183","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"184","messages":"185","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"186","messages":"187","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"188","messages":"189","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"190","messages":"191","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"192","messages":"193","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"194","messages":"195","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"196","messages":"197","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\App.tsx",["198","199","200","201","202"],"import React, { useContext, useEffect, useMemo, useRef } from 'react';\nimport { Redirect, Route } from 'react-router-dom';\nimport { IonApp, IonRouterOutlet } from '@ionic/react';\nimport { IonReactRouter } from '@ionic/react-router';\nimport { AuthenticationProvider, LoginContext, PrivateRoute } from \"./authentication\"\nimport Login from \"./authentication/pages/Login\";\n\n/* Core CSS required for Ionic components to work properly */\nimport '@ionic/react/css/core.css';\n\n/* Basic CSS for apps built with Ionic */\nimport '@ionic/react/css/normalize.css';\nimport '@ionic/react/css/structure.css';\nimport '@ionic/react/css/typography.css';\n\n/* Optional CSS utils that can be commented out */\nimport '@ionic/react/css/padding.css';\nimport '@ionic/react/css/float-elements.css';\nimport '@ionic/react/css/text-alignment.css';\nimport '@ionic/react/css/text-transformation.css';\nimport '@ionic/react/css/flex-utils.css';\nimport '@ionic/react/css/display.css';\nimport Signup from \"./authentication/pages/Signup\";\nimport \"./main.css\"\nimport TeacherHome from \"./teachers/pages/TeacherHome\";\nimport PupilHome from \"./pupils/pages/PupilHome\";\nimport { GenericUserProvider } from \"./genericUser/provider/GenericUserProvider\";\nimport AccountSettings from \"./teachers/pages/TeacherSettings\";\nimport Home from \"./genericUser/components/Home\";\nimport PupilsSettings from \"./pupils/pages/PupilsSettings\";\nimport Starfall from \"./games/pages/starfallGame/Starfall\";\nimport TeachersGroups from \"./teachers/pages/TeachersGroups\";\nimport { GroupsProvider } from \"./groups/provider/GroupsProvider\";\nimport PupilsGroups from \"./pupils/pages/PupilsGroups\";\nimport { TeacherSpecificGroup } from \"./teachers/pages/TeacherSpecificGroup\";\nimport { GamesProvider } from \"./games/provider/GamesProvider\";\nimport { ActivitiesProvider } from \"./activities/provider/ActivitiesProvider\";\nimport { PupilSpecificGroup } from \"./pupils/pages/PupilSpecificGroup\";\nimport Shapes from \"./games/pages/shapesGame/Shapes\";\nimport Animation from './games/pages/PEGame/PE';\nimport Paint from './games/pages/paintGame/Paint';\nimport Story from './games/pages/storyGame/Story';\n\nconst App: React.FC = () => {\n return (<IonApp>\n <IonReactRouter>\n <IonRouterOutlet>\n <AuthenticationProvider>\n <Route path=\"/login\" component={Login} exact={true} />\n <Route path={\"/signup\"} component={Signup} exact={true} />\n <Route exact path=\"/\" render={() => <Redirect to=\"/home\" />} />\n <Route component={Home} path={\"/home\"} />\n <ActivitiesProvider>\n <GamesProvider>\n <GenericUserProvider>\n <PrivateRoute component={TeacherHome} path={\"/teachers\"} exact={true} />\n <PrivateRoute component={AccountSettings} path={\"/teachers/settings\"} exact={true} />\n <GroupsProvider>\n <PrivateRoute component={TeachersGroups} path={\"/teachers/groups\"}\n exact={true} />\n <PrivateRoute component={TeacherSpecificGroup} path={\"/teachers/groups/:id\"}\n exact={true} />\n <PrivateRoute component={PupilsGroups} path={\"/pupils/groups\"}\n exact={true} />\n <PrivateRoute component={PupilSpecificGroup} path={\"/pupils/groups/:id\"}\n exact={true} />\n </GroupsProvider>\n <PrivateRoute component={PupilHome} path={\"/pupils\"} exact={true} />\n <PrivateRoute component={PupilsSettings} path={\"/pupils/settings\"} exact={true} />\n <PrivateRoute component={Starfall} path={\"/games/starfall/:act\"} exact={true} />\n <PrivateRoute component={Starfall} path={\"/games/starfall\"} exact={true} />\n <PrivateRoute component={Shapes} path={\"/games/shapes/:act\"} exact={true} />\n <PrivateRoute component={Shapes} path={\"/games/shapes\"} exact={true} />\n <PrivateRoute component={Animation} path={\"/games/animation/:act\"} exact={true} />\n <PrivateRoute component={Animation} path={\"/games/animation\"} exact={true} />\n <PrivateRoute component={Paint} path={\"/games/paint/:act\"} exact={true} />\n <PrivateRoute component={Paint} path={\"/games/paint\"} exact={true} />\n <PrivateRoute component={Story} path={\"/games/story/:act\"} exact={true} />\n <PrivateRoute component={Story} path={\"/games/story\"} exact={true} />\n </GenericUserProvider>\n </GamesProvider>\n </ActivitiesProvider>\n </AuthenticationProvider>\n </IonRouterOutlet>\n </IonReactRouter>\n </IonApp>\n )\n};\n\nexport default App;\n",["203","204"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\Shapes.tsx",["205","206","207","208"],"import { IonContent, IonPage } from \"@ionic/react\";\r\nimport React, { useEffect } from \"react\";\r\nimport { Footer } from \"../../../genericUser/components/Footer\";\r\nimport { TeacherMenuBar } from \"../../../teachers/pages/TeacherMenuBar\";\r\nimport * as Phaser from 'phaser';\r\nimport { ShapesGameScene } from \"./ShapesGameScene\";\r\nimport { ShapesWelcomeScene } from \"./ShapesWelcomeScene\";\r\nimport { ShapesScoreScene } from \"./ShapesScoreScene\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport \"./shapes.game.css\"\r\n\r\nexport class ShapesGame extends Phaser.Game {\r\n constructor(config: any) {\r\n super(config);\r\n }\r\n}\r\ninterface urlDetails {\r\n act: string;\r\n}\r\nexport const Shapes: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n useEffect(() => {\r\n console.log(props.match.params.act)\r\n new ShapesGame({\r\n title: \"Shapes\",\r\n width: 900,\r\n height: 500,\r\n parent: \"shapesGameParent\",\r\n scene: [ShapesWelcomeScene, ShapesGameScene, new ShapesScoreScene(props.match.params.act)],\r\n physics: {\r\n default: \"arcade\",\r\n arcade: {\r\n debug: false\r\n }\r\n },\r\n backgroundColor: \"transparent\"\r\n });\r\n }, [props.match.params.act])\r\n return (\r\n // <IonPage>\r\n // <TeacherMenuBar />\r\n <IonContent id={\"pageContent\"}>\r\n <div id={'shapesGameParent'} />\r\n </IonContent>\r\n // <Footer />\r\n // </IonPage>\r\n )\r\n};\r\nexport default Shapes;","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilSpecificGroup.tsx",["209","210","211","212","213","214"],"import React, { useContext, useEffect, useState } from \"react\";\r\nimport {\r\n IonAvatar,\r\n IonButton,\r\n IonCard,\r\n IonCardSubtitle,\r\n IonCardTitle,\r\n IonContent,\r\n IonIcon,\r\n IonImg,\r\n IonItem, IonItemDivider,\r\n IonLabel,\r\n IonList,\r\n IonLoading,\r\n IonPage,\r\n IonRouterLink,\r\n IonSlide,\r\n IonSlides,\r\n IonText,\r\n IonTitle,\r\n} from \"@ionic/react\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { camera, gameController, image, medal, podium } from \"ionicons/icons\";\r\nimport \"../pages/design/pupils.specific.group.css\"\r\nimport { Storage } from \"@capacitor/core\";\r\nimport pic from \"../../assets/img/profile.png\"\r\nimport { GroupContext } from \"../../groups/provider/GroupsProvider\";\r\nimport { UserContext } from \"../../genericUser/provider/GenericUserProvider\";\r\nimport { PICTURE_TYPE, VIDEO_TYPE } from \"../../genericUser/utils/constants\";\r\nimport { usePhotoGallery } from \"../../genericUser/utils/usePhotosGallery\";\r\nimport {\r\n ActivitiesContext,\r\n ActivityProps,\r\n GameResultProps,\r\n MediaProps,\r\n BadgeProps\r\n} from \"../../activities/provider/ActivitiesProvider\";\r\nimport { PupilMenuBar } from \"./PupilMenuBar\";\r\nimport { LoginContext } from \"../../authentication\";\r\nimport { act } from \"@testing-library/react\";\r\n\r\n\r\ninterface urlDetails {\r\n id: string;\r\n}\r\n\r\nexport const PupilSpecificGroup: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n const {\r\n searchUsers,\r\n username\r\n } = useContext(UserContext)\r\n const { token } = useContext(LoginContext)\r\n const { getGroupDetails, getGroupDetailsError, currentGroup } = useContext(GroupContext);\r\n const { currentActivities, getCurrentActivities, fetchingActivities, sendAnswer, earnedBadges, getEarnedBadges } = useContext(ActivitiesContext)\r\n\r\n const [renderingComponent, setRenderingComponent] = useState('currentActivities')\r\n const [uploadedPhotos, setUploadedPhotos] = useState<string[]>([])\r\n const [selectedActivity, setSelectedActivity] = useState<ActivityProps>({})\r\n const [gamesResults, setGamesResults] = useState<GameResultProps[]>([])\r\n const [drawingIndex, setDrawingIndex] = useState<number>(-1)\r\n\r\n\r\n async function getDrawings() {\r\n let drawing = await Storage.get({ key: \"drawing_\" + selectedActivity.id })\r\n if (drawing.value !== null) addDrawing(drawing.value)\r\n }\r\n\r\n useEffect(() => {\r\n window.addEventListener('storage', () => {\r\n async function getResults() {\r\n let results = JSON.parse((await Storage.get({ key: \"gamesResults_\" + selectedActivity.id })).value)\r\n if (results !== null) setGamesResults(results)\r\n else setGamesResults([])\r\n }\r\n\r\n getResults()\r\n getDrawings()\r\n })\r\n })\r\n\r\n useEffect(() => {\r\n getDrawings()\r\n }, [selectedActivity])\r\n\r\n\r\n function addDrawing(drawing: string) {\r\n let photos = [...uploadedPhotos]\r\n if (drawingIndex === -1) {\r\n setDrawingIndex(photos.length)\r\n photos.push(drawing)\r\n } else {\r\n photos.splice(drawingIndex, 1, drawing)\r\n }\r\n\r\n setUploadedPhotos(photos)\r\n }\r\n useEffect(() => {\r\n async function getResults() {\r\n let results = JSON.parse((await Storage.get({ key: \"gamesResults_\" + selectedActivity.id })).value)\r\n if (results !== null) setGamesResults(results)\r\n else setGamesResults([])\r\n }\r\n\r\n getResults()\r\n\r\n setUploadedPhotos([])\r\n }, [selectedActivity.id]);\r\n\r\n\r\n useEffect(() => {\r\n getGroupDetails && getGroupDetails(props.match.params.id)\r\n }, [getGroupDetails, props.match.params.id])\r\n\r\n useEffect(() => {\r\n username && getCurrentActivities && currentGroup && getCurrentActivities(username, currentGroup.id!)\r\n }, [getCurrentActivities, username, currentGroup])\r\n\r\n useEffect(() => {\r\n let opt = document.getElementById(renderingComponent + \"Option\");\r\n let ico = document.getElementById(renderingComponent + \"OptionIcon\")\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n });\r\n\r\n\r\n function deselectOption() {\r\n let opt = document.getElementById(renderingComponent + \"Option\");\r\n let ico = document.getElementById(renderingComponent + \"OptionIcon\")\r\n if (opt != null && ico !== null) {\r\n opt.style.color = \"black\";\r\n ico.style.color = \"grey\";\r\n opt.style.backgroundColor = \"transparent\";\r\n }\r\n }\r\n\r\n const { takePhoto } = usePhotoGallery()\r\n\r\n async function loadPhoto() {\r\n let media = await takePhoto()\r\n let photosListCpy = [...uploadedPhotos]\r\n if (!photosListCpy.includes(media)) {\r\n photosListCpy.push(media)\r\n setUploadedPhotos(photosListCpy)\r\n }\r\n\r\n }\r\n\r\n function sendAnswerHandle() {\r\n let photos: MediaProps[] = []\r\n uploadedPhotos.forEach(p => photos.push({ contentType: PICTURE_TYPE, content: p }))\r\n currentGroup && sendAnswer && sendAnswer({\r\n photos,\r\n gameResults: gamesResults,\r\n groupId: currentGroup.id,\r\n activityId: selectedActivity.id\r\n })\r\n }\r\n\r\n\r\n useEffect(() => {\r\n if (renderingComponent === 'earnedBadges') {\r\n getEarnedBadges && getEarnedBadges(token)\r\n }\r\n }, [renderingComponent]);\r\n\r\n return (<>\r\n <IonPage>\r\n <PupilMenuBar />\r\n <IonContent scrollY={false}>\r\n <IonContent id={\"renderingOptionsList\"} scrollY={false}>\r\n <IonTitle\r\n class={\"title\"}>{currentGroup?.name}\r\n </IonTitle>\r\n <IonItem class={\"renderingOption\"} onClick={() => {\r\n deselectOption();\r\n let opt = document.getElementById(\"currentActivitiesOption\");\r\n let ico = document.getElementById(\"currentActivitiesOptionIcon\");\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n setRenderingComponent(\"currentActivities\");\r\n }} id={\"currentActivitiesOption\"}>\r\n <IonLabel>\r\n Activități curente\r\n </IonLabel>\r\n <IonIcon icon={gameController} class={\"renderingOptionIcon\"}\r\n id={\"currentActivitiesOptionIcon\"} />\r\n </IonItem>\r\n\r\n <IonItem class={\"renderingOption\"} onClick={() => {\r\n deselectOption();\r\n let opt = document.getElementById(\"earnedBadgesOption\");\r\n let ico = document.getElementById(\"earnedBadgesOptionIcon\");\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n setRenderingComponent(\"earnedBadges\");\r\n }} id={\"earnedBadgesOption\"}>\r\n <IonLabel>\r\n Insigne primite\r\n </IonLabel>\r\n <IonIcon icon={medal} class={\"renderingOptionIcon\"} id={\"earnedBadgesOptionIcon\"} />\r\n </IonItem>\r\n </IonContent>\r\n\r\n {/*CURRENT ACTIVITIES*/}\r\n {renderingComponent === \"currentActivities\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <IonList>\r\n {/*{searchedUsers.length === 0 && <IonImg id={\"searchMemberTitle\"} src={squirrel}/>}*/}\r\n {currentActivities && currentActivities.map(act => {\r\n return (<IonCard class={\"currentActivity\"} key={act.id} onClick={() => {\r\n setRenderingComponent(\"selectedActivity\");\r\n setSelectedActivity(act)\r\n }}>\r\n <div>\r\n <IonCardTitle>{act.title}</IonCardTitle>\r\n <IonCardSubtitle>Atribuită în: {act.dueDate}</IonCardSubtitle>\r\n </div>\r\n </IonCard>)\r\n })}\r\n\r\n <IonLoading isOpen={fetchingActivities} message={\"Încărcăm lista de activități...\"} />\r\n\r\n </IonList>\r\n </IonContent>}\r\n\r\n {/*SELECTED ACTIVTY*/}\r\n {renderingComponent === \"selectedActivity\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <IonButton onClick={() => setRenderingComponent(\"currentActivities\")}\r\n id={\"btnBack\"}>Înapoi</IonButton>\r\n <IonItem lines={\"none\"}>\r\n <IonTitle class={\"title\"}>{selectedActivity.title}</IonTitle>\r\n </IonItem>\r\n {selectedActivity.dueDate && <IonItem className={\"activityItems\"} lines={\"none\"}>\r\n <IonCardSubtitle id={\"dateSubtitle\"}>{selectedActivity.dueDate}</IonCardSubtitle>\r\n </IonItem>}\r\n {selectedActivity.description && selectedActivity.description.trim() !== '' &&\r\n <IonItem className={\"activityItems\"}>\r\n <IonText>{selectedActivity.description}</IonText>\r\n </IonItem>}\r\n\r\n\r\n {selectedActivity.media && selectedActivity.media.length > 0 && <div\r\n className={\"activityItems\"}>{selectedActivity.media?.filter(m => m.contentType === VIDEO_TYPE).map(m => {\r\n return <video className={\"loadedVideo\"}\r\n key={m.content?.substr(100, 10)}\r\n width={200} height={200} controls>\r\n <source src={VIDEO_TYPE + m.content} type=\"video/mp4\" />\r\n </video>\r\n })}</div>}\r\n\r\n {selectedActivity.media && selectedActivity.media.length > 0 &&\r\n <div className={\"activityItems\"}><IonSlides options={{\r\n speed: 500,\r\n effect: \"cube\",\r\n paginationType: \"fraction\",\r\n loop: true\r\n\r\n }} pager={true}> {selectedActivity.media?.filter(m => m.contentType === PICTURE_TYPE).map(m =>\r\n <IonSlide>\r\n <IonImg src={PICTURE_TYPE + m.content}\r\n key={m.content?.substr(100, 10)} />\r\n </IonSlide>)}\r\n </IonSlides>\r\n </div>}\r\n\r\n {selectedActivity.links && selectedActivity.links.length > 0 &&\r\n <IonItem class={\"activityItems\"}>{selectedActivity.links.map(l =>\r\n <a href={l.link} rel=\"noreferrer\" target={\"_blank\"}>{l.description}</a>\r\n )}</IonItem>}\r\n {selectedActivity.games && selectedActivity.games.length > 0 &&\r\n <IonItem className={\"activityItems\"}>\r\n {selectedActivity.games.map(g => <div key={g.id} className={\"checkedGamesListItem\"}>\r\n <IonRouterLink className={\"gameModalListItemLabel\"}\r\n href={\"/games/\" + g.name!.toLowerCase() + \"/\" + selectedActivity.id}\r\n target={\"_blank\"}><IonAvatar>\r\n <img key={g.id}\r\n className={\"checkedGamesListItemAvatar\"}\r\n src={g.picture ? (PICTURE_TYPE + g.picture) : (pic)}\r\n alt={\"Fotografie joc\"} />\r\n </IonAvatar>\r\n <IonCardTitle>{g.name}</IonCardTitle>\r\n </IonRouterLink>\r\n </div>)}\r\n </IonItem>}\r\n\r\n <br /><br />\r\n\r\n <IonTitle class={\"title\"}>Răspunsuri</IonTitle>\r\n {gamesResults && gamesResults.length > 0 &&\r\n <div className={\"answerDiv\"}>\r\n <IonTitle class={\"gamePoints\"}><u>PUNCTAJE JOCURI</u> <IonIcon icon={podium} /></IonTitle>\r\n <br />\r\n {gamesResults.map(gr =>\r\n <div className={\"result\"}>\r\n <IonCardTitle>{gr.game}</IonCardTitle>\r\n <IonCardSubtitle>Rezultat: {gr.result}</IonCardSubtitle>\r\n </div>\r\n )}\r\n </div>}\r\n <IonItemDivider />\r\n <div className={\"answerDiv\"}>\r\n <IonTitle class={\"gamePoints\"}><u>Răspunsuri foto</u> <IonIcon icon={image} /></IonTitle>\r\n <IonItem class={\"activityItems addActivityComponentBtn\"} onClick={loadPhoto} lines={\"none\"}>\r\n <IonIcon icon={camera} class={\"addActivityComponentIcon\"} />\r\n <IonLabel>Atașează răspunsuri foto</IonLabel>\r\n </IonItem>\r\n <div id={\"mediaContent\"} className={\"newActivityLink\"}>\r\n {uploadedPhotos && uploadedPhotos.map(photo => <IonImg src={photo} class={\"loadedImage\"}\r\n key={photo.substr(100, 10)} />)}\r\n </div>\r\n </div>\r\n\r\n <IonItem class={\"activityItems\"} lines={\"none\"}>\r\n <IonButton slot={\"end\"} onClick={sendAnswerHandle} id={\"answerBtn\"}>Răspunde</IonButton>\r\n </IonItem>\r\n </IonContent>}\r\n\r\n\r\n {/*EARNED BADGES*/}\r\n {renderingComponent === \"earnedBadges\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <IonTitle size={\"large\"}><u>Insignele primite...</u></IonTitle>\r\n <IonList>\r\n {earnedBadges && earnedBadges.map(badge => {\r\n return (<div className={\"badgeDiv\"} key={badge.id}>\r\n {<IonImg src={PICTURE_TYPE + badge.content} id={badge.id!.toString()} class={\"badgeImg\"} />}\r\n </div>)\r\n })}\r\n\r\n <IonLoading isOpen={fetchingActivities} message={\"Încărcăm lista de activități...\"} />\r\n\r\n </IonList>\r\n </IonContent>}\r\n\r\n </IonContent>\r\n </IonPage>\r\n </>)\r\n}",["215","216"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintGameScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\Paint.tsx",["217"],"import { IonContent } from \"@ionic/react\";\r\nimport React, { useEffect } from \"react\";\r\nimport * as Phaser from 'phaser';\r\nimport \"./paint.game.css\"\r\nimport { PaintWelcomeScene } from \"./PaintWelcomeScene\"\r\nimport { PaintGameScene } from \"./PaintGameScene\"\r\nimport { PaintFinalScene } from \"./PaintFinalScene\"\r\nimport { RouteComponentProps } from \"react-router\";\r\n\r\nexport class PaintGame extends Phaser.Game {\r\n constructor(config: any) {\r\n super(config);\r\n }\r\n}\r\ninterface urlDetails {\r\n act: string;\r\n}\r\nexport const Paint: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n useEffect(() => {\r\n new PaintGame({\r\n title: \"Paint\",\r\n width: 900,\r\n height: 500,\r\n parent: \"paintGameParent\",\r\n scene: [PaintWelcomeScene, new PaintGameScene(props.match.params.act), PaintFinalScene],\r\n physics: {\r\n default: \"arcade\",\r\n arcade: {\r\n debug: false\r\n }\r\n },\r\n backgroundColor: \"transparent\"\r\n });\r\n }, [props.match.params.act])\r\n return (\r\n <IonContent id={\"pageContent\"}>\r\n <div id={'paintGameParent'} />\r\n </IonContent>\r\n )\r\n};\r\nexport default Paint;","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintFinalScene.tsx",["218"],"import \"phaser\";\r\nimport { Storage } from \"@capacitor/core\";\r\n\r\nexport class PaintFinalScene extends Phaser.Scene {\r\n score: number | undefined;\r\n\r\n constructor() {\r\n super({\r\n key: \"PaintFinalScene\"\r\n });\r\n }\r\n preload(): void {\r\n this.load.setBaseURL(\"http://192.168.0.186:5500/src/games/pages/paintGame/\")\r\n this.load.image(\"colours\", \"assets/final_image.png\")\r\n\r\n }\r\n init(params: any): void {\r\n\r\n }\r\n\r\n create(): void {\r\n this.cameras.main.setBackgroundColor(0xffffff)\r\n this.add.image(200, 250, \"colours\")\r\n\r\n let resultText: string = 'Felicitări!';\r\n this.add.text(300, 200, resultText,\r\n {\r\n font: '75px Arial Bold',\r\n color: '#103984', align: 'center'\r\n }\r\n );\r\n }\r\n};","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\reportWebVitals.ts",[],["219","220"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\provider\\GenericUserProvider.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\AuthHeader.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\SettingsComponent.tsx",["221"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesGameScene.tsx",["222"],"import \"phaser\";\r\nimport { GameObjects } from \"phaser\";\r\nimport Shapes from \"./Shapes\";\r\nexport class ShapesGameScene extends Phaser.Scene {\r\n points = 0;\r\n info: any;\r\n objects: string[];\r\n clickedShape?: { shape: GameObjects.Shape, key: string } | null\r\n clickedObject?: { object: GameObjects.Image, key: string } | null\r\n currentIndex: number\r\n renderingObjects: GameObjects.Image[]\r\n\r\n\r\n constructor() {\r\n super({\r\n key: \"ShapesGameScene\"\r\n });\r\n this.objects = []\r\n this.currentIndex = 3\r\n this.renderingObjects = []\r\n }\r\n init(params: any): void {\r\n this.points = 0;\r\n this.clickedShape = null\r\n this.clickedObject = null\r\n this.objects.push(\"ball\", \"present\", \"cheese\", \"choco\", \"clock\", \"earth\", \"envelope\", \"watermelon\")\r\n this.objects.sort(() => Math.random() - 0.5)\r\n // console.log(this.objects)\r\n }\r\n preload(): void {\r\n this.load.setBaseURL(\"http://192.168.0.186:5500/src/games/pages/shapesGame/\")\r\n this.load.image(\"ball\", \"assets/ball.png\");\r\n this.load.image(\"sky\", \"assets/sky.png\");\r\n this.load.image(\"present\", \"assets/present.png\");\r\n this.load.image(\"cheese\", \"assets/cheese.png\");\r\n this.load.image(\"choco\", \"assets/choco.png\");\r\n this.load.image(\"clock\", \"assets/clock.png\");\r\n this.load.image(\"earth\", \"assets/earth.png\");\r\n this.load.image(\"envelope\", \"assets/envelope.png\");\r\n this.load.image(\"watermelon\", \"assets/watermelon.png\");\r\n this.load.image(\"triangle\", \"assets/triangle.png\");\r\n this.load.image(\"square\", \"assets/square.png\");\r\n this.load.image(\"circle\", \"assets/circle.png\");\r\n }\r\n\r\n changeObject(): void {\r\n let x = 150\r\n if (this.clickedObject) {\r\n if (this.currentIndex < this.objects.length) {\r\n let idx = this.renderingObjects.indexOf(this.clickedObject.object)\r\n x += 300 * idx;\r\n\r\n let key = this.objects[this.currentIndex]\r\n let img = this.add.image(x, 400, key)\r\n img.setScale(0.3, 0.3)\r\n img.setInteractive({ useHandCursor: true })\r\n img.on(\"pointerdown\", () => {\r\n if (this.clickedObject) this.clickedObject.object.tint = 0xffffff\r\n img.tint = 0xcac9c9\r\n this.clickedObject = { object: img, key: key };\r\n this.checkMatch()\r\n })\r\n\r\n this.renderingObjects.splice(idx, 1, img)\r\n }\r\n\r\n this.clickedObject?.object.destroy()\r\n this.currentIndex += 1;\r\n\r\n console.log(this.currentIndex)\r\n }\r\n }\r\n\r\n checkMatch(): void {\r\n if (this.clickedObject && this.clickedShape) {\r\n let diff = 0;\r\n switch (this.clickedShape.key) {\r\n case \"circle\":\r\n if (this.clickedObject.key === \"earth\" || this.clickedObject.key === \"clock\" || this.clickedObject.key === \"ball\")\r\n diff = 1\r\n else diff = -1\r\n break;\r\n case \"square\":\r\n if (this.clickedObject.key === \"envelope\" || this.clickedObject.key === \"present\"\r\n || this.clickedObject.key === \"choco\") diff = 1\r\n else diff = -1\r\n break;\r\n case \"triangle\":\r\n if (this.clickedObject.key === \"watermelon\" || this.clickedObject.key === \"cheese\")\r\n diff = 1\r\n else diff = -1\r\n break;\r\n }\r\n\r\n setTimeout(() => {\r\n if (this.clickedObject && this.clickedShape) {\r\n // console.log(this.clickedObject.key + \" \" + this.clickedShape.key)\r\n this.clickedShape.shape.setStrokeStyle(1)\r\n this.clickedObject.object.tint = 0xffffff\r\n if (diff === 1) this.changeObject()\r\n if (this.points + diff >= 0) this.points += diff\r\n else this.points = 0\r\n this.clickedObject = null\r\n this.clickedShape = null\r\n }\r\n }, 200)\r\n }\r\n\r\n }\r\n\r\n create(): void {\r\n let sky = this.add.image(450, 300, 'sky')\r\n sky.setScale(1.5, 1.5)\r\n\r\n\r\n this.info = this.add.text(10, 10, '',\r\n { font: '30px Arial Bold', color: '#fefeeb' });\r\n\r\n let circle = this.add.circle(150, 150, 80, 0xfb7e7e, 1);\r\n circle.strokeColor = 0x000000\r\n circle.isStroked = true\r\n circle.setInteractive({ useHandCursor: true })\r\n circle.on(\"pointerdown\", () => {\r\n if (this.clickedShape) this.clickedShape.shape.setStrokeStyle(1)\r\n circle.setStrokeStyle(5)\r\n this.clickedShape = { shape: circle, key: 'circle' };\r\n this.checkMatch()\r\n })\r\n\r\n let square = this.add.rectangle(450, 150, 150, 150, 0xa6f7d5, 1);\r\n square.strokeColor = 0x000000\r\n square.isStroked = true\r\n square.setInteractive({ useHandCursor: true })\r\n square.on(\"pointerdown\", () => {\r\n if (this.clickedShape) this.clickedShape.shape.setStrokeStyle(1)\r\n square.setStrokeStyle(5)\r\n this.clickedShape = { shape: square, key: \"square\" };\r\n this.checkMatch()\r\n })\r\n\r\n let triangle = this.add.triangle(750, 150, 0, 120, 120, 120, 60, 0, 0xd7a1f7, 1);\r\n triangle.strokeColor = 0x000000\r\n triangle.isStroked = true\r\n triangle.setInteractive({ useHandCursor: true })\r\n triangle.on(\"pointerdown\", () => {\r\n if (this.clickedShape) this.clickedShape.shape.setStrokeStyle(1)\r\n triangle.setStrokeStyle(5)\r\n this.clickedShape = { shape: triangle, key: 'triangle' };\r\n this.checkMatch()\r\n })\r\n\r\n\r\n let ob1 = this.add.image(150, 400, this.objects[0])\r\n ob1.setScale(0.3, 0.3);\r\n ob1.setInteractive({ useHandCursor: true })\r\n ob1.on(\"pointerdown\", () => {\r\n if (this.clickedObject) this.clickedObject.object.tint = 0xffffff\r\n ob1.tint = 0xcac9c9\r\n this.clickedObject = { object: ob1, key: this.objects[0] };\r\n this.checkMatch()\r\n })\r\n\r\n let ob2 = this.add.image(450, 400, this.objects[1])\r\n ob2.setScale(0.3, 0.3);\r\n ob2.setInteractive({ useHandCursor: true })\r\n ob2.on(\"pointerdown\", () => {\r\n if (this.clickedObject) this.clickedObject.object.tint = 0xffffff\r\n ob2.tint = 0xcac9c9\r\n this.clickedObject = { object: ob2, key: this.objects[1] };\r\n this.checkMatch()\r\n })\r\n\r\n let ob3: GameObjects.Image = this.add.image(750, 400, this.objects[2])\r\n ob3.setScale(0.3, 0.3);\r\n ob3.setInteractive({ useHandCursor: true })\r\n ob3.on(\"pointerdown\", () => {\r\n if (this.clickedObject) this.clickedObject.object.tint = 0xffffff\r\n ob3.tint = 0xcac9c9\r\n this.clickedObject = { object: ob3, key: this.objects[2] };\r\n\r\n this.checkMatch()\r\n })\r\n\r\n this.renderingObjects.push(ob1, ob2, ob3)\r\n }\r\n update(): void {\r\n if (this.points >= 0) this.info!.text = this.points + \" puncte\"\r\n\r\n if (this.currentIndex === this.objects.length + 3) {\r\n this.scene.start(\"ShapesScoreScene\",\r\n { points: this.points });\r\n }\r\n }\r\n}","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\SettingsPopover.tsx",["223","224"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilsSettings.tsx",[],["225","226"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PEWelcomeScene.tsx",["227"],"import { infinite } from \"ionicons/icons\";\r\n\r\nexport class AnimationWelcomeScene extends Phaser.Scene {\r\n title: Phaser.GameObjects.Text | undefined;\r\n startButton: Phaser.GameObjects.Image | undefined;\r\n runner?: Phaser.GameObjects.Sprite;\r\n runAndJump?: Phaser.GameObjects.Sprite;\r\n biker?: Phaser.GameObjects.Sprite;\r\n constructor() {\r\n super({\r\n key: \"WelcomeScene\"\r\n });\r\n }\r\n preload(): void {\r\n this.load.setBaseURL(\"http://192.168.0.186:5500/src/games/pages/PEGame/\")\r\n // this.load.image('startButton', 'assets/play_btn.png');\r\n // this.load.image('background', 'assets/wellcome_background.png')\r\n // this.load.spritesheet('nice', 'assets/girl.jpg', { frameWidth: 260, frameHeight: 325, spacing: 10 });\r\n this.load.spritesheet('running_boy', 'assets/running_boy.jpg', { frameWidth: 130, frameHeight: 210, spacing: 10 });\r\n this.load.spritesheet('run_jump', 'assets/run_jump.png', { frameWidth: 117, frameHeight: 330, spacing: 10 });\r\n this.load.spritesheet('bike', 'assets/bike.jpg', { frameWidth: 125, frameHeight: 125, spacing: 10 });\r\n\r\n }\r\n create(): void {\r\n // this.add.image(450, 250, 'background');\r\n\r\n // const titleText: string = \"Forme\\ngeometrice\";\r\n // this.title = this.add.text(300, 90, titleText,\r\n // { font: '70px Arial Bold', color: '#0b305b', align: 'center' });\r\n\r\n // this.startButton = this.add.image(470, 300, 'startButton').setInteractive({ useHandCursor: true });\r\n // this.startButton.scaleX = 0.15;\r\n // this.startButton.scaleY = 0.15;\r\n // this.startButton.on('pointerdown', () => {\r\n // this.scene.start(\"AnimationGameScene\");\r\n // }, this);\r\n // }\r\n\r\n\r\n this.runner = this.add.sprite(200, 200, \"running_boy\");\r\n this.runAndJump = this.add.sprite(400, 200, \"run_jump\")\r\n this.biker = this.add.sprite(600, 200, \"bike\")\r\n\r\n this.anims.create({\r\n key: \"run\",\r\n frameRate: 7,\r\n frames: this.anims.generateFrameNames(\"running_boy\", { start: 0, end: 8 }),\r\n repeat: -1\r\n });\r\n\r\n this.anims.create({\r\n key: \"runAndJump\",\r\n frameRate: 7,\r\n frames: this.anims.generateFrameNames(\"run_jump\", { start: 0, end: 13 }),\r\n repeat: -1\r\n });\r\n\r\n this.anims.create({\r\n key: \"ride\",\r\n frameRate: 7,\r\n frames: this.anims.generateFrameNames(\"bike\", { start: 0, end: 4 }),\r\n repeat: -1\r\n });\r\n\r\n this.runAndJump.play(\"runAndJump\")\r\n this.runner.play(\"run\");\r\n this.biker.play(\"ride\");\r\n\r\n this.time.addEvent({\r\n delay: 1000,\r\n callback: () => {\r\n this.runner?.play(\"run\");\r\n this.runAndJump?.play(\"runAndJump\")\r\n this.biker?.play(\"ride\");\r\n }\r\n });\r\n }\r\n}","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\Starfall.tsx",["228","229","230","231","232","233","234","235","236"],"import { IonContent, IonIcon, IonItem, IonPage, IonText, IonTitle } from \"@ionic/react\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { Footer } from \"../../../genericUser/components/Footer\";\r\nimport { TeacherMenuBar } from \"../../../teachers/pages/TeacherMenuBar\";\r\nimport * as Phaser from 'phaser';\r\nimport { GameScene } from \"./GameScene\";\r\nimport { WelcomeScene } from \"./WelcomeScene\";\r\nimport { ScoreScene } from \"./ScoreScene\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport \"./starfall.page.css\"\r\n\r\nexport class StarfallGame extends Phaser.Game {\r\n constructor(config: any) {\r\n super(config);\r\n }\r\n}\r\ninterface urlDetails {\r\n act: string;\r\n}\r\nexport const Starfall: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n useEffect(() => {\r\n new StarfallGame({\r\n title: \"Starfall\",\r\n width: 800,\r\n height: 650,\r\n parent: \"starfallGameParent\",\r\n scene: [WelcomeScene, GameScene, new ScoreScene(props.match.params.act)],\r\n physics: {\r\n default: \"arcade\",\r\n arcade: {\r\n debug: false\r\n }\r\n },\r\n backgroundColor: \"#18216D\"\r\n });\r\n\r\n }, [props.match.params.act])\r\n\r\n\r\n return (\r\n <IonPage>\r\n {/* <TeacherMenuBar /> */}\r\n <IonContent id=\"pageContent\">\r\n <div id={'starfallGameParent'} />\r\n {/* <IonContent scrollY={false} id={\"descriptionContent\"}>\r\n <IonTitle size={\"large\"}>Stelute</IonTitle>\r\n </IonContent> */}\r\n {/* <Footer /> */}\r\n </IonContent>\r\n </IonPage>\r\n )\r\n};\r\nexport default Starfall;","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\StoryGameScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\StoryFinalScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\storyGame\\Story.tsx",["237"],"import { IonContent } from \"@ionic/react\";\r\nimport React, { useEffect } from \"react\";\r\nimport * as Phaser from 'phaser';\r\nimport \"./story.game.css\"\r\nimport { StoryWelcomeScene } from \"./StoryWelcomeScene\"\r\nimport { StoryGameScene } from \"./StoryGameScene\"\r\nimport { StoryFinalScene } from \"./StoryFinalScene\"\r\nimport { RouteComponentProps } from \"react-router\";\r\n\r\nexport class StoryGame extends Phaser.Game {\r\n constructor(config: any) {\r\n super(config);\r\n }\r\n}\r\ninterface urlDetails {\r\n act: string;\r\n}\r\nexport const Story: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n useEffect(() => {\r\n new StoryGame({\r\n title: \"Story\",\r\n width: 900,\r\n height: 500,\r\n parent: \"storyGameParent\",\r\n scene: [StoryWelcomeScene, StoryGameScene, new StoryFinalScene(props.match.params.act)],\r\n physics: {\r\n default: \"arcade\",\r\n arcade: {\r\n debug: false\r\n }\r\n },\r\n backgroundColor: \"transparent\"\r\n });\r\n }, [props.match.params.act])\r\n return (\r\n <IonContent id={\"pageContent\"}>\r\n <div id={'storyGameParent'} />\r\n </IonContent>\r\n )\r\n};\r\nexport default Story;","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\ScoreScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesScoreScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\teachers\\pages\\TeacherSpecificGroup.tsx",["238","239","240","241","242","243","244","245","246","247","248","249","250","251","252"],"import React, { FormEvent, useContext, useEffect, useReducer, useState } from \"react\";\r\nimport {\r\n IonContent,\r\n IonIcon,\r\n IonItem,\r\n IonLabel,\r\n IonList,\r\n IonPage,\r\n IonTitle,\r\n IonSearchbar,\r\n IonCardSubtitle,\r\n IonAlert,\r\n IonInfiniteScroll,\r\n IonInfiniteScrollContent,\r\n IonAvatar,\r\n IonToast,\r\n IonDatetime,\r\n IonImg,\r\n IonTextarea,\r\n IonButton,\r\n IonInput,\r\n IonRouterLink,\r\n IonModal,\r\n IonCheckbox,\r\n IonCardTitle,\r\n IonCard,\r\n IonCardContent,\r\n IonCardHeader,\r\n IonRadioGroup,\r\n IonItemGroup,\r\n IonSelect,\r\n IonSelectOption,\r\n IonLoading,\r\n IonText,\r\n IonSlide, IonSlides, IonFabButton, IonGrid, IonRow, IonHeader, IonCol, IonItemDivider, IonRadio,\r\n} from \"@ionic/react\";\r\nimport { TeacherMenuBar } from \"./TeacherMenuBar\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport {\r\n appsOutline, arrowBack, body, camera, chatbox,\r\n checkmark,\r\n checkmarkDone, checkmarkSharp, colorPalette, gameController, globe, medal,\r\n people, personAdd, personRemove, telescope, thumbsUp, trash, videocam\r\n} from \"ionicons/icons\";\r\nimport pic from \"../../assets/img/profile.png\"\r\nimport { GroupContext } from \"../../groups/provider/GroupsProvider\";\r\nimport { UserContext } from \"../../genericUser/provider/GenericUserProvider\";\r\nimport { PICTURE_TYPE, VIDEO_TYPE } from \"../../genericUser/utils/constants\";\r\nimport squirrel from \"../pages/design/images/squirrel.png\"\r\nimport { usePhotoGallery } from \"../../genericUser/utils/usePhotosGallery\";\r\nimport { GameProps, GamesContext } from \"../../games/provider/GamesProvider\";\r\nimport \"../pages/design/teacher.specific.group.css\"\r\n\r\nimport {\r\n ActivitiesContext,\r\n ActivityProps, AnswerProps,\r\n LinkProps,\r\n MediaProps\r\n} from \"../../activities/provider/ActivitiesProvider\";\r\nimport { IonBackButtonInner } from \"@ionic/react/dist/types/components/inner-proxies\";\r\nimport Shapes from \"../../games/pages/shapesGame/Shapes\";\r\n\r\n\r\ninterface urlDetails {\r\n id: string;\r\n}\r\n\r\nconst PAGE_SIZE = 7;\r\n\r\n\r\nexport const TeacherSpecificGroup: React.FC<RouteComponentProps<urlDetails>> = (props) => {\r\n const {\r\n searchUsersError,\r\n searchedUsers,\r\n searchUsers,\r\n addMemberToGroup,\r\n deleteMemberFromGroup,\r\n fetchGroupMembers,\r\n username\r\n } = useContext(UserContext)\r\n const { getGroupDetails, getGroupDetailsError, currentGroup } = useContext(GroupContext);\r\n const {\r\n addActivity,\r\n getAnswers,\r\n fetchingActivities,\r\n answers,\r\n getActivitiesAssignedFromThisGroup,\r\n groupActivities,\r\n badges,\r\n getAllBadges,\r\n gettingBadges,\r\n getBadgesError,\r\n awardBadge,\r\n awardBadgeError,\r\n awardingBadge\r\n } = useContext(ActivitiesContext)\r\n\r\n\r\n\r\n const [currentPage, setCurrentPage] = useState(0)\r\n const [renderingComponent, setRenderingComponent] = useState('members')\r\n const [openDeleteMember, setDeleteMember] = useState(false)\r\n const [openAddMember, setAddMember] = useState(false)\r\n const [disableInfiniteScroll, setDisableInfiniteScroll] = useState(false)\r\n const [generalSearchCriteria, setGeneralSearchCriteria] = useState('')\r\n const [clickedMember, setClickedMember] = useState('')\r\n const [activityDescription, setActivityDescription] = useState('')\r\n const [checkedMembers, setCheckedMembers] = useState<string[]>([])\r\n const [uploadedVideos, setUploadedVideos] = useState<string[]>([])\r\n const [uploadedPhotos, setUploadedPhotos] = useState<string[]>([])\r\n const [expiryDate, setExpiryDate] = useState((new Date()).toLocaleString('ro', {\r\n year: \"numeric\", month: \"long\",\r\n day: \"numeric\"\r\n }))\r\n const [linksList, setLinksList] = useState<LinkProps[]>([])\r\n const [checkedGames, setCheckedGames] = useState<GameProps[]>([])\r\n const [openMembersToAssignModal, setOpenMembersToAssignModal] = useState(false)\r\n const [groupMembersSearchCriteria, setGroupMembersSearchCriteria] = useState('')\r\n const [openLinkModal, setOpenLinkModal] = useState(false)\r\n const [linkToAdd, setLinkToAdd] = useState('')\r\n const [linkToAddDescription, setLinkToAddDescription] = useState('')\r\n const [openGamesModal, setOpenGamesModal] = useState(false)\r\n const [checkedFields, setCheckedFields] = useState<string[]>([])\r\n const { games, getAllGames } = useContext(GamesContext)\r\n const [field, setField] = useState('')\r\n const [title, setTitle] = useState('')\r\n const [selectedActivity, setSelectedActivity] = useState<ActivityProps>({})\r\n const [selectedAnswer, setSelectedAnswer] = useState<AnswerProps>({})\r\n const [selectedBadge, setSelectedBadge] = useState('')\r\n const [openSelectedGameModal, setOpenSelectedGameModal] = useState(false)\r\n\r\n\r\n function checkGame(game: GameProps, checked: boolean) {\r\n let checkedGamesCpy = [...checkedGames]\r\n if (checked && !checkedGames.includes(checkedGames.find(g => g.id === game.id)!))\r\n checkedGamesCpy.push(game)\r\n else if (!checked) checkedGamesCpy.splice(checkedGamesCpy.indexOf(game), 1)\r\n setCheckedGames(checkedGamesCpy)\r\n }\r\n\r\n function checkField(field: string, checked: boolean) {\r\n let checkedFieldsCpy = [...checkedFields]\r\n if (checked && !checkedFields.includes(checkedFields.find(f => f === field)!))\r\n checkedFieldsCpy.push(field)\r\n else if (!checked) checkedFieldsCpy.splice(checkedFieldsCpy.indexOf(field), 1)\r\n setCheckedFields(checkedFieldsCpy)\r\n }\r\n\r\n function fetchAllGames() {\r\n getAllGames && getAllGames()\r\n }\r\n\r\n async function searchNextPage(event?: CustomEvent<void>) {\r\n searchUsers && searchUsers(generalSearchCriteria, currentGroup?.id, currentPage, PAGE_SIZE)\r\n setCurrentPage(currentPage + 1)\r\n event && await (event.target as HTMLIonInfiniteScrollElement).complete();\r\n }\r\n\r\n\r\n useEffect(() => {\r\n getGroupDetails && getGroupDetails(props.match.params.id)\r\n }, [getGroupDetails, props.match.params.id])\r\n\r\n useEffect(() => {\r\n setCurrentPage(0)\r\n setDisableInfiniteScroll(false)\r\n }, [generalSearchCriteria])\r\n\r\n useEffect(() => {\r\n searchUsers && searchUsers(generalSearchCriteria)\r\n }, [renderingComponent])\r\n\r\n useEffect(() => {\r\n let opt = document.getElementById(renderingComponent + \"Option\");\r\n let ico = document.getElementById(renderingComponent + \"OptionIcon\")\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n });\r\n\r\n\r\n function deselectOption() {\r\n let opt = document.getElementById(renderingComponent + \"Option\");\r\n let ico = document.getElementById(renderingComponent + \"OptionIcon\")\r\n if (opt != null && ico !== null) {\r\n opt.style.color = \"black\";\r\n ico.style.color = \"grey\";\r\n opt.style.backgroundColor = \"transparent\";\r\n }\r\n }\r\n\r\n\r\n function deleteMember() {\r\n currentGroup && deleteMemberFromGroup && deleteMemberFromGroup(clickedMember, currentGroup.id!)\r\n }\r\n\r\n function addMember() {\r\n currentGroup && addMemberToGroup && addMemberToGroup(clickedMember, currentGroup.id!)\r\n }\r\n\r\n function getGroupMembers() {\r\n currentGroup && fetchGroupMembers && fetchGroupMembers(currentGroup.id!)\r\n }\r\n\r\n function checkMember(checkedMember: string, checked: boolean) {\r\n let checkedMembersCpy = [...checkedMembers]\r\n if (checked && !checkedMembers.includes(checkedMembers.find(m => m === checkedMember)!))\r\n checkedMembersCpy.push(checkedMember)\r\n else if (!checked) checkedMembersCpy.splice(checkedMembersCpy.indexOf(checkedMember), 1)\r\n setCheckedMembers(checkedMembersCpy)\r\n }\r\n\r\n function newActivity() {\r\n let media: MediaProps[] = []\r\n uploadedVideos.forEach(v => media.push({ content: v, contentType: VIDEO_TYPE }))\r\n uploadedPhotos.forEach(p => media.push({ content: p, contentType: PICTURE_TYPE }))\r\n const activity: ActivityProps = {\r\n title: title,\r\n field: field,\r\n description: activityDescription,\r\n dueDate: expiryDate,\r\n games: checkedGames,\r\n links: linksList,\r\n media: media,\r\n groupId: currentGroup?.id,\r\n assignedBy: username\r\n }\r\n addActivity && addActivity(activity, checkedMembers)\r\n }\r\n\r\n const { takePhoto, toBase64 } = usePhotoGallery()\r\n\r\n async function loadPhoto() {\r\n let media = await takePhoto()\r\n let photosListCpy = [...uploadedPhotos]\r\n if (!photosListCpy.includes(media)) {\r\n photosListCpy.push(media)\r\n setUploadedPhotos(photosListCpy)\r\n }\r\n\r\n }\r\n\r\n\r\n async function loadVideo(e: any) {\r\n let media = e.target.files[0]\r\n let videosListCpy = [...uploadedVideos]\r\n let base64 = await toBase64(media);\r\n if (!videosListCpy.includes(base64)) {\r\n videosListCpy.push(base64)\r\n setUploadedVideos(videosListCpy)\r\n }\r\n }\r\n\r\n function removeLinkFromList(linkToRemove: string) {\r\n let idx = linksList.findIndex(link => link.link === linkToRemove)\r\n let arrCopy = [...linksList];\r\n arrCopy.splice(idx, 1)\r\n setLinksList(arrCopy)\r\n }\r\n\r\n useEffect(() => {\r\n function fetchAnswers() {\r\n getAnswers && getAnswers(selectedActivity.id)\r\n }\r\n\r\n if (renderingComponent === \"activityAnswers\")\r\n fetchAnswers && fetchAnswers()\r\n\r\n }, [getAnswers, renderingComponent, selectedActivity.id]);\r\n\r\n\r\n useEffect(() => {\r\n if (renderingComponent === 'returnedAssigns')\r\n getActivitiesAssignedFromThisGroup && getActivitiesAssignedFromThisGroup(currentGroup?.id!)\r\n }, [currentGroup?.id, getActivitiesAssignedFromThisGroup, renderingComponent]);\r\n\r\n\r\n useEffect(() => {\r\n if (renderingComponent === 'badges') {\r\n getAllBadges && getAllBadges()\r\n }\r\n }, [renderingComponent]);\r\n\r\n function deselectPic() {\r\n const el = document.getElementById(selectedBadge);\r\n if (el !== null) el.style.border = \"dotted transparent\";\r\n }\r\n\r\n function rewardBadge(userId: string) {\r\n awardBadge && awardBadge(userId, selectedBadge)\r\n }\r\n\r\n return (<>\r\n <IonPage>\r\n <TeacherMenuBar />\r\n <IonContent scrollY={false}>\r\n <IonContent id={\"renderingOptionsList\"} scrollY={false}>\r\n <IonTitle\r\n class={\"title\"}>{currentGroup?.name}\r\n </IonTitle>\r\n <IonItem class={\"renderingOption\"} id={\"membersOption\"} onClick={() => {\r\n deselectOption();\r\n let opt = document.getElementById(\"membersOption\");\r\n let ico = document.getElementById(\"membersOptionIcon\");\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n setRenderingComponent(\"members\");\r\n setGeneralSearchCriteria('')\r\n }}>\r\n <IonLabel>Membri</IonLabel>\r\n <IonIcon icon={people} class={\"renderingOptionIcon\"} id={\"membersOptionIcon\"} />\r\n </IonItem>\r\n <IonItem class={\"renderingOption\"} onClick={() => {\r\n deselectOption();\r\n let opt = document.getElementById(\"assignActivityOption\");\r\n let ico = document.getElementById(\"assignActivityOptionIcon\");\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n setRenderingComponent(\"assignActivity\");\r\n setGeneralSearchCriteria('')\r\n }} id={\"assignActivityOption\"}>\r\n <IonLabel>\r\n Asociați activități\r\n </IonLabel>\r\n <IonIcon icon={appsOutline} class={\"renderingOptionIcon\"} id={\"assignActivityOptionIcon\"} />\r\n </IonItem>\r\n <IonItem class={\"renderingOption\"} onClick={() => {\r\n deselectOption();\r\n let opt = document.getElementById(\"returnedAssignsOption\");\r\n let ico = document.getElementById(\"returnedAssignsOptionIcon\");\r\n if (opt !== null && ico !== null) {\r\n opt.style.color = \"#6d4e04\";\r\n opt.style.backgroundColor = \"#f3e9d7\";\r\n ico.style.color = \"#d69c09\";\r\n }\r\n setRenderingComponent(\"returnedAssigns\");\r\n setGeneralSearchCriteria('')\r\n }} id={\"returnedAssignsOption\"}>\r\n <IonLabel>\r\n Răspunsuri primite\r\n </IonLabel>\r\n <IonIcon icon={checkmarkDone} class={\"renderingOptionIcon\"} id={\"returnedAssignsOptionIcon\"} />\r\n </IonItem>\r\n </IonContent>\r\n\r\n {/*SEARCH MEMBERS*/}\r\n {renderingComponent === \"members\" &&\r\n <IonContent class={\"renderedComponent\"} scrollY={false}>\r\n <IonSearchbar placeholder={\"Căutați membrii\"}\r\n id={\"searchbar\"}\r\n value={generalSearchCriteria}\r\n debounce={200}\r\n onIonInput={(e: any) => {\r\n setGeneralSearchCriteria(e.target.value)\r\n }}\r\n onIonChange={() => {\r\n searchNextPage();\r\n }}\r\n />\r\n <IonContent>\r\n <IonList>\r\n {searchedUsers.length === 0 && <IonImg id={\"searchMemberTitle\"} src={squirrel} />}\r\n {searchedUsers && searchedUsers.map(user => {\r\n return (<IonItem class={\"searchedMember\"} lines={\"none\"} key={user.id}>\r\n <IonAvatar class={\"memberProfile\"} slot={\"end\"}>\r\n <img src={user.img ? (PICTURE_TYPE + user.img) : (pic)}\r\n alt={\"Fotografie profil\"} />\r\n </IonAvatar>\r\n <div>\r\n <IonLabel>{user.firstName} {user.lastName}</IonLabel>\r\n <IonCardSubtitle>{user.username}</IonCardSubtitle>\r\n </div>\r\n {user.inGroup === false &&\r\n <IonIcon icon={personAdd} slot={\"start\"} class={\"memberIconAdd\"}\r\n title={\"Adaugați membru\"}\r\n onClick={() => {\r\n setAddMember(true);\r\n setClickedMember(user.id!)\r\n }} />}\r\n {user.inGroup === true &&\r\n <IonIcon icon={personRemove} slot={\"start\"} class={\"memberIconDelete\"}\r\n title={\"Adaugați membru\"} onClick={() => {\r\n setDeleteMember(true);\r\n setClickedMember(user.id!)\r\n }} />}\r\n </IonItem>)\r\n })}\r\n\r\n </IonList>\r\n <IonInfiniteScroll\r\n threshold=\"30px\"\r\n disabled={disableInfiniteScroll}\r\n onIonInfinite={(e) => {\r\n searchNextPage(e);\r\n }}>\r\n <IonInfiniteScrollContent\r\n loadingSpinner={\"bubbles\"}\r\n loadingText=\"Se încarcă mai mulți membri...\">\r\n </IonInfiniteScrollContent>\r\n </IonInfiniteScroll>\r\n </IonContent>\r\n </IonContent>}\r\n\r\n\r\n {/*ASSIGN ACTIVITY*/}\r\n {renderingComponent === \"assignActivity\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n {/*ASSIGNMENT TITLE*/}\r\n <IonItem class={\"newActivityItems\"}>\r\n <IonInput placeholder={\"Titlul temei\"} value={title}\r\n onIonChange={(e) => setTitle(e.detail.value!)} />\r\n </IonItem>\r\n {/*FIELD*/}\r\n <IonItem class={\"newActivityItems\"}>\r\n <IonSelect interface={\"popover\"} value={field} onIonChange={(e) => setField(e.detail.value!)}\r\n placeholder={\"Domeniul activității\"}>\r\n <IonSelectOption>Științe</IonSelectOption>\r\n <IonSelectOption>Om și societate</IonSelectOption>\r\n <IonSelectOption>Estetic și creativ</IonSelectOption>\r\n <IonSelectOption>Psihomotric</IonSelectOption>\r\n <IonSelectOption>Limbă și comunicare</IonSelectOption>\r\n </IonSelect>\r\n </IonItem>\r\n {/*CHOOSE DATE*/}\r\n {/*<ExpirationDate/>*/}\r\n <IonItem class={\"newActivityItems\"}>\r\n <IonLabel>Data expirării</IonLabel>\r\n <IonDatetime displayFormat={\"DD MMMM YYYY\"} id={\"datePicker\"}\r\n displayTimezone={\"Europe/Helsinki\"}\r\n monthNames={\"ianuarie, februarie, martie, aprilie, mai, iunie, iulie, august, septembrie, octombrie, noiembrie, decembrie\"}\r\n placeholder={(new Date()).toLocaleString('ro', {\r\n year: \"numeric\", month: \"long\",\r\n day: \"numeric\"\r\n })}\r\n cancelText={\"Închide\"}\r\n doneText={\"Alege\"}\r\n pickerOptions={{\r\n cssClass: \"datePicker\",\r\n showBackdrop: true,\r\n animated: true,\r\n backdropDismiss: true,\r\n }}\r\n value={expiryDate}\r\n\r\n onIonChange={(e) => {\r\n setExpiryDate(e.detail.value!)\r\n }} />\r\n </IonItem>\r\n\r\n {/*ACTIVITY DESCRIPTION*/}\r\n <IonItem class={\"newActivityItems\"}>\r\n <IonTextarea placeholder={\"Descrierea activității\"} id={\"descriptionText\"}\r\n rows={8}\r\n value={activityDescription}\r\n onIonChange={(e) => setActivityDescription(e.detail.value!)}\r\n key={\"activityField\"} />\r\n </IonItem>\r\n\r\n\r\n {/*ATTACH PHOTOS*/}\r\n {/*<AttachPhotos/>*/}\r\n <IonItem class={\"newActivityItems addActivityComponentBtn\"} onClick={loadPhoto}>\r\n <IonIcon icon={camera} class={\"addActivityComponentIcon\"} />\r\n <IonLabel>Atașează fotografii</IonLabel>\r\n </IonItem>\r\n <div id={\"mediaContent\"} className={\"newActivityLink\"}>\r\n {uploadedPhotos && uploadedPhotos.map(photo => <IonImg src={photo} class={\"loadedImage\"}\r\n key={photo.substr(100, 10)} />)}\r\n </div>\r\n\r\n\r\n {/*ATTACH VIDEOS*/}\r\n {/*<AttachVideos/>*/}\r\n <IonItem class={\"newActivityItems addActivityComponentBtn\"}>\r\n <IonIcon icon={videocam} class={\"addActivityComponentIcon\"} />\r\n <label>\r\n <input type={\"file\"} accept={\"video/mp4\"} onChange={(e) => loadVideo(e)} />\r\n Atașează filmulețe</label>\r\n </IonItem>\r\n <div id={\"mediaContent\"} className={\"newActivityLink\"}>\r\n {uploadedVideos && uploadedVideos.map(video => <video className={\"loadedVideo\"}\r\n key={video.substr(100, 10)}\r\n width={200} height={200} controls>\r\n <source src={video} type=\"video/mp4\" />\r\n </video>)}\r\n </div>\r\n\r\n\r\n {/*ATTACH GAMES*/}\r\n <IonItem class={\"newActivityItems addActivityComponentBtn\"} onClick={() => {\r\n setOpenGamesModal(true)\r\n fetchAllGames()\r\n }}>\r\n <IonIcon icon={gameController} class={\"addActivityComponentIcon\"} />\r\n <IonLabel>Atașează jocuri</IonLabel>\r\n </IonItem>\r\n <div className={\"newActivityLink\"}>\r\n {!openGamesModal && checkedGames && checkedGames.map(game =>\r\n <div key={game.id} className={\"checkedGamesListItem\"}>\r\n <IonAvatar><img className={\"checkedGamesListItemAvatar\"}\r\n src={game.picture ? (PICTURE_TYPE + game.picture) : (pic)}\r\n alt={\"Fotografie joc\"} /></IonAvatar>\r\n <IonCardTitle>{game.name}</IonCardTitle>\r\n </div>)}\r\n </div>\r\n <IonModal isOpen={openGamesModal} onDidDismiss={() => setOpenGamesModal(false)} cssClass={\"modal\"}>\r\n <div>\r\n <IonFabButton id={\"gamesOkBtn\"} color=\"warning\" onClick={() => setOpenGamesModal(false)}>\r\n <IonIcon icon={checkmarkSharp} />\r\n </IonFabButton>\r\n <br />\r\n <IonLabel class={\"fieldLabel\"}>\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkField(\"Științe\", e.detail.checked);\r\n }} /> Științe <IonIcon icon={telescope} />\r\n </IonLabel>\r\n <IonLabel class={\"fieldLabel\"}>\r\n\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkField(\"Limbă și comunicare\", e.detail.checked);\r\n }} /> Limbă și comunicare <IonIcon icon={chatbox} />\r\n </IonLabel>\r\n {/* <IonLabel class={\"fieldLabel\"}>\r\n\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkField(\"Activități psihomotrice\", e.detail.checked);\r\n }} /> Activități psihomotrice <IonIcon icon={body} />\r\n </IonLabel> */}\r\n <IonLabel class={\"fieldLabel\"}>\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkField(\"Om și societate\", e.detail.checked);\r\n }} /> Om și societate <IonIcon icon={people} />\r\n </IonLabel>\r\n <IonLabel class={\"fieldLabel\"}>\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkField(\"Estetic și creativ\", e.detail.checked);\r\n }} /> Estetic și creativ <IonIcon icon={colorPalette} />\r\n </IonLabel>\r\n\r\n </div>\r\n <IonContent class={\"modalContent\"}>\r\n <IonList class={\"modalContent\"}>\r\n {games && games\r\n .filter(game => {\r\n if (checkedFields.length === 0) return true;\r\n for (const field of checkedFields) {\r\n if (game.field?.toLowerCase().includes(field.toLowerCase())) return true;\r\n }\r\n return false;\r\n })\r\n .map(game => {\r\n return (\r\n <IonCard class={\"modalListItem gameModalListItem\"} key={game.id}>\r\n <IonCardContent>\r\n <IonCardHeader class={\"gameCardHeader\"}>\r\n Domeniu: {game.field?.toUpperCase()}\r\n </IonCardHeader>\r\n <IonAvatar class={\"gameModalListItemAvatar\"}>\r\n <img src={game.picture ? (PICTURE_TYPE + game.picture) : (pic)}\r\n alt={\"Fotografie joc\"} />\r\n </IonAvatar>\r\n\r\n <div className={\"gameTitleAndDescription\"}>\r\n <IonCardTitle class={\"gameModalListItemTitle\"}>\r\n {game.name}\r\n </IonCardTitle><br />\r\n <IonCardSubtitle class={\"gameModalListItemDescription\"}>\r\n {game.shortDescription}\r\n </IonCardSubtitle>\r\n </div>\r\n <div className={\"gameCheckBoxDiv\"}>\r\n <IonRouterLink onClick={() => setOpenSelectedGameModal(true)} className={\"gameModalListItemLabel\"}\r\n href={\"/games/\" + game.name!.toLowerCase()}\r\n target={\"_blank\"}>Probează\r\n <IonIcon icon={gameController} /></IonRouterLink>\r\n <br />\r\n <IonLabel>\r\n Selectează\r\n </IonLabel>\r\n <IonCheckbox class={\"gameCheckbox\"} color={\"warning\"}\r\n onIonChange={(e) => {\r\n checkGame(game, e.detail.checked);\r\n }} />\r\n </div>\r\n </IonCardContent>\r\n </IonCard>\r\n )\r\n }\r\n )}\r\n </IonList>\r\n </IonContent>\r\n </IonModal>\r\n\r\n {/*ATTACH LINKS*/}\r\n <IonItem class={\"newActivityItems addActivityComponentBtn\"} lines={\"none\"} onClick={() => {\r\n setOpenLinkModal(true)\r\n }}>\r\n <IonIcon icon={globe} class={\"addActivityComponentIcon\"} />\r\n <IonLabel>Adaugă un link spre o activitate</IonLabel>\r\n </IonItem>\r\n {linksList &&\r\n <IonList class={\"newActivityLink\"}>\r\n {linksList.map(l =>\r\n <div className={\"activityLinks\"}>\r\n <span title={\"Șterge\"} className={\"trashIcon\"}>\r\n <IonIcon icon={trash} onClick={() => removeLinkFromList(l.link)} />\r\n </span>\r\n <a key={l.link}\r\n href={l.link} rel={\"noreferrer\"} target={\"_blank\"}>\r\n {l.description}</a>\r\n </div>)}\r\n </IonList>}\r\n <IonModal isOpen={openLinkModal} onDidDismiss={() => {\r\n setOpenLinkModal(false)\r\n setLinkToAdd('')\r\n setLinkToAddDescription('')\r\n }} cssClass={\"modal\"} id={\"linkModal\"}>\r\n <IonInput placeholder={\"O descriere a conținutului din link...\"} value={linkToAddDescription}\r\n onIonChange={e => setLinkToAddDescription(e.detail.value!)} class={\"linkModalInput\"} />\r\n <IonInput placeholder={\"Link-ul dumneavoastră\"} value={linkToAdd}\r\n onIonChange={e => setLinkToAdd(e.detail.value!)} class={\"linkModalInput\"} />\r\n <IonButton onClick={() => {\r\n linksList.push({ link: linkToAdd, description: linkToAddDescription });\r\n setOpenLinkModal(false)\r\n }} id={\"linkModalButton\"}>Adauga</IonButton>\r\n </IonModal>\r\n\r\n\r\n {/*SEND TO*/}\r\n <IonItem lines={\"none\"} class={\"newActivityItems\"}>\r\n <IonButton id={\"btnSendActivity\"} slot={\"end\"}\r\n onClick={() => {\r\n setOpenMembersToAssignModal(true)\r\n getGroupMembers();\r\n }}>\r\n Trimite către...\r\n </IonButton>\r\n </IonItem>\r\n\r\n <IonModal isOpen={openMembersToAssignModal} onDidDismiss={() => {\r\n setOpenMembersToAssignModal(false)\r\n setGroupMembersSearchCriteria('')\r\n }}\r\n cssClass={\"modal\"}>\r\n <IonSearchbar placeholder={\"Căutați membrii...\"}\r\n class={\"searchbarInModal\"}\r\n value={groupMembersSearchCriteria}\r\n debounce={200}\r\n onIonInput={(e: any) => {\r\n setGroupMembersSearchCriteria(e.target.value)\r\n }}\r\n />\r\n <IonContent class={\"modalContent\"}>\r\n <IonList class={\"modalContent\"}>\r\n {searchedUsers && searchedUsers\r\n .filter(user => {\r\n if (groupMembersSearchCriteria === '') return searchedUsers;\r\n return user.lastName?.startsWith(groupMembersSearchCriteria) || user.lastName?.toLowerCase().startsWith(groupMembersSearchCriteria)\r\n || user.firstName?.startsWith(groupMembersSearchCriteria) || user.lastName?.toLowerCase().startsWith(groupMembersSearchCriteria)\r\n })\r\n .map(user => {\r\n return <IonItem class={\"modalListItem\"} lines={\"none\"} key={user.id}>\r\n <IonAvatar>\r\n <img src={user.img ? (PICTURE_TYPE + user.img) : (pic)}\r\n alt={\"Fotografie profil\"} />\r\n </IonAvatar>\r\n <IonLabel>\r\n {user.firstName + \" \" + user.lastName}\r\n </IonLabel>\r\n <IonCheckbox onIonChange={(e) => checkMember(user.id!, e.detail.checked)} />\r\n </IonItem>\r\n })}\r\n </IonList>\r\n </IonContent>\r\n <IonButton id={\"groupMembersListButton\"} onClick={() => newActivity()}>Trimite</IonButton>\r\n </IonModal>\r\n </IonContent>}\r\n\r\n\r\n {/*RECEIVED ANSWERS*/}\r\n {\r\n renderingComponent === \"returnedAssigns\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <IonTitle><u>Activități curente</u></IonTitle>\r\n <IonList>\r\n {groupActivities && groupActivities.map(act => {\r\n return (<IonCard class={\"currentActivity\"} key={act.id} onClick={() => {\r\n setRenderingComponent(\"activityAnswers\");\r\n setSelectedActivity(act)\r\n }}>\r\n <div>\r\n <IonCardTitle>{act.title}</IonCardTitle>\r\n <IonCardSubtitle>Activă până în: {act.dueDate}</IonCardSubtitle>\r\n </div>\r\n </IonCard>)\r\n })}\r\n\r\n <IonLoading isOpen={fetchingActivities} message={\"Încărcăm lista de activități...\"} />\r\n\r\n </IonList>\r\n </IonContent>\r\n }\r\n\r\n {\r\n renderingComponent === \"activityAnswers\" &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <br />\r\n <IonFabButton onClick={() => {\r\n setRenderingComponent(\"returnedAssigns\");\r\n }}\r\n id={\"btnBack\"}><IonIcon icon={arrowBack} /></IonFabButton>\r\n <br />\r\n\r\n <IonList>\r\n <IonTitle><u>Răspunsuri</u></IonTitle>\r\n {answers && answers.map(ans => {\r\n return (<><IonCard class={\"currentActivity\"} key={ans.id} onClick={() => {\r\n setRenderingComponent(\"selectedAnswer\");\r\n setSelectedAnswer(ans)\r\n }}>\r\n <div>\r\n <IonText>Răspuns de\r\n la:</IonText><IonCardTitle>{ans.memberName}</IonCardTitle>\r\n <IonCardSubtitle>Activitate: {selectedActivity.title},\r\n din: {selectedActivity.dueDate}</IonCardSubtitle>\r\n </div>\r\n </IonCard>\r\n </>)\r\n })}\r\n\r\n <IonLoading isOpen={fetchingActivities} message={\"Încărcăm lista de răspunsuri...\"} />\r\n </IonList>\r\n </IonContent>\r\n }\r\n\r\n {\r\n renderingComponent === 'selectedAnswer' &&\r\n <IonContent class={\"renderedComponent\"}>\r\n <br />\r\n <br />\r\n <IonItem lines={\"none\"} id={\"answerComponentHeader\"}>\r\n <IonFabButton onClick={() => {\r\n setRenderingComponent(\"activityAnswers\");\r\n }}\r\n id={\"btnBack\"}><IonIcon icon={arrowBack} /></IonFabButton>\r\n <IonTitle><u><b>{selectedAnswer.memberName}</b> a lucrat:</u></IonTitle><br />\r\n <IonFabButton slot=\"end\" onClick={() => {\r\n setRenderingComponent(\"badges\");\r\n }}\r\n id={\"btnBadge\"}><IonIcon icon={medal} /></IonFabButton>\r\n </IonItem>\r\n <br />\r\n\r\n\r\n <IonSlides options={{\r\n speed: 500,\r\n effect: \"cube\",\r\n paginationType: \"fraction\",\r\n loop: true\r\n\r\n }} pager={true}>\r\n {selectedAnswer.photos?.map(m =>\r\n <IonSlide>\r\n <IonImg class={\"slideImg\"} src={PICTURE_TYPE + m.content}\r\n key={m.content?.substr(100, 10)} />\r\n </IonSlide>)}\r\n </IonSlides>\r\n <IonItemDivider />\r\n {selectedAnswer.gameResults && selectedAnswer.gameResults.length > 0 &&\r\n <>\r\n <IonTitle><u>Rezultate jocuri:</u></IonTitle>\r\n <IonGrid class={\"resultsDiv\"}>\r\n <IonRow>\r\n <IonTitle class={\"tableCell\"}>Joc</IonTitle>\r\n <IonTitle class={\"tableCell\"}>Rezultat</IonTitle>\r\n </IonRow>\r\n {selectedAnswer.gameResults.map(a =>\r\n <IonRow>\r\n <IonCol class={\"tableCell\"}>{a.game} </IonCol>\r\n <IonCol class={\"tableCell\"}>{a.result} pct.</IonCol>\r\n </IonRow>\r\n )}\r\n </IonGrid>\r\n </>}\r\n </IonContent>\r\n }\r\n\r\n\r\n {/*BADGES*/}\r\n {renderingComponent === 'badges' && <IonContent class={\"renderedComponent\"}>\r\n <br />\r\n <IonFabButton onClick={() => {\r\n setRenderingComponent(\"selectedAnswer\");\r\n }}\r\n id={\"btnBack\"}><IonIcon icon={arrowBack} /></IonFabButton>\r\n <IonButton id={\"giveBadgeBtn\"} onClick={() => rewardBadge(selectedAnswer.userId!)}>Acordă\r\n insigna</IonButton>\r\n <br /><br /><br />\r\n <IonRadioGroup>\r\n {badges && badges.map(badge => {\r\n return <IonAvatar className={\"badgeDiv\"} key={badge.id}>\r\n <IonImg src={PICTURE_TYPE + badge.content} id={badge.id!.toString()} class={\"badgeImg\"}\r\n onClick={() => {\r\n deselectPic();\r\n setSelectedBadge(badge.id!.toString());\r\n const el = document.getElementById(badge.id!.toString());\r\n if (el !== null) {\r\n el.style.border = \"5px dotted blue\";\r\n }\r\n }} />\r\n </IonAvatar>\r\n })}\r\n </IonRadioGroup>\r\n </IonContent>}\r\n\r\n {/*ALERTS*/}\r\n <IonAlert cssClass={\"alert\"}\r\n isOpen={openDeleteMember}\r\n header={\"Eliminare membru\"}\r\n message={\"Doriți să eliminați acest membru din grupă?\"}\r\n onDidDismiss={() => setDeleteMember(false)}\r\n buttons={[\r\n {\r\n text: 'DA',\r\n cssClass: 'alertBtn',\r\n handler: () => {\r\n deleteMember();\r\n }\r\n },\r\n {\r\n cssClass: 'alertBtn',\r\n text: 'NU'\r\n }\r\n ]} />\r\n <IonAlert cssClass={\"alert\"}\r\n isOpen={openAddMember}\r\n header={\"Adăugare membru\"}\r\n message={\"Doriți să adăugați acest membru în grupă?\"}\r\n onDidDismiss={() => setAddMember(false)}\r\n buttons={[\r\n {\r\n text: 'DA',\r\n cssClass: 'alertBtn',\r\n handler: () => {\r\n addMember();\r\n }\r\n },\r\n {\r\n cssClass: 'alertBtn',\r\n text: 'NU'\r\n }\r\n ]} />\r\n {getGroupDetailsError &&\r\n <IonAlert isOpen={true} header={\"A apărut o eroare!\"}\r\n message={\"A apărut o problemă, iar datele grupei dumneavoastră nu au putut fi încărcate!\"} />}\r\n\r\n {awardBadgeError &&\r\n <IonAlert isOpen={true} header={\"A apărut o eroare!\"}\r\n message={awardBadgeError.message} />}\r\n\r\n {getBadgesError && <IonAlert isOpen={true} header={\"A apărut o eroare!\"}\r\n message={getBadgesError.message} />}\r\n\r\n </IonContent>\r\n\r\n {/*ERRORS*/}\r\n {searchUsersError &&\r\n <IonToast isOpen={true}\r\n message={\"A apărut o eroare la încărcarea datelor solicitate...\"} />}\r\n\r\n\r\n </IonPage>\r\n </>)\r\n}","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\groups\\provider\\GroupsProvider.tsx",["253","254","255","256"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\index.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\Footer.tsx",["257","258","259","260"],"import { IonCardSubtitle, IonFooter, IonIcon, IonToolbar } from \"@ionic/react\";\r\nimport React, { useEffect } from \"react\";\r\nimport \"../design/footer.css\"\r\nimport { callOutline, logoFacebook, logoInstagram, logoWhatsapp } from \"ionicons/icons\";\r\n\r\nexport const Footer: React.FC = () => {\r\n useEffect(() => {\r\n return () => {\r\n console.log(\"Unmounted Footer component\");\r\n };\r\n }, []);\r\n return (\r\n <>\r\n <IonFooter id={\"footerToolbar\"} class={\"myFooter\"}>\r\n <IonCardSubtitle>©2021 Grădinița de acasă</IonCardSubtitle>\r\n <a href={\"\"}>\r\n <IonIcon icon={logoFacebook} class={\"footerSocialIcon\"} id={\"fb\"} />\r\n </a>\r\n <a href={\"\"}>\r\n <IonIcon icon={logoInstagram} class={\"footerSocialIcon\"} id={\"insta\"} />\r\n </a>\r\n <br />\r\n\r\n <IonIcon icon={logoWhatsapp} class={\"footerSocialIcon\"} id={\"phone\"} />\r\n <IonCardSubtitle id={\"phoneCardSubtitle\"}>+40 7983 6428</IonCardSubtitle>\r\n </IonFooter>\r\n </>\r\n )\r\n};\r\nexport default Footer;","D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\api\\GamesApi.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilHome.tsx",[],["261","262"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\WelcomeScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\starfallGame\\GameScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\shapesGame\\ShapesWelcomeScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\Signup.tsx",["263"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilsGroups.tsx",["264","265","266","267","268","269","270","271","272","273"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PE.tsx",["274"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\activities\\provider\\ActivitiesProvider.tsx",["275","276"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\components\\HomeComponent.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\activities\\api\\ActivitiesApi.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\PEGame\\PEGameScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\api\\AuthenticationApi.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\groups\\api\\GroupsApi.tsx",["277"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\index.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\provider\\GamesProvider.tsx",["278"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\pupils\\pages\\PupilMenuBar.tsx",["279","280","281"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\games\\pages\\paintGame\\PaintWelcomeScene.tsx",[],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\authentication\\pages\\PrivateRoute.tsx",["282","283"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\teachers\\pages\\TeacherMenuBar.tsx",["284","285"],"D:\\Faculta\\__Licenta__\\Aplicatie\\frontend\\src\\genericUser\\api\\GenericUserApi.tsx",[],{"ruleId":"286","severity":1,"message":"287","line":1,"column":17,"nodeType":"288","messageId":"289","endLine":1,"endColumn":27},{"ruleId":"286","severity":1,"message":"290","line":1,"column":29,"nodeType":"288","messageId":"289","endLine":1,"endColumn":38},{"ruleId":"286","severity":1,"message":"291","line":1,"column":40,"nodeType":"288","messageId":"289","endLine":1,"endColumn":47},{"ruleId":"286","severity":1,"message":"292","line":1,"column":49,"nodeType":"288","messageId":"289","endLine":1,"endColumn":55},{"ruleId":"286","severity":1,"message":"293","line":5,"column":34,"nodeType":"288","messageId":"289","endLine":5,"endColumn":46},{"ruleId":"294","replacedBy":"295"},{"ruleId":"296","replacedBy":"297"},{"ruleId":"286","severity":1,"message":"298","line":1,"column":22,"nodeType":"288","messageId":"289","endLine":1,"endColumn":29},{"ruleId":"286","severity":1,"message":"299","line":3,"column":10,"nodeType":"288","messageId":"289","endLine":3,"endColumn":16},{"ruleId":"286","severity":1,"message":"300","line":4,"column":10,"nodeType":"288","messageId":"289","endLine":4,"endColumn":24},{"ruleId":"301","severity":1,"message":"302","line":13,"column":5,"nodeType":"303","messageId":"304","endLine":15,"endColumn":6},{"ruleId":"286","severity":1,"message":"305","line":36,"column":5,"nodeType":"288","messageId":"289","endLine":36,"endColumn":15},{"ruleId":"286","severity":1,"message":"306","line":40,"column":10,"nodeType":"288","messageId":"289","endLine":40,"endColumn":13},{"ruleId":"286","severity":1,"message":"307","line":49,"column":9,"nodeType":"288","messageId":"289","endLine":49,"endColumn":20},{"ruleId":"286","severity":1,"message":"308","line":53,"column":30,"nodeType":"288","messageId":"289","endLine":53,"endColumn":50},{"ruleId":"309","severity":1,"message":"310","line":83,"column":8,"nodeType":"311","endLine":83,"endColumn":26,"suggestions":"312"},{"ruleId":"309","severity":1,"message":"313","line":167,"column":8,"nodeType":"311","endLine":167,"endColumn":28,"suggestions":"314"},{"ruleId":"294","replacedBy":"315"},{"ruleId":"296","replacedBy":"316"},{"ruleId":"301","severity":1,"message":"302","line":11,"column":5,"nodeType":"303","messageId":"304","endLine":13,"endColumn":6},{"ruleId":"286","severity":1,"message":"317","line":2,"column":10,"nodeType":"288","messageId":"289","endLine":2,"endColumn":17},{"ruleId":"294","replacedBy":"318"},{"ruleId":"296","replacedBy":"319"},{"ruleId":"309","severity":1,"message":"320","line":104,"column":8,"nodeType":"311","endLine":104,"endColumn":37,"suggestions":"321"},{"ruleId":"286","severity":1,"message":"322","line":3,"column":8,"nodeType":"288","messageId":"289","endLine":3,"endColumn":14},{"ruleId":"286","severity":1,"message":"323","line":2,"column":9,"nodeType":"288","messageId":"289","endLine":2,"endColumn":15},{"ruleId":"324","severity":1,"message":"325","line":35,"column":68,"nodeType":"326","endLine":35,"endColumn":113},{"ruleId":"294","replacedBy":"327"},{"ruleId":"296","replacedBy":"328"},{"ruleId":"286","severity":1,"message":"329","line":1,"column":10,"nodeType":"288","messageId":"289","endLine":1,"endColumn":18},{"ruleId":"286","severity":1,"message":"330","line":1,"column":22,"nodeType":"288","messageId":"289","endLine":1,"endColumn":29},{"ruleId":"286","severity":1,"message":"331","line":1,"column":31,"nodeType":"288","messageId":"289","endLine":1,"endColumn":38},{"ruleId":"286","severity":1,"message":"332","line":1,"column":49,"nodeType":"288","messageId":"289","endLine":1,"endColumn":56},{"ruleId":"286","severity":1,"message":"333","line":1,"column":58,"nodeType":"288","messageId":"289","endLine":1,"endColumn":66},{"ruleId":"286","severity":1,"message":"292","line":2,"column":28,"nodeType":"288","messageId":"289","endLine":2,"endColumn":34},{"ruleId":"286","severity":1,"message":"334","line":2,"column":36,"nodeType":"288","messageId":"289","endLine":2,"endColumn":44},{"ruleId":"286","severity":1,"message":"299","line":3,"column":10,"nodeType":"288","messageId":"289","endLine":3,"endColumn":16},{"ruleId":"286","severity":1,"message":"300","line":4,"column":10,"nodeType":"288","messageId":"289","endLine":4,"endColumn":24},{"ruleId":"301","severity":1,"message":"302","line":13,"column":5,"nodeType":"303","messageId":"304","endLine":15,"endColumn":6},{"ruleId":"301","severity":1,"message":"302","line":11,"column":5,"nodeType":"303","messageId":"304","endLine":13,"endColumn":6},{"ruleId":"286","severity":1,"message":"335","line":1,"column":17,"nodeType":"288","messageId":"289","endLine":1,"endColumn":26},{"ruleId":"286","severity":1,"message":"336","line":1,"column":51,"nodeType":"288","messageId":"289","endLine":1,"endColumn":61},{"ruleId":"286","severity":1,"message":"337","line":30,"column":5,"nodeType":"288","messageId":"289","endLine":30,"endColumn":17},{"ruleId":"286","severity":1,"message":"338","line":35,"column":57,"nodeType":"288","messageId":"289","endLine":35,"endColumn":66},{"ruleId":"286","severity":1,"message":"339","line":35,"column":92,"nodeType":"288","messageId":"289","endLine":35,"endColumn":100},{"ruleId":"286","severity":1,"message":"340","line":40,"column":29,"nodeType":"288","messageId":"289","endLine":40,"endColumn":33},{"ruleId":"286","severity":1,"message":"341","line":41,"column":5,"nodeType":"288","messageId":"289","endLine":41,"endColumn":14},{"ruleId":"286","severity":1,"message":"342","line":43,"column":49,"nodeType":"288","messageId":"289","endLine":43,"endColumn":57},{"ruleId":"286","severity":1,"message":"343","line":60,"column":10,"nodeType":"288","messageId":"289","endLine":60,"endColumn":28},{"ruleId":"286","severity":1,"message":"322","line":61,"column":8,"nodeType":"288","messageId":"289","endLine":61,"endColumn":14},{"ruleId":"286","severity":1,"message":"344","line":91,"column":9,"nodeType":"288","messageId":"289","endLine":91,"endColumn":22},{"ruleId":"286","severity":1,"message":"345","line":95,"column":9,"nodeType":"288","messageId":"289","endLine":95,"endColumn":22},{"ruleId":"286","severity":1,"message":"346","line":130,"column":12,"nodeType":"288","messageId":"289","endLine":130,"endColumn":33},{"ruleId":"309","severity":1,"message":"347","line":171,"column":8,"nodeType":"311","endLine":171,"endColumn":28,"suggestions":"348"},{"ruleId":"309","severity":1,"message":"349","line":284,"column":8,"nodeType":"311","endLine":284,"endColumn":28,"suggestions":"350"},{"ruleId":"286","severity":1,"message":"334","line":1,"column":64,"nodeType":"288","messageId":"289","endLine":1,"endColumn":72},{"ruleId":"286","severity":1,"message":"351","line":6,"column":9,"nodeType":"288","messageId":"289","endLine":6,"endColumn":26},{"ruleId":"286","severity":1,"message":"352","line":109,"column":7,"nodeType":"288","messageId":"289","endLine":109,"endColumn":10},{"ruleId":"286","severity":1,"message":"353","line":210,"column":14,"nodeType":"288","messageId":"289","endLine":210,"endColumn":22},{"ruleId":"286","severity":1,"message":"354","line":1,"column":47,"nodeType":"288","messageId":"289","endLine":1,"endColumn":57},{"ruleId":"286","severity":1,"message":"355","line":4,"column":10,"nodeType":"288","messageId":"289","endLine":4,"endColumn":21},{"ruleId":"356","severity":1,"message":"357","line":16,"column":17,"nodeType":"326","endLine":16,"endColumn":30},{"ruleId":"356","severity":1,"message":"357","line":19,"column":17,"nodeType":"326","endLine":19,"endColumn":30},{"ruleId":"294","replacedBy":"358"},{"ruleId":"296","replacedBy":"359"},{"ruleId":"286","severity":1,"message":"360","line":39,"column":12,"nodeType":"288","messageId":"289","endLine":39,"endColumn":27},{"ruleId":"286","severity":1,"message":"334","line":1,"column":39,"nodeType":"288","messageId":"289","endLine":1,"endColumn":47},{"ruleId":"286","severity":1,"message":"361","line":4,"column":5,"nodeType":"288","messageId":"289","endLine":4,"endColumn":14},{"ruleId":"286","severity":1,"message":"362","line":6,"column":5,"nodeType":"288","messageId":"289","endLine":6,"endColumn":20},{"ruleId":"286","severity":1,"message":"363","line":9,"column":5,"nodeType":"288","messageId":"289","endLine":9,"endColumn":17},{"ruleId":"286","severity":1,"message":"330","line":9,"column":19,"nodeType":"288","messageId":"289","endLine":9,"endColumn":26},{"ruleId":"286","severity":1,"message":"323","line":10,"column":5,"nodeType":"288","messageId":"289","endLine":10,"endColumn":11},{"ruleId":"286","severity":1,"message":"364","line":11,"column":5,"nodeType":"288","messageId":"289","endLine":11,"endColumn":13},{"ruleId":"286","severity":1,"message":"365","line":12,"column":5,"nodeType":"288","messageId":"289","endLine":12,"endColumn":13},{"ruleId":"286","severity":1,"message":"366","line":14,"column":5,"nodeType":"288","messageId":"289","endLine":14,"endColumn":13},{"ruleId":"286","severity":1,"message":"332","line":16,"column":5,"nodeType":"288","messageId":"289","endLine":16,"endColumn":12},{"ruleId":"301","severity":1,"message":"302","line":10,"column":5,"nodeType":"303","messageId":"304","endLine":12,"endColumn":6},{"ruleId":"286","severity":1,"message":"334","line":1,"column":65,"nodeType":"288","messageId":"289","endLine":1,"endColumn":73},{"ruleId":"309","severity":1,"message":"367","line":299,"column":91,"nodeType":"311","endLine":299,"endColumn":98,"suggestions":"368"},{"ruleId":"286","severity":1,"message":"369","line":1,"column":39,"nodeType":"288","messageId":"289","endLine":1,"endColumn":48},{"ruleId":"286","severity":1,"message":"290","line":1,"column":41,"nodeType":"288","messageId":"289","endLine":1,"endColumn":50},{"ruleId":"286","severity":1,"message":"287","line":1,"column":16,"nodeType":"288","messageId":"289","endLine":1,"endColumn":26},{"ruleId":"286","severity":1,"message":"334","line":1,"column":28,"nodeType":"288","messageId":"289","endLine":1,"endColumn":36},{"ruleId":"286","severity":1,"message":"370","line":15,"column":9,"nodeType":"288","messageId":"289","endLine":15,"endColumn":29},{"ruleId":"286","severity":1,"message":"290","line":1,"column":28,"nodeType":"288","messageId":"289","endLine":1,"endColumn":37},{"ruleId":"286","severity":1,"message":"317","line":6,"column":9,"nodeType":"288","messageId":"289","endLine":6,"endColumn":16},{"ruleId":"286","severity":1,"message":"371","line":9,"column":5,"nodeType":"288","messageId":"289","endLine":9,"endColumn":20},{"ruleId":"286","severity":1,"message":"370","line":16,"column":10,"nodeType":"288","messageId":"289","endLine":16,"endColumn":30},"@typescript-eslint/no-unused-vars","'useContext' is defined but never used.","Identifier","unusedVar","'useEffect' is defined but never used.","'useMemo' is defined but never used.","'useRef' is defined but never used.","'LoginContext' is defined but never used.","no-native-reassign",["372"],"no-negated-in-lhs",["373"],"'IonPage' is defined but never used.","'Footer' is defined but never used.","'TeacherMenuBar' is defined but never used.","@typescript-eslint/no-useless-constructor","Useless constructor.","MethodDefinition","noUselessConstructor","'BadgeProps' is defined but never used.","'act' is defined but never used.","'searchUsers' is assigned a value but never used.","'getGroupDetailsError' is assigned a value but never used.","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getDrawings'. Either include it or remove the dependency array.","ArrayExpression",["374"],"React Hook useEffect has missing dependencies: 'getEarnedBadges' and 'token'. Either include them or remove the dependency array.",["375"],["372"],["373"],"'Storage' is defined but never used.",["372"],["373"],"React Hook useEffect has a missing dependency: 'logout'. Either include it or remove the dependency array.",["376"],"'Shapes' is defined but never used.","'IonImg' is defined but never used.","jsx-a11y/img-redundant-alt","Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.","JSXOpeningElement",["372"],["373"],"'infinite' is defined but never used.","'IonIcon' is defined but never used.","'IonItem' is defined but never used.","'IonText' is defined but never used.","'IonTitle' is defined but never used.","'useState' is defined but never used.","'FormEvent' is defined but never used.","'useReducer' is defined but never used.","'IonItemGroup' is defined but never used.","'IonHeader' is defined but never used.","'IonRadio' is defined but never used.","'body' is defined but never used.","'checkmark' is defined but never used.","'thumbsUp' is defined but never used.","'IonBackButtonInner' is defined but never used.","'gettingBadges' is assigned a value but never used.","'awardingBadge' is assigned a value but never used.","'openSelectedGameModal' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'generalSearchCriteria' and 'searchUsers'. Either include them or remove the dependency array.",["377"],"React Hook useEffect has a missing dependency: 'getAllBadges'. Either include it or remove the dependency array.",["378"],"'ActivitiesContext' is defined but never used.","'log' is assigned a value but never used.","'wsEffect' is defined but never used.","'IonToolbar' is defined but never used.","'callOutline' is defined but never used.","jsx-a11y/anchor-is-valid","The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md",["372"],["373"],"'showSignupError' is assigned a value but never used.","'IonButton' is defined but never used.","'IonCardSubtitle' is defined but never used.","'IonFabButton' is defined but never used.","'IonInput' is defined but never used.","'IonLabel' is defined but never used.","'IonModal' is defined but never used.","React Hook useCallback has an unnecessary dependency: 'token'. Either exclude it or remove the dependency array.",["379"],"'getLogger' is defined but never used.","'NotificationsPopover' is defined but never used.","'extensionPuzzle' is defined but never used.","no-global-assign","no-unsafe-negation",{"desc":"380","fix":"381"},{"desc":"382","fix":"383"},{"desc":"384","fix":"385"},{"desc":"386","fix":"387"},{"desc":"388","fix":"389"},{"desc":"390","fix":"391"},"Update the dependencies array to be: [getDrawings, selectedActivity]",{"range":"392","text":"393"},"Update the dependencies array to be: [getEarnedBadges, renderingComponent, token]",{"range":"394","text":"395"},"Update the dependencies array to be: [logout, passwordUpdatedSuccessfully]",{"range":"396","text":"397"},"Update the dependencies array to be: [generalSearchCriteria, renderingComponent, searchUsers]",{"range":"398","text":"399"},"Update the dependencies array to be: [getAllBadges, renderingComponent]",{"range":"400","text":"401"},"Update the dependencies array to be: []",{"range":"402","text":"403"},[2887,2905],"[getDrawings, selectedActivity]",[5574,5594],"[getEarnedBadges, renderingComponent, token]",[3241,3270],"[logout, passwordUpdatedSuccessfully]",[6360,6380],"[generalSearchCriteria, renderingComponent, searchUsers]",[10264,10284],"[getAllBadges, renderingComponent]",[11404,11411],"[]"]