@cuemath/leap 3.2.22-m → 3.2.23-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.
- package/dist/assets/illustrations/illustrations.js +6 -0
- package/dist/assets/illustrations/illustrations.js.map +1 -1
- package/dist/assets/images/images.js +10 -0
- package/dist/assets/images/images.js.map +1 -1
- package/dist/assets/line-icons/icons/cue-coin.js +182 -0
- package/dist/assets/line-icons/icons/cue-coin.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-common-icon.js +26 -0
- package/dist/assets/line-icons/icons/wins-common-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-epic-icon.js +25 -0
- package/dist/assets/line-icons/icons/wins-epic-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-legendary-icon.js +25 -0
- package/dist/assets/line-icons/icons/wins-legendary-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-mystery-icon.js +105 -0
- package/dist/assets/line-icons/icons/wins-mystery-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-mythic-icon.js +28 -0
- package/dist/assets/line-icons/icons/wins-mythic-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-rare-icon.js +28 -0
- package/dist/assets/line-icons/icons/wins-rare-icon.js.map +1 -0
- package/dist/assets/lottie/lottie.js +6 -1
- package/dist/assets/lottie/lottie.js.map +1 -1
- package/dist/features/notification/notification.js +129 -0
- package/dist/features/notification/notification.js.map +1 -0
- package/dist/features/ui/carousal/carousal-styles.js +45 -0
- package/dist/features/ui/carousal/carousal-styles.js.map +1 -0
- package/dist/features/ui/carousal/carousal.js +76 -0
- package/dist/features/ui/carousal/carousal.js.map +1 -0
- package/dist/features/ui/constants/z-index.js +5 -3
- package/dist/features/ui/constants/z-index.js.map +1 -1
- package/dist/features/ui/dot-lottie-animations/dot-lottie-animation.js +44 -29
- package/dist/features/ui/dot-lottie-animations/dot-lottie-animation.js.map +1 -1
- package/dist/features/ui/inputs/base-select-input/base-select-input.js +77 -67
- package/dist/features/ui/inputs/base-select-input/base-select-input.js.map +1 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js +108 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js +94 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js +182 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js +35 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js +82 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js.map +1 -0
- package/dist/features/wins-dashboard/constants.js +161 -0
- package/dist/features/wins-dashboard/constants.js.map +1 -0
- package/dist/features/wins-dashboard/header/wins-header.js +95 -0
- package/dist/features/wins-dashboard/header/wins-header.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js +65 -0
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-hook.js +107 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-hook.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js +135 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/student-badge.js +161 -0
- package/dist/features/wins-dashboard/student-badges/student-badge.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js +136 -0
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js.map +1 -0
- package/dist/index.d.ts +218 -0
- package/dist/index.js +619 -605
- package/dist/index.js.map +1 -1
- package/dist/static/awesome.4239f583.json +1 -0
- package/dist/static/black-belt.81b3ebf9.png +0 -0
- package/dist/static/blue-belt.508a1b4b.png +0 -0
- package/dist/static/brown-belt.09bb7e93.png +0 -0
- package/dist/static/clapping-hands.17e7ecf0.json +1 -0
- package/dist/static/common.9e8ceef1.svg +1 -0
- package/dist/static/cool.cd6921bb.json +1 -0
- package/dist/static/epic.37a0265a.svg +1 -0
- package/dist/static/green-belt.5501296f.png +0 -0
- package/dist/static/legendary.f15d09ca.svg +1 -0
- package/dist/static/like-button.281a2618.json +1 -0
- package/dist/static/mastered-badge.91d25e92.png +0 -0
- package/dist/static/mystery.81ada5fb.svg +1 -0
- package/dist/static/mythic.58ba0ae0.svg +1 -0
- package/dist/static/orange-belt.1fefcc8c.png +0 -0
- package/dist/static/purple-belt.e15611b4.png +0 -0
- package/dist/static/rare.1ffaa311.svg +1 -0
- package/dist/static/red-belt.11f841d9.png +0 -0
- package/dist/static/star-strike-emoji.c0b31028.json +1 -0
- package/dist/static/trophy.5ef1853a.json +1 -0
- package/dist/static/white-belt.ea93103e.png +0 -0
- package/dist/static/yellow-belt.0c47b8cc.png +0 -0
- package/package.json +1 -1
@@ -1,114 +1,124 @@
|
|
1
|
-
import { jsxs as
|
2
|
-
import { useMemo as
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import { Input as
|
7
|
-
import { Container as
|
8
|
-
import
|
9
|
-
import
|
10
|
-
const
|
1
|
+
import { jsxs as V, jsx as t } from "react/jsx-runtime";
|
2
|
+
import { useMemo as G, useRef as A, useCallback as d } from "react";
|
3
|
+
import J from "../../../../assets/line-icons/icons/cross.js";
|
4
|
+
import K from "../../hooks/use-context-menu-click-handler.js";
|
5
|
+
import N from "../base-input/base-input.js";
|
6
|
+
import { Input as P } from "../text-input/text-input-styled.js";
|
7
|
+
import { Container as Q, OptionsContainer as U, OptionsWrapper as Y, StyledChevronDownIcon as Z, StyledDownIcon as _ } from "./base-select-input-styled.js";
|
8
|
+
import ee from "./select-option/select-option.js";
|
9
|
+
import ne from "./select-section/select-section.js";
|
10
|
+
const he = (E) => {
|
11
11
|
const {
|
12
|
-
label:
|
13
|
-
value:
|
12
|
+
label: b,
|
13
|
+
value: i,
|
14
14
|
options: u,
|
15
15
|
searchable: n = !1,
|
16
16
|
searchText: g,
|
17
|
-
onCloseWithoutSelection:
|
18
|
-
onSearchTextChange:
|
19
|
-
onChange:
|
17
|
+
onCloseWithoutSelection: L,
|
18
|
+
onSearchTextChange: r,
|
19
|
+
onChange: v,
|
20
20
|
renderAs: h,
|
21
|
-
width:
|
22
|
-
widthX:
|
21
|
+
width: R,
|
22
|
+
widthX: j,
|
23
23
|
disabled: p,
|
24
|
-
willShowMessage:
|
25
|
-
mandatory:
|
26
|
-
size:
|
24
|
+
willShowMessage: z,
|
25
|
+
mandatory: B,
|
26
|
+
size: w = "regular",
|
27
27
|
shape: m,
|
28
28
|
theme: f = "light",
|
29
|
-
isTransparent:
|
29
|
+
isTransparent: S = !1,
|
30
30
|
renderOptionsAs: $ = "list",
|
31
|
-
errorMessage:
|
32
|
-
|
33
|
-
|
31
|
+
errorMessage: D,
|
32
|
+
inputLabelOverrides: C
|
33
|
+
} = E, s = $ === "section-list" && u, l = $ === "list" && u, I = G(() => {
|
34
|
+
var e;
|
34
35
|
if (n) return g;
|
35
|
-
if (
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
if (s) {
|
37
|
+
let o, a;
|
38
|
+
for (const T of s) {
|
39
|
+
const y = T.data.find(({ id: q }) => q === i);
|
40
|
+
if (y) {
|
41
|
+
o = T, a = y;
|
42
|
+
break;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return o && C ? C(o, a) : (a == null ? void 0 : a.label) || "";
|
46
|
+
}
|
47
|
+
if (l) return (e = l.find((o) => o.id === i)) == null ? void 0 : e.label;
|
48
|
+
}, [n, g, s, l, C, i]), k = A(null), x = A(null), { menuVisible: c, onMenuClick: F, hideMenu: O } = K(
|
49
|
+
k,
|
40
50
|
void 0,
|
41
51
|
!n,
|
42
|
-
|
52
|
+
L,
|
43
53
|
p
|
44
|
-
),
|
54
|
+
), W = d(
|
45
55
|
(e) => {
|
46
|
-
n &&
|
56
|
+
n && r && r(e.target.value);
|
47
57
|
},
|
48
|
-
[
|
49
|
-
),
|
50
|
-
(e,
|
51
|
-
|
58
|
+
[r, n]
|
59
|
+
), M = d(
|
60
|
+
(e, o) => {
|
61
|
+
O(), v(e, o);
|
52
62
|
},
|
53
|
-
[
|
54
|
-
),
|
63
|
+
[O, v]
|
64
|
+
), X = d((e) => {
|
55
65
|
e.target.select(), setTimeout(() => {
|
56
66
|
e.target.scrollIntoView({
|
57
67
|
behavior: "smooth"
|
58
68
|
});
|
59
69
|
}, 300);
|
60
|
-
}, []),
|
70
|
+
}, []), H = d(() => {
|
61
71
|
var e;
|
62
|
-
|
63
|
-
}, [
|
64
|
-
return /* @__PURE__ */
|
72
|
+
r && (r(""), (e = x.current) == null || e.focus());
|
73
|
+
}, [r]);
|
74
|
+
return /* @__PURE__ */ V(Q, { ref: k, $width: R, $widthX: j, onClick: F, children: [
|
65
75
|
/* @__PURE__ */ t(
|
66
|
-
|
76
|
+
N,
|
67
77
|
{
|
68
78
|
renderAs: h,
|
69
|
-
label:
|
79
|
+
label: b,
|
70
80
|
stickyLabel: !0,
|
71
81
|
disabled: p,
|
72
|
-
willShowMessage:
|
73
|
-
size:
|
74
|
-
mandatory:
|
82
|
+
willShowMessage: z,
|
83
|
+
size: w,
|
84
|
+
mandatory: B,
|
75
85
|
shape: m,
|
76
|
-
isTransparent:
|
86
|
+
isTransparent: S,
|
77
87
|
inputElement: /* @__PURE__ */ t(
|
78
|
-
|
88
|
+
P,
|
79
89
|
{
|
80
90
|
ref: x,
|
81
91
|
$renderAs: h,
|
82
|
-
$size:
|
83
|
-
placeholder: I ? "" :
|
92
|
+
$size: w,
|
93
|
+
placeholder: I ? "" : b,
|
84
94
|
disabled: p,
|
85
95
|
readOnly: !n,
|
86
96
|
value: I ?? "",
|
87
|
-
onFocus: n ?
|
88
|
-
onChange: n ?
|
89
|
-
$isTransparent:
|
97
|
+
onFocus: n ? X : void 0,
|
98
|
+
onChange: n ? W : void 0,
|
99
|
+
$isTransparent: S
|
90
100
|
}
|
91
101
|
),
|
92
|
-
siblingElement: n &&
|
93
|
-
errorMessage:
|
102
|
+
siblingElement: n && c ? /* @__PURE__ */ t(J, { onClick: H }) : m === "curved" || m === "borderLess" ? /* @__PURE__ */ t(Z, { $menuVisible: c, pointerEvents: "none" }) : /* @__PURE__ */ t(_, { $menuVisible: c, pointerEvents: "none" }),
|
103
|
+
errorMessage: D
|
94
104
|
}
|
95
105
|
),
|
96
|
-
u.length > 0 && /* @__PURE__ */ t(
|
97
|
-
|
98
|
-
|
106
|
+
u.length > 0 && /* @__PURE__ */ t(U, { $visible: c, children: /* @__PURE__ */ V(Y, { $renderAs: h, $theme: f, children: [
|
107
|
+
s && /* @__PURE__ */ t(
|
108
|
+
ne,
|
99
109
|
{
|
100
|
-
sectionOptions:
|
110
|
+
sectionOptions: s,
|
101
111
|
theme: f,
|
102
|
-
value:
|
103
|
-
onChange:
|
112
|
+
value: i,
|
113
|
+
onChange: M
|
104
114
|
}
|
105
115
|
),
|
106
|
-
|
107
|
-
|
116
|
+
l && l.map((e) => /* @__PURE__ */ t(
|
117
|
+
ee,
|
108
118
|
{
|
109
119
|
option: e,
|
110
|
-
selected: e.id ===
|
111
|
-
onChange:
|
120
|
+
selected: e.id === i,
|
121
|
+
onChange: M,
|
112
122
|
theme: f
|
113
123
|
},
|
114
124
|
e.id
|
@@ -117,6 +127,6 @@ const ae = (y) => {
|
|
117
127
|
] });
|
118
128
|
};
|
119
129
|
export {
|
120
|
-
|
130
|
+
he as default
|
121
131
|
};
|
122
132
|
//# sourceMappingURL=base-select-input.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"base-select-input.js","sources":["../../../../../src/features/ui/inputs/base-select-input/base-select-input.tsx"],"sourcesContent":["import type { ISectionOption } from '../../section-list/section-list-types';\nimport type { IBaseSelectInputProps, ISelectOption } from './base-select-input-types';\nimport type { ChangeEvent, FocusEvent, ReactElement } from 'react';\n\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport CrossIcon from '../../../../assets/line-icons/icons/cross';\nimport useContextMenuClickHandler from '../../hooks/use-context-menu-click-handler';\nimport BaseInput from '../base-input/base-input';\nimport { Input } from '../text-input/text-input-styled';\nimport * as Styled from './base-select-input-styled';\nimport SelectOption from './select-option/select-option';\nimport SelectSection from './select-section/select-section';\n\nconst BaseSelectInput = <IDType extends string | number>(\n props: IBaseSelectInputProps<IDType>,\n): ReactElement => {\n const {\n label,\n value,\n options,\n searchable = false,\n searchText,\n onCloseWithoutSelection,\n onSearchTextChange,\n onChange,\n renderAs,\n width,\n widthX,\n disabled,\n willShowMessage,\n mandatory,\n size = 'regular',\n shape,\n theme = 'light',\n isTransparent = false,\n renderOptionsAs = 'list',\n errorMessage,\n } = props;\n\n const sectionOptions =\n renderOptionsAs === 'section-list' && (options as ISectionOption<ISelectOption<IDType>>[]);\n const selectOptions = renderOptionsAs === 'list' && (options as ISelectOption<IDType>[]);\n\n const inputValue = useMemo(() => {\n if (searchable) return searchText;\n\n if (sectionOptions) {\n
|
1
|
+
{"version":3,"file":"base-select-input.js","sources":["../../../../../src/features/ui/inputs/base-select-input/base-select-input.tsx"],"sourcesContent":["import type { ISectionOption } from '../../section-list/section-list-types';\nimport type { IBaseSelectInputProps, ISelectOption } from './base-select-input-types';\nimport type { ChangeEvent, FocusEvent, ReactElement } from 'react';\n\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport CrossIcon from '../../../../assets/line-icons/icons/cross';\nimport useContextMenuClickHandler from '../../hooks/use-context-menu-click-handler';\nimport BaseInput from '../base-input/base-input';\nimport { Input } from '../text-input/text-input-styled';\nimport * as Styled from './base-select-input-styled';\nimport SelectOption from './select-option/select-option';\nimport SelectSection from './select-section/select-section';\n\nconst BaseSelectInput = <IDType extends string | number>(\n props: IBaseSelectInputProps<IDType>,\n): ReactElement => {\n const {\n label,\n value,\n options,\n searchable = false,\n searchText,\n onCloseWithoutSelection,\n onSearchTextChange,\n onChange,\n renderAs,\n width,\n widthX,\n disabled,\n willShowMessage,\n mandatory,\n size = 'regular',\n shape,\n theme = 'light',\n isTransparent = false,\n renderOptionsAs = 'list',\n errorMessage,\n inputLabelOverrides,\n } = props;\n\n const sectionOptions =\n renderOptionsAs === 'section-list' && (options as ISectionOption<ISelectOption<IDType>>[]);\n const selectOptions = renderOptionsAs === 'list' && (options as ISelectOption<IDType>[]);\n\n const inputValue = useMemo(() => {\n if (searchable) return searchText;\n\n if (sectionOptions) {\n let foundSection, foundOption;\n\n for (const section of sectionOptions) {\n const option = section.data.find(({ id }) => id === value);\n\n if (option) {\n foundSection = section;\n foundOption = option;\n\n break;\n }\n }\n\n if (foundSection && inputLabelOverrides)\n return inputLabelOverrides(foundSection, foundOption);\n\n return foundOption?.label || '';\n }\n\n if (selectOptions) return selectOptions.find(option => option.id === value)?.label;\n }, [searchable, searchText, sectionOptions, selectOptions, inputLabelOverrides, value]);\n\n const containerRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;\n const inputRef = useRef<HTMLInputElement>(null) as React.RefObject<HTMLInputElement>;\n const { menuVisible, onMenuClick, hideMenu } = useContextMenuClickHandler(\n containerRef,\n undefined,\n !searchable,\n onCloseWithoutSelection,\n disabled,\n );\n\n const handleTextChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (searchable && onSearchTextChange) {\n onSearchTextChange(e.target.value);\n }\n },\n [onSearchTextChange, searchable],\n );\n\n const handleChange = useCallback<IBaseSelectInputProps<IDType>['onChange']>(\n (id, option) => {\n hideMenu();\n onChange(id, option);\n },\n [hideMenu, onChange],\n );\n\n const handleFocus = useCallback((e: FocusEvent<HTMLInputElement>) => {\n e.target.select();\n setTimeout(() => {\n e.target.scrollIntoView({\n behavior: 'smooth',\n });\n }, 300);\n }, []);\n\n const handleClear = useCallback(() => {\n if (onSearchTextChange) {\n onSearchTextChange('');\n inputRef.current?.focus();\n }\n }, [onSearchTextChange]);\n\n const downIcon =\n shape === 'curved' || shape === 'borderLess' ? (\n <Styled.StyledChevronDownIcon $menuVisible={menuVisible} pointerEvents=\"none\" />\n ) : (\n <Styled.StyledDownIcon $menuVisible={menuVisible} pointerEvents=\"none\" />\n );\n\n return (\n <Styled.Container ref={containerRef} $width={width} $widthX={widthX} onClick={onMenuClick}>\n <BaseInput\n renderAs={renderAs}\n label={label}\n stickyLabel={true}\n disabled={disabled}\n willShowMessage={willShowMessage}\n size={size}\n mandatory={mandatory}\n shape={shape}\n isTransparent={isTransparent}\n inputElement={\n <Input\n ref={inputRef}\n $renderAs={renderAs}\n $size={size}\n placeholder={inputValue ? '' : label}\n disabled={disabled}\n readOnly={!searchable}\n value={inputValue ?? ''}\n onFocus={searchable ? handleFocus : undefined}\n onChange={searchable ? handleTextChange : undefined}\n $isTransparent={isTransparent}\n />\n }\n siblingElement={searchable && menuVisible ? <CrossIcon onClick={handleClear} /> : downIcon}\n errorMessage={errorMessage}\n />\n\n {options.length > 0 && (\n <Styled.OptionsContainer $visible={menuVisible}>\n <Styled.OptionsWrapper $renderAs={renderAs} $theme={theme}>\n {sectionOptions && (\n <SelectSection<IDType>\n sectionOptions={sectionOptions}\n theme={theme}\n value={value}\n onChange={handleChange}\n />\n )}\n\n {selectOptions &&\n selectOptions.map(option => (\n <SelectOption<IDType>\n key={option.id}\n option={option}\n selected={option.id === value}\n onChange={handleChange}\n theme={theme}\n />\n ))}\n </Styled.OptionsWrapper>\n </Styled.OptionsContainer>\n )}\n </Styled.Container>\n );\n};\n\nexport default BaseSelectInput;\n"],"names":["BaseSelectInput","props","label","value","options","searchable","searchText","onCloseWithoutSelection","onSearchTextChange","onChange","renderAs","width","widthX","disabled","willShowMessage","mandatory","size","shape","theme","isTransparent","renderOptionsAs","errorMessage","inputLabelOverrides","sectionOptions","selectOptions","inputValue","useMemo","foundSection","foundOption","section","option","id","_a","containerRef","useRef","inputRef","menuVisible","onMenuClick","hideMenu","useContextMenuClickHandler","handleTextChange","useCallback","handleChange","handleFocus","handleClear","jsxs","Styled.Container","jsx","BaseInput","Input","CrossIcon","Styled.StyledChevronDownIcon","Styled.StyledDownIcon","Styled.OptionsContainer","Styled.OptionsWrapper","SelectSection","SelectOption"],"mappings":"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"}
|
@@ -0,0 +1,108 @@
|
|
1
|
+
import { jsxs as y, jsx as a } from "react/jsx-runtime";
|
2
|
+
import h, { css as i } from "styled-components";
|
3
|
+
import b from "../../ui/layout/flex-view.js";
|
4
|
+
import l from "../../ui/separator/separator.js";
|
5
|
+
import { StickerMap as A, MATH_REWARDS as k, INSTRUCTION_REWARDS as R, SCREEN_SIZES as m } from "../constants.js";
|
6
|
+
import T from "./belts.js";
|
7
|
+
import p from "./reward-elements.js";
|
8
|
+
const D = h(b)`
|
9
|
+
justify-content: space-between;
|
10
|
+
margin: 110px 120px;
|
11
|
+
margin-bottom: 48px;
|
12
|
+
${({ $containerStyle: t }) => t}
|
13
|
+
|
14
|
+
${({ $renderOnTeacher: t }) => t && i`
|
15
|
+
margin: 50px auto;
|
16
|
+
padding: 0 16px;
|
17
|
+
`}
|
18
|
+
`, _ = (t) => {
|
19
|
+
if (!(t && Array.isArray(t) && t.length > 0))
|
20
|
+
return { elements: [] };
|
21
|
+
const e = {
|
22
|
+
elements: []
|
23
|
+
};
|
24
|
+
return t.forEach((n) => {
|
25
|
+
const { aggregate_for: r, aggregates: s } = n || {}, { name: o } = r || {};
|
26
|
+
o && [...k, ...R].includes(o) && e.elements.push({ name: o, count: s || 0 });
|
27
|
+
}), e;
|
28
|
+
}, C = (t) => {
|
29
|
+
if (!(t && Array.isArray(t) && t.length > 0))
|
30
|
+
return { stickers: [] };
|
31
|
+
const e = {};
|
32
|
+
return t.forEach((n) => {
|
33
|
+
const { badge_id: r, name: s } = n;
|
34
|
+
r && s && (e[r] === void 0 ? e[r] = { name: s, count: 1 } : e[r] = { name: s, count: e[r].count + 1 });
|
35
|
+
}), { stickers: Object.values(e) };
|
36
|
+
}, $ = (t) => t >= m.LAPTOPL ? {
|
37
|
+
containerStyle: i`
|
38
|
+
margin: 110px auto;
|
39
|
+
margin-bottom: 48px;
|
40
|
+
max-width: 1040px;
|
41
|
+
width: 100%;
|
42
|
+
`
|
43
|
+
} : t < m.TABLET ? {
|
44
|
+
containerStyle: i`
|
45
|
+
margin: 110px 40px;
|
46
|
+
margin-bottom: 48px;
|
47
|
+
flex-direction: column;
|
48
|
+
width: 100%;
|
49
|
+
`
|
50
|
+
} : t < m.LAPTOP ? {
|
51
|
+
containerStyle: i`
|
52
|
+
max-width: 784px;
|
53
|
+
width: 100%;
|
54
|
+
margin: 100px auto;
|
55
|
+
flex-direction: column;
|
56
|
+
`
|
57
|
+
} : {
|
58
|
+
containerStyle: i`
|
59
|
+
display: flex;
|
60
|
+
flex-direction: row;
|
61
|
+
justify-content: space-between;
|
62
|
+
margin: 110px 120px;
|
63
|
+
margin-bottom: 48px;
|
64
|
+
`
|
65
|
+
}, j = ({
|
66
|
+
curriculumHomeData: t,
|
67
|
+
rewardHomeData: c,
|
68
|
+
programStream: e = "MATH",
|
69
|
+
currentScreenWidth: n,
|
70
|
+
renderOnTeacher: r = !1
|
71
|
+
}) => {
|
72
|
+
const { data: s } = t || {}, { curriculum_map: o } = s || {}, { belts: u, goals: x } = o || {}, { data: g } = c || {}, { user_rewards: d, user_stickers: f } = g || {}, { elements: w } = _(d || []), { stickers: E } = C(f || []), { containerStyle: S } = $(n) || {};
|
73
|
+
return /* @__PURE__ */ y(
|
74
|
+
D,
|
75
|
+
{
|
76
|
+
$flexDirection: "row",
|
77
|
+
$justifyContent: "space-between",
|
78
|
+
$containerStyle: S,
|
79
|
+
$renderOnTeacher: r,
|
80
|
+
children: [
|
81
|
+
/* @__PURE__ */ a(T, { beltStats: u, goalStats: x, currentScreenWidth: n }),
|
82
|
+
/* @__PURE__ */ a(l, { width: 60, height: 30 }),
|
83
|
+
/* @__PURE__ */ a(
|
84
|
+
p,
|
85
|
+
{
|
86
|
+
elements: w,
|
87
|
+
programStream: e,
|
88
|
+
currentScreenWidth: n
|
89
|
+
}
|
90
|
+
),
|
91
|
+
/* @__PURE__ */ a(l, { width: 60, height: 30 }),
|
92
|
+
/* @__PURE__ */ a(
|
93
|
+
p,
|
94
|
+
{
|
95
|
+
elements: E,
|
96
|
+
isSticker: !0,
|
97
|
+
currentScreenWidth: n,
|
98
|
+
lotties: A
|
99
|
+
}
|
100
|
+
)
|
101
|
+
]
|
102
|
+
}
|
103
|
+
);
|
104
|
+
}, N = j;
|
105
|
+
export {
|
106
|
+
N as default
|
107
|
+
};
|
108
|
+
//# sourceMappingURL=belts-elements-stickers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"belts-elements-stickers.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.tsx"],"sourcesContent":["import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport { INSTRUCTION_REWARDS, MATH_REWARDS, SCREEN_SIZES, StickerMap } from '../constants';\nimport Belts from './belts';\nimport RewardElements from './reward-elements';\n\ninterface WrapperProps {\n $containerStyle?: ReturnType<typeof css>;\n $renderOnTeacher?: boolean;\n}\n\nconst Wrapper = styled(FlexView)<WrapperProps>`\n justify-content: space-between;\n margin: 110px 120px;\n margin-bottom: 48px;\n ${({ $containerStyle }) => $containerStyle}\n\n ${({ $renderOnTeacher }) =>\n $renderOnTeacher &&\n css`\n margin: 50px auto;\n padding: 0 16px;\n `}\n`;\n\ninterface RewardElement {\n aggregate_for?: { name?: string };\n aggregates?: number;\n}\n\ninterface StickerElement {\n badge_id?: string;\n name?: string;\n}\n\nconst getRewardElements = (\n elements: RewardElement[],\n): { elements: Array<{ name: string; count: number }> } => {\n const isElementsExist = elements && Array.isArray(elements) && elements.length > 0;\n\n if (!isElementsExist) {\n return { elements: [] };\n }\n\n const elementsData = {\n elements: [] as Array<{ name: string; count: number }>,\n };\n\n elements.forEach(item => {\n const { aggregate_for: rewardData, aggregates: totalCount } = item || {};\n const { name } = rewardData || {};\n\n if (name && [...MATH_REWARDS, ...INSTRUCTION_REWARDS].includes(name)) {\n elementsData.elements.push({ name, count: totalCount || 0 });\n }\n });\n\n return elementsData;\n};\n\nconst getRewardStickers = (\n stickers: StickerElement[],\n): { stickers: Array<{ name: string; count: number }> } => {\n const isStickersExist = stickers && Array.isArray(stickers) && stickers.length > 0;\n\n if (!isStickersExist) {\n return { stickers: [] };\n }\n\n const stickersCount: Record<string, { name: string; count: number }> = {};\n\n stickers.forEach(item => {\n const { badge_id: badgeId, name } = item;\n\n if (badgeId && name) {\n if (stickersCount[badgeId] === undefined) {\n stickersCount[badgeId] = { name, count: 1 };\n } else {\n stickersCount[badgeId] = { name, count: stickersCount[badgeId].count + 1 };\n }\n }\n });\n\n return { stickers: Object.values(stickersCount) };\n};\n\nconst getBadgeContainerConfig = (currentScreenWidth: number) => {\n if (currentScreenWidth >= SCREEN_SIZES.LAPTOPL) {\n return {\n containerStyle: css`\n margin: 110px auto;\n margin-bottom: 48px;\n max-width: 1040px;\n width: 100%;\n `,\n };\n }\n\n if (currentScreenWidth < SCREEN_SIZES.TABLET) {\n return {\n containerStyle: css`\n margin: 110px 40px;\n margin-bottom: 48px;\n flex-direction: column;\n width: 100%;\n `,\n };\n }\n\n if (currentScreenWidth < SCREEN_SIZES.LAPTOP) {\n return {\n containerStyle: css`\n max-width: 784px;\n width: 100%;\n margin: 100px auto;\n flex-direction: column;\n `,\n };\n }\n\n return {\n containerStyle: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin: 110px 120px;\n margin-bottom: 48px;\n `,\n };\n};\n\n// Types for component props\ninterface CurriculumMap {\n belts?: {\n current_belt_type?: string;\n goals_required?: number;\n };\n goals?: {\n completed_goals: number;\n total_goals: number;\n };\n}\n\ninterface CurriculumHomeData {\n data?: {\n curriculum_map?: CurriculumMap;\n };\n}\n\ninterface RewardHomeData {\n data?: {\n user_rewards?: RewardElement[];\n user_stickers?: StickerElement[];\n };\n}\n\ninterface BeltsElementsStickersProps {\n curriculumHomeData?: CurriculumHomeData;\n rewardHomeData?: RewardHomeData;\n programStream?: string;\n currentScreenWidth: number;\n renderOnTeacher?: boolean;\n}\n\nconst BeltsElementsStickers: React.FC<BeltsElementsStickersProps> = ({\n curriculumHomeData,\n rewardHomeData,\n programStream = 'MATH',\n currentScreenWidth,\n renderOnTeacher = false,\n}) => {\n const { data: curriculumData } = curriculumHomeData || {};\n const { curriculum_map: curriculumMap } = curriculumData || {};\n const { belts: beltStats, goals: goalStats } = curriculumMap || {};\n const { data: rewardHome } = rewardHomeData || {};\n const { user_rewards: rewardElementsData, user_stickers: rewardStickersData } = rewardHome || {};\n const { elements } = getRewardElements(rewardElementsData || []);\n const { stickers } = getRewardStickers(rewardStickersData || []);\n const { containerStyle } = getBadgeContainerConfig(currentScreenWidth) || {};\n\n return (\n <Wrapper\n $flexDirection=\"row\"\n $justifyContent=\"space-between\"\n $containerStyle={containerStyle}\n $renderOnTeacher={renderOnTeacher}\n >\n <Belts beltStats={beltStats} goalStats={goalStats} currentScreenWidth={currentScreenWidth} />\n <Separator width={60} height={30} />\n <RewardElements\n elements={elements}\n programStream={programStream}\n currentScreenWidth={currentScreenWidth}\n />\n <Separator width={60} height={30} />\n <RewardElements\n elements={stickers}\n isSticker\n currentScreenWidth={currentScreenWidth}\n lotties={StickerMap}\n />\n </Wrapper>\n );\n};\n\nexport default BeltsElementsStickers;\n"],"names":["Wrapper","styled","FlexView","$containerStyle","$renderOnTeacher","css","getRewardElements","elements","elementsData","item","rewardData","totalCount","name","MATH_REWARDS","INSTRUCTION_REWARDS","getRewardStickers","stickers","stickersCount","badgeId","getBadgeContainerConfig","currentScreenWidth","SCREEN_SIZES","BeltsElementsStickers","curriculumHomeData","rewardHomeData","programStream","renderOnTeacher","curriculumData","curriculumMap","beltStats","goalStats","rewardHome","rewardElementsData","rewardStickersData","containerStyle","jsxs","jsx","Belts","Separator","RewardElements","StickerMap","BeltsElementsStickers$1"],"mappings":"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"}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
import { jsx as t, jsxs as d } from "react/jsx-runtime";
|
2
|
+
import l, { css as c } from "styled-components";
|
3
|
+
import w from "../../ui/arrow-tooltip/arrow-tooltip.js";
|
4
|
+
import g from "../../ui/layout/flex-view.js";
|
5
|
+
import h from "../../ui/separator/separator.js";
|
6
|
+
import m from "../../ui/text/text.js";
|
7
|
+
import { SCREEN_SIZES as p, getBeltIcon as x } from "../constants.js";
|
8
|
+
import E from "./progress-bar-horizontal.js";
|
9
|
+
const u = "Black", y = l.div`
|
10
|
+
display: flex;
|
11
|
+
width: 100%;
|
12
|
+
flex-direction: column;
|
13
|
+
align-items: center;
|
14
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
15
|
+
width: 80%;
|
16
|
+
flex-direction: row;
|
17
|
+
`}
|
18
|
+
`, P = l(g)`
|
19
|
+
min-width: 250px;
|
20
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
21
|
+
min-width: 180px;
|
22
|
+
`}
|
23
|
+
`, _ = l(g)`
|
24
|
+
width: 120px;
|
25
|
+
align-items: center;
|
26
|
+
padding-left: 22px;
|
27
|
+
`, A = l.img`
|
28
|
+
width: 142px;
|
29
|
+
height: 110px;
|
30
|
+
${({ $isBeltsExist: e }) => !e && c`
|
31
|
+
filter: grayscale(100%);
|
32
|
+
opacity: 20%;
|
33
|
+
`};
|
34
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
35
|
+
width: 104px;
|
36
|
+
height: 80px;
|
37
|
+
`}
|
38
|
+
`, b = l(g)`
|
39
|
+
width: 250px;
|
40
|
+
`, Y = l(h)`
|
41
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
42
|
+
height: 52px;
|
43
|
+
`}
|
44
|
+
`, C = l(m)`
|
45
|
+
opacity: ${({ $isBeltsExist: e }) => !e && "50%"};
|
46
|
+
`, L = (e, s, o, r) => {
|
47
|
+
let i = `${e}/${s} goal mastered`;
|
48
|
+
const a = s - e;
|
49
|
+
return o ? e === s ? i = "Congrats! You're now a Black Belt" : r ? i = `Next Belt: ${r} ${r > 1 ? "goals" : "goal"} away` : i = e < s ? `Next Belt: ${a} ${a > 1 ? "goals" : "goal"} away` : "Congrats! You're now a Black Belt" : o || (i = "You have no belts earned"), i;
|
50
|
+
}, S = () => /* @__PURE__ */ t(m, { $renderAs: "body3", $color: "WHITE", children: "You can't earn belts for the selected program" }), j = ({ beltStats: e, goalStats: s, currentScreenWidth: o }) => {
|
51
|
+
const { current_belt_type: r, goals_required: i } = e || {}, { completed_goals: a = 0, total_goals: $ = 1 } = s || {}, n = !!r, f = n ? `${r && r.toUpperCase()} BELT` : "BELTS", B = Math.floor(a * 100 / $), T = L(a, $, n, i);
|
52
|
+
return /* @__PURE__ */ t(
|
53
|
+
w,
|
54
|
+
{
|
55
|
+
position: "bottom",
|
56
|
+
tooltipItem: S(),
|
57
|
+
renderAs: "primary",
|
58
|
+
hidden: n,
|
59
|
+
children: /* @__PURE__ */ d(y, { $currentScreenWidth: o, children: [
|
60
|
+
/* @__PURE__ */ d(P, { $currentScreenWidth: o, children: [
|
61
|
+
/* @__PURE__ */ t(m, { $renderAs: "h5", children: f }),
|
62
|
+
/* @__PURE__ */ t(h, { height: 24 }),
|
63
|
+
/* @__PURE__ */ t(_, { children: /* @__PURE__ */ t(
|
64
|
+
A,
|
65
|
+
{
|
66
|
+
$currentScreenWidth: o,
|
67
|
+
$isBeltsExist: n,
|
68
|
+
src: n ? x(r || "") : x(u),
|
69
|
+
alt: "Belt"
|
70
|
+
}
|
71
|
+
) })
|
72
|
+
] }),
|
73
|
+
/* @__PURE__ */ d(b, { children: [
|
74
|
+
/* @__PURE__ */ t(Y, { $currentScreenWidth: o, height: 38 }),
|
75
|
+
/* @__PURE__ */ t(
|
76
|
+
E,
|
77
|
+
{
|
78
|
+
progress: B,
|
79
|
+
height: 4,
|
80
|
+
backgroundColor: "GREY_1",
|
81
|
+
progressColor: n ? "GREY_4" : "GREY_2"
|
82
|
+
}
|
83
|
+
),
|
84
|
+
/* @__PURE__ */ t(h, { height: 8 }),
|
85
|
+
/* @__PURE__ */ t(C, { $isBeltsExist: n, $renderAs: "body3", $color: "GREY_4", children: T })
|
86
|
+
] })
|
87
|
+
] })
|
88
|
+
}
|
89
|
+
);
|
90
|
+
};
|
91
|
+
export {
|
92
|
+
j as default
|
93
|
+
};
|
94
|
+
//# sourceMappingURL=belts.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"belts.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts.tsx"],"sourcesContent":["import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport ArrowTooltip from '../../ui/arrow-tooltip/arrow-tooltip';\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { getBeltIcon, SCREEN_SIZES } from '../constants';\nimport ProgressBarHorizontal from './progress-bar-horizontal';\n\nconst DEFAULT_BELT_TYPE = 'Black';\n\ninterface ContainerProps {\n $currentScreenWidth: number;\n}\n\nconst Container = styled.div<ContainerProps>`\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: center;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: 80%;\n flex-direction: row;\n `}\n`;\n\ninterface HeaderContainerProps {\n $currentScreenWidth: number;\n}\n\nconst HeaderContainer = styled(FlexView)<HeaderContainerProps>`\n min-width: 250px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n min-width: 180px;\n `}\n`;\n\nconst ProfileWrapper = styled(FlexView)`\n width: 120px;\n align-items: center;\n padding-left: 22px;\n`;\n\ninterface BeltImgProps {\n $isBeltsExist: boolean;\n $currentScreenWidth: number;\n}\n\nconst BeltImg = styled.img<BeltImgProps>`\n width: 142px;\n height: 110px;\n ${({ $isBeltsExist }) =>\n !$isBeltsExist &&\n css`\n filter: grayscale(100%);\n opacity: 20%;\n `};\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: 104px;\n height: 80px;\n `}\n`;\n\nconst ProgressBarWrapper = styled(FlexView)`\n width: 250px;\n`;\n\ninterface SeparatorDivProps {\n $currentScreenWidth: number;\n}\n\nconst SeparatorDiv = styled(Separator)<SeparatorDivProps>`\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n height: 52px;\n `}\n`;\n\ninterface BeltTextProps {\n $isBeltsExist: boolean;\n}\n\nconst BeltText = styled(Text)<BeltTextProps>`\n opacity: ${({ $isBeltsExist }) => !$isBeltsExist && '50%'};\n`;\n\nconst getBarTitle = (\n completedGoals: number,\n totalGoals: number,\n isBeltsExist: boolean,\n nextBeltGoals?: number,\n): string => {\n let title = `${completedGoals}/${totalGoals} goal mastered`;\n const goalsReq = totalGoals - completedGoals;\n\n if (isBeltsExist) {\n if (completedGoals === totalGoals) {\n title = \"Congrats! You're now a Black Belt\";\n } else if (nextBeltGoals) {\n title = `Next Belt: ${nextBeltGoals} ${nextBeltGoals > 1 ? 'goals' : 'goal'} away`;\n } else {\n title =\n completedGoals < totalGoals\n ? `Next Belt: ${goalsReq} ${goalsReq > 1 ? 'goals' : 'goal'} away`\n : \"Congrats! You're now a Black Belt\";\n }\n } else if (!isBeltsExist) {\n title = 'You have no belts earned';\n }\n\n return title;\n};\n\nconst getToolTipText = () => {\n return (\n <Text $renderAs=\"body3\" $color=\"WHITE\">\n You can't earn belts for the selected program\n </Text>\n );\n};\n\ninterface BeltStats {\n current_belt_type?: string;\n goals_required?: number;\n}\n\ninterface GoalStats {\n completed_goals: number;\n total_goals: number;\n}\n\ninterface BeltsProps {\n beltStats?: BeltStats | null;\n goalStats?: GoalStats | null;\n currentScreenWidth: number;\n}\n\nconst Belts: React.FC<BeltsProps> = ({ beltStats, goalStats, currentScreenWidth }) => {\n const { current_belt_type: currentBeltType, goals_required: nextBeltGoals } = beltStats || {};\n const { completed_goals: completedGoals = 0, total_goals: totalGoals = 1 } = goalStats || {};\n\n const isBeltsExist = !!currentBeltType;\n const beltTitle = isBeltsExist\n ? `${currentBeltType && currentBeltType.toUpperCase()} BELT`\n : 'BELTS';\n const progress = Math.floor((completedGoals * 100) / totalGoals);\n const barTitle = getBarTitle(completedGoals, totalGoals, isBeltsExist, nextBeltGoals);\n\n return (\n <ArrowTooltip\n position=\"bottom\"\n tooltipItem={getToolTipText()}\n renderAs=\"primary\"\n hidden={isBeltsExist}\n >\n <Container $currentScreenWidth={currentScreenWidth}>\n <HeaderContainer $currentScreenWidth={currentScreenWidth}>\n <Text $renderAs=\"h5\">{beltTitle}</Text>\n <Separator height={24} />\n <ProfileWrapper>\n <BeltImg\n $currentScreenWidth={currentScreenWidth}\n $isBeltsExist={isBeltsExist}\n src={\n !isBeltsExist ? getBeltIcon(DEFAULT_BELT_TYPE) : getBeltIcon(currentBeltType || '')\n }\n alt=\"Belt\"\n />\n </ProfileWrapper>\n </HeaderContainer>\n <ProgressBarWrapper>\n <SeparatorDiv $currentScreenWidth={currentScreenWidth} height={38} />\n <ProgressBarHorizontal\n progress={progress}\n height={4}\n backgroundColor=\"GREY_1\"\n progressColor={isBeltsExist ? 'GREY_4' : 'GREY_2'}\n />\n <Separator height={8} />\n <BeltText $isBeltsExist={isBeltsExist} $renderAs=\"body3\" $color=\"GREY_4\">\n {barTitle}\n </BeltText>\n </ProgressBarWrapper>\n </Container>\n </ArrowTooltip>\n );\n};\n\nexport default Belts;\n"],"names":["DEFAULT_BELT_TYPE","Container","styled","$currentScreenWidth","SCREEN_SIZES","css","HeaderContainer","FlexView","ProfileWrapper","BeltImg","$isBeltsExist","ProgressBarWrapper","SeparatorDiv","Separator","BeltText","Text","getBarTitle","completedGoals","totalGoals","isBeltsExist","nextBeltGoals","title","goalsReq","getToolTipText","Belts","beltStats","goalStats","currentScreenWidth","currentBeltType","beltTitle","progress","barTitle","jsx","ArrowTooltip","jsxs","getBeltIcon","ProgressBarHorizontal"],"mappings":"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"}
|