@edx/frontend-app-learner-dashboard 1.2.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/widgets/LearnerDashboardHeader/app.js +0 -12
- package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -1
- package/dist/widgets/LearnerDashboardPlugins/app.js +70 -0
- package/dist/widgets/LearnerDashboardPlugins/app.js.map +1 -1
- package/dist/widgets/LearnerDashboardPlugins/career-menu/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/career-menu/index.js +22 -0
- package/dist/widgets/LearnerDashboardPlugins/career-menu/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/career-menu/messages.d.ts +16 -0
- package/dist/widgets/LearnerDashboardPlugins/career-menu/messages.js +15 -0
- package/dist/widgets/LearnerDashboardPlugins/career-menu/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/HelpChatbot.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/HelpChatbot.js +25 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/HelpChatbot.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/data/five9.d.ts +3 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/data/five9.js +5 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/data/five9.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/chatbot/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/CohesionWrapper.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/CohesionWrapper.js +33 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/CohesionWrapper.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/cohesion-wrapper/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/Banner.d.ts +24 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/Banner.js +19 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/Banner.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/CourseBanner.d.ts +10 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/CourseBanner.js +31 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/CourseBanner.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/formatDate.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/formatDate.js +13 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/formatDate.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/messages.d.ts +56 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/messages.js +40 -0
- package/dist/widgets/LearnerDashboardPlugins/course-banner/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/index.js +23 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/messages.d.ts +24 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/messages.js +20 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-menu/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModal.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModal.js +20 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModal.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModalWrapper.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModalWrapper.js +17 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/EnterpriseDashboardModalWrapper.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/hooks/hooks.d.ts +10 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/hooks/hooks.js +34 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/hooks/hooks.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/messages.d.ts +32 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/messages.js +25 -0
- package/dist/widgets/LearnerDashboardPlugins/dashboard-modal/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/mocks/optimizely/index.d.ts +10 -0
- package/dist/widgets/LearnerDashboardPlugins/mocks/optimizely/index.js +10 -0
- package/dist/widgets/LearnerDashboardPlugins/mocks/optimizely/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/index.js +37 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/index.scss +13 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/messages.d.ts +32 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/messages.js +25 -0
- package/dist/widgets/LearnerDashboardPlugins/no-courses-view/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/api.d.ts +9 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/api.js +32 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/api.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/hooks.d.ts +4 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/hooks.js +32 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/hooks.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/index.d.ts +8 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/index.js +14 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/messages.d.ts +8 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/messages.js +10 -0
- package/dist/widgets/LearnerDashboardPlugins/notices-redirect/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingEntry.d.ts +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingEntry.js +23 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingEntry.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingModal.d.ts +14 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingModal.js +51 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingModal.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/api/service.d.ts +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/api/service.js +35 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/api/service.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/data/progressiveProfilingFields.d.ts +22 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/data/progressiveProfilingFields.js +33 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/data/progressiveProfilingFields.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/FieldRenderer.d.ts +21 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/FieldRenderer.js +29 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/FieldRenderer.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/index.d.ts +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/index.js +2 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useClearProgressiveProfilingQueryParams.d.ts +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useClearProgressiveProfilingQueryParams.js +10 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useClearProgressiveProfilingQueryParams.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingForm.d.ts +11 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingForm.js +50 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingForm.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingTrigger.d.ts +3 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingTrigger.js +8 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingTrigger.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfiling.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfiling.js +82 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfiling.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfilingPageModal.d.ts +13 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfilingPageModal.js +26 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfilingPageModal.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/LargeLayout.d.ts +19 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/LargeLayout.js +34 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/LargeLayout.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/MediumLayout.d.ts +19 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/MediumLayout.js +35 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/MediumLayout.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/SmallLayout.d.ts +19 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/SmallLayout.js +36 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/SmallLayout.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/index.d.ts +3 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/index.js +4 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/messages.d.ts +33 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/messages.js +35 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/components/welcome-page-layout/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/index.d.ts +20 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/index.js +24 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/base-container/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/index.d.ts +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/index.js +2 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/index.scss +269 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/messages.d.ts +58 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/messages.js +62 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/service/getThirdPartyAuthContext.d.ts +5 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/service/getThirdPartyAuthContext.js +31 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/service/getThirdPartyAuthContext.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/utils/constants.d.ts +5 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/utils/constants.js +6 -0
- package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/utils/constants.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/enterpriseDashboardModal.d.ts +9 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/enterpriseDashboardModal.js +29 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/enterpriseDashboardModal.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/exploreCourses.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/exploreCourses.js +46 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/exploreCourses.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/progressiveProfiling.d.ts +14 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/progressiveProfiling.js +24 -0
- package/dist/widgets/LearnerDashboardPlugins/tracking/trackers/progressiveProfiling.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/UclWrapper.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/UclWrapper.js +36 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/UclWrapper.js.map +1 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/index.js +3 -0
- package/dist/widgets/LearnerDashboardPlugins/ucl-wrapper/index.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
3
|
+
import { getAuthenticatedUser } from '@openedx/frontend-base';
|
|
4
|
+
import ProgressiveProfilingModal from './ProgressiveProfilingModal';
|
|
5
|
+
import useProgressiveProfilingTrigger from './hooks/useProgressiveProfilingTrigger';
|
|
6
|
+
import useClearProgressiveProfilingQueryParams from './hooks/useClearProgressiveProfilingQueryParams';
|
|
7
|
+
import { trackProgressiveProfilingQuestionaireModalFormOpened } from '../tracking/trackers/progressiveProfiling';
|
|
8
|
+
const ProgressiveProfilingEntry = () => {
|
|
9
|
+
var _a;
|
|
10
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
11
|
+
const username = (_a = getAuthenticatedUser()) === null || _a === void 0 ? void 0 : _a.username;
|
|
12
|
+
const { shouldOpen } = useProgressiveProfilingTrigger();
|
|
13
|
+
const clearTrigger = useClearProgressiveProfilingQueryParams();
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (shouldOpen && username) {
|
|
16
|
+
setIsOpen(true);
|
|
17
|
+
trackProgressiveProfilingQuestionaireModalFormOpened({ host: window.location.origin });
|
|
18
|
+
}
|
|
19
|
+
}, [shouldOpen, username]);
|
|
20
|
+
return (_jsx(ProgressiveProfilingModal, { isOpen: isOpen, onClose: () => setIsOpen(false), clearTrigger: clearTrigger }));
|
|
21
|
+
};
|
|
22
|
+
export { ProgressiveProfilingEntry };
|
|
23
|
+
//# sourceMappingURL=ProgressiveProfilingEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressiveProfilingEntry.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingEntry.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AACpE,OAAO,8BAA8B,MAAM,wCAAwC,CAAC;AACpF,OAAO,uCAAuC,MAAM,iDAAiD,CAAC;AACtG,OAAO,EAAE,oDAAoD,EAAE,MAAM,2CAA2C,CAAC;AAEjH,MAAM,yBAAyB,GAAG,GAAG,EAAE;;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAA,oBAAoB,EAAE,0CAAE,QAAQ,CAAC;IAElD,MAAM,EAAE,UAAU,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,uCAAuC,EAAE,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,oDAAoD,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,OAAO,CACL,KAAC,yBAAyB,IACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { getAuthenticatedUser } from '@openedx/frontend-base';\n\nimport ProgressiveProfilingModal from './ProgressiveProfilingModal';\nimport useProgressiveProfilingTrigger from './hooks/useProgressiveProfilingTrigger';\nimport useClearProgressiveProfilingQueryParams from './hooks/useClearProgressiveProfilingQueryParams';\nimport { trackProgressiveProfilingQuestionaireModalFormOpened } from '../tracking/trackers/progressiveProfiling';\n\nconst ProgressiveProfilingEntry = () => {\n const [isOpen, setIsOpen] = useState(false);\n\n const username = getAuthenticatedUser()?.username;\n\n const { shouldOpen } = useProgressiveProfilingTrigger();\n const clearTrigger = useClearProgressiveProfilingQueryParams();\n\n useEffect(() => {\n if (shouldOpen && username) {\n setIsOpen(true);\n trackProgressiveProfilingQuestionaireModalFormOpened({ host: window.location.origin });\n }\n }, [shouldOpen, username]);\n\n return (\n <ProgressiveProfilingModal\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n clearTrigger={clearTrigger}\n />\n );\n};\n\nexport { ProgressiveProfilingEntry };\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default ProgressiveProfilingModal;
|
|
2
|
+
declare function ProgressiveProfilingModal({ isOpen, onClose, clearTrigger, }: {
|
|
3
|
+
isOpen: any;
|
|
4
|
+
onClose: any;
|
|
5
|
+
clearTrigger: any;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare namespace ProgressiveProfilingModal {
|
|
8
|
+
namespace propTypes {
|
|
9
|
+
let isOpen: PropTypes.Validator<boolean>;
|
|
10
|
+
let onClose: PropTypes.Validator<(...args: any[]) => any>;
|
|
11
|
+
let clearTrigger: PropTypes.Validator<(...args: any[]) => any>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
13
|
+
import { getAppConfig } from '@openedx/frontend-base';
|
|
14
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
15
|
+
import { Alert, Button, Form, Hyperlink, ModalDialog, } from '@openedx/paragon';
|
|
16
|
+
import { FormFieldRenderer } from './field-renderer';
|
|
17
|
+
import useProgressiveProfilingForm from './hooks/useProgressiveProfilingForm';
|
|
18
|
+
import { COMPLETE_STATE, PENDING_STATE } from './utils/constants';
|
|
19
|
+
import messages from './progressive-profiling-authn-replica/messages';
|
|
20
|
+
import { trackProgressiveProfilingSkipLinkClick, trackProgressiveProfilingSubmitClick, trackProgressiveProfilingSupportLinkClick, } from '../tracking/trackers/progressiveProfiling';
|
|
21
|
+
const ProgressiveProfilingModal = ({ isOpen, onClose, clearTrigger, }) => {
|
|
22
|
+
const { formatMessage } = useIntl();
|
|
23
|
+
const { loadState, submitState, error, values, fieldList, onChangeHandler, submit, } = useProgressiveProfilingForm();
|
|
24
|
+
const handleSubmit = (e) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
const success = yield submit();
|
|
27
|
+
if (!success) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
trackProgressiveProfilingSubmitClick({
|
|
31
|
+
isGenderSelected: !!values.gender,
|
|
32
|
+
isLevelOfEducationSelected: !!values.level_of_education,
|
|
33
|
+
host: window.location.origin,
|
|
34
|
+
});
|
|
35
|
+
clearTrigger();
|
|
36
|
+
onClose();
|
|
37
|
+
});
|
|
38
|
+
const handleSkip = () => {
|
|
39
|
+
trackProgressiveProfilingSkipLinkClick({ host: window.location.origin });
|
|
40
|
+
clearTrigger();
|
|
41
|
+
onClose();
|
|
42
|
+
};
|
|
43
|
+
return (_jsxs(ModalDialog, { isOpen: isOpen, onClose: () => { }, hasCloseButton: false, size: "md", title: formatMessage(messages['progressive.profiling.page.heading']), children: [_jsx(ModalDialog.Header, { children: _jsx(ModalDialog.Title, { children: formatMessage(messages['progressive.profiling.page.heading']) }) }), _jsxs(ModalDialog.Body, { children: [error && (_jsxs(Alert, { variant: "danger", children: [_jsx(Alert.Heading, { children: formatMessage(messages['welcome.page.error.heading']) }), _jsx("p", { children: formatMessage(messages['welcome.page.error.message']) })] })), _jsxs(Form, { id: "profileForm", onSubmit: handleSubmit, children: [fieldList.map((fieldData) => (_jsx(FormFieldRenderer, { fieldData: fieldData, value: values[fieldData.name], onChangeHandler: onChangeHandler }, fieldData.name))), (getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (_jsx("div", { className: "mt-2", children: _jsx(Hyperlink, { destination: getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK, target: "_blank", showLaunchIcon: false, onClick: () => trackProgressiveProfilingSupportLinkClick({ host: window.location.origin }), children: formatMessage(messages['optional.fields.information.link']) }) }))] })] }), _jsxs(ModalDialog.Footer, { children: [_jsx(Button, { variant: "link", onClick: handleSkip, disabled: submitState === PENDING_STATE, children: formatMessage(messages['optional.fields.skip.button']) }), _jsx(Button, { variant: "brand", type: "submit", form: "profileForm", disabled: loadState !== COMPLETE_STATE || submitState === PENDING_STATE, children: formatMessage(messages['optional.fields.submit.button']) })] })] }));
|
|
44
|
+
};
|
|
45
|
+
ProgressiveProfilingModal.propTypes = {
|
|
46
|
+
isOpen: PropTypes.bool.isRequired,
|
|
47
|
+
onClose: PropTypes.func.isRequired,
|
|
48
|
+
clearTrigger: PropTypes.func.isRequired,
|
|
49
|
+
};
|
|
50
|
+
export default ProgressiveProfilingModal;
|
|
51
|
+
//# sourceMappingURL=ProgressiveProfilingModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressiveProfilingModal.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/ProgressiveProfilingModal.jsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getAppConfig } from '@openedx/frontend-base';\nimport { useIntl } from '@openedx/frontend-base';\nimport {\n Alert, Button, Form, Hyperlink, ModalDialog,\n} from '@openedx/paragon';\n\nimport { FormFieldRenderer } from './field-renderer';\nimport useProgressiveProfilingForm from './hooks/useProgressiveProfilingForm';\nimport { COMPLETE_STATE, PENDING_STATE } from './utils/constants';\nimport messages from './progressive-profiling-authn-replica/messages';\nimport {\n trackProgressiveProfilingSkipLinkClick, trackProgressiveProfilingSubmitClick,\n trackProgressiveProfilingSupportLinkClick,\n} from '../tracking/trackers/progressiveProfiling';\n\nconst ProgressiveProfilingModal = ({\n isOpen, onClose, clearTrigger,\n}) => {\n const { formatMessage } = useIntl();\n const {\n loadState, submitState, error, values, fieldList, onChangeHandler, submit,\n } = useProgressiveProfilingForm();\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n const success = await submit();\n if (!success) { return; }\n\n trackProgressiveProfilingSubmitClick({\n isGenderSelected: !!values.gender,\n isLevelOfEducationSelected: !!values.level_of_education,\n host: window.location.origin,\n });\n\n clearTrigger();\n onClose();\n };\n\n const handleSkip = () => {\n trackProgressiveProfilingSkipLinkClick({ host: window.location.origin });\n clearTrigger();\n onClose();\n };\n\n return (\n <ModalDialog\n isOpen={isOpen}\n onClose={() => {}}\n hasCloseButton={false}\n size=\"md\"\n title={formatMessage(messages['progressive.profiling.page.heading'])}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['progressive.profiling.page.heading'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {error && (\n <Alert variant=\"danger\">\n <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n </Alert>\n )}\n <Form id=\"profileForm\" onSubmit={handleSubmit}>\n {fieldList.map((fieldData) => (\n <FormFieldRenderer\n key={fieldData.name}\n fieldData={fieldData}\n value={values[fieldData.name]}\n onChangeHandler={onChangeHandler}\n />\n ))}\n\n {(getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n <div className=\"mt-2\">\n <Hyperlink\n destination={getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n onClick={() => trackProgressiveProfilingSupportLinkClick({ host: window.location.origin })}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n </Hyperlink>\n </div>\n )}\n </Form>\n </ModalDialog.Body>\n <ModalDialog.Footer>\n <Button variant=\"link\" onClick={handleSkip} disabled={submitState === PENDING_STATE}>\n {formatMessage(messages['optional.fields.skip.button'])}\n </Button>\n <Button variant=\"brand\" type=\"submit\" form=\"profileForm\" disabled={loadState !== COMPLETE_STATE || submitState === PENDING_STATE}>\n {formatMessage(messages['optional.fields.submit.button'])}\n </Button>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nProgressiveProfilingModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n clearTrigger: PropTypes.func.isRequired,\n};\n\nexport default ProgressiveProfilingModal;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function saveProgressiveProfiling(values: any, extendedProfileFieldNames?: any[]): Promise<void>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { getAppConfig, snakeCaseObject } from '@openedx/frontend-base';
|
|
11
|
+
import { getAuthenticatedUser, getAuthenticatedHttpClient } from '@openedx/frontend-base';
|
|
12
|
+
export function saveProgressiveProfiling(values_1) {
|
|
13
|
+
return __awaiter(this, arguments, void 0, function* (values, extendedProfileFieldNames = []) {
|
|
14
|
+
const payload = Object.assign({}, values);
|
|
15
|
+
const extendedProfile = [];
|
|
16
|
+
const authenticatedUser = getAuthenticatedUser();
|
|
17
|
+
const client = getAuthenticatedHttpClient();
|
|
18
|
+
extendedProfileFieldNames.forEach((fieldName) => {
|
|
19
|
+
if (payload[fieldName] !== undefined && payload[fieldName] !== '') {
|
|
20
|
+
extendedProfile.push({
|
|
21
|
+
fieldName,
|
|
22
|
+
fieldValue: payload[fieldName],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
delete payload[fieldName];
|
|
26
|
+
});
|
|
27
|
+
if (extendedProfile.length) {
|
|
28
|
+
payload.extendedProfile = extendedProfile;
|
|
29
|
+
}
|
|
30
|
+
yield client.patch(`${getAppConfig().LMS_BASE_URL}/api/user/v1/accounts/${authenticatedUser.username}`, snakeCaseObject(payload), {
|
|
31
|
+
headers: { 'Content-Type': 'application/merge-patch+json' },
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=service.js.map
|
package/dist/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/api/service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/api/service.js"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAE1F,MAAM,UAAgB,wBAAwB;yDAAC,MAAM,EAAE,yBAAyB,GAAG,EAAE;QACnF,MAAM,OAAO,qBAAQ,MAAM,CAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;QAE5C,yBAAyB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC9C,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClE,eAAe,CAAC,IAAI,CAAC;oBACnB,SAAS;oBACT,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;QAC5C,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,CAChB,GAAG,YAAY,EAAE,CAAC,YAAY,yBAAyB,iBAAiB,CAAC,QAAQ,EAAE,EACnF,eAAe,CAAC,OAAO,CAAC,EACxB;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,8BAA8B,EAAE;SAC5D,CACF,CAAC;IACJ,CAAC;CAAA","sourcesContent":["import { getAppConfig, snakeCaseObject } from '@openedx/frontend-base';\nimport { getAuthenticatedUser, getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nexport async function saveProgressiveProfiling(values, extendedProfileFieldNames = []) {\n const payload = { ...values };\n const extendedProfile = [];\n const authenticatedUser = getAuthenticatedUser();\n const client = getAuthenticatedHttpClient();\n\n extendedProfileFieldNames.forEach((fieldName) => {\n if (payload[fieldName] !== undefined && payload[fieldName] !== '') {\n extendedProfile.push({\n fieldName,\n fieldValue: payload[fieldName],\n });\n }\n\n delete payload[fieldName];\n });\n\n if (extendedProfile.length) {\n payload.extendedProfile = extendedProfile;\n }\n\n await client.patch(\n `${getAppConfig().LMS_BASE_URL}/api/user/v1/accounts/${authenticatedUser.username}`,\n snakeCaseObject(payload),\n {\n headers: { 'Content-Type': 'application/merge-patch+json' },\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export namespace progressiveProfilingFields {
|
|
2
|
+
namespace fields {
|
|
3
|
+
namespace gender {
|
|
4
|
+
let name: string;
|
|
5
|
+
let type: string;
|
|
6
|
+
let label: string;
|
|
7
|
+
let options: string[][];
|
|
8
|
+
}
|
|
9
|
+
namespace level_of_education {
|
|
10
|
+
let name_1: string;
|
|
11
|
+
export { name_1 as name };
|
|
12
|
+
let type_1: string;
|
|
13
|
+
export { type_1 as type };
|
|
14
|
+
let label_1: string;
|
|
15
|
+
export { label_1 as label };
|
|
16
|
+
let options_1: string[][];
|
|
17
|
+
export { options_1 as options };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let extendedProfile: never[];
|
|
21
|
+
let redirectUrl: string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const progressiveProfilingFields = {
|
|
2
|
+
fields: {
|
|
3
|
+
gender: {
|
|
4
|
+
name: 'gender',
|
|
5
|
+
type: 'select',
|
|
6
|
+
label: 'Gender',
|
|
7
|
+
options: [
|
|
8
|
+
['f', 'Female'],
|
|
9
|
+
['m', 'Male'],
|
|
10
|
+
['o', 'Other'],
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
level_of_education: {
|
|
14
|
+
name: 'level_of_education',
|
|
15
|
+
type: 'select',
|
|
16
|
+
label: 'Level of Education',
|
|
17
|
+
options: [
|
|
18
|
+
['p', 'Doctorate'],
|
|
19
|
+
['m', 'Master\'s or professional degree'],
|
|
20
|
+
['b', 'Bachelor\'s Degree'],
|
|
21
|
+
['a', 'Associate Degree'],
|
|
22
|
+
['hs', 'Secondary/High School'],
|
|
23
|
+
['jhs', 'Junior secondary/junior high/middle school'],
|
|
24
|
+
['el', 'Elementary/primary school'],
|
|
25
|
+
['none', 'No formal education'],
|
|
26
|
+
['other', 'Other education'],
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
extendedProfile: [],
|
|
31
|
+
redirectUrl: '',
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=progressiveProfilingFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressiveProfilingFields.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/data/progressiveProfilingFields.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM,EAAE;QACN,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE;gBACP,CAAC,GAAG,EAAE,QAAQ,CAAC;gBACf,CAAC,GAAG,EAAE,MAAM,CAAC;gBACb,CAAC,GAAG,EAAE,OAAO,CAAC;aACf;SACF;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE;gBACP,CAAC,GAAG,EAAE,WAAW,CAAC;gBAClB,CAAC,GAAG,EAAE,kCAAkC,CAAC;gBACzC,CAAC,GAAG,EAAE,oBAAoB,CAAC;gBAC3B,CAAC,GAAG,EAAE,kBAAkB,CAAC;gBACzB,CAAC,IAAI,EAAE,uBAAuB,CAAC;gBAC/B,CAAC,KAAK,EAAE,4CAA4C,CAAC;gBACrD,CAAC,IAAI,EAAE,2BAA2B,CAAC;gBACnC,CAAC,MAAM,EAAE,qBAAqB,CAAC;gBAC/B,CAAC,OAAO,EAAE,iBAAiB,CAAC;aAC7B;SACF;KACF;IACD,eAAe,EAAE,EAAE;IACnB,WAAW,EAAE,EAAE;CAChB,CAAC","sourcesContent":["export const progressiveProfilingFields = {\n fields: {\n gender: {\n name: 'gender',\n type: 'select',\n label: 'Gender',\n options: [\n ['f', 'Female'],\n ['m', 'Male'],\n ['o', 'Other'],\n ],\n },\n level_of_education: {\n name: 'level_of_education',\n type: 'select',\n label: 'Level of Education',\n options: [\n ['p', 'Doctorate'],\n ['m', 'Master\\'s or professional degree'],\n ['b', 'Bachelor\\'s Degree'],\n ['a', 'Associate Degree'],\n ['hs', 'Secondary/High School'],\n ['jhs', 'Junior secondary/junior high/middle school'],\n ['el', 'Elementary/primary school'],\n ['none', 'No formal education'],\n ['other', 'Other education'],\n ],\n },\n },\n extendedProfile: [],\n redirectUrl: '',\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default FormFieldRenderer;
|
|
2
|
+
declare function FormFieldRenderer({ fieldData, value, onChangeHandler, className, }: {
|
|
3
|
+
fieldData: any;
|
|
4
|
+
value: any;
|
|
5
|
+
onChangeHandler: any;
|
|
6
|
+
className: any;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare namespace FormFieldRenderer {
|
|
9
|
+
namespace propTypes {
|
|
10
|
+
let fieldData: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
11
|
+
name: PropTypes.Validator<string>;
|
|
12
|
+
type: PropTypes.Validator<string>;
|
|
13
|
+
label: PropTypes.Requireable<string>;
|
|
14
|
+
options: PropTypes.Requireable<((string | null | undefined)[] | null | undefined)[]>;
|
|
15
|
+
}>>>;
|
|
16
|
+
let value: PropTypes.Requireable<NonNullable<string | boolean | null | undefined>>;
|
|
17
|
+
let onChangeHandler: PropTypes.Validator<(...args: any[]) => any>;
|
|
18
|
+
let className: PropTypes.Requireable<string>;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { Form } from '@openedx/paragon';
|
|
5
|
+
const FormFieldRenderer = ({ fieldData, value, onChangeHandler, className, }) => {
|
|
6
|
+
switch (fieldData.type) {
|
|
7
|
+
case 'select':
|
|
8
|
+
return (_jsx(Form.Group, { controlId: fieldData.name, children: _jsxs(Form.Control, { as: "select", className: className, name: fieldData.name, value: value !== null && value !== void 0 ? value : '', onChange: onChangeHandler, floatingLabel: fieldData.label, children: [_jsx("option", { value: "", children: fieldData.label }), fieldData.options.map(option => (_jsx("option", { value: option[0], children: option[1] }, option[0])))] }) }));
|
|
9
|
+
case 'textarea':
|
|
10
|
+
return (_jsx(Form.Group, { controlId: fieldData.name, children: _jsx(Form.Control, { as: "textarea", className: className, name: fieldData.name, value: value !== null && value !== void 0 ? value : '', onChange: onChangeHandler, floatingLabel: fieldData.label }) }));
|
|
11
|
+
case 'checkbox':
|
|
12
|
+
return (_jsx(Form.Group, { controlId: fieldData.name, children: _jsx(Form.Checkbox, { id: fieldData.name, name: fieldData.name, checked: !!value, onChange: onChangeHandler, children: fieldData.label }) }));
|
|
13
|
+
default:
|
|
14
|
+
return (_jsx(Form.Group, { controlId: fieldData.name, children: _jsx(Form.Control, { className: className, name: fieldData.name, value: value !== null && value !== void 0 ? value : '', onChange: onChangeHandler, floatingLabel: fieldData.label }) }));
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
FormFieldRenderer.propTypes = {
|
|
18
|
+
fieldData: PropTypes.shape({
|
|
19
|
+
name: PropTypes.string.isRequired,
|
|
20
|
+
type: PropTypes.string.isRequired,
|
|
21
|
+
label: PropTypes.string,
|
|
22
|
+
options: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
|
|
23
|
+
}).isRequired,
|
|
24
|
+
value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
|
|
25
|
+
onChangeHandler: PropTypes.func.isRequired,
|
|
26
|
+
className: PropTypes.string,
|
|
27
|
+
};
|
|
28
|
+
export default FormFieldRenderer;
|
|
29
|
+
//# sourceMappingURL=FieldRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/FieldRenderer.jsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from '@openedx/paragon';\n\nconst FormFieldRenderer = ({\n fieldData, value, onChangeHandler, className,\n}) => {\n switch (fieldData.type) {\n case 'select':\n return (\n <Form.Group controlId={fieldData.name}>\n <Form.Control\n as=\"select\"\n className={className}\n name={fieldData.name}\n value={value ?? ''}\n onChange={onChangeHandler}\n floatingLabel={fieldData.label}\n >\n <option value=\"\">{fieldData.label}</option>\n {fieldData.options.map(option => (\n <option key={option[0]} value={option[0]}>\n {option[1]}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n );\n\n case 'textarea':\n return (\n <Form.Group controlId={fieldData.name}>\n <Form.Control\n as=\"textarea\"\n className={className}\n name={fieldData.name}\n value={value ?? ''}\n onChange={onChangeHandler}\n floatingLabel={fieldData.label}\n />\n </Form.Group>\n );\n\n case 'checkbox':\n return (\n <Form.Group controlId={fieldData.name}>\n <Form.Checkbox\n id={fieldData.name}\n name={fieldData.name}\n checked={!!value}\n onChange={onChangeHandler}\n >\n {fieldData.label}\n </Form.Checkbox>\n </Form.Group>\n );\n\n default:\n return (\n <Form.Group controlId={fieldData.name}>\n <Form.Control\n className={className}\n name={fieldData.name}\n value={value ?? ''}\n onChange={onChangeHandler}\n floatingLabel={fieldData.label}\n />\n </Form.Group>\n );\n }\n};\n\nFormFieldRenderer.propTypes = {\n fieldData: PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n label: PropTypes.string,\n options: PropTypes.arrayOf(\n PropTypes.arrayOf(PropTypes.string),\n ),\n }).isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n onChangeHandler: PropTypes.func.isRequired,\n className: PropTypes.string,\n};\n\nexport default FormFieldRenderer;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as FormFieldRenderer } from "./FieldRenderer";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/field-renderer/index.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export { default as FormFieldRenderer } from './FieldRenderer';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function useClearProgressiveProfilingQueryParams(): () => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { PROGRESSIVE_PROFILING_QUERY_PARAM } from '../utils/constants';
|
|
3
|
+
export default function useClearProgressiveProfilingQueryParams() {
|
|
4
|
+
return useCallback(() => {
|
|
5
|
+
const currentUrl = new URL(window.location.href);
|
|
6
|
+
currentUrl.searchParams.delete(PROGRESSIVE_PROFILING_QUERY_PARAM);
|
|
7
|
+
window.history.replaceState({}, '', currentUrl.toString());
|
|
8
|
+
}, []);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=useClearProgressiveProfilingQueryParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClearProgressiveProfilingQueryParams.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useClearProgressiveProfilingQueryParams.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,uCAAuC;IAC7D,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEjD,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAElE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport { PROGRESSIVE_PROFILING_QUERY_PARAM } from '../utils/constants';\n\nexport default function useClearProgressiveProfilingQueryParams() {\n return useCallback(() => {\n const currentUrl = new URL(window.location.href);\n\n currentUrl.searchParams.delete(PROGRESSIVE_PROFILING_QUERY_PARAM);\n\n window.history.replaceState({}, '', currentUrl.toString());\n }, []);\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default function useProgressiveProfilingForm(): {
|
|
2
|
+
loadState: string;
|
|
3
|
+
submitState: string;
|
|
4
|
+
error: null;
|
|
5
|
+
values: {};
|
|
6
|
+
fieldList: any[];
|
|
7
|
+
onChangeHandler: (event: any) => void;
|
|
8
|
+
submit: () => Promise<boolean>;
|
|
9
|
+
redirectUrl: string;
|
|
10
|
+
extendedProfileFieldNames: never[];
|
|
11
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { useMemo, useState } from 'react';
|
|
11
|
+
import { COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE, } from '../utils/constants';
|
|
12
|
+
import { saveProgressiveProfiling } from '../api/service';
|
|
13
|
+
import { progressiveProfilingFields } from '../data/progressiveProfilingFields';
|
|
14
|
+
export default function useProgressiveProfilingForm() {
|
|
15
|
+
const [submitState, setSubmitState] = useState(DEFAULT_STATE);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const [values, setValues] = useState({});
|
|
18
|
+
const fieldData = progressiveProfilingFields;
|
|
19
|
+
const fieldList = useMemo(() => Object.keys(fieldData.fields).map((key) => fieldData.fields[key]), [fieldData]);
|
|
20
|
+
const onChangeHandler = (event) => {
|
|
21
|
+
const { name, type, value, checked, } = event.target;
|
|
22
|
+
setValues((prev) => (Object.assign(Object.assign({}, prev), { [name]: type === 'checkbox' ? checked : value })));
|
|
23
|
+
};
|
|
24
|
+
const submit = () => __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
setSubmitState(PENDING_STATE);
|
|
27
|
+
setError(null);
|
|
28
|
+
yield saveProgressiveProfiling(values, fieldData.extendedProfile || []);
|
|
29
|
+
setSubmitState(COMPLETE_STATE);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
setSubmitState(DEFAULT_STATE);
|
|
34
|
+
setError(err);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
loadState: COMPLETE_STATE,
|
|
40
|
+
submitState,
|
|
41
|
+
error,
|
|
42
|
+
values,
|
|
43
|
+
fieldList,
|
|
44
|
+
onChangeHandler,
|
|
45
|
+
submit,
|
|
46
|
+
redirectUrl: fieldData.redirectUrl || '',
|
|
47
|
+
extendedProfileFieldNames: fieldData.extendedProfile || [],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useProgressiveProfilingForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProgressiveProfilingForm.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingForm.jsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,cAAc,EAAE,aAAa,EAAE,aAAa,GAC7C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,MAAM,CAAC,OAAO,UAAU,2BAA2B;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,0BAA0B,CAAC;IAE7C,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACvE,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,EACJ,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAC3B,GAAG,KAAK,CAAC,MAAM,CAAC;QACjB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCACf,IAAI,KACP,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAC7C,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,CAAC;YACH,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YACxE,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,cAAc;QACzB,WAAW;QACX,KAAK;QACL,MAAM;QACN,SAAS;QACT,eAAe;QACf,MAAM;QACN,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,EAAE;QACxC,yBAAyB,EAAE,SAAS,CAAC,eAAe,IAAI,EAAE;KAC3D,CAAC;AACJ,CAAC","sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE,\n} from '../utils/constants';\nimport { saveProgressiveProfiling } from '../api/service';\nimport { progressiveProfilingFields } from '../data/progressiveProfilingFields';\n\nexport default function useProgressiveProfilingForm() {\n const [submitState, setSubmitState] = useState(DEFAULT_STATE);\n const [error, setError] = useState(null);\n const [values, setValues] = useState({});\n\n const fieldData = progressiveProfilingFields;\n\n const fieldList = useMemo(\n () => Object.keys(fieldData.fields).map((key) => fieldData.fields[key]),\n [fieldData],\n );\n\n const onChangeHandler = (event) => {\n const {\n name, type, value, checked,\n } = event.target;\n setValues((prev) => ({\n ...prev,\n [name]: type === 'checkbox' ? checked : value,\n }));\n };\n\n const submit = async () => {\n try {\n setSubmitState(PENDING_STATE);\n setError(null);\n await saveProgressiveProfiling(values, fieldData.extendedProfile || []);\n setSubmitState(COMPLETE_STATE);\n return true;\n } catch (err) {\n setSubmitState(DEFAULT_STATE);\n setError(err);\n return false;\n }\n };\n\n return {\n loadState: COMPLETE_STATE,\n submitState,\n error,\n values,\n fieldList,\n onChangeHandler,\n submit,\n redirectUrl: fieldData.redirectUrl || '',\n extendedProfileFieldNames: fieldData.extendedProfile || [],\n };\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PROGRESSIVE_PROFILING_QUERY_PARAM } from '../utils/constants';
|
|
2
|
+
export default function useProgressiveProfilingTrigger() {
|
|
3
|
+
const params = new URLSearchParams(window.location.search);
|
|
4
|
+
return {
|
|
5
|
+
shouldOpen: params.get(PROGRESSIVE_PROFILING_QUERY_PARAM) === 'true',
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=useProgressiveProfilingTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProgressiveProfilingTrigger.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/hooks/useProgressiveProfilingTrigger.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,8BAA8B;IACpD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,KAAK,MAAM;KACrE,CAAC;AACJ,CAAC","sourcesContent":["import { PROGRESSIVE_PROFILING_QUERY_PARAM } from '../utils/constants';\n\nexport default function useProgressiveProfilingTrigger() {\n const params = new URLSearchParams(window.location.search);\n\n return {\n shouldOpen: params.get(PROGRESSIVE_PROFILING_QUERY_PARAM) === 'true',\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/index.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,eAAe,yBAAyB,CAAC","sourcesContent":["import { ProgressiveProfilingEntry } from './ProgressiveProfilingEntry';\n\nexport default ProgressiveProfilingEntry;\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
import React, { useEffect, useState } from 'react';
|
|
12
|
+
import { useNavigate } from 'react-router-dom';
|
|
13
|
+
import { Helmet } from 'react-helmet';
|
|
14
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
15
|
+
import { getAppConfig } from '@openedx/frontend-base';
|
|
16
|
+
import { getAuthenticatedUser, getAuthenticatedHttpClient } from '@openedx/frontend-base';
|
|
17
|
+
import { identifyAuthenticatedUser } from '@openedx/frontend-base';
|
|
18
|
+
import { Form, Hyperlink, StatefulButton, Alert, } from '@openedx/paragon';
|
|
19
|
+
import messages from './messages';
|
|
20
|
+
import useProgressiveProfilingForm from '../hooks/useProgressiveProfilingForm';
|
|
21
|
+
import BaseContainer from './base-container';
|
|
22
|
+
import { FormFieldRenderer } from '../field-renderer';
|
|
23
|
+
import ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';
|
|
24
|
+
import getThirdPartyAuthContext from './service/getThirdPartyAuthContext';
|
|
25
|
+
import { trackProgressiveProfilingSkipLinkClick, trackProgressiveProfilingSubmitClick, trackProgressiveProfilingSupportLinkClick, trackProgressiveProfilingPageViewed, } from '../../tracking/trackers/progressiveProfiling';
|
|
26
|
+
import { PENDING_STATE, COMPLETE_STATE } from '../utils/constants';
|
|
27
|
+
import './index.scss';
|
|
28
|
+
const ProgressiveProfilingPage = () => {
|
|
29
|
+
const navigate = useNavigate();
|
|
30
|
+
const { formatMessage } = useIntl();
|
|
31
|
+
const authenticatedUser = getAuthenticatedUser();
|
|
32
|
+
const client = getAuthenticatedHttpClient();
|
|
33
|
+
const { loadState, submitState, error, values, fieldList, onChangeHandler, submit, } = useProgressiveProfilingForm(authenticatedUser.username, client);
|
|
34
|
+
const [showModal, setShowModal] = useState(false);
|
|
35
|
+
const handleSubmit = (e) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
const success = yield submit();
|
|
38
|
+
if (!success) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
trackProgressiveProfilingSubmitClick({
|
|
42
|
+
isGenderSelected: !!values.gender,
|
|
43
|
+
isYearOfBirthSelected: !!values.year_of_birth,
|
|
44
|
+
isLevelOfEducationSelected: !!values.level_of_education,
|
|
45
|
+
isWorkExperienceSelected: !!values.work_experience,
|
|
46
|
+
});
|
|
47
|
+
navigate('/', { replace: true });
|
|
48
|
+
});
|
|
49
|
+
const handleSkip = () => {
|
|
50
|
+
trackProgressiveProfilingSkipLinkClick();
|
|
51
|
+
setShowModal(true);
|
|
52
|
+
};
|
|
53
|
+
const [mfeContext, setMfeContext] = useState(null);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
const fetchContext = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
|
+
try {
|
|
57
|
+
const data = yield getThirdPartyAuthContext();
|
|
58
|
+
setMfeContext(data);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
// Allow the page to render even if enterprise context cannot be fetched.
|
|
62
|
+
setMfeContext(null);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
fetchContext();
|
|
66
|
+
}, []);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const userId = authenticatedUser === null || authenticatedUser === void 0 ? void 0 : authenticatedUser.userId;
|
|
69
|
+
if (userId) {
|
|
70
|
+
identifyAuthenticatedUser(userId);
|
|
71
|
+
trackProgressiveProfilingPageViewed();
|
|
72
|
+
}
|
|
73
|
+
}, [authenticatedUser === null || authenticatedUser === void 0 ? void 0 : authenticatedUser.userId]);
|
|
74
|
+
return (_jsxs(BaseContainer, { enterpriseBranding: mfeContext, children: [_jsx(Helmet, { children: _jsx("title", { children: formatMessage(messages['progressive.profiling.page.title'], { siteName: getAppConfig().SITE_NAME }) }) }), _jsx(ProgressiveProfilingPageModal, { isOpen: showModal, redirectUrl: "/" }), _jsxs("div", { className: "mw-xs m-4 pp-page-content", children: [_jsx("div", { children: _jsx("h2", { className: "pp-page__heading text-primary", children: formatMessage(messages['progressive.profiling.page.heading']) }) }), _jsx("hr", { className: "border-light-700 mb-4" }), error && (_jsxs(Alert, { variant: "danger", children: [_jsx(Alert.Heading, { children: formatMessage(messages['welcome.page.error.heading']) }), _jsx("p", { children: formatMessage(messages['welcome.page.error.message']) })] })), _jsxs(Form, { children: [fieldList.map((fieldData) => (_jsx(FormFieldRenderer, { fieldData: fieldData, value: values[fieldData.name], onChangeHandler: onChangeHandler }, fieldData.name))), (getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (_jsx("span", { className: "pp-page__support-link", children: _jsx(Hyperlink, { isInline: true, variant: "muted", destination: getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK, target: "_blank", showLaunchIcon: false, onClick: () => (trackProgressiveProfilingSupportLinkClick()), children: formatMessage(messages['optional.fields.information.link']) }) })), _jsxs("div", { className: "d-flex mt-4 mb-3", children: [_jsx(StatefulButton, { type: "submit", variant: "brand", className: "pp-page__button-width", state: submitState, labels: {
|
|
75
|
+
default: formatMessage(messages['optional.fields.submit.button']),
|
|
76
|
+
pending: '',
|
|
77
|
+
}, onClick: handleSubmit, onMouseDown: (e) => e.preventDefault(), disabled: loadState !== COMPLETE_STATE || submitState === PENDING_STATE }), _jsx(StatefulButton, { className: "text-gray-700 font-weight-500", type: "button", variant: "link", labels: {
|
|
78
|
+
default: formatMessage(messages['optional.fields.skip.button']),
|
|
79
|
+
}, onClick: handleSkip, onMouseDown: (e) => e.preventDefault() })] })] })] })] }));
|
|
80
|
+
};
|
|
81
|
+
export default ProgressiveProfilingPage;
|
|
82
|
+
//# sourceMappingURL=ProgressiveProfiling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressiveProfiling.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfiling.jsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from '@openedx/frontend-base';\nimport { getAppConfig } from '@openedx/frontend-base';\nimport { getAuthenticatedUser, getAuthenticatedHttpClient } from '@openedx/frontend-base';\nimport { identifyAuthenticatedUser } from '@openedx/frontend-base';\nimport {\n Form, Hyperlink, StatefulButton, Alert,\n} from '@openedx/paragon';\nimport messages from './messages';\n\nimport useProgressiveProfilingForm from '../hooks/useProgressiveProfilingForm';\n\nimport BaseContainer from './base-container';\nimport { FormFieldRenderer } from '../field-renderer';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\n\nimport getThirdPartyAuthContext from './service/getThirdPartyAuthContext';\n\nimport {\n trackProgressiveProfilingSkipLinkClick, trackProgressiveProfilingSubmitClick,\n trackProgressiveProfilingSupportLinkClick, trackProgressiveProfilingPageViewed,\n} from '../../tracking/trackers/progressiveProfiling';\n\nimport { PENDING_STATE, COMPLETE_STATE } from '../utils/constants';\n\nimport './index.scss';\n\nconst ProgressiveProfilingPage = () => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const authenticatedUser = getAuthenticatedUser();\n const client = getAuthenticatedHttpClient();\n const {\n loadState, submitState, error, values, fieldList, onChangeHandler, submit,\n } = useProgressiveProfilingForm(authenticatedUser.username, client);\n const [showModal, setShowModal] = useState(false);\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n const success = await submit();\n if (!success) { return; }\n\n trackProgressiveProfilingSubmitClick({\n isGenderSelected: !!values.gender,\n isYearOfBirthSelected: !!values.year_of_birth,\n isLevelOfEducationSelected: !!values.level_of_education,\n isWorkExperienceSelected: !!values.work_experience,\n });\n navigate('/', { replace: true });\n };\n\n const handleSkip = () => {\n trackProgressiveProfilingSkipLinkClick();\n setShowModal(true);\n };\n\n const [mfeContext, setMfeContext] = useState(null);\n\n useEffect(() => {\n const fetchContext = async () => {\n try {\n const data = await getThirdPartyAuthContext();\n setMfeContext(data);\n } catch (err) {\n // Allow the page to render even if enterprise context cannot be fetched.\n setMfeContext(null);\n }\n };\n fetchContext();\n }, []);\n\n useEffect(() => {\n const userId = authenticatedUser?.userId;\n if (userId) {\n identifyAuthenticatedUser(userId);\n trackProgressiveProfilingPageViewed();\n }\n }, [authenticatedUser?.userId]);\n\n return (\n <BaseContainer enterpriseBranding={mfeContext}>\n <Helmet>\n <title>{formatMessage(\n messages['progressive.profiling.page.title'],\n { siteName: getAppConfig().SITE_NAME },\n )}\n </title>\n </Helmet>\n <ProgressiveProfilingPageModal isOpen={showModal} redirectUrl=\"/\" />\n <div className=\"mw-xs m-4 pp-page-content\">\n <div>\n <h2 className=\"pp-page__heading text-primary\">{formatMessage(messages['progressive.profiling.page.heading'])}</h2>\n </div><hr className=\"border-light-700 mb-4\" />\n {error && (\n <Alert variant=\"danger\">\n <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n </Alert>\n )}\n <Form>\n {fieldList.map((fieldData) => (\n <FormFieldRenderer\n key={fieldData.name}\n fieldData={fieldData}\n value={values[fieldData.name]}\n onChangeHandler={onChangeHandler}\n />\n ))}\n {(getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n <span className=\"pp-page__support-link\">\n <Hyperlink\n isInline\n variant=\"muted\"\n destination={getAppConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n onClick={() => (trackProgressiveProfilingSupportLinkClick())}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n </Hyperlink>\n </span>\n )}\n <div className=\"d-flex mt-4 mb-3\">\n <StatefulButton\n type=\"submit\"\n variant=\"brand\"\n className=\"pp-page__button-width\"\n state={submitState}\n labels={{\n default: formatMessage(messages['optional.fields.submit.button']),\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n disabled={loadState !== COMPLETE_STATE || submitState === PENDING_STATE}\n />\n <StatefulButton\n className=\"text-gray-700 font-weight-500\"\n type=\"button\"\n variant=\"link\"\n labels={{\n default: formatMessage(messages['optional.fields.skip.button']),\n }}\n onClick={handleSkip}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n </Form>\n </div>\n </BaseContainer>\n );\n};\n\nexport default ProgressiveProfilingPage;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default ProgressiveProfilingPageModal;
|
|
2
|
+
declare function ProgressiveProfilingPageModal(props: any): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace ProgressiveProfilingPageModal {
|
|
4
|
+
namespace propTypes {
|
|
5
|
+
let isOpen: PropTypes.Requireable<boolean>;
|
|
6
|
+
let redirectUrl: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
namespace defaultProps {
|
|
9
|
+
let isOpen_1: boolean;
|
|
10
|
+
export { isOpen_1 as isOpen };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { getAppConfig } from '@openedx/frontend-base';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import { ActionRow, Button, ModalDialog } from '@openedx/paragon';
|
|
6
|
+
import PropTypes from 'prop-types';
|
|
7
|
+
import messages from './messages';
|
|
8
|
+
const ProgressiveProfilingPageModal = (props) => {
|
|
9
|
+
const { formatMessage } = useIntl();
|
|
10
|
+
const { isOpen, redirectUrl } = props;
|
|
11
|
+
const platformName = getAppConfig().SITE_NAME;
|
|
12
|
+
const handleSubmit = (e) => {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
window.location.href = redirectUrl;
|
|
15
|
+
};
|
|
16
|
+
return (_jsxs(ModalDialog, { title: formatMessage(messages['modal.title']), isOpen: isOpen, onClose: () => { }, size: "sm", variant: "default", hasCloseButton: false, children: [_jsx(ModalDialog.Header, { children: _jsx(ModalDialog.Title, { children: formatMessage(messages['modal.title']) }) }), _jsx(ModalDialog.Body, { children: formatMessage(messages['modal.description']) }), _jsx(ModalDialog.Footer, { children: _jsx(ActionRow, { children: _jsx(Button, { onClick: handleSubmit, variant: "primary", children: formatMessage(messages['continue.to.platform'], { platformName }) }) }) })] }));
|
|
17
|
+
};
|
|
18
|
+
ProgressiveProfilingPageModal.propTypes = {
|
|
19
|
+
isOpen: PropTypes.bool,
|
|
20
|
+
redirectUrl: PropTypes.string.isRequired,
|
|
21
|
+
};
|
|
22
|
+
ProgressiveProfilingPageModal.defaultProps = {
|
|
23
|
+
isOpen: false,
|
|
24
|
+
};
|
|
25
|
+
export default ProgressiveProfilingPageModal;
|
|
26
|
+
//# sourceMappingURL=ProgressiveProfilingPageModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressiveProfilingPageModal.js","sourceRoot":"","sources":["../../../../../src/widgets/LearnerDashboardPlugins/progressive-profiling-dashboard/progressive-profiling-authn-replica/ProgressiveProfilingPageModal.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,YAAY,EAAE,CAAC,SAAS,CAAC;IAE9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,cAAc,EAAE,KAAK,aAErB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,WAAW,CAAC,KAAK,cACf,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GACrB,GACD,EAErB,KAAC,WAAW,CAAC,IAAI,cACd,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAC5B,EAEnB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,SAAS,cACR,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,SAAS,YAC7C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAC3D,GACC,GACO,IACT,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,6BAA6B,CAAC,SAAS,GAAG;IACxC,MAAM,EAAE,SAAS,CAAC,IAAI;IACtB,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACzC,CAAC;AAEF,6BAA6B,CAAC,YAAY,GAAG;IAC3C,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,6BAA6B,CAAC","sourcesContent":["import React from 'react';\n\nimport { getAppConfig } from '@openedx/frontend-base';\nimport { useIntl } from '@openedx/frontend-base';\nimport { ActionRow, Button, ModalDialog } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n const { formatMessage } = useIntl();\n const { isOpen, redirectUrl } = props;\n const platformName = getAppConfig().SITE_NAME;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n window.location.href = redirectUrl;\n };\n\n return (\n <ModalDialog\n title={formatMessage(messages['modal.title'])}\n isOpen={isOpen}\n onClose={() => {}}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['modal.title'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {formatMessage(messages['modal.description'])}\n </ModalDialog.Body>\n\n <ModalDialog.Footer>\n <ActionRow>\n <Button onClick={handleSubmit} variant=\"primary\">\n {formatMessage(messages['continue.to.platform'], { platformName })}\n </Button>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nProgressiveProfilingPageModal.propTypes = {\n isOpen: PropTypes.bool,\n redirectUrl: PropTypes.string.isRequired,\n};\n\nProgressiveProfilingPageModal.defaultProps = {\n isOpen: false,\n};\n\nexport default ProgressiveProfilingPageModal;\n"]}
|