feat(fe/settings): add wallpaper form to settings pane
This commit is contained in:
parent
6b0d0f4337
commit
4ff243994f
5 changed files with 158 additions and 3 deletions
|
@ -107,6 +107,7 @@ export interface IUsersClient {
|
||||||
delRole: (role: string) => Promise<Response>;
|
delRole: (role: string) => Promise<Response>;
|
||||||
listRoles: () => Promise<Response>;
|
listRoles: () => Promise<Response>;
|
||||||
getCaptchaID: () => Promise<Response>;
|
getCaptchaID: () => Promise<Response>;
|
||||||
|
setPreferences: (prefers: Preferences) => Promise<Response>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFilesClient {
|
export interface IFilesClient {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { BaseClient, Response, userIDParam, Quota } from "./";
|
import { BaseClient, Response, userIDParam, Quota, Preferences } from "./";
|
||||||
|
|
||||||
export class UsersClient extends BaseClient {
|
export class UsersClient extends BaseClient {
|
||||||
constructor(url: string) {
|
constructor(url: string) {
|
||||||
|
@ -141,4 +141,14 @@ export class UsersClient extends BaseClient {
|
||||||
params: {},
|
params: {},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setPreferences = (prefers: Preferences): Promise<Response> => {
|
||||||
|
return this.do({
|
||||||
|
method: "patch",
|
||||||
|
url: `${this.url}/v1/users/preferences`,
|
||||||
|
data: {
|
||||||
|
preferences: prefers,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,10 @@ import * as React from "react";
|
||||||
import FileSize from "filesize";
|
import FileSize from "filesize";
|
||||||
import { List } from "immutable";
|
import { List } from "immutable";
|
||||||
|
|
||||||
import { ICoreState, MsgProps } from "./core_state";
|
import { ICoreState, UIProps, MsgProps } from "./core_state";
|
||||||
import { LoginProps } from "./pane_login";
|
import { LoginProps } from "./pane_login";
|
||||||
import { Flexbox } from "./layout/flexbox";
|
import { Flexbox } from "./layout/flexbox";
|
||||||
|
import { Flowgrid } from "./layout/flowgrid";
|
||||||
import { updater } from "./state_updater";
|
import { updater } from "./state_updater";
|
||||||
import { alertMsg } from "../common/env";
|
import { alertMsg } from "../common/env";
|
||||||
export interface Props {
|
export interface Props {
|
||||||
|
@ -29,6 +30,48 @@ export class PaneSettings extends React.Component<Props, State, {}> {
|
||||||
changeNewPwd2 = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
changeNewPwd2 = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
this.setState({ newPwd2: ev.target.value });
|
this.setState({ newPwd2: ev.target.value });
|
||||||
};
|
};
|
||||||
|
changeBgUrl = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
bg: { ...this.props.login.preferences.bg, url: ev.target.value },
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
changeBgRepeat = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
bg: { ...this.props.login.preferences.bg, repeat: ev.target.value },
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
changeBgPos = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
bg: { ...this.props.login.preferences.bg, position: ev.target.value },
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
changeBgAlign = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
bg: { ...this.props.login.preferences.bg, align: ev.target.value },
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
changeCSSURL = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
cssURL: ev.target.value,
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
changeLanPackURL = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
updater().setPreferences({
|
||||||
|
...this.props.login.preferences,
|
||||||
|
lanPackURL: ev.target.value,
|
||||||
|
});
|
||||||
|
this.props.update(updater().updateLogin);
|
||||||
|
};
|
||||||
|
|
||||||
constructor(p: Props) {
|
constructor(p: Props) {
|
||||||
super(p);
|
super(p);
|
||||||
|
@ -39,6 +82,18 @@ export class PaneSettings extends React.Component<Props, State, {}> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
syncPreferences = async () => {
|
||||||
|
updater()
|
||||||
|
.syncPreferences()
|
||||||
|
.then((status: number) => {
|
||||||
|
if (status === 200) {
|
||||||
|
alertMsg(this.props.msg.pkg.get("update.ok"));
|
||||||
|
} else {
|
||||||
|
alertMsg(this.props.msg.pkg.get("update.fail"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
setPwd = async (): Promise<any> => {
|
setPwd = async (): Promise<any> => {
|
||||||
if (this.state.newPwd1 !== this.state.newPwd2) {
|
if (this.state.newPwd1 !== this.state.newPwd2) {
|
||||||
alertMsg(this.props.msg.pkg.get("settings.pwd.notSame"));
|
alertMsg(this.props.msg.pkg.get("settings.pwd.notSame"));
|
||||||
|
@ -184,6 +239,7 @@ export class PaneSettings extends React.Component<Props, State, {}> {
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="hr white0-bg margin-t-m margin-b-m"></div>
|
<div className="hr white0-bg margin-t-m margin-b-m"></div>
|
||||||
<div className="margin-b-m">
|
<div className="margin-b-m">
|
||||||
<Flexbox
|
<Flexbox
|
||||||
|
@ -212,6 +268,84 @@ export class PaneSettings extends React.Component<Props, State, {}> {
|
||||||
childrenStyles={List([{}, { justifyContent: "flex-end" }])}
|
childrenStyles={List([{}, { justifyContent: "flex-end" }])}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="hr white0-bg margin-t-m margin-b-m"></div>
|
||||||
|
<div>
|
||||||
|
<Flexbox
|
||||||
|
children={List([
|
||||||
|
<span className="title-m bold">
|
||||||
|
{this.props.msg.pkg.get("cfg.bg")}
|
||||||
|
</span>,
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<button onClick={this.syncPreferences}>
|
||||||
|
{this.props.msg.pkg.get("update")}
|
||||||
|
</button>
|
||||||
|
</span>,
|
||||||
|
])}
|
||||||
|
childrenStyles={List([{}, { justifyContent: "flex-end" }])}
|
||||||
|
/>
|
||||||
|
<Flowgrid
|
||||||
|
grids={List([
|
||||||
|
<div className="padding-t-m padding-b-m padding-r-m">
|
||||||
|
<div className="font-size-s grey1-font">
|
||||||
|
{this.props.msg.pkg.get("cfg.bg.url")}
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
name="bg_url"
|
||||||
|
type="text"
|
||||||
|
onChange={this.changeBgUrl}
|
||||||
|
value={this.props.login.preferences.bg.url}
|
||||||
|
className="black0-font"
|
||||||
|
style={{ width: "20rem" }}
|
||||||
|
placeholder={this.props.msg.pkg.get("cfg.bg.url")}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
|
||||||
|
<div className="padding-t-m padding-b-m padding-r-m">
|
||||||
|
<div className="font-size-s grey1-font">
|
||||||
|
{this.props.msg.pkg.get("cfg.bg.repeat")}
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
name="bg_repeat"
|
||||||
|
type="text"
|
||||||
|
onChange={this.changeBgRepeat}
|
||||||
|
value={this.props.login.preferences.bg.repeat}
|
||||||
|
className="black0-font"
|
||||||
|
placeholder={this.props.msg.pkg.get("cfg.bg.repeat")}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
|
||||||
|
<div className="padding-t-m padding-b-m padding-r-m">
|
||||||
|
<div className="font-size-s grey1-font">
|
||||||
|
{this.props.msg.pkg.get("cfg.bg.pos")}
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
name="bg_pos"
|
||||||
|
type="text"
|
||||||
|
onChange={this.changeBgPos}
|
||||||
|
value={this.props.login.preferences.bg.position}
|
||||||
|
className="black0-font"
|
||||||
|
placeholder={this.props.msg.pkg.get("cfg.bg.pos")}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
|
||||||
|
<div className="padding-t-m padding-b-m padding-r-m">
|
||||||
|
<div className="font-size-s grey1-font">
|
||||||
|
{this.props.msg.pkg.get("cfg.bg.align")}
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
name="bg_align"
|
||||||
|
type="text"
|
||||||
|
onChange={this.changeBgAlign}
|
||||||
|
value={this.props.login.preferences.bg.align}
|
||||||
|
className="black0-font"
|
||||||
|
placeholder={this.props.msg.pkg.get("cfg.bg.align")}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
])}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
roleAdmin,
|
roleAdmin,
|
||||||
visitorID,
|
visitorID,
|
||||||
ClientConfig,
|
ClientConfig,
|
||||||
|
Preferences,
|
||||||
} from "../client";
|
} from "../client";
|
||||||
import { FilesClient } from "../client/files";
|
import { FilesClient } from "../client/files";
|
||||||
import { UsersClient } from "../client/users";
|
import { UsersClient } from "../client/users";
|
||||||
|
@ -580,6 +581,15 @@ export class Updater {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setPreferences = (prefer: Preferences) => {
|
||||||
|
this.props.login.preferences = { ...prefer };
|
||||||
|
};
|
||||||
|
|
||||||
|
syncPreferences = async ():Promise<number> => {
|
||||||
|
const resp = await this.usersClient.setPreferences(this.props.login.preferences);
|
||||||
|
return resp.status;
|
||||||
|
};
|
||||||
|
|
||||||
getClientCfg = async (): Promise<number> => {
|
getClientCfg = async (): Promise<number> => {
|
||||||
const resp = await this.settingsClient.getClientCfg();
|
const resp = await this.settingsClient.getClientCfg();
|
||||||
if (resp.status === 200) {
|
if (resp.status === 200) {
|
||||||
|
|
|
@ -65,7 +65,7 @@ export const msgs: Map<string, string> = Map({
|
||||||
"role.add": "新增角色",
|
"role.add": "新增角色",
|
||||||
"role.name": "角色名字",
|
"role.name": "角色名字",
|
||||||
"admin.roles": "角色列表",
|
"admin.roles": "角色列表",
|
||||||
zhCN: "中文简体",
|
zhCN: "简体中文",
|
||||||
enUS: "English(US)",
|
enUS: "English(US)",
|
||||||
"move.fail": "移动失败",
|
"move.fail": "移动失败",
|
||||||
"share.404.title": "没有找到正在共享的文件夹",
|
"share.404.title": "没有找到正在共享的文件夹",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue