Feat: interactive courses (#736)

* add courses page

* add api for courses

* add course page

* update course type

* update client

* update course page

* refactor courses pages

* render chapter content

* shadow in course

* fix video handler

* update style

* mark finished examples

* fix media player

* update locale

* finish chapter

* refactor

* auto update chapter status

* audo finish chapter

* fix media provider

* fix wavesurfer player

* update continue btn

* refactor chapters & page

* minor fix

* fix undefined

* refactor

* refactor

* disable sentry in dev

* clean markdown format before alignment

* refactor

* fix regenerate

* fix transcription pre-process for `-` connector

* upgrade deps

* handle no chapters

* add llm chat api

* create llm chat

* display llm message

* create message

* handle error

* generate llm message

* display llm datetime

* scroll to message

* tts for llm message

* add course provider

* refactor

* translate llm message

* fix llm chat introduction

* refacotr

* upgrade deps

* refactor style

* handle undefined

* fix posts

* update locales

* update courses api

* add enrollments count

* upgrade yarn

* upgrade deps

* restore dep to fix package in mac

* upgrade deps
This commit is contained in:
an-lee
2024-07-11 19:14:40 +08:00
committed by GitHub
parent d9523269a3
commit 728bfae82f
72 changed files with 3083 additions and 1973 deletions

View File

@@ -2,8 +2,6 @@
// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts
import { contextBridge, ipcRenderer, IpcRendererEvent } from "electron";
import { version } from "../package.json";
import { callback } from "chart.js/dist/helpers/helpers.core";
import { remove } from "lodash";
contextBridge.exposeInMainWorld("__ENJOY_APP__", {
app: {
@@ -37,7 +35,9 @@ contextBridge.exposeInMainWorld("__ENJOY_APP__", {
createIssue: (title: string, body: string) => {
return ipcRenderer.invoke("app-create-issue", title, body);
},
onCmdOutput: (callback: (event: IpcRendererEvent, data: string) => void) => {
onCmdOutput: (
callback: (event: IpcRendererEvent, data: string) => void
) => {
ipcRenderer.on("app-on-cmd-output", callback);
},
removeCmdOutputListeners: () => {
@@ -399,6 +399,9 @@ contextBridge.exposeInMainWorld("__ENJOY_APP__", {
},
},
speeches: {
findOne: (where: any) => {
return ipcRenderer.invoke("speeches-find-one", where);
},
create: (
params: {
sourceId: string;