Merge branch 'develop' into bugfix/61157

This commit is contained in:
Alexey Safronov 2023-03-06 17:34:37 +04:00
commit 626bb741b5
11 changed files with 200 additions and 77 deletions

View File

@ -18,7 +18,7 @@ class ConfirmRoute extends React.Component {
}
componentDidMount() {
const { forUnauthorized, history, isAuthenticated } = this.props;
const { forUnauthorized, isAuthenticated } = this.props;
if (forUnauthorized && isAuthenticated) {
this.props.logout();
@ -42,18 +42,25 @@ class ConfirmRoute extends React.Component {
.then((validationResult) => {
switch (validationResult) {
case ValidationResult.Ok:
const confirmHeader = `${confirmLinkData}&${search.slice(1)}`;
const confirmHeader = search.slice(1);
const linkData = {
...confirmLinkData,
confirmHeader,
};
console.log("checkConfirmLink", {
confirmLinkData,
validationResult,
linkData,
});
this.setState({
isLoaded: true,
linkData,
});
break;
case ValidationResult.Invalid:
console.error("invlid link");
console.error("invlid link", { confirmLinkData, validationResult });
window.location.href = combineUrl(
window.DocSpaceConfig?.proxy?.url,
path,
@ -61,7 +68,10 @@ class ConfirmRoute extends React.Component {
);
break;
case ValidationResult.Expired:
console.error("expired link");
console.error("expired link", {
confirmLinkData,
validationResult,
});
window.location.href = combineUrl(
window.DocSpaceConfig?.proxy?.url,
path,
@ -69,7 +79,10 @@ class ConfirmRoute extends React.Component {
);
break;
default:
console.error("unknown link");
console.error("unknown link", {
confirmLinkData,
validationResult,
});
window.location.href = combineUrl(
window.DocSpaceConfig?.proxy?.url,
path,
@ -79,7 +92,7 @@ class ConfirmRoute extends React.Component {
}
})
.catch((error) => {
console.error(error);
console.error("FAILED checkConfirmLink", { error, confirmLinkData });
window.location.href = combineUrl(
window.DocSpaceConfig?.proxy?.url,
path,

View File

@ -6,17 +6,18 @@ import Section from "@docspace/common/components/Section";
import { combineUrl } from "@docspace/common/utils";
import tryRedirectTo from "@docspace/common/utils/tryRedirectTo";
import { inject, observer } from "mobx-react";
import { EmployeeActivationStatus } from "@docspace/common/constants";
class ActivateEmail extends React.PureComponent {
componentDidMount() {
const { logout, changeEmail, linkData } = this.props;
const { logout, updateEmailActivationStatus, linkData } = this.props;
const [email, uid, key] = [
linkData.email,
linkData.uid,
linkData.confirmHeader,
];
logout().then(() =>
changeEmail(uid, email, key)
updateEmailActivationStatus(EmployeeActivationStatus.Activated, uid, key)
.then((res) => {
tryRedirectTo(
combineUrl(
@ -70,6 +71,6 @@ export default inject(({ auth }) => {
const { logout, userStore } = auth;
return {
logout,
changeEmail: userStore.changeEmail,
updateEmailActivationStatus: userStore.updateEmailActivationStatus,
};
})(withRouter(observer(ActivateEmailForm)));

View File

@ -162,25 +162,39 @@ const AdditionalResources = (props) => {
await getAdditionalResources();
setIsLoading(false);
}, [
setIsLoading,
restoreAdditionalResources,
getAdditionalResources,
]);
}, [setIsLoading, restoreAdditionalResources, getAdditionalResources]);
const onChangeFeedback = () => {
setAdditionalSettings({...additionalSettings, feedbackAndSupportEnabled: !feedbackAndSupportEnabled});
saveToSessionStorage("additionalSettings", {...additionalSettings, feedbackAndSupportEnabled: !feedbackAndSupportEnabled});
setAdditionalSettings({
...additionalSettings,
feedbackAndSupportEnabled: !feedbackAndSupportEnabled,
});
saveToSessionStorage("additionalSettings", {
...additionalSettings,
feedbackAndSupportEnabled: !feedbackAndSupportEnabled,
});
};
const onChangeVideoGuides = () => {
setAdditionalSettings({...additionalSettings, videoGuidesEnabled: !videoGuidesEnabled});
saveToSessionStorage("additionalSettings", {...additionalSettings, videoGuidesEnabled: !videoGuidesEnabled});
setAdditionalSettings({
...additionalSettings,
videoGuidesEnabled: !videoGuidesEnabled,
});
saveToSessionStorage("additionalSettings", {
...additionalSettings,
videoGuidesEnabled: !videoGuidesEnabled,
});
};
const onChangeHelpCenter = () => {
setAdditionalSettings({...additionalSettings, helpCenterEnabled: !helpCenterEnabled});
saveToSessionStorage("additionalSettings", {...additionalSettings, helpCenterEnabled: !helpCenterEnabled});
setAdditionalSettings({
...additionalSettings,
helpCenterEnabled: !helpCenterEnabled,
});
saveToSessionStorage("additionalSettings", {
...additionalSettings,
helpCenterEnabled: !helpCenterEnabled,
});
};
if (!isLoadedAdditionalResources) return <LoaderAdditionalResources />;
@ -223,7 +237,6 @@ const AdditionalResources = (props) => {
onChange={onChangeHelpCenter}
/>
</div>
{isSettingPaid && (
<SaveCancelButtons
tabIndex={15}
onSaveClick={onSave}
@ -235,7 +248,6 @@ const AdditionalResources = (props) => {
showReminder={(isSettingPaid && hasChange) || isLoading}
disableRestoreToDefault={additionalResourcesIsDefault || isLoading}
/>
)}
</StyledComponent>
</>
);

View File

@ -90,6 +90,8 @@ const MainProfile = (props) => {
<Text as="div" className="label">
{t("Common:Email")}
</Text>
<div className="email-container">
<div className="email-edit-container">
<Text
as="div"
className={"email-text-container"}
@ -97,6 +99,30 @@ const MainProfile = (props) => {
>
{profile.email}
</Text>
<IconButton
className="edit-button email-edit-button"
iconName={PencilOutlineReactSvgUrl}
size="12"
onClick={() => setChangeEmailVisible(true)}
/>
</div>
{withActivationBar && (
<div
className="send-again-container send-again-desktop"
onClick={sendActivationLinkAction}
>
<ReactSVG
className="send-again-icon"
src={SendClockReactSvgUrl}
/>
<Text className="send-again-text" fontWeight={600} noSelect>
{t("SendAgain")}
</Text>
</div>
)}
</div>
{withActivationBar && (
<div
className="send-again-container send-again-mobile"
@ -113,25 +139,11 @@ const MainProfile = (props) => {
)}
</div>
<IconButton
className="edit-button"
className="edit-button email-edit-button-mobile"
iconName={PencilOutlineReactSvgUrl}
size="12"
onClick={() => setChangeEmailVisible(true)}
/>
{withActivationBar && (
<div
className="send-again-container send-again-desktop"
onClick={sendActivationLinkAction}
>
<ReactSVG
className="send-again-icon"
src={SendClockReactSvgUrl}
/>
<Text className="send-again-text" fontWeight={600} noSelect>
{t("SendAgain")}
</Text>
</div>
)}
</div>
<div className="row">
<div className="field">

View File

@ -89,6 +89,7 @@ const LanguagesCombo = (props) => {
/>
</Text>
<ComboBox
className="language-combo-box"
directionY="both"
options={cultureNames}
selectedOption={selectedLanguage}

View File

@ -3,6 +3,7 @@ import {
hugeMobile,
smallTablet,
desktop,
tablet,
} from "@docspace/components/utils/device";
export const StyledWrapper = styled.div`
@ -42,7 +43,13 @@ export const StyledInfo = styled.div`
display: flex;
flex-direction: column;
gap: 12px;
gap: 11px;
@media ${tablet} {
gap: 7px;
}
padding-top: 5px;
@media ${smallTablet} {
width: 100%;
@ -70,19 +77,23 @@ export const StyledInfo = styled.div`
.row {
display: flex;
align-items: center;
align-items: baseline;
gap: 8px;
line-height: 20px;
max-width: 100%;
@media ${desktop} {
height: 20px;
}
@media ${smallTablet} {
align-items: center;
}
.field {
display: flex;
gap: 16px;
align-items: baseline;
max-width: calc(100% - 28px);
& > p {
@ -91,8 +102,6 @@ export const StyledInfo = styled.div`
}
.email-text-container {
padding-left: 8px;
${(props) =>
props.withActivationBar &&
css`
@ -161,6 +170,31 @@ export const StyledInfo = styled.div`
.edit-button {
min-width: 12px;
svg path {
fill: ${(props) => props.theme.isBase && `#657077`};
}
}
.email-edit-button {
display: block;
padding-left: 8px;
}
.email-edit-container {
display: flex;
padding-right: 16px;
}
.email-container {
padding-left: 8px;
display: flex;
flex-wrap: wrap;
align-items: baseline;
}
.email-edit-button-mobile {
display: none;
}
@media ${smallTablet} {
@ -173,7 +207,7 @@ export const StyledInfo = styled.div`
flex-direction: column;
gap: 2px;
.email-text-container {
.email-container {
padding-left: 0px;
}
@ -191,6 +225,14 @@ export const StyledInfo = styled.div`
line-height: 16px !important;
}
.email-edit-button-mobile {
display: block;
}
.email-edit-button {
display: none;
}
.edit-button {
margin-left: auto;
min-width: 12px;
@ -227,6 +269,10 @@ export const StyledRow = styled.div`
white-space: nowrap;
}
.language-combo-box {
margin-left: -8px;
}
@media ${smallTablet} {
width: 100%;
flex-direction: column;

View File

@ -580,7 +580,16 @@ class UploadDataStore {
len = filesToConversion.length;
}
if (this.uploaded) {
const allFilesIsUploaded =
this.files.findIndex(
(f) =>
f.action !== "uploaded" &&
f.action !== "convert" &&
f.action !== "converted" &&
!f.error
) === -1;
if (this.uploaded || (this.isParallel && allFilesIsUploaded)) {
this.setConversionPercent(100);
this.finishUploadFiles();
} else {
@ -599,15 +608,19 @@ class UploadDataStore {
...this.tempConversionFiles,
];
if (this.uploaded) {
const newUploadData = {
if (this.uploaded || this.isParallel) {
let newUploadData = {
files: this.files,
filesSize: this.convertFilesSize,
uploadedFiles: this.uploadedFiles,
percent: this.percent,
uploaded: false,
converted: false,
// converted: false,
};
if (!this.isParallel)
newUploadData = { ...newUploadData, converted: false };
this.tempConversionFiles = [];
this.setUploadData(newUploadData);
@ -688,7 +701,9 @@ class UploadDataStore {
convertSize += file.size;
}
const countUploadingFiles = newFiles.length;
const countUploadingFiles = this.isParallel
? this.removeDuplicate([...this.files, ...newFiles]).length
: newFiles.length;
const countConversionFiles = this.tempConversionFiles.length;
if (countUploadingFiles && !countConversionFiles) {
@ -712,12 +727,19 @@ class UploadDataStore {
this.uploadedFilesHistory = clearArray;
const newUploadData = {
files: newFiles,
let newUploadData = {
files: this.isParallel
? this.removeDuplicate([...this.files, ...newFiles])
: newFiles,
filesSize,
uploadedFiles: this.uploadedFiles,
percent: this.percent,
uploaded: false,
// converted: !!this.tempConversionFiles.length,
};
if (!this.isParallel)
newUploadData = {
...newUploadData,
converted: !!this.tempConversionFiles.length,
};
@ -904,7 +926,8 @@ class UploadDataStore {
this.files[indexOfFile].action = "uploaded";
this.files[indexOfFile].fileId = fileId;
this.files[indexOfFile].fileInfo = fileInfo;
this.percent = newPercent;
if (!this.isParallel) this.percent = newPercent;
if (this.isParallel) {
this.currentUploadNumber -= 1;
@ -1164,7 +1187,11 @@ class UploadDataStore {
const allFilesIsUploaded =
this.files.findIndex(
(f) => f.action !== "uploaded" && f.action !== "convert" && !f.error
(f) =>
f.action !== "uploaded" &&
f.action !== "convert" &&
f.action !== "converted" &&
!f.error
) === -1;
if (allFilesIsUploaded) {

View File

@ -62,6 +62,19 @@ class UserStore {
this.setIsLoading(false);
};
updateEmailActivationStatus = async (activationStatus, userId, key) => {
this.setIsLoading(true);
const user = await api.people.updateActivationStatus(
activationStatus,
userId,
key
);
this.setUser(user);
this.setIsLoading(false);
};
changeTheme = async (key) => {
this.setIsLoading(true);

View File

@ -1,4 +1,3 @@
import history from "../history";
export default function (page) {
if (
window.location.pathname === page ||
@ -6,9 +5,8 @@ export default function (page) {
) {
return false;
}
//TODO: check if we already on default page
window.location.replace(page);
history.push(page); // SSR crash
return true;
}

View File

@ -102,7 +102,7 @@ const LoginForm: React.FC<ILoginFormProps> = ({
focusInput();
window.authCallback = authCallback;
}, []);
}, [message, confirmedEmail]);
const onChangeLogin = (e: React.ChangeEvent<HTMLInputElement>) => {
//console.log("onChangeLogin", e.target.value);

View File

@ -131,7 +131,7 @@
"Megabyte": "Мб",
"Member": "Участник",
"Members": "Участники",
"Name": "Название",
"Name": "Имя",
"NewDocument": "Новый документ",
"NewFolder": "Новая папка",
"NewMasterForm": "Новый шаблон формы",