Merge branch 'release/v1.2' into feature/doc-space-info-panel

This commit is contained in:
mushka 2022-06-16 19:15:02 +03:00
commit 8192017c9d
120 changed files with 682 additions and 385 deletions

View File

@ -8,5 +8,11 @@
"ec73989085d4e1b984c1c9dca10524da",
"d33ce05dc117d3a05c144460e6ce5f4b",
"68b6c4a86f13eb0a609a8fc8d0716b11",
"bbb2745af2925157dfd40fabf1464107"
"bbb2745af2925157dfd40fabf1464107",
"8fb07f574c99a9ad7669d92ac8acf549",
"03058fb23232ac065da6be43ed82f239",
"5f882705c26d8d59729f0f01c54dc257",
"ccbcb4f4fb33846d0b0809afc789538d",
"ba62baba8e6a765f6e8106c986fcf247",
"5d23e886b5218f25a8f114b163df8db9"
]

View File

@ -87,7 +87,7 @@
"viewed-media": [ ".aac", ".flac", ".m4a", ".mp3", ".oga", ".ogg", ".wav", ".f4v", ".m4v", ".mov", ".mp4", ".ogv", ".webm" ],
"index": [ ".pptx", ".xlsx", ".docx" ],
"oform": {
"url": "https://cmsoforms.onlyoffice.com/api/oforms?populate=*",
"url": "https://cmsoforms.onlyoffice.com/api/oforms?populate=*&locale=all",
"period": 60,
"ext": ".oform"
}

View File

@ -4,6 +4,7 @@ import FilesFilter from "./filter";
import { FolderType } from "../../constants";
import find from "lodash/find";
import { getFolderOptions } from "../../utils";
import { Encoder } from "../../utils/encoder";
export function openEdit(fileId, version, doc, view) {
const params = []; // doc ? `?doc=${doc}` : "";
@ -48,9 +49,32 @@ export function getFolderPath(folderId) {
return request(options);
}
const decodeDisplayName = (items) => {
return items.map((item) => {
if (!item) return item;
if (item.updatedBy?.displayName) {
item.updatedBy.displayName = Encoder.htmlDecode(
item.updatedBy.displayName
);
}
if (item.createdBy?.displayName) {
item.createdBy.displayName = Encoder.htmlDecode(
item.createdBy.displayName
);
}
return item;
});
};
export function getFolder(folderId, filter) {
const options = getFolderOptions(folderId, filter);
return request(options);
return request(options).then((res) => {
res.files = decodeDisplayName(res.files);
res.folders = decodeDisplayName(res.folders);
return res;
});
}
const getFolderClassNameByType = (folderType) => {

View File

@ -0,0 +1,95 @@
import PropTypes from "prop-types";
import React from "react";
import RectangleLoader from "../RectangleLoader";
import {
StyledAccessRow,
StyledInfoRoomBody,
StyledPropertiesTable,
StyledPropertyRow,
StyledSubtitle,
StyledThumbnail,
StyledIcon,
StyledTitle,
} from "./StyledInfoPanelBodyLoader";
const InfoPanelBodyLoader = ({
id,
className,
style,
isFolder,
hasThumbnail,
isVirtualRoom,
...rest
}) => {
const {} = rest;
const randomNumber = (min, max) => Math.random() * (max - min) + min;
const customRectangleLoader = (width, height, rounded) => (
<RectangleLoader
width={"" + width}
height={"" + height}
borderRadius={"" + rounded}
/>
);
// const properties = isFolder
// ? [19, 19, 17.6, 17.6, 17.6, 19, 17.6]
// : [19, 19, 17.6, 17.6, 17.6, 17.6, 17.6, 19, 17.6, 17.6, 17.6];
const properties = isFolder
? [19, 17.6, 17.6, 17.6, 19, 17.6]
: [19, 17.6, 17.6, 17.6, 17.6, 17.6, 19, 17.6, 17.6, 17.6];
return (
<StyledInfoRoomBody id={id} className={className} style={style}>
<StyledTitle>
{customRectangleLoader(32, 32, 3)}
{customRectangleLoader(250, 22, 3)}
</StyledTitle>
{hasThumbnail ? (
<StyledThumbnail>
{customRectangleLoader(320.2, 200, 6)}
</StyledThumbnail>
) : (
<StyledIcon>{customRectangleLoader(96, 96, 5)}</StyledIcon>
)}
<StyledSubtitle>{customRectangleLoader(200, 20, 3)}</StyledSubtitle>
<StyledPropertiesTable>
{properties.map((property, i) => (
<StyledPropertyRow key={i}>
{customRectangleLoader("100%", property, 3)}
{customRectangleLoader("100%", property, 3)}
</StyledPropertyRow>
))}
</StyledPropertiesTable>
{/* <StyledSubtitle>Who has access</StyledSubtitle>
<StyledAccessRow>
{customRectangleLoader(32, 32, 16)}
<div className="divider"></div>
{customRectangleLoader(32, 32, 16)}
{customRectangleLoader(32, 32, 16)}
</StyledAccessRow> */}
</StyledInfoRoomBody>
);
};
InfoPanelBodyLoader.propTypes = {
id: PropTypes.string,
className: PropTypes.string,
style: PropTypes.object,
};
InfoPanelBodyLoader.defaultProps = {
id: undefined,
className: undefined,
style: undefined,
};
export default InfoPanelBodyLoader;

View File

@ -0,0 +1,117 @@
import styled from "styled-components";
const StyledInfoRoomBody = styled.div`
padding-left: 20px;
height: auto;
`;
const StyledTitle = styled.div`
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
height: 80px;
gap: 8px;
`;
const StyledThumbnail = styled.div`
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 200px;
padding: 4px;
margin-bottom: 24px;
border: solid 1px #eceef1;
border-radius: 6px;
`;
const StyledIcon = styled.div`
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 96px;
`;
const StyledSubtitle = styled.div`
padding: 24px 0;
height: 64px;
display: flex;
align-items: center;
justify-content: start;
`;
const StyledPropertiesTable = styled.div`
display: flex;
flex-direction: column;
width: 100%;
margin-bottom: 24px;
gap: 8px;
`;
const StyledPropertyRow = styled.div`
width: 100%;
display: grid;
grid-template-columns: 110px 1fr;
grid-column-gap: 24px;
.property-title {
font-size: 13px;
color: #333333;
}
`;
const StyledAccessRow = styled.div`
width: 100%;
height: 32px;
display: flex;
flex-direction: row;
gap: 8px;
align-items: center;
.divider {
background: #eceef1;
margin: 2px 4px;
width: 1px;
height: 28px;
}
`;
export {
StyledInfoRoomBody,
StyledSubtitle,
StyledTitle,
StyledThumbnail,
StyledIcon,
StyledPropertiesTable,
StyledPropertyRow,
StyledAccessRow,
};
const StyledItemAccess = styled.div`
display: flex;
flex-direction: row;
gap: 8px;
align-items: center;
.divider {
background: #eceef1;
margin: 2px 4px;
width: 1px;
height: 28px;
}
`;
const StyleditemAccessUser = styled.div`
width: 32px;
height: 32px;
border-radius: 50%;
a {
img {
border-radius: 50%;
width: 100%;
height: 100%;
}
}
`;

View File

@ -0,0 +1 @@
export default from "./InfoPanelBodyLoader";

View File

@ -0,0 +1,38 @@
import React from "react";
import {
StyledInfoPanelHeader,
StyledInfoPanelToggleWrapper,
} from "./StyledInfoPanelHeaderLoader";
import RectangleLoader from "../RectangleLoader";
import {
isTablet,
isMobile as isMobileUtils,
isDesktop,
} from "@appserver/components/utils/device";
import { isMobile } from "react-device-detect";
const InfoPanelHeaderLoader = () => {
const customRectangleLoader = (width, height, rounded) => (
<RectangleLoader
width={"" + width}
height={"" + height}
borderRadius={"" + rounded}
/>
);
return (
<StyledInfoPanelHeader>
<div className="header-text">{customRectangleLoader(200, 28, 3)}</div>
<StyledInfoPanelToggleWrapper
isRootFolder={true}
isInfoPanelVisible={true}
>
{!(isTablet() || isMobile || isMobileUtils() || !isDesktop()) &&
customRectangleLoader(32, 32, "50%")}
</StyledInfoPanelToggleWrapper>
</StyledInfoPanelHeader>
);
};
export default InfoPanelHeaderLoader;

View File

@ -0,0 +1,51 @@
import styled from "styled-components";
import { Base } from "@appserver/components/themes";
import { tablet } from "@appserver/components/utils/device";
const StyledInfoPanelHeader = styled.div`
width: 100%;
max-width: 100%;
height: 52px;
min-height: 52px;
display: flex;
justify-content: space-between;
align-items: center;
align-self: center;
border-bottom: ${(props) => `1px solid ${props.theme.infoPanel.borderColor}`};
.header-text {
margin-left: 20px;
height: 28px;
}
`;
const StyledInfoPanelToggleWrapper = styled.div`
display: flex;
@media ${tablet} {
display: none;
}
align-items: center;
justify-content: center;
padding-right: 20px;
.info-panel-toggle-bg {
height: 32px;
width: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: ${(props) =>
props.theme.infoPanel.sectionHeaderToggleBgActive};
path {
fill: ${(props) => props.theme.infoPanel.sectionHeaderToggleIconActive};
}
}
`;
StyledInfoPanelHeader.defaultProps = { theme: Base };
StyledInfoPanelToggleWrapper.defaultProps = { theme: Base };
export { StyledInfoPanelHeader, StyledInfoPanelToggleWrapper };

View File

@ -0,0 +1 @@
export default from "./InfoPanelHeaderLoader";

View File

@ -25,6 +25,8 @@ import DialogAsideLoader from "./DialogAsideLoader";
import ListLoader from "./ListLoader";
import SharingPanelLoader from "./SharingPanelLoader";
import SharingPanelLoaderModal from "./SharingPanelLoader/modal";
import InfoPanelBodyLoader from "./InfoPanelBodyLoader";
import InfoPanelHeaderLoader from "./InfoPanelHeaderLoader";
export default {
Rectangle,
@ -54,4 +56,6 @@ export default {
NewTreeFolders,
SharingPanelLoader,
SharingPanelLoaderModal,
InfoPanelBodyLoader,
InfoPanelHeaderLoader,
};

View File

@ -1,6 +1,6 @@
import styled, { css } from "styled-components";
import { isMobile, isMobileOnly } from "react-device-detect";
import { tablet, mobile } from "@appserver/components/utils/device";
import { tablet, mobile, desktop } from "@appserver/components/utils/device";
const StyledContainer = styled.div`
${(props) =>
@ -46,6 +46,10 @@ const StyledContainer = styled.div`
padding: ${(props) => (props.isDropBox ? "14px 0 5px" : "14px 0 15px")};
`}
@media ${desktop} {
padding: ${(props) => (props.isDropBox ? "10px 0 5px" : "10px 0 11px")};
}
@media ${mobile} {
padding: ${(props) =>
props.isDropBox ? "10px 0 5px" : "10px 0 11px"} !important;

View File

@ -1,162 +1,10 @@
import IconButton from "@appserver/components/icon-button";
import Text from "@appserver/components/text";
import { Base } from "@appserver/components/themes";
import { tablet } from "@appserver/components/utils/device";
import { inject, observer } from "mobx-react";
import PropTypes from "prop-types";
import React from "react";
import styled from "styled-components";
import Submenu from "@appserver/components/submenu";
const StyledInfoPanelHeader = styled.div`
width: 100%;
max-width: 100%;
height: ${(props) => (props.isPrivacyFolder ? "85px" : "52px")};
min-height: ${(props) => (props.isPrivacyFolder ? "85px" : "52px")};
display: flex;
flex-direction: column;
border-bottom: ${(props) =>
props.isPrivacyFolder
? "none"
: `1px solid ${props.theme.infoPanel.borderColor}`};
.main {
height: 52px;
min-height: 52px;
padding-bottom: 1px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.header-text {
margin-left: 20px;
}
}
.submenu {
display: flex;
width: 100%;
justify-content: center;
.sticky {
display: flex;
flex-direction: column;
align-items: center;
}
}
`;
const StyledInfoPanelToggleWrapper = styled.div`
display: flex;
@media ${tablet} {
display: none;
}
align-items: center;
justify-content: center;
padding-right: 20px;
.info-panel-toggle-bg {
height: 32px;
width: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: ${(props) =>
props.theme.infoPanel.sectionHeaderToggleBgActive};
path {
fill: ${(props) => props.theme.infoPanel.sectionHeaderToggleIconActive};
}
}
`;
StyledInfoPanelToggleWrapper.defaultProps = { theme: Base };
const SubInfoPanelHeader = ({
children,
setIsVisible,
roomState,
setRoomState,
isPrivacyFolder,
}) => {
const SubInfoPanelHeader = ({ children }) => {
const content = children?.props?.children;
const closeInfoPanel = () => setIsVisible(false);
return (
<StyledInfoPanelHeader isPrivacyFolder={isPrivacyFolder}>
<div className="main">
<Text className="header-text" fontSize="21px" fontWeight="700">
{content}
</Text>
<StyledInfoPanelToggleWrapper
isRootFolder={true}
isInfoPanelVisible={true}
>
<div className="info-panel-toggle-bg">
<IconButton
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"
isFill={true}
onClick={closeInfoPanel}
/>
</div>
</StyledInfoPanelToggleWrapper>
</div>
{isPrivacyFolder && (
<div className="submenu">
<Submenu
style={{ width: "100%" }}
data={[
{
content: null,
onClick: () => setRoomState("members"),
id: "members",
name: "Members",
},
{
content: null,
onClick: () => setRoomState("history"),
id: "History",
name: "History",
},
{
content: null,
onClick: () => setRoomState("details"),
id: "Details",
name: "Details",
},
]}
startSelect={["members", "history", "details"].indexOf(roomState)}
/>
</div>
)}
</StyledInfoPanelHeader>
);
return <>{content}</>;
};
SubInfoPanelHeader.propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
PropTypes.any,
]),
toggleIsVisible: PropTypes.func,
};
StyledInfoPanelHeader.defaultProps = { theme: Base };
SubInfoPanelHeader.defaultProps = { theme: Base };
SubInfoPanelHeader.displayName = "SubInfoPanelHeader";
export default inject(({ auth, treeFoldersStore }) => {
const { setIsVisible, roomState, setRoomState } = auth.infoPanelStore;
const { isPrivacyFolder } = treeFoldersStore;
return { setIsVisible, roomState, setRoomState, isPrivacyFolder };
})(observer(SubInfoPanelHeader));
export default SubInfoPanelHeader;

View File

@ -104,11 +104,15 @@ const StyledCrossIcon = styled(CrossIcon)`
StyledCrossIcon.defaultProps = { theme: Base };
const InfoPanel = ({ children, isVisible, setIsVisible, viewAs }) => {
const InfoPanel = ({ children, isVisible, setIsVisible, viewAs, isFiles }) => {
if (!isVisible) return null;
const closeInfoPanel = () => setIsVisible(false);
useEffect(() => {
if (!isFiles) closeInfoPanel();
}, [isFiles]);
useEffect(() => {
const onMouseDown = (e) => {
if (e.target.id === "InfoPanelWrapper") closeInfoPanel();
@ -157,10 +161,13 @@ StyledInfoPanelWrapper.defaultProps = { theme: Base };
StyledInfoPanel.defaultProps = { theme: Base };
InfoPanel.defaultProps = { theme: Base };
export default inject(({ auth }) => {
export default inject(({ auth, filesStore }) => {
const { isVisible, setIsVisible } = auth.infoPanelStore;
const isFiles = true && filesStore;
return {
isVisible,
setIsVisible,
isFiles,
};
})(InfoPanel);

View File

@ -328,10 +328,24 @@ class AuthStore {
};
getOforms = () => {
let culture = this.userStore.user.cultureName || this.settingsStore.culture;
culture = culture === "en-US" ? "en" : culture;
const culture =
this.userStore.user.cultureName || this.settingsStore.culture;
return api.settings.getOforms(`${this.settingsStore.urlOforms}${culture}`);
const promise = new Promise(async (resolve, reject) => {
let oforms = await api.settings.getOforms(
`${this.settingsStore.urlOforms}${culture}`
);
if (!oforms?.data?.data.length) {
oforms = await api.settings.getOforms(
`${this.settingsStore.urlOforms}en`
);
}
resolve(oforms);
});
return promise;
};
}

View File

@ -48,23 +48,29 @@ const ProgressBarMobile = ({
return (
<StyledProgressBarContainer isUploading={open}>
<Text
className="progress-header"
fontSize={`14`}
// color="#657077"
onClick={onClickHeaderAction}
>
{label}
</Text>
<Text className="progress_count" fontSize={`13`} truncate>
{status}
</Text>
<IconButton
className="progress_icon"
onClick={onCancel}
iconName={icon}
size={14}
/>
<div className="progress-container">
<Text
className="progress-header"
fontSize={`14`}
// color="#657077"
onClick={onClickHeaderAction}
truncate
>
{label}
</Text>
<div className="progress_info-container">
<Text className="progress_count" fontSize={`13`} truncate>
{status}
</Text>
<IconButton
className="progress_icon"
onClick={onCancel}
iconName={icon}
size={14}
/>
</div>
</div>
<StyledMobileProgressBar>
<StyledBar uploadPercent={uploadPercent} error={error} />
</StyledMobileProgressBar>

View File

@ -177,6 +177,7 @@ StyledButtonWrapper.defaultProps = { theme: Base };
const StyledProgressBarContainer = styled.div`
display: ${(props) => (props.isUploading ? "flex" : "none")};
align-items: center;
flex-wrap: wrap;
@ -188,27 +189,47 @@ const StyledProgressBarContainer = styled.div`
height: 60px;
padding-top: 26px;
.progress-header {
width: 50%;
line-height: 16px;
color: ${(props) => props.theme.mainButtonMobile.textColor};
&:hover {
cursor: pointer;
.progress-container {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.progress-header {
width: 50%;
line-height: 16px;
color: ${(props) => props.theme.mainButtonMobile.textColor};
&:hover {
cursor: pointer;
}
}
}
.progress_count {
line-height: 16px;
color: ${(props) => props.theme.mainButtonMobile.textColor};
width: 42%;
text-align: right;
margin-right: 12px;
}
.progress_info-container {
width: 50%;
.progress_icon {
svg {
path {
fill: ${(props) => props.theme.mainButtonMobile.bar.icon};
display: flex;
align-items: center;
.progress_count {
width: calc(100% - 26px);
line-height: 16px;
color: ${(props) => props.theme.mainButtonMobile.textColor};
text-align: right;
margin-right: 12px;
}
.progress_icon {
svg {
path {
fill: ${(props) => props.theme.mainButtonMobile.bar.icon};
}
}
}
}
}

View File

@ -2,7 +2,7 @@ import styled, { css } from "styled-components";
import Base from "../themes/base";
import { mobile, tablet } from "../utils/device";
import Scrollbar from "../scrollbar";
import { isDesktop, isMobile } from "react-device-detect";
import { isMobile } from "react-device-detect";
const StyledTableContainer = styled.div`
-moz-user-select: none;
@ -33,6 +33,7 @@ const StyledTableContainer = styled.div`
.table-container_group-menu,
.table-container_header {
z-index: 200;
padding: 0 20px;
border-bottom: 1px solid;
@ -140,7 +141,7 @@ const StyledInfoPanelToggleWrapper = styled.div`
align-items: center;
align-self: center;
justify-content: center;
margin: 0 20px 0 auto;
margin: ${isMobile ? "0 16px 0 auto" : "0 20px 0 auto"};
height: 100%;
width: auto;
padding-left: 20px;

View File

@ -1,4 +1,4 @@
{
"EditComment": "Редактирай коментар",
"Version": "Версия {{version}}"
"Version": "Вер.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Kommentar bearbeiten",
"Version": "Version {{version}}"
"Version": "Ver.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Modifier le commentaire",
"Version": "Version {{version}}"
"Version": "Ver.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Modifica commento",
"Version": "Versione.{{version}}"
"Version": "Ver.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "코멘트 수정",
"Version": "버전.{{version}}"
"Version": "버전{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Edytuj komentarz",
"Version": "Wersja {{version}}"
"Version": "Wer.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Upraviť komentár",
"Version": "Verzia {{version}}"
"Version": "Ver.{{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "Chỉnh sửa nhận xét",
"Version": "Phiên bản {{version}}"
"Version": "Bản {{version}}"
}

View File

@ -1,4 +1,4 @@
{
"EditComment": "编辑批注",
"Version": "版本{{version}}"
"Version": "版本{{version}}"
}

View File

@ -39,7 +39,6 @@ const ArticleMainButtonContent = (props) => {
isCommonFolder,
isRecycleBinFolder,
history,
hasGalleryFiles,
currentFolderId,
} = props;
const inputFilesElement = React.useRef(null);
@ -143,7 +142,7 @@ const ArticleMainButtonContent = (props) => {
disabled: isPrivacy,
key: "form-file",
},
hasGalleryFiles && {
{
className: "main-button_drop-down_sub",
label: t("Common:OFORMsGallery"),
onClick: onShowGallery,
@ -172,7 +171,7 @@ const ArticleMainButtonContent = (props) => {
},
];
if ((isMobile || isTabletUtils()) && hasGalleryFiles) {
if (isMobile || isTabletUtils()) {
formActions.push({
className: "main-button_drop-down_sub",
icon: "images/form.react.svg",
@ -249,7 +248,6 @@ const ArticleMainButtonContent = (props) => {
}, [
t,
isPrivacy,
hasGalleryFiles,
currentFolderId,
onCreate,
onShowSelectFileDialog,
@ -326,7 +324,6 @@ export default inject(
isLoading,
fileActionStore,
canCreate,
hasGalleryFiles,
} = filesStore;
const {
isPrivacyFolder,
@ -364,7 +361,6 @@ export default inject(
isLoading,
isLoaded,
firstLoad,
hasGalleryFiles,
currentFolderId,
};
}

View File

@ -116,7 +116,8 @@ const EditingWrapper = styled.div`
props.viewAs === "tile" &&
!props.isUpdatingRowItem &&
css`
background: #fff;
background: ${(props) =>
props.theme.filesEditingWrapper.tile.itemBackground};
border: ${(props) =>
`1px solid ${props.theme.filesEditingWrapper.tile.itemBorder}`};
@ -136,7 +137,8 @@ const EditingWrapper = styled.div`
props.viewAs === "tile" &&
css`
margin-left: 0px;
background: #fff;
background: ${(props) =>
props.theme.filesEditingWrapper.tile.itemBackground};
border: ${(props) =>
`1px solid ${props.theme.filesEditingWrapper.tile.itemBorder}`};

View File

@ -5,20 +5,33 @@ import RowContent from "@appserver/components/row-content";
import RowContainer from "@appserver/components/row-container";
import Text from "@appserver/components/text";
import LinkWithDropdown from "@appserver/components/link-with-dropdown";
import styled from "styled-components";
import styled, { css } from "styled-components";
import { tablet } from "@appserver/components/utils/device";
const MobileStyles = css`
.row-content_tablet-side-info {
display: flex;
gap: 5px;
}
.download-dialog-link {
text-decoration: underline dashed;
}
`;
const StyledDownloadContent = styled.div`
.row_content,
.row-content_tablet-side-info {
overflow: unset;
}
@media (${tablet}) {
.row-content_tablet-side-info {
display: flex;
gap: 5px;
}
.download-dialog_row-container {
display: flex;
}
${isMobile && MobileStyles}
@media ${tablet} {
${MobileStyles}
}
`;
@ -157,6 +170,7 @@ const DownloadContent = (props) => {
</Text>
{checkedTitle || indeterminateTitle ? (
<LinkWithDropdown
className="download-dialog-link"
containerMinWidth="fit-content"
data={titleData}
directionX="left"
@ -215,6 +229,7 @@ const DownloadContent = (props) => {
{file.checked ? (
<LinkWithDropdown
className="download-dialog-link"
isOpen={isOpen}
dropdownType={
isMobile ? "alwaysDashed" : "appearDashedAfterHover"

View File

@ -453,7 +453,7 @@ class DownloadDialogComponent extends React.Component {
</Text>
<></>
<LinkWithDropdown
className="link-other-formats"
className="link-other-formats download-dialog-link"
containerMinWidth="fit-content"
data={[]}
directionX="left"

View File

@ -4,7 +4,7 @@ import Section from "@appserver/common/components/Section";
import SectionHeaderContent from "./Header";
import SectionBodyContent from "./Body";
import { InfoPanelBodyContent } from "../Home/InfoPanel";
import InfoPanelHeaderContent from "../Home/InfoPanel/GalleryHeader";
import InfoPanelHeaderContent from "../Home/InfoPanel/Header";
const FormGallery = () => {
return (
@ -19,7 +19,7 @@ const FormGallery = () => {
<SectionBodyContent />
</Section.SectionBody>
<Section.InfoPanelHeader>
<InfoPanelHeaderContent />
<InfoPanelHeaderContent isGallery />
</Section.InfoPanelHeader>
<Section.InfoPanelBody>
<InfoPanelBodyContent isGallery />

View File

@ -9,6 +9,9 @@ import { Base } from "@appserver/components/themes";
import Details from "./views/Details";
import Members from "./views/Members";
import History from "./views/History";
import EmptyScreen from "./EmptyScreen";
import withLoader from "../../../../HOCs/withLoader";
import Loaders from "@appserver/common/components/Loaders";
const InfoPanelBodyContent = ({
t,
@ -170,7 +173,9 @@ export default inject(
)(
withRouter(
withTranslation(["InfoPanel", "Home", "Common", "Translations"])(
observer(InfoPanelBodyContent)
withLoader(observer(InfoPanelBodyContent))(
<Loaders.InfoPanelBodyLoader isFolder />
)
)
)
);

View File

@ -77,9 +77,9 @@ const SingleItem = (props) => {
const replaceUnicode = (str) => {
const regex = /&#([0-9]{1,4});/gi;
return str.replace(regex, (match, numStr) =>
String.fromCharCode(+numStr)
);
return str
? str.replace(regex, (match, numStr) => String.fromCharCode(+numStr))
: "...";
};
const parseAndFormatDate = (date) => {

View File

@ -1,8 +0,0 @@
import React from "react";
import { withTranslation } from "react-i18next";
const InfoPanelHeaderContent = ({ t }) => {
return <>{t("FormTemplateInfo")}</>;
};
export default withTranslation(["FormGallery"])(InfoPanelHeaderContent);

View File

@ -1,8 +1,57 @@
import {
isTablet,
isMobile as isMobileUtils,
isDesktop,
} from "@appserver/components/utils/device";
import { isMobile } from "react-device-detect";
import IconButton from "@appserver/components/icon-button";
import Text from "@appserver/components/text";
import React from "react";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import {
StyledInfoPanelHeader,
StyledInfoPanelToggleWrapper,
} from "./styles/styles";
import Loaders from "@appserver/common/components/Loaders";
import withLoader from "../../../../HOCs/withLoader";
const InfoPanelHeaderContent = ({ t }) => {
return <>{t("Common:Info")}</>;
const InfoPanelHeaderContent = ({ t, setIsVisible, isGallery }) => {
const closeInfoPanel = () => setIsVisible(false);
return (
<StyledInfoPanelHeader>
<Text className="header-text" fontSize="21px" fontWeight="700">
{isGallery ? t("FormGallery:FormTemplateInfo") : t("Common:Info")}
</Text>
<StyledInfoPanelToggleWrapper
isRootFolder={true}
isInfoPanelVisible={true}
>
{!(isTablet() || isMobile || isMobileUtils() || !isDesktop()) && (
<div className="info-panel-toggle-bg">
<IconButton
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"
isFill={true}
onClick={closeInfoPanel}
/>
</div>
)}
</StyledInfoPanelToggleWrapper>
</StyledInfoPanelHeader>
);
};
export default withTranslation(["InfoPanel", "Common"])(InfoPanelHeaderContent);
export default inject(({ auth }) => {
const { setIsVisible } = auth.infoPanelStore;
return { setIsVisible };
})(
withTranslation(["Common", "FormGallery"])(
withLoader(observer(InfoPanelHeaderContent))(
<Loaders.InfoPanelHeaderLoader />
)
)
);

View File

@ -0,0 +1,51 @@
import styled from "styled-components";
import { Base } from "@appserver/components/themes";
import { tablet } from "@appserver/components/utils/device";
const StyledInfoPanelHeader = styled.div`
width: 100%;
max-width: 100%;
height: 52px;
min-height: 52px;
display: flex;
justify-content: space-between;
align-items: center;
align-self: center;
border-bottom: ${(props) => `1px solid ${props.theme.infoPanel.borderColor}`};
.header-text {
margin-left: 20px;
}
`;
const StyledInfoPanelToggleWrapper = styled.div`
display: flex;
@media ${tablet} {
display: none;
}
align-items: center;
justify-content: center;
padding-right: 20px;
.info-panel-toggle-bg {
height: 32px;
width: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: ${(props) =>
props.theme.infoPanel.sectionHeaderToggleBgActive};
path {
fill: ${(props) => props.theme.infoPanel.sectionHeaderToggleIconActive};
}
}
`;
StyledInfoPanelHeader.defaultProps = { theme: Base };
StyledInfoPanelToggleWrapper.defaultProps = { theme: Base };
export { StyledInfoPanelHeader, StyledInfoPanelToggleWrapper };

View File

@ -1,4 +1,5 @@
import { css } from "styled-components";
import { isMobile } from "react-device-detect";
const marginStyles = css`
margin-left: -24px;
@ -6,6 +7,14 @@ const marginStyles = css`
padding-left: 24px;
padding-right: 24px;
${isMobile &&
css`
margin-left: -20px;
margin-right: -20px;
padding-left: 20px;
padding-right: 20px;
`}
@media (max-width: 1024px) {
margin-left: -16px;
margin-right: -16px;

View File

@ -66,15 +66,10 @@ const StyledTableRow = styled(TableRow)`
.table-container_file-name-cell {
margin-left: -24px;
padding-left: 24px;
z-index: 1;
}
.table-container_row-context-menu-wrapper {
margin-right: -20px;
padding-right: 18px;
position: relative !important;
z-index: 1;
}
}
`}

View File

@ -4,40 +4,17 @@ import styled, { css } from "styled-components";
import { withRouter } from "react-router";
import toastr from "studio/toastr";
import Loaders from "@appserver/common/components/Loaders";
import Headline from "@appserver/common/components/Headline";
import { FilterType, FileAction } from "@appserver/common/constants";
import { FileAction } from "@appserver/common/constants";
import { withTranslation } from "react-i18next";
import { isMobile, isMobileOnly } from "react-device-detect";
import ContextMenuButton from "@appserver/components/context-menu-button";
import { isMobile } from "react-device-detect";
import DropDownItem from "@appserver/components/drop-down-item";
import IconButton from "@appserver/components/icon-button";
import { tablet, desktop, mobile } from "@appserver/components/utils/device";
import { tablet } from "@appserver/components/utils/device";
import { Consumer } from "@appserver/components/utils/context";
import { inject, observer } from "mobx-react";
import TableGroupMenu from "@appserver/components/table-container/TableGroupMenu";
import Navigation from "@appserver/common/components/Navigation";
const StyledContainer = styled.div`
/* padding: 0 0 15px;
@media ${tablet} {
padding: 0 0 17px;
}
${isMobile &&
css`
padding: 0 0 17px;
`}
@media ${mobile} {
padding: 0 0 13px;
}
${isMobileOnly &&
css`
padding: 0 0 13px;
`} */
.table-container_group-menu {
${(props) =>
props.viewAs === "table"
@ -60,12 +37,6 @@ const StyledContainer = styled.div`
margin: 0 -16px;
width: calc(100% + 32px);
`}
${isMobileOnly &&
css`
margin: 0 -16px;
width: calc(100% + 32px);
`}
}
`;

View File

@ -98,7 +98,8 @@ class PureHome extends React.Component {
}
}
if (isPrevSettingsModule) {
//TODO:
if (isPrevSettingsModule && !gallerySelected) {
setIsPrevSettingsModule(false);
return;
}
@ -162,31 +163,27 @@ class PureHome extends React.Component {
const folderId = filter.folder;
//console.log("filter", filter);
return fetchFiles(folderId, filter)
.then((data) => {
const pathParts = data.selectedFolder.pathParts;
const newExpandedKeys = createTreeFolders(
pathParts,
expandedKeys
);
setExpandedKeys(newExpandedKeys);
})
.then(() => {
if (gallerySelected) {
setIsUpdatingRowItem(false);
setAction({
type: FileAction.Create,
extension: "docxf",
fromTemplate: true,
title: gallerySelected.attributes.name_form,
id: -1,
});
}
});
return fetchFiles(folderId, filter).then((data) => {
const pathParts = data.selectedFolder.pathParts;
const newExpandedKeys = createTreeFolders(pathParts, expandedKeys);
setExpandedKeys(newExpandedKeys);
});
}
return Promise.resolve();
})
.then(() => {
if (gallerySelected) {
setIsUpdatingRowItem(false);
setAction({
type: FileAction.Create,
extension: "docxf",
fromTemplate: true,
title: gallerySelected.attributes.name_form,
id: -1,
});
}
})
.finally(() => {
setIsLoading(false);
setFirstLoad(false);

View File

@ -598,13 +598,15 @@ class FilesActionStore {
};
finalizeVersionAction = (id) => {
const { fetchFiles, setIsLoading } = this.filesStore;
const { setFile, setIsLoading } = this.filesStore;
setIsLoading(true);
return finalizeVersion(id, 0, false)
.then(() => {
fetchFiles(this.selectedFolderStore.id, this.filesStore.filter);
.then((res) => {
if (res && res[0]) {
setFile(res[0]);
}
})
.finally(() => setIsLoading(false));
};

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> silinəcək",
"DeleteUserDataConfirmation": "Başqaları üçün əlçatan olan sənədlər silinəcəkdir. Bunun olmaması üçün, məlumatları yenidən tanıdın.",
"SuccessfullyDeleteUserInfoMessage": "İstifadəçi müvəffəqiyyətlə silinmişdir"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Sizin seçdiyiniz deaktiv istifadəçilər portaldan silinəcəklər.",
"DeleteGroupUsersMessageHeader": "Portaldan istifadəçilərin silinməsi",
"DeleteGroupUsersSuccessMessage": "İstifadəçilər müvəffəqiyyətlə silinmişdir.",
"DeleteUserDataConfirmation": "Başqaları üçün əlçatan olan sənədlər silinəcəkdir. Bunun olmaması üçün, məlumatları yenidən tanıdın."
"DeleteGroupUsersSuccessMessage": "İstifadəçilər müvəffəqiyyətlə silinmişdir."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Üzvlərin əlavə edilməsi",
"Birthdate": "Doğum tarixi",
"DeleteUserDataConfirmation": "Başqaları üçün əlçatan olan sənədlər silinəcəkdir. Bunun olmaması üçün, məlumatları yenidən tanıdın.",
"DeleteSelfProfile": "Profilin silinməsi",
"DisableUserButton": "Bloklamaq",
"DisabledEmployeeStatus": "Söndürülüb",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> ще бъде изтрит.",
"DeleteUserDataConfirmation": "Потребителските документи, споделени с другите, ще бъдат изтрити. За да избегнете това, пренасочете данните.",
"SuccessfullyDeleteUserInfoMessage": "Потребителят беше изтрит успешно"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Деактивираните потребители, които избрахте, ще бъдат изтрити.",
"DeleteGroupUsersMessageHeader": "Изтрий потребителите от портала",
"DeleteGroupUsersSuccessMessage": "Потребителите бяха изтрити успешно.",
"DeleteUserDataConfirmation": "Потребителските документи, споделени с другите, ще бъдат изтрити. За да избегнете това, пренасочете данните."
"DeleteGroupUsersSuccessMessage": "Потребителите бяха изтрити успешно."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Добави членове",
"Birthdate": "Дата на раждане",
"DeleteUserDataConfirmation": "Потребителските документи, споделени с другите, ще бъдат изтрити. За да избегнете това, пренасочете данните.",
"DeleteSelfProfile": "Изтрий профил",
"DisableUserButton": "Деактивирай",
"DisabledEmployeeStatus": "Деактивиран",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> bude smazán.",
"DeleteUserDataConfirmation": "Dokumenty uživatele sdílené s ostatními budou smazány. Chcete-li tomu zabránit, přiřaďte data znovu.",
"SuccessfullyDeleteUserInfoMessage": "Uživatel byl úspěšně odstraněn"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Vámi vybraní zakázaní uživatelé budou smazáni.",
"DeleteGroupUsersMessageHeader": "Odstranit uživatele z portálu",
"DeleteGroupUsersSuccessMessage": "Uživatelé byli úspěšně odstraněni.",
"DeleteUserDataConfirmation": "Dokumenty uživatelů sdílené ostatními budou odstraněny. Chcete-li tomu předejít, přiřaďte data znovu."
"DeleteGroupUsersSuccessMessage": "Uživatelé byli úspěšně odstraněni."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Přidat členy",
"Birthdate": "Datum narození",
"DeleteUserDataConfirmation": "Dokumenty uživatele sdílené s ostatními budou smazány. Chcete-li tomu zabránit, přiřaďte data znovu.",
"DeleteSelfProfile": "Smazat profil",
"DisableUserButton": "Deaktivovat",
"DisabledEmployeeStatus": "Deaktivováno",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> wird gelöscht.",
"DeleteUserDataConfirmation": "Freigegebene Dokumente dieses Benutzers werden gelöscht. Um dies zu vermeiden, weisen Sie Daten neu zu.",
"SuccessfullyDeleteUserInfoMessage": "Der Benutzer wurde erfolgreich gelöscht"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Die ausgewählten deaktivierten Benutzer werden gelöscht.",
"DeleteGroupUsersMessageHeader": "Löschung der Benutzer aus dem Portal",
"DeleteGroupUsersSuccessMessage": "Benutzer wurden erfolgreich gelöscht.",
"DeleteUserDataConfirmation": "Freigegebene Dokumente dieses Benutzers werden gelöscht. Um dies zu vermeiden, weisen Sie Daten neu zu."
"DeleteGroupUsersSuccessMessage": "Benutzer wurden erfolgreich gelöscht."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Mitglieder hinzufügen",
"Birthdate": "Geburtsdatum",
"DeleteUserDataConfirmation": "Freigegebene Dokumente dieses Benutzers werden gelöscht. Um dies zu vermeiden, weisen Sie Daten neu zu.",
"DeleteSelfProfile": "Profil löschen",
"DisableUserButton": "Deaktivieren",
"DisabledEmployeeStatus": "Deaktiviert",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "Ο χρήστης {{userCaption}} <strong>{{user}}</strong> θα διαγραφεί.",
"DeleteUserDataConfirmation": "Τα έγγραφα του χρήστη που έχουν κοινοποιηθεί σε άλλους θα διαγραφούν. Για να μην γίνει αυτό, αναθέστε εκ νέου τα δεδομένα.",
"SuccessfullyDeleteUserInfoMessage": "Ο χρήστης έχει διαγραφεί επιτυχώς"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Οι απενεργοποιημένοι χρήστες που επιλέξατε θα διαγραφούν.",
"DeleteGroupUsersMessageHeader": "Διαγράψτε τους χρήστες από την πύλη",
"DeleteGroupUsersSuccessMessage": "Οι χρήστες έχουν διαγραφεί επιτυχώς.",
"DeleteUserDataConfirmation": "Τα έγγραφα του χρήστη που έχουν κοινοποιηθεί σε άλλους θα διαγραφούν. Για να μην γίνει αυτό, αναθέστε εκ νέου τα δεδομένα."
"DeleteGroupUsersSuccessMessage": "Οι χρήστες έχουν διαγραφεί επιτυχώς."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Προσθήκη μελών",
"Birthdate": "Ημερομηνία γέννησης",
"DeleteUserDataConfirmation": "Τα έγγραφα του χρήστη που έχουν κοινοποιηθεί σε άλλους θα διαγραφούν. Για να μην γίνει αυτό, αναθέστε εκ νέου τα δεδομένα.",
"DeleteSelfProfile": "Διαγραφή προφίλ",
"DisableUserButton": "Απενεργοποίηση",
"DisabledEmployeeStatus": "Απενεργοποιημένο",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> will be deleted.",
"DeleteUserDataConfirmation": "User documents shared with others will be deleted. To avoid this, reassign data.",
"SuccessfullyDeleteUserInfoMessage": "The user has been successfully deleted"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "The disabled users you selected will be deleted.",
"DeleteGroupUsersMessageHeader": "Delete the users from portal",
"DeleteGroupUsersSuccessMessage": "Users have been successfully deleted.",
"DeleteUserDataConfirmation": "User documents shared with others will be deleted. To avoid this, reassign data."
"DeleteGroupUsersSuccessMessage": "Users have been successfully deleted."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Add members",
"Birthdate": "Date of birth",
"DeleteUserDataConfirmation": "User documents shared with others will be deleted. To avoid this, reassign data.",
"DeleteSelfProfile": "Delete profile",
"DisableUserButton": "Disable",
"DisabledEmployeeStatus": "Disabled",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> se eliminará.",
"DeleteUserDataConfirmation": "Los documentos del usuario compartidos con otros se eliminarán. Para evitarlo, reasigne los datos.",
"SuccessfullyDeleteUserInfoMessage": "El usuario se ha eliminado correctamente"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Se eliminarán los usuarios desactivados que usted ha seleccionado.",
"DeleteGroupUsersMessageHeader": "Borrar los usuarios del portal",
"DeleteGroupUsersSuccessMessage": "Los usuarios se han eliminado correctamente.",
"DeleteUserDataConfirmation": "Los documentos del usuario compartidos con otros se eliminarán. Para evitarlo, reasigne los datos."
"DeleteGroupUsersSuccessMessage": "Los usuarios se han eliminado correctamente."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Añadir miembros",
"Birthdate": "Fecha de nacimiento",
"DeleteUserDataConfirmation": "Los documentos del usuario compartidos con otros se eliminarán. Para evitarlo, reasigne los datos.",
"DeleteSelfProfile": "Borrar perfil",
"DisableUserButton": "Deshabilitar",
"DisabledEmployeeStatus": "Deshabilitado",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong> {{user}} </strong> poistetaan.",
"DeleteUserDataConfirmation": "Toisten kanssa jaetut käyttäjäasiakirjat poistetaan. Voit välttää tämän määrittämällä tiedot uudelleen.",
"SuccessfullyDeleteUserInfoMessage": "Käyttäjä on poistettu onnistuneesti"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Valitsemasi käytöstä poistetut käyttäjät poistetaan.",
"DeleteGroupUsersMessageHeader": "Poista käyttäjät portaalista",
"DeleteGroupUsersSuccessMessage": "Käyttäjät on poistettu.",
"DeleteUserDataConfirmation": "Toisten kanssa jaetut käyttäjäasiakirjat poistetaan. Voit välttää tämän määrittämällä tiedot uudelleen."
"DeleteGroupUsersSuccessMessage": "Käyttäjät on poistettu."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Lisää jäseniä",
"Birthdate": "Syntymäaika",
"DeleteUserDataConfirmation": "Toisten kanssa jaetut käyttäjäasiakirjat poistetaan. Voit välttää tämän määrittämällä tiedot uudelleen.",
"DeleteSelfProfile": "Poista profiili",
"DisableUserButton": "Poisteta käytöstä",
"DisabledEmployeeStatus": "Poistettu käytöstä",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> sera supprimé.",
"DeleteUserDataConfirmation": "Les documents de l'utilisateur partagés avec d'autres seront supprimés. Pour éviter cela, réaffectez les données.",
"SuccessfullyDeleteUserInfoMessage": "L'utilisateur a été supprimé avec succès"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Les utilisateurs désactivés sélectionnés seront supprimés",
"DeleteGroupUsersMessageHeader": "Supprimer les utilisateurs du portail",
"DeleteGroupUsersSuccessMessage": "Les utilisateurs ont été supprimés avec succès.",
"DeleteUserDataConfirmation": "Les documents de l'utilisateur partagés avec d'autres seront supprimés. Pour éviter cela, réaffectez les données."
"DeleteGroupUsersSuccessMessage": "Les utilisateurs ont été supprimés avec succès."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Ajouter des membres",
"Birthdate": "Date de naissance",
"DeleteUserDataConfirmation": "Les documents de l'utilisateur partagés avec d'autres seront supprimés. Pour éviter cela, réaffectez les données.",
"DeleteSelfProfile": "Supprimer le profil",
"DisableUserButton": "Désactiver",
"DisabledEmployeeStatus": "Désactivé",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> sarà cancellato.",
"DeleteUserDataConfirmation": "I documenti utente condivisi con altri verranno eliminati. Per evitare ciò si consiglia di riassegnare i dati.",
"SuccessfullyDeleteUserInfoMessage": "L'utente è stato cancellato con successo"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Gli utenti disabilitati selezionati verranno eliminati.",
"DeleteGroupUsersMessageHeader": "Elimina gli utenti dal portale",
"DeleteGroupUsersSuccessMessage": "Gli utenti sono stati eliminati con successo.",
"DeleteUserDataConfirmation": "I documenti utente condivisi verso altri utenti verranno eliminati. Per evitare ciò, si consiglia di riassegnare i dati."
"DeleteGroupUsersSuccessMessage": "Gli utenti sono stati eliminati con successo."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Aggiungi membri",
"Birthdate": "Data di nascita",
"DeleteUserDataConfirmation": "I documenti utente condivisi con altri verranno eliminati. Per evitare ciò si consiglia di riassegnare i dati.",
"DeleteSelfProfile": "Eliminare il profilo",
"DisableUserButton": "Disattivare",
"DisabledEmployeeStatus": "Disabilitato",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong>は削除されます。",
"DeleteUserDataConfirmation": "他の人と共有しているユーザードキュメントは削除されます。これを避けるためには、データの再割り当てを行ってください。",
"SuccessfullyDeleteUserInfoMessage": "ユーザーの削除に成功しました。"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "選択した無効化されたユーザーが削除されます。",
"DeleteGroupUsersMessageHeader": "ポータルからユーザーを削除します",
"DeleteGroupUsersSuccessMessage": "ユーザーが正常に削除されました。",
"DeleteUserDataConfirmation": "他の人と共有しているユーザードキュメントは削除されます。これを防ぐには、データの再割り当てを行ってください。"
"DeleteGroupUsersSuccessMessage": "ユーザーが正常に削除されました。"
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "メンバーの追加",
"Birthdate": "誕生日",
"DeleteUserDataConfirmation": "他の人と共有しているユーザードキュメントは削除されます。これを避けるためには、データの再割り当てを行ってください。",
"DeleteSelfProfile": "プロファイルの削除",
"DisableUserButton": "無効にする",
"DisabledEmployeeStatus": "無効化",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong>가 삭제됩니다.",
"DeleteUserDataConfirmation": "다른 사용자에게 공유한 사용자 문서가 삭제됩니다. 이를 피하려면, 데이터를 재할당하세요.",
"SuccessfullyDeleteUserInfoMessage": "사용자가 성공적으로 삭제되었습니다"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "선택한 비활성 사용자가 삭제됩니다.",
"DeleteGroupUsersMessageHeader": "포털에서 사용자 삭제",
"DeleteGroupUsersSuccessMessage": "사용자가 성공적으로 삭제되었습니다.",
"DeleteUserDataConfirmation": "다른 사용자에게 공유한 사용자 문서가 삭제됩니다. 이를 피하려면, 데이터를 재할당하세요."
"DeleteGroupUsersSuccessMessage": "사용자가 성공적으로 삭제되었습니다."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "멤버 추가",
"Birthdate": "생년월일",
"DeleteUserDataConfirmation": "다른 사용자에게 공유한 사용자 문서가 삭제됩니다. 이를 피하려면, 데이터를 재할당하세요.",
"DeleteSelfProfile": "프로필 삭제",
"DisableUserButton": "비활성화",
"DisabledEmployeeStatus": "비활성화",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> ຈະຖືກລົບ",
"DeleteUserDataConfirmation": "ເອກະສານຂອງຜູ້ໃຊ້ທີ່ຖືກແບ່ງປັນກັບຄົນອື່ນຈະຖືກລຶບອອກ. ເພື່ອຫລີກລ້ຽງບັນຫານທີ່ຈະເກີດຂື້ນໃນການປ້ອນຂໍ້ມູນ",
"SuccessfullyDeleteUserInfoMessage": "ຜູ້ໃຊ້ຖືກລຶບອອກແລ້ວ"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "ຜູ້ໃຊ້ທີ່ຖືກປິດການໃຊ້ງານທີ່ທ່ານເລືອກຈະຖືກລົບອອກ.",
"DeleteGroupUsersMessageHeader": "ລົບຜູ້ໃຊ້ອອກຈາກ Portal",
"DeleteGroupUsersSuccessMessage": "ຢູເຊີ້ນີ້ມີແລ້ວ",
"DeleteUserDataConfirmation": "ເອກະສານຜູ້ໃຊ້ທີ່ແບ່ງປັນໃຫ້ຜູ້ອື່ນຈະຖືກລຶບອອກ. ເພື່ອຫລີກລ້ຽງສິ່ງນີ້, ໃຫ້ຂໍ້ມູນຄືນໃຫມ່."
"DeleteGroupUsersSuccessMessage": "ຢູເຊີ້ນີ້ມີແລ້ວ"
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "ເພີ່ມສະມາຊິກ",
"Birthdate": "ວັນເກີດ",
"DeleteUserDataConfirmation": "ເອກະສານຂອງຜູ້ໃຊ້ທີ່ຖືກແບ່ງປັນກັບຄົນອື່ນຈະຖືກລຶບອອກ. ເພື່ອຫລີກລ້ຽງບັນຫານທີ່ຈະເກີດຂື້ນໃນການປ້ອນຂໍ້ມູນ",
"DeleteSelfProfile": "ລຶບ profile",
"DisableUserButton": "ປິດ",
"DisabledEmployeeStatus": "ປິດ",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> tiks izdzēsts.",
"DeleteUserDataConfirmation": "Lietotāja dokumenti, kas kopīgoti ar citiem, tiks dzēsti. Lai no tā izvairītos, atkārtoti piešķiriet datus.",
"SuccessfullyDeleteUserInfoMessage": "Lietotājs ir veiksmīgi izdzēsts"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Jūsu atlasītie invalīdi tiks izdzēsti.",
"DeleteGroupUsersMessageHeader": "Izdzēsiet lietotājus no portāla",
"DeleteGroupUsersSuccessMessage": "Lietotāji ir veiksmīgi izdzēsti.",
"DeleteUserDataConfirmation": "Lietotāja dokumenti, kas kopīgoti ar citiem, tiks dzēsti. Lai no tā izvairītos, atkārtoti piešķiriet datus."
"DeleteGroupUsersSuccessMessage": "Lietotāji ir veiksmīgi izdzēsti."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Pievienot dalībniekus",
"Birthdate": "Dzimšanas datums",
"DeleteUserDataConfirmation": "Lietotāja dokumenti, kas kopīgoti ar citiem, tiks dzēsti. Lai no tā izvairītos, atkārtoti piešķiriet datus.",
"DeleteSelfProfile": "Dzēst profilu",
"DisableUserButton": "Atspējot",
"DisabledEmployeeStatus": "Atspējots",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> zal worden verwijderd.",
"DeleteUserDataConfirmation": "Documenten van gebruikers die met anderen gedeeld worden, worden verwijderd. Om dit te vermijden, wijst u gegevens opnieuw toe.",
"SuccessfullyDeleteUserInfoMessage": "De gebruiker is met succes verwijderd"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "De uitgeschakelde gebruikers die u geselecteerd hebt worden verwijderd.",
"DeleteGroupUsersMessageHeader": "Verwijder de gebruikers van het portaal",
"DeleteGroupUsersSuccessMessage": "Gebruikers zijn met succes verwijderd.",
"DeleteUserDataConfirmation": "Gebruikersdocumenten die met anderen gedeeld worden, zullen gewist worden. Om dit te voorkomen, kunt u gegevens opnieuw toewijzen."
"DeleteGroupUsersSuccessMessage": "Gebruikers zijn met succes verwijderd."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Leden toevoegen",
"Birthdate": "Geboortedatum",
"DeleteUserDataConfirmation": "Documenten van gebruikers die met anderen gedeeld worden, worden verwijderd. Om dit te vermijden, wijst u gegevens opnieuw toe.",
"DeleteSelfProfile": "Verwijder profiel",
"DisableUserButton": "Schakel uit",
"DisabledEmployeeStatus": "Uitgeschakeld",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "Użytkownik {{userCaption}} <strong>{{user}}</strong> zostanie usunięty.",
"DeleteUserDataConfirmation": "Udostępnione przez użytkownika dokumenty zostaną usunięte. Aby tego uniknąć, przypisz dane innemu użytkownikowi.",
"SuccessfullyDeleteUserInfoMessage": "Użytkownik został pomyślnie usunięty"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Wybrani przez Ciebie nieaktywni użytkownicy zostaną usunięci.",
"DeleteGroupUsersMessageHeader": "Usuń użytkowników z portalu",
"DeleteGroupUsersSuccessMessage": "Użytkownicy zostali pomyślnie usunięci.",
"DeleteUserDataConfirmation": "Udostępnione przez użytkownika dokumenty zostaną usunięte. Aby tego uniknąć, przypisz dane innemu użytkownikowi."
"DeleteGroupUsersSuccessMessage": "Użytkownicy zostali pomyślnie usunięci."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Dodaj członków",
"Birthdate": "Data urodzenia",
"DeleteUserDataConfirmation": "Udostępnione przez użytkownika dokumenty zostaną usunięte. Aby tego uniknąć, przypisz dane innemu użytkownikowi.",
"DeleteSelfProfile": "Usuń profil",
"DisableUserButton": "Dezaktywuj",
"DisabledEmployeeStatus": "Nieaktywny",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> será deletado.",
"DeleteUserDataConfirmation": "Os documentos de usuário compartilhados com outros serão excluídos. Para evitar isto, reatribuir dados.",
"SuccessfullyDeleteUserInfoMessage": "O usuário foi excluído com sucesso"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Os usuários deficientes que você selecionou serão excluídos.",
"DeleteGroupUsersMessageHeader": "Excluir os usuários do portal",
"DeleteGroupUsersSuccessMessage": "Os usuários foram excluídos com sucesso.",
"DeleteUserDataConfirmation": "Os documentos dos usuários compartilhados serão excluídos. Para evitar isto, reatribuir dados."
"DeleteGroupUsersSuccessMessage": "Os usuários foram excluídos com sucesso."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Adicionar membros",
"Birthdate": "Data de Nascimento",
"DeleteUserDataConfirmation": "Os documentos de usuário compartilhados com outros serão excluídos. Para evitar isto, reatribuir dados.",
"DeleteSelfProfile": "Excluir perfil",
"DisableUserButton": "Desabilitar",
"DisabledEmployeeStatus": "Desabilitado",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> será eliminado.",
"DeleteUserDataConfirmation": "Os documentos dos utilizadores partilhados com outros serão eliminados. Para evitar isto, reatribuir dados.",
"SuccessfullyDeleteUserInfoMessage": "O utilizador foi eliminado com êxito"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Os utilizadores desativados selecionados por si serão eliminados.",
"DeleteGroupUsersMessageHeader": "Eliminar os utilizadores do portal",
"DeleteGroupUsersSuccessMessage": "Os utilizadores foram eliminados com êxito.",
"DeleteUserDataConfirmation": "Os documentos dos utilizadores partilhados serão eliminados. Para evitar isto, reatribuir dados."
"DeleteGroupUsersSuccessMessage": "Os utilizadores foram eliminados com êxito."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Adicionar membros",
"Birthdate": "Data de nascimento",
"DeleteUserDataConfirmation": "Os documentos dos utilizadores partilhados com outros serão eliminados. Para evitar isto, reatribuir dados.",
"DeleteSelfProfile": "Eliminar perfil",
"DisableUserButton": "Desativar",
"DisabledEmployeeStatus": "Desativado",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> va fi șters.",
"DeleteUserDataConfirmation": "Documentele utilizatorului care au fost partajate cu alții vor fi șterse. Pentru a evita acest risc, reasignați datele.",
"SuccessfullyDeleteUserInfoMessage": "Utilizatorul a fost șters cu succes"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Utilizatorii inactivi pe care le-ați selecționat vor fi șterse.",
"DeleteGroupUsersMessageHeader": "Ștergerea utilizatorilor din portal",
"DeleteGroupUsersSuccessMessage": "Utilizatorii au fost șterse cu succes.",
"DeleteUserDataConfirmation": "Documentele utilizatorului care au fost partajate cu alții vor fi șterse. Pentru a evita acest risc, reasignați datele."
"DeleteGroupUsersSuccessMessage": "Utilizatorii au fost șterse cu succes."
}

View File

@ -1,6 +1,7 @@
{
"AddMembers": "Adăugați membrii",
"Birthdate": "Data de naștere",
"DeleteUserDataConfirmation": "Documentele utilizatorului care au fost partajate cu alții vor fi șterse. Pentru a evita acest risc, reasignați datele.",
"DeleteSelfProfile": "Ștergere profil",
"DisableUserButton": "Dezactivează",
"DisabledEmployeeStatus": "Dezactivat",

View File

@ -1,5 +1,4 @@
{
"DeleteUserConfirmation": "{{userCaption}} <strong>{{user}}</strong> будет удален.",
"DeleteUserDataConfirmation": "Будут удалены личные документы пользователя, доступные для других. Чтобы избежать этого, нужно перед удалением запустить процесс передачи данных.",
"SuccessfullyDeleteUserInfoMessage": "Пользователь успешно удален"
}

View File

@ -1,6 +1,5 @@
{
"DeleteGroupUsersMessage": "Выбранные заблокированные пользователи будут удалены с портала.",
"DeleteGroupUsersMessageHeader": "Удаление пользователей с портала",
"DeleteGroupUsersSuccessMessage": "Пользователи были успешно удалены",
"DeleteUserDataConfirmation": "Будут удалены личные документы пользователя, доступные для других. Чтобы избежать этого, нужно перед удалением запустить процесс передачи данных."
"DeleteGroupUsersSuccessMessage": "Пользователи были успешно удалены"
}

Some files were not shown because too many files have changed in this diff Show More