feat: certificates, landing pages, ai tutor, website update, compliance
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
import { CERTIFICATE_THEME_IDS, DEFAULT_CERTIFICATE_THEME_ID, type CertificateThemeId } from './constants';
|
||||
|
||||
const CERTIFICATE_THEME_ID_SET = new Set<string>(CERTIFICATE_THEME_IDS);
|
||||
import { resolveTemplateId } from '@cio/certificates';
|
||||
import { DEFAULT_CERTIFICATE_THEME_ID, type CertificateThemeId } from './constants';
|
||||
|
||||
/**
|
||||
* Resolves a stored theme/template id. Maps legacy 6-theme ids onto the new
|
||||
* 5 Atelier templates via `LEGACY_THEME_MAP`; unknown values fall back to
|
||||
* `DEFAULT_CERTIFICATE_THEME_ID`.
|
||||
*/
|
||||
export function parseCertificateThemeId(raw: string | null | undefined): CertificateThemeId {
|
||||
if (raw != null && raw !== '' && CERTIFICATE_THEME_ID_SET.has(raw)) {
|
||||
return raw as CertificateThemeId;
|
||||
}
|
||||
return DEFAULT_CERTIFICATE_THEME_ID;
|
||||
if (raw == null || raw === '') return DEFAULT_CERTIFICATE_THEME_ID;
|
||||
|
||||
return resolveTemplateId(raw);
|
||||
}
|
||||
|
||||
@@ -37,18 +37,25 @@ export type CourseSortOrder = (typeof CourseSortOrder)[keyof typeof CourseSortOr
|
||||
|
||||
export const DEFAULT_SORT_ORDER: CourseSortOrder = CourseSortOrder.Desc;
|
||||
|
||||
export const CERTIFICATE_THEME_IDS = [
|
||||
'professional',
|
||||
'plain',
|
||||
'purpleProfessionalBadge',
|
||||
'blueProfessionalBadge',
|
||||
'purpleBadgePattern',
|
||||
'blueBadgePattern'
|
||||
] as const;
|
||||
import type { CertificateTemplateId } from '@cio/certificates';
|
||||
|
||||
export type CertificateThemeId = (typeof CERTIFICATE_THEME_IDS)[number];
|
||||
export {
|
||||
ACCENT_COLORS,
|
||||
CERTIFICATE_TEMPLATE_IDS,
|
||||
CERTIFICATE_TEMPLATES,
|
||||
DEFAULT_ACCENT_COLOR,
|
||||
DEFAULT_CERTIFICATE_DESIGN,
|
||||
LEGACY_THEME_MAP
|
||||
} from '@cio/certificates';
|
||||
export type { CertificateTemplateId } from '@cio/certificates';
|
||||
|
||||
export const DEFAULT_CERTIFICATE_THEME_ID: CertificateThemeId = 'professional';
|
||||
/**
|
||||
* @deprecated Use `CertificateTemplateId` from `@cio/certificates`. Kept here so the
|
||||
* existing `CertificateThemeId` import sites compile during the migration.
|
||||
*/
|
||||
export type CertificateThemeId = CertificateTemplateId;
|
||||
|
||||
export const DEFAULT_CERTIFICATE_THEME_ID: CertificateThemeId = 'classique';
|
||||
|
||||
const COURSE_SORT_ORDER_VALUES = new Set<string>(Object.values(CourseSortOrder));
|
||||
|
||||
|
||||
@@ -30,6 +30,31 @@ export function getLessonsRoute(courseId, lessonId?: string) {
|
||||
return `${path}/${lessonId}`;
|
||||
}
|
||||
|
||||
export function getActiveCourseNavKey(pathname: string, courseId: string): string | null {
|
||||
if (!courseId) return null;
|
||||
|
||||
const base = `/${ROUTES.COURSES}/${courseId}`;
|
||||
if (!pathname.startsWith(base)) return null;
|
||||
|
||||
const rest = pathname.slice(base.length).replace(/^\//, '');
|
||||
const segment = rest.split('/')[0];
|
||||
|
||||
if (!segment) return 'course.navItems.nav_news_feed';
|
||||
if (segment === ROUTES.LESSONS || segment === 'exercises') return 'course.navItems.nav_content';
|
||||
if (segment === 'analytics') return 'course.navItems.nav_analytics';
|
||||
if (segment === 'attendance') return 'course.navItems.nav_attendance';
|
||||
if (segment === 'submissions') return 'course.navItems.nav_submissions';
|
||||
if (segment === 'marks') return 'course.navItems.nav_marks';
|
||||
if (segment === 'compliance') return 'course.navItems.nav_compliance';
|
||||
if (segment === 'certificates') return 'course.navItems.nav_certificates';
|
||||
if (segment === 'landingpage') return 'course.navItems.nav_landing_page';
|
||||
if (segment === 'people') return 'course.navItems.nav_people';
|
||||
if (segment === 'ai-tutor') return 'course.navItems.nav_ai_tutor';
|
||||
if (segment === 'settings') return 'course.navItems.nav_settings';
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getLectureNo(index, initNo = '0') {
|
||||
if (index <= 9) {
|
||||
return `${initNo}${index}`;
|
||||
|
||||
@@ -24,9 +24,9 @@ export const settings = writable<CourseSettings>({
|
||||
type: 'SELF_PACED' as TCourseType,
|
||||
allowNewStudents: false,
|
||||
tabs: [
|
||||
{ id: 3, name: 'course.navItem.lessons.materials.tabs.video.title' },
|
||||
{ id: 1, name: 'course.navItem.lessons.materials.tabs.note.title' },
|
||||
{ id: 2, name: 'course.navItem.lessons.materials.tabs.slide.title' },
|
||||
{ id: 3, name: 'course.navItem.lessons.materials.tabs.video.title' },
|
||||
{ id: 4, name: 'course.navItem.lessons.materials.tabs.document.title' }
|
||||
],
|
||||
lessonDownload: false,
|
||||
|
||||
Reference in New Issue
Block a user