@cuemath/leap 2.8.55 → 2.8.56-as1

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 (192) hide show
  1. package/dist/assets/illustrations/illustrations.js +9 -0
  2. package/dist/assets/illustrations/illustrations.js.map +1 -1
  3. package/dist/assets/line-icons/icons/alarm.js +41 -0
  4. package/dist/assets/line-icons/icons/alarm.js.map +1 -0
  5. package/dist/assets/line-icons/icons/dart.js +23 -0
  6. package/dist/assets/line-icons/icons/dart.js.map +1 -0
  7. package/dist/assets/line-icons/icons/exclamation.js +26 -0
  8. package/dist/assets/line-icons/icons/exclamation.js.map +1 -0
  9. package/dist/assets/line-icons/icons/home2.js +25 -0
  10. package/dist/assets/line-icons/icons/home2.js.map +1 -0
  11. package/dist/assets/line-icons/icons/important.js +23 -0
  12. package/dist/assets/line-icons/icons/important.js.map +1 -0
  13. package/dist/assets/line-icons/icons/puzzle.js +25 -0
  14. package/dist/assets/line-icons/icons/puzzle.js.map +1 -0
  15. package/dist/assets/line-icons/icons/recap.js +32 -0
  16. package/dist/assets/line-icons/icons/recap.js.map +1 -0
  17. package/dist/assets/line-icons/icons/status.js +41 -0
  18. package/dist/assets/line-icons/icons/status.js.map +1 -0
  19. package/dist/assets/line-icons/icons/testtube.js +33 -0
  20. package/dist/assets/line-icons/icons/testtube.js.map +1 -0
  21. package/dist/features/analytics-events/whitelist-events.js +7 -9
  22. package/dist/features/analytics-events/whitelist-events.js.map +1 -1
  23. package/dist/features/chapters/chapters-list/chapter-item/chapter-item-styled.js +98 -33
  24. package/dist/features/chapters/chapters-list/chapter-item/chapter-item-styled.js.map +1 -1
  25. package/dist/features/chapters/chapters-list/chapter-item/chapter-item.js +76 -47
  26. package/dist/features/chapters/chapters-list/chapter-item/chapter-item.js.map +1 -1
  27. package/dist/features/chapters/chapters-list/chapters-list-styled.js +5 -5
  28. package/dist/features/chapters/chapters-list/chapters-list-styled.js.map +1 -1
  29. package/dist/features/chapters/chapters-list/chapters-list.js +65 -70
  30. package/dist/features/chapters/chapters-list/chapters-list.js.map +1 -1
  31. package/dist/features/chapters-v2/api/chapter.js +10 -0
  32. package/dist/features/chapters-v2/api/chapter.js.map +1 -0
  33. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js +112 -0
  34. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js.map +1 -0
  35. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js +26 -0
  36. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js.map +1 -0
  37. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js +69 -0
  38. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js.map +1 -0
  39. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js +90 -0
  40. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js.map +1 -0
  41. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js +97 -0
  42. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js.map +1 -0
  43. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js +52 -0
  44. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js.map +1 -0
  45. package/dist/features/chapters-v2/chapter-details/chapter-details.js +103 -0
  46. package/dist/features/chapters-v2/chapter-details/chapter-details.js.map +1 -0
  47. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js +13 -0
  48. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js.map +1 -0
  49. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js +153 -0
  50. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js.map +1 -0
  51. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js +16 -0
  52. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js.map +1 -0
  53. package/dist/features/chapters-v2/comps/node-card/node-card.js +12 -0
  54. package/dist/features/chapters-v2/comps/node-card/node-card.js.map +1 -0
  55. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js +32 -0
  56. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js.map +1 -0
  57. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js +31 -0
  58. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js.map +1 -0
  59. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js +160 -0
  60. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js.map +1 -0
  61. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js +184 -0
  62. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js.map +1 -0
  63. package/dist/features/chapters-v2/comps/tag/tag-styled.js +13 -0
  64. package/dist/features/chapters-v2/comps/tag/tag-styled.js.map +1 -0
  65. package/dist/features/chapters-v2/comps/tag/tag.js +28 -0
  66. package/dist/features/chapters-v2/comps/tag/tag.js.map +1 -0
  67. package/dist/features/chapters-v2/constants/block-constants.js +20 -0
  68. package/dist/features/chapters-v2/constants/block-constants.js.map +1 -0
  69. package/dist/features/chapters-v2/constants/node-constants.js +15 -0
  70. package/dist/features/chapters-v2/constants/node-constants.js.map +1 -0
  71. package/dist/features/chapters-v2/utils/index.js +41 -0
  72. package/dist/features/chapters-v2/utils/index.js.map +1 -0
  73. package/dist/features/chapters-v2/utils/node-card-utils.js +106 -0
  74. package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -0
  75. package/dist/features/circle-games/games/tutorial/tutorial.js +14 -13
  76. package/dist/features/circle-games/games/tutorial/tutorial.js.map +1 -1
  77. package/dist/features/homework/card-menu-options.js +36 -0
  78. package/dist/features/homework/card-menu-options.js.map +1 -0
  79. package/dist/features/homework/homework-card.js +136 -0
  80. package/dist/features/homework/homework-card.js.map +1 -0
  81. package/dist/features/homework/styles.js +114 -0
  82. package/dist/features/homework/styles.js.map +1 -0
  83. package/dist/features/homework/utils.js +28 -0
  84. package/dist/features/homework/utils.js.map +1 -0
  85. package/dist/features/hooks/use-auto-play-permission/use-auto-play-permission-context-provider.js +10 -10
  86. package/dist/features/hooks/use-auto-play-permission/use-auto-play-permission-context-provider.js.map +1 -1
  87. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js +51 -53
  88. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js.map +1 -1
  89. package/dist/features/milestone/milestone-list-container/api/get-milestones.js +9 -17
  90. package/dist/features/milestone/milestone-list-container/api/get-milestones.js.map +1 -1
  91. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js +116 -91
  92. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js.map +1 -1
  93. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/goals/goal-action-ctas.js +105 -121
  94. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/goals/goal-action-ctas.js.map +1 -1
  95. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-info.js +145 -173
  96. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-info.js.map +1 -1
  97. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-tabs/milestone-tabs-styled.js +24 -10
  98. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-tabs/milestone-tabs-styled.js.map +1 -1
  99. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-tabs/milestone-tabs.js +76 -81
  100. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-tabs/milestone-tabs.js.map +1 -1
  101. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-utils.js +10 -22
  102. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-utils.js.map +1 -1
  103. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-styled.js +70 -37
  104. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-styled.js.map +1 -1
  105. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget.js +114 -174
  106. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget.js.map +1 -1
  107. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-rank.js +29 -16
  108. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-rank.js.map +1 -1
  109. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-styled.js +19 -23
  110. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-styled.js.map +1 -1
  111. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome.js +23 -35
  112. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome.js.map +1 -1
  113. package/dist/features/milestone/milestone-list-container/milestone-list-container.js +34 -36
  114. package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
  115. package/dist/features/milestone/milestone-resources/resources-list/resources-list-styled.js +1 -1
  116. package/dist/features/milestone/milestone-resources/resources-list/resources-list-styled.js.map +1 -1
  117. package/dist/features/milestone/milestone-resources/resources-list/resources-list.js +96 -78
  118. package/dist/features/milestone/milestone-resources/resources-list/resources-list.js.map +1 -1
  119. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-utils.js +6 -34
  120. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-utils.js.map +1 -1
  121. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item.js +73 -73
  122. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item.js.map +1 -1
  123. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheets-list-styled.js +8 -7
  124. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheets-list-styled.js.map +1 -1
  125. package/dist/features/milestone/milestone-tests/tests-list/tests-list.js +77 -68
  126. package/dist/features/milestone/milestone-tests/tests-list/tests-list.js.map +1 -1
  127. package/dist/features/recent-chapters/api/get-recent-chapters.js +9 -0
  128. package/dist/features/recent-chapters/api/get-recent-chapters.js.map +1 -0
  129. package/dist/features/recent-chapters/recent-chapters-styled.js +23 -0
  130. package/dist/features/recent-chapters/recent-chapters-styled.js.map +1 -0
  131. package/dist/features/recent-chapters/recent-chapters.js +49 -0
  132. package/dist/features/recent-chapters/recent-chapters.js.map +1 -0
  133. package/dist/features/sheets/resources-list/resource-item/resource-item.js +65 -179
  134. package/dist/features/sheets/resources-list/resource-item/resource-item.js.map +1 -1
  135. package/dist/features/sheets/resources-list/resources-list.js +5 -5
  136. package/dist/features/sheets/resources-list/resources-list.js.map +1 -1
  137. package/dist/features/sheets/resources-list/styled.js +9 -13
  138. package/dist/features/sheets/resources-list/styled.js.map +1 -1
  139. package/dist/features/sheets/sheets-list/sheet-item/reward-n-actions/teacher-actions/teacher-actions-constant.js +4 -3
  140. package/dist/features/sheets/sheets-list/sheet-item/reward-n-actions/teacher-actions/teacher-actions-constant.js.map +1 -1
  141. package/dist/features/sheets/utils/is-v3-worksheet.js.map +1 -1
  142. package/dist/features/ui/arrow-tooltip/arrow-tooltip.js +30 -29
  143. package/dist/features/ui/arrow-tooltip/arrow-tooltip.js.map +1 -1
  144. package/dist/features/ui/constants/z-index.js +1 -1
  145. package/dist/features/ui/constants/z-index.js.map +1 -1
  146. package/dist/features/ui/context-menu/context-menu-styled.js +28 -14
  147. package/dist/features/ui/context-menu/context-menu-styled.js.map +1 -1
  148. package/dist/features/ui/context-menu/context-menu.js +30 -15
  149. package/dist/features/ui/context-menu/context-menu.js.map +1 -1
  150. package/dist/features/ui/theme/button.js +17 -102
  151. package/dist/features/ui/theme/button.js.map +1 -1
  152. package/dist/index.d.ts +200 -12
  153. package/dist/index.js +487 -469
  154. package/dist/index.js.map +1 -1
  155. package/dist/static/chapter-header-bg-2.c8d96894.svg +1 -0
  156. package/dist/static/node-custom-test-bg.d3b757be.svg +1 -0
  157. package/dist/static/node-learn-bg.b61f815c.svg +1 -0
  158. package/dist/static/node-practice-bg.16cbaf2a.svg +1 -0
  159. package/dist/static/node-project-bg.e6a33e28.svg +1 -0
  160. package/dist/static/node-puzzle-bg.3422135c.svg +1 -0
  161. package/dist/static/node-recap-bg.546154e4.svg +1 -0
  162. package/dist/static/node-test-prep-bg.42c0b9c4.svg +1 -0
  163. package/dist/static/node-video-bg.3df3f73a.svg +1 -0
  164. package/package.json +1 -1
  165. package/dist/assets/line-icons/icons/closed-eye.js +0 -23
  166. package/dist/assets/line-icons/icons/closed-eye.js.map +0 -1
  167. package/dist/features/milestone/create/comps/milestone-progress-v2/milestone-progress-v2.js +0 -92
  168. package/dist/features/milestone/create/comps/milestone-progress-v2/milestone-progress-v2.js.map +0 -1
  169. package/dist/features/milestone/create/comps/milestone-progress-v2/styled.js +0 -25
  170. package/dist/features/milestone/create/comps/milestone-progress-v2/styled.js.map +0 -1
  171. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/context-menu-helper/menu-element-styled.js +0 -13
  172. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/context-menu-helper/menu-element-styled.js.map +0 -1
  173. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/context-menu-helper/menu-element.js +0 -38
  174. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/context-menu-helper/menu-element.js.map +0 -1
  175. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-status.js +0 -53
  176. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-status.js.map +0 -1
  177. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-info.js +0 -25
  178. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/outcome/outcome-info.js.map +0 -1
  179. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-cta.js +0 -71
  180. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-cta.js.map +0 -1
  181. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-styled.js +0 -31
  182. package/dist/features/milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-styled.js.map +0 -1
  183. package/dist/features/sheets/resources-list/resource-item/context-menu-helper/menu-element-styled.js +0 -15
  184. package/dist/features/sheets/resources-list/resource-item/context-menu-helper/menu-element-styled.js.map +0 -1
  185. package/dist/features/sheets/resources-list/resource-item/context-menu-helper/menu-element.js +0 -26
  186. package/dist/features/sheets/resources-list/resource-item/context-menu-helper/menu-element.js.map +0 -1
  187. package/dist/features/sheets/resources-list/resource-item/styled.js +0 -38
  188. package/dist/features/sheets/resources-list/resource-item/styled.js.map +0 -1
  189. package/dist/features/sheets/resources-list/resource-item/utils.js +0 -23
  190. package/dist/features/sheets/resources-list/resource-item/utils.js.map +0 -1
  191. package/dist/features/sheets/sheets-analytics-events.js +0 -11
  192. package/dist/features/sheets/sheets-analytics-events.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { useRef as u, useState as E, useLayoutEffect as M } from "react";
3
+ import R from "../../assets/line-icons/icons/eye2.js";
4
+ import W from "../../assets/line-icons/icons/more-vertical.js";
5
+ import y from "../chapters-v2/comps/node-card/node-card-tags.js";
6
+ import { getNodeTypeBasedBgImage as B } from "../chapters-v2/utils/index.js";
7
+ import { getNodeCardBasedIcon as O } from "../chapters-v2/utils/node-card-utils.js";
8
+ import $ from "../ui/arrow-tooltip/arrow-tooltip.js";
9
+ import j from "../ui/hooks/use-context-menu-click-handler.js";
10
+ import n from "../ui/layout/flex-view.js";
11
+ import S from "../ui/text/text.js";
12
+ import _ from "./card-menu-options.js";
13
+ import { CardContainer as G, CardWrapper as K, IconWrapper as L, BannerImageWrapper as z, BannerImage as F, HeaderText as q, SubHeaderText as J, CardKebabMenuWrapper as P, CardMenuOptionsWrapper as Q, StyledMinus2Icon as Y } from "./styles.js";
14
+ const ae = ({
15
+ accuracy: f,
16
+ cardHeader: g,
17
+ dueDateTs: b,
18
+ header: a,
19
+ imageHue: C = "ORANGE",
20
+ imageUrl: s,
21
+ nodeData: r,
22
+ nodeType: l,
23
+ onNodeUnassign: o,
24
+ onNodeView: c,
25
+ state: w,
26
+ subHeader: I,
27
+ userType: x
28
+ }) => {
29
+ const T = B(l), d = O(l), p = u(null), { menuVisible: k, onMenuClick: X } = j(p), t = u(null), [A, H] = E(!1);
30
+ M(() => {
31
+ t.current && t.current.scrollHeight > t.current.clientHeight && H(!0);
32
+ }, [t]);
33
+ const h = (m) => {
34
+ switch (m) {
35
+ case "card-view":
36
+ r && (c == null || c(r));
37
+ return;
38
+ case "card-unassign":
39
+ r && (o == null || o(r));
40
+ return;
41
+ default:
42
+ throw new Error(`No callback function for ${m}`);
43
+ }
44
+ }, v = [
45
+ {
46
+ id: "card-view",
47
+ label: "View",
48
+ icon: R,
49
+ disabled: !1,
50
+ onClick: h
51
+ },
52
+ {
53
+ id: "card-unassign",
54
+ label: "Unassign",
55
+ icon: Y,
56
+ disabled: !1,
57
+ onClick: h
58
+ }
59
+ ];
60
+ return /* @__PURE__ */ e(G, { $widthX: 12.5, $position: "relative", children: /* @__PURE__ */ i(n, { $background: `${C}_2`, children: [
61
+ /* @__PURE__ */ i(
62
+ K,
63
+ {
64
+ $flexDirection: "row",
65
+ $alignItems: "center",
66
+ $width: "100%",
67
+ $heightX: 3.5,
68
+ $bgImage: T,
69
+ $gutterX: 0.78125,
70
+ $flexGap: 8.5,
71
+ $position: "relative",
72
+ children: [
73
+ /* @__PURE__ */ e(
74
+ L,
75
+ {
76
+ $width: 31,
77
+ $height: 31,
78
+ $borderRadiusX: 2,
79
+ $background: "WHITE_1",
80
+ $position: "relative",
81
+ $alignItems: "center",
82
+ $justifyContent: "center",
83
+ children: d && /* @__PURE__ */ e(d, { width: 20, height: 20 })
84
+ }
85
+ ),
86
+ /* @__PURE__ */ e(S, { $renderAs: "ac4-black", children: g }),
87
+ !!s && /* @__PURE__ */ e(z, { children: /* @__PURE__ */ e(F, { src: s, alt: "Chapter image" }) })
88
+ ]
89
+ }
90
+ ),
91
+ /* @__PURE__ */ e(y, { nodeType: l, state: w, accuracy: f, dueDateTs: b }),
92
+ /* @__PURE__ */ i(n, { $gutterX: 0.75, $gapX: 1, $flexRowGapX: 0.5, $background: "WHITE", children: [
93
+ /* @__PURE__ */ e(
94
+ $,
95
+ {
96
+ renderAs: "primary",
97
+ position: "bottom",
98
+ tooltipItem: a || "",
99
+ hidden: !A,
100
+ widthX: 21.75,
101
+ children: /* @__PURE__ */ e(n, { $heightX: 2.5, children: /* @__PURE__ */ e(q, { ref: t, $renderAs: "ab3", children: a }) })
102
+ }
103
+ ),
104
+ /* @__PURE__ */ i(
105
+ n,
106
+ {
107
+ $flexDirection: "row",
108
+ $heightX: 1.25,
109
+ $alignItems: "center",
110
+ $justifyContent: "space-between",
111
+ children: [
112
+ /* @__PURE__ */ e(J, { $renderAs: "ub3", $color: "BLACK_T_60", children: I }),
113
+ x === "TEACHER" && r && (c || o) && /* @__PURE__ */ i(n, { $position: "relative", $width: "fit-content", children: [
114
+ /* @__PURE__ */ e(
115
+ $,
116
+ {
117
+ renderAs: "primary",
118
+ tooltipItem: "Review",
119
+ position: "bottom",
120
+ zIndex: 5,
121
+ parentWidth: "100%",
122
+ children: /* @__PURE__ */ e(P, { ref: p, onClick: X, children: /* @__PURE__ */ e(W, { width: 16, height: 16 }) })
123
+ }
124
+ ),
125
+ /* @__PURE__ */ e(Q, { $visible: k, children: /* @__PURE__ */ e(_, { options: v }) })
126
+ ] })
127
+ ]
128
+ }
129
+ )
130
+ ] })
131
+ ] }) });
132
+ };
133
+ export {
134
+ ae as default
135
+ };
136
+ //# sourceMappingURL=homework-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homework-card.js","sources":["../../../src/features/homework/homework-card.tsx"],"sourcesContent":["import type { INodeDataProps, TSheetStates } from '../chapters-v2/comps/node-card/node-card-types';\nimport type { TNodeTypeProps } from '../sheets/sheets-list/sheet-item/sheet-item-types';\nimport type { THueNames } from '../ui/types';\nimport type { ICardMenuOption } from './card-menu-options';\n\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nimport Eye2Icon from '../../assets/line-icons/icons/eye2';\nimport MoreVerticalIcon from '../../assets/line-icons/icons/more-vertical';\nimport NodeCardTags from '../chapters-v2/comps/node-card/node-card-tags';\nimport { getNodeTypeBasedBgImage } from '../chapters-v2/utils';\nimport { getNodeCardBasedIcon } from '../chapters-v2/utils/node-card-utils';\nimport ArrowTooltip from '../ui/arrow-tooltip/arrow-tooltip';\nimport useContextMenuClickHandler from '../ui/hooks/use-context-menu-click-handler';\nimport FlexView from '../ui/layout/flex-view';\nimport Text from '../ui/text/text';\nimport CardMenuOptions from './card-menu-options';\nimport * as Styled from './styles';\n\ninterface IHomeworkCardProps {\n accuracy: number | null;\n cardHeader: string;\n dueDateTs?: number | null;\n header: string;\n imageHue?: THueNames;\n imageUrl?: string;\n nodeData?: INodeDataProps;\n nodeType: TNodeTypeProps;\n onNodeUnassign?: (nodeData: INodeDataProps) => void;\n onNodeView?: (nodeData: INodeDataProps) => void;\n state: TSheetStates;\n subHeader: string;\n userType: 'TEACHER' | 'STUDENT';\n}\n\nconst HomeworkCard = ({\n accuracy,\n cardHeader,\n dueDateTs,\n header,\n imageHue = 'ORANGE',\n imageUrl,\n nodeData,\n nodeType,\n onNodeUnassign,\n onNodeView,\n state,\n subHeader,\n userType,\n}: IHomeworkCardProps) => {\n const bgImage = getNodeTypeBasedBgImage(nodeType);\n const NodeCardIcon = getNodeCardBasedIcon(nodeType);\n const containerRef = useRef<HTMLDivElement>(null);\n const { menuVisible, onMenuClick } = useContextMenuClickHandler(containerRef);\n const titleTextRef = useRef<HTMLDivElement>(null);\n const [showTitleTooltip, setShowTitleTooltip] = useState(false);\n\n useLayoutEffect(() => {\n if (\n titleTextRef.current &&\n titleTextRef.current.scrollHeight > titleTextRef.current.clientHeight\n ) {\n setShowTitleTooltip(true);\n }\n }, [titleTextRef]);\n const handleOnMenuOptionClick = (optionId: string) => {\n switch (optionId) {\n case 'card-view':\n nodeData && onNodeView?.(nodeData);\n\n return;\n\n case 'card-unassign':\n nodeData && onNodeUnassign?.(nodeData);\n\n return;\n\n default:\n throw new Error(`No callback function for ${optionId}`);\n }\n };\n\n const menuOptions: ICardMenuOption[] = [\n {\n id: 'card-view',\n label: 'View',\n icon: Eye2Icon,\n disabled: false,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'card-unassign',\n label: 'Unassign',\n icon: Styled.StyledMinus2Icon,\n disabled: false,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n return (\n <Styled.CardContainer $widthX={12.5} $position=\"relative\">\n <FlexView $background={`${imageHue}_2`}>\n <Styled.CardWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={3.5}\n $bgImage={bgImage}\n $gutterX={0.78125}\n $flexGap={8.5}\n $position=\"relative\"\n >\n <Styled.IconWrapper\n $width={31}\n $height={31}\n $borderRadiusX={2}\n $background=\"WHITE_1\"\n $position=\"relative\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n {NodeCardIcon && <NodeCardIcon width={20} height={20} />}\n </Styled.IconWrapper>\n <Text $renderAs=\"ac4-black\">{cardHeader}</Text>\n {!!imageUrl && (\n <Styled.BannerImageWrapper>\n <Styled.BannerImage src={imageUrl} alt=\"Chapter image\" />\n </Styled.BannerImageWrapper>\n )}\n </Styled.CardWrapper>\n <NodeCardTags nodeType={nodeType} state={state} accuracy={accuracy} dueDateTs={dueDateTs} />\n <FlexView $gutterX={0.75} $gapX={1} $flexRowGapX={0.5} $background=\"WHITE\">\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem={header || ''}\n hidden={!showTitleTooltip}\n widthX={21.75}\n >\n <FlexView $heightX={2.5}>\n <Styled.HeaderText ref={titleTextRef} $renderAs=\"ab3\">\n {header}\n </Styled.HeaderText>\n </FlexView>\n </ArrowTooltip>\n <FlexView\n $flexDirection=\"row\"\n $heightX={1.25}\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n >\n <Styled.SubHeaderText $renderAs=\"ub3\" $color=\"BLACK_T_60\">\n {subHeader}\n </Styled.SubHeaderText>\n {userType === 'TEACHER' && nodeData && (onNodeView || onNodeUnassign) && (\n <FlexView $position=\"relative\" $width=\"fit-content\">\n <ArrowTooltip\n renderAs=\"primary\"\n tooltipItem=\"Review\"\n position=\"bottom\"\n zIndex={5}\n parentWidth=\"100%\"\n >\n <Styled.CardKebabMenuWrapper ref={containerRef} onClick={onMenuClick}>\n <MoreVerticalIcon width={16} height={16} />\n </Styled.CardKebabMenuWrapper>\n </ArrowTooltip>\n <Styled.CardMenuOptionsWrapper $visible={menuVisible}>\n <CardMenuOptions options={menuOptions} />\n </Styled.CardMenuOptionsWrapper>\n </FlexView>\n )}\n </FlexView>\n </FlexView>\n </FlexView>\n </Styled.CardContainer>\n );\n};\n\nexport default HomeworkCard;\n"],"names":["HomeworkCard","accuracy","cardHeader","dueDateTs","header","imageHue","imageUrl","nodeData","nodeType","onNodeUnassign","onNodeView","state","subHeader","userType","bgImage","getNodeTypeBasedBgImage","NodeCardIcon","getNodeCardBasedIcon","containerRef","useRef","menuVisible","onMenuClick","useContextMenuClickHandler","titleTextRef","showTitleTooltip","setShowTitleTooltip","useState","useLayoutEffect","handleOnMenuOptionClick","optionId","menuOptions","Eye2Icon","Styled.StyledMinus2Icon","jsx","Styled.CardContainer","jsxs","FlexView","Styled.CardWrapper","Styled.IconWrapper","Text","Styled.BannerImageWrapper","Styled.BannerImage","NodeCardTags","ArrowTooltip","Styled.HeaderText","Styled.SubHeaderText","Styled.CardKebabMenuWrapper","MoreVerticalIcon","Styled.CardMenuOptionsWrapper","CardMenuOptions"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import r from "styled-components";
2
+ import i from "../../assets/line-icons/icons/minus2.js";
3
+ import t from "../ui/layout/flex-view.js";
4
+ import n from "../ui/text/text.js";
5
+ const l = r(t)(({ theme: o }) => `
6
+ cursor: pointer;
7
+ width: fit-content;
8
+
9
+ &:hover {
10
+ border-radius: 50%;
11
+ background: ${o.colors.WHITE_5};
12
+ }
13
+ `), d = r(n)`
14
+ display: -webkit-box;
15
+ -webkit-line-clamp: 1;
16
+ -webkit-box-orient: vertical;
17
+ overflow: hidden;
18
+ text-overflow: ellipsis;
19
+ `, u = r(t)(({
20
+ theme: o,
21
+ $visible: e
22
+ }) => `
23
+ cursor: pointer;
24
+ position: absolute;
25
+ z-index: 6;
26
+ top: calc(100% + 4px);
27
+ left: 0;
28
+ transform-origin: top;
29
+ transform: scaleY(${e ? 1 : 0});
30
+ opacity: ${e ? 1 : 0};
31
+ transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
32
+
33
+ &:hover {
34
+ border-radius: 50%;
35
+ background: ${o.colors.WHITE_5};
36
+ }
37
+ `), x = r(t)`
38
+ border: 1px solid ${({ theme: o }) => o.colors.BLACK_T_15};
39
+
40
+ /* :hover {
41
+ border: 1px solid ${({ theme: o }) => o.colors.BLACK};
42
+ } */
43
+ `, b = r(t)(({ $bgImage: o }) => `
44
+ background-image: url(${o});
45
+ background-repeat: no-repeat;
46
+ background-size: cover;
47
+ background-position: center;
48
+ overflow: hidden;
49
+ `), w = r(t)`
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ `, f = r(t)`
54
+ position: absolute;
55
+ right: -18px;
56
+ top: -4px;
57
+ `, g = r.img(({ theme: o }) => {
58
+ const { gutter: e } = o.layout;
59
+ return `
60
+ border: 1px solid ${o.colors.BLACK_T_15};
61
+ width: ${e * 4}px;
62
+ height: ${e * 4}px;
63
+ border-radius: 50%;
64
+ `;
65
+ }), h = r(i)`
66
+ path {
67
+ stroke: ${({ theme: o }) => o.colors.WHITE};
68
+ }
69
+ `, m = r(n)`
70
+ display: -webkit-box;
71
+ -webkit-line-clamp: 2;
72
+ -webkit-box-orient: vertical;
73
+ overflow: hidden;
74
+ text-overflow: ellipsis;
75
+ `, k = r(t)`
76
+ box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.4);
77
+ width: 180px;
78
+ position: relative;
79
+ left: 0;
80
+ top: 0;
81
+ `, v = r(t)(({
82
+ theme: o,
83
+ $disabled: e
84
+ }) => `
85
+ cursor: ${e ? "not-allowed" : "pointer"};
86
+
87
+ &:hover {
88
+ background: ${e ? "transparent" : o.colors.BLACK};
89
+ };
90
+
91
+ path {
92
+ fill: ${o.colors.WHITE_1};
93
+ }
94
+ `), $ = r(n)`
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ `;
99
+ export {
100
+ g as BannerImage,
101
+ f as BannerImageWrapper,
102
+ x as CardContainer,
103
+ l as CardKebabMenuWrapper,
104
+ u as CardMenuOptionsWrapper,
105
+ v as CardOptionWrapper,
106
+ k as CardOptions,
107
+ b as CardWrapper,
108
+ m as HeaderText,
109
+ w as IconWrapper,
110
+ $ as OptionText,
111
+ h as StyledMinus2Icon,
112
+ d as SubHeaderText
113
+ };
114
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sources":["../../../src/features/homework/styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nimport Minus2Icon from '../../assets/line-icons/icons/minus2';\nimport FlexView from '../ui/layout/flex-view';\nimport Text from '../ui/text/text';\n\nexport interface ICardWrapperProps {\n $bgImage: string;\n}\n\nexport interface ICardOptionsMenuWrapperProps {\n $visible: boolean;\n}\n\nexport const CardKebabMenuWrapper = styled(FlexView)(({ theme }) => {\n return `\n cursor: pointer;\n width: fit-content;\n \n &:hover {\n border-radius: 50%;\n background: ${theme.colors.WHITE_5}; \n }\n `;\n});\n\nexport const SubHeaderText = styled(Text)`\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const CardMenuOptionsWrapper = styled(FlexView)<ICardOptionsMenuWrapperProps>(({\n theme,\n $visible,\n}) => {\n return `\n cursor: pointer;\n position: absolute;\n z-index: 6;\n top: calc(100% + 4px);\n left: 0;\n transform-origin: top;\n transform: scaleY(${$visible ? 1 : 0});\n opacity: ${$visible ? 1 : 0};\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n \n &:hover {\n border-radius: 50%;\n background: ${theme.colors.WHITE_5}; \n }\n `;\n});\n\nexport const CardContainer = styled(FlexView)`\n border: 1px solid ${({ theme }) => theme.colors.BLACK_T_15};\n\n /* :hover {\n border: 1px solid ${({ theme }) => theme.colors.BLACK};\n } */\n`;\n\nexport const CardWrapper = styled(FlexView)<ICardWrapperProps>(({ $bgImage }) => {\n return `\n background-image: url(${$bgImage});\n background-repeat: no-repeat;\n background-size: cover;\n background-position: center;\n overflow: hidden;\n `;\n});\n\nexport const IconWrapper = styled(FlexView)`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const BannerImageWrapper = styled(FlexView)`\n position: absolute;\n right: -18px;\n top: -4px;\n`;\n\nexport const BannerImage = styled.img(({ theme }) => {\n const { gutter } = theme.layout;\n\n return `\n border: 1px solid ${theme.colors.BLACK_T_15};\n width: ${gutter * 4}px;\n height: ${gutter * 4}px;\n border-radius: 50%;\n `;\n});\n\nexport const StyledMinus2Icon = styled(Minus2Icon)`\n path {\n stroke: ${({ theme }) => theme.colors.WHITE};\n }\n`;\n\nexport const HeaderText = styled(Text)`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport interface ICardOptionWrapperProps {\n $disabled?: boolean;\n}\n\nexport const CardOptions = styled(FlexView)`\n box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.4);\n width: 180px;\n position: relative;\n left: 0;\n top: 0;\n`;\n\nexport const CardOptionWrapper = styled(FlexView)<ICardOptionWrapperProps>(({\n theme,\n $disabled,\n}) => {\n return `\n cursor: ${$disabled ? 'not-allowed' : 'pointer'};\n \n &:hover {\n background: ${$disabled ? 'transparent' : theme.colors.BLACK};\n };\n \n path {\n fill: ${theme.colors.WHITE_1};\n }\n `;\n});\n\nexport const OptionText = styled(Text)`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n"],"names":["CardKebabMenuWrapper","styled","FlexView","theme","SubHeaderText","Text","CardMenuOptionsWrapper","$visible","CardContainer","CardWrapper","$bgImage","IconWrapper","BannerImageWrapper","BannerImage","gutter","StyledMinus2Icon","Minus2Icon","HeaderText","CardOptions","CardOptionWrapper","$disabled","OptionText"],"mappings":";;;;AAcO,MAAMA,IAAuBC,EAAOC,CAAQ,EAAE,CAAC,EAAE,OAAAC,QAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMWA,EAAM,OAAO,OAAO;AAAA;AAAA,GAGvC,GAEYC,IAAgBH,EAAOI,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQ3BC,IAAyBL,EAAOC,CAAQ,EAAgC,CAAC;AAAA,EACpF,OAAAC;AAAA,EACA,UAAAI;AACF,MACS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOeA,IAAW,IAAI,CAAC;AAAA,eACzBA,IAAW,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKXJ,EAAM,OAAO,OAAO;AAAA;AAAA,GAGvC,GAEYK,IAAgBP,EAAOC,CAAQ;AAAA,sBACtB,CAAC,EAAE,OAAAC,EAAA,MAAYA,EAAM,OAAO,UAAU;AAAA;AAAA;AAAA,wBAGpC,CAAC,EAAE,OAAAA,EAAA,MAAYA,EAAM,OAAO,KAAK;AAAA;AAAA,GAI5CM,IAAcR,EAAOC,CAAQ,EAAqB,CAAC,EAAE,UAAAQ,QACzD;AAAA,4BACmBA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,GAMnC,GAEYC,IAAcV,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA,GAM7BU,IAAqBX,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA,GAMpCW,IAAcZ,EAAO,IAAI,CAAC,EAAE,OAAAE,QAAY;AAC7C,QAAA,EAAE,QAAAW,EAAO,IAAIX,EAAM;AAElB,SAAA;AAAA,wBACeA,EAAM,OAAO,UAAU;AAAA,aAClCW,IAAS,CAAC;AAAA,cACTA,IAAS,CAAC;AAAA;AAAA;AAGxB,CAAC,GAEYC,IAAmBd,EAAOe,CAAU;AAAA;AAAA,cAEnC,CAAC,EAAE,OAAAb,EAAA,MAAYA,EAAM,OAAO,KAAK;AAAA;AAAA,GAIlCc,IAAahB,EAAOI,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxBa,IAAcjB,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQ7BiB,IAAoBlB,EAAOC,CAAQ,EAA2B,CAAC;AAAA,EAC1E,OAAAC;AAAA,EACA,WAAAiB;AACF,MACS;AAAA,cACKA,IAAY,gBAAgB,SAAS;AAAA;AAAA;AAAA,oBAG/BA,IAAY,gBAAgBjB,EAAM,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,cAIpDA,EAAM,OAAO,OAAO;AAAA;AAAA,GAGjC,GAEYkB,IAAapB,EAAOI,CAAI;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,28 @@
1
+ const r = (e) => {
2
+ switch (e) {
3
+ case "LEARNING":
4
+ return "LEARN";
5
+ case "RECAP":
6
+ return "Recap";
7
+ case "DYNAMIC":
8
+ case "ASSESSMENT":
9
+ return "Test";
10
+ case "PRACTICE":
11
+ case "EXTRA_PRACTICE":
12
+ return "Practice";
13
+ case "MASTERY":
14
+ return "Smart Practice";
15
+ case "PUZZLE_EASY":
16
+ case "PUZZLE_MEDIUM":
17
+ case "PUZZLE_HARD":
18
+ return "Puzzle";
19
+ case "VIDEO":
20
+ return "Video";
21
+ default:
22
+ return "Practice";
23
+ }
24
+ };
25
+ export {
26
+ r as getNodeTypeBasedHWCardTitle
27
+ };
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/features/homework/utils.ts"],"sourcesContent":["export const getNodeTypeBasedHWCardTitle = (nodeType: string) => {\n switch (nodeType) {\n case 'LEARNING':\n return 'LEARN';\n case 'RECAP':\n return 'Recap';\n case 'DYNAMIC':\n case 'ASSESSMENT':\n return 'Test';\n case 'PRACTICE':\n case 'EXTRA_PRACTICE':\n return 'Practice';\n case 'MASTERY':\n return 'Smart Practice';\n case 'PUZZLE_EASY':\n case 'PUZZLE_MEDIUM':\n case 'PUZZLE_HARD':\n return 'Puzzle';\n case 'VIDEO':\n return 'Video';\n default:\n return 'Practice';\n }\n};\n"],"names":["getNodeTypeBasedHWCardTitle","nodeType"],"mappings":"AAAa,MAAAA,IAA8B,CAACC,MAAqB;AAC/D,UAAQA,GAAU;AAAA,IAChB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF;"}
@@ -7,7 +7,7 @@ const v = E({
7
7
  canAutoPlayAudio: !1,
8
8
  canAutoPlayVideo: !1
9
9
  }), O = ({ children: u }) => {
10
- const [l, a] = s(!1), [A, c] = s(!1), { onEvent: t } = f();
10
+ const [l, a] = s(!1), [A, c] = s(!1), { onEvent: o } = f();
11
11
  return d(() => {
12
12
  const n = () => {
13
13
  a(!0), c(!0), r.forEach((e) => {
@@ -17,36 +17,36 @@ const v = E({
17
17
  r.forEach((e) => {
18
18
  document.addEventListener(e, n);
19
19
  });
20
- const o = (e) => {
21
- e instanceof DOMException ? e.name !== "NotAllowedError" && t(i.ERROR_LOADING_MEDIA, {
20
+ const t = (e) => {
21
+ e instanceof DOMException ? e.name !== "NotAllowedError" && o(i.ERROR_LOADING_MEDIA, {
22
22
  name: e.name
23
- }) : (console.log(e), t(i.ERROR_LOADING_MEDIA, {
23
+ }) : (console.log(e), o(i.ERROR_LOADING_MEDIA, {
24
24
  error: e
25
25
  }));
26
26
  };
27
27
  try {
28
28
  new Audio(y).play().then(() => {
29
29
  a(!0);
30
- }).catch(o);
30
+ }).catch(t);
31
31
  } catch (e) {
32
- o(e);
32
+ t(e);
33
33
  }
34
34
  try {
35
35
  const e = document.createElement("video");
36
- e.src = P, e.play().then(() => {
36
+ e.src = P, e.setAttribute("playsinline", "true"), e.play().then(() => {
37
37
  c(!0);
38
- }).catch(o).finally(() => {
38
+ }).catch(t).finally(() => {
39
39
  e.remove();
40
40
  });
41
41
  } catch (e) {
42
- o(e);
42
+ t(e);
43
43
  }
44
44
  return () => {
45
45
  r.forEach((e) => {
46
46
  document.removeEventListener(e, n);
47
47
  });
48
48
  };
49
- }, [t]), /* @__PURE__ */ m(v.Provider, { value: { canAutoPlayAudio: l, canAutoPlayVideo: A }, children: u });
49
+ }, [o]), /* @__PURE__ */ m(v.Provider, { value: { canAutoPlayAudio: l, canAutoPlayVideo: A }, children: u });
50
50
  };
51
51
  export {
52
52
  v as AutoPlayPermissionContext,
@@ -1 +1 @@
1
- {"version":3,"file":"use-auto-play-permission-context-provider.js","sources":["../../../../src/features/hooks/use-auto-play-permission/use-auto-play-permission-context-provider.tsx"],"sourcesContent":["import type { IAutoPlayPermissionContextType } from './use-auto-play-permission-context-types';\nimport type { FC, ReactNode } from 'react';\n\nimport { useState, useEffect, createContext } from 'react';\n\nimport { useUIContext } from '../../ui/context/context';\nimport { EVENTS, SMALL_AUDIO, SMALL_VIDEO } from './constants';\nimport { USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS } from './use-auto-play-permission-analytics-events';\n\nexport const AutoPlayPermissionContext = createContext<IAutoPlayPermissionContextType>({\n canAutoPlayAudio: false,\n canAutoPlayVideo: false,\n});\n\nexport const AutoPlayPermissionProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [canAutoPlayAudio, setCanAutoPlayAudio] = useState(false);\n const [canAutoPlayVideo, setCanAutoPlayVideo] = useState(false);\n const { onEvent } = useUIContext();\n\n useEffect(() => {\n const enableAutoplay = () => {\n setCanAutoPlayAudio(true);\n setCanAutoPlayVideo(true);\n EVENTS.forEach(event => {\n document.removeEventListener(event, enableAutoplay);\n });\n };\n\n EVENTS.forEach(event => {\n document.addEventListener(event, enableAutoplay);\n });\n\n const handleError = (err: unknown) => {\n if (err instanceof DOMException) {\n err.name !== 'NotAllowedError' &&\n onEvent(USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS.ERROR_LOADING_MEDIA, {\n name: err.name,\n });\n } else {\n // eslint-disable-next-line no-console\n console.log(err);\n onEvent(USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS.ERROR_LOADING_MEDIA, {\n error: err,\n });\n }\n };\n\n // audio autoplay check\n // way to check if autoplay is allowed by the browser for audio\n try {\n new Audio(SMALL_AUDIO) // smallest silent audio file\n .play()\n .then(() => {\n setCanAutoPlayAudio(true);\n })\n .catch(handleError);\n } catch (err) {\n handleError(err);\n }\n\n // video autoplay check\n // way to check if autoplay is allowed by the browserfor video\n try {\n const video = document.createElement('video');\n\n video.src = SMALL_VIDEO; // smallest silent video file\n\n video\n .play()\n .then(() => {\n setCanAutoPlayVideo(true);\n })\n .catch(handleError)\n .finally(() => {\n video.remove();\n });\n } catch (err) {\n handleError(err);\n }\n\n return () => {\n EVENTS.forEach(event => {\n document.removeEventListener(event, enableAutoplay);\n });\n };\n }, [onEvent]);\n\n return (\n <AutoPlayPermissionContext.Provider value={{ canAutoPlayAudio, canAutoPlayVideo }}>\n {children}\n </AutoPlayPermissionContext.Provider>\n );\n};\n"],"names":["AutoPlayPermissionContext","createContext","AutoPlayPermissionProvider","children","canAutoPlayAudio","setCanAutoPlayAudio","useState","canAutoPlayVideo","setCanAutoPlayVideo","onEvent","useUIContext","useEffect","enableAutoplay","EVENTS","event","handleError","err","USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS","SMALL_AUDIO","video","SMALL_VIDEO","jsx"],"mappings":";;;;;AASO,MAAMA,IAA4BC,EAA8C;AAAA,EACrF,kBAAkB;AAAA,EAClB,kBAAkB;AACpB,CAAC,GAEYC,IAA0D,CAAC,EAAE,UAAAC,QAAe;AACvF,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAS,EAAK,GACxD,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GACxD,EAAE,SAAAG,MAAYC;AAEpB,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAiB,MAAM;AAC3B,MAAAP,EAAoB,EAAI,GACxBG,EAAoB,EAAI,GACxBK,EAAO,QAAQ,CAASC,MAAA;AACb,iBAAA,oBAAoBA,GAAOF,CAAc;AAAA,MAAA,CACnD;AAAA,IAAA;AAGH,IAAAC,EAAO,QAAQ,CAASC,MAAA;AACb,eAAA,iBAAiBA,GAAOF,CAAc;AAAA,IAAA,CAChD;AAEK,UAAAG,IAAc,CAACC,MAAiB;AACpC,MAAIA,aAAe,eACjBA,EAAI,SAAS,qBACXP,EAAQQ,EAA0C,qBAAqB;AAAA,QACrE,MAAMD,EAAI;AAAA,MAAA,CACX,KAGH,QAAQ,IAAIA,CAAG,GACfP,EAAQQ,EAA0C,qBAAqB;AAAA,QACrE,OAAOD;AAAA,MAAA,CACR;AAAA,IACH;AAKE,QAAA;AACF,UAAI,MAAME,CAAW,EAClB,KAAK,EACL,KAAK,MAAM;AACV,QAAAb,EAAoB,EAAI;AAAA,MAAA,CACzB,EACA,MAAMU,CAAW;AAAA,aACbC,GAAK;AACZ,MAAAD,EAAYC,CAAG;AAAA,IACjB;AAII,QAAA;AACI,YAAAG,IAAQ,SAAS,cAAc,OAAO;AAE5C,MAAAA,EAAM,MAAMC,GAGTD,EAAA,OACA,KAAK,MAAM;AACV,QAAAX,EAAoB,EAAI;AAAA,MACzB,CAAA,EACA,MAAMO,CAAW,EACjB,QAAQ,MAAM;AACb,QAAAI,EAAM,OAAO;AAAA,MAAA,CACd;AAAA,aACIH,GAAK;AACZ,MAAAD,EAAYC,CAAG;AAAA,IACjB;AAEA,WAAO,MAAM;AACX,MAAAH,EAAO,QAAQ,CAASC,MAAA;AACb,iBAAA,oBAAoBA,GAAOF,CAAc;AAAA,MAAA,CACnD;AAAA,IAAA;AAAA,EACH,GACC,CAACH,CAAO,CAAC,GAGV,gBAAAY,EAACrB,EAA0B,UAA1B,EAAmC,OAAO,EAAE,kBAAAI,GAAkB,kBAAAG,EAAiB,GAC7E,UAAAJ,EACH,CAAA;AAEJ;"}
1
+ {"version":3,"file":"use-auto-play-permission-context-provider.js","sources":["../../../../src/features/hooks/use-auto-play-permission/use-auto-play-permission-context-provider.tsx"],"sourcesContent":["import type { IAutoPlayPermissionContextType } from './use-auto-play-permission-context-types';\nimport type { FC, ReactNode } from 'react';\n\nimport { useState, useEffect, createContext } from 'react';\n\nimport { useUIContext } from '../../ui/context/context';\nimport { EVENTS, SMALL_AUDIO, SMALL_VIDEO } from './constants';\nimport { USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS } from './use-auto-play-permission-analytics-events';\n\nexport const AutoPlayPermissionContext = createContext<IAutoPlayPermissionContextType>({\n canAutoPlayAudio: false,\n canAutoPlayVideo: false,\n});\n\nexport const AutoPlayPermissionProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [canAutoPlayAudio, setCanAutoPlayAudio] = useState(false);\n const [canAutoPlayVideo, setCanAutoPlayVideo] = useState(false);\n const { onEvent } = useUIContext();\n\n useEffect(() => {\n const enableAutoplay = () => {\n setCanAutoPlayAudio(true);\n setCanAutoPlayVideo(true);\n EVENTS.forEach(event => {\n document.removeEventListener(event, enableAutoplay);\n });\n };\n\n EVENTS.forEach(event => {\n document.addEventListener(event, enableAutoplay);\n });\n\n const handleError = (err: unknown) => {\n if (err instanceof DOMException) {\n err.name !== 'NotAllowedError' &&\n onEvent(USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS.ERROR_LOADING_MEDIA, {\n name: err.name,\n });\n } else {\n // eslint-disable-next-line no-console\n console.log(err);\n onEvent(USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS.ERROR_LOADING_MEDIA, {\n error: err,\n });\n }\n };\n\n // audio autoplay check\n // way to check if autoplay is allowed by the browser for audio\n try {\n new Audio(SMALL_AUDIO) // smallest silent audio file\n .play()\n .then(() => {\n setCanAutoPlayAudio(true);\n })\n .catch(handleError);\n } catch (err) {\n handleError(err);\n }\n\n // video autoplay check\n // way to check if autoplay is allowed by the browserfor video\n try {\n const video = document.createElement('video');\n\n video.src = SMALL_VIDEO; // smallest silent video file\n video.setAttribute('playsinline', 'true');\n\n video\n .play()\n .then(() => {\n setCanAutoPlayVideo(true);\n })\n .catch(handleError)\n .finally(() => {\n video.remove();\n });\n } catch (err) {\n handleError(err);\n }\n\n return () => {\n EVENTS.forEach(event => {\n document.removeEventListener(event, enableAutoplay);\n });\n };\n }, [onEvent]);\n\n return (\n <AutoPlayPermissionContext.Provider value={{ canAutoPlayAudio, canAutoPlayVideo }}>\n {children}\n </AutoPlayPermissionContext.Provider>\n );\n};\n"],"names":["AutoPlayPermissionContext","createContext","AutoPlayPermissionProvider","children","canAutoPlayAudio","setCanAutoPlayAudio","useState","canAutoPlayVideo","setCanAutoPlayVideo","onEvent","useUIContext","useEffect","enableAutoplay","EVENTS","event","handleError","err","USE_AUTO_PLAY_PERMISSION_ANALYTICS_EVENTS","SMALL_AUDIO","video","SMALL_VIDEO","jsx"],"mappings":";;;;;AASO,MAAMA,IAA4BC,EAA8C;AAAA,EACrF,kBAAkB;AAAA,EAClB,kBAAkB;AACpB,CAAC,GAEYC,IAA0D,CAAC,EAAE,UAAAC,QAAe;AACvF,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAS,EAAK,GACxD,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GACxD,EAAE,SAAAG,MAAYC;AAEpB,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAiB,MAAM;AAC3B,MAAAP,EAAoB,EAAI,GACxBG,EAAoB,EAAI,GACxBK,EAAO,QAAQ,CAASC,MAAA;AACb,iBAAA,oBAAoBA,GAAOF,CAAc;AAAA,MAAA,CACnD;AAAA,IAAA;AAGH,IAAAC,EAAO,QAAQ,CAASC,MAAA;AACb,eAAA,iBAAiBA,GAAOF,CAAc;AAAA,IAAA,CAChD;AAEK,UAAAG,IAAc,CAACC,MAAiB;AACpC,MAAIA,aAAe,eACjBA,EAAI,SAAS,qBACXP,EAAQQ,EAA0C,qBAAqB;AAAA,QACrE,MAAMD,EAAI;AAAA,MAAA,CACX,KAGH,QAAQ,IAAIA,CAAG,GACfP,EAAQQ,EAA0C,qBAAqB;AAAA,QACrE,OAAOD;AAAA,MAAA,CACR;AAAA,IACH;AAKE,QAAA;AACF,UAAI,MAAME,CAAW,EAClB,KAAK,EACL,KAAK,MAAM;AACV,QAAAb,EAAoB,EAAI;AAAA,MAAA,CACzB,EACA,MAAMU,CAAW;AAAA,aACbC,GAAK;AACZ,MAAAD,EAAYC,CAAG;AAAA,IACjB;AAII,QAAA;AACI,YAAAG,IAAQ,SAAS,cAAc,OAAO;AAE5C,MAAAA,EAAM,MAAMC,GACND,EAAA,aAAa,eAAe,MAAM,GAGrCA,EAAA,OACA,KAAK,MAAM;AACV,QAAAX,EAAoB,EAAI;AAAA,MACzB,CAAA,EACA,MAAMO,CAAW,EACjB,QAAQ,MAAM;AACb,QAAAI,EAAM,OAAO;AAAA,MAAA,CACd;AAAA,aACIH,GAAK;AACZ,MAAAD,EAAYC,CAAG;AAAA,IACjB;AAEA,WAAO,MAAM;AACX,MAAAH,EAAO,QAAQ,CAASC,MAAA;AACb,iBAAA,oBAAoBA,GAAOF,CAAc;AAAA,MAAA,CACnD;AAAA,IAAA;AAAA,EACH,GACC,CAACH,CAAO,CAAC,GAGV,gBAAAY,EAACrB,EAA0B,UAA1B,EAAmC,OAAO,EAAE,kBAAAI,GAAkB,kBAAAG,EAAiB,GAC7E,UAAAJ,EACH,CAAA;AAEJ;"}
@@ -1,5 +1,5 @@
1
- import { jsxs as $, jsx as P } from "react/jsx-runtime";
2
- import { memo as q, useState as s, useMemo as f, useCallback as i } from "react";
1
+ import { jsxs as $, jsx as N } from "react/jsx-runtime";
2
+ import { memo as q, useState as s, useMemo as f, useCallback as n } from "react";
3
3
  import { EVENTS as z } from "../../../../communication/pub-sub/constants.js";
4
4
  import { useInClassActionDispatcher as B } from "../../../../communication/pub-sub/hooks.js";
5
5
  import G from "../../../../ui/context/context.js";
@@ -10,45 +10,43 @@ import X from "../delete-milestone/confirm-delete.js";
10
10
  import { useMilestonePatch as Z } from "./api/patch-milestone.js";
11
11
  import ee from "./edit-milestone.js";
12
12
  import { parse as te } from "../../../../../node_modules/date-fns/parse.js";
13
- const v = {
13
+ const P = {
14
14
  DELETE_CONFIRM: "delete_confirm",
15
15
  EDIT: "edit"
16
16
  }, oe = q(
17
17
  ({
18
- milestoneName: I,
18
+ milestoneName: v,
19
19
  milestoneId: e,
20
- milestoneDueDate: u,
21
- studentId: E,
22
- isMilestoneChaptersListEditable: g,
20
+ milestoneDueDate: p,
21
+ studentId: u,
22
+ isMilestoneChaptersListEditable: I,
23
23
  isMilestoneDateEditable: x,
24
- isClassOngoing: a,
24
+ isClassOngoing: E,
25
25
  onDelete: F,
26
- analyticsProps: _,
27
- canDelete: w,
28
- milestoneState: A,
29
- studentClassroomId: L,
30
- courseStream: M
26
+ analyticsProps: M,
27
+ canDelete: O,
28
+ milestoneState: w,
29
+ studentClassroomId: A,
30
+ courseStream: _
31
31
  }) => {
32
- const [D, O] = s("edit"), [t, R] = s(u), [r, h] = s(!1), [c, C] = s(!1), [l, m] = s(""), o = f(
32
+ const [D, L] = s("edit"), [t, R] = s(p), [i, h] = s(!1), [r, C] = s(!1), [c, l] = s(""), o = f(
33
33
  () => Math.floor((/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0) / 1e3),
34
34
  []
35
- ), n = f(
35
+ ), a = f(
36
36
  () => o + K,
37
37
  [o]
38
- ), { dispatchInClassAction: T } = B({ studentClassroomId: L }), V = t !== u, S = i(() => {
39
- r && h(!1), c && C(!1);
40
- }, [r, c]), k = i(
41
- (d) => {
42
- if (d) {
38
+ ), { dispatchInClassAction: T } = B({ studentClassroomId: A }), V = t !== p, g = n(() => {
39
+ i && h(!1), r && C(!1);
40
+ }, [i, r]), k = n(
41
+ (m) => {
42
+ if (m) {
43
43
  C(!0);
44
44
  return;
45
45
  }
46
46
  Q({
47
47
  milestone_state_group: "LIVE",
48
- with_plan: !0,
49
- course_stream: M,
50
- student_id: E,
51
- in_class: a
48
+ course_stream: _,
49
+ student_id: u
52
50
  }), h(!0), T({
53
51
  eventName: z.MILESTONE_EDITED,
54
52
  eventPayload: {
@@ -56,59 +54,59 @@ const v = {
56
54
  }
57
55
  });
58
56
  },
59
- [T, a, e, E, M]
60
- ), { patch: y, isProcessing: b } = Z({
57
+ [T, e, u, _]
58
+ ), { patch: S, isProcessing: b } = Z({
61
59
  onComplete: k
62
- }), j = i(
63
- (d) => {
64
- S();
65
- const N = d.target.value;
66
- if (!N) return;
67
- const p = te(N, "yyyy-MM-dd", /* @__PURE__ */ new Date()).getTime() / 1e3;
68
- l && p >= o && p < n && m(""), R(p);
60
+ }), j = n(
61
+ (m) => {
62
+ g();
63
+ const y = m.target.value;
64
+ if (!y) return;
65
+ const d = te(y, "yyyy-MM-dd", /* @__PURE__ */ new Date()).getTime() / 1e3;
66
+ c && d >= o && d < a && l(""), R(d);
69
67
  },
70
- [l, S, n, o]
71
- ), U = i(() => {
72
- if (t < o || t > n) {
73
- t < o ? m("Please enter a future date") : m("Please select a date within the next year");
68
+ [c, g, a, o]
69
+ ), U = n(() => {
70
+ if (t < o || t > a) {
71
+ t < o ? l("Please enter a future date") : l("Please select a date within the next year");
74
72
  return;
75
73
  }
76
- y(e, {
74
+ S(e, {
77
75
  milestone_date_ts: t
78
76
  });
79
77
  }, [
80
78
  e,
81
79
  t,
82
- n,
80
+ a,
83
81
  o,
84
- y
82
+ S
85
83
  ]), Y = () => {
86
- O(v.DELETE_CONFIRM);
84
+ L(P.DELETE_CONFIRM);
87
85
  }, H = f(() => ({
88
- ..._,
86
+ ...M,
89
87
  milestone_id: e,
90
88
  temporary_milestone_id: e,
91
- is_student_class_ongoing: a
92
- }), [_, a, e]), W = J(H);
89
+ is_student_class_ongoing: E
90
+ }), [M, E, e]), W = J(H);
93
91
  return /* @__PURE__ */ $(G.Provider, { value: W, children: [
94
- D === v.DELETE_CONFIRM && /* @__PURE__ */ P(X, { milestoneId: e, onDelete: F }),
95
- D === "edit" && /* @__PURE__ */ P(
92
+ D === P.DELETE_CONFIRM && /* @__PURE__ */ N(X, { milestoneId: e, onDelete: F }),
93
+ D === "edit" && /* @__PURE__ */ N(
96
94
  ee,
97
95
  {
98
- inputMilestoneName: I,
96
+ inputMilestoneName: v,
99
97
  areDateUpdatesDisabled: !x,
100
98
  handleDateChange: j,
101
99
  inputMilestoneDate: t,
102
100
  anyFieldChanged: V,
103
101
  isProcessing: b,
104
- isDataPatched: r,
105
- isMilestoneChaptersListEditable: g,
102
+ isDataPatched: i,
103
+ isMilestoneChaptersListEditable: I,
106
104
  onSave: U,
107
- isPatchingFailed: c,
105
+ isPatchingFailed: r,
108
106
  onDeleteOptionClick: Y,
109
- errorMessage: l,
110
- canDelete: w,
111
- milestoneState: A
107
+ errorMessage: c,
108
+ canDelete: O,
109
+ milestoneState: w
112
110
  }
113
111
  )
114
112
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/features/milestone/edit/comps/edit-milestone-modal/index.tsx"],"sourcesContent":["import type { IEditMilestoneModalProps } from './edit-milestone-modal-types';\nimport type { ChangeEvent } from 'react';\n\nimport { parse } from 'date-fns';\nimport React, { memo, useCallback, useMemo, useState } from 'react';\n\nimport { EVENTS } from '../../../../communication/pub-sub/constants';\nimport { useInClassActionDispatcher } from '../../../../communication/pub-sub/hooks';\nimport UIContext from '../../../../ui/context/context';\nimport useTrackingContext from '../../../../ui/context/use-tracking-context';\nimport { ONE_YEAR_TIMESTAMP_IN_SECONDS } from '../../../constants';\nimport { invalidateMilestonesData } from '../../../milestone-list-container/api/get-milestones';\nimport ConfirmDelete from '../delete-milestone/confirm-delete';\nimport { useMilestonePatch } from './api/patch-milestone';\nimport EditMilestone from './edit-milestone';\n\nconst VIEWS = {\n DELETE_CONFIRM: 'delete_confirm',\n EDIT: 'edit',\n};\n\n// https://github.com/cuemath/package-leap/issues/409\nconst EditDeleteMilestone: React.FC<IEditMilestoneModalProps> = memo(\n ({\n milestoneName,\n milestoneId,\n milestoneDueDate,\n studentId,\n isMilestoneChaptersListEditable,\n isMilestoneDateEditable,\n isClassOngoing,\n onDelete,\n analyticsProps,\n canDelete,\n milestoneState,\n studentClassroomId,\n courseStream,\n }) => {\n const [view, setView] = useState<(typeof VIEWS)[keyof typeof VIEWS]>('edit');\n\n const [inputMilestoneDate, setMilestoneDate] = useState(milestoneDueDate);\n const [isDataPatched, setIsDataPatched] = useState(false);\n const [isPatchingFailed, setIsPatchingFailed] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const todayTimestampSeconds = useMemo(\n () => Math.floor(new Date().setHours(0, 0, 0, 0) / 1000),\n [],\n );\n const oneYearFutureTimestampSeconds = useMemo(\n () => todayTimestampSeconds + ONE_YEAR_TIMESTAMP_IN_SECONDS,\n [todayTimestampSeconds],\n );\n\n const { dispatchInClassAction } = useInClassActionDispatcher({ studentClassroomId });\n\n const anyFieldChanged = inputMilestoneDate !== milestoneDueDate;\n\n const handleClearState = useCallback(() => {\n if (isDataPatched) {\n setIsDataPatched(false);\n }\n\n if (isPatchingFailed) {\n setIsPatchingFailed(false);\n }\n }, [isDataPatched, isPatchingFailed]);\n\n const handleOnComplete = useCallback(\n (errorMsg: string | null) => {\n if (errorMsg) {\n setIsPatchingFailed(true);\n\n return;\n }\n\n invalidateMilestonesData({\n milestone_state_group: 'LIVE',\n with_plan: true,\n course_stream: courseStream,\n student_id: studentId,\n in_class: isClassOngoing,\n });\n setIsDataPatched(true);\n dispatchInClassAction({\n eventName: EVENTS.MILESTONE_EDITED,\n eventPayload: {\n milestoneId,\n },\n });\n },\n [dispatchInClassAction, isClassOngoing, milestoneId, studentId, courseStream],\n );\n\n const { patch: updateMilestone, isProcessing } = useMilestonePatch({\n onComplete: handleOnComplete,\n });\n\n const handleDateChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleClearState();\n const value = e.target.value;\n\n if (!value) return;\n\n const timestampInSeconds = parse(value, 'yyyy-MM-dd', new Date()).getTime() / 1000;\n\n if (\n errorMessage &&\n timestampInSeconds >= todayTimestampSeconds &&\n timestampInSeconds < oneYearFutureTimestampSeconds\n ) {\n setErrorMessage('');\n }\n\n setMilestoneDate(timestampInSeconds);\n },\n [errorMessage, handleClearState, oneYearFutureTimestampSeconds, todayTimestampSeconds],\n );\n\n const onSave = useCallback(() => {\n if (\n inputMilestoneDate < todayTimestampSeconds ||\n inputMilestoneDate > oneYearFutureTimestampSeconds\n ) {\n if (inputMilestoneDate < todayTimestampSeconds) {\n setErrorMessage('Please enter a future date');\n } else {\n setErrorMessage('Please select a date within the next year');\n }\n\n return;\n }\n\n updateMilestone(milestoneId, {\n milestone_date_ts: inputMilestoneDate,\n });\n }, [\n milestoneId,\n inputMilestoneDate,\n oneYearFutureTimestampSeconds,\n todayTimestampSeconds,\n updateMilestone,\n ]);\n\n const onDeleteOptionClick = () => {\n setView(VIEWS.DELETE_CONFIRM);\n };\n\n const commonAnalytics = useMemo(() => {\n return {\n ...analyticsProps,\n milestone_id: milestoneId,\n temporary_milestone_id: milestoneId,\n is_student_class_ongoing: isClassOngoing,\n };\n }, [analyticsProps, isClassOngoing, milestoneId]);\n\n const analyticsContext = useTrackingContext(commonAnalytics);\n\n return (\n <UIContext.Provider value={analyticsContext}>\n {view === VIEWS.DELETE_CONFIRM && (\n <ConfirmDelete milestoneId={milestoneId} onDelete={onDelete} />\n )}\n\n {view === 'edit' && (\n <EditMilestone\n inputMilestoneName={milestoneName}\n areDateUpdatesDisabled={!isMilestoneDateEditable}\n handleDateChange={handleDateChange}\n inputMilestoneDate={inputMilestoneDate}\n anyFieldChanged={anyFieldChanged}\n isProcessing={isProcessing}\n isDataPatched={isDataPatched}\n isMilestoneChaptersListEditable={isMilestoneChaptersListEditable}\n onSave={onSave}\n isPatchingFailed={isPatchingFailed}\n onDeleteOptionClick={onDeleteOptionClick}\n errorMessage={errorMessage}\n canDelete={canDelete}\n milestoneState={milestoneState}\n />\n )}\n </UIContext.Provider>\n );\n },\n);\n\nexport default EditDeleteMilestone;\n"],"names":["VIEWS","EditDeleteMilestone","memo","milestoneName","milestoneId","milestoneDueDate","studentId","isMilestoneChaptersListEditable","isMilestoneDateEditable","isClassOngoing","onDelete","analyticsProps","canDelete","milestoneState","studentClassroomId","courseStream","view","setView","useState","inputMilestoneDate","setMilestoneDate","isDataPatched","setIsDataPatched","isPatchingFailed","setIsPatchingFailed","errorMessage","setErrorMessage","todayTimestampSeconds","useMemo","oneYearFutureTimestampSeconds","ONE_YEAR_TIMESTAMP_IN_SECONDS","dispatchInClassAction","useInClassActionDispatcher","anyFieldChanged","handleClearState","useCallback","handleOnComplete","errorMsg","invalidateMilestonesData","EVENTS","updateMilestone","isProcessing","useMilestonePatch","handleDateChange","e","value","timestampInSeconds","parse","onSave","onDeleteOptionClick","commonAnalytics","analyticsContext","useTrackingContext","jsxs","UIContext","jsx","ConfirmDelete","EditMilestone","EditDeleteMilestone$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/features/milestone/edit/comps/edit-milestone-modal/index.tsx"],"sourcesContent":["import type { IEditMilestoneModalProps } from './edit-milestone-modal-types';\nimport type { ChangeEvent } from 'react';\n\nimport { parse } from 'date-fns';\nimport React, { memo, useCallback, useMemo, useState } from 'react';\n\nimport { EVENTS } from '../../../../communication/pub-sub/constants';\nimport { useInClassActionDispatcher } from '../../../../communication/pub-sub/hooks';\nimport UIContext from '../../../../ui/context/context';\nimport useTrackingContext from '../../../../ui/context/use-tracking-context';\nimport { ONE_YEAR_TIMESTAMP_IN_SECONDS } from '../../../constants';\nimport { invalidateMilestonesData } from '../../../milestone-list-container/api/get-milestones';\nimport ConfirmDelete from '../delete-milestone/confirm-delete';\nimport { useMilestonePatch } from './api/patch-milestone';\nimport EditMilestone from './edit-milestone';\n\nconst VIEWS = {\n DELETE_CONFIRM: 'delete_confirm',\n EDIT: 'edit',\n};\n\n// https://github.com/cuemath/package-leap/issues/409\nconst EditDeleteMilestone: React.FC<IEditMilestoneModalProps> = memo(\n ({\n milestoneName,\n milestoneId,\n milestoneDueDate,\n studentId,\n isMilestoneChaptersListEditable,\n isMilestoneDateEditable,\n isClassOngoing,\n onDelete,\n analyticsProps,\n canDelete,\n milestoneState,\n studentClassroomId,\n courseStream,\n }) => {\n const [view, setView] = useState<(typeof VIEWS)[keyof typeof VIEWS]>('edit');\n\n const [inputMilestoneDate, setMilestoneDate] = useState(milestoneDueDate);\n const [isDataPatched, setIsDataPatched] = useState(false);\n const [isPatchingFailed, setIsPatchingFailed] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const todayTimestampSeconds = useMemo(\n () => Math.floor(new Date().setHours(0, 0, 0, 0) / 1000),\n [],\n );\n const oneYearFutureTimestampSeconds = useMemo(\n () => todayTimestampSeconds + ONE_YEAR_TIMESTAMP_IN_SECONDS,\n [todayTimestampSeconds],\n );\n\n const { dispatchInClassAction } = useInClassActionDispatcher({ studentClassroomId });\n\n const anyFieldChanged = inputMilestoneDate !== milestoneDueDate;\n\n const handleClearState = useCallback(() => {\n if (isDataPatched) {\n setIsDataPatched(false);\n }\n\n if (isPatchingFailed) {\n setIsPatchingFailed(false);\n }\n }, [isDataPatched, isPatchingFailed]);\n\n const handleOnComplete = useCallback(\n (errorMsg: string | null) => {\n if (errorMsg) {\n setIsPatchingFailed(true);\n\n return;\n }\n\n invalidateMilestonesData({\n milestone_state_group: 'LIVE',\n course_stream: courseStream,\n student_id: studentId,\n });\n setIsDataPatched(true);\n dispatchInClassAction({\n eventName: EVENTS.MILESTONE_EDITED,\n eventPayload: {\n milestoneId,\n },\n });\n },\n [dispatchInClassAction, milestoneId, studentId, courseStream],\n );\n\n const { patch: updateMilestone, isProcessing } = useMilestonePatch({\n onComplete: handleOnComplete,\n });\n\n const handleDateChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleClearState();\n const value = e.target.value;\n\n if (!value) return;\n\n const timestampInSeconds = parse(value, 'yyyy-MM-dd', new Date()).getTime() / 1000;\n\n if (\n errorMessage &&\n timestampInSeconds >= todayTimestampSeconds &&\n timestampInSeconds < oneYearFutureTimestampSeconds\n ) {\n setErrorMessage('');\n }\n\n setMilestoneDate(timestampInSeconds);\n },\n [errorMessage, handleClearState, oneYearFutureTimestampSeconds, todayTimestampSeconds],\n );\n\n const onSave = useCallback(() => {\n if (\n inputMilestoneDate < todayTimestampSeconds ||\n inputMilestoneDate > oneYearFutureTimestampSeconds\n ) {\n if (inputMilestoneDate < todayTimestampSeconds) {\n setErrorMessage('Please enter a future date');\n } else {\n setErrorMessage('Please select a date within the next year');\n }\n\n return;\n }\n\n updateMilestone(milestoneId, {\n milestone_date_ts: inputMilestoneDate,\n });\n }, [\n milestoneId,\n inputMilestoneDate,\n oneYearFutureTimestampSeconds,\n todayTimestampSeconds,\n updateMilestone,\n ]);\n\n const onDeleteOptionClick = () => {\n setView(VIEWS.DELETE_CONFIRM);\n };\n\n const commonAnalytics = useMemo(() => {\n return {\n ...analyticsProps,\n milestone_id: milestoneId,\n temporary_milestone_id: milestoneId,\n is_student_class_ongoing: isClassOngoing,\n };\n }, [analyticsProps, isClassOngoing, milestoneId]);\n\n const analyticsContext = useTrackingContext(commonAnalytics);\n\n return (\n <UIContext.Provider value={analyticsContext}>\n {view === VIEWS.DELETE_CONFIRM && (\n <ConfirmDelete milestoneId={milestoneId} onDelete={onDelete} />\n )}\n\n {view === 'edit' && (\n <EditMilestone\n inputMilestoneName={milestoneName}\n areDateUpdatesDisabled={!isMilestoneDateEditable}\n handleDateChange={handleDateChange}\n inputMilestoneDate={inputMilestoneDate}\n anyFieldChanged={anyFieldChanged}\n isProcessing={isProcessing}\n isDataPatched={isDataPatched}\n isMilestoneChaptersListEditable={isMilestoneChaptersListEditable}\n onSave={onSave}\n isPatchingFailed={isPatchingFailed}\n onDeleteOptionClick={onDeleteOptionClick}\n errorMessage={errorMessage}\n canDelete={canDelete}\n milestoneState={milestoneState}\n />\n )}\n </UIContext.Provider>\n );\n },\n);\n\nexport default EditDeleteMilestone;\n"],"names":["VIEWS","EditDeleteMilestone","memo","milestoneName","milestoneId","milestoneDueDate","studentId","isMilestoneChaptersListEditable","isMilestoneDateEditable","isClassOngoing","onDelete","analyticsProps","canDelete","milestoneState","studentClassroomId","courseStream","view","setView","useState","inputMilestoneDate","setMilestoneDate","isDataPatched","setIsDataPatched","isPatchingFailed","setIsPatchingFailed","errorMessage","setErrorMessage","todayTimestampSeconds","useMemo","oneYearFutureTimestampSeconds","ONE_YEAR_TIMESTAMP_IN_SECONDS","dispatchInClassAction","useInClassActionDispatcher","anyFieldChanged","handleClearState","useCallback","handleOnComplete","errorMsg","invalidateMilestonesData","EVENTS","updateMilestone","isProcessing","useMilestonePatch","handleDateChange","e","value","timestampInSeconds","parse","onSave","onDeleteOptionClick","commonAnalytics","analyticsContext","useTrackingContext","jsxs","UIContext","jsx","ConfirmDelete","EditMilestone","EditDeleteMilestone$1"],"mappings":"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"}