minor optimizations
This commit is contained in:
parent
fc8095c263
commit
57066232ba
|
|
@ -1,72 +1,72 @@
|
||||||
robots.txt,1761396900570,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49
|
robots.txt,1761396900570,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49
|
||||||
manifest.json,1761396900568,a9350a49aaac9fe94d3dd77b8270cc998c04ab97944a606189675022431faa51
|
manifest.json,1761396900568,a9350a49aaac9fe94d3dd77b8270cc998c04ab97944a606189675022431faa51
|
||||||
favicon.svg,1761396900561,a2a4880301751061a600b0bfc5c26fc413aed41e581516c4fa976bcb7fff6663
|
favicon.svg,1761396900561,a2a4880301751061a600b0bfc5c26fc413aed41e581516c4fa976bcb7fff6663
|
||||||
service-worker.js,1762457770128,ad69cb1c0350a03ad678222d00192749ed6ff25ed003315b5e237ae32768e74f
|
service-worker.js,1762592063259,2e3873d05399b33f4803ec73fde0b475540ac8be3c1490e8b39f6a198f5d7a8c
|
||||||
precache-manifest.c9ff8b878ec56029589dbb8855056c09.js,1762457770127,37f2f3562b774bdfc86acb6156e7190a9bf37539fd49faca9ff12307349280eb
|
index.html,1762592063258,e419f1600979d8b387a78db65e47df9bfe8919f5e551adeab77aebc7618b38ec
|
||||||
static/media/tru-fals-icon.d0b962d8.svg,1762457770050,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33
|
asset-manifest.json,1762592063260,9ca3dc9c7f54048d57a51c45a5c60d7fab8a32099f74145b0b4c5ca656ffb88c
|
||||||
static/media/sub-ques-icon.366b4f1e.svg,1762457770053,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425
|
static/media/tru-fals-icon.d0b962d8.svg,1762592063173,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33
|
||||||
static/media/student-engaged.53fb7b0b.svg,1762457770047,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf
|
static/media/sub-ques-icon.366b4f1e.svg,1762592063173,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425
|
||||||
static/media/translate.610ad011.svg,1762457770053,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120
|
precache-manifest.504fbcf3e83aa113d58cf42fe6b1c2c9.js,1762592063260,e322fce133be50446669bcf9e00d1ce71728b905d2a42924117ffc8277bfdd93
|
||||||
asset-manifest.json,1762457770128,b1cc877495546d439e8e8cbd2d1d5c0ea9605a261a30acd1344544bb77a88da3
|
static/media/student-engaged.53fb7b0b.svg,1762592063171,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf
|
||||||
static/media/quizexam.5545802e.svg,1762457770041,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569
|
static/media/questions-icon.3d3c1aaf.svg,1762592063169,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1
|
||||||
static/media/question.0c505ed9.svg,1762457770041,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36
|
static/media/question.0c505ed9.svg,1762592063164,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36
|
||||||
static/media/practice.f05e6f00.svg,1762457770042,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475
|
static/media/quizexam.5545802e.svg,1762592063164,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569
|
||||||
static/media/PracticeKiaLogo.a8336af5.svg,1762457769998,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8
|
static/media/translate.610ad011.svg,1762592063176,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120
|
||||||
static/media/questions-icon.3d3c1aaf.svg,1762457770047,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1
|
static/media/PracticeKiaLogo.a8336af5.svg,1762592063116,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8
|
||||||
static/media/perf-icon.1597a235.svg,1762457770048,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28
|
static/media/practice.f05e6f00.svg,1762592063164,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475
|
||||||
static/media/practice-icon.bf603115.svg,1762457770047,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c
|
static/media/practice-icon.bf603115.svg,1762592063169,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c
|
||||||
static/media/OdiSVGlogo.f0834bb1.svg,1762457770003,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235
|
static/media/performance.88855f12.svg,1762592063168,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9
|
||||||
static/media/mul-res-icon.8ef3b097.svg,1762457770048,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4
|
static/media/mul-res-icon.8ef3b097.svg,1762592063173,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4
|
||||||
static/media/performance.88855f12.svg,1762457770045,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9
|
static/media/mul-cho-icon.b3dc9ea9.svg,1762592063173,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f
|
||||||
static/media/locale-icon.b3596424.svg,1762457770046,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054
|
static/media/perf-icon.1597a235.svg,1762592063173,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28
|
||||||
static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1762457770037,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2
|
static/media/locale-icon.b3596424.svg,1762592063169,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054
|
||||||
static/media/mul-cho-icon.b3dc9ea9.svg,1762457770050,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f
|
static/media/OdiSVGlogo.f0834bb1.svg,1762592063125,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235
|
||||||
static/media/KaTeX_Size4-Regular.61522cd3.woff2,1762457770038,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8
|
static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1762592063160,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2
|
||||||
static/media/KaTeX_Typewriter-Regular.0e046058.woff,1762457770037,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873
|
static/media/KaTeX_Size4-Regular.61522cd3.woff2,1762592063160,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8
|
||||||
index.html,1762457770081,6cdb9fbf930842444b429f61fc721f122cf1b751cf77932af30c2f02f98b6c9c
|
static/media/KaTeX_Typewriter-Regular.0e046058.woff,1762592063160,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873
|
||||||
static/media/KaTeX_Size3-Regular.9108a400.woff2,1762457770032,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1
|
static/media/KaTeX_Size4-Regular.3045a61f.woff,1762592063160,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa
|
||||||
static/media/KaTeX_Size3-Regular.963af864.ttf,1762457770034,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678
|
static/media/KaTeX_Size3-Regular.963af864.ttf,1762592063160,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678
|
||||||
static/media/KaTeX_Size3-Regular.4de844d4.woff,1762457770034,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27
|
static/media/KaTeX_Size3-Regular.9108a400.woff2,1762592063156,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1
|
||||||
static/media/KaTeX_Size2-Regular.95a1da91.woff2,1762457770032,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2
|
static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1762592063162,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f
|
||||||
static/media/KaTeX_Size2-Regular.b0628bfd.woff,1762457770034,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de
|
static/media/KaTeX_Size2-Regular.b0628bfd.woff,1762592063152,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de
|
||||||
static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1762457770033,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9
|
static/media/KaTeX_Size3-Regular.4de844d4.woff,1762592063161,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27
|
||||||
static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1762457770030,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48
|
static/media/KaTeX_Size1-Regular.4788ba5b.woff,1762592063155,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d
|
||||||
static/media/KaTeX_Size1-Regular.4788ba5b.woff,1762457770032,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d
|
static/media/KaTeX_Size2-Regular.95a1da91.woff2,1762592063151,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2
|
||||||
static/media/KaTeX_Script-Regular.a82fa2a7.woff,1762457770032,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af
|
static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1762592063153,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9
|
||||||
static/media/KaTeX_Script-Regular.a189c37d.ttf,1762457770033,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a
|
static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1762592063149,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48
|
||||||
static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1762457770038,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64
|
static/media/KaTeX_Script-Regular.1b3161eb.woff2,1762592063149,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890
|
||||||
static/media/KaTeX_Script-Regular.1b3161eb.woff2,1762457770032,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890
|
static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1762592063145,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544
|
||||||
static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1762457770024,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544
|
static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1762592063155,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64
|
||||||
static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1762457770038,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f
|
static/media/KaTeX_Script-Regular.a189c37d.ttf,1762592063158,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a
|
||||||
static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1762457770030,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32
|
static/media/KaTeX_Script-Regular.a82fa2a7.woff,1762592063151,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af
|
||||||
static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1762457770039,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b
|
static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1762592063149,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b
|
||||||
static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1762457770030,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c
|
static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1762592063146,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c
|
||||||
static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1762457770039,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81
|
static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1762592063149,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86
|
||||||
static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1762457770021,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae
|
static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1762592063149,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32
|
||||||
static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1762457770030,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86
|
static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1762592063143,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81
|
||||||
static/media/KaTeX_Size4-Regular.3045a61f.woff,1762457770037,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa
|
static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1762592063155,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae
|
||||||
static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1762457770020,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a
|
static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1762592063151,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591
|
||||||
static/media/logo.0dd03933.png,1762457770003,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085
|
static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1762592063144,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a
|
||||||
static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1762457770029,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591
|
static/media/logo.0dd03933.png,1762592063125,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085
|
||||||
static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1762457770039,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b
|
static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1762592063161,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b
|
||||||
static/media/KaTeX_Math-Italic.ed7aea12.woff,1762457770019,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee
|
static/media/KaTeX_Math-Italic.ed7aea12.woff,1762592063143,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee
|
||||||
static/media/KaTeX_Math-Italic.fe5ed587.ttf,1762457770019,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa
|
static/media/KaTeX_Math-Italic.fe5ed587.ttf,1762592063145,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa
|
||||||
static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1762457770011,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013
|
static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1762592063132,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013
|
||||||
static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1762457770012,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2
|
static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1762592063133,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2
|
||||||
static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1762457770012,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf
|
static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1762592063132,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd
|
||||||
static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1762457770011,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e
|
static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1762592063133,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf
|
||||||
static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1762457770012,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd
|
static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1762592063126,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e
|
||||||
static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1762457770005,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a
|
static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1762592063132,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c
|
||||||
static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1762457770011,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038
|
static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1762592063126,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038
|
||||||
static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1762457770004,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8
|
static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1762592063132,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a
|
||||||
static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1762457770011,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c
|
static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1762592063129,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8
|
||||||
static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1762457770004,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39
|
static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1762592063132,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39
|
||||||
static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1762457770003,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662
|
static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1762592063132,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662
|
||||||
static/media/GrayscalePKLogo.6bb74404.svg,1762457770003,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2
|
static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1762592063126,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f
|
||||||
static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1762457770003,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f
|
static/media/GrayscalePKLogo.6bb74404.svg,1762592063123,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2
|
||||||
static/media/getFetch.2b2b7da4.cjs,1762457770003,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096
|
static/media/getFetch.2b2b7da4.cjs,1762592063123,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096
|
||||||
static/media/feature-2.36f8d7e2.webp,1762457770003,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c
|
static/media/feature-2.36f8d7e2.webp,1762592063125,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c
|
||||||
static/media/exam-icon.10f48851.svg,1762457770046,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693
|
static/media/exam-icon.10f48851.svg,1762592063169,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693
|
||||||
assets/images/locale-icon.svg,1761396900579,610498c7ca3b5800d268b1654473f0b1d79de2c6493a7c6982bef90456d35179
|
assets/images/locale-icon.svg,1761396900579,610498c7ca3b5800d268b1654473f0b1d79de2c6493a7c6982bef90456d35179
|
||||||
assets/images/icons/icon-96x96.png,1761396900602,43a8ac4df8945d7a44e3e4911032214f01eaea92267baa31a93e77942b424c73
|
assets/images/icons/icon-96x96.png,1761396900602,43a8ac4df8945d7a44e3e4911032214f01eaea92267baa31a93e77942b424c73
|
||||||
assets/images/icons/icon-72x72.png,1761396900600,a42f1df8ab0a8fe921573976d49158e1a2c52fe430460c869947f221aba30a94
|
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-152x152.png,1761396900590,95a5a117fbd5640f1f1f13c9923398545e3f5b66734ff6c8ce67c942319a8b67
|
||||||
assets/images/icons/icon-144x144.png,1761396900588,e42168e0e1abb5bd7811ebe1b5a2183d0ce287bf266c2efd8d97a23d23ca8d00
|
assets/images/icons/icon-144x144.png,1761396900588,e42168e0e1abb5bd7811ebe1b5a2183d0ce287bf266c2efd8d97a23d23ca8d00
|
||||||
assets/images/icons/icon-128x128.png,1761396900585,45b577c86e7c03fef868bfa3f96810c5b36f31156c32c0d85620d2e6fe1fc85b
|
assets/images/icons/icon-128x128.png,1761396900585,45b577c86e7c03fef868bfa3f96810c5b36f31156c32c0d85620d2e6fe1fc85b
|
||||||
static/media/delete-icon.da38c0f4.svg,1762457770053,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722
|
static/media/dashboard.8ec7624b.svg,1762592063164,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1
|
||||||
static/media/classes.3b73dba0.svg,1762457770042,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d
|
static/media/delete-icon.da38c0f4.svg,1762592063182,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722
|
||||||
static/media/class-icon.6afd34b5.svg,1762457770046,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e
|
static/media/classes.3b73dba0.svg,1762592063165,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d
|
||||||
static/media/Checkmark.1356376c.svg,1762457770061,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027
|
static/media/batch.3fcff66e.svg,1762592063165,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862
|
||||||
static/media/dashboard.8ec7624b.svg,1762457770039,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1
|
static/media/class-icon.6afd34b5.svg,1762592063169,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e
|
||||||
static/media/batch.3fcff66e.svg,1762457770042,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862
|
static/media/Checkmark.1356376c.svg,1762592063183,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027
|
||||||
static/media/batch-icon.bf664771.svg,1762457770047,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0
|
static/media/auth-BG.2835584f.svg,1762592063123,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf
|
||||||
static/media/KaTeX_Math-Italic.d8b7a801.woff2,1762457770019,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4
|
static/media/batch-icon.bf664771.svg,1762592063172,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0
|
||||||
static/media/auth-BG.2835584f.svg,1762457770003,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf
|
static/media/KaTeX_Math-Italic.d8b7a801.woff2,1762592063143,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4
|
||||||
static/media/KaTeX_Math-BoldItalic.48155e43.woff,1762457770019,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807
|
static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1762592063141,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2
|
||||||
static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1762457770024,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf
|
static/media/add-circle.0011f2bc.svg,1762592063169,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17
|
||||||
static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1762457770019,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2
|
static/media/KaTeX_Math-BoldItalic.48155e43.woff,1762592063142,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807
|
||||||
static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1762457770019,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d
|
static/media/KaTeX_Main-Regular.f1cdb692.woff,1762592063141,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1
|
||||||
static/media/KaTeX_Main-Italic.65297062.woff2,1762457770019,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12
|
static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1762592063141,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf
|
||||||
static/media/KaTeX_Main-Italic.8ffd28f6.woff,1762457770013,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7
|
static/media/KaTeX_Main-Italic.8ffd28f6.woff,1762592063141,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7
|
||||||
static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1762457770012,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72
|
static/media/KaTeX_Main-Italic.65297062.woff2,1762592063137,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12
|
||||||
static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1762457770012,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695
|
static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1762592063134,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72
|
||||||
static/media/KaTeX_Main-Regular.f1cdb692.woff,1762457770019,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1
|
static/media/KaTeX_Main-Italic.39349e0a.ttf,1762592063142,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282
|
||||||
static/media/KaTeX_Main-Italic.39349e0a.ttf,1762457770019,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282
|
static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1762592063135,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d
|
||||||
static/media/KaTeX_Main-Bold.a9382e25.woff2,1762457770011,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0
|
static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1762592063142,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695
|
||||||
static/media/add-circle.0011f2bc.svg,1762457770046,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17
|
static/media/KaTeX_Main-Bold.a9382e25.woff2,1762592063133,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0
|
||||||
static/media/KaTeX_Main-Bold.4cdba646.woff,1762457770018,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94
|
static/media/KaTeX_Main-Regular.818582da.ttf,1762592063141,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715
|
||||||
static/media/KaTeX_Main-Regular.818582da.ttf,1762457770019,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715
|
static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1762592063134,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a
|
||||||
static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1762457770013,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a
|
static/media/KaTeX_Main-Bold.4cdba646.woff,1762592063133,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94
|
||||||
static/media/KaTeX_Main-Bold.8e431f7e.ttf,1762457770012,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b
|
static/js/runtime-main.8e38f746.js,1762592063183,7abbb5f70c00c663738f8bd45449c09010174c2b33ab79da6c8f810ff5b5fe93
|
||||||
static/js/runtime-main.75b572a4.js.map,1762457770128,2a2cff71cbb0a33a7fc19a62b9ddb29ee62daf34ca4e083ac11f6bd19e79778e
|
static/js/runtime-main.8e38f746.js.map,1762592063259,98b6824dc3f1c6a12430e946a64b8092ff5d05fb96b55ca6d5c4fea01d94a485
|
||||||
static/js/runtime-main.75b572a4.js,1762457770061,c92c4f729dcdb432e2689a779d3de747722d060c62115cd311ede28ea9d53915
|
static/media/KaTeX_AMS-Regular.66c67820.woff2,1762592063125,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3
|
||||||
static/media/KaTeX_AMS-Regular.66c67820.woff2,1762457770003,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3
|
static/media/KaTeX_Main-Bold.8e431f7e.ttf,1762592063135,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b
|
||||||
static/media/feature-1.ea5c34ea.svg,1762457770003,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8
|
static/media/feature-1.ea5c34ea.svg,1762592063123,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8
|
||||||
static/media/KaTeX_AMS-Regular.10824af7.woff,1762457770011,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10
|
static/media/KaTeX_AMS-Regular.10824af7.woff,1762592063125,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10
|
||||||
static/media/KaTeX_AMS-Regular.56573229.ttf,1762457770003,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba
|
static/media/KaTeX_AMS-Regular.56573229.ttf,1762592063125,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba
|
||||||
static/media/feature-3.3d5d81e9.svg,1762457770003,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b
|
static/media/feature-3.3d5d81e9.svg,1762592063123,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b
|
||||||
static/js/4.344ddbd2.chunk.js.map,1762457770129,416de382811da86967563487c31d8dac1329a96d212747ed4f17a042d7d6e7a8
|
static/js/4.b1a8909a.chunk.js.map,1762592063261,cc29c410ad87d4a687401e2252b312788aefed8b7f53e786346b2dd60dfb3de3
|
||||||
static/js/4.344ddbd2.chunk.js,1762457770067,cf507701ec829cbb16a2a2973b39b77974eb7f9af7739fcdcf7a98821c104bb4
|
static/js/3.9b1c3a2b.chunk.js,1762592063193,394137fe0adad4357a1abd73710491aa4720ee89c553605e9e076e0f70a24dd8
|
||||||
static/js/3.d9765ecd.chunk.js.map,1762457770129,ae1d2413f24257daa6464aa05f2d172465239725339b6a9dc9e4a6b3ea296c11
|
static/js/3.9b1c3a2b.chunk.js.map,1762592063261,5044d0e0862c1cb2f043f63c402ded99e321dc799e6aabd0703bbe596047df77
|
||||||
static/js/3.d9765ecd.chunk.js,1762457770062,bdb739d2168ea1e2e2a07bf7923e3a3b6765644a780d52989c2a23282dfe8df1
|
static/js/4.b1a8909a.chunk.js,1762592063193,1b67d9265ad5a6c8ae015e37061ef359ea779782933587de7f991636980039dc
|
||||||
static/js/2.7364070b.chunk.js.LICENSE.txt,1762457770067,9c84bc4d2f8584d32d75e01e0317e22af1e39f5ac5ded3e2e4e34984704c172b
|
static/js/2.e7b4d3ba.chunk.js.LICENSE.txt,1762592063196,9c84bc4d2f8584d32d75e01e0317e22af1e39f5ac5ded3e2e4e34984704c172b
|
||||||
static/js/main.357a9655.chunk.js,1762457770053,de152990ce6baee2d3b2b7ef48d227fc1c07329a242a43eab91a4325b0e82870
|
static/js/main.2c73d00a.chunk.js,1762592063176,143b8201b77176fe2eff476c6b89c458d568fc1ec429ae35369cf1c3aaa884bd
|
||||||
static/css/4.629184c9.chunk.css,1762457770063,dfeba86da1256521df7a877a265d56d314f65016837f30878338c2b7fc62a6ab
|
static/css/4.629184c9.chunk.css,1762592063193,dfeba86da1256521df7a877a265d56d314f65016837f30878338c2b7fc62a6ab
|
||||||
static/css/3.6c5a3051.chunk.css,1762457770062,1ae150a22b1d42322775be9055605f93c75188e7081cfbdb206a59fc2f5ab8f1
|
static/css/main.f9fd7877.chunk.css,1762592063176,5dc175eca442114be3f947909ed2479c6499d01dbcabab1a5061b469276e5956
|
||||||
static/css/2.9f1a6119.chunk.css,1762457770061,5b08fdb85c1aaa0cf9acf7c4c35148cabc67c4897f21b89b8734390f584ad0a2
|
static/css/2.9f1a6119.chunk.css,1762592063184,5b08fdb85c1aaa0cf9acf7c4c35148cabc67c4897f21b89b8734390f584ad0a2
|
||||||
static/css/main.f9fd7877.chunk.css,1762457770053,5dc175eca442114be3f947909ed2479c6499d01dbcabab1a5061b469276e5956
|
static/css/3.6c5a3051.chunk.css,1762592063189,1ae150a22b1d42322775be9055605f93c75188e7081cfbdb206a59fc2f5ab8f1
|
||||||
static/css/4.629184c9.chunk.css.map,1762457770083,b82aa57e6e357dbb20067334e544e9b30d20ed0d928c13e6c61e1747e6f5a205
|
static/css/4.629184c9.chunk.css.map,1762592063204,b82aa57e6e357dbb20067334e544e9b30d20ed0d928c13e6c61e1747e6f5a205
|
||||||
static/css/3.6c5a3051.chunk.css.map,1762457770082,bcc301c3b3b46c96afc0fc028a6aa3cd299ccda538d7c6cb9ebc87f8de535796
|
static/css/3.6c5a3051.chunk.css.map,1762592063204,bcc301c3b3b46c96afc0fc028a6aa3cd299ccda538d7c6cb9ebc87f8de535796
|
||||||
static/css/2.9f1a6119.chunk.css.map,1762457770082,65fe44874775e5d32c6076f91b40fc5d120cecbf5da0d211d9303dbb56b2e6ec
|
static/css/main.f9fd7877.chunk.css.map,1762592063203,af13ec744c4b90787916b4a63000dfcaa2235e5aa03eb9efb8dc93a8df8af444
|
||||||
static/js/main.357a9655.chunk.js.map,1762457770128,cc52bc1cdf143f97fb998138f7ba63a35feb7928f670dbaed4072d086bd44908
|
static/css/2.9f1a6119.chunk.css.map,1762592063197,65fe44874775e5d32c6076f91b40fc5d120cecbf5da0d211d9303dbb56b2e6ec
|
||||||
static/css/main.f9fd7877.chunk.css.map,1762457770075,af13ec744c4b90787916b4a63000dfcaa2235e5aa03eb9efb8dc93a8df8af444
|
static/js/main.2c73d00a.chunk.js.map,1762592063259,c729a0fa16f6d0fb63ff1ef88dc15d953ec302639fa3c60934a6fd22f038c256
|
||||||
static/js/2.7364070b.chunk.js,1762457770064,df4d5d52ff5bc9a137a634c50e7372514191024cda2de41254c421b4144cb81b
|
static/js/2.e7b4d3ba.chunk.js,1762592063185,445a6c52b2f80391729b24e598f7129a1173eae04766b75a6426fd00935a9022
|
||||||
static/js/2.7364070b.chunk.js.map,1762457770146,94e8937258a39024064acd20a4e3110a0e78401e5d51226f7b7f861c0d76d5b3
|
static/js/2.e7b4d3ba.chunk.js.map,1762592063279,5cd308f446eeaecae140e0093fc6547e54caa53fc0cb68220276a38fe60630cb
|
||||||
|
|
|
||||||
|
|
@ -212,8 +212,27 @@ const Headerc = (props) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Header className="app-header">
|
<Header className="app-header">
|
||||||
<div className='left'>
|
<div className="left">
|
||||||
<Breadcrumb key={uniqueId()} separator={<CaretRightOutlined />} itemRender={itemRender} routes={page} />
|
{props.title ? (
|
||||||
|
<Typography.Title
|
||||||
|
level={4}
|
||||||
|
style={{
|
||||||
|
margin: 0,
|
||||||
|
color: "#000", // ✅ black title
|
||||||
|
fontWeight: 600,
|
||||||
|
letterSpacing: "0.3px",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{props.title}
|
||||||
|
</Typography.Title>
|
||||||
|
) : (
|
||||||
|
<Breadcrumb
|
||||||
|
key={uniqueId()}
|
||||||
|
separator={<CaretRightOutlined />}
|
||||||
|
itemRender={itemRender}
|
||||||
|
routes={page}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className='right'>
|
<div className='right'>
|
||||||
<ExpandCollapse>
|
<ExpandCollapse>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,30 @@
|
||||||
import React, { useRef } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Button, Layout, Menu, Typography } from 'antd';
|
import { Button, Layout, Menu, Typography } from 'antd';
|
||||||
import 'antd/dist/antd.css';
|
import 'antd/dist/antd.css';
|
||||||
import { CompassOutlined, DashboardOutlined, KeyOutlined, CalendarOutlined, BookOutlined, BarChartOutlined, ReadOutlined, NotificationOutlined, MenuOutlined, RightOutlined, LeftOutlined } from '@ant-design/icons';
|
import {
|
||||||
import { Link, NavLink } from 'react-router-dom';
|
DashboardOutlined,
|
||||||
import { authenticationService } from "../../_services";
|
KeyOutlined,
|
||||||
|
ReadOutlined,
|
||||||
|
RightOutlined,
|
||||||
|
UnorderedListOutlined,
|
||||||
|
UserOutlined,
|
||||||
|
EditOutlined,
|
||||||
|
StarOutlined,
|
||||||
|
FileTextOutlined,
|
||||||
|
PlusOutlined,
|
||||||
|
PlayCircleOutlined,
|
||||||
|
ClockCircleOutlined,
|
||||||
|
StopOutlined,
|
||||||
|
FileOutlined,
|
||||||
|
ExperimentOutlined,
|
||||||
|
CalendarOutlined,
|
||||||
|
PlusSquareOutlined,
|
||||||
|
TeamOutlined,
|
||||||
|
BuildOutlined,
|
||||||
|
SolutionOutlined,
|
||||||
|
} from '@ant-design/icons';
|
||||||
|
import { Link, useLocation } from 'react-router-dom';
|
||||||
|
import { authenticationService } from '../../_services';
|
||||||
|
|
||||||
import { ReactComponent as DashboardIcon } from '../assets/image/sider-icon/dashboard.svg';
|
import { ReactComponent as DashboardIcon } from '../assets/image/sider-icon/dashboard.svg';
|
||||||
import { ReactComponent as QuestionIcon } from '../assets/image/sider-icon/question.svg';
|
import { ReactComponent as QuestionIcon } from '../assets/image/sider-icon/question.svg';
|
||||||
|
|
@ -13,204 +34,247 @@ import { ReactComponent as BatchIcon } from '../assets/image/sider-icon/batch.sv
|
||||||
import { ReactComponent as ClassesIcon } from '../assets/image/sider-icon/classes.svg';
|
import { ReactComponent as ClassesIcon } from '../assets/image/sider-icon/classes.svg';
|
||||||
import { ReactComponent as PerfIcon } from '../assets/image/sider-icon/performance.svg';
|
import { ReactComponent as PerfIcon } from '../assets/image/sider-icon/performance.svg';
|
||||||
|
|
||||||
import OdiSVG from '../assets/image/GrayscalePKLogo.svg'
|
import OdiSVG from '../assets/image/GrayscalePKLogo.svg';
|
||||||
import './Main.css';
|
import './Main.css';
|
||||||
import Sidebar from '../Sidebar';
|
import Sidebar from '../Sidebar';
|
||||||
import MediaQuery from 'react-responsive';
|
import MediaQuery from 'react-responsive';
|
||||||
// import { set } from 'lodash';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const { SubMenu } = Menu;
|
const { SubMenu } = Menu;
|
||||||
const { Sider } = Layout;
|
const { Sider } = Layout;
|
||||||
|
|
||||||
const rootSubmenuKeys = ['question', 'quiz', 'practice', 'batches', 'classes', 'performance'];
|
export function Siderc() {
|
||||||
const questionItems = ['allQuestions', 'myQuestions', 'addQuestion', 'bookmarkQuestions', 'draftQuestions'];
|
const [collapse, setCollapse] = useState(false);
|
||||||
const quizItems = ['createExam', 'liveExam', 'upcomingExam', 'expiredExams', 'draftExams'];
|
const [openKeys, setOpenKeys] = useState([]);
|
||||||
const practiceItems = ['createPractise', 'livePractise', 'upcomingPractise', 'draftPractise'];
|
const location = useLocation();
|
||||||
const batchesItems = ['createbatch', 'viewbatch'];
|
const currentUser = authenticationService.currentUserValue;
|
||||||
const classesItems = ['class', 'viewclass'];
|
|
||||||
|
|
||||||
export function Siderc(props) {
|
// 🗺️ Map route -> submenu key
|
||||||
|
const submenuMap = {
|
||||||
|
liveExam: 'quiz',
|
||||||
|
liveExams: 'quiz',
|
||||||
|
upcomingExam: 'quiz',
|
||||||
|
upcomingExams: 'quiz',
|
||||||
|
expiredExams: 'quiz',
|
||||||
|
draftExams: 'quiz',
|
||||||
|
createExam: 'quiz',
|
||||||
|
|
||||||
const [collapse, setCollapse] = React.useState(false);
|
createPractise: 'practice',
|
||||||
const [state, setState] = React.useState({ current: 'dashboard' });
|
draftPractise: 'practice',
|
||||||
const [openKeys, setOpenKeys] = React.useState([]);
|
livePractise: 'practice',
|
||||||
const set = useRef(false);
|
upcomingPractise: 'practice',
|
||||||
|
|
||||||
|
createbatch: 'batches',
|
||||||
|
viewbatch: 'batches',
|
||||||
|
|
||||||
const handleClick = e => {
|
class: 'classes',
|
||||||
setState({ current: e.key });
|
viewclass: 'classes',
|
||||||
}
|
};
|
||||||
|
|
||||||
React.useEffect(() => {
|
const pathSegments = location.pathname.split('/');
|
||||||
let item;
|
const currentPath = pathSegments[pathSegments.length - 1];
|
||||||
const key = props.location?.pathname.split('/')[1];
|
|
||||||
if (!set.current && props.location?.pathname.split('/')[1] === 'dashboard') {
|
|
||||||
setState({ current: 'dashboard' });
|
|
||||||
set.current = true;
|
|
||||||
}
|
|
||||||
if (!set.current) {
|
|
||||||
for (item of questionItems) {
|
|
||||||
if (set.current) break;
|
|
||||||
selectMenuKey(key, item, rootSubmenuKeys[0], set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!set.current) {
|
|
||||||
for (item of quizItems) {
|
|
||||||
if (set.current) break;
|
|
||||||
selectMenuKey(key, item, rootSubmenuKeys[1], set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!set.current) {
|
|
||||||
for (item of practiceItems) {
|
|
||||||
if (set.current) break;
|
|
||||||
selectMenuKey(key, item, rootSubmenuKeys[2], set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!set.current) {
|
|
||||||
for (item of batchesItems) {
|
|
||||||
if (set.current) break;
|
|
||||||
selectMenuKey(key, item, rootSubmenuKeys[3], set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!set.current) {
|
|
||||||
for (item of classesItems) {
|
|
||||||
if (set.current) break;
|
|
||||||
selectMenuKey(key, item, rootSubmenuKeys[4], set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}, [props.location?.pathname]);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
useEffect(() => {
|
||||||
set.current = false;
|
const submenuKey = submenuMap[currentPath];
|
||||||
}, [props.location?.pathname]);
|
if (submenuKey) setOpenKeys([submenuKey]);
|
||||||
|
else setOpenKeys([]);
|
||||||
|
}, [currentPath]);
|
||||||
|
|
||||||
function selectMenuKey(location, item, submenu, set) {
|
const subMenuToggle = ({ key }) => {
|
||||||
if (!set.current && location === item) {
|
setOpenKeys((prev) => (prev.includes(key) ? [] : [key]));
|
||||||
// setOpenKeys(prev => [...prev, submenu]);
|
};
|
||||||
subMenuOpen({ key: submenu, fromLink: true });
|
|
||||||
setState({ current: props.location?.pathname.split('/')[props.location?.pathname.split('/').length - 1] });
|
|
||||||
set.current = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function subMenuOpen({ key, fromLink = false }) {
|
|
||||||
const ar = openKeys;
|
|
||||||
const res = ar.findIndex(item => item === key);
|
|
||||||
if (res === -1) {
|
|
||||||
setOpenKeys(prev => [...prev, key]);
|
|
||||||
}
|
|
||||||
if (res > -1 && !fromLink) {
|
|
||||||
const newAr = ar.filter((_, indx) => indx !== res);
|
|
||||||
setOpenKeys(_ => [...newAr]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Sidebar className={"main-sider-menu"} collapse={collapse} control={() => setCollapse(prev => (!prev))}
|
<Sidebar
|
||||||
otherStyles={{borderTopRightRadius: "40px", borderBottomRightRadius: "40px"}}>
|
className="main-sider-menu"
|
||||||
<MediaQuery maxWidth={992}>
|
collapse={collapse}
|
||||||
<Button type={"text"}
|
control={() => setCollapse((prev) => !prev)}
|
||||||
data-collapse-check={collapse? "0": "1"}
|
otherStyles={{
|
||||||
className='slider-trigger-button'
|
borderTopRightRadius: '40px',
|
||||||
onClick={() => setCollapse(prev => (!prev))}
|
borderBottomRightRadius: '40px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<MediaQuery maxWidth={992}>
|
||||||
|
<Button
|
||||||
|
type="text"
|
||||||
|
data-collapse-check={collapse ? '0' : '1'}
|
||||||
|
className="slider-trigger-button"
|
||||||
|
onClick={() => setCollapse((prev) => !prev)}
|
||||||
>
|
>
|
||||||
{/* {collapse?<RightOutlined />: <LeftOutlined />} */}
|
|
||||||
<RightOutlined />
|
<RightOutlined />
|
||||||
</Button>
|
</Button>
|
||||||
</MediaQuery>
|
</MediaQuery>
|
||||||
<Sider breakpoint="lg"
|
|
||||||
collapsed={false}
|
<Sider breakpoint="lg" collapsed={false} className="sidebar">
|
||||||
className="sidebar">
|
<div className="logo">
|
||||||
<div className="logo" style={{}}>
|
<a className="center-flex ml-3-5">
|
||||||
<a className='center-flex ml-3-5'>
|
<img src={OdiSVG} alt="PracticeKea" style={{ height: '50%' }} />
|
||||||
<img src={OdiSVG} alt="PracticeKea" style={{ height: "50%" }} />
|
<Typography.Title
|
||||||
<Typography.Title level={4} style={{ marginBlock: 0, marginLeft: 10, color: '#fff' }}>PracticeKea</Typography.Title>
|
level={4}
|
||||||
|
style={{
|
||||||
|
marginBlock: 0,
|
||||||
|
marginLeft: 10,
|
||||||
|
color: '#fff',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
PracticeKea
|
||||||
|
</Typography.Title>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{authenticationService.currentUserValue?.role_id !== 4 ?
|
|
||||||
|
|
||||||
|
{currentUser?.role_id !== 4 ? (
|
||||||
<Menu
|
<Menu
|
||||||
mode="inline"
|
mode="inline"
|
||||||
onClick={handleClick}
|
selectedKeys={[currentPath]}
|
||||||
selectedKeys={[state.current]}
|
|
||||||
openKeys={openKeys}
|
openKeys={openKeys}
|
||||||
|
onOpenChange={setOpenKeys}
|
||||||
style={{ height: '100%' }}
|
style={{ height: '100%' }}
|
||||||
>
|
>
|
||||||
<Menu.Item key="dashboard" icon={<DashboardIcon />}> <NavLink to="/dashboard">Dashboard</NavLink></Menu.Item>
|
<Menu.Item key="dashboard" icon={<DashboardIcon />}>
|
||||||
<SubMenu key="question" icon={<QuestionIcon />} title="Question" onTitleClick={subMenuOpen}>
|
<Link to="/dashboard">Dashboard</Link>
|
||||||
{authenticationService.currentUserValue?.role_id === 2 && <Menu.Item key="allQuestions"> <NavLink to="/allQuestions">All Questions</NavLink></Menu.Item>}
|
</Menu.Item>
|
||||||
<Menu.Item key="myQuestions"> <Link to="/myQuestions">My Questions</Link></Menu.Item>
|
|
||||||
<Menu.Item key="addQuestion"> <Link to="/addQuestion">Create Question</Link></Menu.Item>
|
{/* 🧾 Questions Section */}
|
||||||
<Menu.Item key="bookmarkQuestions"><Link to="/bookmarkQuestions">Bookmarked</Link></Menu.Item>
|
<SubMenu
|
||||||
<Menu.Item key="draftQuestions"> <Link to="/draftQuestions">Draft Questions</Link></Menu.Item>
|
key="question"
|
||||||
</SubMenu>
|
icon={<QuestionIcon />}
|
||||||
<SubMenu key="quiz" icon={<QuizIcon />} title="Quiz/Exam" onTitleClick={subMenuOpen}>
|
title="Question"
|
||||||
<Menu.Item key="createExam"><Link to="/createExam">Create Exam</Link></Menu.Item>
|
onTitleClick={subMenuToggle}
|
||||||
<Menu.Item key="liveExam"><Link to="/liveExam">Live Exams</Link></Menu.Item>
|
>
|
||||||
<Menu.Item key="upcomingExam"><Link to="/upcomingExam">Upcoming Exams</Link></Menu.Item>
|
{currentUser?.role_id === 2 && (
|
||||||
<Menu.Item key="expiredExams"><Link to="/expiredExams">Expired Exams</Link></Menu.Item>
|
<Menu.Item key="allQuestions" icon={<UnorderedListOutlined />}>
|
||||||
<Menu.Item key="draftExams"><Link to="/draftExams">Draft Exams</Link></Menu.Item>
|
<Link to="/allQuestions">All Questions</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
)}
|
||||||
|
<Menu.Item key="myQuestions" icon={<UserOutlined />}>
|
||||||
|
<Link to="/myQuestions">My Questions</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="addQuestion" icon={<EditOutlined />}>
|
||||||
|
<Link to="/addQuestion">Create Question</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="bookmarkQuestions" icon={<StarOutlined />}>
|
||||||
|
<Link to="/bookmarkQuestions">Bookmarked</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="draftQuestions" icon={<FileTextOutlined />}>
|
||||||
|
<Link to="/draftQuestions">Draft Questions</Link>
|
||||||
|
</Menu.Item>
|
||||||
</SubMenu>
|
</SubMenu>
|
||||||
|
|
||||||
<SubMenu key="practice" icon={<PracticeIcon />} title="Practice" onTitleClick={subMenuOpen}>
|
{/* 🧩 Quiz Section */}
|
||||||
<Menu.Item key="createPractise"><Link to="/createPractise">Create Practise</Link></Menu.Item>
|
<SubMenu
|
||||||
<Menu.Item key="draftPractise"><Link to="/draftPractise">Draft Practises</Link></Menu.Item>
|
key="quiz"
|
||||||
<Menu.Item key="livePractise"><Link to="/livePractise">Live Practises</Link></Menu.Item>
|
icon={<QuizIcon />}
|
||||||
<Menu.Item key="upcomingPractise"><Link to="/upcomingPractise">Upcoming Practises</Link></Menu.Item>
|
title="Quiz/Exam"
|
||||||
|
onTitleClick={subMenuToggle}
|
||||||
|
>
|
||||||
|
<Menu.Item key="createExam" icon={<PlusOutlined />}>
|
||||||
|
<Link to="/createExam">Create Exam</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="liveExam" icon={<PlayCircleOutlined />}>
|
||||||
|
<Link to="/liveExam">Live Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="upcomingExam" icon={<ClockCircleOutlined />}>
|
||||||
|
<Link to="/upcomingExam">Upcoming Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="expiredExams" icon={<StopOutlined />}>
|
||||||
|
<Link to="/expiredExams">Expired Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="draftExams" icon={<FileOutlined />}>
|
||||||
|
<Link to="/draftExams">Draft Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
</SubMenu>
|
</SubMenu>
|
||||||
|
|
||||||
|
{/* 🧠 Practice Section */}
|
||||||
{authenticationService.currentUserValue?.role_id === 2 && <SubMenu key="batches" icon={<BatchIcon />} title="Batch" onTitleClick={subMenuOpen}>
|
<SubMenu
|
||||||
<Menu.Item key="createbatch" icon={<ReadOutlined />}> <Link to="/createbatch">Create Batch</Link></Menu.Item>
|
key="practice"
|
||||||
<Menu.Item key="viewbatch" icon={<ReadOutlined />}> <Link to="/viewbatch">View All Batch</Link></Menu.Item>
|
icon={<PracticeIcon />}
|
||||||
</SubMenu>}
|
title="Practice"
|
||||||
{authenticationService.currentUserValue?.role_id === 2 && <SubMenu key="classes" icon={<ClassesIcon />} title="Classes" onTitleClick={subMenuOpen}>
|
onTitleClick={subMenuToggle}
|
||||||
{/* <Menu.Item key="viewClass" icon={<ReadOutlined />}> <Link to="/classes">Student Class</Link></Menu.Item> */}
|
>
|
||||||
<Menu.Item key="class" icon={<ReadOutlined />}> <Link to="/class">Create Class</Link></Menu.Item>
|
<Menu.Item key="createPractise" icon={<ExperimentOutlined />}>
|
||||||
<Menu.Item key="viewclass" icon={<ReadOutlined />}> <Link to="/viewclass">View All Class</Link></Menu.Item>
|
<Link to="/createPractise">Create Practise</Link>
|
||||||
</SubMenu>}
|
</Menu.Item>
|
||||||
|
<Menu.Item key="draftPractise" icon={<FileTextOutlined />}>
|
||||||
<SubMenu key="performance" icon={<PerfIcon />} title="Performance" onTitleClick={subMenuOpen}>
|
<Link to="/draftPractise">Draft Practises</Link>
|
||||||
{/* <Menu.Item key="9">option9</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="10">option10</Menu.Item>
|
<Menu.Item key="livePractise" icon={<PlayCircleOutlined />}>
|
||||||
<Menu.Item key="11">option11</Menu.Item>
|
<Link to="/livePractise">Live Practises</Link>
|
||||||
<Menu.Item key="12">option12</Menu.Item> */}
|
</Menu.Item>
|
||||||
|
<Menu.Item key="upcomingPractise" icon={<CalendarOutlined />}>
|
||||||
|
<Link to="/upcomingPractise">Upcoming Practises</Link>
|
||||||
|
</Menu.Item>
|
||||||
</SubMenu>
|
</SubMenu>
|
||||||
</Menu> :
|
|
||||||
|
{/* 🧱 Batch Section */}
|
||||||
|
{currentUser?.role_id === 2 && (
|
||||||
|
<SubMenu
|
||||||
|
key="batches"
|
||||||
|
icon={<BatchIcon />}
|
||||||
|
title="Batch"
|
||||||
|
onTitleClick={subMenuToggle}
|
||||||
|
>
|
||||||
|
<Menu.Item key="createbatch" icon={<PlusSquareOutlined />}>
|
||||||
|
<Link to="/createbatch">Create Batch</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="viewbatch" icon={<TeamOutlined />}>
|
||||||
|
<Link to="/viewbatch">View All Batch</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
</SubMenu>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* 🏫 Classes Section */}
|
||||||
|
{currentUser?.role_id === 2 && (
|
||||||
|
<SubMenu
|
||||||
|
key="classes"
|
||||||
|
icon={<ClassesIcon />}
|
||||||
|
title="Classes"
|
||||||
|
onTitleClick={subMenuToggle}
|
||||||
|
>
|
||||||
|
<Menu.Item key="class" icon={<BuildOutlined />}>
|
||||||
|
<Link to="/class">Create Class</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="viewclass" icon={<SolutionOutlined />}>
|
||||||
|
<Link to="/viewclass">View All Class</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
</SubMenu>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* 📊 Performance */}
|
||||||
|
<SubMenu
|
||||||
|
key="performance"
|
||||||
|
icon={<PerfIcon />}
|
||||||
|
title="Performance"
|
||||||
|
onTitleClick={subMenuToggle}
|
||||||
|
></SubMenu>
|
||||||
|
</Menu>
|
||||||
|
) : (
|
||||||
|
// ---------------------- STUDENT SIDEBAR ----------------------
|
||||||
<Menu
|
<Menu
|
||||||
mode="inline"
|
mode="inline"
|
||||||
onClick={handleClick}
|
selectedKeys={[currentPath]}
|
||||||
selectedKeys={[state.current]}
|
openKeys={openKeys}
|
||||||
defaultOpenKeys={['dashboard']}
|
onOpenChange={setOpenKeys}
|
||||||
style={{ height: '100%', borderRight: '0px solid #f0f2f5' }}
|
style={{ height: '100%', borderRight: '0' }}
|
||||||
>
|
>
|
||||||
<Menu.Item key="dashboard" icon={<DashboardOutlined />}> <Link to="/dashboard">Dashboard</Link></Menu.Item>
|
<Menu.Item key="dashboard" icon={<DashboardOutlined />}>
|
||||||
{/* <SubMenu key="question" icon={<CompassOutlined />} title="Question">
|
<Link to="/dashboard">Dashboard</Link>
|
||||||
<Menu.Item key="4">Bookmarked</Menu.Item>
|
</Menu.Item>
|
||||||
|
|
||||||
</SubMenu> */}
|
|
||||||
<SubMenu key="quiz" icon={<KeyOutlined />} title="Quiz/Exam">
|
|
||||||
<Menu.Item key="8"><Link to="/liveExams">Live Exams</Link></Menu.Item>
|
|
||||||
<Menu.Item key="9"><Link to="/upcomingExams">Upcoming Exams</Link></Menu.Item>
|
|
||||||
|
|
||||||
|
<SubMenu
|
||||||
|
key="quiz"
|
||||||
|
icon={<KeyOutlined />}
|
||||||
|
title="Quiz/Exam"
|
||||||
|
onTitleClick={subMenuToggle}
|
||||||
|
>
|
||||||
|
<Menu.Item key="liveExams" icon={<PlayCircleOutlined />}>
|
||||||
|
<Link to="/liveExams">Live Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="upcomingExams" icon={<ClockCircleOutlined />}>
|
||||||
|
<Link to="/upcomingExams">Upcoming Exams</Link>
|
||||||
|
</Menu.Item>
|
||||||
</SubMenu>
|
</SubMenu>
|
||||||
<SubMenu key="practice" icon={<BookOutlined />} title="Practice">
|
|
||||||
<Menu.Item key="9"><Link to="/practiceExams">Practice Exams</Link></Menu.Item>
|
|
||||||
</SubMenu>
|
|
||||||
{/* <SubMenu key="calendar" icon={<CalendarOutlined />} title="Calendar">
|
|
||||||
<Menu.Item key="14">option9</Menu.Item>
|
|
||||||
<Menu.Item key="15">option10</Menu.Item>
|
|
||||||
<Menu.Item key="16">option11</Menu.Item>
|
|
||||||
<Menu.Item key="17">option12</Menu.Item>
|
|
||||||
</SubMenu> */}
|
|
||||||
</Menu>
|
</Menu>
|
||||||
}
|
)}
|
||||||
</Sider>
|
</Sider>
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import "./LiveExams.css";
|
import "./LiveExams.css";
|
||||||
import {
|
import {
|
||||||
Layout,
|
Layout,
|
||||||
|
|
@ -17,27 +17,26 @@ import {
|
||||||
import "antd/dist/antd.css";
|
import "antd/dist/antd.css";
|
||||||
import { authenticationService } from "../../../../_services";
|
import { authenticationService } from "../../../../_services";
|
||||||
import { Siderc } from "../../../Main/Siderc";
|
import { Siderc } from "../../../Main/Siderc";
|
||||||
import { Headerc } from "../../../Main/Headerc";
|
import Headerc from "../../../Main/FuncHeader";
|
||||||
import { selectorService } from "../../../../services/selectorService";
|
import { selectorService } from "../../../../services/selectorService";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
|
|
||||||
const { Content } = Layout;
|
const { Content } = Layout;
|
||||||
const { Title, Text } = Typography;
|
const { Title, Text } = Typography;
|
||||||
|
|
||||||
class LiveExams extends React.Component {
|
const LiveExams = () => {
|
||||||
state = {
|
const [classLoading, setClassLoading] = useState(true);
|
||||||
currentUser: authenticationService.currentUserValue,
|
const [language, setLanguage] = useState([]);
|
||||||
batch: "1",
|
const [data, setData] = useState([]);
|
||||||
data: [],
|
const [layout, setLayout] = useState("card");
|
||||||
total_count: 0,
|
const [totalCount, setTotalCount] = useState(0);
|
||||||
layout: "card", // 'card' or 'detail'
|
const currentUser = authenticationService.currentUserValue;
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount() {
|
useEffect(() => {
|
||||||
this.loadExams(1);
|
loadExams(1);
|
||||||
}
|
}, []);
|
||||||
|
|
||||||
loadExams = (pageNumber) => {
|
const loadExams = (pageNumber) => {
|
||||||
const json = {
|
const json = {
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
pageNumber,
|
pageNumber,
|
||||||
|
|
@ -47,6 +46,7 @@ class LiveExams extends React.Component {
|
||||||
selectorService.loadLiveExams(json).then((data1) => {
|
selectorService.loadLiveExams(json).then((data1) => {
|
||||||
const result = data1?.result || {};
|
const result = data1?.result || {};
|
||||||
const exams = result.exams || [];
|
const exams = result.exams || [];
|
||||||
|
|
||||||
const formattedData = exams.map((exam, index) => {
|
const formattedData = exams.map((exam, index) => {
|
||||||
const start = new Date(exam.start_date);
|
const start = new Date(exam.start_date);
|
||||||
const end = new Date(exam.end_date);
|
const end = new Date(exam.end_date);
|
||||||
|
|
@ -69,58 +69,52 @@ class LiveExams extends React.Component {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
this.setState({
|
setData(formattedData);
|
||||||
data: formattedData,
|
setTotalCount(result.total_count);
|
||||||
total_count: result.total_count,
|
setClassLoading(false);
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
|
||||||
const { data, total_count, layout } = this.state;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<Siderc />
|
<Siderc />
|
||||||
<Layout>
|
<Layout>
|
||||||
<Headerc />
|
<Headerc title={"🎯 Live Exams"} location={{ pathname: "/liveExams" }}
|
||||||
|
isClassLoading={classLoading} setLanguage={setLanguage} />
|
||||||
<Content
|
<Content
|
||||||
style={{
|
style={{
|
||||||
padding: "24px",
|
padding: "24px",
|
||||||
background: "#f0f3f8", // same as topbar
|
background: "#f0f3f8",
|
||||||
minHeight: "100vh",
|
minHeight: "100vh",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* Header + Buttons */}
|
{/* Header + Buttons */}
|
||||||
<Space
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
justifyContent: "space-between",
|
justifyContent: "flex-end",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
|
width: "100%",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Title level={3} style={{ margin: 0, color: "#222", fontWeight: 600 }}>
|
|
||||||
🎯 Live Exams
|
|
||||||
</Title>
|
|
||||||
|
|
||||||
<Button.Group>
|
<Button.Group>
|
||||||
<Button
|
<Button
|
||||||
type={layout === "card" ? "primary" : "default"}
|
type={layout === "card" ? "primary" : "default"}
|
||||||
icon={<AppstoreOutlined />}
|
icon={<AppstoreOutlined />}
|
||||||
onClick={() => this.setState({ layout: "card" })}
|
onClick={() => setLayout("card")}
|
||||||
>
|
>
|
||||||
Card View
|
Card View
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
type={layout === "detail" ? "primary" : "default"}
|
type={layout === "detail" ? "primary" : "default"}
|
||||||
icon={<UnorderedListOutlined />}
|
icon={<UnorderedListOutlined />}
|
||||||
onClick={() => this.setState({ layout: "detail" })}
|
onClick={() => setLayout("detail")}
|
||||||
>
|
>
|
||||||
Detail View
|
Detail View
|
||||||
</Button>
|
</Button>
|
||||||
</Button.Group>
|
</Button.Group>
|
||||||
</Space>
|
</div>
|
||||||
|
|
||||||
{/* Card Layout */}
|
{/* Card Layout */}
|
||||||
{layout === "card" ? (
|
{layout === "card" ? (
|
||||||
|
|
@ -135,8 +129,8 @@ class LiveExams extends React.Component {
|
||||||
}}
|
}}
|
||||||
pagination={{
|
pagination={{
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
total: total_count,
|
total: totalCount,
|
||||||
onChange: (page) => this.loadExams(page),
|
onChange: (page) => loadExams(page),
|
||||||
}}
|
}}
|
||||||
dataSource={data}
|
dataSource={data}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
|
|
@ -153,7 +147,7 @@ class LiveExams extends React.Component {
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Space direction="vertical" size="small" style={{ width: "100%" }}>
|
<Space direction="vertical" size="small" style={{ width: "100%" }}>
|
||||||
{/* Top Section: Avatar + Title + Days Left */}
|
{/* Top Section */}
|
||||||
<Space align="center" style={{ width: "100%", justifyContent: "flex-start" }}>
|
<Space align="center" style={{ width: "100%", justifyContent: "flex-start" }}>
|
||||||
<Avatar
|
<Avatar
|
||||||
src={`https://s3bucket-for-oa.s3.ap-south-1.amazonaws.com/${9}/exams/${item.id}.png`}
|
src={`https://s3bucket-for-oa.s3.ap-south-1.amazonaws.com/${9}/exams/${item.id}.png`}
|
||||||
|
|
@ -161,7 +155,6 @@ class LiveExams extends React.Component {
|
||||||
shape="square"
|
shape="square"
|
||||||
/>
|
/>
|
||||||
<div style={{ flex: 1, marginLeft: 10 }}>
|
<div style={{ flex: 1, marginLeft: 10 }}>
|
||||||
{/* Exam Name + Days Left Inline */}
|
|
||||||
<div style={{ display: "flex", alignItems: "center", flexWrap: "wrap" }}>
|
<div style={{ display: "flex", alignItems: "center", flexWrap: "wrap" }}>
|
||||||
<Title
|
<Title
|
||||||
level={5}
|
level={5}
|
||||||
|
|
@ -192,7 +185,9 @@ class LiveExams extends React.Component {
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{item.daysLeft > 0 ? `${item.daysLeft} days left` : "Ended"}
|
{item.daysLeft > 0
|
||||||
|
? `${item.daysLeft} days left`
|
||||||
|
: "Ended"}
|
||||||
</Tag>
|
</Tag>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -231,7 +226,16 @@ class LiveExams extends React.Component {
|
||||||
<Link
|
<Link
|
||||||
to={{
|
to={{
|
||||||
pathname: "/instructions",
|
pathname: "/instructions",
|
||||||
state: { examId: item.id, duration: item.duration, totalQuestions: item.questions, totalMarks: item.marks, startDate: item.startDate, endDate: item.endDate, examName: item.name, daysLeft: item.daysLeft },
|
state: {
|
||||||
|
examId: item.id,
|
||||||
|
duration: item.duration,
|
||||||
|
totalQuestions: item.questions,
|
||||||
|
totalMarks: item.marks,
|
||||||
|
startDate: item.startDate,
|
||||||
|
endDate: item.endDate,
|
||||||
|
examName: item.name,
|
||||||
|
daysLeft: item.daysLeft,
|
||||||
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button type="primary">
|
<Button type="primary">
|
||||||
|
|
@ -255,16 +259,15 @@ class LiveExams extends React.Component {
|
||||||
</List.Item>
|
</List.Item>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
) : (
|
) : (
|
||||||
// Detail Layout (Horizontal Cards)
|
// Detail Layout
|
||||||
<List
|
<List
|
||||||
itemLayout="horizontal"
|
itemLayout="horizontal"
|
||||||
dataSource={data}
|
dataSource={data}
|
||||||
pagination={{
|
pagination={{
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
total: total_count,
|
total: totalCount,
|
||||||
onChange: (page) => this.loadExams(page),
|
onChange: (page) => loadExams(page),
|
||||||
}}
|
}}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
<List.Item style={{ padding: "12px 0" }}>
|
<List.Item style={{ padding: "12px 0" }}>
|
||||||
|
|
@ -286,7 +289,6 @@ class LiveExams extends React.Component {
|
||||||
width: "100%",
|
width: "100%",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* Left Section - Image + Details */}
|
|
||||||
<Space align="start">
|
<Space align="start">
|
||||||
<Avatar
|
<Avatar
|
||||||
src={`https://s3bucket-for-oa.s3.ap-south-1.amazonaws.com/${9}/exams/${item.id}.png`}
|
src={`https://s3bucket-for-oa.s3.ap-south-1.amazonaws.com/${9}/exams/${item.id}.png`}
|
||||||
|
|
@ -295,7 +297,6 @@ class LiveExams extends React.Component {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div style={{ flex: 1, marginLeft: 16 }}>
|
<div style={{ flex: 1, marginLeft: 16 }}>
|
||||||
{/* Title + Days Left Tag close together */}
|
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
|
|
@ -347,7 +348,6 @@ class LiveExams extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
{/* Right Section - Centered Buttons */}
|
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
|
|
@ -361,7 +361,16 @@ class LiveExams extends React.Component {
|
||||||
<Link
|
<Link
|
||||||
to={{
|
to={{
|
||||||
pathname: "/instructions",
|
pathname: "/instructions",
|
||||||
state: { examId: item.id, duration: item.duration, totalQuestions: item.questions, totalMarks: item.marks, startDate: item.startDate, endDate: item.endDate, examName: item.name, daysLeft: item.daysLeft },
|
state: {
|
||||||
|
examId: item.id,
|
||||||
|
duration: item.duration,
|
||||||
|
totalQuestions: item.questions,
|
||||||
|
totalMarks: item.marks,
|
||||||
|
startDate: item.startDate,
|
||||||
|
endDate: item.endDate,
|
||||||
|
examName: item.name,
|
||||||
|
daysLeft: item.daysLeft,
|
||||||
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button type="primary">
|
<Button type="primary">
|
||||||
|
|
@ -391,7 +400,6 @@ class LiveExams extends React.Component {
|
||||||
</Layout>
|
</Layout>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
|
||||||
export default LiveExams;
|
export default LiveExams;
|
||||||
|
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
.ReportPlotHeader{
|
|
||||||
display: flex;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 0px 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
}
|
|
||||||
.ReportPlotSectionHeader{
|
|
||||||
display: flex;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 0px 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
align-items: center;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
.ReportPlot{
|
|
||||||
height: 100%; width: 100%; user-select: none; pointer-events: none; touch-action: none; position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PlotCardSection{
|
|
||||||
min-height: 150px;
|
|
||||||
min-width: 300px;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
padding: 24px 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
grid-column: span 5;
|
|
||||||
height: 150px;
|
|
||||||
border-radius: 16px;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: rgb(231, 230, 230);
|
|
||||||
vertical-align: top;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PlotCard{
|
|
||||||
min-height: 150px;
|
|
||||||
min-width: 320px;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
padding: 24px 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
grid-column: span 5;
|
|
||||||
height: 350px;
|
|
||||||
border-radius: 16px;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: rgb(231, 230, 230);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlotCardQuestion{
|
|
||||||
min-height: 150px;
|
|
||||||
min-width: 220px;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
padding: 24px 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
grid-column: span 5;
|
|
||||||
height: 350px;
|
|
||||||
border-radius: 16px;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: rgb(231, 230, 230);
|
|
||||||
}
|
|
||||||
|
|
||||||
td.firstColumnReport{
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
.ReportTabHeader{
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.SectionTabPane{
|
|
||||||
padding-top: 30px;
|
|
||||||
}
|
|
||||||
.SectionHeaderReport{
|
|
||||||
padding-top: 40px;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
font-size: 21px;
|
|
||||||
line-height: 1.75rem;
|
|
||||||
font-weight: 400;
|
|
||||||
letter-spacing: 0px;
|
|
||||||
text-decoration: inherit;
|
|
||||||
text-transform: inherit;
|
|
||||||
}
|
|
||||||
.Difficult{
|
|
||||||
border: 1px solid rgba(21,15,45,0.12);
|
|
||||||
border-radius: 24px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.DifficultCard{
|
|
||||||
padding:20px;
|
|
||||||
}
|
|
||||||
.DifficultCardHeader{
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 14px;
|
|
||||||
border-bottom-style: solid;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-bottom-color: rgb(231, 230, 230);
|
|
||||||
}
|
|
||||||
|
|
||||||
.createExamLayout{
|
|
||||||
background-color: #F5F7FA;
|
|
||||||
}
|
|
||||||
|
|
@ -305,7 +305,7 @@ class Report extends React.Component {
|
||||||
key={secIndex}
|
key={secIndex}
|
||||||
>
|
>
|
||||||
<Row>
|
<Row>
|
||||||
<Col span={20} offset={1}>
|
<Col span={22} offset={1} style={{ margin: "0 auto" }}>
|
||||||
<div style={{ width: "100%", marginTop: "32px" }}>
|
<div style={{ width: "100%", marginTop: "32px" }}>
|
||||||
<h3
|
<h3
|
||||||
id="components-anchor-overall"
|
id="components-anchor-overall"
|
||||||
|
|
@ -1290,9 +1290,9 @@ class Report extends React.Component {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout style={{ minHeight: "100vh", backgroundColor: "#f0f2f5" }}>
|
<Layout style={{ minHeight: "100vh", backgroundColor: "#f0f2f5" }}>
|
||||||
<Siderc />
|
{/* <Siderc /> */}
|
||||||
<Layout>
|
<Layout>
|
||||||
<Headerc />
|
{/* <Headerc /> */}
|
||||||
<Content
|
<Content
|
||||||
style={{
|
style={{
|
||||||
padding: "32px",
|
padding: "32px",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue