diff --git a/packages/asc-web-common/components/Loaders/DialogAsideLoader/DialogAsideLoader.js b/packages/asc-web-common/components/Loaders/DialogAsideLoader/DialogAsideLoader.js
new file mode 100644
index 00000000000..2aca8af3227
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogAsideLoader/DialogAsideLoader.js
@@ -0,0 +1,41 @@
+import React from "react";
+import Loaders from "../../Loaders";
+import StyledDialogAsideLoader from "./StyledDialogAsideLoader";
+import Aside from "@appserver/components/aside";
+import Backdrop from "@appserver/components/backdrop";
+
+const DialogAsideLoader = ({ isPanel, withoutAside }) => {
+ const zIndex = 310;
+
+ const renderClearDialogAsideLoader = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ return withoutAside ? (
+ renderClearDialogAsideLoader()
+ ) : (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default DialogAsideLoader;
diff --git a/packages/asc-web-common/components/Loaders/DialogAsideLoader/StyledDialogAsideLoader.js b/packages/asc-web-common/components/Loaders/DialogAsideLoader/StyledDialogAsideLoader.js
new file mode 100644
index 00000000000..19b438b8630
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogAsideLoader/StyledDialogAsideLoader.js
@@ -0,0 +1,59 @@
+import styled, { css } from "styled-components";
+
+const StyledDialogAsideLoader = styled.div`
+ ${(props) =>
+ props.isPanel &&
+ css`
+ .dialog-aside-loader {
+ padding: 0;
+ transform: translateX(${(props) => (props.visible ? "0" : "500px")});
+ width: 500px;
+
+ @media (max-width: 550px) {
+ width: 320px;
+ transform: translateX(${(props) => (props.visible ? "0" : "320px")});
+ }
+ }
+ `}
+
+ ${(props) =>
+ props.isPanel
+ ? css`
+ .dialog-loader-header {
+ padding: 12px 16px;
+ }
+
+ .dialog-loader-body {
+ padding: 16px;
+ }
+
+ .dialog-loader-footer {
+ padding: 12px 16px;
+ position: fixed;
+ bottom: 0;
+ width: 468px;
+
+ @media (max-width: 550px) {
+ width: 288px;
+ }
+ }
+ `
+ : css`
+ .dialog-loader-header {
+ border-bottom: 1px solid rgb(222, 226, 230);
+ padding: 12px 0;
+ }
+
+ .dialog-loader-body {
+ padding: 16px 0;
+ }
+
+ .dialog-loader-footer {
+ position: fixed;
+ bottom: 16px;
+ width: 293px;
+ }
+ `}
+`;
+
+export default StyledDialogAsideLoader;
diff --git a/packages/asc-web-common/components/Loaders/DialogAsideLoader/index.js b/packages/asc-web-common/components/Loaders/DialogAsideLoader/index.js
new file mode 100644
index 00000000000..93a057aee83
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogAsideLoader/index.js
@@ -0,0 +1 @@
+export default from "./DialogAsideLoader";
diff --git a/packages/asc-web-common/components/Loaders/DialogLoader/DialogLoader.js b/packages/asc-web-common/components/Loaders/DialogLoader/DialogLoader.js
new file mode 100644
index 00000000000..a94b6b8b1e0
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogLoader/DialogLoader.js
@@ -0,0 +1,32 @@
+import React from "react";
+import Loaders from "../../Loaders";
+import StyledDialogLoader from "./StyledDialogLoader";
+
+const DialogLoader = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default DialogLoader;
diff --git a/packages/asc-web-common/components/Loaders/DialogLoader/StyledDialogLoader.js b/packages/asc-web-common/components/Loaders/DialogLoader/StyledDialogLoader.js
new file mode 100644
index 00000000000..d4f33b77f1c
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogLoader/StyledDialogLoader.js
@@ -0,0 +1,27 @@
+import styled from "styled-components";
+
+const StyledDialogLoader = styled.div`
+ .dialog-loader-header {
+ border-bottom: 1px solid rgb(222, 226, 230);
+ display: flex;
+ padding: 12px 0;
+ }
+
+ .dialog-loader-body {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding-top: 12px;
+ }
+
+ .dialog-loader-footer {
+ display: flex;
+ padding-top: 12px;
+ }
+
+ .dialog-loader-icon {
+ margin-left: auto;
+ }
+`;
+
+export default StyledDialogLoader;
diff --git a/packages/asc-web-common/components/Loaders/DialogLoader/index.js b/packages/asc-web-common/components/Loaders/DialogLoader/index.js
new file mode 100644
index 00000000000..7f451024a10
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/DialogLoader/index.js
@@ -0,0 +1 @@
+export default from "./DialogLoader";
diff --git a/packages/asc-web-common/components/Loaders/TreeFolderLoader/TreeFolderLoader.js b/packages/asc-web-common/components/Loaders/TreeFolderLoader/TreeFolderLoader.js
index a3a3fe91895..4217798d250 100644
--- a/packages/asc-web-common/components/Loaders/TreeFolderLoader/TreeFolderLoader.js
+++ b/packages/asc-web-common/components/Loaders/TreeFolderLoader/TreeFolderLoader.js
@@ -2,7 +2,7 @@ import React from "react";
import PropTypes from "prop-types";
import { StyledTreeFolder, StyledContainer } from "./StyledTreeFolderLoader";
import RectangleLoader from "../RectangleLoader";
-import CircleLoader from "../CircleLoader";
+import TreeNodeLoader from "../TreeNodeLoader";
const TreeFolderLoader = ({ id, className, style, ...rest }) => {
const {
@@ -19,173 +19,19 @@ const TreeFolderLoader = ({ id, className, style, ...rest }) => {
return (
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
+
diff --git a/packages/asc-web-common/components/Loaders/TreeNodeLoader/TreeNodeLoader.js b/packages/asc-web-common/components/Loaders/TreeNodeLoader/TreeNodeLoader.js
new file mode 100644
index 00000000000..2ad3531aa52
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/TreeNodeLoader/TreeNodeLoader.js
@@ -0,0 +1,44 @@
+import React from "react";
+import RectangleLoader from "../RectangleLoader";
+import CircleLoader from "../CircleLoader";
+
+const TreeNodeLoader = ({
+ title,
+ borderRadius,
+ backgroundColor,
+ foregroundColor,
+ backgroundOpacity,
+ foregroundOpacity,
+ speed,
+ animate,
+}) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export default TreeNodeLoader;
diff --git a/packages/asc-web-common/components/Loaders/TreeNodeLoader/index.js b/packages/asc-web-common/components/Loaders/TreeNodeLoader/index.js
new file mode 100644
index 00000000000..81d7a967c7e
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/TreeNodeLoader/index.js
@@ -0,0 +1 @@
+export default from "./TreeNodeLoader";
diff --git a/packages/asc-web-common/components/Loaders/TreeSettingsLoader/StyledTreeSettingsLoader.js b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/StyledTreeSettingsLoader.js
new file mode 100644
index 00000000000..9171b5d0c17
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/StyledTreeSettingsLoader.js
@@ -0,0 +1,12 @@
+import styled from "styled-components";
+
+const StyledTreeSettingsLoader = styled.div`
+ width: 90%;
+ display: grid;
+ grid-template-columns: 8px 1fr;
+ grid-template-rows: 1fr;
+ grid-column-gap: 6px;
+ margin: 24px 0;
+`;
+
+export default StyledTreeSettingsLoader;
diff --git a/packages/asc-web-common/components/Loaders/TreeSettingsLoader/TreeSettingsLoader.js b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/TreeSettingsLoader.js
new file mode 100644
index 00000000000..f0fdf434f18
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/TreeSettingsLoader.js
@@ -0,0 +1,28 @@
+import React from "react";
+import PropTypes from "prop-types";
+import StyledTreeSettingsLoader from "./StyledTreeSettingsLoader";
+import TreeNodeLoader from "../TreeNodeLoader";
+
+const TreeSettingsLoader = ({ id, className, style, ...rest }) => {
+ return (
+
+
+
+
+
+ );
+};
+
+TreeSettingsLoader.propTypes = {
+ id: PropTypes.string,
+ className: PropTypes.string,
+ style: PropTypes.object,
+};
+
+TreeSettingsLoader.defaultProps = {
+ id: undefined,
+ className: undefined,
+ style: undefined,
+};
+
+export default TreeSettingsLoader;
diff --git a/packages/asc-web-common/components/Loaders/TreeSettingsLoader/index.js b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/index.js
new file mode 100644
index 00000000000..dba2dfe9df8
--- /dev/null
+++ b/packages/asc-web-common/components/Loaders/TreeSettingsLoader/index.js
@@ -0,0 +1 @@
+export default from "./TreeSettingsLoader";
diff --git a/packages/asc-web-common/components/Loaders/index.js b/packages/asc-web-common/components/Loaders/index.js
index 729ea41a801..4c9035cbffa 100644
--- a/packages/asc-web-common/components/Loaders/index.js
+++ b/packages/asc-web-common/components/Loaders/index.js
@@ -4,6 +4,7 @@ import Header from "./HeaderLoader";
import SectionHeader from "./SectionHeaderLoader";
import ArticleHeader from "./ArticleHeaderLoader";
import TreeFolders from "./TreeFolderLoader";
+import TreeSettingsLoader from "./TreeSettingsLoader";
import Row from "./RowLoader";
import Rows from "./RowsLoader";
import Text from "./TextLoader";
@@ -14,6 +15,8 @@ import Group from "./GroupLoader";
import HistoryRows from "./HistoryRowsLoader";
import Tile from "./TileLoader";
import Tiles from "./TilesLoader";
+import DialogLoader from "./DialogLoader";
+import DialogAsideLoader from "./DialogAsideLoader";
export default {
Rectangle,
@@ -22,6 +25,7 @@ export default {
SectionHeader,
ArticleHeader,
TreeFolders,
+ TreeSettingsLoader,
Row,
Rows,
Text,
@@ -32,4 +36,6 @@ export default {
HistoryRows,
Tile,
Tiles,
+ DialogLoader,
+ DialogAsideLoader,
};
diff --git a/packages/asc-web-components/modal-dialog/index.js b/packages/asc-web-components/modal-dialog/index.js
index e877714ddab..27fcfc36f8f 100644
--- a/packages/asc-web-components/modal-dialog/index.js
+++ b/packages/asc-web-components/modal-dialog/index.js
@@ -15,6 +15,7 @@ import {
BodyBox,
} from "./styled-modal-dialog";
import Portal from "../portal";
+import Loaders from "@appserver/common/components/Loaders";
function Header() {
return null;
@@ -104,6 +105,7 @@ class ModalDialog extends React.Component {
id,
style,
children,
+ isLoading,
} = this.props;
let header = null;
@@ -143,16 +145,22 @@ class ModalDialog extends React.Component {
style={style}
>
-
-
- {header ? header.props.children : null}
-
-
-
-
- {body ? body.props.children : null}
-
- {footer ? footer.props.children : null}
+ {isLoading ? (
+
+ ) : (
+ <>
+
+
+ {header ? header.props.children : null}
+
+
+
+
+ {body ? body.props.children : null}
+
+ {footer ? footer.props.children : null}
+ >
+ )}
@@ -171,21 +179,27 @@ class ModalDialog extends React.Component {
className="modal-dialog-aside not-selectable"
>
-
-
- {header ? header.props.children : null}
-
- {scale ? : ""}
-
-
- {body ? body.props.children : null}
-
-
- {footer ? footer.props.children : null}
-
+ {isLoading ? (
+
+ ) : (
+ <>
+
+
+ {header ? header.props.children : null}
+
+ {scale ? : ""}
+
+
+ {body ? body.props.children : null}
+
+
+ {footer ? footer.props.children : null}
+
+ >
+ )}
@@ -214,6 +228,7 @@ ModalDialog.propTypes = {
bodyPadding: PropTypes.string,
contentHeight: PropTypes.string,
contentWidth: PropTypes.string,
+ isLoading: PropTypes.bool,
className: PropTypes.string,
id: PropTypes.string,
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
diff --git a/products/ASC.CRM/Client/public/index.html b/products/ASC.CRM/Client/public/index.html
index 8eb5fffff02..974dc7a9dbd 100644
--- a/products/ASC.CRM/Client/public/index.html
+++ b/products/ASC.CRM/Client/public/index.html
@@ -91,7 +91,7 @@
-