diff --git a/packages/client/public/locales/en/Settings.json b/packages/client/public/locales/en/Settings.json index 54063be3f9..126af986fb 100644 --- a/packages/client/public/locales/en/Settings.json +++ b/packages/client/public/locales/en/Settings.json @@ -199,6 +199,7 @@ "SuccessfullySaveGreetingSettingsMessage": "Welcome Page settings have been successfully saved", "SuccessfullySavePortalNameMessage": "Space has been renamed successfully", "SuccessfullySaveSettingsMessage": "Settings have been successfully updated", + "DNSSettingsHint": "Enter domain name like this:", "TemporaryStorage": "Temporary storage", "TemporaryStorageDescription": "Backup is stored in the 'Backup' section, you will be able to download it within 24 hours after creating.", "ThirdPartyAuthorization": "Third-party Authorization", diff --git a/packages/client/public/locales/ru/Settings.json b/packages/client/public/locales/ru/Settings.json index 8950798aa9..5499b4d818 100644 --- a/packages/client/public/locales/ru/Settings.json +++ b/packages/client/public/locales/ru/Settings.json @@ -183,6 +183,7 @@ "SuccessfullySaveGreetingSettingsMessage": "Настройки страницы приветствия успешно сохранены", "SuccessfullySavePortalNameMessage": "Портал успешно переименован", "SuccessfullySaveSettingsMessage": "Настройки успешно обновлены", + "DNSSettingsHint": "Введите доменное имя следующим образом:", "TemporaryStorage": "Временное хранилище", "TemporaryStorageDescription": "Резервная копия будет храниться в разделе 'Резервное копирование', вы сможете скачать её в течение 24 часов с момента создания.", "ThirdPartyAuthorization": "Сторонние сервисы", diff --git a/packages/client/src/helpers/constants.js b/packages/client/src/helpers/constants.js index 773f81ab04..c8746d0f10 100644 --- a/packages/client/src/helpers/constants.js +++ b/packages/client/src/helpers/constants.js @@ -142,5 +142,3 @@ export const LinkType = Object.freeze({ Invite: 0, External: 1, }); - -export const SSO_LABEL = "SSO"; diff --git a/packages/client/src/pages/Confirm/sub-components/createUser.js b/packages/client/src/pages/Confirm/sub-components/createUser.js index 4fcd187436..874203fe8f 100644 --- a/packages/client/src/pages/Confirm/sub-components/createUser.js +++ b/packages/client/src/pages/Confirm/sub-components/createUser.js @@ -158,14 +158,22 @@ const CreateUserForm = (props) => { const headerKey = linkData.confirmHeader; try { + const toBinaryStr = (str) => { + const encoder = new TextEncoder(); + const charCodes = encoder.encode(str); + return String.fromCharCode(...charCodes); + }; + const loginData = window.btoa( - JSON.stringify({ - type: "invitation", - email, - roomName, - firstName: user.firstName, - lastName: user.lastName, - }), + toBinaryStr( + JSON.stringify({ + type: "invitation", + email, + roomName, + firstName: user.firstName, + lastName: user.lastName, + }), + ), ); await getUserByEmail(email, headerKey); @@ -176,6 +184,8 @@ const CreateUserForm = (props) => { `?loginData=${loginData}`, ); } catch (err) { + console.error(err); + const status = err?.response?.status; const isNotExistUser = status === 404; @@ -463,7 +473,7 @@ const CreateUserForm = (props) => { - +
{!registrationForm && ( diff --git a/packages/client/src/pages/Home/InfoPanel/Body/sub-components/ItemTitle/AccountsItemTitle.js b/packages/client/src/pages/Home/InfoPanel/Body/sub-components/ItemTitle/AccountsItemTitle.js index 2c19112187..13d2376b68 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/sub-components/ItemTitle/AccountsItemTitle.js +++ b/packages/client/src/pages/Home/InfoPanel/Body/sub-components/ItemTitle/AccountsItemTitle.js @@ -10,7 +10,6 @@ import Badges from "@docspace/client/src/pages/Home/Section/AccountsBody/Badges" import { StyledAccountsItemTitle } from "../../styles/accounts"; import { StyledTitle } from "../../styles/common"; -import { SSO_LABEL } from "SRC_DIR/helpers/constants"; import { decode } from "he"; const AccountsItemTitle = ({ @@ -31,7 +30,7 @@ const AccountsItemTitle = ({ const getData = () => { const newOptions = infoPanelSelection.options?.filter( - (option) => option !== "details" + (option) => option !== "details", ); return getUserContextOptions(t, newOptions || [], infoPanelSelection); }; @@ -82,7 +81,7 @@ const AccountsItemTitle = ({ {isSSO && ( { - // setIsScrollLocked(isOpen); - }; const getUserType = (item) => { if (item.isOwner) return "owner"; if (item.isAdmin) return "admin"; @@ -339,7 +336,6 @@ const User = ({ isLoading={isLoading} isMobileView={isMobileOnly} directionY="both" - onToggle={onToggle} displaySelectedOption /> ) : ( diff --git a/packages/client/src/pages/Home/Section/AccountsBody/Badges.js b/packages/client/src/pages/Home/Section/AccountsBody/Badges.js index c359ba81ee..d6b5ea893c 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/Badges.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/Badges.js @@ -12,8 +12,6 @@ import { commonIconsStyles } from "@docspace/shared/utils"; import SendClockIcon from "PUBLIC_DIR/images/send.clock.react.svg"; import CatalogSpamIcon from "PUBLIC_DIR/images/catalog.spam.react.svg"; -import { SSO_LABEL } from "SRC_DIR/helpers/constants"; - const StyledBadgesContainer = styled.div` height: 100%; @@ -96,7 +94,7 @@ const Badges = ({ {isSSO && ( { isDefaultDNS, dnsSettingsUrl, currentDeviceType, - domainValidator, + portalName, } = props; const [hasScroll, setHasScroll] = useState(false); const isLoadedSetting = isLoaded && tReady; @@ -110,19 +110,8 @@ const DNSSettings = (props) => { setIsLoading(true); }, [200]); - const isValidPortalName = validatePortalName( - dnsName || "", - domainValidator, - setErrorText, - t, - ); - - if (isValidPortalName) { - await saveDNSSettings(); - toastr.success(t("Settings:SuccessfullySaveSettingsMessage")); - } else { - setIsError(true); - } + await saveDNSSettings(); + toastr.success(t("Settings:SuccessfullySaveSettingsMessage")); } catch (e) { setIsError(true); toastr.error(e); @@ -131,6 +120,8 @@ const DNSSettings = (props) => { clearTimeout(timerId); timerId = null; setIsLoading(false); + + setIsError(false); }; const onClickToggle = (e) => { const checked = e.currentTarget.checked; @@ -138,10 +129,18 @@ const DNSSettings = (props) => { }; const onChangeTextInput = (e) => { - const { value } = e.target; isError && setIsError(false); - errorText && setErrorText(""); - setDNSName(value); + setErrorText(""); + + const { value } = e.target; + const dns = portalName ? value.slice(portalName.length + 1) : value; + + const isValidDomain = parseDomain(dns || "", setErrorText, t); + + if (!isValidDomain) { + setIsError(true); + } + setDNSName(dns); }; const checkInnerWidth = useCallback(() => { if (!isMobile()) { @@ -162,6 +161,8 @@ const DNSSettings = (props) => { } }, [isMobile, setIsCustomizationView]); + const domainExampleText = " team.ourcompany.com"; + const settingsBlock = (
{standalone ? ( @@ -177,13 +178,33 @@ const DNSSettings = (props) => {
- - {errorText} + {errorText && + errorText.map((err, index) => ( + + {err} + + ))} +
+
+ + {`${t("Settings:DNSSettingsHint")}${domainExampleText}`}
@@ -215,7 +236,7 @@ const DNSSettings = (props) => { size={currentDeviceType === DeviceType.desktop ? "small" : "normal"} label={t("Common:SaveButton")} onClick={onSaveSettings} - isDisabled={isLoading || isDefaultDNS} + isDisabled={isLoading || isDefaultDNS || isError} isLoading={isLoading} /> ) : ( @@ -224,7 +245,7 @@ const DNSSettings = (props) => { size={currentDeviceType === DeviceType.desktop ? "small" : "normal"} label={t("Common:SendRequest")} onClick={onSendRequest} - isDisabled={!isSettingPaid} + isDisabled={!isSettingPaid || isError} /> ); @@ -278,7 +299,6 @@ export default inject(({ settingsStore, common, currentQuotaStore }) => { standalone, dnsSettingsUrl, currentDeviceType, - domainValidator, } = settingsStore; const { isLoaded, @@ -290,6 +310,7 @@ export default inject(({ settingsStore, common, currentQuotaStore }) => { setDNSName, saveDNSSettings, isDefaultDNS, + portalName, } = common; const { isBrandingAndCustomizationAvailable } = currentQuotaStore; @@ -313,6 +334,6 @@ export default inject(({ settingsStore, common, currentQuotaStore }) => { saveDNSSettings, dnsSettingsUrl, currentDeviceType, - domainValidator, + portalName, }; })(withLoading(withTranslation(["Settings", "Common"])(observer(DNSSettings)))); diff --git a/packages/client/src/pages/PortalSettings/categories/common/Customization/portal-renaming.js b/packages/client/src/pages/PortalSettings/categories/common/Customization/portal-renaming.js index 18a1c8e8e8..fa3fb18514 100644 --- a/packages/client/src/pages/PortalSettings/categories/common/Customization/portal-renaming.js +++ b/packages/client/src/pages/PortalSettings/categories/common/Customization/portal-renaming.js @@ -33,6 +33,8 @@ const PortalRenaming = (props) => { currentColorScheme, renamingSettingsUrl, domainValidator, + setPortalName, + portalName, } = props; const navigate = useNavigate(); @@ -54,10 +56,8 @@ const PortalRenaming = (props) => { ? tenantAlias : portalNameDefaultFromSessionStorage; - const [portalName, setPortalName] = useState(portalNameInitially); - const [portalNameDefault, setPortalNameDefault] = useState( - portalNameDefaultInitially + portalNameDefaultInitially, ); const [isLoadingPortalNameSave, setIsLoadingPortalNameSave] = useState(false); @@ -78,6 +78,7 @@ const PortalRenaming = (props) => { useEffect(() => { setDocumentTitle(t("PortalRenaming")); + setPortalName(portalNameInitially); const page = isMobileView ? "language-and-time-zone" : "general"; if (!isLoaded) initSettings(page).then(() => setIsLoaded(true)); @@ -193,14 +194,14 @@ const PortalRenaming = (props) => { t("PortalNameLength", { minLength: domainValidator.minLength, maxLength: domainValidator.maxLength, - }) + }), ); saveToSessionStorage( "errorValue", t("PortalNameLength", { minLength: domainValidator.minLength, maxLength: domainValidator.maxLength, - }) + }), ); break; case !validDomain.test(value): @@ -242,7 +243,7 @@ const PortalRenaming = (props) => { const currentUrl = window.location.href.replace( window.location.origin, - "" + "", ); const newUrl = "/portal-settings/customization/general"; @@ -353,8 +354,14 @@ export default inject(({ settingsStore, setup, common }) => { domainValidator, } = settingsStore; const { setPortalRename } = setup; - const { isLoaded, setIsLoadedPortalRenaming, initSettings, setIsLoaded } = - common; + const { + isLoaded, + setIsLoadedPortalRenaming, + initSettings, + setIsLoaded, + setPortalName, + portalName, + } = common; return { theme, @@ -368,7 +375,11 @@ export default inject(({ settingsStore, setup, common }) => { currentColorScheme, renamingSettingsUrl, domainValidator, + portalName, + setPortalName, }; })( - withLoading(withTranslation(["Settings", "Common"])(observer(PortalRenaming))) + withLoading( + withTranslation(["Settings", "Common"])(observer(PortalRenaming)), + ), ); diff --git a/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js b/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js index e2283b9bb9..7afdfa96e3 100644 --- a/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js +++ b/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js @@ -35,7 +35,6 @@ import { HelpButton } from "@docspace/shared/components/help-button"; import { Tooltip } from "@docspace/shared/components/tooltip"; import withCultureNames from "SRC_DIR/HOCs/withCultureNames"; import { isMobile } from "@docspace/shared/utils"; -import { SSO_LABEL } from "SRC_DIR/helpers/constants"; import { useTheme } from "styled-components"; const MainProfile = (props) => { @@ -171,7 +170,7 @@ const MainProfile = (props) => {
{ {profile.isSSO && ( { const response = await api.settings.setWhiteLabelSettings( data, - isManagement() + isManagement(), ); return Promise.resolve(response); }; @@ -187,6 +188,10 @@ class CommonStore { this.dnsSettings.customObj.dnsName = value; }; + setPortalName = (value) => { + this.portalName = value; + }; + setDNSSettings = (data) => { this.dnsSettings = { defaultObj: data, customObj: data }; }; diff --git a/packages/client/src/store/FilesSettingsStore.js b/packages/client/src/store/FilesSettingsStore.js index 0cef86ee64..95b58ca17a 100644 --- a/packages/client/src/store/FilesSettingsStore.js +++ b/packages/client/src/store/FilesSettingsStore.js @@ -516,6 +516,9 @@ class FilesSettingsStore { case ".xlsx": path = "xlsx.svg"; break; + case ".xlsb": + path = "xlsb.svg"; + break; case ".xps": path = "xps.svg"; break; diff --git a/packages/client/src/store/GroupsStore.ts b/packages/client/src/store/GroupsStore.ts index 913dd1b486..b37748817b 100644 --- a/packages/client/src/store/GroupsStore.ts +++ b/packages/client/src/store/GroupsStore.ts @@ -269,7 +269,11 @@ class GroupsStore { if (!row) return; const [element] = row.getElementsByClassName("group-item"); - const groupId = element?.getAttribute("value"); + const value = element?.getAttribute("value"); + + const splitValue = value && value.split("_"); + const groupId = splitValue.slice(1, -3).join("_"); + if (!groupId) return; const isNotSelected = @@ -284,7 +288,10 @@ class GroupsStore { if (!row) return; const [element] = row.getElementsByClassName("group-item"); - const groupId = element?.getAttribute("value"); + const value = element?.getAttribute("value"); + + const splitValue = value && value.split("_"); + const groupId = splitValue.slice(1, -3).join("_"); if (!groupId) return; const isSelected = diff --git a/packages/doceditor/package.json b/packages/doceditor/package.json index 2baa1441d1..c061c4dfd8 100644 --- a/packages/doceditor/package.json +++ b/packages/doceditor/package.json @@ -16,7 +16,7 @@ "next": "14.0.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^14.0.1", + "react-i18next": "^13.2.1", "styled-components": "^5.3.9" }, "devDependencies": { diff --git a/packages/login/src/client/components/Login.tsx b/packages/login/src/client/components/Login.tsx index db86feb764..5977c664c0 100644 --- a/packages/login/src/client/components/Login.tsx +++ b/packages/login/src/client/components/Login.tsx @@ -58,13 +58,24 @@ const Login: React.FC = ({ useEffect(() => { if (search) { - const isInviteInfo = search.indexOf("loginData="); + const firstIndex = search.indexOf("loginData="); - if (isInviteInfo === -1) return; + if (firstIndex === -1) return; + const fromBinaryStr = (encodeString: string) => { + const decodeStr = atob(encodeString); + + const decoder = new TextDecoder(); + const charCodeArray = Uint8Array.from( + { length: decodeStr.length }, + (element, index) => decodeStr.charCodeAt(index) + ); + + return decoder.decode(charCodeArray); + }; const encodeString = search.slice(search.indexOf("=") + 1); - const decodeString = atob(encodeString); + const decodeString = fromBinaryStr(encodeString); const queryParams = JSON.parse(decodeString); setInvitationLinkData(queryParams); diff --git a/packages/management/src/categories/spaces/sub-components/ConfigurationSection.tsx b/packages/management/src/categories/spaces/sub-components/ConfigurationSection.tsx index 2d43403a73..6059f4933e 100644 --- a/packages/management/src/categories/spaces/sub-components/ConfigurationSection.tsx +++ b/packages/management/src/categories/spaces/sub-components/ConfigurationSection.tsx @@ -5,11 +5,10 @@ import { TextInput } from "@docspace/shared/components/text-input"; import { Text } from "@docspace/shared/components/text"; import { ConfigurationWrapper } from "../StyledSpaces"; import { useStore } from "SRC_DIR/store"; -import { parseDomain } from "SRC_DIR/utils"; import { isMobile } from "react-device-detect"; import { toastr } from "@docspace/shared/components/toast"; import { TranslationType } from "SRC_DIR/types/spaces"; -import { validatePortalName } from "@docspace/shared/utils/common"; +import { parseDomain, validatePortalName } from "@docspace/shared/utils/common"; type TConfigurationSection = { t: TranslationType; diff --git a/packages/management/src/categories/spaces/sub-components/dialogs/ChangeDomainDialog/index.tsx b/packages/management/src/categories/spaces/sub-components/dialogs/ChangeDomainDialog/index.tsx index ef9ace99d7..0153e3865a 100644 --- a/packages/management/src/categories/spaces/sub-components/dialogs/ChangeDomainDialog/index.tsx +++ b/packages/management/src/categories/spaces/sub-components/dialogs/ChangeDomainDialog/index.tsx @@ -8,8 +8,8 @@ import { useTranslation } from "react-i18next"; import { observer } from "mobx-react"; import { TextInput } from "@docspace/shared/components/text-input"; import { useStore } from "SRC_DIR/store"; -import { parseDomain } from "SRC_DIR/utils"; import { toastr } from "@docspace/shared/components/toast"; +import { parseDomain } from "@docspace/shared/utils/common"; const StyledModal = styled(ModalDialogContainer)` .create-docspace-input-block { diff --git a/packages/management/src/utils/index.ts b/packages/management/src/utils/index.ts index 999ef23fc3..c7c8b71003 100644 --- a/packages/management/src/utils/index.ts +++ b/packages/management/src/utils/index.ts @@ -1,8 +1,5 @@ import { settingsTree } from "./settingsTree"; import { translations } from "../autoGeneratedTranslations"; -import { parseAddress } from "@docspace/shared/utils"; -import { ErrorKeys } from "@docspace/shared/enums"; -import { TranslationType } from "SRC_DIR/types/spaces"; export const getItemByLink = (path: string) => { const resultPath = path.split("/")[1]; @@ -63,41 +60,3 @@ export function loadLanguagePath(homepage: string, fixedNS = null) { return path; }; } - -export const parseDomain = ( - domain: string, - setError: Function, - t: TranslationType -) => { - let parsedDomain = parseAddress("test@" + domain); - - if (parsedDomain?.parseErrors.length > 0) { - const translatedErrors = parsedDomain.parseErrors.map((error) => { - switch (error.errorKey) { - case ErrorKeys.LocalDomain: - return t("Common:LocalDomain"); - case ErrorKeys.IncorrectDomain: - case ErrorKeys.IncorrectEmail: - return t("Common:IncorrectDomain"); - case ErrorKeys.DomainIpAddress: - return t("Common:DomainIpAddress"); - case ErrorKeys.PunycodeDomain: - return t("Common:PunycodeDomain"); - case ErrorKeys.PunycodeLocalPart: - return t("Common:PunycodeLocalPart"); - case ErrorKeys.IncorrectLocalPart: - return t("Common:IncorrectLocalPart"); - case ErrorKeys.SpacesInLocalPart: - return t("Common:SpacesInLocalPart"); - case ErrorKeys.MaxLengthExceeded: - return t("Common:MaxLengthExceeded"); - default: - throw new Error("Unknown translation key"); - } - }); - - setError(translatedErrors); - } - - return parsedDomain.isValid(); -}; diff --git a/packages/shared/components/article/Article.styled.ts b/packages/shared/components/article/Article.styled.ts index 5a884a197f..d951c23963 100644 --- a/packages/shared/components/article/Article.styled.ts +++ b/packages/shared/components/article/Article.styled.ts @@ -40,7 +40,7 @@ const StyledArticle = styled.article<{ max-width: ${(props) => (props.showText ? "243px" : "60px")}; height: ${(props) => - props.correctTabletHeight ? `${props.correctTabletHeight}px` : `100%`}; + props.correctTabletHeight ? `${props.correctTabletHeight}px` : `100%`}; } @media ${mobile} { @@ -63,7 +63,7 @@ const StyledArticle = styled.article<{ .article-body__scrollbar { height: ${(props) => - `calc(100% - ${props.$withMainButton ? "190px" : "150px"})`} !important; + `calc(100% - ${props.$withMainButton ? "190px" : "150px"})`} !important; @media ${tablet} { height: calc(100% - 184px) !important; @@ -111,14 +111,14 @@ StyledArticle.defaultProps = { theme: Base }; const StyledArticleHeader = styled.div<{ showText?: boolean }>` height: 24px; padding: ${({ theme }) => - getCorrectFourValuesStyle("22px 21px 23px 20px", theme.interfaceDirection)}; + getCorrectFourValuesStyle("23px 21px 22px 20px", theme.interfaceDirection)}; margin: 0; display: flex; justify-content: flex-start; align-items: center; @media ${tablet} { - padding: 18px 8px 19px; + padding: 20px 8px 17px; margin: 0; justify-content: ${(props) => (props.showText ? "flex-start" : "center")}; @@ -130,7 +130,7 @@ const StyledArticleHeader = styled.div<{ showText?: boolean }>` @media ${mobile} { border-bottom: ${(props) => props.theme.catalog.header.borderBottom}; - padding: 12px 0 12px; + padding: 12px 0; } -webkit-tap-highlight-color: rgba(0, 0, 0, 0); @@ -161,16 +161,16 @@ const StyledHeading = styled.div<{ showText?: boolean }>` @media ${tablet} { display: ${(props) => (props.showText ? "block" : "none")}; ${({ theme }) => - theme.interfaceDirection === "rtl" - ? `margin-right: 9px;` - : `margin-left: 9px;`} + theme.interfaceDirection === "rtl" + ? `margin-right: 9px;` + : `margin-left: 9px;`} } @media ${mobile} { ${({ theme }) => - theme.interfaceDirection === "rtl" - ? `margin-right: 0;` - : `margin-left: 0;`} + theme.interfaceDirection === "rtl" + ? `margin-right: 0;` + : `margin-left: 0;`} } `; @@ -270,9 +270,9 @@ const StyledArticleProfile = styled.div` .option-button { ${({ theme }) => - theme.interfaceDirection === "rtl" - ? `margin-right: auto;` - : `margin-left: auto;`} + theme.interfaceDirection === "rtl" + ? `margin-right: auto;` + : `margin-left: auto;`} height: 32px; width: 32px; @@ -344,12 +344,12 @@ const StyledArticleApps = styled.div<{ @media ${tablet} { ${(props) => - props.showText && - css` + props.showText && + css` ${({ theme }) => - theme.interfaceDirection === "rtl" - ? `margin-right: 8px;` - : `margin-left: 8px;`} + theme.interfaceDirection === "rtl" + ? `margin-right: 8px;` + : `margin-left: 8px;`} `} } @@ -398,7 +398,7 @@ const StyledWrapper = styled.div` svg { ${({ theme }) => - theme.interfaceDirection === "rtl" && "transform: scaleX(-1);"} + theme.interfaceDirection === "rtl" && "transform: scaleX(-1);"} } } @@ -450,20 +450,20 @@ const StyledHideArticleMenuButton = styled.div<{ .article-hide-menu-container { align-items: center; ${(props) => - props.theme.interfaceDirection === "rtl" - ? css` + props.theme.interfaceDirection === "rtl" + ? css` margin-right: 16px; ` - : css` + : css` margin-left: 16px; `} .article-hide-menu-text { ${(props) => - props.theme.interfaceDirection === "rtl" - ? css` + props.theme.interfaceDirection === "rtl" + ? css` margin-right: 8px; ` - : css` + : css` margin-left: 8px; `} color: ${({ currentColorScheme }) => currentColorScheme?.main?.accent}; @@ -487,16 +487,16 @@ const StyledHideArticleMenuButton = styled.div<{ .article-show-menu-icon_svg { height: 20px; ${(props) => - props.theme.interfaceDirection === "rtl" && - css` + props.theme.interfaceDirection === "rtl" && + css` transform: scaleX(-1); `} } .article-hide-menu-icon_svg { ${(props) => - props.theme.interfaceDirection === "rtl" && - css` + props.theme.interfaceDirection === "rtl" && + css` transform: scaleX(-1); `} svg { diff --git a/packages/shared/components/floating-button/FloatingButton.tsx b/packages/shared/components/floating-button/FloatingButton.tsx index 88aaa8e740..dd01913160 100644 --- a/packages/shared/components/floating-button/FloatingButton.tsx +++ b/packages/shared/components/floating-button/FloatingButton.tsx @@ -104,7 +104,10 @@ const FloatingButton = (props: FloatingButtonProps) => { classNames([className, "not-selectable"]) || "not-selectable" } > - + 100 ? 0 : percent} + >
diff --git a/packages/shared/components/main-button-mobile/MainButtonMobile.tsx b/packages/shared/components/main-button-mobile/MainButtonMobile.tsx index 5abb78aa60..e45546f38d 100644 --- a/packages/shared/components/main-button-mobile/MainButtonMobile.tsx +++ b/packages/shared/components/main-button-mobile/MainButtonMobile.tsx @@ -263,29 +263,29 @@ const MainButtonMobile = (props: MainButtonMobileProps) => { ))} - - {buttonOptions - ? buttonOptions.map((option: ButtonOption) => - option.isSeparator ? ( -
-
-
- ) : ( - - ), - ) - : ""} - + {buttonOptions && ( + + {buttonOptions.map((option: ButtonOption) => + option.isSeparator ? ( +
+
+
+ ) : ( + + ), + )} + + )} ); }; diff --git a/packages/shared/components/table/TableHeader.tsx b/packages/shared/components/table/TableHeader.tsx index 4b9b08f8b4..ad9e7eb804 100644 --- a/packages/shared/components/table/TableHeader.tsx +++ b/packages/shared/components/table/TableHeader.tsx @@ -1350,7 +1350,9 @@ class TableHeader extends React.Component< getSubstring(tableInfoPanelContainer[0]) ) { const currentContentWidth = - contentWidth - +getSubstring(tableInfoPanelContainer[0]); + enabledColumnsCount > 0 + ? contentWidth - +getSubstring(tableInfoPanelContainer[0]) + : contentWidth; let overWidth = 0; @@ -1370,10 +1372,12 @@ class TableHeader extends React.Component< gridTemplateColumns.push("0px"); } else if (item !== `${settingsSize}px`) { const percent = - (getSubstring(item) / - (changedWidth - - +getSubstring(tableInfoPanelContainer[0]))) * - 100; + enabledColumnsCount === 0 + ? 100 + : (getSubstring(item) / + (changedWidth - + +getSubstring(tableInfoPanelContainer[0]))) * + 100; const newItemWidth = defaultColumnSize ? `${defaultColumnSize}px` diff --git a/packages/shared/utils/axiosClient.ts b/packages/shared/utils/axiosClient.ts index d7f2d4e9c1..1a02515740 100644 --- a/packages/shared/utils/axiosClient.ts +++ b/packages/shared/utils/axiosClient.ts @@ -115,8 +115,9 @@ class AxiosClient { const proto = headers["x-forwarded-proto"]?.split(",").shift(); const host = headers["x-forwarded-host"]?.split(",").shift(); + const port = headers["x-forwarded-port"]?.split(",").shift(); - const origin = apiOrigin || `${proto}://${host}`; + const origin = apiOrigin || `${proto}://${host}${port ? `:${port}` : ""}`; const apiBaseURL = combineUrl(origin, proxyURL, apiPrefix); diff --git a/packages/shared/utils/common.ts b/packages/shared/utils/common.ts index 9e76099d21..95b3e4b084 100644 --- a/packages/shared/utils/common.ts +++ b/packages/shared/utils/common.ts @@ -23,8 +23,14 @@ import BackgroundPatternRedReactSvgUrl from "PUBLIC_DIR/images/background.patter import BackgroundPatternPurpleReactSvgUrl from "PUBLIC_DIR/images/background.pattern.purple.react.svg?url"; import BackgroundPatternLightBlueReactSvgUrl from "PUBLIC_DIR/images/background.pattern.lightBlue.react.svg?url"; import BackgroundPatternBlackReactSvgUrl from "PUBLIC_DIR/images/background.pattern.black.react.svg?url"; - -import { FolderType, RoomsType, ShareAccessRights, ThemeKeys } from "../enums"; +import { parseAddress } from "@docspace/shared/utils"; +import { + FolderType, + RoomsType, + ShareAccessRights, + ThemeKeys, + ErrorKeys, +} from "../enums"; import { LANGUAGE, PUBLIC_MEDIA_VIEW_URL, RTL_LANGUAGES } from "../constants"; import { TI18n } from "../types"; @@ -109,6 +115,44 @@ export const getUserTypeLabel = ( } }; +export const parseDomain = ( + domain: string, + setError: Function, + t: (key: string) => string, +) => { + const parsedDomain = parseAddress("test@" + domain); + + if (parsedDomain?.parseErrors.length > 0) { + const translatedErrors = parsedDomain.parseErrors.map((error) => { + switch (error.errorKey) { + case ErrorKeys.LocalDomain: + return t("Common:LocalDomain"); + case ErrorKeys.IncorrectDomain: + case ErrorKeys.IncorrectEmail: + return t("Common:IncorrectDomain"); + case ErrorKeys.DomainIpAddress: + return t("Common:DomainIpAddress"); + case ErrorKeys.PunycodeDomain: + return t("Common:PunycodeDomain"); + case ErrorKeys.PunycodeLocalPart: + return t("Common:PunycodeLocalPart"); + case ErrorKeys.IncorrectLocalPart: + return t("Common:IncorrectLocalPart"); + case ErrorKeys.SpacesInLocalPart: + return t("Common:SpacesInLocalPart"); + case ErrorKeys.MaxLengthExceeded: + return t("Common:MaxLengthExceeded"); + default: + return t("Common:IncorrectDomain"); + } + }); + + setError(translatedErrors); + } + + return parsedDomain.isValid(); +}; + export const validatePortalName = ( value: string, nameValidator: { minLength: number; maxLength: number; regex: RegExp }, diff --git a/packages/shared/utils/image-helpers.ts b/packages/shared/utils/image-helpers.ts index 1ead50c396..a05bec2fe3 100644 --- a/packages/shared/utils/image-helpers.ts +++ b/packages/shared/utils/image-helpers.ts @@ -75,6 +75,7 @@ const formatIcons = [ ".wpt", ".xls", ".xlsm", + ".xlsb", ".xlsx", ".xml", ".xps", diff --git a/public/images/icons/24/xlsb.svg b/public/images/icons/24/xlsb.svg new file mode 100644 index 0000000000..da31e4b2ba --- /dev/null +++ b/public/images/icons/24/xlsb.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/images/icons/32/xlsb.svg b/public/images/icons/32/xlsb.svg new file mode 100644 index 0000000000..e1062f1cc5 --- /dev/null +++ b/public/images/icons/32/xlsb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/images/icons/64/xlsb.svg b/public/images/icons/64/xlsb.svg new file mode 100644 index 0000000000..5f8c5d73d4 --- /dev/null +++ b/public/images/icons/64/xlsb.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/icons/96/xlsb.svg b/public/images/icons/96/xlsb.svg new file mode 100644 index 0000000000..8168c63de9 --- /dev/null +++ b/public/images/icons/96/xlsb.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/locales/ar-SA/Common.json b/public/locales/ar-SA/Common.json index 38fa8605d0..184a900f3c 100644 --- a/public/locales/ar-SA/Common.json +++ b/public/locales/ar-SA/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "انقر فوق \"أرسل التقرير\" لإنشاء تقرير تلقائي ومساعدتنا في إصلاح الخطأ. لن يتم استخدام أي من بياناتك الشخصية في التقرير.", "SortBy": "الترتيب حسب", "SpacesInLocalPart": "الجزء المحلي لا يمكن أن يحتوي على مسافات", + "SSO": "SSO", "Standard": "القياسي", "SubmitToFormGallery": "تسليم إلى نموذج المعرض", "SubmitToGallery": "تسليم إلى المعرض", diff --git a/public/locales/az/Common.json b/public/locales/az/Common.json index 626732c1ae..82908851b3 100644 --- a/public/locales/az/Common.json +++ b/public/locales/az/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Avtomatik olaraq hesabat yaratmaq və xətanı düzəltməyə kömək etmək üçün Hesabatı göndərin seçiminə klikləyin. Hesabatda şəxsi məlumatlarınızdan heç biri istifadə edilməyəcək.", "SortBy": "Bu qayda ilə sırala", "SpacesInLocalPart": "Lokal yolda boşluqlar icazə verilmir", + "SSO": "SSO", "Standard": "Standart", "SubmitToFormGallery": "Form Qalereyasına göndərin", "SubmitToGallery": "Qalereyaya göndərin", diff --git a/public/locales/bg/Common.json b/public/locales/bg/Common.json index 33ac349f07..c984b0f8aa 100644 --- a/public/locales/bg/Common.json +++ b/public/locales/bg/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Щракнете върху Изпращане на доклад, за да генерирате автоматично такъв и да ни помогнете да коригираме грешката. Никакви ваши лични данни няма да бъдат използвани в доклада.", "SortBy": "Сортиране по", "SpacesInLocalPart": "Местната част не може да съдържа интервали", + "SSO": "SSO", "Standard": "Стандарт", "SubmitToFormGallery": "Изпрати до Галерия с формуляри", "SubmitToGallery": "Изпрати до Галерия", diff --git a/public/locales/cs/Common.json b/public/locales/cs/Common.json index e92ba331e9..b76a15e5a8 100644 --- a/public/locales/cs/Common.json +++ b/public/locales/cs/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Kliknutím na tlačítko Odeslat hlášení automaticky vygenerujete hlášení a pomůžete nám chybu opravit. V hlášení nebudou použity žádné vaše osobní údaje.", "SortBy": "Seřadit podle", "SpacesInLocalPart": "Místní část nemůže obsahovat mezery", + "SSO": "SSO", "Standard": "Standardní", "SubmitToFormGallery": "Odeslat do Galerie formulářů", "SubmitToGallery": "Odeslat do galerie", diff --git a/public/locales/de/Common.json b/public/locales/de/Common.json index f3e4d2f21a..49933a4bfc 100644 --- a/public/locales/de/Common.json +++ b/public/locales/de/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Klicken Sie auf Bericht senden, um automatisch einen Bericht zu erstellen und uns bei der Behebung des Fehlers zu helfen. Keine Ihrer persönlichen Daten werden in dem Bericht verwendet.", "SortBy": "Sortieren nach", "SpacesInLocalPart": "Lokaler Teil beinhaltet Leerzeichen", + "SSO": "SSO", "Standard": "Standard", "SubmitToFormGallery": "An die Formulargalerie senden", "SubmitToGallery": "Zur Galerie einreichen", diff --git a/public/locales/el-GR/Common.json b/public/locales/el-GR/Common.json index a53d72b7b4..3cc297bfb0 100644 --- a/public/locales/el-GR/Common.json +++ b/public/locales/el-GR/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Κάντε κλικ στην επιλογή «Αποστολή αναφοράς» για να δημιουργήσετε αυτόματα μια αναφορά και να μας βοηθήσετε να διορθώσουμε το σφάλμα. Κανένα από τα προσωπικά σας δεδομένα δεν θα χρησιμοποιηθεί στην αναφορά.", "SortBy": "Ταξινόμηση κατά", "SpacesInLocalPart": "Το τοπικό τμήμα δεν μπορεί να περιέχει κενά", + "SSO": "SSO", "Standard": "Τυπικό", "SubmitToFormGallery": "Υποβολή στη Συλλογή Φορμών", "SubmitToGallery": "Υποβολή στη Συλλογή", diff --git a/public/locales/en/Common.json b/public/locales/en/Common.json index 8ad4cdb49c..c0a6785f80 100644 --- a/public/locales/en/Common.json +++ b/public/locales/en/Common.json @@ -384,6 +384,7 @@ "SpaceManagement": "Space Management", "Spaces": "Spaces", "SpacesInLocalPart": "Local part can't contain spaces", + "SSO": "SSO", "Standard": "Standard", "Storage": "Storage", "StorageAndQuota": "Storage / Quota", diff --git a/public/locales/es/Common.json b/public/locales/es/Common.json index 09c3d0b9b7..e333733b16 100644 --- a/public/locales/es/Common.json +++ b/public/locales/es/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Haga clic en Enviar informe para generar automáticamente un informe y ayudarnos a solucionar el error. En el informe no se utilizará ninguno de sus datos personales.", "SortBy": "Ordenar por", "SpacesInLocalPart": "La parte local no puede contener espacios", + "SSO": "SSO", "Standard": "Estándar", "SubmitToFormGallery": "Enviar a la Galería de formularios", "SubmitToGallery": "Enviar a la Galería", diff --git a/public/locales/fi/Common.json b/public/locales/fi/Common.json index 3a0e103e8f..70350d49ca 100644 --- a/public/locales/fi/Common.json +++ b/public/locales/fi/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Klikkaa lähettääksesi raportti ja auta meitä korjaamaan vika. Henkilökohtaisia tietojasi ei käytetä raportissa.", "SortBy": "Lajitteluperuste", "SpacesInLocalPart": "Paikallinen osa ei voi sisältää välilyöntejä", + "SSO": "SSO", "Standard": "Vakio", "SubmitToFormGallery": "Lähetä Lomakegalleriaan", "SubmitToGallery": "Lähetä Galleriaan", diff --git a/public/locales/fr/Common.json b/public/locales/fr/Common.json index 39b4f2d58a..4d4a1e39d2 100644 --- a/public/locales/fr/Common.json +++ b/public/locales/fr/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Cliquez Envoyer le rapport pour générer automatiquement le rapport et nous aider à corriger l’erreur. Aucune de vos données personnelles ne sera utilisée dans le rapport.", "SortBy": "Trier par", "SpacesInLocalPart": "Le local ne peux pas contenir d'espace", + "SSO": "SSO", "Standard": "Standard", "SubmitToFormGallery": "Soumettre à la galerie de formulaires", "SubmitToGallery": "Soumettre à la galerie", diff --git a/public/locales/hy-AM/Common.json b/public/locales/hy-AM/Common.json index 44fa89eff9..f023bfe1ff 100644 --- a/public/locales/hy-AM/Common.json +++ b/public/locales/hy-AM/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Սեղմեք Ուղարկել հաշվետվություն՝ ավտոմատ կերպով հաշվետվություն ստեղծելու և սխալը շտկելու համար: Ձեր անձնական տվյալներից ոչ մեկը չի օգտագործվի հաշվետվության մեջ:", "SortBy": "Դասավորել ըստ", "SpacesInLocalPart": "Տեղական մասը չի կարող բացատներ պարունակել", + "SSO": "SSO", "Standard": "Ստանդարտ", "SubmitToFormGallery": "Ներկայացնել ձևերի պատկերասրահի ", "SubmitToGallery": "Ներկայացնել պատկերասրահ", diff --git a/public/locales/it/Common.json b/public/locales/it/Common.json index 0fe14d4a92..5912b9a1c7 100644 --- a/public/locales/it/Common.json +++ b/public/locales/it/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Fai clic su Invia rapporto per generare automaticamente una segnalazione e aiutarci a correggere l'errore. Nessuno dei tuoi dati personali verrà utilizzato nel report.", "SortBy": "Ordina per", "SpacesInLocalPart": "La parte locale non può contenere spazi", + "SSO": "SSO", "Standard": "Standard", "SubmitToFormGallery": "Invia alla Galleria dei moduli", "SubmitToGallery": "Invia alla Galleria", diff --git a/public/locales/ja-JP/Common.json b/public/locales/ja-JP/Common.json index 273587e75d..1456243805 100644 --- a/public/locales/ja-JP/Common.json +++ b/public/locales/ja-JP/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "「レポートを送信する」をクリックすると、自動的にレポートが作成され、エラーの修正に役立てることができます。レポートには、お客様の個人情報は一切使用されません。", "SortBy": "並べ替え", "SpacesInLocalPart": "ローカルパートはスペースを含むことができません", + "SSO": "SSO", "Standard": "標準", "SubmitToFormGallery": " フォームギャラリーに投稿", "SubmitToGallery": "ギャラリーに投稿", diff --git a/public/locales/ko-KR/Common.json b/public/locales/ko-KR/Common.json index 1386768889..faab8d7017 100644 --- a/public/locales/ko-KR/Common.json +++ b/public/locales/ko-KR/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "보고서 전송을 클릭하면 해당 오류를 수정하는 데 도움이 되는 보고서가 자동으로 생성됩니다. 사용자의 개인 데이터는 보고서에 포함되지 않습니다.", "SortBy": "정렬", "SpacesInLocalPart": "로컬 파트는 공백을 포함할 수 없습니다", + "SSO": "SSO", "Standard": "기준", "SubmitToFormGallery": "양식 갤러리에 제출", "SubmitToGallery": "갤러리에 제출", diff --git a/public/locales/lo-LA/Common.json b/public/locales/lo-LA/Common.json index fd18e74e46..3ee5cfeade 100644 --- a/public/locales/lo-LA/Common.json +++ b/public/locales/lo-LA/Common.json @@ -296,6 +296,7 @@ "SomethingWentWrongDescription": "ຄລິກສົ່ງລາຍງານເພື່ອສ້າງລາຍງານອັດຕະໂນມັດ ແລະຊ່ວຍພວກເຮົາແກ້ໄຂຂໍ້ຜິດພາດ. ບໍ່ມີຂໍ້ມູນສ່ວນຕົວໃດໆຂອງເຈົ້າຈະຖືກໃຊ້ໃນລາຍງານນີ້.", "SortBy": "ຈັດຮຽງຕາມ", "SpacesInLocalPart": "ພື່ນທີ່ທ້ອງຖິ້ນບໍ່ພຽງພໍ", + "SSO": "SSO", "Standard": "ມາດຕະຖານ", "SubscriptionExpired": "ການສະໝັກສິດນຳໃຊ້ການຊ່ວຍເຫຼືອ ແລະອັບເດດຂອງທ່ານໝົດອາຍຸແລ້ວ", "SubscriptionIsExpiring": "ການສະໝັກສິດນຳໃຊ້ຂອງທ່ານໝົດອາຍຸໃນວັນທີ {{date}}", diff --git a/public/locales/lv/Common.json b/public/locales/lv/Common.json index 8d243d8158..b6f828df42 100644 --- a/public/locales/lv/Common.json +++ b/public/locales/lv/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Noklikšķiniet uz Sūtīt pārskatu, lai automātiski izveidotu pārskatu un palīdzētu mums novērst kļūdu. Neviens no jūsu personas datiem pārskatā netiks izmantots.", "SortBy": "Šķirot pēc", "SpacesInLocalPart": "Lokālajā daļā nedrīkst būt atstarpes", + "SSO": "SSO", "Standard": "Standarta", "SubmitToFormGallery": "Iesniedziet veidlapu galerijā", "SubmitToGallery": "Iesniegt galerijā", diff --git a/public/locales/nl/Common.json b/public/locales/nl/Common.json index d7d813e42e..b7d0ae47cc 100644 --- a/public/locales/nl/Common.json +++ b/public/locales/nl/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Klik op Verzend verslag om automatisch een verslag te genereren en ons te helpen de fout te herstellen. Uw persoonsgegevens worden niet gebruikt in het verslag.", "SortBy": "Sorteren op", "SpacesInLocalPart": "Lokaal deel kan geen spaties bevatten", + "SSO": "SSO", "Standard": "Standaard", "SubmitToFormGallery": "Indienen bij Formulier Galerij", "SubmitToGallery": "Indienen bij Galerij", diff --git a/public/locales/pl/Common.json b/public/locales/pl/Common.json index 7e9c695944..58111ae056 100644 --- a/public/locales/pl/Common.json +++ b/public/locales/pl/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Kliknij Wyślij raport, aby automatycznie wygenerować raport i pomóc nam naprawić błąd. Twoje dane osobowe nie będą zawarte w raporcie.", "SortBy": "Sortuj", "SpacesInLocalPart": "Identyfikator użytkownika nie może zawierać spacji", + "SSO": "SSO", "Standard": "Standardowy", "SubmitToFormGallery": "Prześlij do galerii formularzy", "SubmitToGallery": "Prześlij do galerii", diff --git a/public/locales/pt-BR/Common.json b/public/locales/pt-BR/Common.json index 01ee5fbcba..e54b98c5a9 100644 --- a/public/locales/pt-BR/Common.json +++ b/public/locales/pt-BR/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Clique em Enviar relatório para gerar automaticamente um relatório e nos ajudar a corrigir o erro. Nenhum dos seus dados pessoais será usado no relatório.", "SortBy": "Ordenar por", "SpacesInLocalPart": "A parte local não pode conter espaços", + "SSO": "SSO", "Standard": "Padrão", "SubmitToFormGallery": "Enviar para Galeria de Formulários", "SubmitToGallery": "Enviar para Galeria", diff --git a/public/locales/pt/Common.json b/public/locales/pt/Common.json index 584f1f6ed3..0c5fb57902 100644 --- a/public/locales/pt/Common.json +++ b/public/locales/pt/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Clique em Enviar relatório para gerar automaticamente um relatório e ajudar-nos a corrigir o erro. Nenhum dos seus dados pessoais será utilizado no relatório.", "SortBy": "Ordenar por", "SpacesInLocalPart": "A parte local não pode conter espaços", + "SSO": "SSO", "Standard": "Padrão", "SubmitToFormGallery": "Enviar para Galeria de Formulários", "SubmitToGallery": "Enviar para Galeria", diff --git a/public/locales/ro/Common.json b/public/locales/ro/Common.json index f41a078a37..4b08eea724 100644 --- a/public/locales/ro/Common.json +++ b/public/locales/ro/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Faceți clic pe Trimitere raport pentru a genera raportul și ne ajuta să remediem eroarea. Nicio parte a datelor cu caracter personal nu va fi inclusă în raportul.", "SortBy": "Sortare după", "SpacesInLocalPart": "Partea locală nu trebuie să conțină spații", + "SSO": "SSO", "Standard": "Standard", "SubmitToFormGallery": "Trimite la Galeria de Formulare", "SubmitToGallery": "Trimite la Galerie", diff --git a/public/locales/ru/Common.json b/public/locales/ru/Common.json index 7fbac80e42..84062fbbac 100644 --- a/public/locales/ru/Common.json +++ b/public/locales/ru/Common.json @@ -335,6 +335,7 @@ "SpaceManagement": "Управление Пространством", "Spaces": "Пространства", "SpacesInLocalPart": "Имя почтового ящика содержит пробелы", + "SSO": "SSO", "Standard": "Стандарт", "SubmitToFormGallery": "Отправить в Галерею Форм", "SubmitToGallery": "Отправить в Галерею", diff --git a/public/locales/sk/Common.json b/public/locales/sk/Common.json index b687a27dcc..77bff55c64 100644 --- a/public/locales/sk/Common.json +++ b/public/locales/sk/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Kliknutím na tlačidlo Odoslať hlásenie automaticky vygenerujete hlásenie o chybe a pomôžete nám chybu opraviť. V hlásení nebudú zaznamenané žiadne vaše osobné údaje.", "SortBy": "Zoradiť podľa", "SpacesInLocalPart": "Miestna časť nemôže obsahovať medzery", + "SSO": "SSO", "Standard": "Štandard", "SubmitToFormGallery": "Odoslať do galérie formulárov", "SubmitToGallery": "Odoslať do galérie", diff --git a/public/locales/sl/Common.json b/public/locales/sl/Common.json index 415a73873a..978c41a9fc 100644 --- a/public/locales/sl/Common.json +++ b/public/locales/sl/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Kliknite Pošlji poročilo, da samodejno ustvarite poročilo in nam pomagate odpraviti napako. V poročilu ne bodo uporabljeni vaši osebni podatki.", "SortBy": "Razvrsti po", "SpacesInLocalPart": "Lokalni del ne sme vsebovati presledkov", + "SSO": "SSO", "Standard": "Standardno", "SubmitToFormGallery": "Oddaj v Fgalerijo obrazcev", "SubmitToGallery": "Oddaj v galerijo", diff --git a/public/locales/tr/Common.json b/public/locales/tr/Common.json index 763bf517e2..02757f72bf 100644 --- a/public/locales/tr/Common.json +++ b/public/locales/tr/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Otomatik olarak bir rapor oluşturmak ve hatayı düzeltmemize yardımcı olmak için Rapor gönder'e tıklayın. Kişisel verilerinizin hiçbiri raporda kullanılmayacaktır.", "SortBy": "Şöyle sırala:", "SpacesInLocalPart": "Yerel kısım boşluk içeremez", + "SSO": "SSO", "Standard": "Standart", "SubmitToFormGallery": "Form Galerisine Gönder", "SubmitToGallery": "Galeriye Gönder", diff --git a/public/locales/uk-UA/Common.json b/public/locales/uk-UA/Common.json index 2b9f1a094d..2c1830e8d4 100644 --- a/public/locales/uk-UA/Common.json +++ b/public/locales/uk-UA/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Натисніть «Надіслати звіт», щоб автоматично створити звіт та допомогти нам усунути помилку. Звіт не міститиме жодних ваших персональних даних.", "SortBy": "Сортування по", "SpacesInLocalPart": "Локальна частина не може містити пробіли", + "SSO": "SSO", "Standard": "Стандартний", "SubmitToFormGallery": "Надіслати до галереї форм", "SubmitToGallery": "Надіслати до галереї", diff --git a/public/locales/vi/Common.json b/public/locales/vi/Common.json index ae126591a6..e902ee9569 100644 --- a/public/locales/vi/Common.json +++ b/public/locales/vi/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "Nhấp vào Gửi báo cáo để tự động tạo báo cáo và giúp chúng tôi khắc phục lỗi. Sẽ không có dữ liệu cá nhân nào của bạn được sử dụng trong báo cáo.", "SortBy": "Xếp theo", "SpacesInLocalPart": "Phần cục bộ không được chứa khoảng trắng", + "SSO": "SSO", "Standard": "Tiêu chuẩn", "SubmitToFormGallery": "Gửi đến Bộ Sưu Tập Biểu Mẫu", "SubmitToGallery": "Gửi đến Bộ Sưu Tập", diff --git a/public/locales/zh-CN/Common.json b/public/locales/zh-CN/Common.json index b916d02612..06bd2bdc0a 100644 --- a/public/locales/zh-CN/Common.json +++ b/public/locales/zh-CN/Common.json @@ -331,6 +331,7 @@ "SomethingWentWrongDescription": "单击“发送报告”可自动生成报告,有利于我们修复错误。报告中不会使用您的任何个人数据。", "SortBy": "排序方式", "SpacesInLocalPart": "本地部分中不能包含空格", + "SSO": "SSO", "Standard": "标准", "SubmitToFormGallery": "提交至表单库", "SubmitToGallery": "提交至表单库", diff --git a/yarn.lock b/yarn.lock index 9b157ee077..ba02bf695f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3046,7 +3046,7 @@ __metadata: prettier: "npm:^3.2.4" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" - react-i18next: "npm:^14.0.1" + react-i18next: "npm:^13.2.1" shx: "npm:^0.3.4" styled-components: "npm:^5.3.9" typescript: "npm:^5" @@ -24474,24 +24474,6 @@ __metadata: languageName: node linkType: hard -"react-i18next@npm:^14.0.1": - version: 14.0.5 - resolution: "react-i18next@npm:14.0.5" - dependencies: - "@babel/runtime": "npm:^7.23.9" - html-parse-stringify: "npm:^3.0.1" - peerDependencies: - i18next: ">= 23.2.3" - react: ">= 16.8.0" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 4c91d4b889ab1ab05d7cda050890f7f41c4a73dadfef4778770a53b0d2f98e9d80f04da5086790706349d8a80cf09eec0c539fc1020a7c6fead562511dd2a2cf - languageName: node - linkType: hard - "react-is@npm:18.1.0": version: 18.1.0 resolution: "react-is@npm:18.1.0"