Merge branch 'develop' into bugfix/61157
This commit is contained in:
commit
626bb741b5
@ -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,
|
||||
|
@ -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)));
|
||||
|
@ -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>
|
||||
</>
|
||||
);
|
||||
|
@ -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">
|
||||
|
@ -89,6 +89,7 @@ const LanguagesCombo = (props) => {
|
||||
/>
|
||||
</Text>
|
||||
<ComboBox
|
||||
className="language-combo-box"
|
||||
directionY="both"
|
||||
options={cultureNames}
|
||||
selectedOption={selectedLanguage}
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -131,7 +131,7 @@
|
||||
"Megabyte": "Мб",
|
||||
"Member": "Участник",
|
||||
"Members": "Участники",
|
||||
"Name": "Название",
|
||||
"Name": "Имя",
|
||||
"NewDocument": "Новый документ",
|
||||
"NewFolder": "Новая папка",
|
||||
"NewMasterForm": "Новый шаблон формы",
|
||||
|
Loading…
Reference in New Issue
Block a user