From 097b94d1ed8b6db98dea787a75c889eb5a418be9 Mon Sep 17 00:00:00 2001 From: hexxa Date: Thu, 10 Mar 2022 15:19:51 +0800 Subject: [PATCH] feat(fe/management): add reset used space button for users --- src/client/web/src/client/index.ts | 2 ++ src/client/web/src/client/users.ts | 10 +++++++ src/client/web/src/client/users_mock.ts | 13 +++++++++ src/client/web/src/components/pane_admin.tsx | 28 ++++++++++++++++--- .../web/src/components/state_updater.ts | 5 ++++ src/client/web/src/i18n/en_US.ts | 2 ++ src/client/web/src/i18n/zh_CN.ts | 2 ++ 7 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/client/web/src/client/index.ts b/src/client/web/src/client/index.ts index b2d390d..b3d598b 100644 --- a/src/client/web/src/client/index.ts +++ b/src/client/web/src/client/index.ts @@ -28,6 +28,7 @@ export interface Preferences { lanPackURL: string; lan: string; } + export interface User { id: string; name: string; @@ -121,6 +122,7 @@ export interface IUsersClient { listRoles: () => Promise; getCaptchaID: () => Promise; setPreferences: (prefers: Preferences) => Promise; + resetUsedSpace: (userID: string) => Promise; } export interface IFilesClient { diff --git a/src/client/web/src/client/users.ts b/src/client/web/src/client/users.ts index 95a9d2f..dccbd4b 100644 --- a/src/client/web/src/client/users.ts +++ b/src/client/web/src/client/users.ts @@ -151,4 +151,14 @@ export class UsersClient extends BaseClient { }, }); }; + + resetUsedSpace = (userID: string): Promise => { + return this.do({ + method: "put", + url: `${this.url}/v1/users/used-space`, + data: { + userID, + }, + }); + }; } diff --git a/src/client/web/src/client/users_mock.ts b/src/client/web/src/client/users_mock.ts index 4bd8395..ebc8f5b 100644 --- a/src/client/web/src/client/users_mock.ts +++ b/src/client/web/src/client/users_mock.ts @@ -17,6 +17,7 @@ export interface UsersClientResps { selfMockResp?: Response; getCaptchaIDMockResp?: Response; setPreferencesMockResp?: Response; + resetUsedSpaceMockResp?: Response; } export const resps = { @@ -107,6 +108,11 @@ export const resps = { statusText: "", data: {}, }, + resetUsedSpaceMockResp: { + status: 200, + statusText: "", + data: {} + } }; export class MockUsersClient { private url: string; @@ -186,6 +192,10 @@ export class MockUsersClient { setPreferences = (prefers: Preferences): Promise => { return this.wrapPromise(this.resps.setPreferencesMockResp); }; + + resetUsedSpace = (userID: string): Promise => { + return this.wrapPromise(this.resps.resetUsedSpaceMockResp); + } } export class JestUsersClient { @@ -215,6 +225,9 @@ export class JestUsersClient { setPreferences = jest .fn() .mockReturnValue(makePromise(resps.setPreferencesMockResp)); + resetUsedSpace = jest + .fn() + .mockReturnValue(makePromise(resps.resetUsedSpaceMockResp)); } export const NewMockUsersClient = (url: string): IUsersClient => { diff --git a/src/client/web/src/components/pane_admin.tsx b/src/client/web/src/components/pane_admin.tsx index fbd4b9f..1ed938e 100644 --- a/src/client/web/src/components/pane_admin.tsx +++ b/src/client/web/src/components/pane_admin.tsx @@ -109,6 +109,17 @@ export class UserForm extends React.Component< this.props.update(updater().updateUI); }; + resetUsedSpace = async (userID: string) => { + if (!confirmMsg(this.props.msg.pkg.get("confirm.resetUsedSpace"))) { + return; + } + + const status = await updater().resetUsedSpace(userID); + if (status !== "") { + alertMsg(this.props.msg.pkg.get("resetUsedSpace")); + } + } + setPwd = async () => { if (this.state.newPwd1 !== this.state.newPwd2) { alertMsg(this.props.msg.pkg.get("settings.pwd.notSame")); @@ -190,6 +201,9 @@ export class UserForm extends React.Component< render() { const foldedClass = this.state.folded ? "hidden" : ""; const foldIconColor = this.state.folded ? "black-font" : "cyan1-font"; + const resetUsedSpace = () => { + this.resetUsedSpace(this.props.id); + } return (
@@ -295,9 +309,15 @@ export class UserForm extends React.Component<
, - , +
+ +
+ +
, ])} childrenStyles={List([ { alignItems: "flex-start", flexBasis: "70%" }, @@ -668,7 +688,7 @@ interface BgProps { update?: (updater: (prevState: ICoreState) => ICoreState) => void; } -interface BgState {} +interface BgState { } export class BgCfg extends React.Component { changeSiteName = (ev: React.ChangeEvent) => { updater().setClientCfg({ ...this.props.ui, siteName: ev.target.value }); diff --git a/src/client/web/src/components/state_updater.ts b/src/client/web/src/components/state_updater.ts index 0d38906..de8e27a 100644 --- a/src/client/web/src/components/state_updater.ts +++ b/src/client/web/src/components/state_updater.ts @@ -965,6 +965,11 @@ export class Updater { this.updateSharings(sorted); }; + resetUsedSpace = async (userID: string): Promise => { + const resp = await this.usersClient.resetUsedSpace(userID); + return resp.status == 200 ? "" : errServer; + }; + updateAll = (prevState: ICoreState): ICoreState => { return { filesInfo: { ...prevState.filesInfo, ...this.props.filesInfo }, diff --git a/src/client/web/src/i18n/en_US.ts b/src/client/web/src/i18n/en_US.ts index eae8ad3..f7c1d09 100644 --- a/src/client/web/src/i18n/en_US.ts +++ b/src/client/web/src/i18n/en_US.ts @@ -138,4 +138,6 @@ export const msgs: Map = Map({ "endpoints.home": "Home", "state.stopped": "Stopped", "state.error": "Error", + "resetUsedSpace": "Reset Used Space", + "confirm.resetUsedSpace": "The operation may take some time, do you confirm?" }); diff --git a/src/client/web/src/i18n/zh_CN.ts b/src/client/web/src/i18n/zh_CN.ts index 239bd0a..9f6d167 100644 --- a/src/client/web/src/i18n/zh_CN.ts +++ b/src/client/web/src/i18n/zh_CN.ts @@ -135,4 +135,6 @@ export const msgs: Map = Map({ "endpoints.home": "家", "state.stopped": "已停止", "state.error": "错误", + "resetUsedSpace": "重置已用空间", + "confirm.resetUsedSpace": "此操作可能会需要一些时间, 确认吗?" });