From dc27c74af506ec8cf5ec9cc06c087ae2ec8a8060 Mon Sep 17 00:00:00 2001 From: Alexander J Sheehan Date: Mon, 20 May 2024 15:51:43 +0000 Subject: [PATCH] feat: allowing group data download button to apply to selected rows --- .../GroupMembersCsvDownloadTableAction.jsx | 13 ++++++++++++- .../members-tab/LearnerCreditGroupMembersTable.jsx | 1 + src/data/services/EnterpriseAccessApiService.js | 5 ++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/components/learner-credit-management/members-tab/GroupMembersCsvDownloadTableAction.jsx b/src/components/learner-credit-management/members-tab/GroupMembersCsvDownloadTableAction.jsx index 9d4ea6ce1b..4a91419350 100644 --- a/src/components/learner-credit-management/members-tab/GroupMembersCsvDownloadTableAction.jsx +++ b/src/components/learner-credit-management/members-tab/GroupMembersCsvDownloadTableAction.jsx @@ -11,6 +11,10 @@ import { useBudgetId, useSubsidyAccessPolicy } from '../data'; const GroupMembersCsvDownloadTableAction = ({ tableInstance, }) => { + let buttonNumRelevantRows = tableInstance.itemCount; + if (tableInstance?.selectedFlatRows.length > 0) { + buttonNumRelevantRows = tableInstance?.selectedFlatRows.length; + } const [alertModalOpen, setAlertModalOpen] = useState(false); const [alertModalExc, setAlertModalException] = useState(''); const { subsidyAccessPolicyId } = useBudgetId(); @@ -50,9 +54,13 @@ const GroupMembersCsvDownloadTableAction = ({ } }); + const selectedEmails = []; + tableInstance.selectedFlatRows.forEach((row) => selectedEmails.push(row.id)); + EnterpriseAccessApiService.fetchSubsidyHydratedGroupMembersData( subsidyAccessPolicyId, options, + selectedEmails, ).then(response => { // download CSV const blob = new Blob([response.data], { @@ -96,7 +104,7 @@ const GroupMembersCsvDownloadTableAction = ({ className="border rounded-0 border-dark-500" disabled={tableInstance.itemCount === 0} > - Download all ({tableInstance.itemCount}) + Download {tableInstance?.selectedFlatRows.length > 0 ? '' : 'all '}({buttonNumRelevantRows}) ); @@ -104,6 +112,9 @@ const GroupMembersCsvDownloadTableAction = ({ GroupMembersCsvDownloadTableAction.propTypes = { tableInstance: PropTypes.shape({ + selectedFlatRows: PropTypes.arrayOf(PropTypes.shape({ + id: PropTypes.string, + })), itemCount: PropTypes.number, state: PropTypes.shape({ filters: PropTypes.arrayOf(PropTypes.shape({ diff --git a/src/components/learner-credit-management/members-tab/LearnerCreditGroupMembersTable.jsx b/src/components/learner-credit-management/members-tab/LearnerCreditGroupMembersTable.jsx index 79827c58d8..eab091f509 100644 --- a/src/components/learner-credit-management/members-tab/LearnerCreditGroupMembersTable.jsx +++ b/src/components/learner-credit-management/members-tab/LearnerCreditGroupMembersTable.jsx @@ -123,6 +123,7 @@ const LearnerCreditGroupMembersTable = ({ setRefresh={setRefresh} groupUuid={groupUuid} />, + , ]} additionalColumns={[ { diff --git a/src/data/services/EnterpriseAccessApiService.js b/src/data/services/EnterpriseAccessApiService.js index fe58d1078e..ff3c9d5ea5 100644 --- a/src/data/services/EnterpriseAccessApiService.js +++ b/src/data/services/EnterpriseAccessApiService.js @@ -254,8 +254,11 @@ class EnterpriseAccessApiService { return EnterpriseAccessApiService.apiClient().post(url, payload); } - static fetchSubsidyHydratedGroupMembersData(subsidyAccessPolicyUUID, options) { + static fetchSubsidyHydratedGroupMembersData(subsidyAccessPolicyUUID, options, selectedEmails) { const queryParams = new URLSearchParams(options); + if (selectedEmails) { + selectedEmails.forEach((email) => queryParams.append('learners', email)); + } const subsidyHydratedGroupLearnersEndpoint = `${EnterpriseAccessApiService.baseUrl}/subsidy-access-policies/${subsidyAccessPolicyUUID}/group-members?${queryParams.toString()}`; return EnterpriseAccessApiService.apiClient().get(subsidyHydratedGroupLearnersEndpoint); }