@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.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/LICENSE +661 -0
- package/README.rst +235 -0
- package/dist/Main.d.ts +3 -0
- package/dist/Main.js +13 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +18 -0
- package/dist/app.js.map +1 -0
- package/dist/app.scss +10 -0
- package/dist/certificates/CertificatesPage.d.ts +2 -0
- package/dist/certificates/CertificatesPage.js +6 -0
- package/dist/certificates/CertificatesPage.js.map +1 -0
- package/dist/cohorts/CohortsPage.d.ts +3 -0
- package/dist/cohorts/CohortsPage.js +41 -0
- package/dist/cohorts/CohortsPage.js.map +1 -0
- package/dist/cohorts/CohortsPage.scss +14 -0
- package/dist/cohorts/components/CohortCard.d.ts +6 -0
- package/dist/cohorts/components/CohortCard.js +53 -0
- package/dist/cohorts/components/CohortCard.js.map +1 -0
- package/dist/cohorts/components/CohortContext.d.ts +14 -0
- package/dist/cohorts/components/CohortContext.js +46 -0
- package/dist/cohorts/components/CohortContext.js.map +1 -0
- package/dist/cohorts/components/CohortsForm.d.ts +11 -0
- package/dist/cohorts/components/CohortsForm.js +58 -0
- package/dist/cohorts/components/CohortsForm.js.map +1 -0
- package/dist/cohorts/components/DisableCohortsModal.d.ts +7 -0
- package/dist/cohorts/components/DisableCohortsModal.js +10 -0
- package/dist/cohorts/components/DisableCohortsModal.js.map +1 -0
- package/dist/cohorts/components/DisabledCohortsView.d.ts +5 -0
- package/dist/cohorts/components/DisabledCohortsView.js +10 -0
- package/dist/cohorts/components/DisabledCohortsView.js.map +1 -0
- package/dist/cohorts/components/EnabledCohortsView.d.ts +2 -0
- package/dist/cohorts/components/EnabledCohortsView.js +96 -0
- package/dist/cohorts/components/EnabledCohortsView.js.map +1 -0
- package/dist/cohorts/components/ManageLearners.d.ts +2 -0
- package/dist/cohorts/components/ManageLearners.js +64 -0
- package/dist/cohorts/components/ManageLearners.js.map +1 -0
- package/dist/cohorts/components/SelectedCohortInfo.d.ts +2 -0
- package/dist/cohorts/components/SelectedCohortInfo.js +43 -0
- package/dist/cohorts/components/SelectedCohortInfo.js.map +1 -0
- package/dist/cohorts/constants.d.ts +4 -0
- package/dist/cohorts/constants.js +5 -0
- package/dist/cohorts/constants.js.map +1 -0
- package/dist/cohorts/data/api.d.ts +9 -0
- package/dist/cohorts/data/api.js +54 -0
- package/dist/cohorts/data/api.js.map +1 -0
- package/dist/cohorts/data/apiHook.d.ts +14 -0
- package/dist/cohorts/data/apiHook.js +64 -0
- package/dist/cohorts/data/apiHook.js.map +1 -0
- package/dist/cohorts/data/queryKeys.d.ts +7 -0
- package/dist/cohorts/data/queryKeys.js +9 -0
- package/dist/cohorts/data/queryKeys.js.map +1 -0
- package/dist/cohorts/messages.d.ts +233 -0
- package/dist/cohorts/messages.js +235 -0
- package/dist/cohorts/messages.js.map +1 -0
- package/dist/cohorts/types.d.ts +15 -0
- package/dist/cohorts/types.js +2 -0
- package/dist/cohorts/types.js.map +1 -0
- package/dist/components/ActionCard.d.ts +11 -0
- package/dist/components/ActionCard.js +7 -0
- package/dist/components/ActionCard.js.map +1 -0
- package/dist/components/CSVComponent.d.ts +10 -0
- package/dist/components/CSVComponent.js +21 -0
- package/dist/components/CSVComponent.js.map +1 -0
- package/dist/components/ObjectCell.d.ts +5 -0
- package/dist/components/ObjectCell.js +7 -0
- package/dist/components/ObjectCell.js.map +1 -0
- package/dist/components/PageNotFound.d.ts +2 -0
- package/dist/components/PageNotFound.js +12 -0
- package/dist/components/PageNotFound.js.map +1 -0
- package/dist/components/PendingTasks.d.ts +5 -0
- package/dist/components/PendingTasks.js +38 -0
- package/dist/components/PendingTasks.js.map +1 -0
- package/dist/components/SpecifyLearnerField.d.ts +5 -0
- package/dist/components/SpecifyLearnerField.js +10 -0
- package/dist/components/SpecifyLearnerField.js.map +1 -0
- package/dist/components/messages.d.ts +108 -0
- package/dist/components/messages.js +110 -0
- package/dist/components/messages.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/courseInfo/CourseInfoPage.d.ts +2 -0
- package/dist/courseInfo/CourseInfoPage.js +7 -0
- package/dist/courseInfo/CourseInfoPage.js.map +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.d.ts +8 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.js +13 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.js.map +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.d.ts +2 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.js +24 -0
- package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.js.map +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/index.d.ts +2 -0
- package/dist/courseInfo/components/EnrollmentSummary/index.js +3 -0
- package/dist/courseInfo/components/EnrollmentSummary/index.js.map +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/messages.d.ts +83 -0
- package/dist/courseInfo/components/EnrollmentSummary/messages.js +85 -0
- package/dist/courseInfo/components/EnrollmentSummary/messages.js.map +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/utils.d.ts +1 -0
- package/dist/courseInfo/components/EnrollmentSummary/utils.js +9 -0
- package/dist/courseInfo/components/EnrollmentSummary/utils.js.map +1 -0
- package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.d.ts +2 -0
- package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.js +46 -0
- package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.js.map +1 -0
- package/dist/courseInfo/components/generalCourseInfo/StatusBadge.d.ts +5 -0
- package/dist/courseInfo/components/generalCourseInfo/StatusBadge.js +15 -0
- package/dist/courseInfo/components/generalCourseInfo/StatusBadge.js.map +1 -0
- package/dist/courseInfo/components/generalCourseInfo/index.d.ts +1 -0
- package/dist/courseInfo/components/generalCourseInfo/index.js +2 -0
- package/dist/courseInfo/components/generalCourseInfo/index.js.map +1 -0
- package/dist/courseInfo/components/generalCourseInfo/messages.d.ts +8 -0
- package/dist/courseInfo/components/generalCourseInfo/messages.js +10 -0
- package/dist/courseInfo/components/generalCourseInfo/messages.js.map +1 -0
- package/dist/courseInfo/messages.d.ts +8 -0
- package/dist/courseInfo/messages.js +10 -0
- package/dist/courseInfo/messages.js.map +1 -0
- package/dist/courseInfo/types.d.ts +27 -0
- package/dist/courseInfo/types.js +2 -0
- package/dist/courseInfo/types.js.map +1 -0
- package/dist/courseTeam/CourseTeamPage.d.ts +2 -0
- package/dist/courseTeam/CourseTeamPage.js +6 -0
- package/dist/courseTeam/CourseTeamPage.js.map +1 -0
- package/dist/data/api.d.ts +14 -0
- package/dist/data/api.js +33 -0
- package/dist/data/api.js.map +1 -0
- package/dist/data/apiHook.d.ts +4 -0
- package/dist/data/apiHook.js +28 -0
- package/dist/data/apiHook.js.map +1 -0
- package/dist/data/queryKeys.d.ts +8 -0
- package/dist/data/queryKeys.js +10 -0
- package/dist/data/queryKeys.js.map +1 -0
- package/dist/dataDownloads/DataDownloadsPage.d.ts +2 -0
- package/dist/dataDownloads/DataDownloadsPage.js +162 -0
- package/dist/dataDownloads/DataDownloadsPage.js.map +1 -0
- package/dist/dataDownloads/components/DataDownloadTable.d.ts +8 -0
- package/dist/dataDownloads/components/DataDownloadTable.js +42 -0
- package/dist/dataDownloads/components/DataDownloadTable.js.map +1 -0
- package/dist/dataDownloads/components/DownloadLinkCell.d.ts +6 -0
- package/dist/dataDownloads/components/DownloadLinkCell.js +13 -0
- package/dist/dataDownloads/components/DownloadLinkCell.js.map +1 -0
- package/dist/dataDownloads/components/GenerateReports.d.ts +8 -0
- package/dist/dataDownloads/components/GenerateReports.js +20 -0
- package/dist/dataDownloads/components/GenerateReports.js.map +1 -0
- package/dist/dataDownloads/components/ReportNameCell.d.ts +3 -0
- package/dist/dataDownloads/components/ReportNameCell.js +6 -0
- package/dist/dataDownloads/components/ReportNameCell.js.map +1 -0
- package/dist/dataDownloads/data/api.d.ts +2 -0
- package/dist/dataDownloads/data/api.js +23 -0
- package/dist/dataDownloads/data/api.js.map +1 -0
- package/dist/dataDownloads/data/apiHook.d.ts +7 -0
- package/dist/dataDownloads/data/apiHook.js +22 -0
- package/dist/dataDownloads/data/apiHook.js.map +1 -0
- package/dist/dataDownloads/data/queryKeys.d.ts +5 -0
- package/dist/dataDownloads/data/queryKeys.js +7 -0
- package/dist/dataDownloads/data/queryKeys.js.map +1 -0
- package/dist/dataDownloads/messages.d.ts +338 -0
- package/dist/dataDownloads/messages.js +341 -0
- package/dist/dataDownloads/messages.js.map +1 -0
- package/dist/dataDownloads/types.d.ts +8 -0
- package/dist/dataDownloads/types.js +2 -0
- package/dist/dataDownloads/types.js.map +1 -0
- package/dist/dataDownloads/utils.d.ts +26 -0
- package/dist/dataDownloads/utils.js +49 -0
- package/dist/dataDownloads/utils.js.map +1 -0
- package/dist/dateExtensions/DateExtensionsPage.d.ts +2 -0
- package/dist/dateExtensions/DateExtensionsPage.js +87 -0
- package/dist/dateExtensions/DateExtensionsPage.js.map +1 -0
- package/dist/dateExtensions/components/AddExtensionModal.d.ts +13 -0
- package/dist/dateExtensions/components/AddExtensionModal.js +34 -0
- package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -0
- package/dist/dateExtensions/components/DateExtensionsList.d.ts +7 -0
- package/dist/dateExtensions/components/DateExtensionsList.js +103 -0
- package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -0
- package/dist/dateExtensions/components/ResetExtensionsModal.d.ts +10 -0
- package/dist/dateExtensions/components/ResetExtensionsModal.js +10 -0
- package/dist/dateExtensions/components/ResetExtensionsModal.js.map +1 -0
- package/dist/dateExtensions/components/SelectGradedSubsection.d.ts +8 -0
- package/dist/dateExtensions/components/SelectGradedSubsection.js +15 -0
- package/dist/dateExtensions/components/SelectGradedSubsection.js.map +1 -0
- package/dist/dateExtensions/data/api.d.ts +6 -0
- package/dist/dateExtensions/data/api.js +40 -0
- package/dist/dateExtensions/data/api.js.map +1 -0
- package/dist/dateExtensions/data/apiHook.d.ts +11 -0
- package/dist/dateExtensions/data/apiHook.js +31 -0
- package/dist/dateExtensions/data/apiHook.js.map +1 -0
- package/dist/dateExtensions/data/queryKeys.d.ts +10 -0
- package/dist/dateExtensions/data/queryKeys.js +17 -0
- package/dist/dateExtensions/data/queryKeys.js.map +1 -0
- package/dist/dateExtensions/messages.d.ts +128 -0
- package/dist/dateExtensions/messages.js +130 -0
- package/dist/dateExtensions/messages.js.map +1 -0
- package/dist/dateExtensions/types.d.ts +24 -0
- package/dist/dateExtensions/types.js +2 -0
- package/dist/dateExtensions/types.js.map +1 -0
- package/dist/enrollments/EnrollmentsPage.d.ts +2 -0
- package/dist/enrollments/EnrollmentsPage.js +32 -0
- package/dist/enrollments/EnrollmentsPage.js.map +1 -0
- package/dist/enrollments/components/EnrollmentStatusModal.d.ts +6 -0
- package/dist/enrollments/components/EnrollmentStatusModal.js +23 -0
- package/dist/enrollments/components/EnrollmentStatusModal.js.map +1 -0
- package/dist/enrollments/components/EnrollmentsList.d.ts +6 -0
- package/dist/enrollments/components/EnrollmentsList.js +99 -0
- package/dist/enrollments/components/EnrollmentsList.js.map +1 -0
- package/dist/enrollments/components/UnenrollModal.d.ts +8 -0
- package/dist/enrollments/components/UnenrollModal.js +7 -0
- package/dist/enrollments/components/UnenrollModal.js.map +1 -0
- package/dist/enrollments/data/api.d.ts +4 -0
- package/dist/enrollments/data/api.js +32 -0
- package/dist/enrollments/data/api.js.map +1 -0
- package/dist/enrollments/data/apiHook.d.ts +3 -0
- package/dist/enrollments/data/apiHook.js +14 -0
- package/dist/enrollments/data/apiHook.js.map +1 -0
- package/dist/enrollments/data/queryKeys.d.ts +7 -0
- package/dist/enrollments/data/queryKeys.js +8 -0
- package/dist/enrollments/data/queryKeys.js.map +1 -0
- package/dist/enrollments/messages.d.ts +108 -0
- package/dist/enrollments/messages.js +110 -0
- package/dist/enrollments/messages.js.map +1 -0
- package/dist/enrollments/types.d.ts +15 -0
- package/dist/enrollments/types.js +2 -0
- package/dist/enrollments/types.js.map +1 -0
- package/dist/grading/GradingPage.d.ts +2 -0
- package/dist/grading/GradingPage.js +6 -0
- package/dist/grading/GradingPage.js.map +1 -0
- package/dist/hooks/useDebouncedFilter.d.ts +16 -0
- package/dist/hooks/useDebouncedFilter.js +27 -0
- package/dist/hooks/useDebouncedFilter.js.map +1 -0
- package/dist/i18n/index.d.ts +25 -0
- package/dist/i18n/index.js +26 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/instructorNav/InstructorNav.d.ts +8 -0
- package/dist/instructorNav/InstructorNav.js +42 -0
- package/dist/instructorNav/InstructorNav.js.map +1 -0
- package/dist/openResponses/OpenResponsesPage.d.ts +2 -0
- package/dist/openResponses/OpenResponsesPage.js +8 -0
- package/dist/openResponses/OpenResponsesPage.js.map +1 -0
- package/dist/openResponses/components/DetailAssessmentsList.d.ts +2 -0
- package/dist/openResponses/components/DetailAssessmentsList.js +44 -0
- package/dist/openResponses/components/DetailAssessmentsList.js.map +1 -0
- package/dist/openResponses/components/OpenResponsesSummary.d.ts +2 -0
- package/dist/openResponses/components/OpenResponsesSummary.js +30 -0
- package/dist/openResponses/components/OpenResponsesSummary.js.map +1 -0
- package/dist/openResponses/data/api.d.ts +4 -0
- package/dist/openResponses/data/api.js +23 -0
- package/dist/openResponses/data/api.js.map +1 -0
- package/dist/openResponses/data/apiHook.d.ts +2 -0
- package/dist/openResponses/data/apiHook.js +14 -0
- package/dist/openResponses/data/apiHook.js.map +1 -0
- package/dist/openResponses/data/queryKeys.d.ts +6 -0
- package/dist/openResponses/data/queryKeys.js +8 -0
- package/dist/openResponses/data/queryKeys.js.map +1 -0
- package/dist/openResponses/messages.d.ts +83 -0
- package/dist/openResponses/messages.js +85 -0
- package/dist/openResponses/messages.js.map +1 -0
- package/dist/openResponses/types.d.ts +12 -0
- package/dist/openResponses/types.js +2 -0
- package/dist/openResponses/types.js.map +1 -0
- package/dist/pageWrapper/PageWrapper.d.ts +4 -0
- package/dist/pageWrapper/PageWrapper.js +11 -0
- package/dist/pageWrapper/PageWrapper.js.map +1 -0
- package/dist/pageWrapper/messages.d.ts +8 -0
- package/dist/pageWrapper/messages.js +10 -0
- package/dist/pageWrapper/messages.js.map +1 -0
- package/dist/providers/AlertProvider.d.ts +41 -0
- package/dist/providers/AlertProvider.js +117 -0
- package/dist/providers/AlertProvider.js.map +1 -0
- package/dist/providers/QueryProvider.d.ts +6 -0
- package/dist/providers/QueryProvider.js +16 -0
- package/dist/providers/QueryProvider.js.map +1 -0
- package/dist/providers.d.ts +3 -0
- package/dist/providers.js +8 -0
- package/dist/providers.js.map +1 -0
- package/dist/routes.d.ts +20 -0
- package/dist/routes.js +72 -0
- package/dist/routes.js.map +1 -0
- package/dist/slots/PlaceholderSlot/PlaceholderSlot.d.ts +1 -0
- package/dist/slots/PlaceholderSlot/PlaceholderSlot.js +6 -0
- package/dist/slots/PlaceholderSlot/PlaceholderSlot.js.map +1 -0
- package/dist/slots/SlotUtils.d.ts +3 -0
- package/dist/slots/SlotUtils.js +17 -0
- package/dist/slots/SlotUtils.js.map +1 -0
- package/dist/slots.d.ts +3 -0
- package/dist/slots.js +3 -0
- package/dist/slots.js.map +1 -0
- package/dist/specialExams/SpecialExamsPage.d.ts +2 -0
- package/dist/specialExams/SpecialExamsPage.js +6 -0
- package/dist/specialExams/SpecialExamsPage.js.map +1 -0
- package/dist/testUtils.d.ts +4 -0
- package/dist/testUtils.js +24 -0
- package/dist/testUtils.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/formatters.d.ts +1 -0
- package/dist/utils/formatters.js +12 -0
- package/dist/utils/formatters.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { Collapsible, DataTable, Icon, Skeleton } from '@openedx/paragon';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
import { ExpandLess, ExpandMore } from '@openedx/paragon/icons';
|
|
7
|
+
import { usePendingTasks } from '../data/apiHook';
|
|
8
|
+
import { useParams } from 'react-router';
|
|
9
|
+
import { ObjectCell } from './ObjectCell';
|
|
10
|
+
const PendingTasks = ({ isPolling = false }) => {
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const { courseId = '' } = useParams();
|
|
13
|
+
const { data: tasks, isLoading } = usePendingTasks(courseId, { enablePolling: isPolling });
|
|
14
|
+
const tableColumns = useMemo(() => [
|
|
15
|
+
{ accessor: 'taskType', Header: intl.formatMessage(messages.taskTypeColumnName) },
|
|
16
|
+
{ accessor: 'taskInput', Header: intl.formatMessage(messages.taskInputColumnName), Cell: ({ row }) => _jsx(ObjectCell, { value: row.original.taskInput }) },
|
|
17
|
+
{ accessor: 'taskId', Header: intl.formatMessage(messages.taskIdColumnName) },
|
|
18
|
+
{ accessor: 'requester', Header: intl.formatMessage(messages.requesterColumnName) },
|
|
19
|
+
{ accessor: 'taskState', Header: intl.formatMessage(messages.taskStateColumnName) },
|
|
20
|
+
{ accessor: 'created', Header: intl.formatMessage(messages.createdColumnName) },
|
|
21
|
+
{ accessor: 'taskOutput', Header: intl.formatMessage(messages.taskOutputColumnName), Cell: ({ row }) => _jsx(ObjectCell, { value: row.original.taskOutput }) },
|
|
22
|
+
{ accessor: 'durationSec', Header: intl.formatMessage(messages.durationColumnName) },
|
|
23
|
+
{ accessor: 'status', Header: intl.formatMessage(messages.statusColumnName) },
|
|
24
|
+
{ accessor: 'taskMessage', Header: intl.formatMessage(messages.taskMessageColumnName) },
|
|
25
|
+
], [intl]);
|
|
26
|
+
const renderContent = () => {
|
|
27
|
+
if (isLoading) {
|
|
28
|
+
return _jsx(Skeleton, { count: 3 });
|
|
29
|
+
}
|
|
30
|
+
if (!tasks || (tasks === null || tasks === void 0 ? void 0 : tasks.length) === 0) {
|
|
31
|
+
return _jsx("div", { className: "my-3", children: intl.formatMessage(messages.noTasksMessage) });
|
|
32
|
+
}
|
|
33
|
+
return (_jsx(DataTable, { columns: tableColumns, data: tasks, RowStatusComponent: () => null }));
|
|
34
|
+
};
|
|
35
|
+
return (_jsxs(Collapsible.Advanced, { className: "mt-4 pt-4 border-top", styling: "basic", children: [_jsxs(Collapsible.Trigger, { className: "collapsible-trigger d-flex border-0 align-items-center text-decoration-none", children: [_jsx("div", { className: "d-flex", children: _jsx("h3", { className: "text-primary-700", children: intl.formatMessage(messages.pendingTasksTitle) }) }), _jsx(Collapsible.Visible, { whenClosed: true, children: _jsx("div", { className: "pl-2 d-flex", children: _jsx(Icon, { className: "text-primary-500", src: ExpandMore }) }) }), _jsx(Collapsible.Visible, { whenOpen: true, children: _jsx("div", { className: "pl-2 d-flex", children: _jsx(Icon, { className: "text-primary-500", src: ExpandLess }) }) })] }), _jsx(Collapsible.Body, { children: renderContent() })] }));
|
|
36
|
+
};
|
|
37
|
+
export { PendingTasks };
|
|
38
|
+
//# sourceMappingURL=PendingTasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingTasks.js","sourceRoot":"","sources":["../../src/components/PendingTasks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { Collapsible, DataTable, Icon, Skeleton } from '@openedx/paragon';\nimport { useMemo } from 'react';\nimport messages from './messages';\nimport { ExpandLess, ExpandMore } from '@openedx/paragon/icons';\nimport { usePendingTasks } from '@src/data/apiHook';\nimport { useParams } from 'react-router';\nimport { ObjectCell } from './ObjectCell';\nimport { PendingTask, TableCellValue } from '@src/types';\n\ninterface PendingTasksProps {\n isPolling?: boolean,\n}\n\nconst PendingTasks = ({ isPolling = false }: PendingTasksProps) => {\n const intl = useIntl();\n const { courseId = '' } = useParams();\n const { data: tasks, isLoading } = usePendingTasks(courseId, { enablePolling: isPolling });\n\n const tableColumns = useMemo(() => [\n { accessor: 'taskType', Header: intl.formatMessage(messages.taskTypeColumnName) },\n { accessor: 'taskInput', Header: intl.formatMessage(messages.taskInputColumnName), Cell: ({ row }: TableCellValue<PendingTask>) => <ObjectCell value={row.original.taskInput} /> },\n { accessor: 'taskId', Header: intl.formatMessage(messages.taskIdColumnName) },\n { accessor: 'requester', Header: intl.formatMessage(messages.requesterColumnName) },\n { accessor: 'taskState', Header: intl.formatMessage(messages.taskStateColumnName) },\n { accessor: 'created', Header: intl.formatMessage(messages.createdColumnName) },\n { accessor: 'taskOutput', Header: intl.formatMessage(messages.taskOutputColumnName), Cell: ({ row }: TableCellValue<PendingTask>) => <ObjectCell value={row.original.taskOutput} /> },\n { accessor: 'durationSec', Header: intl.formatMessage(messages.durationColumnName) },\n { accessor: 'status', Header: intl.formatMessage(messages.statusColumnName) },\n { accessor: 'taskMessage', Header: intl.formatMessage(messages.taskMessageColumnName) },\n ], [intl]);\n\n const renderContent = () => {\n if (isLoading) {\n return <Skeleton count={3} />;\n }\n\n if (!tasks || tasks?.length === 0) {\n return <div className=\"my-3\">{intl.formatMessage(messages.noTasksMessage)}</div>;\n }\n\n return (\n <DataTable\n columns={tableColumns}\n data={tasks}\n RowStatusComponent={() => null}\n />\n );\n };\n\n return (\n <Collapsible.Advanced\n className=\"mt-4 pt-4 border-top\"\n styling=\"basic\"\n >\n <Collapsible.Trigger\n className=\"collapsible-trigger d-flex border-0 align-items-center text-decoration-none\"\n >\n <div className=\"d-flex\">\n <h3 className=\"text-primary-700\">{intl.formatMessage(messages.pendingTasksTitle)}</h3>\n </div>\n\n <Collapsible.Visible whenClosed>\n <div className=\"pl-2 d-flex\">\n <Icon className=\"text-primary-500\" src={ExpandMore} />\n </div>\n </Collapsible.Visible>\n <Collapsible.Visible whenOpen>\n <div className=\"pl-2 d-flex\">\n <Icon className=\"text-primary-500\" src={ExpandLess} />\n </div>\n </Collapsible.Visible>\n </Collapsible.Trigger>\n <Collapsible.Body>\n {renderContent() }\n </Collapsible.Body>\n </Collapsible.Advanced>\n );\n};\n\nexport { PendingTasks };\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, FormControl, FormGroup, FormLabel } from '@openedx/paragon';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import messages from './messages';
|
|
5
|
+
const SpecifyLearnerField = ({ onChange }) => {
|
|
6
|
+
const intl = useIntl();
|
|
7
|
+
return (_jsxs(FormGroup, { size: "sm", children: [_jsx(FormLabel, { children: intl.formatMessage(messages.specifyLearner) }), _jsxs("div", { className: "d-flex", children: [_jsx(FormControl, { className: "mr-2", name: "emailOrUsername", placeholder: intl.formatMessage(messages.specifyLearnerPlaceholder), size: "md", autoResize: true, onChange: onChange }), _jsx(Button, { children: intl.formatMessage(messages.select) })] })] }));
|
|
8
|
+
};
|
|
9
|
+
export default SpecifyLearnerField;
|
|
10
|
+
//# sourceMappingURL=SpecifyLearnerField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecifyLearnerField.js","sourceRoot":"","sources":["../../src/components/SpecifyLearnerField.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAMlC,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE;IACrE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,MAAC,SAAS,IAAC,IAAI,EAAC,IAAI,aAClB,KAAC,SAAS,cAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAa,EACpE,eAAK,SAAS,EAAC,QAAQ,aACrB,KAAC,WAAW,IAAC,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,iBAAiB,EAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,UAAU,QAAC,QAAQ,EAAE,QAAQ,GAAI,EACrK,KAAC,MAAM,cAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAU,IAClD,IACI,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import { Button, FormControl, FormGroup, FormLabel } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\n\ninterface SpecifyLearnerFieldProps {\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void,\n}\n\nconst SpecifyLearnerField = ({ onChange }: SpecifyLearnerFieldProps) => {\n const intl = useIntl();\n\n return (\n <FormGroup size=\"sm\">\n <FormLabel>{intl.formatMessage(messages.specifyLearner)}</FormLabel>\n <div className=\"d-flex\">\n <FormControl className=\"mr-2\" name=\"emailOrUsername\" placeholder={intl.formatMessage(messages.specifyLearnerPlaceholder)} size=\"md\" autoResize onChange={onChange} />\n <Button>{intl.formatMessage(messages.select)}</Button>\n </div>\n </FormGroup>\n );\n};\n\nexport default SpecifyLearnerField;\n"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
declare const messages: {
|
|
2
|
+
select: {
|
|
3
|
+
id: string;
|
|
4
|
+
defaultMessage: string;
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
specifyLearner: {
|
|
8
|
+
id: string;
|
|
9
|
+
defaultMessage: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
specifyLearnerPlaceholder: {
|
|
13
|
+
id: string;
|
|
14
|
+
defaultMessage: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
pageNotFoundHeader: {
|
|
18
|
+
id: string;
|
|
19
|
+
defaultMessage: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
pageNotFoundBody: {
|
|
23
|
+
id: string;
|
|
24
|
+
defaultMessage: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
pendingTasksTitle: {
|
|
28
|
+
id: string;
|
|
29
|
+
defaultMessage: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
noTasksMessage: {
|
|
33
|
+
id: string;
|
|
34
|
+
defaultMessage: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
taskTypeColumnName: {
|
|
38
|
+
id: string;
|
|
39
|
+
defaultMessage: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
taskInputColumnName: {
|
|
43
|
+
id: string;
|
|
44
|
+
defaultMessage: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
taskIdColumnName: {
|
|
48
|
+
id: string;
|
|
49
|
+
defaultMessage: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
requesterColumnName: {
|
|
53
|
+
id: string;
|
|
54
|
+
defaultMessage: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
taskStateColumnName: {
|
|
58
|
+
id: string;
|
|
59
|
+
defaultMessage: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
createdColumnName: {
|
|
63
|
+
id: string;
|
|
64
|
+
defaultMessage: string;
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
taskOutputColumnName: {
|
|
68
|
+
id: string;
|
|
69
|
+
defaultMessage: string;
|
|
70
|
+
description: string;
|
|
71
|
+
};
|
|
72
|
+
durationColumnName: {
|
|
73
|
+
id: string;
|
|
74
|
+
defaultMessage: string;
|
|
75
|
+
description: string;
|
|
76
|
+
};
|
|
77
|
+
statusColumnName: {
|
|
78
|
+
id: string;
|
|
79
|
+
defaultMessage: string;
|
|
80
|
+
description: string;
|
|
81
|
+
};
|
|
82
|
+
taskMessageColumnName: {
|
|
83
|
+
id: string;
|
|
84
|
+
defaultMessage: string;
|
|
85
|
+
description: string;
|
|
86
|
+
};
|
|
87
|
+
downloadCSVTitle: {
|
|
88
|
+
id: string;
|
|
89
|
+
defaultMessage: string;
|
|
90
|
+
description: string;
|
|
91
|
+
};
|
|
92
|
+
downloadCSVDescription: {
|
|
93
|
+
id: string;
|
|
94
|
+
defaultMessage: string;
|
|
95
|
+
description: string;
|
|
96
|
+
};
|
|
97
|
+
viewCSVTemplate: {
|
|
98
|
+
id: string;
|
|
99
|
+
defaultMessage: string;
|
|
100
|
+
description: string;
|
|
101
|
+
};
|
|
102
|
+
uploadingFileMessage: {
|
|
103
|
+
id: string;
|
|
104
|
+
defaultMessage: string;
|
|
105
|
+
description: string;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
export default messages;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
select: {
|
|
4
|
+
id: 'instruct.specifyLearner.select',
|
|
5
|
+
defaultMessage: 'Select',
|
|
6
|
+
description: 'Label for select dropdown in specify learner field',
|
|
7
|
+
},
|
|
8
|
+
specifyLearner: {
|
|
9
|
+
id: 'instruct.specifyLearner.label',
|
|
10
|
+
defaultMessage: 'Specify Learner:',
|
|
11
|
+
description: 'Label for specify learner field',
|
|
12
|
+
},
|
|
13
|
+
specifyLearnerPlaceholder: {
|
|
14
|
+
id: 'instruct.specifyLearner.placeholder',
|
|
15
|
+
defaultMessage: 'Learner email address or username',
|
|
16
|
+
description: 'Placeholder text for specify learner input field',
|
|
17
|
+
},
|
|
18
|
+
pageNotFoundHeader: {
|
|
19
|
+
id: 'instruct.pageNotFound.header',
|
|
20
|
+
defaultMessage: 'Page not found',
|
|
21
|
+
description: 'Header for page not found error',
|
|
22
|
+
},
|
|
23
|
+
pageNotFoundBody: {
|
|
24
|
+
id: 'instruct.pageNotFound.body',
|
|
25
|
+
defaultMessage: "The page you're looking for is unavailable or there's an error in the URL. Please check the URL and try again.",
|
|
26
|
+
description: 'Body text for page not found error',
|
|
27
|
+
},
|
|
28
|
+
pendingTasksTitle: {
|
|
29
|
+
id: 'instruct.pendingTasks.section.title',
|
|
30
|
+
defaultMessage: 'Pending Tasks',
|
|
31
|
+
description: 'Title for the pending tasks section',
|
|
32
|
+
},
|
|
33
|
+
noTasksMessage: {
|
|
34
|
+
id: 'instruct.pendingTasks.section.noTasks',
|
|
35
|
+
defaultMessage: 'No tasks currently running.',
|
|
36
|
+
description: 'Message displayed when there are no pending tasks',
|
|
37
|
+
},
|
|
38
|
+
taskTypeColumnName: {
|
|
39
|
+
id: 'instruct.pendingTasks.table.column.taskType',
|
|
40
|
+
defaultMessage: 'Task Type',
|
|
41
|
+
description: 'Column name for task type in pending tasks table',
|
|
42
|
+
},
|
|
43
|
+
taskInputColumnName: {
|
|
44
|
+
id: 'instruct.pendingTasks.table.column.taskInput',
|
|
45
|
+
defaultMessage: 'Task Input',
|
|
46
|
+
description: 'Column name for task input in pending tasks table',
|
|
47
|
+
},
|
|
48
|
+
taskIdColumnName: {
|
|
49
|
+
id: 'instruct.pendingTasks.table.column.taskId',
|
|
50
|
+
defaultMessage: 'Task ID',
|
|
51
|
+
description: 'Column name for task ID in pending tasks table',
|
|
52
|
+
},
|
|
53
|
+
requesterColumnName: {
|
|
54
|
+
id: 'instruct.pendingTasks.table.column.requester',
|
|
55
|
+
defaultMessage: 'Requester',
|
|
56
|
+
description: 'Column name for requester in pending tasks table',
|
|
57
|
+
},
|
|
58
|
+
taskStateColumnName: {
|
|
59
|
+
id: 'instruct.pendingTasks.table.column.taskState',
|
|
60
|
+
defaultMessage: 'Task State',
|
|
61
|
+
description: 'Column name for task state in pending tasks table',
|
|
62
|
+
},
|
|
63
|
+
createdColumnName: {
|
|
64
|
+
id: 'instruct.pendingTasks.table.column.created',
|
|
65
|
+
defaultMessage: 'Created',
|
|
66
|
+
description: 'Column name for created date in pending tasks table',
|
|
67
|
+
},
|
|
68
|
+
taskOutputColumnName: {
|
|
69
|
+
id: 'instruct.pendingTasks.table.column.taskOutput',
|
|
70
|
+
defaultMessage: 'Task Output',
|
|
71
|
+
description: 'Column name for task output in pending tasks table',
|
|
72
|
+
},
|
|
73
|
+
durationColumnName: {
|
|
74
|
+
id: 'instruct.pendingTasks.table.column.duration',
|
|
75
|
+
defaultMessage: 'Duration (sec)',
|
|
76
|
+
description: 'Column name for duration in pending tasks table',
|
|
77
|
+
},
|
|
78
|
+
statusColumnName: {
|
|
79
|
+
id: 'instruct.pendingTasks.table.column.status',
|
|
80
|
+
defaultMessage: 'Status',
|
|
81
|
+
description: 'Column name for status in pending tasks table',
|
|
82
|
+
},
|
|
83
|
+
taskMessageColumnName: {
|
|
84
|
+
id: 'instruct.pendingTasks.table.column.taskMessage',
|
|
85
|
+
defaultMessage: 'Task Message',
|
|
86
|
+
description: 'Column name for task message in pending tasks table',
|
|
87
|
+
},
|
|
88
|
+
downloadCSVTitle: {
|
|
89
|
+
id: 'instruct.csvComponent.downloadCSVTitle',
|
|
90
|
+
defaultMessage: 'Upload CSV File',
|
|
91
|
+
description: 'Title for the upload CSV file section'
|
|
92
|
+
},
|
|
93
|
+
downloadCSVDescription: {
|
|
94
|
+
id: 'instruct.csvComponent.downloadCSVDescription',
|
|
95
|
+
defaultMessage: 'Only properly formatted CSV files will be accepted',
|
|
96
|
+
description: 'Description for the upload CSV file section'
|
|
97
|
+
},
|
|
98
|
+
viewCSVTemplate: {
|
|
99
|
+
id: 'instruct.csvComponent.viewCSVTemplate',
|
|
100
|
+
defaultMessage: 'View Template',
|
|
101
|
+
description: 'Label for the view CSV template link'
|
|
102
|
+
},
|
|
103
|
+
uploadingFileMessage: {
|
|
104
|
+
id: 'instruct.csvComponent.uploadingFileMessage',
|
|
105
|
+
defaultMessage: 'File chosen: {fileName}',
|
|
106
|
+
description: 'Message displayed when a file is being uploaded, with the file name included'
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
export default messages;
|
|
110
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/components/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n select: {\n id: 'instruct.specifyLearner.select',\n defaultMessage: 'Select',\n description: 'Label for select dropdown in specify learner field',\n },\n specifyLearner: {\n id: 'instruct.specifyLearner.label',\n defaultMessage: 'Specify Learner:',\n description: 'Label for specify learner field',\n },\n specifyLearnerPlaceholder: {\n id: 'instruct.specifyLearner.placeholder',\n defaultMessage: 'Learner email address or username',\n description: 'Placeholder text for specify learner input field',\n },\n pageNotFoundHeader: {\n id: 'instruct.pageNotFound.header',\n defaultMessage: 'Page not found',\n description: 'Header for page not found error',\n },\n pageNotFoundBody: {\n id: 'instruct.pageNotFound.body',\n defaultMessage: \"The page you're looking for is unavailable or there's an error in the URL. Please check the URL and try again.\",\n description: 'Body text for page not found error',\n },\n pendingTasksTitle: {\n id: 'instruct.pendingTasks.section.title',\n defaultMessage: 'Pending Tasks',\n description: 'Title for the pending tasks section',\n },\n noTasksMessage: {\n id: 'instruct.pendingTasks.section.noTasks',\n defaultMessage: 'No tasks currently running.',\n description: 'Message displayed when there are no pending tasks',\n },\n taskTypeColumnName: {\n id: 'instruct.pendingTasks.table.column.taskType',\n defaultMessage: 'Task Type',\n description: 'Column name for task type in pending tasks table',\n },\n taskInputColumnName: {\n id: 'instruct.pendingTasks.table.column.taskInput',\n defaultMessage: 'Task Input',\n description: 'Column name for task input in pending tasks table',\n },\n taskIdColumnName: {\n id: 'instruct.pendingTasks.table.column.taskId',\n defaultMessage: 'Task ID',\n description: 'Column name for task ID in pending tasks table',\n },\n requesterColumnName: {\n id: 'instruct.pendingTasks.table.column.requester',\n defaultMessage: 'Requester',\n description: 'Column name for requester in pending tasks table',\n },\n taskStateColumnName: {\n id: 'instruct.pendingTasks.table.column.taskState',\n defaultMessage: 'Task State',\n description: 'Column name for task state in pending tasks table',\n },\n createdColumnName: {\n id: 'instruct.pendingTasks.table.column.created',\n defaultMessage: 'Created',\n description: 'Column name for created date in pending tasks table',\n },\n taskOutputColumnName: {\n id: 'instruct.pendingTasks.table.column.taskOutput',\n defaultMessage: 'Task Output',\n description: 'Column name for task output in pending tasks table',\n },\n durationColumnName: {\n id: 'instruct.pendingTasks.table.column.duration',\n defaultMessage: 'Duration (sec)',\n description: 'Column name for duration in pending tasks table',\n },\n statusColumnName: {\n id: 'instruct.pendingTasks.table.column.status',\n defaultMessage: 'Status',\n description: 'Column name for status in pending tasks table',\n },\n taskMessageColumnName: {\n id: 'instruct.pendingTasks.table.column.taskMessage',\n defaultMessage: 'Task Message',\n description: 'Column name for task message in pending tasks table',\n },\n downloadCSVTitle: {\n id: 'instruct.csvComponent.downloadCSVTitle',\n defaultMessage: 'Upload CSV File',\n description: 'Title for the upload CSV file section'\n },\n downloadCSVDescription: {\n id: 'instruct.csvComponent.downloadCSVDescription',\n defaultMessage: 'Only properly formatted CSV files will be accepted',\n description: 'Description for the upload CSV file section'\n },\n viewCSVTemplate: {\n id: 'instruct.csvComponent.viewCSVTemplate',\n defaultMessage: 'View Template',\n description: 'Label for the view CSV template link'\n },\n uploadingFileMessage: {\n id: 'instruct.csvComponent.uploadingFileMessage',\n defaultMessage: 'File chosen: {fileName}',\n description: 'Message displayed when a file is being uploaded, with the file name included'\n }\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const appId = "org.openedx.frontend.app.instructor";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,qCAAqC,CAAC","sourcesContent":["export const appId = 'org.openedx.frontend.app.instructor';\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PendingTasks } from '../components/PendingTasks';
|
|
3
|
+
import { GeneralCourseInfo } from '../courseInfo/components/generalCourseInfo';
|
|
4
|
+
import { EnrollmentSummary } from './components/EnrollmentSummary';
|
|
5
|
+
const CourseInfoPage = () => (_jsxs(_Fragment, { children: [_jsx(GeneralCourseInfo, {}), _jsx(EnrollmentSummary, {}), _jsx(PendingTasks, {})] }));
|
|
6
|
+
export default CourseInfoPage;
|
|
7
|
+
//# sourceMappingURL=CourseInfoPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CourseInfoPage.js","sourceRoot":"","sources":["../../src/courseInfo/CourseInfoPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAC3B,8BACE,KAAC,iBAAiB,KAAG,EACrB,KAAC,iBAAiB,KAAG,EACrB,KAAC,YAAY,KAAG,IACf,CACJ,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import { PendingTasks } from '@src/components/PendingTasks';\nimport { GeneralCourseInfo } from '@src/courseInfo/components/generalCourseInfo';\nimport { EnrollmentSummary } from './components/EnrollmentSummary';\n\nconst CourseInfoPage = () => (\n <>\n <GeneralCourseInfo />\n <EnrollmentSummary />\n <PendingTasks />\n </>\n);\n\nexport default CourseInfoPage;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { formatNumberWithCommas } from './utils';
|
|
3
|
+
const EnrollmentCounter = (props) => {
|
|
4
|
+
const renderCounter = () => {
|
|
5
|
+
return (_jsx("p", { className: "text-primary-500 lead mb-0", children: formatNumberWithCommas(props.count) }));
|
|
6
|
+
};
|
|
7
|
+
const renderCounterWithIcon = () => {
|
|
8
|
+
return (_jsxs("div", { className: "d-flex align-items-center", children: [props.icon, renderCounter()] }));
|
|
9
|
+
};
|
|
10
|
+
return (_jsxs("div", { className: "flex-row", children: [_jsx("p", { className: "text-gray-500 x-small mb-1", children: props.label }), props.icon ? renderCounterWithIcon() : renderCounter()] }));
|
|
11
|
+
};
|
|
12
|
+
export { EnrollmentCounter };
|
|
13
|
+
//# sourceMappingURL=EnrollmentCounter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnrollmentCounter.js","sourceRoot":"","sources":["../../../../src/courseInfo/components/EnrollmentSummary/EnrollmentCounter.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAQjD,MAAM,iBAAiB,GAA+B,CAAC,KAAK,EAAE,EAAE;IAC9D,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,OAAO,CAAC,YAAG,SAAS,EAAC,4BAA4B,YAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAK,CAAC,CAAC;IAC/F,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,OAAO,CACL,eAAK,SAAS,EAAC,2BAA2B,aACvC,KAAK,CAAC,IAAI,EACV,aAAa,EAAE,IACZ,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,YAAG,SAAS,EAAC,4BAA4B,YAAE,KAAK,CAAC,KAAK,GAAK,EACzD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IACpD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import React, { FC } from 'react';\nimport { formatNumberWithCommas } from './utils';\n\ninterface EnrollmentCounterProps {\n label: string,\n count: string | number,\n icon?: React.ReactNode,\n}\n\nconst EnrollmentCounter: FC<EnrollmentCounterProps> = (props) => {\n const renderCounter = () => {\n return (<p className=\"text-primary-500 lead mb-0\">{formatNumberWithCommas(props.count)}</p>);\n };\n\n const renderCounterWithIcon = () => {\n return (\n <div className=\"d-flex align-items-center\">\n {props.icon}\n {renderCounter()}\n </div>\n );\n };\n\n return (\n <div className=\"flex-row\">\n <p className=\"text-gray-500 x-small mb-1\">{props.label}</p>\n { props.icon ? renderCounterWithIcon() : renderCounter() }\n </div>\n );\n};\n\nexport { EnrollmentCounter };\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import messages from './messages';
|
|
4
|
+
import { Col, Row, Skeleton, Stack } from '@openedx/paragon';
|
|
5
|
+
import { Verified } from '@openedx/paragon/icons';
|
|
6
|
+
import { EnrollmentCounter } from './';
|
|
7
|
+
import { useParams } from 'react-router-dom';
|
|
8
|
+
import { useCourseInfo } from '../../../data/apiHook';
|
|
9
|
+
const EnrollmentSummary = () => {
|
|
10
|
+
var _a;
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const { courseId = '' } = useParams();
|
|
13
|
+
const { data: courseInfo, isLoading } = useCourseInfo(courseId);
|
|
14
|
+
const { enrollmentCounts, staffCount = 0, learnerCount = 0 } = courseInfo !== null && courseInfo !== void 0 ? courseInfo : {};
|
|
15
|
+
return (_jsxs(_Fragment, { children: [_jsx(Row, { className: "my-3", children: _jsx(Col, { xs: 12, children: _jsx("h3", { className: "h3 text-primary-700", children: intl.formatMessage(messages.enrollmentSummaryTitle) }) }) }), isLoading ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { count: 1, width: "50%", className: "mb-2" }), _jsx(Skeleton, { count: 1, width: "50%", className: "mb-2 lead" })] })) : (_jsxs(Stack, { direction: "horizontal", gap: 5, children: [_jsx(EnrollmentCounter, { label: intl.formatMessage(messages.allEnrollmentsLabel), count: (_a = enrollmentCounts === null || enrollmentCounts === void 0 ? void 0 : enrollmentCounts.total) !== null && _a !== void 0 ? _a : 0 }), _jsx("div", { className: "h-auto border-light-400 border-left align-self-stretch" }), _jsx(EnrollmentCounter, { label: intl.formatMessage(messages.staffAndAdminsLabel), count: staffCount !== null && staffCount !== void 0 ? staffCount : 0 }), _jsx(EnrollmentCounter, { label: intl.formatMessage(messages.learnersLabel), count: learnerCount !== null && learnerCount !== void 0 ? learnerCount : 0 }), _jsx("div", { className: "h-auto border-light-400 border-left align-self-stretch" }), Object.entries(enrollmentCounts !== null && enrollmentCounts !== void 0 ? enrollmentCounts : {}).map(([type, count]) => {
|
|
16
|
+
var _a;
|
|
17
|
+
if (type === 'total' || count === undefined) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return (_jsx(EnrollmentCounter, { label: intl.formatMessage((_a = messages[`${type}`]) !== null && _a !== void 0 ? _a : { id: 'fallback', defaultMessage: type, description: `${type} label` }), count: (count !== null && count !== void 0 ? count : 0).toLocaleString(), icon: type === 'verified' ? _jsx(Verified, { className: "text-primary-300 mr-2", size: "1.5rem" }) : undefined }, type));
|
|
21
|
+
})] }))] }));
|
|
22
|
+
};
|
|
23
|
+
export { EnrollmentSummary };
|
|
24
|
+
//# sourceMappingURL=EnrollmentSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnrollmentSummary.js","sourceRoot":"","sources":["../../../../src/courseInfo/components/EnrollmentSummary/EnrollmentSummary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\nimport { Col, Row, Skeleton, Stack } from '@openedx/paragon';\nimport { Verified } from '@openedx/paragon/icons';\nimport { EnrollmentCounter } from './';\nimport { useParams } from 'react-router-dom';\nimport { useCourseInfo } from '@src/data/apiHook';\n\nconst EnrollmentSummary = () => {\n const intl = useIntl();\n const { courseId = '' } = useParams();\n const { data: courseInfo, isLoading } = useCourseInfo(courseId);\n const { enrollmentCounts, staffCount = 0, learnerCount = 0 } = courseInfo ?? {};\n\n return (\n <>\n <Row className=\"my-3\">\n <Col xs={12}>\n <h3 className=\"h3 text-primary-700\">{intl.formatMessage(messages.enrollmentSummaryTitle)}</h3>\n </Col>\n </Row>\n {\n isLoading ? (\n <>\n <Skeleton count={1} width=\"50%\" className=\"mb-2\" />\n <Skeleton count={1} width=\"50%\" className=\"mb-2 lead\" />\n </>\n ) : (\n <Stack direction=\"horizontal\" gap={5}>\n <EnrollmentCounter\n label={intl.formatMessage(messages.allEnrollmentsLabel)}\n count={enrollmentCounts?.total ?? 0}\n />\n <div className=\"h-auto border-light-400 border-left align-self-stretch\" />\n <EnrollmentCounter\n label={intl.formatMessage(messages.staffAndAdminsLabel)}\n count={staffCount ?? 0}\n />\n <EnrollmentCounter\n label={intl.formatMessage(messages.learnersLabel)}\n count={learnerCount ?? 0}\n />\n <div className=\"h-auto border-light-400 border-left align-self-stretch\" />\n {\n Object.entries(enrollmentCounts ?? {}).map(([type, count]) => {\n if (type === 'total' || count === undefined) {\n return null;\n }\n return (\n <EnrollmentCounter\n key={type}\n label={intl.formatMessage(messages[`${type}` as keyof typeof messages] ?? { id: 'fallback', defaultMessage: type, description: `${type} label` })}\n count={(count ?? 0).toLocaleString()}\n icon={type === 'verified' ? <Verified className=\"text-primary-300 mr-2\" size=\"1.5rem\" /> : undefined}\n />\n );\n })\n }\n </Stack>\n )\n }\n </>\n );\n};\n\nexport { EnrollmentSummary };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/courseInfo/components/EnrollmentSummary/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export { EnrollmentSummary } from './EnrollmentSummary';\nexport { EnrollmentCounter } from './EnrollmentCounter';\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
declare const messages: {
|
|
2
|
+
enrollmentSummaryTitle: {
|
|
3
|
+
id: string;
|
|
4
|
+
defaultMessage: string;
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
allEnrollmentsLabel: {
|
|
8
|
+
id: string;
|
|
9
|
+
defaultMessage: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
staffAndAdminsLabel: {
|
|
13
|
+
id: string;
|
|
14
|
+
defaultMessage: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
learnersLabel: {
|
|
18
|
+
id: string;
|
|
19
|
+
defaultMessage: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
verified: {
|
|
23
|
+
id: string;
|
|
24
|
+
defaultMessage: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
audit: {
|
|
28
|
+
id: string;
|
|
29
|
+
defaultMessage: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
masters: {
|
|
33
|
+
id: string;
|
|
34
|
+
defaultMessage: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
honor: {
|
|
38
|
+
id: string;
|
|
39
|
+
defaultMessage: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
professional: {
|
|
43
|
+
id: string;
|
|
44
|
+
defaultMessage: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
noIdProfessional: {
|
|
48
|
+
id: string;
|
|
49
|
+
defaultMessage: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
credit: {
|
|
53
|
+
id: string;
|
|
54
|
+
defaultMessage: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
paidBootcamp: {
|
|
58
|
+
id: string;
|
|
59
|
+
defaultMessage: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
unpaidBootcamp: {
|
|
63
|
+
id: string;
|
|
64
|
+
defaultMessage: string;
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
executiveEducation: {
|
|
68
|
+
id: string;
|
|
69
|
+
defaultMessage: string;
|
|
70
|
+
description: string;
|
|
71
|
+
};
|
|
72
|
+
paidExecutiveEducation: {
|
|
73
|
+
id: string;
|
|
74
|
+
defaultMessage: string;
|
|
75
|
+
description: string;
|
|
76
|
+
};
|
|
77
|
+
unpaidExecutiveEducation: {
|
|
78
|
+
id: string;
|
|
79
|
+
defaultMessage: string;
|
|
80
|
+
description: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
export default messages;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
enrollmentSummaryTitle: {
|
|
4
|
+
id: 'instruct.courseInfo.enrollmentSummary.title',
|
|
5
|
+
defaultMessage: 'Course Enrollment',
|
|
6
|
+
description: 'Title for the enrollment summary section',
|
|
7
|
+
},
|
|
8
|
+
allEnrollmentsLabel: {
|
|
9
|
+
id: 'instruct.courseInfo.enrollmentSummary.allEnrollments',
|
|
10
|
+
defaultMessage: 'All Enrollments',
|
|
11
|
+
description: 'Label for all enrollments count',
|
|
12
|
+
},
|
|
13
|
+
staffAndAdminsLabel: {
|
|
14
|
+
id: 'instruct.courseInfo.enrollmentSummary.staffAndAdmins',
|
|
15
|
+
defaultMessage: 'Staff / Admin',
|
|
16
|
+
description: 'Label for staff and admins count',
|
|
17
|
+
},
|
|
18
|
+
learnersLabel: {
|
|
19
|
+
id: 'instruct.courseInfo.enrollmentSummary.learners',
|
|
20
|
+
defaultMessage: 'Learners',
|
|
21
|
+
description: 'Label for learners count',
|
|
22
|
+
},
|
|
23
|
+
verified: {
|
|
24
|
+
id: 'instruct.courseInfo.enrollmentSummary.verified',
|
|
25
|
+
defaultMessage: 'Verified',
|
|
26
|
+
description: 'Label for verified enrollments count',
|
|
27
|
+
},
|
|
28
|
+
audit: {
|
|
29
|
+
id: 'instruct.courseInfo.enrollmentSummary.audit',
|
|
30
|
+
defaultMessage: 'Audit',
|
|
31
|
+
description: 'Label for audit enrollments count',
|
|
32
|
+
},
|
|
33
|
+
masters: {
|
|
34
|
+
id: 'instruct.courseInfo.enrollmentSummary.masters',
|
|
35
|
+
defaultMessage: 'Master\'s',
|
|
36
|
+
description: 'Label for master\'s enrollments count',
|
|
37
|
+
},
|
|
38
|
+
honor: {
|
|
39
|
+
id: 'instruct.courseInfo.enrollmentSummary.honor',
|
|
40
|
+
defaultMessage: 'Honor',
|
|
41
|
+
description: 'Label for honor enrollments count',
|
|
42
|
+
},
|
|
43
|
+
professional: {
|
|
44
|
+
id: 'instruct.courseInfo.enrollmentSummary.professional',
|
|
45
|
+
defaultMessage: 'Professional',
|
|
46
|
+
description: 'Label for professional enrollments count',
|
|
47
|
+
},
|
|
48
|
+
noIdProfessional: {
|
|
49
|
+
id: 'instruct.courseInfo.enrollmentSummary.noIdProfessional',
|
|
50
|
+
defaultMessage: 'No ID Professional',
|
|
51
|
+
description: 'Label for no ID professional enrollments count',
|
|
52
|
+
},
|
|
53
|
+
credit: {
|
|
54
|
+
id: 'instruct.courseInfo.enrollmentSummary.credit',
|
|
55
|
+
defaultMessage: 'Credit',
|
|
56
|
+
description: 'Label for credit enrollments count',
|
|
57
|
+
},
|
|
58
|
+
paidBootcamp: {
|
|
59
|
+
id: 'instruct.courseInfo.enrollmentSummary.paidBootcamp',
|
|
60
|
+
defaultMessage: 'Paid Bootcamp',
|
|
61
|
+
description: 'Label for paid bootcamp enrollments count',
|
|
62
|
+
},
|
|
63
|
+
unpaidBootcamp: {
|
|
64
|
+
id: 'instruct.courseInfo.enrollmentSummary.unpaidBootcamp',
|
|
65
|
+
defaultMessage: 'Unpaid Bootcamp',
|
|
66
|
+
description: 'Label for unpaid bootcamp enrollments count',
|
|
67
|
+
},
|
|
68
|
+
executiveEducation: {
|
|
69
|
+
id: 'instruct.courseInfo.enrollmentSummary.executiveEducation',
|
|
70
|
+
defaultMessage: 'Executive Education',
|
|
71
|
+
description: 'Label for executive education enrollments count',
|
|
72
|
+
},
|
|
73
|
+
paidExecutiveEducation: {
|
|
74
|
+
id: 'instruct.courseInfo.enrollmentSummary.paidExecutiveEducation',
|
|
75
|
+
defaultMessage: 'Paid Executive Education',
|
|
76
|
+
description: 'Label for paid executive education enrollments count',
|
|
77
|
+
},
|
|
78
|
+
unpaidExecutiveEducation: {
|
|
79
|
+
id: 'instruct.courseInfo.enrollmentSummary.unpaidExecutiveEducation',
|
|
80
|
+
defaultMessage: 'Unpaid Executive Education',
|
|
81
|
+
description: 'Label for unpaid executive education enrollments count',
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
export default messages;
|
|
85
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/courseInfo/components/EnrollmentSummary/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAE9B,sBAAsB,EAAE;QACtB,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,mBAAmB;QACnC,WAAW,EAAE,0CAA0C;KACxD;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,sDAAsD;QAC1D,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,iCAAiC;KAC/C;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,sDAAsD;QAC1D,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,kCAAkC;KAChD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,0BAA0B;KACxC;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,sCAAsC;KACpD;IACD,KAAK,EAAE;QACL,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,mCAAmC;KACjD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,+CAA+C;QACnD,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,uCAAuC;KACrD;IACD,KAAK,EAAE;QACL,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,mCAAmC;KACjD;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,0CAA0C;KACxD;IACD,gBAAgB,EAAE;QAChB,EAAE,EAAE,wDAAwD;QAC5D,cAAc,EAAE,oBAAoB;QACpC,WAAW,EAAE,gDAAgD;KAC9D;IACD,MAAM,EAAE;QACN,EAAE,EAAE,8CAA8C;QAClD,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,oCAAoC;KAClD;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,2CAA2C;KACzD;IACD,cAAc,EAAE;QACd,EAAE,EAAE,sDAAsD;QAC1D,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,6CAA6C;KAC3D;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,0DAA0D;QAC9D,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,iDAAiD;KAC/D;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,0BAA0B;QAC1C,WAAW,EAAE,sDAAsD;KACpE;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,gEAAgE;QACpE,cAAc,EAAE,4BAA4B;QAC5C,WAAW,EAAE,wDAAwD;KACtE;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n\n enrollmentSummaryTitle: {\n id: 'instruct.courseInfo.enrollmentSummary.title',\n defaultMessage: 'Course Enrollment',\n description: 'Title for the enrollment summary section',\n },\n allEnrollmentsLabel: {\n id: 'instruct.courseInfo.enrollmentSummary.allEnrollments',\n defaultMessage: 'All Enrollments',\n description: 'Label for all enrollments count',\n },\n staffAndAdminsLabel: {\n id: 'instruct.courseInfo.enrollmentSummary.staffAndAdmins',\n defaultMessage: 'Staff / Admin',\n description: 'Label for staff and admins count',\n },\n learnersLabel: {\n id: 'instruct.courseInfo.enrollmentSummary.learners',\n defaultMessage: 'Learners',\n description: 'Label for learners count',\n },\n verified: {\n id: 'instruct.courseInfo.enrollmentSummary.verified',\n defaultMessage: 'Verified',\n description: 'Label for verified enrollments count',\n },\n audit: {\n id: 'instruct.courseInfo.enrollmentSummary.audit',\n defaultMessage: 'Audit',\n description: 'Label for audit enrollments count',\n },\n masters: {\n id: 'instruct.courseInfo.enrollmentSummary.masters',\n defaultMessage: 'Master\\'s',\n description: 'Label for master\\'s enrollments count',\n },\n honor: {\n id: 'instruct.courseInfo.enrollmentSummary.honor',\n defaultMessage: 'Honor',\n description: 'Label for honor enrollments count',\n },\n professional: {\n id: 'instruct.courseInfo.enrollmentSummary.professional',\n defaultMessage: 'Professional',\n description: 'Label for professional enrollments count',\n },\n noIdProfessional: {\n id: 'instruct.courseInfo.enrollmentSummary.noIdProfessional',\n defaultMessage: 'No ID Professional',\n description: 'Label for no ID professional enrollments count',\n },\n credit: {\n id: 'instruct.courseInfo.enrollmentSummary.credit',\n defaultMessage: 'Credit',\n description: 'Label for credit enrollments count',\n },\n paidBootcamp: {\n id: 'instruct.courseInfo.enrollmentSummary.paidBootcamp',\n defaultMessage: 'Paid Bootcamp',\n description: 'Label for paid bootcamp enrollments count',\n },\n unpaidBootcamp: {\n id: 'instruct.courseInfo.enrollmentSummary.unpaidBootcamp',\n defaultMessage: 'Unpaid Bootcamp',\n description: 'Label for unpaid bootcamp enrollments count',\n },\n executiveEducation: {\n id: 'instruct.courseInfo.enrollmentSummary.executiveEducation',\n defaultMessage: 'Executive Education',\n description: 'Label for executive education enrollments count',\n },\n paidExecutiveEducation: {\n id: 'instruct.courseInfo.enrollmentSummary.paidExecutiveEducation',\n defaultMessage: 'Paid Executive Education',\n description: 'Label for paid executive education enrollments count',\n },\n unpaidExecutiveEducation: {\n id: 'instruct.courseInfo.enrollmentSummary.unpaidExecutiveEducation',\n defaultMessage: 'Unpaid Executive Education',\n description: 'Label for unpaid executive education enrollments count',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const formatNumberWithCommas: (digit: string | number) => string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const formatNumberWithCommas = (digit) => {
|
|
2
|
+
const numberString = typeof digit === 'number' ? digit.toString() : digit;
|
|
3
|
+
const cleanNumber = numberString.replace(/[,\s]/g, '');
|
|
4
|
+
if (isNaN(Number(cleanNumber))) {
|
|
5
|
+
return numberString;
|
|
6
|
+
}
|
|
7
|
+
return Number(cleanNumber).toLocaleString();
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/courseInfo/components/EnrollmentSummary/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAsB,EAAU,EAAE;IACvE,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC;AAC9C,CAAC,CAAC","sourcesContent":["export const formatNumberWithCommas = (digit: string | number): string => {\n const numberString = typeof digit === 'number' ? digit.toString() : digit;\n const cleanNumber = numberString.replace(/[,\\s]/g, '');\n if (isNaN(Number(cleanNumber))) {\n return numberString;\n }\n return Number(cleanNumber).toLocaleString();\n};\n"]}
|