* Web:Settings: Backup: Added create schedule at document module, added information about created schedule for documents module and Refactoring.

This commit is contained in:
Tatiana Lopaeva 2021-05-07 16:23:46 +03:00
parent 143245c0c5
commit 7541e4bfe5
5 changed files with 274 additions and 105 deletions

View File

@ -115,7 +115,7 @@ export function createBackupSchedule(
backupsStored, backupsStored,
Period, Period,
Hour, Hour,
Day, Day = null,
backupMail = false backupMail = false
) { ) {
const storageParams = [ const storageParams = [

View File

@ -43,26 +43,29 @@ class OperationsDialog extends React.PureComponent {
}; };
} }
componentDidMount() { componentDidMount() {
const { fetchTreeFolders, getCommonFolder } = this.props; const { fetchTreeFolders, getCommonFolder, folderPath } = this.props;
this.setState({ isLoading: true }, function () { this.setState({ isLoading: true }, function () {
fetchTreeFolders() fetchTreeFolders()
.then(() => getCommonFolder()) .then(() => getCommonFolder())
.finally(() => this.setState({ isLoading: false })); .finally(() => this.setState({ isLoading: false }));
}); });
}
componentDidUpdate(prevProps) { if (folderPath.length !== 0) {
const { commonTreeFolder, onSelectFolder } = this.props; this.getTitlesFolders(folderPath);
}
if (commonTreeFolder.length !== prevProps.commonTreeFolder.length) { }
onSelectFolder(commonTreeFolder.id);
componentDidUpdate(prevProps) {
const { commonTreeFolder, onSelectFolder, folderPath } = this.props;
if (
commonTreeFolder.length !== prevProps.commonTreeFolder.length &&
folderPath.length === 0
) {
onSelectFolder([`${commonTreeFolder.id}`]);
} }
} }
// onClose = () => {
// const { setPanelVisible } = this.props;
// setPanelVisible(false);
// };
onSelect = (folder, treeNode) => { onSelect = (folder, treeNode) => {
const { onSelectFolder, onClose } = this.props; const { onSelectFolder, onClose } = this.props;
this.setState({ isLoadingData: true }, function () { this.setState({ isLoadingData: true }, function () {
@ -84,10 +87,7 @@ class OperationsDialog extends React.PureComponent {
}; };
getTitlesFolders = (folderPath) => { getTitlesFolders = (folderPath) => {
const { selectedInput } = this.state; const { selectedInput } = this.state;
//debugger;
//console.log("selectedInput", selectedInput);
//debugger;
path = ""; path = "";
if (folderPath.length > 1) { if (folderPath.length > 1) {
for (let item of folderPath) { for (let item of folderPath) {
@ -109,10 +109,6 @@ class OperationsDialog extends React.PureComponent {
}); });
} }
}; };
// onClickInput = (e) => {
// const { setPanelVisible } = this.props;
// setPanelVisible(true);
// };
render() { render() {
const { const {
@ -130,7 +126,6 @@ class OperationsDialog extends React.PureComponent {
} = this.props; } = this.props;
const { isLoading, selectedInput, isLoadingData } = this.state; const { isLoading, selectedInput, isLoadingData } = this.state;
const zIndex = 310; const zIndex = 310;
console.log("folderList ", isLoadingData);
return ( return (
<StyledComponent> <StyledComponent>
@ -184,12 +179,13 @@ class OperationsDialog extends React.PureComponent {
OperationsDialog.defaultProps = { OperationsDialog.defaultProps = {
isCommonWithoutProvider: false, isCommonWithoutProvider: false,
folderList: "", folderList: "",
folderPath: "",
}; };
const OperationsDialogWrapper = inject( const OperationsDialogWrapper = inject(
({ auth, filesStore, treeFoldersStore, selectedFolderStore }) => { ({ auth, filesStore, treeFoldersStore, selectedFolderStore }) => {
const { filter } = filesStore; const { filter } = filesStore;
const { setPanelVisible, panelVisible } = auth; const { setPanelVisible, panelVisible } = auth;
const { getFolderPath, folderPath } = auth.settingsStore; const { getFolderPath } = auth.settingsStore;
const { const {
fetchTreeFolders, fetchTreeFolders,
expandedPanelKeys, expandedPanelKeys,
@ -208,8 +204,6 @@ const OperationsDialogWrapper = inject(
commonTreeFolder, commonTreeFolder,
getCommonFolder, getCommonFolder,
panelVisible, panelVisible,
folderPath,
}; };
} }
)(observer(withTranslation("OperationsPanel")(OperationsDialog))); )(observer(withTranslation("OperationsPanel")(OperationsDialog)));

View File

@ -11,11 +11,16 @@ import styled from "styled-components";
import moment from "moment"; import moment from "moment";
import ScheduleComponent from "./sub-components/scheduleComponent"; import ScheduleComponent from "./sub-components/scheduleComponent";
import { import {
createBackupSchedule,
deleteBackupSchedule, deleteBackupSchedule,
getBackupProgress, getBackupProgress,
getBackupSchedule,
} from "@appserver/common/api/portal"; } from "@appserver/common/api/portal";
import SaveCancelButtons from "@appserver/components/save-cancel-buttons"; import SaveCancelButtons from "@appserver/components/save-cancel-buttons";
import toastr from "@appserver/components/toast/toastr"; import toastr from "@appserver/components/toast/toastr";
import FileInputWithFolderPath from "@appserver/components/file-input-with-folder-path";
import OperationsDialog from "files/OperationsDialog";
import { getFolderPath } from "@appserver/common/api/files";
const StyledComponent = styled.div` const StyledComponent = styled.div`
${commonSettingsStyles} ${commonSettingsStyles}
@ -58,6 +63,7 @@ const StyledComponent = styled.div`
const StyledModules = styled.div` const StyledModules = styled.div`
margin-bottom: 40px; margin-bottom: 40px;
`; `;
class AutomaticBackup extends React.Component { class AutomaticBackup extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -67,7 +73,6 @@ class AutomaticBackup extends React.Component {
moment.locale(this.lng); moment.locale(this.lng);
this.state = { this.state = {
backupMail: false,
isShowedStorageType: false, //if current automatic storage not choose isShowedStorageType: false, //if current automatic storage not choose
isShowDocuments: false, isShowDocuments: false,
@ -84,14 +89,19 @@ class AutomaticBackup extends React.Component {
selectedOption: t("DailyPeriodSchedule"), selectedOption: t("DailyPeriodSchedule"),
selectedWeekdayOption: "", selectedWeekdayOption: "",
selectedNumberWeekdayOption: "2",
selectedTimeOption: "12:00", selectedTimeOption: "12:00",
selectedMonthOption: "1", selectedMonthOption: "1",
selectedMaxCopies: "10", selectedMaxCopies: "10",
selectedNumberMaxCopies: "10",
selectedPermission: "disable",
weekOptions: [], weekOptions: [],
isCopyingToLocal: true, isCopyingToLocal: true,
isLoadingData: false, isLoadingData: false,
selectedFolder: "",
isPanelVisible: false,
isLoading: false,
}; };
this.periodOptions = [ this.periodOptions = [
@ -123,6 +133,7 @@ class AutomaticBackup extends React.Component {
componentDidMount() { componentDidMount() {
this.getWeekdaysOptions(); this.getWeekdaysOptions();
getBackupProgress().then((res) => { getBackupProgress().then((res) => {
if (res) { if (res) {
if (res.progress === 100) if (res.progress === 100)
@ -131,8 +142,68 @@ class AutomaticBackup extends React.Component {
}); });
if (res.progress !== 100) if (res.progress !== 100)
this.timerId = setInterval(() => this.getProgress(), 1000); this.timerId = setInterval(() => this.getProgress(), 1000);
} else {
this.setState({
isCopyingToLocal: false,
});
} }
}); });
this.setState({ isLoading: true }, function () {
getBackupSchedule()
.then((selectedSchedule) => {
if (selectedSchedule) {
this.folderId = selectedSchedule.storageParams.folderId;
this.onSelectFolder([`${this.folderId}`]);
getFolderPath(this.folderId)
.then((folderPath) => (this.folderPath = folderPath))
.then(() => {
this.setState({
selectedPermission: "enable",
isShowedStorageTypes: true,
});
if (selectedSchedule.storageType === 0) {
// Documents Module
this.setState({
isShowDocuments: true,
isCheckedDocuments: true,
selectedTimeOption: `${selectedSchedule.cronParams.hour}:00`,
selectedMaxCopies: `${selectedSchedule.backupsStored}`,
});
if (selectedSchedule.cronParams.period === 1) {
//Every Week option
const selectedDay = selectedSchedule.cronParams.day; //selected number of week
const arrayIndex =
this.lng === "en" ? selectedDay - 1 : selectedDay - 2;
console.log("this.weekdaysOptions", this.weekdaysOptions);
this.setState({
selectedOption: this.periodOptions[1].label,
weeklySchedule: true,
selectedWeekdayOption: this.weekdaysOptions[arrayIndex]
.label,
});
} else {
if (selectedSchedule.cronParams.period === 2) {
//Every Month option
this.setState({
selectedOption: this.periodOptions[2].label,
monthlySchedule: true,
selectedMonthOption: `${selectedSchedule.cronParams.day}`, //selected day of month
});
}
}
}
});
}
})
.finally(() =>
this.setState({
isLoading: false,
})
);
});
} }
componentWillUnmount() { componentWillUnmount() {
clearInterval(this.timerId); clearInterval(this.timerId);
@ -181,7 +252,7 @@ class AutomaticBackup extends React.Component {
const { t } = this.props; const { t } = this.props;
for (let item = 1; item <= 30; item++) { for (let item = 1; item <= 30; item++) {
let obj = { let obj = {
key: item, key: `${item}`,
label: `${item} ${t("MaxCopies")}`, label: `${item} ${t("MaxCopies")}`,
}; };
this.maxNumberCopiesArray.push(obj); this.maxNumberCopiesArray.push(obj);
@ -190,7 +261,7 @@ class AutomaticBackup extends React.Component {
getWeekdaysOptions = () => { getWeekdaysOptions = () => {
for (let item = 0; item < this.arrayWeekdays.length; item++) { for (let item = 0; item < this.arrayWeekdays.length; item++) {
let obj = { let obj = {
key: item + 4, key: `${item + 1}`,
label: `${this.arrayWeekdays[item]}`, label: `${this.arrayWeekdays[item]}`,
}; };
this.weekdaysOptions.push(obj); this.weekdaysOptions.push(obj);
@ -258,32 +329,32 @@ class AutomaticBackup extends React.Component {
isCheckedThirdPartyStorage: true, isCheckedThirdPartyStorage: true,
}); });
}; };
onClickCheckbox = (e) => {
const { backupMail } = this.state;
let change = !backupMail;
this.setState({ backupMail: change });
};
onSelectPeriodAndWeekday = (options) => { onSelectPeriod = (options) => {
console.log("options", options); console.log("options", options);
const key = options.key; const key = options.key;
const label = options.label; const label = options.label;
if (key <= 3) { this.setState({ selectedOption: label });
this.setState({ selectedOption: label }); key === 1
key === 1 ? this.setState({ weeklySchedule: false, monthlySchedule: false })
? this.setState({ weeklySchedule: false, monthlySchedule: false }) : key === 2
: key === 2 ? this.setState({ weeklySchedule: true, monthlySchedule: false })
? this.setState({ weeklySchedule: true, monthlySchedule: false }) : this.setState({ monthlySchedule: true, weeklySchedule: false });
: this.setState({ monthlySchedule: true, weeklySchedule: false });
} else {
this.setState({
selectedWeekdayOption: label,
});
}
}; };
onSelectWeedDay = (options) => {
console.log("options", options);
const key = options.key;
const label = options.label;
this.setState({
selectedNumberWeekdayOption: key,
selectedWeekdayOption: label,
});
};
onSelectMonthNumberAndTimeOptions = (options) => { onSelectMonthNumberAndTimeOptions = (options) => {
const key = options.key; const key = options.key;
const label = options.label; const label = options.label;
@ -296,9 +367,12 @@ class AutomaticBackup extends React.Component {
} }
}; };
onSelectMaxCopies = (options) => { onSelectMaxCopies = (options) => {
const key = options.key;
const label = options.label;
console.log("opr max", options); console.log("opr max", options);
this.setState({ this.setState({
selectedMaxCopies: options.label, selectedNumberMaxCopies: key,
selectedMaxCopies: label,
}); });
}; };
@ -311,10 +385,73 @@ class AutomaticBackup extends React.Component {
.finally(() => this.setState({ isLoadingData: false })); .finally(() => this.setState({ isLoadingData: false }));
}); });
}; };
render() {
const { t, language } = this.props; onSelectFolder = (folderId) => {
console.log("folderId", folderId);
this.setState({
selectedFolder: folderId,
});
};
onSaveDocumentsModuleSettings = () => {
const {
selectedFolder,
weeklySchedule,
selectedTimeOption,
monthlySchedule,
selectedMonthOption,
selectedNumberWeekdayOption,
selectedNumberMaxCopies,
} = this.state;
const { t } = this.props;
this.setState({ isLoadingData: true }, function () {
let period = weeklySchedule ? "1" : monthlySchedule ? "2" : "0";
let day = weeklySchedule
? selectedNumberWeekdayOption
: monthlySchedule
? selectedMonthOption
: null;
let time = selectedTimeOption.substring(
0,
selectedTimeOption.indexOf(":")
);
console.log("selectedNumberMaxCopies", selectedNumberMaxCopies);
console.log("period", period);
console.log("selectedTimeOption", selectedTimeOption);
console.log("time", time);
console.log("day", day);
createBackupSchedule(
"0",
"folderId",
selectedFolder[0],
selectedNumberMaxCopies,
period,
time,
day
)
.then(() => toastr.success(t("SuccessfullySaveSettingsMessage")))
.catch((error) => console.log("error", error))
.finally(() => this.setState({ isLoadingData: false }));
});
};
onClickInput = (e) => {
this.setState({
isPanelVisible: true,
});
};
onClose = () => {
this.setState({
isPanelVisible: false,
});
};
render() {
const { t, panelVisible } = this.props;
const { const {
backupMail,
isShowedStorageTypes, isShowedStorageTypes,
isCheckedDocuments, isCheckedDocuments,
isCheckedThirdParty, isCheckedThirdParty,
@ -332,10 +469,15 @@ class AutomaticBackup extends React.Component {
selectedMaxCopies, selectedMaxCopies,
isCopyingToLocal, isCopyingToLocal,
isLoadingData, isLoadingData,
isPanelVisible,
selectedPermission,
isLoading,
} = this.state; } = this.state;
console.log("isCheckedDocuments", isCheckedDocuments); console.log("this.folderPath", this.folderPath);
return ( return isLoading ? (
<></>
) : (
<StyledComponent> <StyledComponent>
<RadioButtonGroup <RadioButtonGroup
className="automatic-backup_main " className="automatic-backup_main "
@ -353,7 +495,7 @@ class AutomaticBackup extends React.Component {
isDisabled={isLoadingData} isDisabled={isLoadingData}
onClick={this.onClickPermissions} onClick={this.onClickPermissions}
orientation="vertical" orientation="vertical"
selected="disable" selected={selectedPermission}
/> />
{isShowedStorageTypes && ( {isShowedStorageTypes && (
@ -373,28 +515,51 @@ class AutomaticBackup extends React.Component {
{t("DocumentsModuleDescription")} {t("DocumentsModuleDescription")}
</Text> </Text>
{isShowDocuments && ( {isShowDocuments && (
<ScheduleComponent <>
weeklySchedule={weeklySchedule} <OperationsDialog
monthlySchedule={monthlySchedule} onSelectFolder={this.onSelectFolder}
weekOptions={weekOptions} name={"common"}
selectedOption={selectedOption} onClose={this.onClose}
selectedWeekdayOption={selectedWeekdayOption} onClickInput={this.onClickInput}
selectedTimeOption={selectedTimeOption} isPanelVisible={isPanelVisible}
selectedMonthOption={selectedMonthOption} isCommonWithoutProvider
selectedMaxCopies={selectedMaxCopies} folderPath={this.folderPath}
periodOptions={this.periodOptions} />
monthNumberOptionsArray={this.monthNumberOptionsArray}
timeOptionsArray={this.timeOptionsArray} <ScheduleComponent
maxNumberCopiesArray={this.maxNumberCopiesArray} weeklySchedule={weeklySchedule}
backupMail={backupMail} monthlySchedule={monthlySchedule}
onClickCheckbox={this.onClickCheckbox} weekOptions={weekOptions}
onSelectMaxCopies={this.onSelectMaxCopies} selectedOption={selectedOption}
onSelectMonthNumberAndTimeOptions={ selectedWeekdayOption={selectedWeekdayOption}
this.onSelectMonthNumberAndTimeOptions selectedTimeOption={selectedTimeOption}
} selectedMonthOption={selectedMonthOption}
onSelectPeriodAndWeekday={this.onSelectPeriodAndWeekday} selectedMaxCopies={selectedMaxCopies}
/> periodOptions={this.periodOptions}
monthNumberOptionsArray={this.monthNumberOptionsArray}
timeOptionsArray={this.timeOptionsArray}
maxNumberCopiesArray={this.maxNumberCopiesArray}
onClickCheckbox={this.onClickCheckbox}
onSelectMaxCopies={this.onSelectMaxCopies}
onSelectMonthNumberAndTimeOptions={
this.onSelectMonthNumberAndTimeOptions
}
onSelectWeedDay={this.onSelectWeedDay}
onSelectPeriod={this.onSelectPeriod}
/>
</>
)} )}
<SaveCancelButtons
className="team-template_buttons"
onSaveClick={this.onSaveDocumentsModuleSettings}
onCancelClick={() => console.log("cancel")}
showReminder={false}
reminderTest={t("YouHaveUnsavedChanges")}
saveButtonLabel={t("SaveButton")}
cancelButtonLabel={t("CancelButton")}
isDisabled={isCopyingToLocal || isLoadingData}
/>
</StyledModules> </StyledModules>
<StyledModules> <StyledModules>
@ -414,27 +579,37 @@ class AutomaticBackup extends React.Component {
{t("ThirdPartyResourceNoteDescription")} {t("ThirdPartyResourceNoteDescription")}
</Text> </Text>
{isShowThirdParty && ( {isShowThirdParty && (
<ScheduleComponent <>
weeklySchedule={weeklySchedule} <OperationsDialog
monthlySchedule={monthlySchedule} onSelectFolder={this.onSelectFolder}
weekOptions={weekOptions} name={"common"}
selectedOption={selectedOption} onClose={this.onClose}
selectedWeekdayOption={selectedWeekdayOption} onClickInput={this.onClickInput}
selectedTimeOption={selectedTimeOption} isPanelVisible={isPanelVisible}
selectedMonthOption={selectedMonthOption} isCommonWithoutProvider
selectedMaxCopies={selectedMaxCopies} />
periodOptions={this.periodOptions} <ScheduleComponent
monthNumberOptionsArray={this.monthNumberOptionsArray} weeklySchedule={weeklySchedule}
timeOptionsArray={this.timeOptionsArray} monthlySchedule={monthlySchedule}
maxNumberCopiesArray={this.maxNumberCopiesArray} weekOptions={weekOptions}
backupMail={backupMail} selectedOption={selectedOption}
onClickCheckbox={this.onClickCheckbox} selectedWeekdayOption={selectedWeekdayOption}
onSelectMaxCopies={this.onSelectMaxCopies} selectedTimeOption={selectedTimeOption}
onSelectMonthNumberAndTimeOptions={ selectedMonthOption={selectedMonthOption}
this.onSelectMonthNumberAndTimeOptions selectedMaxCopies={selectedMaxCopies}
} periodOptions={this.periodOptions}
onSelectPeriodAndWeekday={this.onSelectPeriodAndWeekday} monthNumberOptionsArray={this.monthNumberOptionsArray}
/> timeOptionsArray={this.timeOptionsArray}
maxNumberCopiesArray={this.maxNumberCopiesArray}
onClickCheckbox={this.onClickCheckbox}
onSelectMaxCopies={this.onSelectMaxCopies}
onSelectMonthNumberAndTimeOptions={
this.onSelectMonthNumberAndTimeOptions
}
onSelectWeedDay={this.onSelectWeedDay}
onSelectPeriod={this.onSelectPeriod}
/>
</>
)} )}
</StyledModules> </StyledModules>
@ -468,13 +643,13 @@ class AutomaticBackup extends React.Component {
monthNumberOptionsArray={this.monthNumberOptionsArray} monthNumberOptionsArray={this.monthNumberOptionsArray}
timeOptionsArray={this.timeOptionsArray} timeOptionsArray={this.timeOptionsArray}
maxNumberCopiesArray={this.maxNumberCopiesArray} maxNumberCopiesArray={this.maxNumberCopiesArray}
backupMail={backupMail}
onClickCheckbox={this.onClickCheckbox} onClickCheckbox={this.onClickCheckbox}
onSelectMaxCopies={this.onSelectMaxCopies} onSelectMaxCopies={this.onSelectMaxCopies}
onSelectMonthNumberAndTimeOptions={ onSelectMonthNumberAndTimeOptions={
this.onSelectMonthNumberAndTimeOptions this.onSelectMonthNumberAndTimeOptions
} }
onSelectPeriodAndWeekday={this.onSelectPeriodAndWeekday} onSelectWeedDay={this.onSelectWeedDay}
onSelectPeriod={this.onSelectPeriod}
/> />
)} )}
</StyledModules> </StyledModules>
@ -497,8 +672,9 @@ class AutomaticBackup extends React.Component {
} }
export default inject(({ auth }) => { export default inject(({ auth }) => {
const { language } = auth; const { language } = auth;
const { panelVisible } = auth;
return { return {
language, language,
panelVisible,
}; };
})(withTranslation("Settings")(observer(AutomaticBackup))); })(withTranslation("Settings")(observer(AutomaticBackup)));

View File

@ -25,7 +25,7 @@ const DocumentsModule = ({ maxProgress, setInterval }) => {
const onClickButton = () => { const onClickButton = () => {
console.log("selectedFolder", selectedFolder); console.log("selectedFolder", selectedFolder);
startBackup("0", "folderId", selectedFolder); startBackup("0", "folderId", selectedFolder[0]);
setInterval(); setInterval();
}; };
//console.log("thirdparty!!! commonThirdPartyList", commonThirdPartyList); //console.log("thirdparty!!! commonThirdPartyList", commonThirdPartyList);

View File

@ -13,13 +13,12 @@ const ScheduleComponent = ({
timeOptionsArray, timeOptionsArray,
periodOptions, periodOptions,
monthNumberOptionsArray, monthNumberOptionsArray,
onSelectPeriodAndWeekday,
onSelectMonthNumberAndTimeOptions, onSelectMonthNumberAndTimeOptions,
selectedMaxCopies, selectedMaxCopies,
onSelectMaxCopies, onSelectMaxCopies,
maxNumberCopiesArray, maxNumberCopiesArray,
onClickCheckbox, onSelectPeriod,
backupMail, onSelectWeedDay,
}) => { }) => {
const { t } = useTranslation("Settings"); const { t } = useTranslation("Settings");
return ( return (
@ -30,7 +29,7 @@ const ScheduleComponent = ({
key: 0, key: 0,
label: selectedOption, label: selectedOption,
}} }}
onSelect={onSelectPeriodAndWeekday} onSelect={onSelectPeriod}
isDisabled={false} isDisabled={false}
noBorder={false} noBorder={false}
scaled={false} scaled={false}
@ -46,7 +45,7 @@ const ScheduleComponent = ({
key: 0, key: 0,
label: selectedWeekdayOption, label: selectedWeekdayOption,
}} }}
onSelect={onSelectPeriodAndWeekday} onSelect={onSelectWeedDay}
isDisabled={false} isDisabled={false}
noBorder={false} noBorder={false}
scaled={false} scaled={false}
@ -103,14 +102,14 @@ const ScheduleComponent = ({
size="content" size="content"
className="backup_combobox" className="backup_combobox"
/> />
<div className="backup-include_mail"> {/* <div className="backup-include_mail">
<Checkbox <Checkbox
name={"backupMail"} name={"backupMail"}
isChecked={backupMail} isChecked={backupMail}
label={t("IncludeMail")} label={t("IncludeMail")}
onChange={onClickCheckbox} onChange={onClickCheckbox}
/> />
</div> </div> */}
</div> </div>
); );
}; };