richie-education 3.2.1 → 3.2.2-dev27

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.
Files changed (78) hide show
  1. package/js/api/joanie.ts +144 -0
  2. package/js/components/PaymentInterfaces/types.ts +7 -0
  3. package/js/components/PaymentScheduleGrid/index.tsx +4 -2
  4. package/js/components/SaleTunnel/AddressSelector/index.spec.tsx +9 -2
  5. package/js/components/SaleTunnel/GenericSaleTunnel.tsx +33 -0
  6. package/js/components/SaleTunnel/SaleTunnelInformation/SaleTunnelInformationGroup.tsx +253 -0
  7. package/js/components/SaleTunnel/SaleTunnelInformation/SaleTunnelInformationSingular.tsx +314 -0
  8. package/js/components/SaleTunnel/SaleTunnelInformation/StepContent.tsx +528 -0
  9. package/js/components/SaleTunnel/SaleTunnelInformation/index.tsx +47 -271
  10. package/js/components/SaleTunnel/SaleTunnelSuccess/index.tsx +25 -11
  11. package/js/components/SaleTunnel/SubscriptionButton/index.tsx +54 -6
  12. package/js/components/SaleTunnel/_styles.scss +55 -0
  13. package/js/components/SaleTunnel/index.full-process-b2b.spec.tsx +356 -0
  14. package/js/components/SaleTunnel/{index.full-process.spec.tsx → index.full-process-b2c.spec.tsx} +4 -1
  15. package/js/components/SaleTunnel/index.spec.tsx +104 -0
  16. package/js/hooks/useBatchOrder/index.tsx +36 -0
  17. package/js/hooks/useContractArchive/index.ts +2 -0
  18. package/js/hooks/useOfferingOrganizations/index.tsx +38 -0
  19. package/js/hooks/useOrganizationAgreements.tsx/index.tsx +66 -0
  20. package/js/hooks/useOrganizationQuotes/index.tsx +56 -0
  21. package/js/hooks/useTeacherPendingAgreementsCount/index.ts +34 -0
  22. package/js/pages/DashboardBatchOrderLayout/_styles.scss +5 -0
  23. package/js/pages/DashboardBatchOrderLayout/index.spec.tsx +78 -0
  24. package/js/pages/DashboardBatchOrderLayout/index.tsx +45 -0
  25. package/js/pages/DashboardBatchOrders/index.spec.tsx +237 -0
  26. package/js/pages/DashboardBatchOrders/index.tsx +84 -0
  27. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardCourseContractsLayout/index.tsx +0 -1
  28. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.tsx +3 -1
  29. package/js/pages/TeacherDashboardOrganizationAgreements/AgreementActionsBar.tsx +49 -0
  30. package/js/pages/TeacherDashboardOrganizationAgreements/BulkAgreementContractButton.tsx +79 -0
  31. package/js/pages/TeacherDashboardOrganizationAgreements/OrganizationAgreementFrame.tsx +71 -0
  32. package/js/pages/TeacherDashboardOrganizationAgreements/SignOrganizationAgreementButton.tsx +60 -0
  33. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useAgreementsAbilities.tsx +8 -0
  34. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useHasAgreementToDownload.tsx +27 -0
  35. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useTeacherAgreementsToSign.tsx +32 -0
  36. package/js/pages/TeacherDashboardOrganizationAgreements/index.spec.tsx +433 -0
  37. package/js/pages/TeacherDashboardOrganizationAgreements/index.tsx +130 -0
  38. package/js/pages/TeacherDashboardOrganizationAgreementsLayout/index.tsx +25 -0
  39. package/js/pages/TeacherDashboardOrganizationCourseLoader/index.spec.tsx +9 -0
  40. package/js/pages/TeacherDashboardOrganizationQuotes/_styles.scss +40 -0
  41. package/js/pages/TeacherDashboardOrganizationQuotes/index.full-process.spec.tsx +194 -0
  42. package/js/pages/TeacherDashboardOrganizationQuotes/index.spec.tsx +144 -0
  43. package/js/pages/TeacherDashboardOrganizationQuotes/index.tsx +521 -0
  44. package/js/pages/TeacherDashboardOrganizationQuotesLayout/index.tsx +26 -0
  45. package/js/types/Joanie.ts +216 -1
  46. package/js/utils/AbilitiesHelper/agreementAbilities.ts +14 -0
  47. package/js/utils/AbilitiesHelper/index.ts +7 -0
  48. package/js/utils/AbilitiesHelper/types.ts +12 -3
  49. package/js/utils/ObjectHelper/index.ts +20 -0
  50. package/js/utils/OrderHelper/index.ts +10 -0
  51. package/js/utils/test/factories/joanie.ts +156 -1
  52. package/js/widgets/Dashboard/components/DashboardBatchOrderLoader/_styles.scss +14 -0
  53. package/js/widgets/Dashboard/components/DashboardBatchOrderLoader/index.tsx +32 -0
  54. package/js/widgets/Dashboard/components/DashboardCard/index.spec.tsx +18 -0
  55. package/js/widgets/Dashboard/components/DashboardCard/index.stories.tsx +25 -2
  56. package/js/widgets/Dashboard/components/DashboardCard/index.tsx +4 -2
  57. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/BatchOrderPaymentModal/BatchOrderPaymentManager.tsx +88 -0
  58. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/BatchOrderPaymentModal/index.tsx +216 -0
  59. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/DashboardBatchOrderSubItems.tsx +316 -0
  60. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/index.spec.tsx +27 -0
  61. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/index.tsx +175 -0
  62. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.tsx +5 -2
  63. package/js/widgets/Dashboard/components/DashboardItem/Order/OrganizationBlock/index.tsx +4 -1
  64. package/js/widgets/Dashboard/components/DashboardItem/Order/_styles.scss +5 -0
  65. package/js/widgets/Dashboard/components/DashboardItem/_styles.scss +43 -0
  66. package/js/widgets/Dashboard/components/DashboardSidebar/components/AgreementNavLink/index.spec.tsx +214 -0
  67. package/js/widgets/Dashboard/components/DashboardSidebar/components/AgreementNavLink/index.tsx +47 -0
  68. package/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.tsx +1 -0
  69. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx +21 -3
  70. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.tsx +9 -0
  71. package/js/widgets/Dashboard/utils/learnerRoutes.tsx +30 -0
  72. package/js/widgets/Dashboard/utils/learnerRoutesPaths.tsx +12 -0
  73. package/js/widgets/Dashboard/utils/teacherDashboardPaths.tsx +12 -0
  74. package/js/widgets/Dashboard/utils/teacherRoutes.tsx +17 -0
  75. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +8 -2
  76. package/package.json +4 -1
  77. package/scss/colors/_theme.scss +1 -1
  78. package/scss/components/_index.scss +1 -0
@@ -16,6 +16,9 @@ import {
16
16
  LearnerDashboardPaths,
17
17
  } from 'widgets/Dashboard/utils/learnerRoutesPaths';
18
18
  import { CertificateType } from 'types/Joanie';
19
+ import { DashboardBatchOrders } from 'pages/DashboardBatchOrders';
20
+ import { DashboardBatchOrderLayout } from 'pages/DashboardBatchOrderLayout';
21
+ import { DashboardBatchOrderLoader } from '../components/DashboardBatchOrderLoader';
19
22
 
20
23
  export interface DashboardRouteHandle {
21
24
  crumbLabel?: MessageDescriptor;
@@ -53,6 +56,33 @@ export function getLearnerDashboardRoutes() {
53
56
  },
54
57
  ],
55
58
  },
59
+ {
60
+ path: LearnerDashboardPaths.BATCH_ORDERS,
61
+ handle: {
62
+ crumbLabel: LEARNER_DASHBOARD_ROUTE_LABELS[LearnerDashboardPaths.BATCH_ORDERS],
63
+ },
64
+ element: <Outlet />,
65
+ children: [
66
+ {
67
+ index: true,
68
+ element: <DashboardBatchOrders />,
69
+ },
70
+ {
71
+ path: LearnerDashboardPaths.BATCH_ORDER,
72
+ element: <DashboardBatchOrderLayout />,
73
+ handle: {
74
+ renderLayout: true,
75
+ crumbLabel: LEARNER_DASHBOARD_ROUTE_LABELS[LearnerDashboardPaths.BATCH_ORDER],
76
+ },
77
+ children: [
78
+ {
79
+ index: true,
80
+ element: <DashboardBatchOrderLoader />,
81
+ },
82
+ ],
83
+ },
84
+ ],
85
+ },
56
86
  {
57
87
  path: LearnerDashboardPaths.CERTIFICATES,
58
88
  children: [
@@ -16,6 +16,8 @@ export enum LearnerDashboardPaths {
16
16
  PREFERENCES_ADDRESS_EDITION = `${PREFERENCES}/addresses/:addressId`,
17
17
  PREFERENCES_ADDRESS_CREATION = `${PREFERENCES}/addresses/create`,
18
18
  PREFERENCES_CREDIT_CARD_EDITION = `${PREFERENCES}/credit-cards/:creditCardId`,
19
+ BATCH_ORDER = `/batch-orders/:batchOrderId`,
20
+ BATCH_ORDERS = `/batch-orders`,
19
21
  }
20
22
 
21
23
  export const LEARNER_DASHBOARD_ROUTE_LABELS = defineMessages<LearnerDashboardPaths>({
@@ -79,4 +81,14 @@ export const LEARNER_DASHBOARD_ROUTE_LABELS = defineMessages<LearnerDashboardPat
79
81
  description: 'Label of the credit cards edition view.',
80
82
  defaultMessage: 'Edit credit card "{creditCardTitle}"',
81
83
  },
84
+ [LearnerDashboardPaths.BATCH_ORDER]: {
85
+ id: 'components.Dashboard.DashboardRoutes.batchOrder.label',
86
+ description: 'Label of the order view used in navigation components.',
87
+ defaultMessage: '{batchOrderTitle}',
88
+ },
89
+ [LearnerDashboardPaths.BATCH_ORDERS]: {
90
+ id: 'components.Dashboard.DashboardRoutes.batchOrders.label',
91
+ description: 'Label of the order view used in navigation components.',
92
+ defaultMessage: 'My batch orders',
93
+ },
82
94
  });
@@ -9,6 +9,8 @@ export enum TeacherDashboardPaths {
9
9
  ORGANIZATION = `${ROOT}/organizations/:organizationId`,
10
10
  ORGANIZATION_CONTRACTS = `${ORGANIZATION}/contracts`,
11
11
  ORGANIZATION_COURSES = `${ORGANIZATION}/courses`,
12
+ ORGANIZATION_QUOTES = `${ORGANIZATION}/quotes`,
13
+ ORGANIZATION_AGREEMENTS = `${ORGANIZATION}/agreements`,
12
14
  ORGANIZATION_PRODUCT = `${ORGANIZATION_COURSES}/:courseId/products/:offeringId`,
13
15
  ORGANIZATION_COURSE_CONTRACTS = `${ORGANIZATION_COURSES}/:courseId/contracts`,
14
16
  ORGANIZATION_PRODUCT_CONTRACTS = `${ORGANIZATION_COURSES}/:courseId/products/:offeringId/contracts`,
@@ -42,6 +44,16 @@ export const TEACHER_DASHBOARD_ROUTE_LABELS = defineMessages<TeacherDashboardPat
42
44
  description: 'Label of the organization courses view.',
43
45
  defaultMessage: 'Courses',
44
46
  },
47
+ [TeacherDashboardPaths.ORGANIZATION_QUOTES]: {
48
+ id: 'components.TeacherDashboard.TeacherDashboardRoutes.organization.quotes.label',
49
+ description: 'Label of the organization quotes view.',
50
+ defaultMessage: 'Quotes',
51
+ },
52
+ [TeacherDashboardPaths.ORGANIZATION_AGREEMENTS]: {
53
+ id: 'components.TeacherDashboard.TeacherDashboardRoutes.organization.agreements.label',
54
+ description: 'Label of the organization agreements view.',
55
+ defaultMessage: 'Agreements',
56
+ },
45
57
  [TeacherDashboardPaths.ORGANIZATION_CONTRACTS]: {
46
58
  id: 'components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.label',
47
59
  description: 'Label of the organization contracts view.',
@@ -13,6 +13,8 @@ import {
13
13
  TEACHER_DASHBOARD_ROUTE_LABELS,
14
14
  TeacherDashboardPaths,
15
15
  } from 'widgets/Dashboard/utils/teacherDashboardPaths';
16
+ import { TeacherDashboardOrganizationQuotesLayout } from 'pages/TeacherDashboardOrganizationQuotesLayout';
17
+ import { TeacherDashboardOrganizationAgreementsLayout } from 'pages/TeacherDashboardOrganizationAgreementsLayout';
16
18
 
17
19
  export function getTeacherDashboardRoutes() {
18
20
  const routes: RouteObject[] = [
@@ -155,6 +157,21 @@ export function getTeacherDashboardRoutes() {
155
157
  TEACHER_DASHBOARD_ROUTE_LABELS[TeacherDashboardPaths.ORGANIZATION_CONTRACTS],
156
158
  },
157
159
  },
160
+ {
161
+ path: TeacherDashboardPaths.ORGANIZATION_QUOTES,
162
+ element: <TeacherDashboardOrganizationQuotesLayout />,
163
+ handle: {
164
+ crumbLabel: TEACHER_DASHBOARD_ROUTE_LABELS[TeacherDashboardPaths.ORGANIZATION_QUOTES],
165
+ },
166
+ },
167
+ {
168
+ path: TeacherDashboardPaths.ORGANIZATION_AGREEMENTS,
169
+ element: <TeacherDashboardOrganizationAgreementsLayout />,
170
+ handle: {
171
+ crumbLabel:
172
+ TEACHER_DASHBOARD_ROUTE_LABELS[TeacherDashboardPaths.ORGANIZATION_AGREEMENTS],
173
+ },
174
+ },
158
175
  ],
159
176
  },
160
177
  ];
@@ -175,7 +175,10 @@ describe('CourseProductItem', () => {
175
175
  course={PacedCourseFactory({ code: '00000' }).one()}
176
176
  productId={product.id}
177
177
  />,
178
- { queryOptions: { client: createTestQueryClient({ user: null }) } },
178
+ {
179
+ intlOptions: { timeZone: 'UTC' },
180
+ queryOptions: { client: createTestQueryClient({ user: null }) },
181
+ },
179
182
  );
180
183
 
181
184
  await screen.findByRole('heading', { level: 3, name: product.title });
@@ -238,7 +241,10 @@ describe('CourseProductItem', () => {
238
241
  course={PacedCourseFactory({ code: '00000' }).one()}
239
242
  productId={product.id}
240
243
  />,
241
- { queryOptions: { client: createTestQueryClient({ user: null }) } },
244
+ {
245
+ intlOptions: { timeZone: 'UTC' },
246
+ queryOptions: { client: createTestQueryClient({ user: null }) },
247
+ },
242
248
  );
243
249
 
244
250
  await screen.findByRole('heading', { level: 3, name: product.title });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "richie-education",
3
- "version": "3.2.1",
3
+ "version": "3.2.2-dev27",
4
4
  "description": "A CMS to build learning portals for Open Education",
5
5
  "main": "sandbox/manage.py",
6
6
  "scripts": {
@@ -44,11 +44,14 @@
44
44
  "@babel/preset-env": "7.26.9",
45
45
  "@babel/preset-react": "7.26.3",
46
46
  "@babel/preset-typescript": "7.26.0",
47
+ "@emotion/react": "^11.14.0",
48
+ "@emotion/styled": "^11.14.1",
47
49
  "@faker-js/faker": "9.6.0",
48
50
  "@formatjs/cli": "6.6.2",
49
51
  "@formatjs/intl-relativetimeformat": "11.4.11",
50
52
  "@hookform/resolvers": "4.1.3",
51
53
  "@lyracom/embedded-form-glue": "1.4.2",
54
+ "@mui/material": "^7.3.2",
52
55
  "@openfun/cunningham-react": "3.0.0",
53
56
  "@openfun/cunningham-tokens": "2.2.0",
54
57
  "@sentry/browser": "9.8.0",
@@ -249,7 +249,7 @@ $r-theme: (
249
249
  ),
250
250
  category-badges: (
251
251
  primary-item: $indianred3-scheme,
252
- secondary-item: $firebrick6-scheme,
252
+ secondary-item: $light-grey-scheme,
253
253
  tertiary-item: $smoke-scheme,
254
254
  ),
255
255
  category-tags: (
@@ -17,6 +17,7 @@
17
17
  @import '../../js/components/RegisteredAddress/styles';
18
18
  @import '../../js/components/SearchInput/styles';
19
19
  @import '../../js/components/Spinner/styles';
20
+ @import '../../js/pages/TeacherDashboardOrganizationQuotes/styles';
20
21
  @import '../../js/pages/DashboardAddressesManagement/styles';
21
22
  @import '../../js/pages/DashboardCertificates/styles';
22
23
  @import '../../js/pages/DashboardCourses/styles';