@openedx/frontend-app-gradebook 2.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 +279 -0
- package/dist/Main.d.ts +3 -0
- package/dist/Main.js +17 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +10 -0
- package/dist/app.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.d.ts +5 -0
- package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.js +20 -0
- package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/BulkManagementHistoryView.scss +6 -0
- package/dist/components/BulkManagementHistoryView/HistoryTable.d.ts +33 -0
- package/dist/components/BulkManagementHistoryView/HistoryTable.js +53 -0
- package/dist/components/BulkManagementHistoryView/HistoryTable.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/ResultsSummary.d.ts +16 -0
- package/dist/components/BulkManagementHistoryView/ResultsSummary.js +19 -0
- package/dist/components/BulkManagementHistoryView/ResultsSummary.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/data/api.d.ts +5 -0
- package/dist/components/BulkManagementHistoryView/data/api.js +16 -0
- package/dist/components/BulkManagementHistoryView/data/api.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/data/apiHook.d.ts +16 -0
- package/dist/components/BulkManagementHistoryView/data/apiHook.js +34 -0
- package/dist/components/BulkManagementHistoryView/data/apiHook.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/data/queryKeys.d.ts +5 -0
- package/dist/components/BulkManagementHistoryView/data/queryKeys.js +7 -0
- package/dist/components/BulkManagementHistoryView/data/queryKeys.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/data/utils.d.ts +34 -0
- package/dist/components/BulkManagementHistoryView/data/utils.js +45 -0
- package/dist/components/BulkManagementHistoryView/data/utils.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/index.d.ts +2 -0
- package/dist/components/BulkManagementHistoryView/index.js +12 -0
- package/dist/components/BulkManagementHistoryView/index.js.map +1 -0
- package/dist/components/BulkManagementHistoryView/messages.d.ts +24 -0
- package/dist/components/BulkManagementHistoryView/messages.js +20 -0
- package/dist/components/BulkManagementHistoryView/messages.js.map +1 -0
- package/dist/components/GradebookFilters/AssignmentFilter/index.d.ts +10 -0
- package/dist/components/GradebookFilters/AssignmentFilter/index.js +31 -0
- package/dist/components/GradebookFilters/AssignmentFilter/index.js.map +1 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.d.ts +19 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.js +31 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.js.map +1 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/index.d.ts +10 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/index.js +17 -0
- package/dist/components/GradebookFilters/AssignmentGradeFilter/index.js.map +1 -0
- package/dist/components/GradebookFilters/AssignmentTypeFilter/index.d.ts +10 -0
- package/dist/components/GradebookFilters/AssignmentTypeFilter/index.js +38 -0
- package/dist/components/GradebookFilters/AssignmentTypeFilter/index.js.map +1 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/hooks.d.ts +15 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js +34 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js.map +1 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/index.d.ts +10 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/index.js +17 -0
- package/dist/components/GradebookFilters/CourseGradeFilter/index.js.map +1 -0
- package/dist/components/GradebookFilters/GradebookFilters.scss +6 -0
- package/dist/components/GradebookFilters/PercentGroup.d.ts +22 -0
- package/dist/components/GradebookFilters/PercentGroup.js +16 -0
- package/dist/components/GradebookFilters/PercentGroup.js.map +1 -0
- package/dist/components/GradebookFilters/SelectGroup.d.ts +24 -0
- package/dist/components/GradebookFilters/SelectGroup.js +17 -0
- package/dist/components/GradebookFilters/SelectGroup.js.map +1 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.d.ts +16 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.js +46 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.js.map +1 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/index.d.ts +10 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/index.js +23 -0
- package/dist/components/GradebookFilters/StudentGroupsFilter/index.js.map +1 -0
- package/dist/components/GradebookFilters/data/api.d.ts +10 -0
- package/dist/components/GradebookFilters/data/api.js +27 -0
- package/dist/components/GradebookFilters/data/api.js.map +1 -0
- package/dist/components/GradebookFilters/data/apiHook.d.ts +16 -0
- package/dist/components/GradebookFilters/data/apiHook.js +24 -0
- package/dist/components/GradebookFilters/data/apiHook.js.map +1 -0
- package/dist/components/GradebookFilters/data/hooks.d.ts +7 -0
- package/dist/components/GradebookFilters/data/hooks.js +53 -0
- package/dist/components/GradebookFilters/data/hooks.js.map +1 -0
- package/dist/components/GradebookFilters/data/queryKeys.d.ts +10 -0
- package/dist/components/GradebookFilters/data/queryKeys.js +12 -0
- package/dist/components/GradebookFilters/data/queryKeys.js.map +1 -0
- package/dist/components/GradebookFilters/index.d.ts +10 -0
- package/dist/components/GradebookFilters/index.js +32 -0
- package/dist/components/GradebookFilters/index.js.map +1 -0
- package/dist/components/GradebookFilters/messages.d.ts +112 -0
- package/dist/components/GradebookFilters/messages.js +75 -0
- package/dist/components/GradebookFilters/messages.js.map +1 -0
- package/dist/components/GradebookHeader/hooks.d.ts +13 -0
- package/dist/components/GradebookHeader/hooks.js +28 -0
- package/dist/components/GradebookHeader/hooks.js.map +1 -0
- package/dist/components/GradebookHeader/index.d.ts +2 -0
- package/dist/components/GradebookHeader/index.js +14 -0
- package/dist/components/GradebookHeader/index.js.map +1 -0
- package/dist/components/GradebookHeader/messages.d.ts +48 -0
- package/dist/components/GradebookHeader/messages.js +35 -0
- package/dist/components/GradebookHeader/messages.js.map +1 -0
- package/dist/components/GradesView/BulkManagementControls/index.d.ts +2 -0
- package/dist/components/GradesView/BulkManagementControls/index.js +26 -0
- package/dist/components/GradesView/BulkManagementControls/index.js.map +1 -0
- package/dist/components/GradesView/BulkManagementControls/messages.d.ts +8 -0
- package/dist/components/GradesView/BulkManagementControls/messages.js +10 -0
- package/dist/components/GradesView/BulkManagementControls/messages.js.map +1 -0
- package/dist/components/GradesView/EditModal/HistoryHeader.d.ts +21 -0
- package/dist/components/GradesView/EditModal/HistoryHeader.js +20 -0
- package/dist/components/GradesView/EditModal/HistoryHeader.js.map +1 -0
- package/dist/components/GradesView/EditModal/ModalHeaders.d.ts +3 -0
- package/dist/components/GradesView/EditModal/ModalHeaders.js +26 -0
- package/dist/components/GradesView/EditModal/ModalHeaders.js.map +1 -0
- package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.d.ts +5 -0
- package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.js +23 -0
- package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.js.map +1 -0
- package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.d.ts +6 -0
- package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.js +25 -0
- package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.js.map +1 -0
- package/dist/components/GradesView/EditModal/OverrideTable/index.d.ts +5 -0
- package/dist/components/GradesView/EditModal/OverrideTable/index.js +39 -0
- package/dist/components/GradesView/EditModal/OverrideTable/index.js.map +1 -0
- package/dist/components/GradesView/EditModal/OverrideTable/messages.d.ts +32 -0
- package/dist/components/GradesView/EditModal/OverrideTable/messages.js +25 -0
- package/dist/components/GradesView/EditModal/OverrideTable/messages.js.map +1 -0
- package/dist/components/GradesView/EditModal/index.d.ts +2 -0
- package/dist/components/GradesView/EditModal/index.js +35 -0
- package/dist/components/GradesView/EditModal/index.js.map +1 -0
- package/dist/components/GradesView/EditModal/messages.d.ts +72 -0
- package/dist/components/GradesView/EditModal/messages.js +50 -0
- package/dist/components/GradesView/EditModal/messages.js.map +1 -0
- package/dist/components/GradesView/FilterBadges/FilterBadge.d.ts +9 -0
- package/dist/components/GradesView/FilterBadges/FilterBadge.js +27 -0
- package/dist/components/GradesView/FilterBadges/FilterBadge.js.map +1 -0
- package/dist/components/GradesView/FilterBadges/index.d.ts +8 -0
- package/dist/components/GradesView/FilterBadges/index.js +15 -0
- package/dist/components/GradesView/FilterBadges/index.js.map +1 -0
- package/dist/components/GradesView/FilterMenuToggle/index.d.ts +5 -0
- package/dist/components/GradesView/FilterMenuToggle/index.js +18 -0
- package/dist/components/GradesView/FilterMenuToggle/index.js.map +1 -0
- package/dist/components/GradesView/FilterMenuToggle/messages.d.ts +8 -0
- package/dist/components/GradesView/FilterMenuToggle/messages.js +10 -0
- package/dist/components/GradesView/FilterMenuToggle/messages.js.map +1 -0
- package/dist/components/GradesView/FilteredUsersLabel/index.d.ts +15 -0
- package/dist/components/GradesView/FilteredUsersLabel/index.js +27 -0
- package/dist/components/GradesView/FilteredUsersLabel/index.js.map +1 -0
- package/dist/components/GradesView/FilteredUsersLabel/messages.d.ts +8 -0
- package/dist/components/GradesView/FilteredUsersLabel/messages.js +10 -0
- package/dist/components/GradesView/FilteredUsersLabel/messages.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/Fields.d.ts +2 -0
- package/dist/components/GradesView/GradebookTable/Fields.js +32 -0
- package/dist/components/GradesView/GradebookTable/Fields.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/GradeButton.d.ts +26 -0
- package/dist/components/GradesView/GradebookTable/GradeButton.js +56 -0
- package/dist/components/GradesView/GradebookTable/GradeButton.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/LabelReplacements.d.ts +3 -0
- package/dist/components/GradesView/GradebookTable/LabelReplacements.js +42 -0
- package/dist/components/GradesView/GradebookTable/LabelReplacements.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/hooks.d.ts +11 -0
- package/dist/components/GradesView/GradebookTable/hooks.js +45 -0
- package/dist/components/GradesView/GradebookTable/hooks.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/index.d.ts +5 -0
- package/dist/components/GradesView/GradebookTable/index.js +16 -0
- package/dist/components/GradesView/GradebookTable/index.js.map +1 -0
- package/dist/components/GradesView/GradebookTable/messages.d.ts +64 -0
- package/dist/components/GradesView/GradebookTable/messages.js +45 -0
- package/dist/components/GradesView/GradebookTable/messages.js.map +1 -0
- package/dist/components/GradesView/GradesView.scss +156 -0
- package/dist/components/GradesView/ImportGradesButton/index.d.ts +5 -0
- package/dist/components/GradesView/ImportGradesButton/index.js +38 -0
- package/dist/components/GradesView/ImportGradesButton/index.js.map +1 -0
- package/dist/components/GradesView/ImportGradesButton/messages.d.ts +16 -0
- package/dist/components/GradesView/ImportGradesButton/messages.js +15 -0
- package/dist/components/GradesView/ImportGradesButton/messages.js.map +1 -0
- package/dist/components/GradesView/ImportSuccessToast/hooks.d.ts +10 -0
- package/dist/components/GradesView/ImportSuccessToast/hooks.js +31 -0
- package/dist/components/GradesView/ImportSuccessToast/hooks.js.map +1 -0
- package/dist/components/GradesView/ImportSuccessToast/index.d.ts +5 -0
- package/dist/components/GradesView/ImportSuccessToast/index.js +15 -0
- package/dist/components/GradesView/ImportSuccessToast/index.js.map +1 -0
- package/dist/components/GradesView/ImportSuccessToast/messages.d.ts +17 -0
- package/dist/components/GradesView/ImportSuccessToast/messages.js +15 -0
- package/dist/components/GradesView/ImportSuccessToast/messages.js.map +1 -0
- package/dist/components/GradesView/InterventionsReport/index.d.ts +2 -0
- package/dist/components/GradesView/InterventionsReport/index.js +27 -0
- package/dist/components/GradesView/InterventionsReport/index.js.map +1 -0
- package/dist/components/GradesView/InterventionsReport/messages.d.ts +25 -0
- package/dist/components/GradesView/InterventionsReport/messages.js +20 -0
- package/dist/components/GradesView/InterventionsReport/messages.js.map +1 -0
- package/dist/components/GradesView/PageButtons/index.d.ts +5 -0
- package/dist/components/GradesView/PageButtons/index.js +14 -0
- package/dist/components/GradesView/PageButtons/index.js.map +1 -0
- package/dist/components/GradesView/PageButtons/messages.d.ts +16 -0
- package/dist/components/GradesView/PageButtons/messages.js +15 -0
- package/dist/components/GradesView/PageButtons/messages.js.map +1 -0
- package/dist/components/GradesView/ScoreViewInput/index.d.ts +5 -0
- package/dist/components/GradesView/ScoreViewInput/index.js +20 -0
- package/dist/components/GradesView/ScoreViewInput/index.js.map +1 -0
- package/dist/components/GradesView/ScoreViewInput/messages.d.ts +24 -0
- package/dist/components/GradesView/ScoreViewInput/messages.js +20 -0
- package/dist/components/GradesView/ScoreViewInput/messages.js.map +1 -0
- package/dist/components/GradesView/SearchControls/hooks.d.ts +9 -0
- package/dist/components/GradesView/SearchControls/hooks.js +34 -0
- package/dist/components/GradesView/SearchControls/hooks.js.map +1 -0
- package/dist/components/GradesView/SearchControls/index.d.ts +5 -0
- package/dist/components/GradesView/SearchControls/index.js +14 -0
- package/dist/components/GradesView/SearchControls/index.js.map +1 -0
- package/dist/components/GradesView/SearchControls/messages.d.ts +16 -0
- package/dist/components/GradesView/SearchControls/messages.js +15 -0
- package/dist/components/GradesView/SearchControls/messages.js.map +1 -0
- package/dist/components/GradesView/SpinnerIcon.d.ts +5 -0
- package/dist/components/GradesView/SpinnerIcon.js +15 -0
- package/dist/components/GradesView/SpinnerIcon.js.map +1 -0
- package/dist/components/GradesView/StatusAlerts/index.d.ts +5 -0
- package/dist/components/GradesView/StatusAlerts/index.js +16 -0
- package/dist/components/GradesView/StatusAlerts/index.js.map +1 -0
- package/dist/components/GradesView/StatusAlerts/messages.d.ts +24 -0
- package/dist/components/GradesView/StatusAlerts/messages.js +20 -0
- package/dist/components/GradesView/StatusAlerts/messages.js.map +1 -0
- package/dist/components/GradesView/data/api.d.ts +44 -0
- package/dist/components/GradesView/data/api.js +64 -0
- package/dist/components/GradesView/data/api.js.map +1 -0
- package/dist/components/GradesView/data/apiHook.d.ts +92 -0
- package/dist/components/GradesView/data/apiHook.js +191 -0
- package/dist/components/GradesView/data/apiHook.js.map +1 -0
- package/dist/components/GradesView/data/hooks.d.ts +32 -0
- package/dist/components/GradesView/data/hooks.js +242 -0
- package/dist/components/GradesView/data/hooks.js.map +1 -0
- package/dist/components/GradesView/data/queryKeys.d.ts +13 -0
- package/dist/components/GradesView/data/queryKeys.js +15 -0
- package/dist/components/GradesView/data/queryKeys.js.map +1 -0
- package/dist/components/GradesView/data/utils.d.ts +96 -0
- package/dist/components/GradesView/data/utils.js +103 -0
- package/dist/components/GradesView/data/utils.js.map +1 -0
- package/dist/components/GradesView/index.d.ts +10 -0
- package/dist/components/GradesView/index.js +35 -0
- package/dist/components/GradesView/index.js.map +1 -0
- package/dist/components/GradesView/messages.d.ts +24 -0
- package/dist/components/GradesView/messages.js +20 -0
- package/dist/components/GradesView/messages.js.map +1 -0
- package/dist/components/NetworkButton/index.d.ts +23 -0
- package/dist/components/NetworkButton/index.js +54 -0
- package/dist/components/NetworkButton/index.js.map +1 -0
- package/dist/components/WithSidebar/WithSidebar.scss +36 -0
- package/dist/components/WithSidebar/index.d.ts +9 -0
- package/dist/components/WithSidebar/index.js +34 -0
- package/dist/components/WithSidebar/index.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/containers/GradebookPage/GradebookDataLoader.d.ts +10 -0
- package/dist/containers/GradebookPage/GradebookDataLoader.js +19 -0
- package/dist/containers/GradebookPage/GradebookDataLoader.js.map +1 -0
- package/dist/containers/GradebookPage/index.d.ts +2 -0
- package/dist/containers/GradebookPage/index.js +40 -0
- package/dist/containers/GradebookPage/index.js.map +1 -0
- package/dist/data/api.d.ts +20 -0
- package/dist/data/api.js +36 -0
- package/dist/data/api.js.map +1 -0
- package/dist/data/apiHook.d.ts +40 -0
- package/dist/data/apiHook.js +65 -0
- package/dist/data/apiHook.js.map +1 -0
- package/dist/data/constants/app.d.ts +13 -0
- package/dist/data/constants/app.js +58 -0
- package/dist/data/constants/app.js.map +1 -0
- package/dist/data/constants/errors.d.ts +2 -0
- package/dist/data/constants/errors.js +3 -0
- package/dist/data/constants/errors.js.map +1 -0
- package/dist/data/constants/filters.d.ts +15 -0
- package/dist/data/constants/filters.js +71 -0
- package/dist/data/constants/filters.js.map +1 -0
- package/dist/data/constants/filters.messages.d.ts +56 -0
- package/dist/data/constants/filters.messages.js +40 -0
- package/dist/data/constants/filters.messages.js.map +1 -0
- package/dist/data/constants/grades.d.ts +6 -0
- package/dist/data/constants/grades.js +17 -0
- package/dist/data/constants/grades.js.map +1 -0
- package/dist/data/filtersContext.d.ts +60 -0
- package/dist/data/filtersContext.js +212 -0
- package/dist/data/filtersContext.js.map +1 -0
- package/dist/data/filtersSnapshot.d.ts +20 -0
- package/dist/data/filtersSnapshot.js +15 -0
- package/dist/data/filtersSnapshot.js.map +1 -0
- package/dist/data/formatUtils.d.ts +15 -0
- package/dist/data/formatUtils.js +35 -0
- package/dist/data/formatUtils.js.map +1 -0
- package/dist/data/gradebookUiContext.d.ts +99 -0
- package/dist/data/gradebookUiContext.js +143 -0
- package/dist/data/gradebookUiContext.js.map +1 -0
- package/dist/data/queryClient.d.ts +10 -0
- package/dist/data/queryClient.js +34 -0
- package/dist/data/queryClient.js.map +1 -0
- package/dist/data/queryKeys.d.ts +11 -0
- package/dist/data/queryKeys.js +21 -0
- package/dist/data/queryKeys.js.map +1 -0
- package/dist/data/services/lms/api.d.ts +2 -0
- package/dist/data/services/lms/api.js +104 -0
- package/dist/data/services/lms/api.js.map +1 -0
- package/dist/data/services/lms/constants.d.ts +3 -0
- package/dist/data/services/lms/constants.js +16 -0
- package/dist/data/services/lms/constants.js.map +1 -0
- package/dist/data/services/lms/index.d.ts +2 -0
- package/dist/data/services/lms/index.js +8 -0
- package/dist/data/services/lms/index.js.map +1 -0
- package/dist/data/services/lms/messages.d.ts +2 -0
- package/dist/data/services/lms/messages.js +8 -0
- package/dist/data/services/lms/messages.js.map +1 -0
- package/dist/data/services/lms/urls.d.ts +19 -0
- package/dist/data/services/lms/urls.js +47 -0
- package/dist/data/services/lms/urls.js.map +1 -0
- package/dist/data/services/lms/utils.d.ts +4 -0
- package/dist/data/services/lms/utils.js +34 -0
- package/dist/data/services/lms/utils.js.map +1 -0
- package/dist/data/services/segment/constants.d.ts +8 -0
- package/dist/data/services/segment/constants.js +26 -0
- package/dist/data/services/segment/constants.js.map +1 -0
- package/dist/data/services/segment/events.d.ts +14 -0
- package/dist/data/services/segment/events.js +32 -0
- package/dist/data/services/segment/events.js.map +1 -0
- package/dist/data/utils.d.ts +10 -0
- package/dist/data/utils.js +14 -0
- package/dist/data/utils.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/utils.d.ts +2 -0
- package/dist/i18n/utils.js +21 -0
- package/dist/i18n/utils.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/messages.d.ts +8 -0
- package/dist/messages.js +10 -0
- package/dist/messages.js.map +1 -0
- package/dist/providers.d.ts +3 -0
- package/dist/providers.js +13 -0
- package/dist/providers.js.map +1 -0
- package/dist/routes.d.ts +11 -0
- package/dist/routes.js +16 -0
- package/dist/routes.js.map +1 -0
- package/dist/style.scss +13 -0
- package/dist/utils/StrictDict.d.ts +2 -0
- package/dist/utils/StrictDict.js +19 -0
- package/dist/utils/StrictDict.js.map +1 -0
- package/dist/utils/formatDate.d.ts +15 -0
- package/dist/utils/formatDate.js +19 -0
- package/dist/utils/formatDate.js.map +1 -0
- package/dist/utils/hoc.d.ts +3 -0
- package/dist/utils/hoc.js +21 -0
- package/dist/utils/hoc.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keyStore.d.ts +2 -0
- package/dist/utils/keyStore.js +4 -0
- package/dist/utils/keyStore.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/PageButtons/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,QAAQ,EAAE;QACR,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,sCAAsC;KACpD;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,kCAAkC;KAChD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n prevPage: {\n id: 'gradebook.GradesView.PageButtons.prevPage',\n defaultMessage: 'Previous Page',\n description: 'Grades tab Previous Page button text',\n },\n nextPage: {\n id: 'gradebook.GradesView.PageButtons.nextPage',\n defaultMessage: 'Next Page',\n description: 'Grades tab Next Page button text',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Form } from '@openedx/paragon';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { useGradebookUi } from '../../../data/gradebookUiContext';
|
|
5
|
+
import { useGradeData } from '../data/hooks';
|
|
6
|
+
import messages from './messages';
|
|
7
|
+
/**
|
|
8
|
+
* <ScoreViewInput />
|
|
9
|
+
* Select control for grade format (percent vs absolute).
|
|
10
|
+
*/
|
|
11
|
+
export const ScoreViewInput = () => {
|
|
12
|
+
const { formatMessage } = useIntl();
|
|
13
|
+
const { gradeFormat } = useGradeData();
|
|
14
|
+
const { setGradeFormat } = useGradebookUi();
|
|
15
|
+
const toggleFormat = (e) => setGradeFormat(e.target.value);
|
|
16
|
+
return (_jsxs(Form.Group, { controlId: "ScoreView", children: [_jsxs(Form.Label, { children: [formatMessage(messages.scoreView), ":"] }), _jsxs(Form.Control, { as: "select", value: gradeFormat, onChange: toggleFormat, children: [_jsx("option", { value: "percent", children: formatMessage(messages.percent) }), _jsx("option", { value: "absolute", children: formatMessage(messages.absolute) })] })] }));
|
|
17
|
+
};
|
|
18
|
+
ScoreViewInput.propTypes = {};
|
|
19
|
+
export default ScoreViewInput;
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/ScoreViewInput/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,CACL,MAAC,IAAI,CAAC,KAAK,IAAC,SAAS,EAAC,WAAW,aAC/B,MAAC,IAAI,CAAC,KAAK,eAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAe,EAC7D,MAAC,IAAI,CAAC,OAAO,IACX,EAAE,EAAC,QAAQ,EACX,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,YAAY,aAEtB,iBAAQ,KAAK,EAAC,SAAS,YAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAU,EAClE,iBAAQ,KAAK,EAAC,UAAU,YAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAU,IACvD,IACJ,CACd,CAAC;AACJ,CAAC,CAAC;AACF,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;AAE9B,eAAe,cAAc,CAAC","sourcesContent":["import { Form } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\nimport { useGradeData } from '../data/hooks';\nimport messages from './messages';\n\n/**\n * <ScoreViewInput />\n * Select control for grade format (percent vs absolute).\n */\nexport const ScoreViewInput = () => {\n const { formatMessage } = useIntl();\n const { gradeFormat } = useGradeData();\n const { setGradeFormat } = useGradebookUi();\n const toggleFormat = (e) => setGradeFormat(e.target.value);\n return (\n <Form.Group controlId=\"ScoreView\">\n <Form.Label>{formatMessage(messages.scoreView)}:</Form.Label>\n <Form.Control\n as=\"select\"\n value={gradeFormat}\n onChange={toggleFormat}\n >\n <option value=\"percent\">{formatMessage(messages.percent)}</option>\n <option value=\"absolute\">{formatMessage(messages.absolute)}</option>\n </Form.Control>\n </Form.Group>\n );\n};\nScoreViewInput.propTypes = {};\n\nexport default ScoreViewInput;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace scoreView {
|
|
4
|
+
let id: string;
|
|
5
|
+
let defaultMessage: string;
|
|
6
|
+
let description: string;
|
|
7
|
+
}
|
|
8
|
+
namespace absolute {
|
|
9
|
+
let id_1: string;
|
|
10
|
+
export { id_1 as id };
|
|
11
|
+
let defaultMessage_1: string;
|
|
12
|
+
export { defaultMessage_1 as defaultMessage };
|
|
13
|
+
let description_1: string;
|
|
14
|
+
export { description_1 as description };
|
|
15
|
+
}
|
|
16
|
+
namespace percent {
|
|
17
|
+
let id_2: string;
|
|
18
|
+
export { id_2 as id };
|
|
19
|
+
let defaultMessage_2: string;
|
|
20
|
+
export { defaultMessage_2 as defaultMessage };
|
|
21
|
+
let description_2: string;
|
|
22
|
+
export { description_2 as description };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
scoreView: {
|
|
4
|
+
id: 'gradebook.GradesView.scoreViewLabel',
|
|
5
|
+
defaultMessage: 'Score View',
|
|
6
|
+
description: 'The label for the dropdown list that allows a user to select the Score format',
|
|
7
|
+
},
|
|
8
|
+
absolute: {
|
|
9
|
+
id: 'gradebook.GradesView.absoluteOption',
|
|
10
|
+
defaultMessage: 'Absolute',
|
|
11
|
+
description: 'A label within the Score Format dropdown list for the Absolute Grade Score option',
|
|
12
|
+
},
|
|
13
|
+
percent: {
|
|
14
|
+
id: 'gradebook.GradesView.percentOption',
|
|
15
|
+
defaultMessage: 'Percent',
|
|
16
|
+
description: 'A label within the Score Format dropdown list for the Percent Grade Score option',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
export default messages;
|
|
20
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/ScoreViewInput/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,+EAA+E;KAC7F;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,mFAAmF;KACjG;IACD,OAAO,EAAE;QACP,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,kFAAkF;KAChG;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n scoreView: {\n id: 'gradebook.GradesView.scoreViewLabel',\n defaultMessage: 'Score View',\n description: 'The label for the dropdown list that allows a user to select the Score format',\n },\n absolute: {\n id: 'gradebook.GradesView.absoluteOption',\n defaultMessage: 'Absolute',\n description: 'A label within the Score Format dropdown list for the Absolute Grade Score option',\n },\n percent: {\n id: 'gradebook.GradesView.percentOption',\n defaultMessage: 'Percent',\n description: 'A label within the Score Format dropdown list for the Percent Grade Score option',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
2
|
+
import { useFilters } from '../../../data/filtersContext';
|
|
3
|
+
import { useRefetchGrades } from '../data/hooks';
|
|
4
|
+
import messages from './messages';
|
|
5
|
+
/**
|
|
6
|
+
* Controls for filtering the GradebookTable. Contains the "Edit Filters" button for opening the filter drawer
|
|
7
|
+
* as well as the search box for searching by username/email.
|
|
8
|
+
*/
|
|
9
|
+
export const useSearchControlsData = () => {
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
const { searchValue, setSearchValue } = useFilters();
|
|
12
|
+
const fetchGrades = useRefetchGrades();
|
|
13
|
+
const onBlur = (e) => {
|
|
14
|
+
setSearchValue(e.target.value);
|
|
15
|
+
};
|
|
16
|
+
const onClear = () => {
|
|
17
|
+
setSearchValue('');
|
|
18
|
+
fetchGrades();
|
|
19
|
+
};
|
|
20
|
+
const onSubmit = (newValue) => {
|
|
21
|
+
setSearchValue(newValue);
|
|
22
|
+
fetchGrades();
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
onSubmit,
|
|
26
|
+
onBlur,
|
|
27
|
+
onClear,
|
|
28
|
+
searchValue,
|
|
29
|
+
inputLabel: formatMessage(messages.label),
|
|
30
|
+
hintText: formatMessage(messages.hint),
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export default useSearchControlsData;
|
|
34
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;QACnB,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,cAAc,CAAC,EAAE,CAAC,CAAC;QACnB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE;QAC5B,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,MAAM;QACN,OAAO;QACP,WAAW;QACX,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\n\nimport { useFilters } from '@src/data/filtersContext';\n\nimport { useRefetchGrades } from '../data/hooks';\nimport messages from './messages';\n\n/**\n * Controls for filtering the GradebookTable. Contains the \"Edit Filters\" button for opening the filter drawer\n * as well as the search box for searching by username/email.\n */\nexport const useSearchControlsData = () => {\n const { formatMessage } = useIntl();\n const { searchValue, setSearchValue } = useFilters();\n const fetchGrades = useRefetchGrades();\n\n const onBlur = (e) => {\n setSearchValue(e.target.value);\n };\n\n const onClear = () => {\n setSearchValue('');\n fetchGrades();\n };\n\n const onSubmit = (newValue) => {\n setSearchValue(newValue);\n fetchGrades();\n };\n\n return {\n onSubmit,\n onBlur,\n onClear,\n searchValue,\n inputLabel: formatMessage(messages.label),\n hintText: formatMessage(messages.hint),\n };\n};\n\nexport default useSearchControlsData;\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SearchField } from '@openedx/paragon';
|
|
3
|
+
import useSearchControlsData from './hooks';
|
|
4
|
+
/**
|
|
5
|
+
* Controls for filtering the GradebookTable. Contains the "Edit Filters" button for opening the filter drawer
|
|
6
|
+
* as well as the search box for searching by username/email.
|
|
7
|
+
*/
|
|
8
|
+
export const SearchControls = () => {
|
|
9
|
+
const { onSubmit, onBlur, onClear, searchValue, inputLabel, hintText, } = useSearchControlsData();
|
|
10
|
+
return (_jsxs("div", { className: "search-container", children: [_jsx(SearchField, { onSubmit: onSubmit, label: inputLabel, onBlur: onBlur, onClear: onClear, value: searchValue }), _jsx("small", { className: "form-text text-muted search-help-text", children: hintText })] }));
|
|
11
|
+
};
|
|
12
|
+
SearchControls.propTypes = {};
|
|
13
|
+
export default SearchControls;
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,qBAAqB,MAAM,SAAS,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,GACT,GAAG,qBAAqB,EAAE,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,aAC/B,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GAClB,EACF,gBAAO,SAAS,EAAC,uCAAuC,YACrD,QAAQ,GACH,IACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;AAE9B,eAAe,cAAc,CAAC","sourcesContent":["import { SearchField } from '@openedx/paragon';\nimport useSearchControlsData from './hooks';\n\n/**\n * Controls for filtering the GradebookTable. Contains the \"Edit Filters\" button for opening the filter drawer\n * as well as the search box for searching by username/email.\n */\nexport const SearchControls = () => {\n const {\n onSubmit,\n onBlur,\n onClear,\n searchValue,\n inputLabel,\n hintText,\n } = useSearchControlsData();\n\n return (\n <div className=\"search-container\">\n <SearchField\n onSubmit={onSubmit}\n label={inputLabel}\n onBlur={onBlur}\n onClear={onClear}\n value={searchValue}\n />\n <small className=\"form-text text-muted search-help-text\">\n {hintText}\n </small>\n </div>\n );\n};\n\nSearchControls.propTypes = {};\n\nexport default SearchControls;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace label {
|
|
4
|
+
let id: string;
|
|
5
|
+
let defaultMessage: string;
|
|
6
|
+
let description: string;
|
|
7
|
+
}
|
|
8
|
+
namespace hint {
|
|
9
|
+
let id_1: string;
|
|
10
|
+
export { id_1 as id };
|
|
11
|
+
let defaultMessage_1: string;
|
|
12
|
+
export { defaultMessage_1 as defaultMessage };
|
|
13
|
+
let description_1: string;
|
|
14
|
+
export { description_1 as description };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
label: {
|
|
4
|
+
id: 'gradebook.GradesView.search.label',
|
|
5
|
+
defaultMessage: 'Search for a learner',
|
|
6
|
+
description: 'Text prompting a user to use this functionality to search for a learner',
|
|
7
|
+
},
|
|
8
|
+
hint: {
|
|
9
|
+
id: 'gradebook.GradesView.search.hint',
|
|
10
|
+
defaultMessage: 'Search by username, email, or student key',
|
|
11
|
+
description: 'A hint explaining the ways a user can search',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
export default messages;
|
|
15
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,EAAE,EAAE,mCAAmC;QACvC,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,yEAAyE;KACvF;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,kCAAkC;QACtC,cAAc,EAAE,2CAA2C;QAC3D,WAAW,EAAE,8CAA8C;KAC5D;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n label: {\n id: 'gradebook.GradesView.search.label',\n defaultMessage: 'Search for a learner',\n description: 'Text prompting a user to use this functionality to search for a learner',\n },\n hint: {\n id: 'gradebook.GradesView.search.hint',\n defaultMessage: 'Search by username, email, or student key',\n description: 'A hint explaining the ways a user can search',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Spinner } from '@openedx/paragon';
|
|
3
|
+
import { useShouldShowSpinner } from './data/hooks';
|
|
4
|
+
/**
|
|
5
|
+
* <SpinnerIcon />
|
|
6
|
+
* Simple icon component that shows a spinner overlay only while the app is busy
|
|
7
|
+
* (grades fetching or a mutation in flight).
|
|
8
|
+
*/
|
|
9
|
+
export const SpinnerIcon = () => {
|
|
10
|
+
const show = useShouldShowSpinner();
|
|
11
|
+
return show && (_jsx("div", { className: "spinner-overlay", children: _jsx(Spinner, { animation: "border", variant: "dark", screenReaderText: "loading" }) }));
|
|
12
|
+
};
|
|
13
|
+
SpinnerIcon.propTypes = {};
|
|
14
|
+
export default SpinnerIcon;
|
|
15
|
+
//# sourceMappingURL=SpinnerIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpinnerIcon.js","sourceRoot":"","sources":["../../../src/components/GradesView/SpinnerIcon.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,OAAO,IAAI,IAAI,CACb,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,gBAAgB,EAAC,SAAS,GAAG,GACpE,CACP,CAAC;AACJ,CAAC,CAAC;AACF,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;AAE3B,eAAe,WAAW,CAAC","sourcesContent":["import { Spinner } from '@openedx/paragon';\n\nimport { useShouldShowSpinner } from './data/hooks';\n\n/**\n * <SpinnerIcon />\n * Simple icon component that shows a spinner overlay only while the app is busy\n * (grades fetching or a mutation in flight).\n */\nexport const SpinnerIcon = () => {\n const show = useShouldShowSpinner();\n return show && (\n <div className=\"spinner-overlay\">\n <Spinner animation=\"border\" variant=\"dark\" screenReaderText=\"loading\" />\n </div>\n );\n};\nSpinnerIcon.propTypes = {};\n\nexport default SpinnerIcon;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert } from '@openedx/paragon';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { useGradebookUi } from '../../../data/gradebookUiContext';
|
|
5
|
+
import { useCourseGradeFilterValidity } from '../../GradebookFilters/data/hooks';
|
|
6
|
+
import messages from './messages';
|
|
7
|
+
export const StatusAlerts = () => {
|
|
8
|
+
const { formatMessage } = useIntl();
|
|
9
|
+
const { isMinValid, isMaxValid } = useCourseGradeFilterValidity();
|
|
10
|
+
const { showSuccess, setShowSuccess } = useGradebookUi();
|
|
11
|
+
const gradeFilterText = `${isMinValid ? '' : formatMessage(messages.minGradeInvalid)}${isMaxValid ? '' : formatMessage(messages.maxGradeInvalid)}`;
|
|
12
|
+
return (_jsxs(_Fragment, { children: [_jsx(Alert, { variant: "success", onClose: () => setShowSuccess(false), show: showSuccess, children: formatMessage(messages.editSuccessAlert) }), _jsx(Alert, { variant: "danger", dismissible: false, show: !isMinValid || !isMaxValid, children: gradeFilterText })] }));
|
|
13
|
+
};
|
|
14
|
+
StatusAlerts.propTypes = {};
|
|
15
|
+
export default StatusAlerts;
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/StatusAlerts/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAEzD,MAAM,eAAe,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;IAEnJ,OAAO,CACL,8BACE,KAAC,KAAK,IACJ,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACpC,IAAI,EAAE,WAAW,YAEhB,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GACnC,EACR,KAAC,KAAK,IACJ,OAAO,EAAC,QAAQ,EAChB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,UAAU,YAE/B,eAAe,GACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAE5B,eAAe,YAAY,CAAC","sourcesContent":["import { Alert } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\nimport { useCourseGradeFilterValidity } from '@src/components/GradebookFilters/data/hooks';\n\nimport messages from './messages';\n\nexport const StatusAlerts = () => {\n const { formatMessage } = useIntl();\n const { isMinValid, isMaxValid } = useCourseGradeFilterValidity();\n const { showSuccess, setShowSuccess } = useGradebookUi();\n\n const gradeFilterText = `${isMinValid ? '' : formatMessage(messages.minGradeInvalid)}${isMaxValid ? '' : formatMessage(messages.maxGradeInvalid)}`;\n\n return (\n <>\n <Alert\n variant=\"success\"\n onClose={() => setShowSuccess(false)}\n show={showSuccess}\n >\n {formatMessage(messages.editSuccessAlert)}\n </Alert>\n <Alert\n variant=\"danger\"\n dismissible={false}\n show={!isMinValid || !isMaxValid}\n >\n {gradeFilterText}\n </Alert>\n </>\n );\n};\n\nStatusAlerts.propTypes = {};\n\nexport default StatusAlerts;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace editSuccessAlert {
|
|
4
|
+
let id: string;
|
|
5
|
+
let defaultMessage: string;
|
|
6
|
+
let description: string;
|
|
7
|
+
}
|
|
8
|
+
namespace maxGradeInvalid {
|
|
9
|
+
let id_1: string;
|
|
10
|
+
export { id_1 as id };
|
|
11
|
+
let defaultMessage_1: string;
|
|
12
|
+
export { defaultMessage_1 as defaultMessage };
|
|
13
|
+
let description_1: string;
|
|
14
|
+
export { description_1 as description };
|
|
15
|
+
}
|
|
16
|
+
namespace minGradeInvalid {
|
|
17
|
+
let id_2: string;
|
|
18
|
+
export { id_2 as id };
|
|
19
|
+
let defaultMessage_2: string;
|
|
20
|
+
export { defaultMessage_2 as defaultMessage };
|
|
21
|
+
let description_2: string;
|
|
22
|
+
export { description_2 as description };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
editSuccessAlert: {
|
|
4
|
+
id: 'gradebook.GradesView.editSuccessAlert',
|
|
5
|
+
defaultMessage: 'The grade has been successfully edited. You may see a slight delay before updates appear in the Gradebook.',
|
|
6
|
+
description: 'An alert text for successfully editing a grade',
|
|
7
|
+
},
|
|
8
|
+
maxGradeInvalid: {
|
|
9
|
+
id: 'gradebook.GradesView.maxCourseGradeInvalid',
|
|
10
|
+
defaultMessage: 'Maximum course grade must be between 0 and 100',
|
|
11
|
+
description: 'An alert text for selecting a maximum course grade greater than 100',
|
|
12
|
+
},
|
|
13
|
+
minGradeInvalid: {
|
|
14
|
+
id: 'gradebook.GradesView.minCourseGradeInvalid',
|
|
15
|
+
defaultMessage: 'Minimum course grade must be between 0 and 100',
|
|
16
|
+
description: 'An alert text for selecting a minimum course grade less than 0',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
export default messages;
|
|
20
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/StatusAlerts/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,gBAAgB,EAAE;QAChB,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,6GAA6G;QAC7H,WAAW,EAAE,iDAAiD;KAC/D;IACD,eAAe,EAAE;QACf,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,gDAAgD;QAChE,WAAW,EAAE,qEAAqE;KACnF;IACD,eAAe,EAAE;QACf,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,gDAAgD;QAChE,WAAW,EAAE,gEAAgE;KAC9E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n editSuccessAlert: {\n id: 'gradebook.GradesView.editSuccessAlert',\n defaultMessage: 'The grade has been successfully edited. You may see a slight delay before updates appear in the Gradebook.',\n description: 'An alert text for successfully editing a grade',\n },\n maxGradeInvalid: {\n id: 'gradebook.GradesView.maxCourseGradeInvalid',\n defaultMessage: 'Maximum course grade must be between 0 and 100',\n description: 'An alert text for selecting a maximum course grade greater than 100',\n },\n minGradeInvalid: {\n id: 'gradebook.GradesView.minCourseGradeInvalid',\n defaultMessage: 'Minimum course grade must be between 0 and 100',\n description: 'An alert text for selecting a minimum course grade less than 0',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* getGrades({ searchText, cohort, track, options })
|
|
3
|
+
* Fetches the gradebook rows for the current filter selection. Params mirror the
|
|
4
|
+
* legacy `fetchGrades` thunk (which reads them from Redux); returns the raw
|
|
5
|
+
* response body (results/previous/next/counts) — sorting/shaping happens in the
|
|
6
|
+
* consumer, matching the old `fetching.received` handling.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getGrades: ({ searchText, cohort, track, options, }: {
|
|
9
|
+
searchText: string | null;
|
|
10
|
+
cohort: unknown;
|
|
11
|
+
track: unknown;
|
|
12
|
+
options: Record<string, unknown>;
|
|
13
|
+
}) => Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* getGradesPage(endpoint)
|
|
16
|
+
* Fetches a specific grades page by its opaque prev/next cursor URL (taken from a
|
|
17
|
+
* prior response's `previous`/`next`). Returns the raw response body, the same
|
|
18
|
+
* shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.
|
|
19
|
+
*/
|
|
20
|
+
export declare const getGradesPage: (endpoint: string) => Promise<any>;
|
|
21
|
+
/** Grade-override history for one learner on one subsection (display-shaped). */
|
|
22
|
+
export interface GradeOverrideHistory {
|
|
23
|
+
overrideHistory: {
|
|
24
|
+
date: string;
|
|
25
|
+
grader: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
adjustedGrade: unknown;
|
|
28
|
+
}[];
|
|
29
|
+
currentEarnedAllOverride: number | null;
|
|
30
|
+
currentPossibleAllOverride: number | null;
|
|
31
|
+
currentEarnedGradedOverride: number | null;
|
|
32
|
+
currentPossibleGradedOverride: number | null;
|
|
33
|
+
originalGradeEarnedAll: number | null;
|
|
34
|
+
originalGradePossibleAll: number | null;
|
|
35
|
+
originalGradeEarnedGraded: number | null;
|
|
36
|
+
originalGradePossibleGraded: number | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* getGradeOverrideHistory(subsectionId, userId)
|
|
40
|
+
* Fetches and shapes the grade-override history for a learner/subsection. Mirrors
|
|
41
|
+
* the legacy thunk: throws the default message on a network error, and the
|
|
42
|
+
* server-provided message (or the default) when the API reports `success: false`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const getGradeOverrideHistory: (subsectionId: string, userId: string | number) => Promise<GradeOverrideHistory>;
|
|
@@ -0,0 +1,64 @@
|
|
|
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 { getAuthenticatedHttpClient } from '@openedx/frontend-base';
|
|
11
|
+
import lms from '../../../data/services/lms';
|
|
12
|
+
import GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG from '../../../data/constants/errors';
|
|
13
|
+
import { formatGradeOverrideForDisplay } from './utils';
|
|
14
|
+
/**
|
|
15
|
+
* getGrades({ searchText, cohort, track, options })
|
|
16
|
+
* Fetches the gradebook rows for the current filter selection. Params mirror the
|
|
17
|
+
* legacy `fetchGrades` thunk (which reads them from Redux); returns the raw
|
|
18
|
+
* response body (results/previous/next/counts) — sorting/shaping happens in the
|
|
19
|
+
* consumer, matching the old `fetching.received` handling.
|
|
20
|
+
*/
|
|
21
|
+
export const getGrades = (_a) => __awaiter(void 0, [_a], void 0, function* ({ searchText, cohort, track, options, }) {
|
|
22
|
+
const { data } = yield lms.api.fetch.gradebookData(searchText, cohort, track, options);
|
|
23
|
+
return data;
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* getGradesPage(endpoint)
|
|
27
|
+
* Fetches a specific grades page by its opaque prev/next cursor URL (taken from a
|
|
28
|
+
* prior response's `previous`/`next`). Returns the raw response body, the same
|
|
29
|
+
* shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.
|
|
30
|
+
*/
|
|
31
|
+
export const getGradesPage = (endpoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
const { data } = yield getAuthenticatedHttpClient().get(endpoint);
|
|
33
|
+
return data;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* getGradeOverrideHistory(subsectionId, userId)
|
|
37
|
+
* Fetches and shapes the grade-override history for a learner/subsection. Mirrors
|
|
38
|
+
* the legacy thunk: throws the default message on a network error, and the
|
|
39
|
+
* server-provided message (or the default) when the API reports `success: false`.
|
|
40
|
+
*/
|
|
41
|
+
export const getGradeOverrideHistory = (subsectionId, userId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
let data;
|
|
43
|
+
try {
|
|
44
|
+
({ data } = yield lms.api.fetch.gradeOverrideHistory(subsectionId, userId));
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
throw new Error(GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);
|
|
48
|
+
}
|
|
49
|
+
if (!data.success) {
|
|
50
|
+
throw new Error(data.error_message || GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
overrideHistory: formatGradeOverrideForDisplay(data.history),
|
|
54
|
+
currentEarnedAllOverride: data.override ? data.override.earned_all_override : null,
|
|
55
|
+
currentPossibleAllOverride: data.override ? data.override.possible_all_override : null,
|
|
56
|
+
currentEarnedGradedOverride: data.override ? data.override.earned_graded_override : null,
|
|
57
|
+
currentPossibleGradedOverride: data.override ? data.override.possible_graded_override : null,
|
|
58
|
+
originalGradeEarnedAll: data.original_grade ? data.original_grade.earned_all : null,
|
|
59
|
+
originalGradePossibleAll: data.original_grade ? data.original_grade.possible_all : null,
|
|
60
|
+
originalGradeEarnedGraded: data.original_grade ? data.original_grade.earned_graded : null,
|
|
61
|
+
originalGradePossibleGraded: data.original_grade ? data.original_grade.possible_graded : null,
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradesView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,GAAG,MAAM,wBAAwB,CAAC;AACzC,OAAO,wCAAwC,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAUtB,EAAE,4CAV2B,EAC9B,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,GAMR;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,EAAE;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAeF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,YAAoB,EACpB,MAAuB,EACQ,EAAE;IACjC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO;QACL,eAAe,EAAE,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5D,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;QAClF,0BAA0B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI;QACtF,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI;QACxF,6BAA6B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;QAC5F,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACnF,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACvF,yBAAyB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QACzF,2BAA2B,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;KAC9F,CAAC;AACJ,CAAC,CAAA,CAAC","sourcesContent":["import { getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nimport lms from '@src/data/services/lms';\nimport GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG from '@src/data/constants/errors';\nimport { formatGradeOverrideForDisplay } from './utils';\n\n/**\n * getGrades({ searchText, cohort, track, options })\n * Fetches the gradebook rows for the current filter selection. Params mirror the\n * legacy `fetchGrades` thunk (which reads them from Redux); returns the raw\n * response body (results/previous/next/counts) — sorting/shaping happens in the\n * consumer, matching the old `fetching.received` handling.\n */\nexport const getGrades = async ({\n searchText,\n cohort,\n track,\n options,\n}: {\n searchText: string | null;\n cohort: unknown;\n track: unknown;\n options: Record<string, unknown>;\n}) => {\n const { data } = await lms.api.fetch.gradebookData(searchText, cohort, track, options);\n return data;\n};\n\n/**\n * getGradesPage(endpoint)\n * Fetches a specific grades page by its opaque prev/next cursor URL (taken from a\n * prior response's `previous`/`next`). Returns the raw response body, the same\n * shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.\n */\nexport const getGradesPage = async (endpoint: string) => {\n const { data } = await getAuthenticatedHttpClient().get(endpoint);\n return data;\n};\n\n/** Grade-override history for one learner on one subsection (display-shaped). */\nexport interface GradeOverrideHistory {\n overrideHistory: { date: string; grader: string; reason: string; adjustedGrade: unknown }[];\n currentEarnedAllOverride: number | null;\n currentPossibleAllOverride: number | null;\n currentEarnedGradedOverride: number | null;\n currentPossibleGradedOverride: number | null;\n originalGradeEarnedAll: number | null;\n originalGradePossibleAll: number | null;\n originalGradeEarnedGraded: number | null;\n originalGradePossibleGraded: number | null;\n}\n\n/**\n * getGradeOverrideHistory(subsectionId, userId)\n * Fetches and shapes the grade-override history for a learner/subsection. Mirrors\n * the legacy thunk: throws the default message on a network error, and the\n * server-provided message (or the default) when the API reports `success: false`.\n */\nexport const getGradeOverrideHistory = async (\n subsectionId: string,\n userId: string | number,\n): Promise<GradeOverrideHistory> => {\n let data;\n try {\n ({ data } = await lms.api.fetch.gradeOverrideHistory(subsectionId, userId));\n } catch (e) {\n throw new Error(GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n if (!data.success) {\n throw new Error(data.error_message || GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n return {\n overrideHistory: formatGradeOverrideForDisplay(data.history),\n currentEarnedAllOverride: data.override ? data.override.earned_all_override : null,\n currentPossibleAllOverride: data.override ? data.override.possible_all_override : null,\n currentEarnedGradedOverride: data.override ? data.override.earned_graded_override : null,\n currentPossibleGradedOverride: data.override ? data.override.possible_graded_override : null,\n originalGradeEarnedAll: data.original_grade ? data.original_grade.earned_all : null,\n originalGradePossibleAll: data.original_grade ? data.original_grade.possible_all : null,\n originalGradeEarnedGraded: data.original_grade ? data.original_grade.earned_graded : null,\n originalGradePossibleGraded: data.original_grade ? data.original_grade.possible_graded : null,\n };\n};\n"]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useGrades()
|
|
3
|
+
* Single-responsibility query for the main gradebook rows. Caller supplies
|
|
4
|
+
* `courseId`, the current pagination cursor (`gradesPageEndpoint` from
|
|
5
|
+
* `GradebookUi`, or `null` for the base/unpaged page), and decides when it may
|
|
6
|
+
* run via `enabled`. The base grades key is a prefix of the paged key, so
|
|
7
|
+
* invalidating `byCourse(courseId)` still refetches any page. The first
|
|
8
|
+
* (unpaged) page reads the current filter params at fetch time (so an
|
|
9
|
+
* imperative `invalidateQueries` on filter apply / search refetches with the
|
|
10
|
+
* latest values); a non-null cursor fetches that opaque prev/next URL —
|
|
11
|
+
* replacing the legacy `fetchPrevNextGrades` thunk.
|
|
12
|
+
*/
|
|
13
|
+
export declare const useGrades: (courseId: string, gradesPageEndpoint: string | null, { enabled }?: {
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
16
|
+
/** One subsection cell within a learner's grade row. */
|
|
17
|
+
export interface SubsectionBreakdown {
|
|
18
|
+
label: string;
|
|
19
|
+
category?: string;
|
|
20
|
+
subsection_name?: string;
|
|
21
|
+
module_id?: string;
|
|
22
|
+
score_possible?: number;
|
|
23
|
+
score_earned?: number;
|
|
24
|
+
percent?: number;
|
|
25
|
+
attempted?: boolean;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
/** One learner's grade row from the gradebook response. */
|
|
29
|
+
export interface GradeEntry {
|
|
30
|
+
user_id?: number;
|
|
31
|
+
username?: string;
|
|
32
|
+
external_user_key?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
percent?: number;
|
|
35
|
+
section_breakdown: SubsectionBreakdown[];
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
}
|
|
38
|
+
/** Shaped grades read-model derived from the `useGrades` query. */
|
|
39
|
+
export interface GradesData {
|
|
40
|
+
results: GradeEntry[];
|
|
41
|
+
prevPage: string | null;
|
|
42
|
+
nextPage: string | null;
|
|
43
|
+
totalUsersCount: number;
|
|
44
|
+
filteredUsersCount: number;
|
|
45
|
+
isFetching: boolean;
|
|
46
|
+
isError: boolean;
|
|
47
|
+
isSuccess: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* useGradesData()
|
|
51
|
+
* Shapes the `useGrades` query into the read-model the grades table / counts /
|
|
52
|
+
* pagination consume — the React Query equivalent of the Redux `grades` slice
|
|
53
|
+
* fields that `useGradebookData` used to mirror. Results are sorted by username
|
|
54
|
+
* (matching the legacy `fetching.received` handling).
|
|
55
|
+
*/
|
|
56
|
+
export declare const useGradesData: () => GradesData;
|
|
57
|
+
/**
|
|
58
|
+
* useGradeOverrideHistory(subsectionId, userId)
|
|
59
|
+
* Grade-override history for a single learner/subsection, used by the edit modal.
|
|
60
|
+
* Enabled only once both identifiers are present (i.e. the modal has been opened
|
|
61
|
+
* for a specific cell). `retry: false` because a `success: false` business error
|
|
62
|
+
* is not worth retrying.
|
|
63
|
+
*/
|
|
64
|
+
export declare const useGradeOverrideHistory: (subsectionId?: string, userId?: string | number) => import("@tanstack/react-query").UseQueryResult<import("./api").GradeOverrideHistory, Error>;
|
|
65
|
+
/**
|
|
66
|
+
* useUpdateGrades()
|
|
67
|
+
* Grade-override save from the edit modal. The HTTP call runs through React Query;
|
|
68
|
+
* success emits the Segment `update.*` event, shows the success banner, resets to
|
|
69
|
+
* the first grades page, and invalidates the grades query (so the table reflects
|
|
70
|
+
* the override) and the edited cell's override history (so reopening the modal
|
|
71
|
+
* shows the new entry).
|
|
72
|
+
*
|
|
73
|
+
* The payload is captured as mutation variables when the trigger is called (same
|
|
74
|
+
* shape as the old `selectors.app.editUpdateData`): the caller closes the modal
|
|
75
|
+
* right after triggering the save, and a pending mutation picks up re-rendered
|
|
76
|
+
* options, so a closure over `modalState` would read the reset (empty) state.
|
|
77
|
+
*
|
|
78
|
+
* Returns a no-arg trigger to match the legacy `useUpdateGrades()` call site.
|
|
79
|
+
*/
|
|
80
|
+
export declare const useUpdateGrades: () => () => void;
|
|
81
|
+
/**
|
|
82
|
+
* useSubmitImportGradesButtonData()
|
|
83
|
+
* Bulk grade-override CSV upload. The upload runs through React Query and, on
|
|
84
|
+
* success, invalidates the bulk-operation-history query so the new upload shows up.
|
|
85
|
+
* CSV progress/results/toast are React UI state (GradebookUi context) and success/
|
|
86
|
+
* failure emit the Segment `uploadOverride.*` events.
|
|
87
|
+
*
|
|
88
|
+
* Returns `(formData) => Promise` whose promise always resolves (errors are handled
|
|
89
|
+
* inside `onError`), matching the legacy thunk so the caller's `.then(clearInput)`
|
|
90
|
+
* still runs on both success and failure.
|
|
91
|
+
*/
|
|
92
|
+
export declare const useSubmitImportGradesButtonData: () => (formData: FormData) => Promise<unknown>;
|