Skip to content

Commit

Permalink
feat(ui): 实现extra字段的换行显示
Browse files Browse the repository at this point in the history
  • Loading branch information
SSmJaE committed Mar 18, 2023
1 parent 15c7e29 commit 5591f67
Show file tree
Hide file tree
Showing 19 changed files with 128 additions and 165 deletions.
13 changes: 3 additions & 10 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,6 @@
- 类型安全的setting
- 抽象出projects概念,复用主要逻辑
- 各种逻辑优化
- [ ] 可以识别出作文题、翻译题,通过GPT自动完成

### UI

Expand All @@ -381,12 +380,6 @@

### 发布

- [ ] 抽象出metadata,自动生成对应的package.json、manifest.json、userscript的header
- [ ] github action自动构建,自动发布release
- [ ] script cat、greasy fork通过webhook自动更新

### 其他

- [ ] 完善文档
- [ ] 提供离线版文档
- [ ] 提供内置的intro
- 抽象出metadata,自动生成对应的package.json、manifest.json、userscript的header
- github action自动构建,自动发布release
- script cat、greasy fork通过webhook自动更新
2 changes: 1 addition & 1 deletion metadata.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"apiServer": "http://47.100.166.53/api",
"apiServer": "http://127.0.0.1:8000/api",
"homepage": "https://www.github.com/SSmJaE/",
"projects": {
"welearn": {
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
"valtio": "^1.10.3"
},
"devDependencies": {
"@rollup/plugin-typescript": "^11.0.0",
"@types/chrome": "^0.0.222",
"@types/lodash": "^4.14.191",
"@types/node": "^18.15.1",
Expand Down
51 changes: 0 additions & 51 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 17 additions & 28 deletions src/api/decorators.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,21 @@
import logger from "../utils/logger";
import { IErrorDetail } from "./types";

function errorMessageFactory(
error: Error,
message: string = "请求异常,稍后再试",
mode: "message" | "originError" | "both" = "message",
) {
let toDisplay = "";

switch (mode) {
case "message":
toDisplay += message;
break;

case "originError":
toDisplay += `${error.message}`;
break;

case "both":
toDisplay += message + `<br />${error.message}`;
break;
}

logger.error(`${toDisplay}`);
/** js的throw,似乎只能throw string,没法throw object,数据会丢失 */
export function backendErrorToString(errorDetail: IErrorDetail | null) {
return errorDetail
? `异常id : ${errorDetail.id}\n具体信息 : ${errorDetail.message}`
: undefined;
}

/** 通过装饰器,实现请求失败时,输出定制化的提示信息
/**
* 通过装饰器,实现请求失败时,输出定制化的提示信息
*
* 如果不对request进行装饰器包裹,异常直接输出至console
*
* 如果使用了装饰器,但是未提供message,输出默认值
*/
export function requestErrorHandler(
message: string = "请求异常,稍后再试",
mode: "message" | "originError" | "both" = "message",
) {
export function requestErrorHandler(message: string = "请求异常,稍后再试") {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;

Expand All @@ -55,7 +37,14 @@ export function requestErrorHandler(
// }
const result = originalMethod.apply(this, args);
result.catch((error: Error) => {
errorMessageFactory(error as Error, message, mode);
// logger.debug(error);

logger.error(
{
message,
},
error.message,
);
});

return result;
Expand Down
7 changes: 6 additions & 1 deletion src/api/types.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
export interface IErrorDetail {
id: string;
message: string;
}

export interface ICommonResponse<T = null> {
status: boolean;
error?: string;
error: IErrorDetail | null;
data: T;
}
24 changes: 13 additions & 11 deletions src/api/welearn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import metadata from "@/metadata.json";
import logger from "@utils/logger";

import { perSession, requestErrorHandler } from "./decorators";
import { backendErrorToString, perSession, requestErrorHandler } from "./decorators";
import request from "@utils/polyfill/request";
import { ICommonResponse } from "./types";

Expand Down Expand Up @@ -48,15 +48,15 @@ export class WELearnAPI {
const returnJson = await response.json();

if (returnJson.status === false) {
throw new Error(returnJson.error);
throw new Error(backendErrorToString(returnJson.error));
} else {
for (const message of returnJson.data) {
logger.info(message);
}
}
}

@requestErrorHandler("答案查询失败", "both")
@requestErrorHandler("答案查询失败")
static async queryByTaskId(taskId: number, isSchoolTest: boolean) {
const response = await request.post<IQueryByTaskIdResponse>("/query/", {
body: {
Expand All @@ -69,7 +69,7 @@ export class WELearnAPI {
return await response.json();
}

@requestErrorHandler("答案查询失败", "both")
@requestErrorHandler("答案查询失败")
static async queryByQuestionId(questionId: string) {
const response = await request.post<IQueryByQuestionIdResponse>("/query/", {
body: {
Expand All @@ -81,13 +81,13 @@ export class WELearnAPI {
const returnJson = await response.json();

if (returnJson.status === false) {
throw new Error(returnJson.error);
throw new Error(backendErrorToString(returnJson.error));
} else {
return returnJson.data;
}
}

@requestErrorHandler("答案查询失败", "both")
@requestErrorHandler("答案查询失败")
static async queryByDomString(domString: string) {
const response = await request.post<IQueryByDomStringResponse>("/query/", {
body: {
Expand All @@ -99,7 +99,7 @@ export class WELearnAPI {
const returnJson = await response.json();

if (returnJson.status === false) {
throw new Error(returnJson.error);
throw new Error(backendErrorToString(returnJson.error));
} else {
return returnJson.data;
}
Expand All @@ -118,7 +118,7 @@ export class WELearnAPI {
const returnJson = await response.json();

if (returnJson.status === false) {
throw new Error(returnJson.error);
throw new Error(backendErrorToString(returnJson.error));
} else {
logger.info(
"当前页面答案收录成功,可以切换至下一页面,手动点击查询按钮上传,或者上传其它练习的答案",
Expand All @@ -141,21 +141,23 @@ export class WELearnAPI {
if (returnJson.status) {
logger.info("成功上传练习");
} else {
logger.error("练习上传失败");
logger.error({
message: "练习上传失败",
});
logger.debug(returnJson.error);
}
}
}

@requestErrorHandler("课程目录获取失败", "both")
@requestErrorHandler("课程目录获取失败")
@perSession("HAS_GET_COURSE_CATALOG")
static async getCourseCatalog() {
const response = await request.post<IGetCourseCatalogResponse>("/catalog/");

const returnJson = await response.json();

if (returnJson.status === false) {
throw new Error(returnJson.error);
throw new Error(backendErrorToString(returnJson.error));
} else {
logger.info("成功获取了最新的课程目录");

Expand Down
3 changes: 0 additions & 3 deletions src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import "@src/projects/welearn/initial";

// import dotenv from "dotenv";
// dotenv.config();

import React from "react";
import ReactDOM from "react-dom/client";

Expand Down
4 changes: 4 additions & 0 deletions src/projects/welearn/initial.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
import "./exam/initial";
import "./exercise/initial";
import "./time/initial";

import { WELearnAPI } from "@/src/api/welearn";

WELearnAPI.checkVersion();
1 change: 1 addition & 0 deletions src/types/theme.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ declare module "@emotion/react" {
secondary: string;
active: string;
activeSecondary: string;
error: string;
};
}
}
22 changes: 14 additions & 8 deletions src/utils/logger/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export interface IRecord<T = RecordType, C = any> {
timestamp: string;
type: T;
content: C;
extra?: string;
}

export interface IQuestionContent {
Expand All @@ -39,6 +40,12 @@ export type IQuestionRecord = IRecord<"question", IQuestionContent>;

export type IInfoRecord = IRecord<"info", string>;

export interface IErrorContent {
message: string;
}

export type IErrorRecord = IRecord<"error", IErrorContent>;

export class Logger {
maxSize: number;
shiftOffset: number;
Expand All @@ -64,23 +71,22 @@ export class Logger {
}
}

log(option: Pick<IRecord, "type" | "content">) {
log(option: Pick<IRecord, "type" | "content" | "extra">) {
this.addLog({
...option,
// timestamp: dayjs().toISOString(),
timestamp: new Date().toISOString(),
id: `${Math.random()}`,
});
}

info(content: string) {
return this.log({ type: "info", content });
info(content: string, extra?: string) {
return this.log({ type: "info", content, extra });
}
question(content: IQuestionContent) {
return this.log({ type: "question", content });
question(content: IQuestionContent, extra?: string) {
return this.log({ type: "question", content, extra });
}
error(content: string) {
return this.log({ type: "error", content });
error(content: IErrorContent, extra?: string) {
return this.log({ type: "error", content, extra });
}
hr() {
return this.log({ type: "hr", content: "" });
Expand Down
2 changes: 1 addition & 1 deletion src/utils/polyfill/extension/inject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function injectJs(source: string) {
return scriptElement;
}

injectJs(chrome.runtime.getURL("index.js"));
injectJs(chrome.runtime?.getURL("index.js"));

const EXTENSION_NAME = "eocs-helper";

Expand Down
4 changes: 3 additions & 1 deletion src/utils/polyfill/request/implement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ export function getFullUrl(url: string, query: any) {
}

return queryString.stringifyUrl({
url: url.startsWith("/") ? `${metadata.apiServer}/${process.env.COMPILE_PLATFORM}` : url,
url: url.startsWith("/")
? `${metadata.apiServer}/${process.env.COMPILE_PLATFORM}${url}`
: url,
query: query,
});
}
Expand Down

0 comments on commit 5591f67

Please sign in to comment.