Skip to content

Commit f38ec3a

Browse files
committed
move abstract Navigator class, remove circular...
imports between ELONavigator and base class. Fiddle with relitive import paths.
1 parent c1b2be1 commit f38ec3a

File tree

4 files changed

+49
-48
lines changed

4 files changed

+49
-48
lines changed

packages/db/src/core/navigators/elo.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
import {
2-
CourseDBInterface,
3-
ScheduledCard,
4-
StudySessionNewItem,
5-
StudySessionReviewItem,
6-
UserDBInterface,
7-
} from '..';
8-
import {
9-
ContentNavigationStrategyData,
10-
ContentNavigator,
11-
} from '../types/contentNavigationStrategy';
1+
import { ScheduledCard } from '../types/user';
2+
import { CourseDBInterface } from '../interfaces/courseDB';
3+
import { UserDBInterface } from '../interfaces/userDB';
4+
import { ContentNavigator } from './index';
125
import { CourseElo } from '@vue-skuilder/common';
6+
import { StudySessionReviewItem, StudySessionNewItem } from '..';
137

148
export default class ELONavigator extends ContentNavigator {
159
user: UserDBInterface;
@@ -27,7 +21,6 @@ export default class ELONavigator extends ContentNavigator {
2721
) {
2822
super();
2923
this.user = user;
30-
this.user = user;
3124
this.course = course;
3225
}
3326

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
1+
import {
2+
StudyContentSource,
3+
UserDBInterface,
4+
CourseDBInterface,
5+
StudySessionReviewItem,
6+
StudySessionNewItem,
7+
} from '..';
8+
import { ContentNavigationStrategyData } from '../types/contentNavigationStrategy';
9+
import { ScheduledCard } from '../types/user';
10+
111
export enum Navigators {
212
ELO = 'elo',
313
}
14+
15+
/**
16+
* A content-navigator provides runtime steering of study sessions.
17+
*/
18+
export abstract class ContentNavigator implements StudyContentSource {
19+
/**
20+
*
21+
* @param user
22+
* @param strategyData
23+
* @returns the runtime object used to steer a study session.
24+
*/
25+
static create(
26+
user: UserDBInterface,
27+
course: CourseDBInterface,
28+
strategyData: ContentNavigationStrategyData
29+
): ContentNavigator {
30+
const implementingClass = strategyData.implementingClass;
31+
const NavigatorImpl = require(`./${implementingClass}.ts`).default;
32+
return new NavigatorImpl(user, course, strategyData);
33+
}
34+
35+
abstract getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>;
36+
abstract getNewCards(n?: number): Promise<StudySessionNewItem[]>;
37+
}

packages/db/src/core/types/contentNavigationStrategy.ts

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
StudySessionNewItem,
77
StudySessionReviewItem,
88
UserDBInterface,
9-
} from '..';
9+
} from '../index';
1010
import { Navigators } from '../navigators';
1111
import ELONavigator from '../navigators/elo';
1212

@@ -29,32 +29,3 @@ export interface ContentNavigationStrategyData extends SkuilderCourseData {
2929
*/
3030
serializedData: string;
3131
}
32-
33-
/**
34-
* A content-navigator provides runtime steering of study sessions.
35-
*/
36-
export abstract class ContentNavigator implements StudyContentSource {
37-
/**
38-
*
39-
* @param user
40-
* @param strategyData
41-
* @returns the runtime object used to steer a study session.
42-
*/
43-
static create(
44-
user: UserDBInterface,
45-
course: CourseDBInterface,
46-
strategyData: ContentNavigationStrategyData
47-
): ContentNavigator {
48-
const implementingClass = strategyData.implementingClass;
49-
50-
switch (implementingClass) {
51-
case Navigators.ELO:
52-
return new ELONavigator(user, course);
53-
default:
54-
throw new Error(`Unknown implementing class: ${implementingClass}`);
55-
}
56-
}
57-
58-
abstract getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>;
59-
abstract getNewCards(n?: number): Promise<StudySessionNewItem[]>;
60-
}

packages/db/src/impl/pouch/courseDB.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { CourseDBInterface, CourseInfo, CoursesDBInterface, UserDBInterface } from '@/core';
1+
import {
2+
CourseDBInterface,
3+
CourseInfo,
4+
CoursesDBInterface,
5+
StudyContentSourceInternal,
6+
UserDBInterface,
7+
} from '@/core';
28
import { ScheduledCard } from '@/core/types/user';
39
import {
410
CourseConfig,
@@ -23,11 +29,8 @@ import { addNote55, addTagToCard, getCredentialledCourseConfig, getTagID } from
2329
import { DataLayerResult } from '@/core/types/db';
2430
import { PouchError } from './types';
2531
import CourseLookup from './courseLookupDB';
26-
import {
27-
ContentNavigationStrategyData,
28-
ContentNavigator,
29-
} from '@/core/types/contentNavigationStrategy';
30-
import { Navigators } from '@/core/navigators';
32+
import { ContentNavigationStrategyData } from '@/core/types/contentNavigationStrategy';
33+
import { ContentNavigator, Navigators } from '@/core/navigators';
3134

3235
export class CoursesDB implements CoursesDBInterface {
3336
_courseIDs: string[] | undefined;

0 commit comments

Comments
 (0)