@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,34 @@
|
|
|
1
|
+
/** Shape of the `data` payload inside one raw bulk-history entry. */
|
|
2
|
+
export interface BulkHistoryRowsData {
|
|
3
|
+
processed_rows: number;
|
|
4
|
+
saved_rows: number;
|
|
5
|
+
total_rows: number;
|
|
6
|
+
}
|
|
7
|
+
/** One raw bulk-history entry as returned by the API. */
|
|
8
|
+
export interface RawBulkHistoryEntry {
|
|
9
|
+
modified: string;
|
|
10
|
+
original_filename: string;
|
|
11
|
+
data: BulkHistoryRowsData;
|
|
12
|
+
unique_id?: string;
|
|
13
|
+
id: number;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* getRowsProcessed(data)
|
|
18
|
+
* User-facing summary of total / processed / skipped / failed rows for one
|
|
19
|
+
* bulk-history entry's `data` payload.
|
|
20
|
+
*/
|
|
21
|
+
export declare const getRowsProcessed: ({ processed_rows: processed, saved_rows: saved, total_rows: total, }: BulkHistoryRowsData) => string;
|
|
22
|
+
/**
|
|
23
|
+
* transformHistoryEntry(rawEntry)
|
|
24
|
+
* Shape a raw bulk-history entry into what the history table renders (display
|
|
25
|
+
* filename / results summary / uploaded date).
|
|
26
|
+
*/
|
|
27
|
+
export declare const transformHistoryEntry: ({ modified, original_filename: originalFilename, data, id, unique_id: uniqueId, ...rest }: RawBulkHistoryEntry) => {
|
|
28
|
+
timeUploaded: string;
|
|
29
|
+
originalFilename: string;
|
|
30
|
+
resultsSummary: {
|
|
31
|
+
rowId: number;
|
|
32
|
+
text: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { formatDateForDisplay } from '../../../data/formatUtils';
|
|
13
|
+
/**
|
|
14
|
+
* getRowsProcessed(data)
|
|
15
|
+
* User-facing summary of total / processed / skipped / failed rows for one
|
|
16
|
+
* bulk-history entry's `data` payload.
|
|
17
|
+
*/
|
|
18
|
+
export const getRowsProcessed = ({ processed_rows: processed, saved_rows: saved, total_rows: total, }) => {
|
|
19
|
+
const failed = processed - saved;
|
|
20
|
+
const skipped = total - processed;
|
|
21
|
+
const summaryEntries = [`${total} Students: ${saved} processed`];
|
|
22
|
+
if (skipped > 0) {
|
|
23
|
+
summaryEntries.push(`${skipped} skipped`);
|
|
24
|
+
}
|
|
25
|
+
if (failed > 0) {
|
|
26
|
+
summaryEntries.push(`${failed} failed`);
|
|
27
|
+
}
|
|
28
|
+
return summaryEntries.join(', ');
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* transformHistoryEntry(rawEntry)
|
|
32
|
+
* Shape a raw bulk-history entry into what the history table renders (display
|
|
33
|
+
* filename / results summary / uploaded date).
|
|
34
|
+
*/
|
|
35
|
+
export const transformHistoryEntry = (_a) => {
|
|
36
|
+
var { modified, original_filename: originalFilename, data, id,
|
|
37
|
+
// Stripped from the row data, matching the legacy selector.
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
+
unique_id: uniqueId } = _a, rest = __rest(_a, ["modified", "original_filename", "data", "id", "unique_id"]);
|
|
40
|
+
return (Object.assign({ timeUploaded: formatDateForDisplay(new Date(modified)), originalFilename, resultsSummary: {
|
|
41
|
+
rowId: id,
|
|
42
|
+
text: getRowsProcessed(data),
|
|
43
|
+
} }, rest));
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/BulkManagementHistoryView/data/utils.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAmB7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,cAAc,EAAE,SAAS,EACzB,UAAU,EAAE,KAAK,EACjB,UAAU,EAAE,KAAK,GACG,EAAU,EAAE;IAChC,MAAM,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAClC,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,cAAc,KAAK,YAAY,CAAC,CAAC;IACjE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAShB,EAAE,EAAE;QATY,EACpC,QAAQ,EACR,iBAAiB,EAAE,gBAAgB,EACnC,IAAI,EACJ,EAAE;IACF,4DAA4D;IAC5D,6DAA6D;IAC7D,SAAS,EAAE,QAAQ,OAEC,EADjB,IAAI,cAR6B,4DASrC,CADQ;IACkB,OAAA,iBACzB,YAAY,EAAE,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EACtD,gBAAgB,EAChB,cAAc,EAAE;YACd,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAC7B,IACE,IAAI,EACP,CAAA;CAAA,CAAC","sourcesContent":["import { formatDateForDisplay } from '@src/data/formatUtils';\n\n/** Shape of the `data` payload inside one raw bulk-history entry. */\nexport interface BulkHistoryRowsData {\n processed_rows: number;\n saved_rows: number;\n total_rows: number;\n}\n\n/** One raw bulk-history entry as returned by the API. */\nexport interface RawBulkHistoryEntry {\n modified: string;\n original_filename: string;\n data: BulkHistoryRowsData;\n unique_id?: string;\n id: number;\n [key: string]: unknown;\n}\n\n/**\n * getRowsProcessed(data)\n * User-facing summary of total / processed / skipped / failed rows for one\n * bulk-history entry's `data` payload.\n */\nexport const getRowsProcessed = ({\n processed_rows: processed,\n saved_rows: saved,\n total_rows: total,\n}: BulkHistoryRowsData): string => {\n const failed = processed - saved;\n const skipped = total - processed;\n const summaryEntries = [`${total} Students: ${saved} processed`];\n if (skipped > 0) {\n summaryEntries.push(`${skipped} skipped`);\n }\n if (failed > 0) {\n summaryEntries.push(`${failed} failed`);\n }\n return summaryEntries.join(', ');\n};\n\n/**\n * transformHistoryEntry(rawEntry)\n * Shape a raw bulk-history entry into what the history table renders (display\n * filename / results summary / uploaded date).\n */\nexport const transformHistoryEntry = ({\n modified,\n original_filename: originalFilename,\n data,\n id,\n // Stripped from the row data, matching the legacy selector.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unique_id: uniqueId,\n ...rest\n}: RawBulkHistoryEntry) => ({\n timeUploaded: formatDateForDisplay(new Date(modified)),\n originalFilename,\n resultsSummary: {\n rowId: id,\n text: getRowsProcessed(data),\n },\n ...rest,\n});\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormattedMessage } from '@openedx/frontend-base';
|
|
3
|
+
import messages from './messages';
|
|
4
|
+
import BulkManagementAlerts from './BulkManagementAlerts';
|
|
5
|
+
import HistoryTable from './HistoryTable';
|
|
6
|
+
/**
|
|
7
|
+
* <BulkManagementHistoryView />
|
|
8
|
+
* top-level view for managing uploads of bulk management override csvs.
|
|
9
|
+
*/
|
|
10
|
+
export const BulkManagementHistoryView = () => (_jsxs("div", { className: "bulk-management-history-view", children: [_jsx("h4", { children: _jsx(FormattedMessage, Object.assign({}, messages.heading)) }), _jsx("p", { className: "help-text", children: _jsx(FormattedMessage, Object.assign({}, messages.helpText)) }), _jsx(BulkManagementAlerts, {}), _jsx(HistoryTable, {})] }));
|
|
11
|
+
export default BulkManagementHistoryView;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/BulkManagementHistoryView/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,CAC7C,eAAK,SAAS,EAAC,8BAA8B,aAC3C,uBAAI,KAAC,gBAAgB,oBAAK,QAAQ,CAAC,OAAO,EAAI,GAAK,EACnD,YAAG,SAAS,EAAC,WAAW,YACtB,KAAC,gBAAgB,oBAAK,QAAQ,CAAC,QAAQ,EAAI,GACzC,EACJ,KAAC,oBAAoB,KAAG,EACxB,KAAC,YAAY,KAAG,IACZ,CACP,CAAC;AAEF,eAAe,yBAAyB,CAAC","sourcesContent":["import { FormattedMessage } from '@openedx/frontend-base';\n\nimport messages from './messages';\nimport BulkManagementAlerts from './BulkManagementAlerts';\nimport HistoryTable from './HistoryTable';\n\n/**\n * <BulkManagementHistoryView />\n * top-level view for managing uploads of bulk management override csvs.\n */\nexport const BulkManagementHistoryView = () => (\n <div className=\"bulk-management-history-view\">\n <h4><FormattedMessage {...messages.heading} /></h4>\n <p className=\"help-text\">\n <FormattedMessage {...messages.helpText} />\n </p>\n <BulkManagementAlerts />\n <HistoryTable />\n </div>\n);\n\nexport default BulkManagementHistoryView;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace heading {
|
|
4
|
+
let id: string;
|
|
5
|
+
let defaultMessage: string;
|
|
6
|
+
let description: string;
|
|
7
|
+
}
|
|
8
|
+
namespace helpText {
|
|
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 successDialog {
|
|
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
|
+
heading: {
|
|
4
|
+
id: 'gradebook.BulkManagementHistoryView.heading',
|
|
5
|
+
defaultMessage: 'Bulk Management History',
|
|
6
|
+
description: 'Heading text for BulkManagement History Tab',
|
|
7
|
+
},
|
|
8
|
+
helpText: {
|
|
9
|
+
id: 'gradebook.BulkManagementHistoryView',
|
|
10
|
+
defaultMessage: 'Below is a log of previous grade imports. To download a CSV of your gradebook and import grades for override, return to the Gradebook. Please note, after importing grades, it may take a few seconds to process the override.',
|
|
11
|
+
description: 'Bulk Management History View help text',
|
|
12
|
+
},
|
|
13
|
+
successDialog: {
|
|
14
|
+
id: 'gradebook.BulkManagementHistoryView.successDialog',
|
|
15
|
+
defaultMessage: 'CSV processing. File uploads may take several minutes to complete.',
|
|
16
|
+
description: 'Success Dialog message in BulkManagement Tab File Upload Form',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
export default messages;
|
|
20
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/components/BulkManagementHistoryView/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,OAAO,EAAE;QACP,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,6CAA6C;KAC3D;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,gOAAgO;QAChP,WAAW,EAAE,wCAAwC;KACtD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,mDAAmD;QACvD,cAAc,EAAE,oEAAoE;QACpF,WAAW,EAAE,+DAA+D;KAC7E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n heading: {\n id: 'gradebook.BulkManagementHistoryView.heading',\n defaultMessage: 'Bulk Management History',\n description: 'Heading text for BulkManagement History Tab',\n },\n helpText: {\n id: 'gradebook.BulkManagementHistoryView',\n defaultMessage: 'Below is a log of previous grade imports. To download a CSV of your gradebook and import grades for override, return to the Gradebook. Please note, after importing grades, it may take a few seconds to process the override.',\n description: 'Bulk Management History View help text',\n },\n successDialog: {\n id: 'gradebook.BulkManagementHistoryView.successDialog',\n defaultMessage: 'CSV processing. File uploads may take several minutes to complete.',\n description: 'Success Dialog message in BulkManagement Tab File Upload Form',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default AssignmentFilter;
|
|
2
|
+
declare function AssignmentFilter({ updateQueryParams }: {
|
|
3
|
+
updateQueryParams: any;
|
|
4
|
+
}): import("react").JSX.Element;
|
|
5
|
+
declare namespace AssignmentFilter {
|
|
6
|
+
namespace propTypes {
|
|
7
|
+
let updateQueryParams: PropTypes.Validator<(...args: any[]) => any>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { useFilters } from '../../../data/filtersContext';
|
|
5
|
+
import { useFetchGradesIfAssignmentGradeFiltersSet, useSelectableAssignmentLabels, useSelectedAssignmentLabel, } from '../../GradesView/data/hooks';
|
|
6
|
+
import messages from '../messages';
|
|
7
|
+
import SelectGroup from '../SelectGroup';
|
|
8
|
+
const AssignmentFilter = ({ updateQueryParams }) => {
|
|
9
|
+
const { formatMessage } = useIntl();
|
|
10
|
+
const assignmentFilterOptions = useSelectableAssignmentLabels();
|
|
11
|
+
const selectedAssignmentLabel = useSelectedAssignmentLabel() || '';
|
|
12
|
+
const { setAssignment } = useFilters();
|
|
13
|
+
const conditionalFetch = useFetchGradesIfAssignmentGradeFiltersSet();
|
|
14
|
+
const handleChange = ({ target: { value: assignment } }) => {
|
|
15
|
+
const selectedFilterOption = assignmentFilterOptions.find(({ label }) => label === assignment);
|
|
16
|
+
const { id } = selectedFilterOption || {};
|
|
17
|
+
setAssignment(id !== null && id !== void 0 ? id : '');
|
|
18
|
+
updateQueryParams({ assignment: id });
|
|
19
|
+
conditionalFetch();
|
|
20
|
+
};
|
|
21
|
+
const filterOptions = assignmentFilterOptions.map(({ label, subsectionLabel }) => (_jsxs("option", { value: label, children: [label, ": ", subsectionLabel] }, label)));
|
|
22
|
+
return (_jsx("div", { className: "student-filters", children: _jsx(SelectGroup, { id: "assignment", label: formatMessage(messages.assignment), value: selectedAssignmentLabel, onChange: handleChange, disabled: assignmentFilterOptions.length === 0, options: [
|
|
23
|
+
_jsx("option", { value: "", children: "All" }, "0"),
|
|
24
|
+
...filterOptions,
|
|
25
|
+
] }) }));
|
|
26
|
+
};
|
|
27
|
+
AssignmentFilter.propTypes = {
|
|
28
|
+
updateQueryParams: PropTypes.func.isRequired,
|
|
29
|
+
};
|
|
30
|
+
export default AssignmentFilter;
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/AssignmentFilter/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,yCAAyC,EACzC,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,MAAM,gBAAgB,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;IACjD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,uBAAuB,GAAG,6BAA6B,EAAE,CAAC;IAChE,MAAM,uBAAuB,GAAG,0BAA0B,EAAE,IAAI,EAAE,CAAC;IACnE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAG,yCAAyC,EAAE,CAAC;IAErE,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;QACzD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,IAAI,CACvD,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,UAAU,CACpC,CAAC;QACF,MAAM,EAAE,EAAE,EAAE,GAAG,oBAAoB,IAAI,EAAE,CAAC;QAC1C,aAAa,CAAC,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,EAAE,CAAC,CAAC;QACxB,iBAAiB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,gBAAgB,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAChF,kBAAoB,KAAK,EAAE,KAAK,aAC7B,KAAK,QAAI,eAAe,KADd,KAAK,CAET,CACV,CAAC,CAAC;IACH,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,WAAW,IACV,EAAE,EAAC,YAAY,EACf,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAC9C,OAAO,EAAE;gBACP,iBAAgB,KAAK,EAAC,EAAE,qBAAZ,GAAG,CAAsB;gBACrC,GAAG,aAAa;aACjB,GACD,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,GAAG;IAC3B,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CAC7C,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useFilters } from '@src/data/filtersContext';\nimport {\n useFetchGradesIfAssignmentGradeFiltersSet,\n useSelectableAssignmentLabels,\n useSelectedAssignmentLabel,\n} from '@src/components/GradesView/data/hooks';\n\nimport messages from '../messages';\nimport SelectGroup from '../SelectGroup';\n\nconst AssignmentFilter = ({ updateQueryParams }) => {\n const { formatMessage } = useIntl();\n const assignmentFilterOptions = useSelectableAssignmentLabels();\n const selectedAssignmentLabel = useSelectedAssignmentLabel() || '';\n const { setAssignment } = useFilters();\n const conditionalFetch = useFetchGradesIfAssignmentGradeFiltersSet();\n\n const handleChange = ({ target: { value: assignment } }) => {\n const selectedFilterOption = assignmentFilterOptions.find(\n ({ label }) => label === assignment,\n );\n const { id } = selectedFilterOption || {};\n setAssignment(id ?? '');\n updateQueryParams({ assignment: id });\n conditionalFetch();\n };\n\n const filterOptions = assignmentFilterOptions.map(({ label, subsectionLabel }) => (\n <option key={label} value={label}>\n {label}: {subsectionLabel}\n </option>\n ));\n return (\n <div className=\"student-filters\">\n <SelectGroup\n id=\"assignment\"\n label={formatMessage(messages.assignment)}\n value={selectedAssignmentLabel}\n onChange={handleChange}\n disabled={assignmentFilterOptions.length === 0}\n options={[\n <option key=\"0\" value=\"\">All</option>,\n ...filterOptions,\n ]}\n />\n </div>\n );\n};\n\nAssignmentFilter.propTypes = {\n updateQueryParams: PropTypes.func.isRequired,\n};\n\nexport default AssignmentFilter;\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export default useAssignmentGradeFilterData;
|
|
2
|
+
declare function useAssignmentGradeFilterData({ updateQueryParams }: {
|
|
3
|
+
updateQueryParams: any;
|
|
4
|
+
}): {
|
|
5
|
+
assignmentGradeMin: string;
|
|
6
|
+
assignmentGradeMax: string;
|
|
7
|
+
selectedAssignment: string | undefined;
|
|
8
|
+
handleSetMax: ({ target: { value } }: {
|
|
9
|
+
target: {
|
|
10
|
+
value: any;
|
|
11
|
+
};
|
|
12
|
+
}) => void;
|
|
13
|
+
handleSetMin: ({ target: { value } }: {
|
|
14
|
+
target: {
|
|
15
|
+
value: any;
|
|
16
|
+
};
|
|
17
|
+
}) => void;
|
|
18
|
+
handleSubmit: () => void;
|
|
19
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useFilters } from '../../../data/filtersContext';
|
|
2
|
+
import { useRefetchGrades, useSelectedAssignmentLabel } from '../../GradesView/data/hooks';
|
|
3
|
+
const useAssignmentGradeFilterData = ({ updateQueryParams }) => {
|
|
4
|
+
const { assignmentGradeMin, assignmentGradeMax, setAssignmentGradeMin, setAssignmentGradeMax, applyAssignmentGradeLimits, } = useFilters();
|
|
5
|
+
const selectedAssignment = useSelectedAssignmentLabel();
|
|
6
|
+
const fetchGrades = useRefetchGrades();
|
|
7
|
+
const handleSubmit = () => {
|
|
8
|
+
const localAssignmentLimits = { assignmentGradeMin, assignmentGradeMax };
|
|
9
|
+
// Commit the applied grade-limit values in the FiltersProvider (read by the
|
|
10
|
+
// filter badges + export URLs).
|
|
11
|
+
applyAssignmentGradeLimits(localAssignmentLimits);
|
|
12
|
+
fetchGrades();
|
|
13
|
+
updateQueryParams(localAssignmentLimits);
|
|
14
|
+
};
|
|
15
|
+
const handleSetMax = ({ target: { value } }) => {
|
|
16
|
+
setAssignmentGradeMax(value);
|
|
17
|
+
};
|
|
18
|
+
const handleSetMin = ({ target: { value } }) => {
|
|
19
|
+
setAssignmentGradeMin(value);
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
assignmentGradeMin,
|
|
23
|
+
assignmentGradeMax,
|
|
24
|
+
selectedAssignment,
|
|
25
|
+
handleSetMax,
|
|
26
|
+
handleSetMin,
|
|
27
|
+
handleSubmit,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export default useAssignmentGradeFilterData;
|
|
31
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/AssignmentGradeFilter/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAErG,MAAM,4BAA4B,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;IAC7D,MAAM,EACJ,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,kBAAkB,GAAG,0BAA0B,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,qBAAqB,GAAG,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;QACzE,4EAA4E;QAC5E,gCAAgC;QAChC,0BAA0B,CAAC,qBAAqB,CAAC,CAAC;QAClD,WAAW,EAAE,CAAC;QACd,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7C,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7C,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO;QACL,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,YAAY;QACZ,YAAY;QACZ,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,4BAA4B,CAAC","sourcesContent":["import { useFilters } from '@src/data/filtersContext';\nimport { useRefetchGrades, useSelectedAssignmentLabel } from '@src/components/GradesView/data/hooks';\n\nconst useAssignmentGradeFilterData = ({ updateQueryParams }) => {\n const {\n assignmentGradeMin,\n assignmentGradeMax,\n setAssignmentGradeMin,\n setAssignmentGradeMax,\n applyAssignmentGradeLimits,\n } = useFilters();\n const selectedAssignment = useSelectedAssignmentLabel();\n const fetchGrades = useRefetchGrades();\n\n const handleSubmit = () => {\n const localAssignmentLimits = { assignmentGradeMin, assignmentGradeMax };\n // Commit the applied grade-limit values in the FiltersProvider (read by the\n // filter badges + export URLs).\n applyAssignmentGradeLimits(localAssignmentLimits);\n fetchGrades();\n updateQueryParams(localAssignmentLimits);\n };\n\n const handleSetMax = ({ target: { value } }) => {\n setAssignmentGradeMax(value);\n };\n\n const handleSetMin = ({ target: { value } }) => {\n setAssignmentGradeMin(value);\n };\n\n return {\n assignmentGradeMin,\n assignmentGradeMax,\n selectedAssignment,\n handleSetMax,\n handleSetMin,\n handleSubmit,\n };\n};\n\nexport default useAssignmentGradeFilterData;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function AssignmentGradeFilter({ updateQueryParams }: {
|
|
2
|
+
updateQueryParams: any;
|
|
3
|
+
}): import("react").JSX.Element;
|
|
4
|
+
export namespace AssignmentGradeFilter {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let updateQueryParams: PropTypes.Validator<(...args: any[]) => any>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default AssignmentGradeFilter;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { Button } from '@openedx/paragon';
|
|
5
|
+
import useAssignmentGradeFilterData from './hooks';
|
|
6
|
+
import messages from '../messages';
|
|
7
|
+
import PercentGroup from '../PercentGroup';
|
|
8
|
+
export const AssignmentGradeFilter = ({ updateQueryParams }) => {
|
|
9
|
+
const { assignmentGradeMin, assignmentGradeMax, selectedAssignment, handleSetMax, handleSetMin, handleSubmit, } = useAssignmentGradeFilterData({ updateQueryParams });
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
return (_jsxs("div", { className: "grade-filter-inputs", children: [_jsx(PercentGroup, { id: "assignmentGradeMin", label: formatMessage(messages.minGrade), value: assignmentGradeMin, disabled: !selectedAssignment, onChange: handleSetMin }), _jsx(PercentGroup, { id: "assignmentGradeMax", label: formatMessage(messages.maxGrade), value: assignmentGradeMax, disabled: !selectedAssignment, onChange: handleSetMax }), _jsx("div", { className: "grade-filter-action", children: _jsx(Button, { type: "submit", variant: "outline-secondary", name: "assignmentGradeMinMax", disabled: !selectedAssignment, onClick: handleSubmit, children: formatMessage(messages.apply) }) })] }));
|
|
12
|
+
};
|
|
13
|
+
AssignmentGradeFilter.propTypes = {
|
|
14
|
+
updateQueryParams: PropTypes.func.isRequired,
|
|
15
|
+
};
|
|
16
|
+
export default AssignmentGradeFilter;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/AssignmentGradeFilter/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,4BAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;IAC7D,MAAM,EACJ,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,GAAG,4BAA4B,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,YAAY,IACX,EAAE,EAAC,oBAAoB,EACvB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvC,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,QAAQ,EAAE,YAAY,GACtB,EACF,KAAC,YAAY,IACX,EAAE,EAAC,oBAAoB,EACvB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvC,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,QAAQ,EAAE,YAAY,GACtB,EACF,cAAK,SAAS,EAAC,qBAAqB,YAClC,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,mBAAmB,EAC3B,IAAI,EAAC,uBAAuB,EAC5B,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,OAAO,EAAE,YAAY,YAEpB,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GACvB,GACL,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,qBAAqB,CAAC,SAAS,GAAG;IAChC,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CAC7C,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport { Button } from '@openedx/paragon';\n\nimport useAssignmentGradeFilterData from './hooks';\nimport messages from '../messages';\nimport PercentGroup from '../PercentGroup';\n\nexport const AssignmentGradeFilter = ({ updateQueryParams }) => {\n const {\n assignmentGradeMin,\n assignmentGradeMax,\n selectedAssignment,\n handleSetMax,\n handleSetMin,\n handleSubmit,\n } = useAssignmentGradeFilterData({ updateQueryParams });\n const { formatMessage } = useIntl();\n return (\n <div className=\"grade-filter-inputs\">\n <PercentGroup\n id=\"assignmentGradeMin\"\n label={formatMessage(messages.minGrade)}\n value={assignmentGradeMin}\n disabled={!selectedAssignment}\n onChange={handleSetMin}\n />\n <PercentGroup\n id=\"assignmentGradeMax\"\n label={formatMessage(messages.maxGrade)}\n value={assignmentGradeMax}\n disabled={!selectedAssignment}\n onChange={handleSetMax}\n />\n <div className=\"grade-filter-action\">\n <Button\n type=\"submit\"\n variant=\"outline-secondary\"\n name=\"assignmentGradeMinMax\"\n disabled={!selectedAssignment}\n onClick={handleSubmit}\n >\n {formatMessage(messages.apply)}\n </Button>\n </div>\n </div>\n );\n};\n\nAssignmentGradeFilter.propTypes = {\n updateQueryParams: PropTypes.func.isRequired,\n};\n\nexport default AssignmentGradeFilter;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function AssignmentTypeFilter({ updateQueryParams }: {
|
|
2
|
+
updateQueryParams: any;
|
|
3
|
+
}): import("react").JSX.Element;
|
|
4
|
+
export namespace AssignmentTypeFilter {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let updateQueryParams: PropTypes.Validator<(...args: any[]) => any>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default AssignmentTypeFilter;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { useFilters } from '../../../data/filtersContext';
|
|
5
|
+
import { useAssignmentTypes, useCourseIdWithGate } from '../../../data/apiHook';
|
|
6
|
+
import { useSelectableAssignmentLabels, useSelectedAssignmentData, } from '../../GradesView/data/hooks';
|
|
7
|
+
import SelectGroup from '../SelectGroup';
|
|
8
|
+
import messages from '../messages';
|
|
9
|
+
export const AssignmentTypeFilter = ({ updateQueryParams }) => {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const { courseId, enabled } = useCourseIdWithGate();
|
|
12
|
+
const assignmentTypes = (_b = (_a = useAssignmentTypes(courseId, { enabled }).data) === null || _a === void 0 ? void 0 : _a.assignmentTypes) !== null && _b !== void 0 ? _b : [];
|
|
13
|
+
const assignmentFilterOptions = useSelectableAssignmentLabels();
|
|
14
|
+
const selectedAssignment = useSelectedAssignmentData();
|
|
15
|
+
const { assignmentType: selectedAssignmentType, setAssignmentType, setAssignment, } = useFilters();
|
|
16
|
+
const { formatMessage } = useIntl();
|
|
17
|
+
const handleChange = (event) => {
|
|
18
|
+
const assignmentType = event.target.value;
|
|
19
|
+
setAssignmentType(assignmentType);
|
|
20
|
+
const queryParams = { assignmentType };
|
|
21
|
+
// A selected assignment of a different type no longer matches the filter:
|
|
22
|
+
// clear it (and its query param), as the legacy filters reducer did.
|
|
23
|
+
if (assignmentType !== '' && selectedAssignment && selectedAssignment.type !== assignmentType) {
|
|
24
|
+
setAssignment('');
|
|
25
|
+
queryParams.assignment = false;
|
|
26
|
+
}
|
|
27
|
+
updateQueryParams(queryParams);
|
|
28
|
+
};
|
|
29
|
+
return (_jsx("div", { className: "student-filters", children: _jsx(SelectGroup, { id: "assignment-types", label: formatMessage(messages.assignmentTypes), value: selectedAssignmentType, onChange: handleChange, disabled: assignmentFilterOptions.length === 0, options: [
|
|
30
|
+
_jsx("option", { value: "", children: "All" }, "0"),
|
|
31
|
+
...assignmentTypes.map(entry => (_jsx("option", { value: entry, children: entry }, entry))),
|
|
32
|
+
] }) }));
|
|
33
|
+
};
|
|
34
|
+
AssignmentTypeFilter.propTypes = {
|
|
35
|
+
updateQueryParams: PropTypes.func.isRequired,
|
|
36
|
+
};
|
|
37
|
+
export default AssignmentTypeFilter;
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/AssignmentTypeFilter/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;;IAC5D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,MAAA,MAAA,kBAAkB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,0CAAE,eAAe,mCAAI,EAAE,CAAC;IAC9F,MAAM,uBAAuB,GAAG,6BAA6B,EAAE,CAAC;IAChE,MAAM,kBAAkB,GAAG,yBAAyB,EAAE,CAAC;IACvD,MAAM,EACJ,cAAc,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,aAAa,GACzE,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,EAAE,cAAc,EAAE,CAAC;QACvC,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,cAAc,KAAK,EAAE,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC9F,aAAa,CAAC,EAAE,CAAC,CAAC;YAClB,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;QACjC,CAAC;QACD,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,WAAW,IACV,EAAE,EAAC,kBAAkB,EACrB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC9C,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAC9C,OAAO,EAAE;gBACP,iBAAgB,KAAK,EAAC,EAAE,qBAAZ,GAAG,CAAsB;gBACrC,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAC9B,iBAAoB,KAAK,EAAE,KAAK,YAAG,KAAK,IAA3B,KAAK,CAAgC,CACnD,CAAC;aACH,GACD,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,oBAAoB,CAAC,SAAS,GAAG;IAC/B,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CAC7C,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useFilters } from '@src/data/filtersContext';\nimport { useAssignmentTypes, useCourseIdWithGate } from '@src/data/apiHook';\nimport {\n useSelectableAssignmentLabels,\n useSelectedAssignmentData,\n} from '@src/components/GradesView/data/hooks';\n\nimport SelectGroup from '../SelectGroup';\nimport messages from '../messages';\n\nexport const AssignmentTypeFilter = ({ updateQueryParams }) => {\n const { courseId, enabled } = useCourseIdWithGate();\n const assignmentTypes = useAssignmentTypes(courseId, { enabled }).data?.assignmentTypes ?? [];\n const assignmentFilterOptions = useSelectableAssignmentLabels();\n const selectedAssignment = useSelectedAssignmentData();\n const {\n assignmentType: selectedAssignmentType, setAssignmentType, setAssignment,\n } = useFilters();\n const { formatMessage } = useIntl();\n\n const handleChange = (event) => {\n const assignmentType = event.target.value;\n setAssignmentType(assignmentType);\n const queryParams = { assignmentType };\n // A selected assignment of a different type no longer matches the filter:\n // clear it (and its query param), as the legacy filters reducer did.\n if (assignmentType !== '' && selectedAssignment && selectedAssignment.type !== assignmentType) {\n setAssignment('');\n queryParams.assignment = false;\n }\n updateQueryParams(queryParams);\n };\n\n return (\n <div className=\"student-filters\">\n <SelectGroup\n id=\"assignment-types\"\n label={formatMessage(messages.assignmentTypes)}\n value={selectedAssignmentType}\n onChange={handleChange}\n disabled={assignmentFilterOptions.length === 0}\n options={[\n <option key=\"0\" value=\"\">All</option>,\n ...assignmentTypes.map(entry => (\n <option key={entry} value={entry}>{entry}</option>\n )),\n ]}\n />\n </div>\n );\n};\n\nAssignmentTypeFilter.propTypes = {\n updateQueryParams: PropTypes.func.isRequired,\n};\n\nexport default AssignmentTypeFilter;\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function useCourseGradeFilterData({ updateQueryParams, }: {
|
|
2
|
+
updateQueryParams: any;
|
|
3
|
+
}): {
|
|
4
|
+
max: {
|
|
5
|
+
value: string;
|
|
6
|
+
onChange: (e: any) => void;
|
|
7
|
+
};
|
|
8
|
+
min: {
|
|
9
|
+
value: string;
|
|
10
|
+
onChange: (e: any) => void;
|
|
11
|
+
};
|
|
12
|
+
handleApplyClick: () => void;
|
|
13
|
+
isDisabled: boolean;
|
|
14
|
+
};
|
|
15
|
+
export default useCourseGradeFilterData;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useFilters } from '../../../data/filtersContext';
|
|
2
|
+
import { trackFilterApplied } from '../../../data/services/segment/events';
|
|
3
|
+
import { useRefetchGrades } from '../../GradesView/data/hooks';
|
|
4
|
+
import { useAreCourseGradeFiltersValid } from '../data/hooks';
|
|
5
|
+
export const useCourseGradeFilterData = ({ updateQueryParams, }) => {
|
|
6
|
+
const isDisabled = !useAreCourseGradeFiltersValid();
|
|
7
|
+
const { courseGradeMin, courseGradeMax, setCourseGradeMin, setCourseGradeMax, applyCourseGradeLimits, } = useFilters();
|
|
8
|
+
const fetchGrades = useRefetchGrades();
|
|
9
|
+
const handleApplyClick = () => {
|
|
10
|
+
const localCourseLimits = { courseGradeMin, courseGradeMax };
|
|
11
|
+
applyCourseGradeLimits(localCourseLimits);
|
|
12
|
+
trackFilterApplied();
|
|
13
|
+
fetchGrades();
|
|
14
|
+
updateQueryParams(localCourseLimits);
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
max: {
|
|
18
|
+
value: courseGradeMax,
|
|
19
|
+
onChange: (e) => {
|
|
20
|
+
setCourseGradeMax(e.target.value);
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
min: {
|
|
24
|
+
value: courseGradeMin,
|
|
25
|
+
onChange: (e) => {
|
|
26
|
+
setCourseGradeMin(e.target.value);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
handleApplyClick,
|
|
30
|
+
isDisabled,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export default useCourseGradeFilterData;
|
|
34
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/CourseGradeFilter/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,iBAAiB,GAClB,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,CAAC,6BAA6B,EAAE,CAAC;IACpD,MAAM,EACJ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,iBAAiB,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;QAC7D,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC1C,kBAAkB,EAAE,CAAC;QACrB,WAAW,EAAE,CAAC;QACd,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE;YACH,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;SACF;QACD,GAAG,EAAE;YACH,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;SACF;QACD,gBAAgB;QAChB,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC","sourcesContent":["import { useFilters } from '@src/data/filtersContext';\nimport { trackFilterApplied } from '@src/data/services/segment/events';\nimport { useRefetchGrades } from '@src/components/GradesView/data/hooks';\n\nimport { useAreCourseGradeFiltersValid } from '../data/hooks';\n\nexport const useCourseGradeFilterData = ({\n updateQueryParams,\n}) => {\n const isDisabled = !useAreCourseGradeFiltersValid();\n const {\n courseGradeMin,\n courseGradeMax,\n setCourseGradeMin,\n setCourseGradeMax,\n applyCourseGradeLimits,\n } = useFilters();\n const fetchGrades = useRefetchGrades();\n\n const handleApplyClick = () => {\n const localCourseLimits = { courseGradeMin, courseGradeMax };\n applyCourseGradeLimits(localCourseLimits);\n trackFilterApplied();\n fetchGrades();\n updateQueryParams(localCourseLimits);\n };\n\n return {\n max: {\n value: courseGradeMax,\n onChange: (e) => {\n setCourseGradeMax(e.target.value);\n },\n },\n min: {\n value: courseGradeMin,\n onChange: (e) => {\n setCourseGradeMin(e.target.value);\n },\n },\n handleApplyClick,\n isDisabled,\n };\n};\n\nexport default useCourseGradeFilterData;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function CourseGradeFilter({ updateQueryParams }: {
|
|
2
|
+
updateQueryParams: any;
|
|
3
|
+
}): import("react").JSX.Element;
|
|
4
|
+
export namespace CourseGradeFilter {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let updateQueryParams: PropTypes.Validator<(...args: any[]) => any>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default CourseGradeFilter;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Button } from '@openedx/paragon';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import messages from '../messages';
|
|
6
|
+
import PercentGroup from '../PercentGroup';
|
|
7
|
+
import useCourseGradeFilterData from './hooks';
|
|
8
|
+
export const CourseGradeFilter = ({ updateQueryParams }) => {
|
|
9
|
+
const { max, min, isDisabled, handleApplyClick, } = useCourseGradeFilterData({ updateQueryParams });
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grade-filter-inputs", children: [_jsx(PercentGroup, { id: "minimum-grade", label: formatMessage(messages.minGrade), value: min.value, onChange: min.onChange }), _jsx(PercentGroup, { id: "maximum-grade", label: formatMessage(messages.maxGrade), value: max.value, onChange: max.onChange })] }), _jsx("div", { className: "grade-filter-action", children: _jsx(Button, { variant: "outline-secondary", onClick: handleApplyClick, disabled: isDisabled, children: formatMessage(messages.apply) }) })] }));
|
|
12
|
+
};
|
|
13
|
+
CourseGradeFilter.propTypes = {
|
|
14
|
+
updateQueryParams: PropTypes.func.isRequired,
|
|
15
|
+
};
|
|
16
|
+
export default CourseGradeFilter;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/CourseGradeFilter/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,wBAAwB,MAAM,SAAS,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;IACzD,MAAM,EACJ,GAAG,EACH,GAAG,EACH,UAAU,EACV,gBAAgB,GACjB,GAAG,wBAAwB,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,CACL,8BACE,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,YAAY,IACX,EAAE,EAAC,eAAe,EAClB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvC,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,GACtB,EACF,KAAC,YAAY,IACX,EAAE,EAAC,eAAe,EAClB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvC,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,GACtB,IACE,EACN,cAAK,SAAS,EAAC,qBAAqB,YAClC,KAAC,MAAM,IACL,OAAO,EAAC,mBAAmB,EAC3B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,UAAU,YAEnB,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GACvB,GACL,IACL,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CAC7C,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Button } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport messages from '../messages';\nimport PercentGroup from '../PercentGroup';\nimport useCourseGradeFilterData from './hooks';\n\nexport const CourseGradeFilter = ({ updateQueryParams }) => {\n const {\n max,\n min,\n isDisabled,\n handleApplyClick,\n } = useCourseGradeFilterData({ updateQueryParams });\n const { formatMessage } = useIntl();\n\n return (\n <>\n <div className=\"grade-filter-inputs\">\n <PercentGroup\n id=\"minimum-grade\"\n label={formatMessage(messages.minGrade)}\n value={min.value}\n onChange={min.onChange}\n />\n <PercentGroup\n id=\"maximum-grade\"\n label={formatMessage(messages.maxGrade)}\n value={max.value}\n onChange={max.onChange}\n />\n </div>\n <div className=\"grade-filter-action\">\n <Button\n variant=\"outline-secondary\"\n onClick={handleApplyClick}\n disabled={isDisabled}\n >\n {formatMessage(messages.apply)}\n </Button>\n </div>\n </>\n );\n};\n\nCourseGradeFilter.propTypes = {\n updateQueryParams: PropTypes.func.isRequired,\n};\n\nexport default CourseGradeFilter;\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default PercentGroup;
|
|
2
|
+
declare function PercentGroup({ id, label, value, disabled, onChange, }: {
|
|
3
|
+
id: any;
|
|
4
|
+
label: any;
|
|
5
|
+
value: any;
|
|
6
|
+
disabled: any;
|
|
7
|
+
onChange: any;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
declare namespace PercentGroup {
|
|
10
|
+
namespace defaultProps {
|
|
11
|
+
let disabled: boolean;
|
|
12
|
+
}
|
|
13
|
+
namespace propTypes {
|
|
14
|
+
export let id: PropTypes.Validator<string>;
|
|
15
|
+
export let label: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
|
|
16
|
+
export let value: PropTypes.Validator<string>;
|
|
17
|
+
export let onChange: PropTypes.Validator<(...args: any[]) => any>;
|
|
18
|
+
let disabled_1: PropTypes.Requireable<boolean>;
|
|
19
|
+
export { disabled_1 as disabled };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Form } from '@openedx/paragon';
|
|
4
|
+
const PercentGroup = ({ id, label, value, disabled, onChange, }) => (_jsxs("div", { className: "percent-group", children: [_jsxs(Form.Group, { controlId: id, children: [_jsx(Form.Label, { children: label }), _jsx(Form.Control, { type: "number", min: 0, max: 100, step: 1, value, disabled, onChange })] }), _jsx("span", { className: "input-percent-label", children: "%" })] }));
|
|
5
|
+
PercentGroup.defaultProps = {
|
|
6
|
+
disabled: false,
|
|
7
|
+
};
|
|
8
|
+
PercentGroup.propTypes = {
|
|
9
|
+
id: PropTypes.string.isRequired,
|
|
10
|
+
label: PropTypes.node.isRequired,
|
|
11
|
+
value: PropTypes.string.isRequired,
|
|
12
|
+
onChange: PropTypes.func.isRequired,
|
|
13
|
+
disabled: PropTypes.bool,
|
|
14
|
+
};
|
|
15
|
+
export default PercentGroup;
|
|
16
|
+
//# sourceMappingURL=PercentGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PercentGroup.js","sourceRoot":"","sources":["../../../src/components/GradebookFilters/PercentGroup.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,YAAY,GAAG,CAAC,EACpB,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,eAAK,SAAS,EAAC,eAAe,aAC5B,MAAC,IAAI,CAAC,KAAK,IAAC,SAAS,EAAE,EAAE,aACvB,KAAC,IAAI,CAAC,KAAK,cAAE,KAAK,GAAc,EAChC,KAAC,IAAI,CAAC,OAAO,IACX,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,CAAC,EACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAC/B,IACS,EACb,eAAM,SAAS,EAAC,qBAAqB,kBAAS,IAC1C,CACP,CAAC;AACF,YAAY,CAAC,YAAY,GAAG;IAC1B,QAAQ,EAAE,KAAK;CAChB,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAC/B,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IAChC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAClC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACnC,QAAQ,EAAE,SAAS,CAAC,IAAI;CACzB,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Form } from '@openedx/paragon';\n\nconst PercentGroup = ({\n id,\n label,\n value,\n disabled,\n onChange,\n}) => (\n <div className=\"percent-group\">\n <Form.Group controlId={id}>\n <Form.Label>{label}</Form.Label>\n <Form.Control\n type=\"number\"\n min={0}\n max={100}\n step={1}\n {...{ value, disabled, onChange }}\n />\n </Form.Group>\n <span className=\"input-percent-label\">%</span>\n </div>\n);\nPercentGroup.defaultProps = {\n disabled: false,\n};\nPercentGroup.propTypes = {\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n};\n\nexport default PercentGroup;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default SelectGroup;
|
|
2
|
+
declare function SelectGroup({ id, label, value, onChange, disabled, options, }: {
|
|
3
|
+
id: any;
|
|
4
|
+
label: any;
|
|
5
|
+
value: any;
|
|
6
|
+
onChange: any;
|
|
7
|
+
disabled: any;
|
|
8
|
+
options: any;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
declare namespace SelectGroup {
|
|
11
|
+
namespace propTypes {
|
|
12
|
+
let id: PropTypes.Validator<string>;
|
|
13
|
+
let label: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
|
|
14
|
+
let value: PropTypes.Validator<string>;
|
|
15
|
+
let onChange: PropTypes.Validator<(...args: any[]) => any>;
|
|
16
|
+
let disabled: PropTypes.Requireable<boolean>;
|
|
17
|
+
let options: PropTypes.Validator<PropTypes.ReactNodeLike[]>;
|
|
18
|
+
}
|
|
19
|
+
namespace defaultProps {
|
|
20
|
+
let disabled_1: boolean;
|
|
21
|
+
export { disabled_1 as disabled };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Form } from '@openedx/paragon';
|
|
4
|
+
const SelectGroup = ({ id, label, value, onChange, disabled, options, }) => (_jsx("div", { className: "student-filters", children: _jsxs(Form.Group, { controlId: id, children: [_jsx(Form.Label, { children: label }), _jsx(Form.Control, { as: "select", value, onChange, disabled, children: options })] }) }));
|
|
5
|
+
SelectGroup.propTypes = {
|
|
6
|
+
id: PropTypes.string.isRequired,
|
|
7
|
+
label: PropTypes.node.isRequired,
|
|
8
|
+
value: PropTypes.string.isRequired,
|
|
9
|
+
onChange: PropTypes.func.isRequired,
|
|
10
|
+
disabled: PropTypes.bool,
|
|
11
|
+
options: PropTypes.arrayOf(PropTypes.node).isRequired,
|
|
12
|
+
};
|
|
13
|
+
SelectGroup.defaultProps = {
|
|
14
|
+
disabled: false,
|
|
15
|
+
};
|
|
16
|
+
export default SelectGroup;
|
|
17
|
+
//# sourceMappingURL=SelectGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectGroup.js","sourceRoot":"","sources":["../../../src/components/GradebookFilters/SelectGroup.jsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,WAAW,GAAG,CAAC,EACnB,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,EAAE,CAAC,CACJ,cAAK,SAAS,EAAC,iBAAiB,YAC9B,MAAC,IAAI,CAAC,KAAK,IAAC,SAAS,EAAE,EAAE,aACvB,KAAC,IAAI,CAAC,KAAK,cAAE,KAAK,GAAc,EAChC,KAAC,IAAI,CAAC,OAAO,IAAC,EAAE,EAAC,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,YACtD,OAAO,GACK,IACJ,GACT,CACP,CAAC;AACF,WAAW,CAAC,SAAS,GAAG;IACtB,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAC/B,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IAChC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAClC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACnC,QAAQ,EAAE,SAAS,CAAC,IAAI;IACxB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU;CACtD,CAAC;AACF,WAAW,CAAC,YAAY,GAAG;IACzB,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["\nimport PropTypes from 'prop-types';\n\nimport { Form } from '@openedx/paragon';\n\nconst SelectGroup = ({\n id,\n label,\n value,\n onChange,\n disabled,\n options,\n}) => (\n <div className=\"student-filters\">\n <Form.Group controlId={id}>\n <Form.Label>{label}</Form.Label>\n <Form.Control as=\"select\" {...{ value, onChange, disabled }}>\n {options}\n </Form.Control>\n </Form.Group>\n </div>\n);\nSelectGroup.propTypes = {\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n options: PropTypes.arrayOf(PropTypes.node).isRequired,\n};\nSelectGroup.defaultProps = {\n disabled: false,\n};\n\nexport default SelectGroup;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function useStudentGroupsFilterData({ updateQueryParams }: {
|
|
2
|
+
updateQueryParams: any;
|
|
3
|
+
}): {
|
|
4
|
+
cohorts: {
|
|
5
|
+
value: any;
|
|
6
|
+
isDisabled: boolean;
|
|
7
|
+
handleChange: (event: any) => void;
|
|
8
|
+
entries: any;
|
|
9
|
+
};
|
|
10
|
+
tracks: {
|
|
11
|
+
value: any;
|
|
12
|
+
handleChange: (event: any) => void;
|
|
13
|
+
entries: any;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export default useStudentGroupsFilterData;
|