@magmamath/students-features 1.3.14 → 1.3.15
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/commonjs/features/pmProgress/components/chart/components/SlicesPaths.js +1 -1
- package/dist/commonjs/features/pmProgress/components/chart/components/SlicesPaths.js.map +1 -1
- package/dist/commonjs/features/pmProgress/components/header/NextUp.js +5 -9
- package/dist/commonjs/features/pmProgress/components/header/NextUp.js.map +1 -1
- package/dist/commonjs/features/pmProgress/components/insights/PmInsights.js +1 -1
- package/dist/commonjs/features/pmProgress/components/insights/PmInsights.js.map +1 -1
- package/dist/commonjs/features/pmProgress/components/list/PmDomainList.js +1 -1
- package/dist/commonjs/features/pmProgress/components/list/PmDomainList.js.map +1 -1
- package/dist/commonjs/features/pmProgress/components/standard/StandardTag.js +8 -3
- package/dist/commonjs/features/pmProgress/components/standard/StandardTag.js.map +1 -1
- package/dist/commonjs/features/pmProgress/hooks/useNextUpDomain.js +42 -0
- package/dist/commonjs/features/pmProgress/hooks/useNextUpDomain.js.map +1 -0
- package/dist/commonjs/features/pmProgress/model/PmTreeModel.js +18 -16
- package/dist/commonjs/features/pmProgress/model/PmTreeModel.js.map +1 -1
- package/dist/commonjs/features/pmProgress/shared/pmProgress.constants.js +1 -1
- package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js +6 -2
- package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js.map +1 -1
- package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js +1 -1
- package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js.map +1 -1
- package/dist/module/features/pmProgress/components/header/NextUp.js +6 -10
- package/dist/module/features/pmProgress/components/header/NextUp.js.map +1 -1
- package/dist/module/features/pmProgress/components/insights/PmInsights.js +1 -1
- package/dist/module/features/pmProgress/components/insights/PmInsights.js.map +1 -1
- package/dist/module/features/pmProgress/components/list/PmDomainList.js +1 -1
- package/dist/module/features/pmProgress/components/list/PmDomainList.js.map +1 -1
- package/dist/module/features/pmProgress/components/standard/StandardTag.js +8 -3
- package/dist/module/features/pmProgress/components/standard/StandardTag.js.map +1 -1
- package/dist/module/features/pmProgress/hooks/useNextUpDomain.js +37 -0
- package/dist/module/features/pmProgress/hooks/useNextUpDomain.js.map +1 -0
- package/dist/module/features/pmProgress/model/PmTreeModel.js +20 -18
- package/dist/module/features/pmProgress/model/PmTreeModel.js.map +1 -1
- package/dist/module/features/pmProgress/shared/pmProgress.constants.js +1 -1
- package/dist/module/features/pmProgress/shared/pmProgress.helpers.js +2 -0
- package/dist/module/features/pmProgress/shared/pmProgress.helpers.js.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/components/header/NextUp.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/components/standard/StandardTag.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/hooks/useNextUpDomain.d.ts +5 -0
- package/dist/typescript/commonjs/features/pmProgress/hooks/useNextUpDomain.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts +3 -3
- package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts +4 -0
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/components/header/NextUp.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/components/standard/StandardTag.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/hooks/useNextUpDomain.d.ts +5 -0
- package/dist/typescript/module/features/pmProgress/hooks/useNextUpDomain.d.ts.map +1 -0
- package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts +3 -3
- package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts +4 -0
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/features/pmProgress/components/chart/components/SlicesPaths.tsx +1 -1
- package/src/features/pmProgress/components/header/NextUp.tsx +6 -13
- package/src/features/pmProgress/components/insights/PmInsights.tsx +1 -1
- package/src/features/pmProgress/components/list/PmDomainList.tsx +1 -1
- package/src/features/pmProgress/components/standard/StandardTag.tsx +4 -3
- package/src/features/pmProgress/hooks/useNextUpDomain.ts +31 -0
- package/src/features/pmProgress/model/PmTreeModel.ts +26 -17
- package/src/features/pmProgress/shared/pmProgress.constants.ts +1 -1
- package/src/features/pmProgress/shared/pmProgress.helpers.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextUp.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/pmProgress/components/header/NextUp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"NextUp.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/pmProgress/components/header/NextUp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,eAAO,MAAM,MAAM,yBAqDlB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardTag.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/pmProgress/components/standard/StandardTag.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"StandardTag.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/pmProgress/components/standard/StandardTag.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAgH9D,KAAK,gBAAgB,GAAG;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,eAAe,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,WAAW,uBAAwB,gBAAgB,6BA6B/D,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNextUpDomain.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/hooks/useNextUpDomain.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;CA0B3B,CAAA"}
|
|
@@ -7,11 +7,11 @@ export declare class PmTreeModel {
|
|
|
7
7
|
private readonly $stats;
|
|
8
8
|
private readonly $user;
|
|
9
9
|
private readonly setupInitialGrade;
|
|
10
|
-
private readonly setDomains;
|
|
11
10
|
readonly setGrade: import("effector").EventCallable<number | null>;
|
|
12
11
|
readonly $isInitialized: import("effector").StoreWritable<boolean>;
|
|
13
12
|
readonly $grade: import("effector").StoreWritable<number | null>;
|
|
14
|
-
readonly $domains: import("effector").StoreWritable<Domain[]
|
|
13
|
+
readonly $domains: import("effector").StoreWritable<Record<number, Domain[]>>;
|
|
14
|
+
readonly $domainsInGrade: import("effector").Store<Domain[]>;
|
|
15
15
|
readonly $grades: import("effector").StoreWritable<Grade[]>;
|
|
16
16
|
readonly $status: import("effector").StoreWritable<PmProgressStatus | null>;
|
|
17
17
|
constructor(api: PmProgressApi);
|
|
@@ -20,6 +20,6 @@ export declare class PmTreeModel {
|
|
|
20
20
|
private setupFailedAndLockedStatus;
|
|
21
21
|
private setupTreeInit;
|
|
22
22
|
private setupGradeInit;
|
|
23
|
-
private
|
|
23
|
+
private setupDomainsInTree;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=PmTreeModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PmTreeModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/model/PmTreeModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,MAAM,EACN,KAAK,EACL,mBAAmB,EAEnB,aAAa,EAEb,WAAW,EACX,mBAAmB,EAEpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"PmTreeModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/model/PmTreeModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,MAAM,EACN,KAAK,EACL,mBAAmB,EAEnB,aAAa,EAEb,WAAW,EACX,mBAAmB,EAEpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAW/C,OAAO,EAAE,gBAAgB,EAAsB,MAAM,gCAAgC,CAAA;AAGrF,qBAAa,WAAW;IAiBV,OAAO,CAAC,QAAQ,CAAC,GAAG;IAhBhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgD;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwC;IAC1E,SAAgB,QAAQ,kDAA+B;IAEvD,SAAgB,cAAc,4CAAqB;IACnD,SAAgB,MAAM,kDAA+B;IACrD,SAAgB,QAAQ,6DAA4C;IACpE,SAAgB,eAAe,qCAE9B;IACD,SAAgB,OAAO,4CAA2B;IAClD,SAAgB,OAAO,4DAA6C;gBAEvC,GAAG,EAAE,aAAa;IAY/C,SAAgB,UAAU,uGAUxB;IAEF,SAAgB,gBAAgB,sDAwB9B;IAEF,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,kBAAkB;CAwB3B"}
|
|
@@ -26,7 +26,7 @@ export declare enum PmProgressStatus {
|
|
|
26
26
|
export declare enum SessionStorageKeys {
|
|
27
27
|
SOLVING_QUEUE = "PM_SOLVING_QUEUE",
|
|
28
28
|
GRADE = "PM_GRADE",
|
|
29
|
-
DOMAINS = "
|
|
29
|
+
DOMAINS = "PM_DOMAINS_IN_TREE"
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Primary → _4 → _6 variants, cycling through 7 base colors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmProgress.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/shared/pmProgress.constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAC9C,eAAO,MAAM,kBAAkB,MAAM,CAAA;AAErC,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,oBAAY,iBAAiB;IAC3B,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,SAAS,aAAa;CACvB;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;CACpC;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,oBAAY,kBAAkB;IAC5B,aAAa,qBAAqB;IAClC,KAAK,aAAa;IAClB,OAAO,
|
|
1
|
+
{"version":3,"file":"pmProgress.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/shared/pmProgress.constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAC9C,eAAO,MAAM,kBAAkB,MAAM,CAAA;AAErC,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,oBAAY,iBAAiB;IAC3B,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,SAAS,aAAa;CACvB;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;CACpC;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,oBAAY,kBAAkB;IAC5B,aAAa,qBAAqB;IAClC,KAAK,aAAa;IAClB,OAAO,uBAAuB;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,2NAmBzB,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;GAM9B,CAAA;AAEH,eAAO,MAAM,oBAAoB,2EAmBhC,CAAA;AAED,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAC1C,eAAO,MAAM,sBAAsB,MAAM,CAAA;AACzC,eAAO,MAAM,4BAA4B,MAAM,CAAA;AAC/C,eAAO,MAAM,aAAa,QAAkC,CAAA;AAC5D,eAAO,MAAM,eAAe,QACkE,CAAA"}
|
|
@@ -40,6 +40,9 @@ type TreeDataReady = {
|
|
|
40
40
|
grade: number;
|
|
41
41
|
};
|
|
42
42
|
export declare const isTreeDataReady: (source: TreeDataSource) => source is TreeDataReady;
|
|
43
|
+
type TreeDataWithoutGrade = Omit<TreeDataSource, 'grade'>;
|
|
44
|
+
type TreeDataWithoutGradeReady = Omit<TreeDataReady, 'grade'>;
|
|
45
|
+
export declare const isTreeDataWithoutGradeReady: (source: TreeDataWithoutGrade) => source is TreeDataWithoutGradeReady;
|
|
43
46
|
export declare const createChartConfig: (size: number) => PieChartManagerConfig;
|
|
44
47
|
/**
|
|
45
48
|
* Returns all skills from a standard, sorted by difficulty.
|
|
@@ -64,6 +67,7 @@ export declare const getAllUncompletedSkills: (domains: Domain[], skillsMapping:
|
|
|
64
67
|
/** Moves item with the given id to the front: [0,1,2,3,4] with id of 3rd → [3,0,1,2,4] */
|
|
65
68
|
export declare const shiftToBeginningOfArray: (id: string, items: Skill[]) => Skill[];
|
|
66
69
|
export declare const withoutDuplicates: (skills: (Skill | undefined)[]) => Skill[];
|
|
70
|
+
export declare const findDomainBySkillId: (skillId: string, domains: Domain[]) => Domain | undefined;
|
|
67
71
|
export declare const startGradesFrom: (grades: Grade[], startGrade: number) => Grade[];
|
|
68
72
|
export declare const isFluencyDomain: (title: string) => boolean;
|
|
69
73
|
export declare const formatGradeName: (grade: number) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmProgress.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/shared/pmProgress.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAA;AAChG,OAAO,EACL,MAAM,EACN,cAAc,EACd,KAAK,EACL,KAAK,EACL,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,IAAI,EACL,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AA0DxD,eAAO,MAAM,kBAAkB,SACvB,sBAAsB,CAAC,MAAM,CAAC,eACvB,mBAAmB,CAAC,aAAa,CAAC,KAC9C,MAAM,EAqBR,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACrC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,6DAK3B,uBAAuB,KAAG,MAAM,GAAG,IAmBrC,CAAA;AAED,eAAO,MAAM,UAAU,OAAQ,MAAM,KAAG,MAKvC,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAChC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,mBAAmB,CAAA;IACzB,KAAK,EAAE,aAAa,CAAA;IACpB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,eAAe,WAAY,cAAc,KAAG,MAAM,IAAI,aAC6B,CAAA;AAEhG,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,qBAoBhD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,aACzB,cAAc,iBACT,aAAa,KAC3B,KAAK,EAIgF,CAAA;AAExF;;;GAGG;AACH,eAAO,MAAM,gCAAgC,aACjC,cAAc,iBACT,aAAa,KAC3B,KAAK,EAOP,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,8BAA8B,WACjC,MAAM,iBACC,aAAa,sBACR,MAAM,KACzB,KAAK,EAG+D,CAAA;AAEvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,YAAa,MAAM,EAAE,iBAAiB,aAAa,KAAG,KAAK,EAG1B,CAAA;AAErE,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,OAAQ,MAAM,SAAS,KAAK,EAAE,KAAG,KAAK,EAIzE,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,KAAG,KAAK,EAQtE,CAAA;
|
|
1
|
+
{"version":3,"file":"pmProgress.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/pmProgress/shared/pmProgress.helpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@ export const SlicesPaths = ({ slices, pieChartManager, config }: SlicesPathsProp
|
|
|
20
20
|
const [hoveredId, expandedId, domains] = useUnit([
|
|
21
21
|
model.highlight.$hoveredId,
|
|
22
22
|
model.highlight.$expandedId,
|
|
23
|
-
model.tree.$
|
|
23
|
+
model.tree.$domainsInGrade,
|
|
24
24
|
])
|
|
25
25
|
|
|
26
26
|
const highlightedId = hoveredId ?? expandedId
|
|
@@ -4,33 +4,26 @@ import { COLORS, HeadingVariants, SPACING, Typography } from '@magmamath/react-n
|
|
|
4
4
|
import { SketchArrowRight } from '../../../../shared/icons/SketchArrowRight'
|
|
5
5
|
import { SliceDiamondIcon } from '../../../../shared/icons/SliceDiamondIcon'
|
|
6
6
|
import { useText } from '../../../../shared/translation'
|
|
7
|
-
import { useUnit
|
|
7
|
+
import { useUnit } from 'effector-react'
|
|
8
8
|
import { usePmProgress } from '../../context/PmProgressContext'
|
|
9
|
-
import { isFluencyDomain } from '../../shared/pmProgress.helpers'
|
|
10
9
|
import { OpeningLoaderId, SolvingFlow } from '../../shared/pmProgress.constants'
|
|
11
10
|
import { StartButton } from './StartButton'
|
|
11
|
+
import { useNextUpDomain } from '../../hooks/useNextUpDomain'
|
|
12
12
|
|
|
13
13
|
export const NextUp = () => {
|
|
14
14
|
const t = useText()
|
|
15
15
|
const { model, onStartPress } = usePmProgress()
|
|
16
|
+
const nextUp = useNextUpDomain()
|
|
16
17
|
|
|
17
18
|
const status = useUnit(model.tree.$status)
|
|
18
19
|
const loaderOpeningId = useUnit(model.solving.$loaderOpeningId)
|
|
19
20
|
|
|
20
|
-
const nextUp = useStoreMap(model.tree.$domains, (domains) =>
|
|
21
|
-
domains.find((domain) => {
|
|
22
|
-
const isFluency = isFluencyDomain(domain.title)
|
|
23
|
-
const isDomainCompleted = domain.standards.every((standard) => standard.isCompleted)
|
|
24
|
-
return !isFluency && !isDomainCompleted
|
|
25
|
-
}),
|
|
26
|
-
)
|
|
27
|
-
|
|
28
21
|
const isLoading = loaderOpeningId === OpeningLoaderId.START_BUTTON
|
|
29
22
|
const isSkillOpeningActionPending = !!(loaderOpeningId !== null || status)
|
|
30
23
|
|
|
31
24
|
return (
|
|
32
25
|
<View style={styles.container}>
|
|
33
|
-
{nextUp && !status && (
|
|
26
|
+
{nextUp.domain && !status && (
|
|
34
27
|
<>
|
|
35
28
|
<View style={styles.content}>
|
|
36
29
|
<View style={styles.subtitle}>
|
|
@@ -40,10 +33,10 @@ export const NextUp = () => {
|
|
|
40
33
|
</View>
|
|
41
34
|
<View style={[styles.row, styles.tilted]}>
|
|
42
35
|
<Typography variant={HeadingVariants.H7} style={styles.muted}>
|
|
43
|
-
{nextUp
|
|
36
|
+
{nextUp.domain.title}
|
|
44
37
|
</Typography>
|
|
45
38
|
<View style={styles.diamond}>
|
|
46
|
-
<SliceDiamondIcon color={nextUp
|
|
39
|
+
<SliceDiamondIcon color={nextUp.domain.color} />
|
|
47
40
|
</View>
|
|
48
41
|
</View>
|
|
49
42
|
</View>
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
export const PmInsights = () => {
|
|
16
16
|
const { model } = usePmProgress()
|
|
17
17
|
const [chartSize, setChartSize] = useState(MAX_PIE_CHART_SIZE)
|
|
18
|
-
const chartData = useStoreMap(model.tree.$
|
|
18
|
+
const chartData = useStoreMap(model.tree.$domainsInGrade, (domains) =>
|
|
19
19
|
domains.map((domain) => ({
|
|
20
20
|
value: 1,
|
|
21
21
|
fillPercent: Math.round(domain.scorePercentage),
|
|
@@ -11,7 +11,7 @@ import { SolvingFlow } from '../../shared/pmProgress.constants'
|
|
|
11
11
|
|
|
12
12
|
export const PmDomainList = () => {
|
|
13
13
|
const { model, onStandardPress } = usePmProgress()
|
|
14
|
-
const domains = useUnit(model.tree.$
|
|
14
|
+
const domains = useUnit(model.tree.$domainsInGrade)
|
|
15
15
|
const expandedId = useUnit(model.highlight.$expandedId)
|
|
16
16
|
const hoveredId = useUnit(model.highlight.$hoveredId)
|
|
17
17
|
const loaderOpeningId = useUnit(model.solving.$loaderOpeningId)
|
|
@@ -4,6 +4,7 @@ import { PmProgressModel } from '@magmamath/students-features'
|
|
|
4
4
|
import { SliceDiamondIcon } from '../../../../shared/icons/SliceDiamondIcon'
|
|
5
5
|
import { COLORS, FONT_FAMILY } from '@magmamath/react-native-ui'
|
|
6
6
|
import { useStoreMap } from 'effector-react'
|
|
7
|
+
import { isWeb } from '../../../../shared/common.constants'
|
|
7
8
|
|
|
8
9
|
type ColorPreset = {
|
|
9
10
|
background: string
|
|
@@ -118,7 +119,7 @@ type StandardTagProps = {
|
|
|
118
119
|
|
|
119
120
|
export const StandardTag = ({ skillId, model }: StandardTagProps) => {
|
|
120
121
|
const standardInfo = useStoreMap({
|
|
121
|
-
store: model.tree.$
|
|
122
|
+
store: model.tree.$domainsInGrade,
|
|
122
123
|
keys: [skillId],
|
|
123
124
|
fn: (domains, [skillId]) => {
|
|
124
125
|
const domain = domains.find((d) => d.standards.some((s) => s.skillIds.includes(skillId)))
|
|
@@ -150,7 +151,7 @@ export const StandardTag = ({ skillId, model }: StandardTagProps) => {
|
|
|
150
151
|
const styles = StyleSheet.create({
|
|
151
152
|
container: {
|
|
152
153
|
minWidth: 110,
|
|
153
|
-
maxWidth: 350,
|
|
154
|
+
maxWidth: isWeb ? 350 : 280,
|
|
154
155
|
paddingHorizontal: 8,
|
|
155
156
|
paddingVertical: 4,
|
|
156
157
|
borderRadius: 12,
|
|
@@ -165,7 +166,7 @@ const styles = StyleSheet.create({
|
|
|
165
166
|
elevation: 2,
|
|
166
167
|
},
|
|
167
168
|
textContainer: {
|
|
168
|
-
flex: 1,
|
|
169
|
+
...(isWeb ? { flex: 1 } : { flexShrink: 1 }),
|
|
169
170
|
flexDirection: 'column',
|
|
170
171
|
justifyContent: 'center',
|
|
171
172
|
alignItems: 'flex-start',
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useUnit, useStoreMap } from 'effector-react'
|
|
2
|
+
import { usePmProgress } from '../context/PmProgressContext'
|
|
3
|
+
import { findDomainBySkillId, isFluencyDomain } from '../shared/pmProgress.helpers'
|
|
4
|
+
|
|
5
|
+
export const useNextUpDomain = () => {
|
|
6
|
+
const { model } = usePmProgress()
|
|
7
|
+
const magmaRecs = useUnit(model.recommendations.$magma)
|
|
8
|
+
const domainsInTree = useUnit(model.tree.$domains)
|
|
9
|
+
|
|
10
|
+
return useStoreMap({
|
|
11
|
+
store: model.tree.$domainsInGrade,
|
|
12
|
+
keys: [magmaRecs, domainsInTree],
|
|
13
|
+
fn: (domainsInGrade) => {
|
|
14
|
+
const firstRec = magmaRecs.items[0]
|
|
15
|
+
if (firstRec) {
|
|
16
|
+
const allDomains = Object.values(domainsInTree).flat()
|
|
17
|
+
const domain = findDomainBySkillId(firstRec._id, allDomains) ?? null
|
|
18
|
+
return { domain, isFromRecommendation: true }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const domain =
|
|
22
|
+
domainsInGrade.find((domain) => {
|
|
23
|
+
const isFluency = isFluencyDomain(domain.title)
|
|
24
|
+
const isDomainCompleted = domain.standards.every((standard) => standard.isCompleted)
|
|
25
|
+
return !isFluency && !isDomainCompleted
|
|
26
|
+
}) ?? null
|
|
27
|
+
|
|
28
|
+
return { domain, isFromRecommendation: false }
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { attach, createEffect, createEvent, createStore, restore, sample } from 'effector'
|
|
1
|
+
import { attach, combine, createEffect, createEvent, createStore, restore, sample } from 'effector'
|
|
2
2
|
import { createAction } from 'effector-action'
|
|
3
3
|
import {
|
|
4
4
|
Domain,
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
getInitialPmGrade,
|
|
19
19
|
getTreeGrades,
|
|
20
20
|
isTreeDataReady,
|
|
21
|
+
isTreeDataWithoutGradeReady,
|
|
21
22
|
} from '../shared/pmProgress.helpers'
|
|
22
23
|
import { TreeNormalizer } from '../shared/TreeNormalizer'
|
|
23
24
|
import { persist } from 'effector-storage/session'
|
|
@@ -30,12 +31,14 @@ export class PmTreeModel {
|
|
|
30
31
|
private readonly $user = createStore<User | null>(null)
|
|
31
32
|
|
|
32
33
|
private readonly setupInitialGrade = createEvent<SetupInitialGradeProps>()
|
|
33
|
-
private readonly setDomains = createEvent<Domain[]>()
|
|
34
34
|
public readonly setGrade = createEvent<number | null>()
|
|
35
35
|
|
|
36
36
|
public readonly $isInitialized = createStore(false)
|
|
37
37
|
public readonly $grade = restore(this.setGrade, null)
|
|
38
|
-
public readonly $domains =
|
|
38
|
+
public readonly $domains = createStore<Record<number, Domain[]>>({})
|
|
39
|
+
public readonly $domainsInGrade = combine(this.$domains, this.$grade, (domains, grade) =>
|
|
40
|
+
grade !== null ? (domains[grade] ?? []) : [],
|
|
41
|
+
)
|
|
39
42
|
public readonly $grades = createStore<Grade[]>([])
|
|
40
43
|
public readonly $status = createStore<PmProgressStatus | null>(null)
|
|
41
44
|
|
|
@@ -48,7 +51,7 @@ export class PmTreeModel {
|
|
|
48
51
|
this.setupFailedAndLockedStatus()
|
|
49
52
|
this.setupTreeInit()
|
|
50
53
|
this.setupGradeInit()
|
|
51
|
-
this.
|
|
54
|
+
this.setupDomainsInTree()
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
public readonly initTreeFx = createEffect(async ({ user }: PmProgressGateProps) => {
|
|
@@ -150,22 +153,28 @@ export class PmTreeModel {
|
|
|
150
153
|
})
|
|
151
154
|
}
|
|
152
155
|
|
|
153
|
-
private
|
|
156
|
+
private setupDomainsInTree() {
|
|
154
157
|
sample({
|
|
155
|
-
clock:
|
|
156
|
-
source: { tree: this.$tree, stats: this.$stats, user: this.$user
|
|
157
|
-
filter:
|
|
158
|
-
fn: ({ tree, stats, user
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
grade
|
|
158
|
+
clock: this.initTreeFx.doneData,
|
|
159
|
+
source: { tree: this.$tree, stats: this.$stats, user: this.$user },
|
|
160
|
+
filter: isTreeDataWithoutGradeReady,
|
|
161
|
+
fn: ({ tree, stats, user }) => {
|
|
162
|
+
const treeNodes = Object.values(tree.treeMapping)
|
|
163
|
+
const grades = getTreeGrades(tree, user).filter((g) => !g.isLocked)
|
|
164
|
+
|
|
165
|
+
return Object.fromEntries(
|
|
166
|
+
grades.map((grade) => {
|
|
167
|
+
const [treeWithStats] = enhanceProgressMatrixData(
|
|
168
|
+
treeNodes,
|
|
169
|
+
stats,
|
|
170
|
+
[{ entityId: user._id, name: user.fullName }],
|
|
171
|
+
grade.value,
|
|
172
|
+
)
|
|
173
|
+
return [grade.value, getDomainStructure(treeWithStats, tree.treeMapping)]
|
|
174
|
+
}),
|
|
164
175
|
)
|
|
165
|
-
|
|
166
|
-
return getDomainStructure(treeWithUserStats, tree.treeMapping)
|
|
167
176
|
},
|
|
168
|
-
target: this
|
|
177
|
+
target: this.$domains,
|
|
169
178
|
})
|
|
170
179
|
}
|
|
171
180
|
}
|
|
@@ -171,6 +171,14 @@ type TreeDataReady = {
|
|
|
171
171
|
export const isTreeDataReady = (source: TreeDataSource): source is TreeDataReady =>
|
|
172
172
|
source.tree !== null && source.stats !== null && source.user !== null && source.grade !== null
|
|
173
173
|
|
|
174
|
+
type TreeDataWithoutGrade = Omit<TreeDataSource, 'grade'>
|
|
175
|
+
type TreeDataWithoutGradeReady = Omit<TreeDataReady, 'grade'>
|
|
176
|
+
|
|
177
|
+
export const isTreeDataWithoutGradeReady = (
|
|
178
|
+
source: TreeDataWithoutGrade,
|
|
179
|
+
): source is TreeDataWithoutGradeReady =>
|
|
180
|
+
source.tree !== null && source.stats !== null && source.user !== null
|
|
181
|
+
|
|
174
182
|
export const createChartConfig = (size: number): PieChartManagerConfig => {
|
|
175
183
|
const OUTER_MARGIN = 5
|
|
176
184
|
return {
|
|
@@ -261,6 +269,9 @@ export const withoutDuplicates = (skills: (Skill | undefined)[]): Skill[] => {
|
|
|
261
269
|
})
|
|
262
270
|
}
|
|
263
271
|
|
|
272
|
+
export const findDomainBySkillId = (skillId: string, domains: Domain[]): Domain | undefined =>
|
|
273
|
+
domains.find((d) => d.standards.some((s) => s.skillIds.includes(skillId)))
|
|
274
|
+
|
|
264
275
|
// Reorders grades starting from the given grade, wrapping around. [1,2,3] with start=2 → [2,3,1]
|
|
265
276
|
export const startGradesFrom = (grades: Grade[], startGrade: number): Grade[] => {
|
|
266
277
|
const index = grades.findIndex(({ value }) => value === startGrade)
|