Skip to content

Commit 356dde9

Browse files
committed
Merge branch 'master' into kiram15/ENT-9925
2 parents 2d42aa9 + 64429eb commit 356dde9

25 files changed

+2405
-3260
lines changed

package-lock.json

Lines changed: 1856 additions & 3176 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,77 +30,77 @@
3030
},
3131
"license": "AGPL-3.0",
3232
"dependencies": {
33-
"@babel/plugin-transform-runtime": "7.12.1",
33+
"@babel/plugin-transform-runtime": "7.25.9",
3434
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
35-
"@edx/frontend-enterprise-catalog-search": "10.3.0",
35+
"@edx/frontend-enterprise-catalog-search": "10.8.0",
3636
"@edx/frontend-enterprise-hotjar": "7.1.0",
3737
"@edx/frontend-enterprise-logistration": "9.1.0",
3838
"@edx/frontend-enterprise-utils": "9.1.0",
39-
"@edx/frontend-platform": "8.0.0",
39+
"@edx/frontend-platform": "8.1.5",
4040
"@edx/openedx-atlas": "^0.6.0",
4141
"@openedx/paragon": "21.13.1",
4242
"@tanstack/react-query": "4.36.1",
4343
"@tanstack/react-query-devtools": "4.36.1",
44-
"algoliasearch": "4.8.3",
45-
"axios-mock-adapter": "1.19.0",
46-
"classnames": "2.2.6",
47-
"color": "3.1.3",
44+
"algoliasearch": "4.24.0",
45+
"axios-mock-adapter": "1.22.0",
46+
"classnames": "2.5.1",
47+
"color": "3.2.1",
4848
"color-contrast-checker": "^2.1.0",
49-
"core-js": "3.7.0",
49+
"core-js": "3.40.0",
5050
"dash-embedded-component": "file:packages/dash-embedded-component-2.0.2.tgz",
5151
"dayjs": "^1.11.9",
5252
"file-saver": "1.3.8",
5353
"font-awesome": "4.7.0",
5454
"history": "4.10.1",
55-
"html-react-parser": "3.0.7",
55+
"html-react-parser": "3.0.16",
5656
"jest-environment-jsdom": "29.7.0",
5757
"lodash": "4.17.21",
5858
"lodash.debounce": "4.0.8",
5959
"plotly.js": "^2.33.0",
60-
"prop-types": "15.7.2",
60+
"prop-types": "15.8.1",
6161
"react": "17.0.2",
6262
"react-dom": "17.0.2",
6363
"react-helmet": "6.1.0",
64-
"react-instantsearch-dom": "6.8.3",
65-
"react-markdown": "6.0.0",
64+
"react-instantsearch-dom": "6.40.4",
65+
"react-markdown": "6.0.3",
6666
"react-plotly.js": "^2.6.0",
6767
"react-redux": "7.2.9",
68-
"react-router": "6.21.1",
69-
"react-router-dom": "6.21.1",
70-
"redux": "4.0.4",
71-
"redux-devtools-extension": "2.13.8",
72-
"redux-form": "8.3.8",
68+
"react-router": "6.29.0",
69+
"react-router-dom": "6.29.0",
70+
"redux": "4.2.1",
71+
"redux-devtools-extension": "2.13.9",
72+
"redux-form": "8.3.10",
7373
"redux-logger": "3.0.6",
74-
"redux-mock-store": "1.5.4",
75-
"redux-thunk": "2.3.0",
76-
"regenerator-runtime": "0.13.7",
77-
"sanitize-html": "2.12.1",
74+
"redux-mock-store": "1.5.5",
75+
"redux-thunk": "2.4.2",
76+
"regenerator-runtime": "0.14.1",
77+
"sanitize-html": "2.14.0",
7878
"timeago.js": "4.0.2",
7979
"universal-cookie": "4.0.4",
8080
"use-context-selector": "^1.4.1",
81-
"uuid": "9.0.0",
82-
"validator": "13.7.0"
81+
"uuid": "9.0.1",
82+
"validator": "13.12.0"
8383
},
8484
"peerDependencies": {
8585
"clean-webpack-plugin": "3.0.0",
86-
"dotenv": "8.2.0",
86+
"dotenv": "8.6.0",
8787
"dotenv-webpack": "3.0.0",
88-
"html-webpack-plugin": "4.5.0",
89-
"mini-css-extract-plugin": "0.11.2",
88+
"html-webpack-plugin": "4.5.2",
89+
"mini-css-extract-plugin": "0.12.0",
9090
"webpack": "^5.0.0",
91-
"webpack-merge": "5.4.0"
91+
"webpack-merge": "5.10.0"
9292
},
9393
"devDependencies": {
94-
"@edx/browserslist-config": "1.0.0",
94+
"@edx/browserslist-config": "1.5.0",
9595
"@faker-js/faker": "^7.6.0",
96-
"@openedx/frontend-build": "14.0.3",
97-
"@testing-library/dom": "9.3.1",
96+
"@openedx/frontend-build": "14.2.2",
97+
"@testing-library/dom": "9.3.4",
9898
"@testing-library/jest-dom": "5.17.0",
9999
"@testing-library/react": "^11.2.7",
100-
"@testing-library/react-hooks": "5.0.3",
100+
"@testing-library/react-hooks": "5.1.3",
101101
"@testing-library/user-event": "12.8.3",
102102
"@wojtekmaj/enzyme-adapter-react-17": "0.8.0",
103-
"css-loader": "5.2.6",
103+
"css-loader": "5.2.7",
104104
"enzyme": "3.11.0",
105105
"husky": "0.14.3",
106106
"identity-obj-proxy": "3.0.0",

renovate.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
"patch": {
77
"automerge": true
88
},
9+
"major": {
10+
"dependencyDashboardApproval": true
11+
},
912
"rebaseWhen": "behind-base-branch",
1013
"packageRules": [
1114
{

src/components/Admin/AdminSearchForm.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import { Form } from '@openedx/paragon';
77
import { Info } from '@openedx/paragon/icons';
88

99
import { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';
10+
import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
1011

1112
import SearchBar from '../SearchBar';
1213
import { formatTimestamp, updateUrl } from '../../utils';
1314
import IconWithTooltip from '../IconWithTooltip';
1415
import { withLocation, withNavigate } from '../../hoc';
16+
import EVENT_NAMES from '../../eventTracking';
1517

1618
class AdminSearchForm extends React.Component {
1719
componentDidUpdate(prevProps) {
@@ -69,6 +71,11 @@ class AdminSearchForm extends React.Component {
6971
page: 1,
7072
};
7173
updateUrl(navigate, location.pathname, updateParams);
74+
sendEnterpriseTrackEvent(
75+
this.props.enterpriseId,
76+
EVENT_NAMES.LEARNER_PROGRESS_REPORT.FILTER_BY_GROUP_DROPDOWN,
77+
{ group: event.target.value },
78+
);
7279
}
7380

7481
render() {
@@ -305,6 +312,7 @@ AdminSearchForm.propTypes = {
305312
location: PropTypes.shape({
306313
pathname: PropTypes.string,
307314
}),
315+
enterpriseId: PropTypes.string,
308316
// injected
309317
intl: intlShape.isRequired,
310318
};

src/components/Admin/AdminSearchForm.test.jsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import React from 'react';
22
import { mount } from 'enzyme';
33
import { FormControl } from '@openedx/paragon';
44
import { IntlProvider } from '@edx/frontend-platform/i18n';
5+
import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
56

67
import AdminSearchForm from './AdminSearchForm';
78
import SearchBar from '../SearchBar';
89
import { updateUrl } from '../../utils';
10+
import EVENT_NAMES from '../../eventTracking';
911

1012
jest.mock('react-router-dom', () => ({
1113
...jest.requireActual('react-router-dom'),
@@ -17,10 +19,19 @@ jest.mock('../../utils', () => ({
1719
updateUrl: jest.fn(),
1820
}));
1921

22+
jest.mock('@edx/frontend-enterprise-utils', () => {
23+
const originalModule = jest.requireActual('@edx/frontend-enterprise-utils');
24+
return ({
25+
...originalModule,
26+
sendEnterpriseTrackEvent: jest.fn(),
27+
});
28+
});
29+
2030
const DEFAULT_PROPS = {
2131
searchEnrollmentsList: () => {},
2232
searchParams: {},
2333
tableData: [],
34+
enterpriseId: 'test-id',
2435
};
2536

2637
const AdminSearchFormWrapper = props => (
@@ -100,6 +111,13 @@ describe('<AdminSearchForm />', () => {
100111

101112
selectElement.simulate('change', { target: { value: groupUUID } });
102113
expect(updateUrl).toHaveBeenCalled();
114+
expect(sendEnterpriseTrackEvent).toHaveBeenCalledWith(
115+
'test-id',
116+
EVENT_NAMES.LEARNER_PROGRESS_REPORT.FILTER_BY_GROUP_DROPDOWN,
117+
{
118+
group: groupUUID,
119+
},
120+
);
103121
expect(updateUrl).toHaveBeenCalledWith(
104122
undefined,
105123
'/admin/learners',

src/components/Admin/index.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,7 @@ class Admin extends React.Component {
545545
tableData={this.getTableData() ? this.getTableData().results : []}
546546
budgets={budgets}
547547
groups={groups}
548+
enterpriseId={enterpriseId}
548549
/>
549550
)}
550551
</>

src/components/PeopleManagement/AddMembersModal/AddMembersModal.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
import LmsApiService from '../../../data/services/LmsApiService';
1212
import SystemErrorAlertModal from '../../learner-credit-management/cards/assignment-allocation-status-modals/SystemErrorAlertModal';
1313
import AddMembersModalContent from './AddMembersModalContent';
14-
import { learnerCreditManagementQueryKeys } from '../../learner-credit-management/data';
14+
import { peopleManagementQueryKeys } from '../constants';
1515
import { useAllEnterpriseGroupLearners } from '../data/hooks';
1616

1717
const AddMembersModal = ({
@@ -44,7 +44,7 @@ const AddMembersModal = ({
4444
});
4545
await LmsApiService.inviteEnterpriseLearnersToGroup(groupUuid, requestBody);
4646
queryClient.invalidateQueries({
47-
queryKey: learnerCreditManagementQueryKeys.group(groupUuid),
47+
queryKey: peopleManagementQueryKeys.group(groupUuid),
4848
});
4949
setAddButtonState('complete');
5050
handleCloseAddMembersModal();

src/components/PeopleManagement/CreateGroupModal.jsx

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import { snakeCaseObject } from '@edx/frontend-platform/utils';
88
import {
99
ActionRow, Button, FullscreenModal, StatefulButton, useToggle,
1010
} from '@openedx/paragon';
11+
import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
12+
1113
import LmsApiService from '../../data/services/LmsApiService';
1214
import SystemErrorAlertModal from '../learner-credit-management/cards/assignment-allocation-status-modals/SystemErrorAlertModal';
1315
import CreateGroupModalContent from './CreateGroupModalContent';
14-
import { peopleManagementQueryKeys } from './constants';
16+
import EVENT_NAMES from '../../eventTracking';
17+
import { learnerCreditManagementQueryKeys } from '../learner-credit-management/data';
1518

1619
const CreateGroupModal = ({
1720
isModalOpen,
@@ -24,6 +27,8 @@ const CreateGroupModal = ({
2427
const [groupName, setGroupName] = useState('');
2528
const [canCreateGroup, setCanCreateGroup] = useState(false);
2629
const [canInviteMembers, setCanInviteMembers] = useState(false);
30+
const [isCreateGroupFileUpload, setIsCreateGroupFileUpload] = useState(false);
31+
const [isCreateGroupListSelection, setIsCreateGroupListSelection] = useState(false);
2732
const [isSystemErrorModalOpen, openSystemErrorModal, closeSystemErrorModal] = useToggle(false);
2833
const handleCloseCreateGroupModal = () => {
2934
closeModal();
@@ -38,13 +43,43 @@ const CreateGroupModal = ({
3843
groupName,
3944
};
4045
let groupCreationResponse;
41-
4246
try {
4347
groupCreationResponse = await LmsApiService.createEnterpriseGroup(options);
48+
sendEnterpriseTrackEvent(
49+
enterpriseUUID,
50+
EVENT_NAMES.PEOPLE_MANAGEMENT.CREATE_GROUP_MODAL_BUTTON_SUBMIT,
51+
{ status: 'success' },
52+
);
53+
if (isCreateGroupListSelection && isCreateGroupFileUpload) {
54+
sendEnterpriseTrackEvent(
55+
enterpriseUUID,
56+
EVENT_NAMES.PEOPLE_MANAGEMENT.GROUP_CREATE_WITH_CSV_AND_LIST,
57+
);
58+
} else if (isCreateGroupListSelection) {
59+
sendEnterpriseTrackEvent(
60+
enterpriseUUID,
61+
EVENT_NAMES.PEOPLE_MANAGEMENT.GROUP_CREATE_WITH_LIST_SELECTION,
62+
);
63+
} else if (isCreateGroupFileUpload) {
64+
sendEnterpriseTrackEvent(
65+
enterpriseUUID,
66+
EVENT_NAMES.PEOPLE_MANAGEMENT.GROUP_CREATE_WITH_UPLOAD_CSV,
67+
);
68+
}
69+
setIsCreateGroupListSelection(false);
70+
setIsCreateGroupFileUpload(false);
4471
} catch (err) {
4572
logError(err);
4673
setCreateButtonState('error');
4774
openSystemErrorModal();
75+
sendEnterpriseTrackEvent(
76+
enterpriseUUID,
77+
EVENT_NAMES.PEOPLE_MANAGEMENT.CREATE_GROUP_MODAL_BUTTON_SUBMIT,
78+
{
79+
status: 'error',
80+
message: err,
81+
},
82+
);
4883
}
4984

5085
try {
@@ -53,7 +88,7 @@ const CreateGroupModal = ({
5388
});
5489
await LmsApiService.inviteEnterpriseLearnersToGroup(groupCreationResponse.data.uuid, requestBody);
5590
queryClient.invalidateQueries({
56-
queryKey: peopleManagementQueryKeys.group(enterpriseUUID),
91+
queryKey: learnerCreditManagementQueryKeys.group(enterpriseUUID),
5792
});
5893
setCreateButtonState('complete');
5994
handleCloseCreateGroupModal();
@@ -114,6 +149,8 @@ const CreateGroupModal = ({
114149
onEmailAddressesChange={handleEmailAddressesChange}
115150
isGroupInvite
116151
enterpriseUUID={enterpriseUUID}
152+
setIsCreateGroupFileUpload={setIsCreateGroupFileUpload}
153+
setIsCreateGroupListSelection={setIsCreateGroupListSelection}
117154
/>
118155
</FullscreenModal>
119156
<SystemErrorAlertModal

src/components/PeopleManagement/CreateGroupModalContent.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ import EnterpriseCustomerUserDataTable from './EnterpriseCustomerUserDataTable';
1717
import { useEnterpriseLearners } from '../learner-credit-management/data';
1818

1919
const CreateGroupModalContent = ({
20+
enterpriseUUID,
21+
isGroupInvite,
2022
onEmailAddressesChange,
2123
onSetGroupName,
22-
isGroupInvite,
23-
enterpriseUUID,
24+
setIsCreateGroupFileUpload,
25+
setIsCreateGroupListSelection,
2426
}) => {
2527
const [learnerEmails, setLearnerEmails] = useState([]);
2628
const [emailAddressesInputValue, setEmailAddressesInputValue] = useState('');
@@ -55,7 +57,8 @@ const CreateGroupModalContent = ({
5557
return;
5658
}
5759
setLearnerEmails(prev => [...prev, ...value]);
58-
}, [onEmailAddressesChange]);
60+
setIsCreateGroupListSelection(true);
61+
}, [onEmailAddressesChange, setIsCreateGroupListSelection]);
5962

6063
const handleRemoveMembersBulkAction = useCallback((value) => {
6164
if (!value) {
@@ -138,6 +141,7 @@ const CreateGroupModalContent = ({
138141
<FileUpload
139142
memberInviteMetadata={memberInviteMetadata}
140143
setEmailAddressesInputValue={setEmailAddressesInputValue}
144+
setIsCreateGroupFileUpload={setIsCreateGroupFileUpload}
141145
/>
142146
</Col>
143147
<Col>
@@ -161,6 +165,8 @@ CreateGroupModalContent.propTypes = {
161165
onSetGroupName: PropTypes.func,
162166
isGroupInvite: PropTypes.bool,
163167
enterpriseUUID: PropTypes.string.isRequired,
168+
setIsCreateGroupFileUpload: PropTypes.func,
169+
setIsCreateGroupListSelection: PropTypes.func,
164170
};
165171

166172
export default CreateGroupModalContent;

0 commit comments

Comments
 (0)