diff --git a/.firebase/hosting.YnVpbGQ.cache b/.firebase/hosting.YnVpbGQ.cache index 407cf5f..c9e6fb2 100644 --- a/.firebase/hosting.YnVpbGQ.cache +++ b/.firebase/hosting.YnVpbGQ.cache @@ -1,72 +1,72 @@ robots.txt,1761396900570,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49 manifest.json,1761396900568,a9350a49aaac9fe94d3dd77b8270cc998c04ab97944a606189675022431faa51 favicon.svg,1761396900561,a2a4880301751061a600b0bfc5c26fc413aed41e581516c4fa976bcb7fff6663 -service-worker.js,1762704464986,78067025e3c748b0364fd3530a7dbff74bd239814203a53f6845cbd55e0e2607 -index.html,1762704464985,57fb1091c5bf8037e3c602389a00e3d80233468408fd05d87722f1fe71a7dd1d -precache-manifest.47857d818921d80727f3a0850ed0b94a.js,1762704464985,a8d9a4020e5112083b9b7ff4f98ac36fc385970906494ad15fd7658408924fb9 -static/media/translate.610ad011.svg,1762704464942,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120 -static/media/tru-fals-icon.d0b962d8.svg,1762704464941,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33 -static/media/sub-ques-icon.366b4f1e.svg,1762704464942,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425 -static/media/student-engaged.53fb7b0b.svg,1762704464939,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf -asset-manifest.json,1762704464986,6e040301298d248f77a9e4a7eea95318288cf92ed742ecef21467ae7fce27e5c -static/media/questions-icon.3d3c1aaf.svg,1762704464939,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1 -static/media/quizexam.5545802e.svg,1762704464936,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569 -static/media/PracticeKiaLogo.a8336af5.svg,1762704464882,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8 -static/media/question.0c505ed9.svg,1762704464936,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36 -static/media/practice-icon.bf603115.svg,1762704464939,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c -static/media/practice.f05e6f00.svg,1762704464936,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475 -static/media/mul-res-icon.8ef3b097.svg,1762704464939,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4 -static/media/mul-cho-icon.b3dc9ea9.svg,1762704464940,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f -static/media/OdiSVGlogo.f0834bb1.svg,1762704464920,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235 -static/media/perf-icon.1597a235.svg,1762704464939,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28 -static/media/performance.88855f12.svg,1762704464937,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9 -static/media/locale-icon.b3596424.svg,1762704464938,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054 -static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1762704464935,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 -static/media/KaTeX_Size4-Regular.61522cd3.woff2,1762704464932,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 -static/media/KaTeX_Typewriter-Regular.0e046058.woff,1762704464935,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873 -static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1762704464935,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f -static/media/KaTeX_Size3-Regular.4de844d4.woff,1762704464935,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27 -static/media/KaTeX_Size3-Regular.963af864.ttf,1762704464934,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678 -static/media/KaTeX_Size3-Regular.9108a400.woff2,1762704464932,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 -static/media/KaTeX_Size2-Regular.95a1da91.woff2,1762704464932,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 -static/media/KaTeX_Size2-Regular.b0628bfd.woff,1762704464932,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de -static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1762704464931,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 -static/media/KaTeX_Size1-Regular.4788ba5b.woff,1762704464932,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d -static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1762704464936,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9 -static/media/KaTeX_Size4-Regular.3045a61f.woff,1762704464935,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa -static/media/KaTeX_Script-Regular.1b3161eb.woff2,1762704464931,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 -static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1762704464935,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64 -static/media/KaTeX_Script-Regular.a189c37d.ttf,1762704464931,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a -static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1762704464929,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544 -static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1762704464931,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32 -static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1762704464928,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86 -static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1762704464932,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c -static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1762704464931,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 -static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1762704464931,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b -static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1762704464928,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a -static/media/KaTeX_Script-Regular.a82fa2a7.woff,1762704464931,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af -static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1762704464928,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae -static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1762704464929,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591 -static/media/logo.0dd03933.png,1762704464920,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085 -static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1762704464935,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b -static/media/KaTeX_Math-Italic.fe5ed587.ttf,1762704464931,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa -static/media/KaTeX_Math-Italic.ed7aea12.woff,1762704464928,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee -static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1762704464923,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 -static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1762704464923,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2 -static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1762704464923,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd -static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1762704464923,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e -static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1762704464923,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf -static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1762704464923,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c -static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1762704464921,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038 -static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1762704464923,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a -static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1762704464920,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662 -static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1762704464920,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 -static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1762704464920,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 -static/media/GrayscalePKLogo.6bb74404.svg,1762704464920,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2 -static/media/getFetch.2b2b7da4.cjs,1762704464920,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096 -static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1762704464920,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f -static/media/exam-icon.10f48851.svg,1762704464939,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693 -static/media/feature-2.36f8d7e2.webp,1762704464918,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c +service-worker.js,1770731008838,482a78ad904d2de94c78bd67419d1fdd8172535807b933a9670a304ceefa471a +index.html,1770731008838,c1e744221cce5c0303625fa501638a0dc9411e7b3af246137116039c2715710f +static/media/sub-ques-icon.366b4f1e.svg,1770731008776,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425 +asset-manifest.json,1770731008838,55979a73bf0cabe287dcdb56eb2af16dbe88affb823b4b1b91775b8d8a3c22ed +static/media/student-engaged.53fb7b0b.svg,1770731008775,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf +static/media/tru-fals-icon.d0b962d8.svg,1770731008776,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33 +static/media/translate.610ad011.svg,1770731008777,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120 +static/media/question.0c505ed9.svg,1770731008773,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36 +precache-manifest.b88347085d339f5dd4f7dc9522a46162.js,1770731008838,5cce4392ad28a60ff6d2d9fe8cec5f5c8796a994b1f717467d5e21204da74beb +static/media/PracticeKiaLogo.a8336af5.svg,1770731008750,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8 +static/media/quizexam.5545802e.svg,1770731008773,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569 +static/media/questions-icon.3d3c1aaf.svg,1770731008774,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1 +static/media/practice.f05e6f00.svg,1770731008773,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475 +static/media/OdiSVGlogo.f0834bb1.svg,1770731008752,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235 +static/media/performance.88855f12.svg,1770731008773,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9 +static/media/perf-icon.1597a235.svg,1770731008776,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28 +static/media/mul-res-icon.8ef3b097.svg,1770731008776,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4 +static/media/mul-cho-icon.b3dc9ea9.svg,1770731008776,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f +static/media/locale-icon.b3596424.svg,1770731008774,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054 +static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1770731008771,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 +static/media/KaTeX_Size4-Regular.61522cd3.woff2,1770731008771,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 +static/media/KaTeX_Typewriter-Regular.0e046058.woff,1770731008771,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873 +static/media/KaTeX_Size4-Regular.3045a61f.woff,1770731008771,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa +static/media/KaTeX_Size3-Regular.9108a400.woff2,1770731008767,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 +static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1770731008771,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f +static/media/KaTeX_Size3-Regular.4de844d4.woff,1770731008769,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27 +static/media/KaTeX_Size3-Regular.963af864.ttf,1770731008771,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678 +static/media/KaTeX_Size2-Regular.b0628bfd.woff,1770731008767,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de +static/media/KaTeX_Size2-Regular.95a1da91.woff2,1770731008767,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 +static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1770731008767,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9 +static/media/KaTeX_Size1-Regular.4788ba5b.woff,1770731008766,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d +static/media/KaTeX_Script-Regular.1b3161eb.woff2,1770731008766,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 +static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1770731008767,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64 +static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1770731008766,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 +static/media/KaTeX_Script-Regular.a82fa2a7.woff,1770731008766,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af +static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1770731008764,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b +static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1770731008766,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544 +static/media/KaTeX_Script-Regular.a189c37d.ttf,1770731008766,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a +static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1770731008763,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86 +static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1770731008762,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae +static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1770731008765,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c +static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1770731008763,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 +static/media/practice-icon.bf603115.svg,1770731008775,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c +static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1770731008765,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32 +static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1770731008765,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591 +static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1770731008763,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a +static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1770731008772,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b +static/media/logo.0dd03933.png,1770731008752,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085 +static/media/KaTeX_Math-Italic.ed7aea12.woff,1770731008761,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee +static/media/KaTeX_Math-Italic.fe5ed587.ttf,1770731008762,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa +static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1770731008756,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 +static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1770731008756,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2 +static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1770731008756,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf +static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1770731008756,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e +static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1770731008756,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd +static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1770731008752,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 +static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1770731008752,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662 +static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1770731008756,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038 +static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1770731008753,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 +static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1770731008754,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c +static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1770731008756,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a +static/media/GrayscalePKLogo.6bb74404.svg,1770731008754,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2 +static/media/getFetch.2b2b7da4.cjs,1770731008752,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096 +static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1770731008752,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f +static/media/feature-2.36f8d7e2.webp,1770731008752,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c +static/media/exam-icon.10f48851.svg,1770731008774,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693 assets/images/locale-icon.svg,1761396900579,610498c7ca3b5800d268b1654473f0b1d79de2c6493a7c6982bef90456d35179 assets/images/icons/icon-96x96.png,1761396900602,43a8ac4df8945d7a44e3e4911032214f01eaea92267baa31a93e77942b424c73 assets/images/icons/icon-72x72.png,1761396900600,a42f1df8ab0a8fe921573976d49158e1a2c52fe430460c869947f221aba30a94 @@ -76,52 +76,52 @@ assets/images/icons/icon-192x192.png,1761396900592,ac9fe46fbeb4c54fb3c838b645380 assets/images/icons/icon-152x152.png,1761396900590,95a5a117fbd5640f1f1f13c9923398545e3f5b66734ff6c8ce67c942319a8b67 assets/images/icons/icon-144x144.png,1761396900588,e42168e0e1abb5bd7811ebe1b5a2183d0ce287bf266c2efd8d97a23d23ca8d00 assets/images/icons/icon-128x128.png,1761396900585,45b577c86e7c03fef868bfa3f96810c5b36f31156c32c0d85620d2e6fe1fc85b -static/media/delete-icon.da38c0f4.svg,1762704464942,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722 -static/media/dashboard.8ec7624b.svg,1762704464936,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1 -static/media/classes.3b73dba0.svg,1762704464936,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d -static/media/class-icon.6afd34b5.svg,1762704464938,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e -static/media/Checkmark.1356376c.svg,1762704464948,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027 -static/media/batch.3fcff66e.svg,1762704464936,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862 -static/media/batch-icon.bf664771.svg,1762704464939,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0 -static/media/KaTeX_Math-Italic.d8b7a801.woff2,1762704464928,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4 -static/media/auth-BG.2835584f.svg,1762704464918,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf -static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1762704464928,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 -static/media/KaTeX_Math-BoldItalic.48155e43.woff,1762704464928,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807 -static/media/add-circle.0011f2bc.svg,1762704464938,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17 -static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1762704464928,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf -static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1762704464928,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d -static/media/KaTeX_Main-Italic.65297062.woff2,1762704464923,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12 -static/media/KaTeX_Main-Italic.8ffd28f6.woff,1762704464928,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7 -static/media/KaTeX_Main-Regular.f1cdb692.woff,1762704464928,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1 -static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1762704464923,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72 -static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1762704464923,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695 -static/media/KaTeX_Main-Bold.a9382e25.woff2,1762704464923,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0 -static/media/KaTeX_Main-Italic.39349e0a.ttf,1762704464928,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282 -static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1762704464926,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a -static/media/KaTeX_Main-Bold.4cdba646.woff,1762704464923,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94 -static/media/KaTeX_Main-Regular.818582da.ttf,1762704464928,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715 -static/js/runtime-main.6081d0ec.js.map,1762704464986,c8123cc8ee1dd267e60bcb091eaf2d25ed7a5509451d8e86afbc787380151e00 -static/media/KaTeX_Main-Bold.8e431f7e.ttf,1762704464923,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b -static/js/runtime-main.6081d0ec.js,1762704464949,7a1c482f42a20039677e21ce34ce022263885023785a057bc06f70d610dc40ee -static/media/KaTeX_AMS-Regular.66c67820.woff2,1762704464920,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3 -static/media/feature-1.ea5c34ea.svg,1762704464920,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8 -static/media/KaTeX_AMS-Regular.10824af7.woff,1762704464920,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10 -static/media/KaTeX_AMS-Regular.56573229.ttf,1762704464923,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba -static/media/feature-3.3d5d81e9.svg,1762704464920,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b -static/js/4.5c9ee2d0.chunk.js.map,1762704464986,d8d9e9abbe0f04082879cc9c90c0fb1d1f28dfbba11b3d2b78b65d66b35b8b96 -static/js/4.5c9ee2d0.chunk.js,1762704464949,59a7c7888c9e73c67d5bf9455563cee7e9397cd306a614609a84aee098da6cad -static/js/3.0ae51bd8.chunk.js.map,1762704464986,3bec27d014f16133ccaade384debea7dc56f5deec998a15216216de721bad82a -static/js/3.0ae51bd8.chunk.js,1762704464949,6cdf0e52237283728c7fc227c590b009fd353a8fa0acc12b923b2e79fe4632b9 -static/js/2.f1872374.chunk.js.LICENSE.txt,1762704464950,bc485844887473eb82502f45e4e363ca58190ef2e4a8beb067ea4edb86b11522 -static/js/main.70d2f001.chunk.js,1762704464948,3d8677571a3059a12b3c1c27668166f6956e585ac5385bb8142ea24c7c273526 -static/css/4.97cefae8.chunk.css,1762704464950,a89028fc172450f4ccc12fecd86c150cf0735405675044cee04cf2592756c3a5 -static/css/3.1bfbb5fe.chunk.css,1762704464949,fa53ebd8effa8804499790774262a950c68115e9b4ea9d295b07ae92473848c9 -static/css/2.4ed2bec6.chunk.css,1762704464949,6b672aefb165bb49fe7761f8a920bd7efdfb60ae496f004f9443d6bf2a529434 -static/css/main.b9782f65.chunk.css,1762704464942,115aa90fc90106158cf0fd7a972fa326510d33a8e5481055d603540f1f116766 -static/css/4.97cefae8.chunk.css.map,1762704464986,cceccec195cfcf6a0764663e84b5386fa8152a3f15e41bad1f79c3287313f005 -static/css/3.1bfbb5fe.chunk.css.map,1762704464986,8fc475e7ed4214343dbe8e12953947d213f2d77dd7472cc99b811bb8ee58a5c4 -static/js/main.70d2f001.chunk.js.map,1762704464986,810249b85784dfc2de58cb464bdb5cd59ba31451960f1ab91f19842b200edd9f -static/css/main.b9782f65.chunk.css.map,1762704464959,ae1202cb201526bddc6046fd5fd3669972e60c33bdcb2a8e79a39fc84f2c5503 -static/css/2.4ed2bec6.chunk.css.map,1762704464959,2bd4fbcd3a9b593f1727d1006860d8ca592b270fcab15dbc28ba1f0c63391fe4 -static/js/2.f1872374.chunk.js,1762704464951,d8698341ec32ecca8a2a685aba96645f44c03b0fb5ff7f3b33fd0488a7a1b00b -static/js/2.f1872374.chunk.js.map,1762704465002,0be0c48865eaee81ab852a3a6c543f111a98fd7fe6816a1650d37680b8ce46cc +static/media/dashboard.8ec7624b.svg,1770731008772,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1 +static/media/delete-icon.da38c0f4.svg,1770731008777,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722 +static/media/class-icon.6afd34b5.svg,1770731008774,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e +static/media/batch-icon.bf664771.svg,1770731008776,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0 +static/media/batch.3fcff66e.svg,1770731008773,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862 +static/media/classes.3b73dba0.svg,1770731008773,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d +static/media/Checkmark.1356376c.svg,1770731008788,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027 +static/media/auth-BG.2835584f.svg,1770731008752,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf +static/media/KaTeX_Math-Italic.d8b7a801.woff2,1770731008761,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4 +static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1770731008763,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 +static/media/add-circle.0011f2bc.svg,1770731008774,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17 +static/media/KaTeX_Math-BoldItalic.48155e43.woff,1770731008761,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807 +static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1770731008761,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d +static/media/KaTeX_Main-Italic.65297062.woff2,1770731008758,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12 +static/media/KaTeX_Main-Regular.f1cdb692.woff,1770731008761,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1 +static/media/KaTeX_Main-Italic.8ffd28f6.woff,1770731008761,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7 +static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1770731008756,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72 +static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1770731008761,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf +static/media/KaTeX_Main-Italic.39349e0a.ttf,1770731008758,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282 +static/media/KaTeX_Main-Bold.4cdba646.woff,1770731008758,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94 +static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1770731008758,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695 +static/media/KaTeX_Main-Bold.a9382e25.woff2,1770731008756,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0 +static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1770731008756,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a +static/media/KaTeX_Main-Regular.818582da.ttf,1770731008761,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715 +static/media/KaTeX_Main-Bold.8e431f7e.ttf,1770731008758,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b +static/media/KaTeX_AMS-Regular.66c67820.woff2,1770731008772,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3 +static/js/runtime-main.6081d0ec.js,1770731008788,7a1c482f42a20039677e21ce34ce022263885023785a057bc06f70d610dc40ee +static/js/runtime-main.6081d0ec.js.map,1770731008838,c8123cc8ee1dd267e60bcb091eaf2d25ed7a5509451d8e86afbc787380151e00 +static/media/feature-1.ea5c34ea.svg,1770731008752,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8 +static/media/KaTeX_AMS-Regular.10824af7.woff,1770731008752,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10 +static/media/KaTeX_AMS-Regular.56573229.ttf,1770731008752,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba +static/media/feature-3.3d5d81e9.svg,1770731008752,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b +static/js/4.5c9ee2d0.chunk.js.map,1770731008838,d8d9e9abbe0f04082879cc9c90c0fb1d1f28dfbba11b3d2b78b65d66b35b8b96 +static/js/4.5c9ee2d0.chunk.js,1770731008795,59a7c7888c9e73c67d5bf9455563cee7e9397cd306a614609a84aee098da6cad +static/js/3.0ae51bd8.chunk.js.map,1770731008838,3bec27d014f16133ccaade384debea7dc56f5deec998a15216216de721bad82a +static/js/3.0ae51bd8.chunk.js,1770731008795,6cdf0e52237283728c7fc227c590b009fd353a8fa0acc12b923b2e79fe4632b9 +static/js/2.bdcfca92.chunk.js.LICENSE.txt,1770731008797,bc485844887473eb82502f45e4e363ca58190ef2e4a8beb067ea4edb86b11522 +static/js/main.566c7652.chunk.js,1770731008778,7a99cba7d531b55223ff7059d492704c01d44cd7c58b1faa6f2f64ec2695b08f +static/css/4.97cefae8.chunk.css,1770731008797,a89028fc172450f4ccc12fecd86c150cf0735405675044cee04cf2592756c3a5 +static/css/main.b9782f65.chunk.css,1770731008777,115aa90fc90106158cf0fd7a972fa326510d33a8e5481055d603540f1f116766 +static/css/2.4ed2bec6.chunk.css,1770731008788,6b672aefb165bb49fe7761f8a920bd7efdfb60ae496f004f9443d6bf2a529434 +static/css/3.1bfbb5fe.chunk.css,1770731008788,fa53ebd8effa8804499790774262a950c68115e9b4ea9d295b07ae92473848c9 +static/css/4.97cefae8.chunk.css.map,1770731008838,cceccec195cfcf6a0764663e84b5386fa8152a3f15e41bad1f79c3287313f005 +static/css/main.b9782f65.chunk.css.map,1770731008797,ae1202cb201526bddc6046fd5fd3669972e60c33bdcb2a8e79a39fc84f2c5503 +static/js/main.566c7652.chunk.js.map,1770731008838,66af6aedc25e5cca60f0147a079ab74328c1a67d602a8c1c8db6e9bdd3c09218 +static/css/3.1bfbb5fe.chunk.css.map,1770731008801,8fc475e7ed4214343dbe8e12953947d213f2d77dd7472cc99b811bb8ee58a5c4 +static/css/2.4ed2bec6.chunk.css.map,1770731008797,2bd4fbcd3a9b593f1727d1006860d8ca592b270fcab15dbc28ba1f0c63391fe4 +static/js/2.bdcfca92.chunk.js,1770731008791,192def8e8054a74baac0d16daf01c4cd1307ac0e1de5f9094fe059db449e8d16 +static/js/2.bdcfca92.chunk.js.map,1770731008853,ab26184996e92c80b8438fcf5b995947365ffa83a2e1570badb3da9dfc380218 diff --git a/src/component/Student/Exams/AttemptExam/AttemptExam.js b/src/component/Student/Exams/AttemptExam/AttemptExam.js index 4585986..22d3f88 100644 --- a/src/component/Student/Exams/AttemptExam/AttemptExam.js +++ b/src/component/Student/Exams/AttemptExam/AttemptExam.js @@ -38,6 +38,10 @@ class AttemptExam extends React.Component { activeDetailQuestion: {}, activeQuestionIndex: -1, pauseUpdate: false, + isSectionWise: false, + activeSectionIndex: 0, + sectionDeadline: null, + lockedSections: [], }; this.onGetExamAttempt = this.onGetExamAttempt.bind(this); @@ -53,8 +57,54 @@ class AttemptExam extends React.Component { componentDidMount() { this.onGetExamAttempt(); this.sendHeartbeat(); + + // ⏱️ section timer watcher + this.sectionTimer = setInterval(this.checkSectionTimeout, 1000); } + + checkSectionTimeout = () => { + const { + isSectionWise, + sectionDeadline, + activeSectionIndex, + sections, + lockedSections, + } = this.state; + + if (!isSectionWise || !sectionDeadline) return; + + if (Date.now() >= sectionDeadline) { + const nextSectionIndex = activeSectionIndex + 1; + + // 🔒 lock current section + const newLockedSections = [...lockedSections, activeSectionIndex]; + + // ✅ If next section exists + if (sections[nextSectionIndex]) { + const firstQuestion = sections[nextSectionIndex].questions[0]; + + this.setState( + { + activeSectionIndex: nextSectionIndex, + lockedSections: newLockedSections, + sectionDeadline: sections[nextSectionIndex].section_duration + ? Date.now() + + sections[nextSectionIndex].section_duration * 60 * 1000 + : null, + showQuestion: true, + }, + () => { + this.showDetailQuestion(firstQuestion); + } + ); + } else { + // ✅ No more sections → submit exam + this.onSubmitExam(); + } + } + }; + getExamModelToUpdate() { let tempAllQuestions = this.state.allQuestions; let questionsArray = []; @@ -118,8 +168,10 @@ class AttemptExam extends React.Component { componentWillUnmount() { this.stopExamUpdate(); + clearInterval(this.sectionTimer); } + sendHeartbeat() { this.interval = setInterval(() => { if (this.state.pauseUpdate) { @@ -138,46 +190,117 @@ class AttemptExam extends React.Component { } showDetailQuestion(question) { + const { + isSectionWise, + activeSectionIndex, + sectionDeadline, + sections, + lockedSections, + } = this.state; + + /* ============================ + 🔐 SECTION-WISE HARD GUARD + ============================ */ + if (isSectionWise) { + // ❌ Block visiting locked (previous) sections + if (lockedSections.includes(question.sectionIndx)) { + return; + } + + // ❌ Block jumping to any section other than active + if (question.sectionIndx !== activeSectionIndex) { + const timeLeft = sectionDeadline - Date.now(); + + // Section still running → NO movement + if (timeLeft > 0) { + return; + } + + // Time over → allow ONLY next section + if (question.sectionIndx !== activeSectionIndex + 1) { + return; + } + + // ✅ Lock current section & activate next + this.setState({ + lockedSections: [...lockedSections, activeSectionIndex], + activeSectionIndex: question.sectionIndx, + sectionDeadline: sections[question.sectionIndx]?.section_duration + ? Date.now() + + sections[question.sectionIndx].section_duration * 60 * 1000 + : null, + }); + } + } + + /* ============================ + ⬇️ SAFE QUESTION LOAD + ============================ */ + + // Save previous question progress this.updateAnswersForQuestion(this.state.activeDetailQuestion); - // Mark the question as visited + // Mark visited question.isVisited = true; - - // Update the question in both section and allQuestions arrays - this.state.sections[question.sectionIndx].questions[question.secQIndex] = question; - this.state.allQuestions[question.index - 1] = question; question.answer_duration = Date.now(); - // Save the current section index for returning to the same tab + // Update state (yes, this mutates — refactor later) + this.state.sections[question.sectionIndx].questions[question.secQIndex] = question; + this.state.allQuestions[question.index - 1] = question; + this.setState({ showQuestion: true, activeDetailQuestion: question, activeQuestionIndex: question.index - 1, sections: this.state.sections, allQuestions: this.state.allQuestions, - lastActiveSection: question.sectionIndx // Save the section index + lastActiveSection: question.sectionIndx, }); + // Send heartbeat update this.updateAnswersForQuestion(question); } + + onQuestionClick(index) { let q = this.state.allQuestions[index - 1]; this.showDetailQuestion(q); } - onTabPaneClick() { - // Only handle the back navigation if we're in question detail view - if (this.state.showQuestion) { - this.updateAnswersForQuestion(this.state.activeDetailQuestion); + onTabPaneClick = (key) => { + const newIndex = Number(key); + const { isSectionWise, activeSectionIndex, sectionDeadline, sections } = this.state; - this.setState({ - showQuestion: false, - activeDetailQuestion: {}, - activeQuestionIndex: -1 - }); + if (isSectionWise && newIndex !== activeSectionIndex) { + const timeLeft = sectionDeadline - Date.now(); + + if (timeLeft > 0) { + // ❌ Block navigation + return; + } + + // ✅ Allow next section ONLY + if (newIndex === activeSectionIndex + 1) { + this.setState({ + activeSectionIndex: newIndex, + sectionDeadline: sections[newIndex]?.section_duration + ? Date.now() + sections[newIndex].section_duration * 60 * 1000 + : null, + showQuestion: false, + }); + } + + return; } - } + + // Non section-wise exam + this.setState({ + activeSectionIndex: newIndex, + showQuestion: false, + }); + }; + onGetExamAttempt() { var attemptId; @@ -204,16 +327,71 @@ class AttemptExam extends React.Component { item.questions = quest; return item; }); - this.setState({ - attempt_id: attemptId, - exam_id: result.exam_id, - exam_language: result.exam_language, - exam_name: result.exam_name, - sections: sections1, - time_left: result.time_left, - deadline: Date.now() + result.time_left * 1000, - allQuestions: questionsArray, - }); + + // ✅ Detect section-wise timing + const isSectionWise = sections1.some( + sec => sec.section_duration && sec.section_duration > 0 + ); + + // ⏱️ total exam duration in seconds + const totalExamSeconds = sections1.reduce( + (sum, sec) => sum + sec.section_duration * 60, + 0 + ); + + // ⏳ elapsed time + let elapsedSeconds = totalExamSeconds - result.time_left; + + let activeSectionIndex = 0; + let sectionDeadline = null; + let lockedSections = []; + + // Walk through sections using ELAPSED time + for (let i = 0; i < sections1.length; i++) { + const sectionTime = sections1[i].section_duration * 60; + + if (elapsedSeconds >= sectionTime) { + // section already finished + elapsedSeconds -= sectionTime; + lockedSections.push(i); + continue; + } + + // current active section + activeSectionIndex = i; + sectionDeadline = + Date.now() + (sectionTime - elapsedSeconds) * 1000; + break; + } + + + + // ✅ Set initial state + this.setState( + { + attempt_id: attemptId, + exam_id: result.exam_id, + exam_language: result.exam_language, + exam_name: result.exam_name, + sections: sections1, + time_left: result.time_left, + deadline: Date.now() + result.time_left * 1000, + allQuestions: questionsArray, + + isSectionWise, + activeSectionIndex, + sectionDeadline, + lockedSections, + }, + () => { + // ✅ Auto-load first question of active section + const firstQuestion = + sections1[activeSectionIndex]?.questions[0]; + if (firstQuestion) { + this.showDetailQuestion(firstQuestion); + } + } + ); }); }); } @@ -275,14 +453,38 @@ class AttemptExam extends React.Component { } }; - callbackFunctionNext = (childData) => { - // ✅ Load next question - const q = childData; - const indx = q.index; - const nxtQuestion = this.state.allQuestions[indx]; - this.showDetailQuestion(nxtQuestion); + callbackFunctionNext = (currentQuestion) => { + const { + isSectionWise, + activeSectionIndex, + sections, + allQuestions, + } = this.state; + + const currentIndex = currentQuestion.index - 1; + const nextQuestion = allQuestions[currentIndex + 1]; + + if (!nextQuestion) return; + + // 🔐 SECTION-WISE HARD BLOCK + if (isSectionWise) { + const currentSectionQuestions = + sections[activeSectionIndex]?.questions || []; + + const lastQuestionOfSection = + currentSectionQuestions[currentSectionQuestions.length - 1]; + + // ❌ Do NOT allow cross-section jump + if (lastQuestionOfSection?.id === currentQuestion.id) { + return; + } + } + + // ✅ Safe to navigate + this.showDetailQuestion(nextQuestion); }; + callbackFunctionUpdateAnswer = (question) => { console.log("Answer Updated", question); } @@ -358,14 +560,20 @@ class AttemptExam extends React.Component { + ); listItems = this.state.sections.map((item, index) => ( - + {this.state.showQuestion ? ( activeQuestion ) : ( @@ -608,11 +816,11 @@ class AttemptExam extends React.Component { {listItems} diff --git a/src/component/Student/Exams/AttemptExam/QuestionDetail.js b/src/component/Student/Exams/AttemptExam/QuestionDetail.js index 9191776..c4fc642 100644 --- a/src/component/Student/Exams/AttemptExam/QuestionDetail.js +++ b/src/component/Student/Exams/AttemptExam/QuestionDetail.js @@ -23,15 +23,37 @@ class QuestionDetail extends React.Component { this.props.parentCallback(question); } - loadNextQuestion = () => { - this.props.parentCallbackNext(this.props.question); - }; +loadNextQuestion = () => { + const { isSectionWise } = this.props; + + if (isSectionWise && this.isLastQuestionOfSection()) { + return; // ❌ hard stop + } + + this.props.parentCallbackNext(this.props.question); +}; + onReviewQuestion = (val) => { this.state.question.isReviewMarked = val; this.sendData(this.state.question); } + isLastQuestionOfSection = () => { + const { question, sections, activeSectionIndex } = this.props; + + if (!sections || activeSectionIndex === undefined) return false; + + const currentSectionQuestions = + sections[activeSectionIndex]?.questions || []; + + const lastQuestion = + currentSectionQuestions[currentSectionQuestions.length - 1]; + + return lastQuestion?.id === question.id; +}; + + onAnswerChange = (event) => { let questionType = this.state.question.type_code; let id = event.target.value; @@ -200,13 +222,17 @@ class QuestionDetail extends React.Component { Clear Response + onClick={this.loadNextQuestion} + type="primary" + disabled={ + question.index >= totalQuestion || + (this.props.isSectionWise && this.isLastQuestionOfSection()) + } + style={{ borderRadius: '6px' }} +> + Next Question + + diff --git a/src/component/Student/Exams/LiveExams/LiveExams.js b/src/component/Student/Exams/LiveExams/LiveExams.js index 8aec98a..b7bf2f7 100644 --- a/src/component/Student/Exams/LiveExams/LiveExams.js +++ b/src/component/Student/Exams/LiveExams/LiveExams.js @@ -134,6 +134,7 @@ const LiveExams = () => { }} dataSource={data} renderItem={(item) => ( + console.log("Rendering item:", item), { console.log(data);