From 46e31cfd1ce9385156ca4616eac9501f0f61ef3f Mon Sep 17 00:00:00 2001 From: Khaled Date: Sun, 26 Nov 2023 19:04:31 +0330 Subject: [PATCH 01/16] feat: new env variable added --- .env | 1 + .env.development | 1 + .env.test | 1 + src/index.jsx | 1 + 4 files changed, 4 insertions(+) diff --git a/.env b/.env index 62cf2ad666..d1e0a67366 100644 --- a/.env +++ b/.env @@ -46,3 +46,4 @@ TERMS_OF_SERVICE_URL='' TWITTER_HASHTAG='' TWITTER_URL='' USER_INFO_COOKIE_NAME='' +AC_INSTANCE_CONFIG_API_URL='/admin-console/api/instance-config/' diff --git a/.env.development b/.env.development index 94f8a19332..ff7058f793 100644 --- a/.env.development +++ b/.env.development @@ -46,3 +46,4 @@ TWITTER_HASHTAG='myedxjourney' TWITTER_URL='https://twitter.com/edXOnline' USER_INFO_COOKIE_NAME='edx-user-info' SESSION_COOKIE_DOMAIN='localhost' +AC_INSTANCE_CONFIG_API_URL='/admin-console/api/instance-config/' diff --git a/.env.test b/.env.test index d183517053..dd5de41701 100644 --- a/.env.test +++ b/.env.test @@ -45,3 +45,4 @@ TERMS_OF_SERVICE_URL='https://www.edx.org/edx-terms-service' TWITTER_HASHTAG='myedxjourney' TWITTER_URL='https://twitter.com/edXOnline' USER_INFO_COOKIE_NAME='edx-user-info' +AC_INSTANCE_CONFIG_API_URL='/admin-console/api/instance-config/' \ No newline at end of file diff --git a/src/index.jsx b/src/index.jsx index 7fec13b112..f7c592d923 100755 --- a/src/index.jsx +++ b/src/index.jsx @@ -139,6 +139,7 @@ initialize({ EXAMS_BASE_URL: process.env.EXAMS_BASE_URL || null, PROCTORED_EXAM_FAQ_URL: process.env.PROCTORED_EXAM_FAQ_URL || null, PROCTORED_EXAM_RULES_URL: process.env.PROCTORED_EXAM_RULES_URL || null, + AC_INSTANCE_CONFIG_API_URL: process.env.AC_INSTANCE_CONFIG_API_URL || null, }, 'LearnerAppConfig'); }, }, From 7341f60fdc0d9bf4585d260a828dfc8a638f1448 Mon Sep 17 00:00:00 2001 From: Khaled Date: Sun, 26 Nov 2023 19:16:41 +0330 Subject: [PATCH 02/16] chore(deps): footer and header and brand package --- package-lock.json | 332 ++++++++++++++++++++++++++++++++++++++-------- package.json | 6 +- 2 files changed, 277 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6f0a4d6263..b197bb10bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0-semantically-released", "license": "AGPL-3.0", "dependencies": { - "@edx/brand": "npm:@edx/brand-openedx@1.2.0", - "@edx/frontend-component-footer": "^12.0.0", - "@edx/frontend-component-header": "^4.0.0", + "@edx/brand": "https://github.com/Edspirit/brand-openedx", + "@edx/frontend-component-footer": "https://github.com/Edspirit/frontend-component-footer#v12.1.2", + "@edx/frontend-component-header": "https://github.com/Edspirit/frontend-component-header#v4.4.1", "@edx/frontend-lib-special-exams": "^2.16.1", "@edx/frontend-platform": "^4.2.0", "@edx/paragon": "20.28.4", @@ -2100,9 +2100,9 @@ }, "node_modules/@edx/brand": { "name": "@edx/brand-openedx", - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@edx/brand-openedx/-/brand-openedx-1.2.0.tgz", - "integrity": "sha512-r4PDN3rCgDsLovW44ayxoNNHgG5I4Rvss6MG5CrQEX4oW8YhQVEod+jJtwR5vi0mFLN2GIaMlDpd7iIy03VqXg==" + "version": "1.0.0-semantically-released", + "resolved": "git+ssh://git@github.com/Edspirit/brand-openedx.git#af9774b52c7b154e243977c6afb93a1c7ad99532", + "license": "GPL-3.0-or-later" }, "node_modules/@edx/browserslist-config": { "version": "1.1.1", @@ -3208,15 +3208,16 @@ } }, "node_modules/@edx/frontend-component-footer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@edx/frontend-component-footer/-/frontend-component-footer-12.0.0.tgz", - "integrity": "sha512-m8Rx6ZPWzIN5XLrz6Ft3aTuFo0rty0jECd79CBYWdm0D9KD1WxoYEG+fElluyOQp/t42T5jLImHTSWjFURx5kw==", + "version": "1.0.0-semantically-released", + "resolved": "git+ssh://git@github.com/Edspirit/frontend-component-footer.git#bb65e605819397f93a1f6ac3e863915b95feb888", + "license": "AGPL-3.0", "dependencies": { "@fortawesome/fontawesome-svg-core": "6.4.0", "@fortawesome/free-brands-svg-icons": "6.4.0", "@fortawesome/free-regular-svg-icons": "6.4.0", "@fortawesome/free-solid-svg-icons": "6.4.0", - "@fortawesome/react-fontawesome": "0.2.0" + "@fortawesome/react-fontawesome": "0.2.0", + "react-query": "^3.39.3" }, "peerDependencies": { "@edx/frontend-platform": "^4.0.0", @@ -3295,19 +3296,29 @@ } }, "node_modules/@edx/frontend-component-header": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@edx/frontend-component-header/-/frontend-component-header-4.0.0.tgz", - "integrity": "sha512-r/L3p2ZSI1DitjxVKAor18GmgJllafYslrdpzGI0vcX/gTemH13jf2Xr9iQqrT921DP2nzZ5GOwGJNptTSjiaA==", - "dependencies": { - "@edx/paragon": "20.30.1", - "@fortawesome/fontawesome-svg-core": "6.3.0", - "@fortawesome/free-brands-svg-icons": "6.3.0", - "@fortawesome/free-regular-svg-icons": "6.3.0", - "@fortawesome/free-solid-svg-icons": "6.3.0", + "version": "1.0.0-semantically-released", + "resolved": "git+ssh://git@github.com/Edspirit/frontend-component-header.git#27ee696542f819bc981e3845b77aa6610f599286", + "license": "AGPL-3.0", + "dependencies": { + "@edx/paragon": "20.45.0", + "@fortawesome/fontawesome-svg-core": "6.4.0", + "@fortawesome/free-brands-svg-icons": "6.4.0", + "@fortawesome/free-regular-svg-icons": "6.4.0", + "@fortawesome/free-solid-svg-icons": "6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", + "@reduxjs/toolkit": "1.9.5", + "axios-mock-adapter": "1.21.5", "babel-polyfill": "6.26.0", + "classnames": "2.3.2", + "lodash": "4.17.21", + "react-helmet": "6.1.0", + "react-query": "^3.39.3", + "react-redux": "7.2.9", "react-responsive": "8.2.0", - "react-transition-group": "4.4.5" + "react-router-dom": "5.3.4", + "react-transition-group": "4.4.5", + "rosie": "2.1.0", + "timeago.js": "4.0.2" }, "peerDependencies": { "@edx/frontend-platform": "^4.0.0", @@ -3317,9 +3328,9 @@ } }, "node_modules/@edx/frontend-component-header/node_modules/@edx/paragon": { - "version": "20.30.1", - "resolved": "https://registry.npmjs.org/@edx/paragon/-/paragon-20.30.1.tgz", - "integrity": "sha512-v3Ek8deZWqVKi3IWP08Mj4egrvbmbqQEyRA6+qazHZdgHJA4qOP1SST42UKd9XxPeRbLWUgaJWd0iBAOAna/gw==", + "version": "20.45.0", + "resolved": "https://registry.npmjs.org/@edx/paragon/-/paragon-20.45.0.tgz", + "integrity": "sha512-9lHcnSJ36sQ+bsYFhydf/Pvp3Bo5N3go8R3ORPTNtvYnwiKSfjlv11QpURC/xHobXsT2eYHiwl2gNmq1yP09BA==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.1.18", @@ -3366,57 +3377,57 @@ } }, "node_modules/@edx/frontend-component-header/node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", - "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", + "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@edx/frontend-component-header/node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", - "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", + "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" } }, "node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.3.0.tgz", - "integrity": "sha512-xI0c+a8xnKItAXCN8rZgCNCJQiVAd2Y7p9e2ND6zN3J3ekneu96qrePieJ7yA7073C1JxxoM3vH1RU7rYsaj8w==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.0.tgz", + "integrity": "sha512-qvxTCo0FQ5k2N+VCXb/PZQ+QMhqRVM4OORiO6MXdG6bKolIojGU/srQ1ptvKk0JTbRgaJOfL2qMqGvBEZG7Z6g==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" } }, "node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.3.0.tgz", - "integrity": "sha512-cZnwiVHZ51SVzWHOaNCIA+u9wevZjCuAGSvSYpNlm6A4H4Vhwh8481Bf/5rwheIC3fFKlgXxLKaw8Xeroz8Ntg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.0.tgz", + "integrity": "sha512-ZfycI7D0KWPZtf7wtMFnQxs8qjBXArRzczABuMQqecA/nXohquJ5J/RCR77PmY5qGWkxAZDxpnUFVXKwtY/jPw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" } }, "node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", - "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", + "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" @@ -3434,6 +3445,41 @@ "react": ">=16.3" } }, + "node_modules/@edx/frontend-component-header/node_modules/@reduxjs/toolkit": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@edx/frontend-component-header/node_modules/axios-mock-adapter": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.5.tgz", + "integrity": "sha512-5NI1V/VK+8+JeTF8niqOowuysA4b8mGzdlMN/QnTnoXbYh4HZSNiopsDclN2g/m85+G++IrEtUdZaQ3GnaMsSA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + }, + "peerDependencies": { + "axios": ">= 0.17.0" + } + }, "node_modules/@edx/frontend-component-header/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -3460,6 +3506,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@edx/frontend-component-header/node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/@edx/frontend-component-header/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, "node_modules/@edx/frontend-component-header/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -3471,14 +3535,68 @@ "node": ">=10" } }, - "node_modules/@edx/frontend-component-header/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@edx/frontend-component-header/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" } }, + "node_modules/@edx/frontend-component-header/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/@edx/frontend-component-header/node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/@edx/frontend-component-header/node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/@edx/frontend-component-header/node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/@edx/frontend-component-header/node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "node_modules/@edx/frontend-lib-special-exams": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/@edx/frontend-lib-special-exams/-/frontend-lib-special-exams-2.16.1.tgz", @@ -8316,7 +8434,6 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, "peer": true, "dependencies": { "follow-redirects": "^1.14.0" @@ -8832,7 +8949,6 @@ "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, "engines": { "node": ">=0.6" } @@ -8987,6 +9103,35 @@ "node": ">=8" } }, + "node_modules/broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, + "node_modules/broadcast-channel/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -10827,8 +10972,7 @@ "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/detect-node-es": { "version": "1.1.0", @@ -12710,8 +12854,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-defer": { "version": "1.1.7", @@ -14750,7 +14893,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, "funding": [ { "type": "github", @@ -19752,6 +19894,11 @@ "url": "https://opencollective.com/js-sdsl" } }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -20165,8 +20312,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.assignin": { "version": "4.2.0", @@ -20449,6 +20595,15 @@ "node": ">=0.10.0" } }, + "node_modules/match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, "node_modules/matchmediaquery": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", @@ -20543,6 +20698,11 @@ "node": ">=8.6" } }, + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -20779,6 +20939,14 @@ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "dependencies": { + "big-integer": "^1.6.16" + } + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -21342,6 +21510,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -23447,6 +23620,31 @@ "resolved": "https://registry.npmjs.org/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz", "integrity": "sha512-nopsRn7KnGgazBe2c3H2+Kf+Csp6PGDRLiBkYEDMKY8o/EIgft/WnIm/OnAKTawZiLnJXHAqhpFBddvs6NiXlw==" }, + "node_modules/react-query": { + "version": "3.39.3", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", + "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-redux": { "version": "7.2.9", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", @@ -23991,6 +24189,11 @@ "node": ">= 0.10" } }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -24231,7 +24434,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/rosie/-/rosie-2.1.0.tgz", "integrity": "sha512-Dbzdc+prLXZuB/suRptDnBUY29SdGvND3bLg6cll8n7PNqzuyCxSlRfrkn8PqjS9n4QVsiM7RCvxCkKAkTQRjA==", - "dev": true, "engines": { "node": ">=10" } @@ -26558,6 +26760,11 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/timeago.js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz", + "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" + }, "node_modules/timers-ext": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", @@ -27033,6 +27240,15 @@ "node": ">=0.10.0" } }, + "node_modules/unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 42206be047..b43af241db 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,9 @@ "url": "https://github.com/openedx/frontend-app-learning/issues" }, "dependencies": { - "@edx/brand": "npm:@edx/brand-openedx@1.2.0", - "@edx/frontend-component-footer": "^12.0.0", - "@edx/frontend-component-header": "^4.0.0", + "@edx/brand": "https://github.com/Edspirit/brand-openedx", + "@edx/frontend-component-footer": "https://github.com/Edspirit/frontend-component-footer#v12.1.2", + "@edx/frontend-component-header": "https://github.com/Edspirit/frontend-component-header#v4.4.1", "@edx/frontend-lib-special-exams": "^2.16.1", "@edx/frontend-platform": "^4.2.0", "@edx/paragon": "20.28.4", From 6dc72cbf1009dee32db75c73242d4c167e581b06 Mon Sep 17 00:00:00 2001 From: Khaled Date: Sun, 26 Nov 2023 19:21:54 +0330 Subject: [PATCH 03/16] feat: set font for persian language --- src/generic/notices/NoticesProvider.jsx | 19 +++++++++++++++++++ src/index.scss | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/src/generic/notices/NoticesProvider.jsx b/src/generic/notices/NoticesProvider.jsx index ec163e2d51..7be1645c37 100644 --- a/src/generic/notices/NoticesProvider.jsx +++ b/src/generic/notices/NoticesProvider.jsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react'; import { getConfig } from '@edx/frontend-platform'; import PropTypes from 'prop-types'; +import { getLocale } from '@edx/frontend-platform/i18n'; import { getNotices } from './api'; /** * This component uses the platform-plugin-notices plugin to function. @@ -25,6 +26,24 @@ const NoticesProvider = ({ children }) => { getData(); }, []); + const setFont = () => { + const body = document.querySelector('body'); + const locale = getLocale(); + let className = ''; + + if (locale === 'fa') { + className = 'lang_fa'; + } else if (locale === 'ar') { + className = 'lang_ar'; + } + + body.className = className; + }; + + useEffect(() => { + setFont(); + }, [getLocale()]); + return (
{isRedirected === true ? null : children} diff --git a/src/index.scss b/src/index.scss index b91dfa05f0..56b5193409 100755 --- a/src/index.scss +++ b/src/index.scss @@ -10,6 +10,12 @@ flex-direction: column; min-height: 100vh; + > div:first-child { + display: flex; + flex-direction: column; + flex-grow: 1; + } + main { flex-grow: 1; } From 81c83aa88c803ba82ed3a38ef9bffac990a27c43 Mon Sep 17 00:00:00 2001 From: Khaled Date: Sun, 26 Nov 2023 19:43:47 +0330 Subject: [PATCH 04/16] fix: don't show courses to unregistered users --- .../enrollment-alert/EnrollmentAlert.jsx | 15 ++++++++-- src/alerts/enrollment-alert/messages.js | 7 +++++ src/alerts/enrollment-alert/useUserData.js | 30 +++++++++++++++++++ .../PrivateCourseAlert.jsx | 22 ++++++++------ 4 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 src/alerts/enrollment-alert/useUserData.js diff --git a/src/alerts/enrollment-alert/EnrollmentAlert.jsx b/src/alerts/enrollment-alert/EnrollmentAlert.jsx index e8489e5fc5..b3a845e6c6 100644 --- a/src/alerts/enrollment-alert/EnrollmentAlert.jsx +++ b/src/alerts/enrollment-alert/EnrollmentAlert.jsx @@ -10,6 +10,7 @@ import { useModel } from '../../generic/model-store'; import messages from './messages'; import useEnrollClickHandler from './clickHook'; +import useUserData from './useUserData'; const EnrollmentAlert = ({ intl, payload }) => { const { @@ -28,6 +29,7 @@ const EnrollmentAlert = ({ intl, payload }) => { org, intl.formatMessage(messages.success), ); + const { userData } = useUserData(); let text = intl.formatMessage(messages.alert); let type = 'warning'; @@ -46,12 +48,19 @@ const EnrollmentAlert = ({ intl, payload }) => { ); - return ( - -
+ const alertContent = userData?.is_active + ? ( + <> {text} {button} {loading && } + + ) + : intl.formatMessage(messages.deActive); + return ( + +
+ {alertContent}
); diff --git a/src/alerts/enrollment-alert/messages.js b/src/alerts/enrollment-alert/messages.js index cf583a8531..a317b3cb3d 100644 --- a/src/alerts/enrollment-alert/messages.js +++ b/src/alerts/enrollment-alert/messages.js @@ -27,6 +27,13 @@ const messages = defineMessages({ defaultMessage: "You've successfully enrolled in this course!", description: 'A message telling the user that their course enrollment was successful.', }, + deActive: { + id: 'learning.enrollment.deActive', + defaultMessage: + 'You must active your account with the link sent to your email address!', + description: + 'A message telling the user for activating account by email address.', + }, }); export default messages; diff --git a/src/alerts/enrollment-alert/useUserData.js b/src/alerts/enrollment-alert/useUserData.js new file mode 100644 index 0000000000..fdf4f53f4e --- /dev/null +++ b/src/alerts/enrollment-alert/useUserData.js @@ -0,0 +1,30 @@ +import { + useContext, useEffect, useState, useCallback, +} from 'react'; +import { AppContext } from '@edx/frontend-platform/react'; +import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth'; +import { getConfig } from '@edx/frontend-platform'; + +export default function useUserData() { + const { authenticatedUser } = useContext(AppContext); + const [userData, setUserData] = useState(null); + + const getUserData = useCallback(async () => { + const { data } = await getAuthenticatedHttpClient().get( + `${getConfig().LMS_BASE_URL}/api/user/v1/accounts/${ + authenticatedUser.username + }`, + ); + return data; + }, [authenticatedUser.username]); + + useEffect(() => { + async function fetchData() { + const data = await getUserData(); + setUserData(data); + } + fetchData(); + }, [getUserData]); + + return { userData }; +} diff --git a/src/course-home/outline-tab/alerts/private-course-alert/PrivateCourseAlert.jsx b/src/course-home/outline-tab/alerts/private-course-alert/PrivateCourseAlert.jsx index 5c520d631e..67da77e79d 100644 --- a/src/course-home/outline-tab/alerts/private-course-alert/PrivateCourseAlert.jsx +++ b/src/course-home/outline-tab/alerts/private-course-alert/PrivateCourseAlert.jsx @@ -14,6 +14,8 @@ import outlineMessages from '../../messages'; import useEnrollClickHandler from '../../../../alerts/enrollment-alert/clickHook'; import { useModel } from '../../../../generic/model-store'; +import useUserData from '../../../../alerts/enrollment-alert/useUserData'; + const PrivateCourseAlert = ({ intl, payload }) => { const { anonymousUser, @@ -31,6 +33,7 @@ const PrivateCourseAlert = ({ intl, payload }) => { org, intl.formatMessage(enrollmentMessages.success), ); + const { userData } = useUserData(); const enrollNowButton = (