-
-
Notifications
You must be signed in to change notification settings - Fork 380
/
Copy pathsettings.ts
70 lines (61 loc) · 1.77 KB
/
settings.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { Locale } from 'locales'
import { isArray, isBoolean, isNumber, isString, values } from 'lodash'
import { EDITOR_SIZE } from './meta'
import { ROOT_ID } from './tree'
export interface Settings {
split_sizes: [number, number]
daily_root_id: string
sidebar_is_fold: boolean
last_visit?: string
locale: Locale
injection?: string
editorsize: EDITOR_SIZE
explicitSave: boolean
}
export const DEFAULT_SETTINGS: Settings = Object.freeze({
split_sizes: [30, 70],
daily_root_id: ROOT_ID,
sidebar_is_fold: false,
locale: Locale.EN,
editorsize: EDITOR_SIZE.SMALL,
explicitSave: false,
})
export function formatSettings(body: Record<string, any> = {}) {
const settings: Settings = { ...DEFAULT_SETTINGS }
if (isString(body.daily_root_id)) {
settings.daily_root_id = body.daily_root_id
}
if (
isArray(body.split_sizes) &&
isNumber(body.split_sizes[0]) &&
isNumber(body.split_sizes[1])
) {
// Sometimes when debugging mode is turned on in the browser,
// the size will become abnormal
const [size1, size2] = body.split_sizes
if (size1 > 100 || size1 < 0 || size2 > 100 || size2 < 0) {
settings.split_sizes = DEFAULT_SETTINGS.split_sizes
} else {
settings.split_sizes = [size1, size2]
}
}
if (isBoolean(body.sidebar_is_fold)) {
settings.sidebar_is_fold = body.sidebar_is_fold
}
if (isString(body.last_visit)) {
settings.last_visit = body.last_visit
}
if (values(Locale).includes(body.locale)) {
settings.locale = body.locale
}
if (isString(body.injection)) {
settings.injection = body.injection
}
if (isNumber(body.editorsize)) {
settings.editorsize = body.editorsize
}
if (isBoolean(body.explicitSave)) {
settings.explicitSave = body.explicitSave
}
return settings
}