Merge branch 'develop' into feature/fix-hide/show-header

# Conflicts:
#	products/ASC.Files/Client/src/App.js
#	products/ASC.Files/Client/src/components/pages/Home/index.js
#	products/ASC.Files/Client/src/store/files/actions.js
#	web/ASC.Web.Common/package.json
#	web/ASC.Web.Common/src/components/PageLayout/index.js
#	web/ASC.Web.Common/src/components/PageLayout/sub-components/section-body.js
#	web/ASC.Web.Common/src/components/PageLayout/sub-components/section-header.js
#	web/ASC.Web.Common/src/store/auth/actions.js
#	web/ASC.Web.Common/src/store/auth/reducer.js
#	web/ASC.Web.Components/package.json
This commit is contained in:
TatianaLopaeva 2020-12-11 11:12:28 +03:00
commit c9a8027ddf
149 changed files with 3611 additions and 2604 deletions

View File

@ -98,13 +98,24 @@ namespace ASC.Common.Threading
public T GetProperty<T>(string name)
{
if (!DistributedTaskCache.Props.Any(r => r.Key == name)) return default;
var val = DistributedTaskCache.Props.SingleOrDefault(r => r.Key == name);
var val = DistributedTaskCache.Props.FirstOrDefault(r => r.Key == name);
if (val == null) return default;
var resType = typeof(T);
object result = val.Value;
if(resType == typeof(Guid))
{
result = Guid.Parse(val.Value.Trim('"'));
}
else if(resType.IsEnum)
{
Enum.TryParse(resType, val.Value, out var e);
result = e;
}
return JsonSerializer.Deserialize<T>(val.Value);
return (T)Convert.ChangeType(result, resType);
}
public void SetProperty(string name, object value)

View File

@ -164,6 +164,7 @@ namespace ASC.Core.Data
var counter = CoreDbContext.QuotaRows
.Where(r => r.Path == row.Path && r.Tenant == row.Tenant)
.Select(r => r.Counter)
.Take(1)
.FirstOrDefault();
var dbQuotaRow = new DbQuotaRow

View File

@ -1,63 +0,0 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using System;
using ASC.Common.Caching;
namespace ASC.Data.Storage
{
static class DataStoreCache
{
private static readonly ICache Cache = AscCache.Memory;
public static void Put(IDataStore store, string tenantId, string module)
{
Cache.Insert(DataStoreCacheItemExtenstion.MakeCacheKey(tenantId, module), store, DateTime.MaxValue);
}
public static IDataStore Get(string tenantId, string module)
{
return Cache.Get<IDataStore>(DataStoreCacheItemExtenstion.MakeCacheKey(tenantId, module));
}
public static void Remove(string tenantId, string module)
{
Cache.Remove(DataStoreCacheItemExtenstion.MakeCacheKey(tenantId, module));
}
}
public static class DataStoreCacheItemExtenstion
{
internal static string MakeCacheKey(string tenantId, string module)
{
return string.Format("{0}:\\{1}", tenantId, module);
}
}
}

View File

@ -29,6 +29,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using ASC.Common;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Data.Storage.Configuration;
@ -40,6 +41,7 @@ using Microsoft.Extensions.Options;
namespace ASC.Data.Storage.DiscStorage
{
[Scope]
public class DiscDataStore : BaseStorage
{
private readonly Dictionary<string, MappedPath> _mappedPaths = new Dictionary<string, MappedPath>();

View File

@ -37,6 +37,7 @@ using System.Text;
using System.Threading;
using System.Web;
using ASC.Common;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Data.Storage.Configuration;
@ -55,6 +56,7 @@ using MimeMapping = ASC.Common.Web.MimeMapping;
namespace ASC.Data.Storage.GoogleCloud
{
[Scope]
public class GoogleCloudStorage : BaseStorage
{
private string _subDir = string.Empty;
@ -241,7 +243,7 @@ namespace ASC.Data.Storage.GoogleCloud
{
var contentDisposition = string.Format("attachment; filename={0};",
HttpUtility.UrlPathEncode(attachmentFileName));
if (attachmentFileName.Any(c => (int)c >= 0 && (int)c <= 127))
if (attachmentFileName.Any(c => c >= 0 && c <= 127))
{
contentDisposition = string.Format("attachment; filename*=utf-8''{0};",
HttpUtility.UrlPathEncode(attachmentFileName));
@ -786,7 +788,7 @@ namespace ASC.Data.Storage.GoogleCloud
continue;
}
if ((int)status != 308)
if (status != 308)
throw (ex);
break;

View File

@ -30,6 +30,7 @@ using System.IO;
using System.Linq;
using System.Web;
using ASC.Common;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Data.Storage.Configuration;
@ -45,6 +46,7 @@ using MimeMapping = ASC.Common.Web.MimeMapping;
namespace ASC.Data.Storage.RackspaceCloud
{
[Scope]
public class RackspaceCloudStorage : BaseStorage
{
private string _region;
@ -248,7 +250,7 @@ namespace ASC.Data.Storage.RackspaceCloud
{
var contentDisposition = string.Format("attachment; filename={0};",
HttpUtility.UrlPathEncode(attachmentFileName));
if (attachmentFileName.Any(c => (int)c >= 0 && (int)c <= 127))
if (attachmentFileName.Any(c => c >= 0 && c <= 127))
{
contentDisposition = string.Format("attachment; filename*=utf-8''{0};",
HttpUtility.UrlPathEncode(attachmentFileName));

View File

@ -41,6 +41,7 @@ using Amazon.S3.Model;
using Amazon.S3.Transfer;
using Amazon.Util;
using ASC.Common;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Data.Storage.Configuration;
@ -53,6 +54,7 @@ using MimeMapping = ASC.Common.Web.MimeMapping;
namespace ASC.Data.Storage.S3
{
[Scope]
public class S3Storage : BaseStorage
{
private readonly List<string> _domains = new List<string>();
@ -190,7 +192,7 @@ namespace ASC.Data.Storage.S3
{
var contentDisposition = string.Format("attachment; filename={0};",
HttpUtility.UrlPathEncode(attachmentFileName));
if (attachmentFileName.Any(c => (int)c >= 0 && (int)c <= 127))
if (attachmentFileName.Any(c => c >= 0 && c <= 127))
{
contentDisposition = string.Format("attachment; filename*=utf-8''{0};",
HttpUtility.UrlPathEncode(attachmentFileName));

View File

@ -29,50 +29,20 @@ using System.Collections.Generic;
using System.Linq;
using ASC.Common;
using ASC.Common.Caching;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Core.Common.Configuration;
using ASC.Core.Common.Settings;
using ASC.Data.Storage.Configuration;
using ASC.Data.Storage.DiscStorage;
using ASC.Data.Storage.Encryption;
using ASC.Security.Cryptography;
using ASC.Data.Storage.GoogleCloud;
using ASC.Data.Storage.RackspaceCloud;
using ASC.Data.Storage.S3;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
namespace ASC.Data.Storage
{
[Singletone]
public class StorageFactoryListener
{
private volatile bool Subscribed;
private readonly object locker;
private ICacheNotify<DataStoreCacheItem> Cache { get; }
public StorageFactoryListener(ICacheNotify<DataStoreCacheItem> cache)
{
Cache = cache;
locker = new object();
}
public void Subscribe()
{
if (Subscribed) return;
lock (locker)
{
if (Subscribed) return;
Subscribed = true;
Cache.Subscribe((r) => DataStoreCache.Remove(r.TenantId, r.Module), CacheNotifyAction.Remove);
}
}
}
[Singletone(Additional = typeof(StorageConfigExtension))]
public class StorageFactoryConfig
{
@ -174,7 +144,7 @@ namespace ASC.Data.Storage
}
}
[Scope]
[Scope(Additional = typeof(StorageFactoryExtension))]
public class StorageFactory
{
private const string DefaultTenantName = "default";
@ -184,55 +154,22 @@ namespace ASC.Data.Storage
private StorageSettingsHelper StorageSettingsHelper { get; }
private TenantManager TenantManager { get; }
private CoreBaseSettings CoreBaseSettings { get; }
private PathUtils PathUtils { get; }
private EmailValidationKeyProvider EmailValidationKeyProvider { get; }
private IOptionsMonitor<ILog> Options { get; }
private IHttpContextAccessor HttpContextAccessor { get; }
private EncryptionSettingsHelper EncryptionSettingsHelper { get; }
private EncryptionFactory EncryptionFactory { get; }
private IServiceProvider ServiceProvider { get; }
public StorageFactory(
StorageFactoryListener storageFactoryListener,
IServiceProvider serviceProvider,
StorageFactoryConfig storageFactoryConfig,
SettingsManager settingsManager,
StorageSettingsHelper storageSettingsHelper,
TenantManager tenantManager,
CoreBaseSettings coreBaseSettings,
PathUtils pathUtils,
EmailValidationKeyProvider emailValidationKeyProvider,
IOptionsMonitor<ILog> options,
EncryptionSettingsHelper encryptionSettingsHelper,
EncryptionFactory encryptionFactory) :
this(storageFactoryListener, storageFactoryConfig, settingsManager, storageSettingsHelper, tenantManager, coreBaseSettings, pathUtils, emailValidationKeyProvider, options, null, encryptionSettingsHelper, encryptionFactory)
CoreBaseSettings coreBaseSettings)
{
}
public StorageFactory(
StorageFactoryListener storageFactoryListener,
StorageFactoryConfig storageFactoryConfig,
SettingsManager settingsManager,
StorageSettingsHelper storageSettingsHelper,
TenantManager tenantManager,
CoreBaseSettings coreBaseSettings,
PathUtils pathUtils,
EmailValidationKeyProvider emailValidationKeyProvider,
IOptionsMonitor<ILog> options,
IHttpContextAccessor httpContextAccessor,
EncryptionSettingsHelper encryptionSettingsHelper,
EncryptionFactory encryptionFactory)
{
storageFactoryListener.Subscribe();
ServiceProvider = serviceProvider;
StorageFactoryConfig = storageFactoryConfig;
SettingsManager = settingsManager;
StorageSettingsHelper = storageSettingsHelper;
TenantManager = tenantManager;
CoreBaseSettings = coreBaseSettings;
PathUtils = pathUtils;
EmailValidationKeyProvider = emailValidationKeyProvider;
Options = options;
HttpContextAccessor = httpContextAccessor;
EncryptionSettingsHelper = encryptionSettingsHelper;
EncryptionFactory = encryptionFactory;
}
public IDataStore GetStorage(string tenant, string module)
@ -261,10 +198,6 @@ namespace ASC.Data.Storage
//Make tennant path
tenant = TenantPath.CreatePath(tenant);
//remove cache
//var store = DataStoreCache.Get(tenant, module);//TODO
//if (store == null)
//{
var section = StorageFactoryConfig.Section;
if (section == null)
{
@ -273,7 +206,6 @@ namespace ASC.Data.Storage
var settings = SettingsManager.LoadForTenant<StorageSettings>(tenantId);
//}
return GetDataStore(tenant, module, StorageSettingsHelper.DataStoreConsumer(settings), controller);
}
@ -294,16 +226,6 @@ namespace ASC.Data.Storage
return GetDataStore(tenant, module, consumer, new TenantQuotaController(tenantId, TenantManager));
}
private IDataStore GetStoreAndCache(string tenant, string module, DataStoreConsumer consumer, IQuotaController controller)
{
var store = GetDataStore(tenant, module, consumer, controller);
if (store != null)
{
DataStoreCache.Put(store, tenant, module);
}
return store;
}
private IDataStore GetDataStore(string tenant, string module, DataStoreConsumer consumer, IQuotaController controller)
{
var storage = StorageFactoryConfig.Section;
@ -330,10 +252,22 @@ namespace ASC.Data.Storage
props = handler.Property.ToDictionary(r => r.Name, r => r.Value);
}
return ((IDataStore)Activator.CreateInstance(instanceType, TenantManager, PathUtils, EmailValidationKeyProvider, HttpContextAccessor, Options, EncryptionSettingsHelper, EncryptionFactory))
;
return ((IDataStore)ActivatorUtilities.CreateInstance(ServiceProvider, instanceType))
.Configure(tenant, handler, moduleElement, props)
.SetQuotaController(moduleElement.Count ? controller : null
/*don't count quota if specified on module*/);
}
}
public class StorageFactoryExtension
{
public static void Register(DIHelper services)
{
services.TryAdd<DiscDataStore>();
services.TryAdd<GoogleCloudStorage>();
services.TryAdd<RackspaceCloudStorage>();
services.TryAdd<S3Storage>();
}
}
}

View File

@ -62,7 +62,7 @@
"header": ""
},
"url": {
"public": "http://192.168.0.142/",
"public": "http://localhost:8085/",
"internal": "",
"portal": ""
}

View File

@ -9,6 +9,7 @@
"asc-web-components": "file:../../../packages/asc-web-components",
"connected-react-router": "6.6.1",
"copy-to-clipboard": "^3.2.0",
"fast-deep-equal": "^3.1.3",
"history": "4.10.1",
"i18next": "19.0.3",
"i18next-browser-languagedetector": "4.0.1",

View File

@ -239,16 +239,5 @@
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
<script>
if (localStorage.getItem("asc_auth_key")){
let el = document.getElementById("burger-loader-svg");
let el1 = document.getElementById("logo-loader-svg");
let el2 = document.getElementById("avatar-loader-svg");
el.style.display = "block";
el1.style.display = "block";
el2.style.display = "block";
}
</script>
</body>
</html>

View File

@ -1,6 +1,6 @@
import React, { Suspense } from "react";
import { connect } from "react-redux";
import { Router, Switch, Redirect } from "react-router-dom";
import { Router, Switch, Redirect, Route } from "react-router-dom";
import Home from "./components/pages/Home";
import DocEditor from "./components/pages/DocEditor";
import Settings from "./components/pages/Settings";
@ -10,7 +10,6 @@ import config from "../package.json";
import {
store as commonStore,
constants,
history,
PrivateRoute,
PublicRoute,
@ -32,8 +31,8 @@ const {
setCurrentProductId,
setCurrentProductHomePage,
getPortalCultures,
getIsAuthenticated,
} = commonStore.auth.actions;
const { AUTH_KEY } = constants;
class App extends React.Component {
constructor(props) {
@ -43,8 +42,6 @@ class App extends React.Component {
}
componentDidMount() {
utils.removeTempContent();
const {
setModuleInfo,
getUser,
@ -53,80 +50,83 @@ class App extends React.Component {
getPortalCultures,
fetchTreeFolders,
setIsLoaded,
getIsAuthenticated,
} = this.props;
setModuleInfo();
getIsAuthenticated().then((isAuthenticated) => {
if (!isAuthenticated) {
utils.updateTempContent();
return setIsLoaded();
} else {
utils.updateTempContent(isAuthenticated);
}
const token = localStorage.getItem(AUTH_KEY);
const requests = this.isEditor
? [getUser()]
: [
getUser(),
getPortalSettings(),
getModules(),
getPortalCultures(),
fetchTreeFolders(),
];
if (!token) {
return setIsLoaded();
}
const requests = this.isEditor
? [getUser()]
: [
getUser(),
getPortalSettings(),
getModules(),
getPortalCultures(),
fetchTreeFolders(),
];
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
setIsLoaded();
});
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
utils.updateTempContent();
setIsLoaded();
});
});
}
render() {
const { homepage } = this.props;
return navigator.onLine ? (
<Layout>
<Router history={history}>
{!this.isEditor && <NavMenu />}
<Main >
<Suspense fallback={null}>
<Switch>
<Redirect exact from="/" to={`${homepage}`} />
<PrivateRoute
exact
path={`${homepage}/settings/:setting`}
component={Settings}
/>
<PrivateRoute
exact
path={`${homepage}/doceditor`}
component={DocEditor}
/>
<PrivateRoute
exact
path={`${homepage}/:fileId/history`}
component={VersionHistory}
/>
<PrivateRoute exact path={homepage} component={Home} />
<PrivateRoute path={`${homepage}/filter`} component={Home} />
<PublicRoute
exact
path={[
"/login",
"/login/error=:error",
"/login/confirmed-email=:confirmedEmail",
]}
component={Login}
/>
<PrivateRoute exact path={`/error=:error`} component={Error520} />
<PrivateRoute component={Error404} />
</Switch>
</Suspense>
</Main>
</Router>
</Layout>
<Layout>
<Router history={history}>
{!this.isEditor && <NavMenu />}
<Main>
<Suspense fallback={null}>
<Switch>
<Redirect exact from="/" to={`${homepage}`} />
<PrivateRoute
exact
path={`${homepage}/settings/:setting`}
component={Settings}
/>
<Route
exact
path={`${homepage}/doceditor`}
component={DocEditor}
/>
<PrivateRoute
exact
path={`${homepage}/:fileId/history`}
component={VersionHistory}
/>
<PrivateRoute exact path={homepage} component={Home} />
<PrivateRoute path={`${homepage}/filter`} component={Home} />
<PublicRoute
exact
path={[
"/login",
"/login/error=:error",
"/login/confirmed-email=:confirmedEmail",
]}
component={Login}
/>
<PrivateRoute exact path={`/error=:error`} component={Error520} />
<PrivateRoute component={Error404} />
</Switch>
</Suspense>
</Main>
</Router>
</Layout>
) : (
<Offline />
);
@ -143,6 +143,7 @@ const mapStateToProps = (state) => {
const mapDispatchToProps = (dispatch) => {
return {
getIsAuthenticated: () => getIsAuthenticated(dispatch),
setModuleInfo: () => {
dispatch(setCurrentProductHomePage(config.homepage));
dispatch(setCurrentProductId("e67be73d-f9ae-4ce1-8fec-1880cb518cb4"));

View File

@ -1,7 +1,7 @@
import React from "react";
import { TreeMenu, TreeNode, Icons } from "asc-web-components";
import styled from "styled-components";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { api, constants, toastr, store as initStore } from "asc-web-common";
import { connect } from "react-redux";
import {
@ -70,7 +70,7 @@ class TreeFolders extends React.Component {
this.setState({ expandedKeys });
}
if (!isEqual(prevProps.data, data)) {
if (!equal(prevProps.data, data)) {
//!utils.array.isArrayEqual(prevProps.data, data)) {
this.setState({ treeData: data });
}

View File

@ -107,7 +107,7 @@ class ArticleBodyContent extends React.Component {
const { showNewFilesPanel, expandedKeys, newFolderId } = this.state;
//console.log("Article Body render", this.props, this.state.expandedKeys);
console.log("Article Body render");
//console.log("Article Body render");
return (
<>
{showNewFilesPanel && (

View File

@ -8,7 +8,7 @@ import { utils } from "asc-web-common";
import {
setTreeFolders,
setDialogVisible,
onConvert,
convertUploadedFiles,
} from "../../../store/files/actions";
import { createI18N } from "../../../helpers/i18n";
const i18n = createI18N({
@ -50,7 +50,7 @@ class ConvertDialogComponent extends React.Component {
return false;
}
onConvert = () => this.props.onConvert(this.props.t);
onConvert = () => this.props.convertUploadedFiles(this.props.t);
onClose = () => this.props.setDialogVisible(this.props.t);
render() {
@ -66,7 +66,7 @@ class ConvertDialogComponent extends React.Component {
<img
className="convert_dialog_image"
src="images/convert_alert.png"
alt="convert alert image"
alt="convert alert"
/>
<div className="convert_dialog-content">
<Text>{t("ConversionMessage")}</Text>
@ -118,12 +118,8 @@ const ConvertDialog = (props) => (
<ModalDialogContainerTranslated i18n={i18n} {...props} />
);
const mapStateToProps = (state) => {
return {};
};
export default connect(mapStateToProps, {
export default connect(null, {
setTreeFolders,
setDialogVisible,
onConvert,
convertUploadedFiles,
})(withRouter(ConvertDialog));

View File

@ -5,5 +5,6 @@
"HideMessage": "Do not show this message again",
"ContinueButton": "Continue",
"CloseButton": "Close",
"UploadingLabel": "Uploading files: {{file}} of {{totalFiles}}"
"UploadingLabel": "Uploading files: {{file}} of {{totalFiles}}",
"ConvertingLabel": "Converting files: {{file}} of {{totalFiles}}"
}

View File

@ -5,5 +5,6 @@
"HideMessage": "Больше не показывать это сообщение",
"ContinueButton": "Продолжить",
"CloseButton": "Закрыть",
"UploadingLabel": "Загружено файлов: {{file}} из {{totalFiles}}"
"UploadingLabel": "Загружено файлов: {{file}} из {{totalFiles}}",
"ConvertingLabel": "Сконвертировано файлов: {{file}} из {{totalFiles}}"
}

View File

@ -14,10 +14,11 @@ import { api, utils, toastr } from "asc-web-common";
import {
fetchFiles,
setTreeFolders,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
setUpdateTree,
} from "../../../store/files/actions";
import { TIMEOUT } from "../../../helpers/constants";
import {
loopTreeFolders,
getSelectedFolderId,
@ -66,8 +67,8 @@ class DeleteDialogComponent extends React.Component {
treeFolders,
setTreeFolders,
isRecycleBinFolder,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
t,
fetchFiles,
setUpdateTree,
@ -78,19 +79,23 @@ class DeleteDialogComponent extends React.Component {
.then((res) => {
const currentProcess = res.find((x) => x.id === id);
if (currentProcess && currentProcess.progress !== 100) {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
percent: currentProcess.progress,
label: t("DeleteOperation"),
visible: true,
alert: false,
});
setTimeout(() => this.loopDeleteOperation(id), 1000);
} else {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
percent: 100,
label: t("DeleteOperation"),
visible: true,
alert: false,
});
setTimeout(() => clearProgressData(), 5000);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
fetchFiles(currentFolderId, filter).then((data) => {
if (!isRecycleBinFolder && !!this.state.foldersList.length) {
const path = data.selectedFolder.pathParts.slice(0);
@ -106,8 +111,12 @@ class DeleteDialogComponent extends React.Component {
}
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
@ -116,8 +125,8 @@ class DeleteDialogComponent extends React.Component {
isRecycleBinFolder,
onClose,
t,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.props;
const { selection } = this.state;
@ -139,10 +148,12 @@ class DeleteDialogComponent extends React.Component {
onClose();
if (folderIds.length || fileIds.length) {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
visible: true,
label: t("DeleteOperation"),
percent: 0,
alert: false,
});
files
@ -152,8 +163,12 @@ class DeleteDialogComponent extends React.Component {
this.loopDeleteOperation(id);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
}
};
@ -289,8 +304,8 @@ const mapStateToProps = (state) => {
export default connect(mapStateToProps, {
setTreeFolders,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
setUpdateTree,
fetchFiles,
})(withRouter(DeleteDialog));

View File

@ -22,9 +22,10 @@ import {
getSelection,
} from "../../../store/files/selectors";
import {
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} from "../../../store/files/actions";
import { TIMEOUT } from "../../../helpers/constants";
import DownloadContent from "./DownloadContent";
import { createI18N } from "../../../helpers/i18n";
const i18n = createI18N({
@ -178,8 +179,8 @@ class DownloadDialogComponent extends React.Component {
onDownloadProgress,
onClose,
t,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.props;
const downloadItems = this.getDownloadItems();
@ -187,10 +188,12 @@ class DownloadDialogComponent extends React.Component {
const folderIds = downloadItems[1];
if (fileConvertIds.length || folderIds.length) {
setProgressBarData({
setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: 0,
label: t("ArchivingData"),
alert: false,
});
api.files
.downloadFormatFiles(fileConvertIds, folderIds)
@ -199,8 +202,12 @@ class DownloadDialogComponent extends React.Component {
onDownloadProgress(false);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
}
};
@ -629,6 +636,6 @@ const mapStateToProps = (state) => {
};
export default connect(mapStateToProps, {
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
})(withRouter(DownloadDialog));

View File

@ -7,9 +7,10 @@ import { withTranslation } from "react-i18next";
import { api, utils, toastr } from "asc-web-common";
import {
fetchFiles,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} from "../../../store/files/actions";
import { TIMEOUT } from "../../../helpers/constants";
import {
getSelectedFolderId,
getFilter,
@ -32,9 +33,9 @@ const EmptyTrashDialogComponent = (props) => {
t,
filter,
currentFolderId,
setProgressBarData,
setSecondaryProgressBarData,
isLoading,
clearProgressData,
clearSecondaryProgressData,
fetchFiles,
} = props;
@ -51,51 +52,65 @@ const EmptyTrashDialogComponent = (props) => {
const currentProcess = res.find((x) => x.id === id);
if (currentProcess && currentProcess.progress !== 100) {
const newProgressData = {
icon: "trash",
visible: true,
percent: currentProcess.progress,
label: t("DeleteOperation"),
alert: false,
};
setProgressBarData(newProgressData);
setSecondaryProgressBarData(newProgressData);
setTimeout(() => loopEmptyTrash(id), 1000);
} else {
fetchFiles(currentFolderId, filter)
.then(() => {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 100,
label: t("DeleteOperation"),
alert: false,
});
setTimeout(() => clearProgressData(), 5000);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
toastr.success(successMessage);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
}
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
},
[
t,
currentFolderId,
filter,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
fetchFiles,
]
);
const onEmptyTrash = useCallback(() => {
const newProgressData = {
icon: "trash",
visible: true,
percent: 0,
label: t("DeleteOperation"),
alert: false,
};
setProgressBarData(newProgressData);
setSecondaryProgressBarData(newProgressData);
onClose();
files
.emptyTrash()
@ -104,10 +119,20 @@ const EmptyTrashDialogComponent = (props) => {
loopEmptyTrash(id);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
}, [onClose, loopEmptyTrash, setProgressBarData, t, clearProgressData]);
}, [
onClose,
loopEmptyTrash,
setSecondaryProgressBarData,
t,
clearSecondaryProgressData,
]);
return (
<ModalDialogContainer>
@ -157,7 +182,7 @@ const mapStateToProps = (state) => {
};
export default connect(mapStateToProps, {
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
fetchFiles,
})(withRouter(EmptyTrashDialog));

View File

@ -1,31 +1,24 @@
import React, { useEffect } from "react";
import React from "react";
import { withRouter } from "react-router";
import { /*RequestLoader,*/ Box } from "asc-web-components";
import { utils, api, toastr } from "asc-web-common";
import { withTranslation, I18nextProvider } from "react-i18next";
import { createI18N } from "../../../helpers/i18n";
const i18n = createI18N({
page: "DocEditor",
localesPath: "pages/DocEditor",
});
const { changeLanguage, getObjectByLocation, showLoader } = utils;
const { files } = api;
const { getObjectByLocation, showLoader } = utils;
class PureEditor extends React.Component {
async componentDidMount() {
const urlParams = getObjectByLocation(window.location);
const fileId = urlParams.fileId || null;
const doc = urlParams.doc || null;
console.log("PureEditor componentDidMount", fileId);
console.log("PureEditor componentDidMount", fileId, doc);
const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty("--vh", `${vh}px`);
showLoader();
let docApiUrl = await files.getDocServiceUrl();
let docApiUrl = await api.files.getDocServiceUrl();
const script = document.createElement("script");
script.setAttribute("type", "text/javascript");
@ -34,8 +27,8 @@ class PureEditor extends React.Component {
script.onload = function () {
console.log("PureEditor script.onload", fileId, window.DocsAPI);
files
.openEdit(fileId)
api.files
.openEdit(fileId, doc)
.then((config) => {
if (window.innerWidth < 720) {
config.type = "mobile";
@ -67,17 +60,4 @@ class PureEditor extends React.Component {
}
}
const EditorContainer = withTranslation()(PureEditor);
const DocEditor = (props) => {
useEffect(() => {
changeLanguage(i18n);
}, []);
return (
<I18nextProvider i18n={i18n}>
<EditorContainer {...props} />
</I18nextProvider>
);
};
export default withRouter(DocEditor);
export default withRouter(PureEditor);

View File

@ -1,72 +0,0 @@
{
"NewDocument": "New document",
"NewSpreadsheet": "New spreadsheet",
"NewPresentation": "New presentation",
"NewFolder": "New folder",
"UploadToFolder": "Upload to folder",
"SharingSettings": "Sharing settings",
"LinkForPortalUsers": "Link for portal users",
"MoveTo": "Move to",
"Copy": "Copy",
"Download": "Download",
"Rename": "Rename",
"Delete": "Delete",
"Type": "Type",
"Author": "Author",
"Search": "Search",
"Folders": "Folders",
"Document": "Document",
"Documents": "Documents",
"Spreadsheet": "Spreadsheet",
"Presentation": "Presentation",
"Presentations": "Presentations",
"Spreadsheets": "Spreadsheets",
"Images": "Images",
"Media": "Media",
"Archives": "Archives",
"AllFiles": "All files",
"NoSubfolders": "No subfolders",
"LoadingProcessing": "Loading...",
"LoadingDescription": "Please wait...",
"ByLastModifiedDate": "Last modified date",
"ByCreationDate": "Creation date",
"ByTitle": "Title",
"ByType": "Type",
"BySize": "Size",
"ByAuthor": "Author",
"DirectionAscLabel": "A-Z",
"DirectionDescLabel": "Z-A",
"CountPerPage": "{{count}} per page",
"PageOfTotalPage": "{{page}} of {{totalPage}}",
"PreviousPage": "Previous",
"NextPage": "Next",
"DefaultOptionLabel": "Me",
"LblSelect": "Select",
"AuthorMe": "Me",
"TitleCreated": "Created",
"TitleUploaded": "Uploaded",
"TitleModified": "Updated",
"TitleRemoved": "Removed",
"TitleSubfolders": "Flds",
"TitleDocuments": "Dcs",
"Share": "Share",
"DownloadAs": "Download as",
"More": "More",
"CloseButton": "Close",
"All": "All",
"Files": "Files",
"EmptyRecycleBin": "Empty Recycle Bin",
"Folder": "Folder",
"ClearButton": "Reset filter",
"SubheadingEmptyText": "No files to be displayed in this section",
"MyEmptyContainerDescription": "The documents and image files you create or upload to the portal are kept here in 'My Documents' section. You can open and edit them using the ONLYOFFICE™ portal editor, share them with friends or colleagues, organize into folders. Drag-and-drop the files from your computer here to upload them to your portal even more easily.",
"SharedEmptyContainerDescription": "The 'Shared with Me' section is used to show the files which your friends or colleagues gave you access to. In case you haven't seen the latest changes in the documents they are marked 'new'. You can remove the files from the list clicking the appropriate button.",
"CommonEmptyContainerDescription": "The 'Common Documents' section shows all the documents shared by portal administrator for common access. Only portal administrator can create folders in this section, but with the access granted the portal users can also upload their files here. Drag-and-drop the files from your computer here to upload them to your portal even more easily.",
"TrashEmptyContainerDescription": "The 'Recycle Bin' section is where all the deleted files are moved. You can either restore them in case they are deleted by mistake or delete them permanently. Please note, that when you delete the files from the 'Recycle Bin' they cannot be restored any longer.",
"GoToMyButton": "Go to My Documents",
"BackToParentFolderButton": "Back to parent folder",
"EmptyFolderHeader": "No files in this folder",
"EmptyFilterSubheadingText": "No files to be displayed for this filter here",
"EmptyFilterDescriptionText": "No files or folders matching your filter can be displayed in this section. Please select other filter options or clear filter to view all the files in this section. You can also look for the file you need in other sections.",
"Filter": "Filter"
}

View File

@ -1,72 +0,0 @@
{
"NewDocument": "Новый документ",
"NewSpreadsheet": "Новая таблица",
"NewPresentation": "Новая презентация",
"NewFolder": "Новая папка",
"UploadToFolder": "Загрузить в папку",
"SharingSettings": "Настройки доступа",
"LinkForPortalUsers": "Ссылка для пользователей портала",
"MoveTo": "Переместить",
"Copy": "Копировать",
"Download": "Скачать",
"Rename": "Переименовать",
"Delete": "Удалить",
"Type": "Тип",
"Author": "Автор",
"Search": "Поиск",
"Folders": "Папки",
"Document": "Документ",
"Documents": "Документы",
"Spreadsheet": "Таблица",
"Presentation": "Презентация",
"Presentations": "Презентации",
"Spreadsheets": "Таблицы",
"Images": "Изображения",
"Media": "Медиа",
"Archives": "Архивы",
"AllFiles": "Все файлы",
"NoSubfolders": "Без подпапок",
"LoadingProcessing": "Загрузка...",
"LoadingDescription": "Пожалуйста, подождите...",
"ByLastModifiedDate": "Дата последнего изменения",
"ByCreationDate": "Дата создания",
"ByTitle": "Название",
"ByType": "Тип",
"BySize": "Размер",
"ByAuthor": "Автор",
"DirectionAscLabel": "А-Я",
"DirectionDescLabel": "Я-А",
"CountPerPage": "{{count}} на странице",
"PageOfTotalPage": "{{page}} из {{totalPage}}",
"PreviousPage": "Предыдущая",
"NextPage": "Следующая",
"DefaultOptionLabel": "Я",
"LblSelect": "Выберите",
"AuthorMe": "Я",
"TitleCreated": "Создана",
"TitleUploaded": "Загружен",
"TitleModified": "Обновлён",
"TitleRemoved": "Удалён",
"TitleSubfolders": "Flds",
"TitleDocuments": "Dcs",
"Share": "Доступ",
"DownloadAs": "Скачать как",
"More": "Больше",
"CloseButton": "Закрыть",
"All": "Все",
"Files": "Файлы",
"EmptyRecycleBin": "Очистить корзину",
"Folder": "Папка",
"ClearButton": "Сбросить фильтр",
"SubheadingEmptyText": "Нет файлов для отображения в этом разделе",
"MyEmptyContainerDescription": "Документы и файлы изображений, которые вы создаете или загружаете на портал, хранятся здесь, в разделе «Мои документы». Вы можете открывать и редактировать их с помощью редактора портала ONLYOFFICE ™, делиться ими с друзьями или коллегами, организовывать в папки. Перетащите файлы со своего компьютера сюда, чтобы загрузить их на свой портал еще проще.",
"SharedEmptyContainerDescription": "Раздел «Доступно для меня» используется для отображения файлов, к которым ваши друзья или коллеги предоставили вам доступ. Если вы не видели последние изменения в документах, они помечаются как «новые». Вы можете удалить файлы из списка, нажав соответствующую кнопку.",
"CommonEmptyContainerDescription": "В разделе «Общие документы» отображаются все документы, которыми администратор портала предоставил общий доступ. Только администраторы портала могут создавать папки в этом разделе, но с предоставленным доступом пользователи портала также могут загружать свои файлы здесь. Перетащите файлы со своего компьютера сюда, чтобы загрузить их на свой портал еще проще.",
"TrashEmptyContainerDescription": "В разделе «Корзина» находятся все удаленные файлы. Вы можете восстановить их, если они были удалены по ошибке, или удалить их навсегда. Обратите внимание, что когда вы удаляете файлы из корзины, они больше не могут быть восстановлены.",
"GoToMyButton": "Перейти к моим документам",
"BackToParentFolderButton": "Вернуться в папку на уровень выше",
"EmptyFolderHeader": "В этой папке нет файлов",
"EmptyFilterSubheadingText": "Здесь нет файлов, соответствующих этому фильтру",
"EmptyFilterDescriptionText": "В этом разделе нет файлов или папок, соответствующих фильтру. Пожалуйста, выберите другие параметры или очистите фильтр, чтобы показать все файлы в этом разделе. Вы можете также поискать нужный файл в других разделах.",
"Filter": "Фильтр"
}

View File

@ -13,18 +13,19 @@ import {
} from "asc-web-components";
import { constants, api, toastr, store as initStore } from "asc-web-common";
import {
clearProgressData,
clearSecondaryProgressData,
createFile,
createFolder,
fetchFiles,
renameFolder,
setIsLoading,
setNewRowItems,
setProgressBarData,
setSecondaryProgressBarData,
setTreeFolders,
setUpdateTree,
updateFile,
} from "../../../../../store/files/actions";
import { TIMEOUT } from "../../../../../helpers/constants";
import {
canConvert,
canWebEdit,
@ -357,33 +358,48 @@ class FilesRowContent extends React.PureComponent {
selectedFolder,
filter,
setIsLoading,
setProgressBarData,
setSecondaryProgressBarData,
t,
clearProgressData,
clearSecondaryProgressData,
fetchFiles,
} = this.props;
api.files.getConvertFile(fileId).then((res) => {
api.files.getFileConversationProgress(fileId).then((res) => {
if (res && res[0] && res[0].progress !== 100) {
setProgressBarData({
setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: res[0].progress,
label: t("Convert"),
alert: false,
});
setTimeout(() => this.getConvertProgress(fileId), 1000);
} else {
if (res[0].error) {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
toastr.error(res[0].error);
clearProgressData();
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
} else {
setProgressBarData({
setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: 100,
label: t("Convert"),
alert: false,
});
setTimeout(() => clearProgressData(), 5000);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
const newFilter = filter.clone();
fetchFiles(selectedFolder.id, newFilter)
.catch((err) => toastr.error(err))
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
})
.finally(() => setIsLoading(false));
}
}
@ -391,8 +407,14 @@ class FilesRowContent extends React.PureComponent {
};
onConvert = () => {
const { item, t, setProgressBarData } = this.props;
setProgressBarData({ visible: true, percent: 0, label: t("Convert") });
const { item, t, setSecondaryProgressBarData } = this.props;
setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: 0,
label: t("Convert"),
alert: false,
});
this.setState({ showConvertDialog: false }, () =>
api.files.convertFile(item.id).then((convertRes) => {
if (convertRes && convertRes[0] && convertRes[0].progress !== 100) {
@ -509,7 +531,7 @@ class FilesRowContent extends React.PureComponent {
>
{fileExst}
</Text>
{canConvert && !isTrashFolder && (
{/* TODO: Uncomment after fix conversation {canConvert && !isTrashFolder && (
<IconButton
onClick={this.setConvertDialogVisible}
iconName="FileActionsConvertIcon"
@ -519,7 +541,7 @@ class FilesRowContent extends React.PureComponent {
color="#A3A9AE"
hoverColor="#3B72A7"
/>
)}
)} */}
{canWebEdit && !isTrashFolder && (
<IconButton
onClick={this.onFilesClick}
@ -683,10 +705,10 @@ export default connect(mapStateToProps, {
updateFile,
renameFolder,
setTreeFolders,
setProgressBarData,
setSecondaryProgressBarData,
setUpdateTree,
setNewRowItems,
setIsLoading,
clearProgressData,
clearSecondaryProgressData,
fetchFiles,
})(withRouter(withTranslation()(FilesRowContent)));

View File

@ -1,7 +1,7 @@
import { Checkbox, ContextMenuButton } from "asc-web-components";
import PropTypes from "prop-types";
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import styled, { css } from "styled-components";
import BadgesFileTile from "./BadgesFileTile";
@ -111,7 +111,7 @@ class Tile extends React.Component {
if (this.props.needForUpdate) {
return this.props.needForUpdate(this.props, nextProps);
}
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -3,7 +3,7 @@ import { withRouter } from "react-router";
import { connect } from "react-redux";
import { ReactSVG } from "react-svg";
import { withTranslation, Trans } from "react-i18next";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import copy from "copy-to-clipboard";
import styled from "styled-components";
import queryString from "query-string";
@ -31,7 +31,7 @@ import {
store,
} from "asc-web-common";
import {
clearProgressData,
clearSecondaryProgressData,
loopFilesOperations,
markItemAsFavorite,
removeItemFromFavorite,
@ -46,13 +46,15 @@ import {
setIsLoading,
setMediaViewerData,
setUpdateTree,
setProgressBarData,
setSecondaryProgressBarData,
setSelected,
setSelection,
setTreeFolders,
getFileInfo,
addFileToRecentlyViewed,
setSharingPanelVisible,
} from "../../../../../store/files/actions";
import { TIMEOUT } from "../../../../../helpers/constants";
import {
getCurrentFolderCount,
getDragging,
@ -90,8 +92,9 @@ import {
getIsPrivacyFolder,
getPrivacyInstructionsLink,
getIconOfDraggedFile,
getSharePanelVisible,
} from "../../../../../store/files/selectors";
import { SharingPanel, OperationsPanel } from "../../../../panels";
import { OperationsPanel } from "../../../../panels";
const {
isAdmin,
getSettings,
@ -185,7 +188,6 @@ class SectionBodyContent extends React.Component {
this.state = {
editingId: null,
showSharingPanel: false,
showMoveToPanel: false,
showCopyPanel: false,
isDrag: false,
@ -254,7 +256,7 @@ class SectionBodyContent extends React.Component {
if (this.props && this.props.firstLoad) return true;
const { showMoveToPanel, showCopyPanel, isDrag } = this.state;
if (this.state.showSharingPanel !== nextState.showSharingPanel) {
if (this.props.sharingPanelVisible !== nextProps.sharingPanelVisible) {
return true;
}
@ -262,7 +264,7 @@ class SectionBodyContent extends React.Component {
return false;
}
if (!isEqual(this.props, nextProps)) {
if (!equal(this.props, nextProps)) {
return true;
}
@ -383,11 +385,17 @@ class SectionBodyContent extends React.Component {
};
onDeleteFile = (fileId, currentFolderId) => {
const { t, setProgressBarData, clearProgressData } = this.props;
setProgressBarData({
const {
t,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.props;
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 0,
label: t("DeleteOperation"),
alert: false,
});
api.files
.deleteFile(fileId)
@ -396,8 +404,12 @@ class SectionBodyContent extends React.Component {
this.loopDeleteProgress(id, currentFolderId, false);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
@ -408,24 +420,28 @@ class SectionBodyContent extends React.Component {
setTreeFolders,
isRecycleBin,
t,
setProgressBarData,
setSecondaryProgressBarData,
fetchFiles,
setUpdateTree,
} = this.props;
api.files.getProgress().then((res) => {
const deleteProgress = res.find((x) => x.id === id);
if (deleteProgress && deleteProgress.progress !== 100) {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: deleteProgress.progress,
label: t("DeleteOperation"),
alert: false,
});
setTimeout(() => this.loopDeleteProgress(id, folderId, isFolder), 1000);
} else {
setProgressBarData({
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 100,
label: t("DeleteOperation"),
alert: false,
});
fetchFiles(folderId, filter)
.then((data) => {
@ -443,20 +459,34 @@ class SectionBodyContent extends React.Component {
: toastr.success(`File moved to recycle bin`);
})
.catch((err) => {
toastr.error(err);
this.props.clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => this.props.clearSecondaryProgressData(), TIMEOUT);
})
.finally(() =>
setTimeout(() => this.props.clearProgressData(), 5000)
setTimeout(() => this.props.clearSecondaryProgressData(), TIMEOUT)
);
}
});
};
onDeleteFolder = (folderId, currentFolderId) => {
const { t, setProgressBarData, clearProgressData } = this.props;
const {
t,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.props;
const progressLabel = t("DeleteOperation");
setProgressBarData({ visible: true, percent: 0, label: progressLabel });
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 0,
label: progressLabel,
alert: false,
});
api.files
.deleteFolder(folderId, currentFolderId)
.then((res) => {
@ -464,13 +494,17 @@ class SectionBodyContent extends React.Component {
this.loopDeleteProgress(id, currentFolderId, true);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
onClickShare = () =>
this.setState({ showSharingPanel: !this.state.showSharingPanel });
this.props.setSharingPanelVisible(!this.props.sharingPanelVisible);
onClickLinkForPortal = () => {
const { settings, selection } = this.props;
@ -566,7 +600,12 @@ class SectionBodyContent extends React.Component {
onCopyAction = () =>
this.setState({ showCopyPanel: !this.state.showCopyPanel });
onDuplicate = () => {
const { selection, selectedFolderId, setProgressBarData, t } = this.props;
const {
selection,
selectedFolderId,
setSecondaryProgressBarData,
t,
} = this.props;
const folderIds = [];
const fileIds = [];
selection[0].fileExst
@ -575,10 +614,12 @@ class SectionBodyContent extends React.Component {
const conflictResolveType = 0; //Skip = 0, Overwrite = 1, Duplicate = 2
const deleteAfter = false;
setProgressBarData({
setSecondaryProgressBarData({
icon: "duplicate",
visible: true,
percent: 0,
label: t("CopyOperation"),
alert: false,
});
this.copyTo(
selectedFolderId,
@ -775,7 +816,7 @@ class SectionBodyContent extends React.Component {
if (currentProps.sectionWidth !== nextProps.sectionWidth) {
return true;
}
if (!isEqual(currentProps.data, nextProps.data)) {
if (!equal(currentProps.data, nextProps.data)) {
return true;
}
if (currentProps.viewAs !== nextProps.viewAs) {
@ -1325,17 +1366,19 @@ class SectionBodyContent extends React.Component {
isShare,
isCommon,
isAdmin,
setProgressBarData,
setSecondaryProgressBarData,
} = this.props;
const folderIds = [];
const fileIds = [];
const conflictResolveType = 0; //Skip = 0, Overwrite = 1, Duplicate = 2
const deleteAfter = true;
setProgressBarData({
setSecondaryProgressBarData({
icon: "move",
visible: true,
percent: 0,
label: t("MoveToOperation"),
alert: false,
});
for (let item of selection) {
if (item.fileExst) {
@ -1391,7 +1434,7 @@ class SectionBodyContent extends React.Component {
conflictResolveType,
deleteAfter
) => {
const { loopFilesOperations, clearProgressData } = this.props;
const { loopFilesOperations, clearSecondaryProgressData } = this.props;
api.files
.copyToFolder(
@ -1406,8 +1449,12 @@ class SectionBodyContent extends React.Component {
loopFilesOperations(id, destFolderId, true);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
@ -1418,7 +1465,7 @@ class SectionBodyContent extends React.Component {
conflictResolveType,
deleteAfter
) => {
const { loopFilesOperations, clearProgressData } = this.props;
const { loopFilesOperations, clearSecondaryProgressData } = this.props;
api.files
.moveToFolder(
@ -1433,8 +1480,12 @@ class SectionBodyContent extends React.Component {
loopFilesOperations(id, destFolderId, false);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
@ -1516,7 +1567,7 @@ class SectionBodyContent extends React.Component {
};
render() {
console.log("Files Home SectionBodyContent render", this.props);
//console.log("Files Home SectionBodyContent render", this.props);
const {
viewer,
@ -1545,12 +1596,7 @@ class SectionBodyContent extends React.Component {
} = this.props;
console.log("Files Home SectionBodyContent render", this.props);
const {
editingId,
showSharingPanel,
showMoveToPanel,
showCopyPanel,
} = this.state;
const { editingId, showMoveToPanel, showCopyPanel } = this.state;
const operationsPanelProps = {
setIsLoading,
@ -1707,7 +1753,11 @@ class SectionBodyContent extends React.Component {
) : (
<Consumer>
{(context) => (
<RowContainer draggable useReactWindow={false}>
<RowContainer
className="files-row-container"
draggable
useReactWindow={false}
>
{items.map((item) => {
const { checked, isFolder, value, contextOptions } = item;
const sectionWidth = context.sectionWidth;
@ -1810,12 +1860,6 @@ class SectionBodyContent extends React.Component {
extsImagePreviewed={mediaViewerImageFormats} //TODO
/>
)}
{showSharingPanel && (
<SharingPanel
onClose={this.onClickShare}
visible={showSharingPanel}
/>
)}
</>
);
}
@ -1865,6 +1909,7 @@ const mapStateToProps = (state) => {
viewer: getCurrentUser(state),
tooltipValue: getTooltipLabel(state),
iconOfDraggedFile: getIconOfDraggedFile(state)(state),
sharingPanelVisible: getSharePanelVisible(state),
};
};
@ -1878,16 +1923,17 @@ export default connect(mapStateToProps, {
setDragging,
setDragItem,
setMediaViewerData,
setProgressBarData,
setSecondaryProgressBarData,
setSelection,
setSelected,
setUpdateTree,
setIsLoading,
clearProgressData,
clearSecondaryProgressData,
markItemAsFavorite,
removeItemFromFavorite,
fetchFavoritesFolder,
getFileInfo,
addFileToRecentlyViewed,
loopFilesOperations,
setSharingPanelVisible,
})(withRouter(withTranslation()(SectionBodyContent)));

View File

@ -17,7 +17,7 @@ import result from "lodash/result";
import { withTranslation } from "react-i18next";
import { withRouter } from "react-router";
import { constants, FilterInput, store, Loaders, utils } from "asc-web-common";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { isMobileOnly } from "react-device-detect";
const { withLayoutSize } = utils;
@ -285,7 +285,7 @@ class SectionFilterContent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
return (
!isEqual(this.props.filter, nextProps.filter) ||
!equal(this.props.filter, nextProps.filter) ||
this.props.selectedFolderId !== nextProps.selectedFolderId ||
this.state.isReady !== nextState.isReady ||
this.props.viewAs !== nextProps.viewAs ||
@ -295,7 +295,7 @@ class SectionFilterContent extends React.Component {
}
render() {
console.log("Filter render");
//console.log("Filter render");
const selectedFilterData = this.getSelectedFilterData();
const { t, language, firstLoad, sectionWidth } = this.props;
const filterColumnCount =

View File

@ -22,17 +22,19 @@ import {
import {
fetchFiles,
setAction,
setProgressBarData,
clearProgressData,
setSecondaryProgressBarData,
clearSecondaryProgressData,
setIsLoading,
setSelected,
setSharingPanelVisible,
} from "../../../../../store/files/actions";
import { TIMEOUT } from "../../../../../helpers/constants";
import {
EmptyTrashDialog,
DeleteDialog,
DownloadDialog,
} from "../../../../dialogs";
import { SharingPanel, OperationsPanel } from "../../../../panels";
import { OperationsPanel } from "../../../../panels";
import {
isCanBeDeleted,
getIsRecycleBinFolder,
@ -48,6 +50,8 @@ import {
getHeaderChecked,
getOnlyFoldersSelected,
getAccessedSelected,
getSelectionLength,
getSharePanelVisible,
} from "../../../../../store/files/selectors";
const { isAdmin } = store.auth.selectors;
@ -56,21 +60,27 @@ const { tablet, desktop } = utils.device;
const { Consumer } = utils.context;
const StyledContainer = styled.div`
@media ${desktop} {
${(props) =>
props.isHeaderVisible &&
css`
width: calc(100% + 76px);
`}
}
.header-container {
position: relative;
display: flex;
display: grid;
grid-template-columns: ${(props) =>
props.isRootFolder
? "auto auto 1fr"
: props.canCreate
? "auto auto auto auto 1fr"
: "auto auto auto 1fr"};
align-items: center;
max-width: calc(100vw - 32px);
@media ${tablet} {
grid-template-columns: ${(props) =>
props.isRootFolder
? "1fr auto"
: props.canCreate
? "auto 1fr auto auto"
: "auto 1fr auto"};
.headline-header {
margin-left: -1px;
}
@ -159,7 +169,6 @@ class SectionHeaderContent extends React.Component {
super(props);
this.state = {
showSharingPanel: false,
showDeleteDialog: false,
showDownloadDialog: false,
showEmptyTrashDialog: false,
@ -242,25 +251,36 @@ class SectionHeaderContent extends React.Component {
.getProgress()
.then((res) => {
if (!url) {
this.props.setProgressBarData({
this.props.setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: res[0].progress,
label: this.props.t("ArchivingData"),
alert: false,
});
setTimeout(() => this.loop(res[0].url), 1000);
} else {
setTimeout(() => this.props.clearProgressData(), 5000);
setTimeout(() => this.props.clearSecondaryProgressData(), TIMEOUT);
return window.open(url, "_blank");
}
})
.catch((err) => {
toastr.error(err);
this.props.clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => this.props.clearSecondaryProgressData(), TIMEOUT);
});
};
downloadAction = () => {
const { t, selection, setProgressBarData, clearProgressData } = this.props;
const {
t,
selection,
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.props;
const fileIds = [];
const folderIds = [];
const items = [];
@ -275,10 +295,12 @@ class SectionHeaderContent extends React.Component {
}
}
setProgressBarData({
setSecondaryProgressBarData({
icon: "file",
visible: true,
percent: 0,
label: t("ArchivingData"),
alert: false,
});
api.files
@ -287,8 +309,12 @@ class SectionHeaderContent extends React.Component {
this.loop(res[0].url);
})
.catch((err) => {
toastr.error(err);
clearProgressData();
setSecondaryProgressBarData({
visible: true,
alert: true,
});
//toastr.error(err);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
@ -298,7 +324,7 @@ class SectionHeaderContent extends React.Component {
renameAction = () => toastr.info("renameAction click");
onOpenSharingPanel = () =>
this.setState({ showSharingPanel: !this.state.showSharingPanel });
this.props.setSharingPanelVisible(!this.props.sharingPanelVisible);
onDeleteAction = () =>
this.setState({ showDeleteDialog: !this.state.showDeleteDialog });
@ -501,7 +527,6 @@ class SectionHeaderContent extends React.Component {
const {
showDeleteDialog,
showSharingPanel,
showEmptyTrashDialog,
showDownloadDialog,
showMoveToPanel,
@ -514,8 +539,9 @@ class SectionHeaderContent extends React.Component {
<Consumer>
{(context) => (
<StyledContainer
isHeaderVisible={isHeaderVisible}
width={context.sectionWidth}
isRootFolder={isRootFolder}
canCreate={canCreate}
>
{isHeaderVisible ? (
<div className="group-button-menu-container">
@ -617,13 +643,6 @@ class SectionHeaderContent extends React.Component {
/>
)}
{showSharingPanel && (
<SharingPanel
onClose={this.onOpenSharingPanel}
visible={showSharingPanel}
/>
)}
{showMoveToPanel && (
<OperationsPanel
isCopy={false}
@ -655,14 +674,12 @@ class SectionHeaderContent extends React.Component {
}
const mapStateToProps = (state) => {
const selection = getSelection(state);
return {
isRootFolder: getIsRootFolder(state),
isAdmin: isAdmin(state),
isRecycleBin: getIsRecycleBinFolder(state),
parentId: getSelectedFolderParentId(state),
selection,
selection: getSelection(state),
title: getSelectedFolderTitle(state),
filter: getFilter(state),
deleteDialogVisible: isCanBeDeleted(state),
@ -673,15 +690,17 @@ const mapStateToProps = (state) => {
isHeaderChecked: getHeaderChecked(state),
isAccessedSelected: getAccessedSelected(state),
isOnlyFoldersSelected: getOnlyFoldersSelected(state),
isItemsSelected: selection.length,
isItemsSelected: getSelectionLength(state),
sharingPanelVisible: getSharePanelVisible(state),
};
};
export default connect(mapStateToProps, {
setAction,
setProgressBarData,
setSecondaryProgressBarData,
setIsLoading,
clearProgressData,
clearSecondaryProgressData,
fetchFiles,
setSelected,
setSharingPanelVisible,
})(withTranslation()(withRouter(SectionHeaderContent)));

View File

@ -31,17 +31,20 @@ import {
getSelectedFolderId,
getFileActionId,
getFilter,
getProgressData,
getPrimaryProgressData,
getSecondaryProgressData,
getTreeFolders,
getViewAs,
getIsLoading,
getIsRecycleBinFolder,
getDragging,
getHeaderVisible,
getSharePanelVisible,
getFirstLoad,
} from "../../../store/files/selectors";
import { ConvertDialog } from "../../dialogs";
import { SharingPanel } from "../../panels";
import { createI18N } from "../../../helpers/i18n";
import { getFilterByLocation } from "../../../helpers/converters";
const i18n = createI18N({
@ -50,7 +53,7 @@ const i18n = createI18N({
});
const { changeLanguage } = utils;
const { FilesFilter } = api;
const { getSettingsHomepage, getIsLoaded } = store.auth.selectors;
const { getSettingsHomepage } = store.auth.selectors;
const { setHeaderVisible } = store.auth.actions;
class PureHome extends React.Component {
componentDidMount() {
@ -140,7 +143,7 @@ class PureHome extends React.Component {
if (filter) {
const folderId = filter.folder;
console.log("filter", filter);
//console.log("filter", filter);
return fetchFiles(folderId, filter);
}
@ -181,14 +184,16 @@ class PureHome extends React.Component {
}
render() {
console.log("Home render");
//console.log("Home render");
const {
progressData,
primaryProgressData,
secondaryProgressData,
viewAs,
convertDialogVisible,
sharingPanelVisible,
fileActionId,
isRecycleBin,
isLoaded,
firstLoad,
isHeaderVisible,
} = this.props;
@ -197,6 +202,8 @@ class PureHome extends React.Component {
{convertDialogVisible && (
<ConvertDialog visible={convertDialogVisible} />
)}
{sharingPanelVisible && <SharingPanel />}
<PageLayout
withBodyScroll
withBodyAutoFocus={!isMobile}
@ -204,13 +211,21 @@ class PureHome extends React.Component {
onDrop={this.onDrop}
setSelections={this.props.setSelections}
onMouseMove={this.onMouseMove}
showProgressBar={progressData.visible}
progressBarValue={progressData.percent}
//progressBarDropDownContent={progressBarContent}
progressBarLabel={progressData.label}
showPrimaryProgressBar={primaryProgressData.visible}
primaryProgressBarValue={primaryProgressData.percent}
primaryProgressBarIcon={primaryProgressData.icon}
showPrimaryButtonAlert={primaryProgressData.alert}
showSecondaryProgressBar={secondaryProgressData.visible}
secondaryProgressBarValue={secondaryProgressData.percent}
secondaryProgressBarIcon={secondaryProgressData.icon}
showSecondaryButtonAlert={secondaryProgressData.alert}
viewAs={viewAs}
hideAside={!!fileActionId || progressData.visible}
isLoaded={isLoaded}
hideAside={
!!fileActionId ||
primaryProgressData.visible ||
secondaryProgressData.visible
}
isLoaded={!firstLoad}
isHeaderVisible={isHeaderVisible}
>
<PageLayout.ArticleHeader>
@ -273,13 +288,15 @@ function mapStateToProps(state) {
fileActionId: getFileActionId(state),
filter: getFilter(state),
isRecycleBin: getIsRecycleBinFolder(state),
progressData: getProgressData(state),
primaryProgressData: getPrimaryProgressData(state),
secondaryProgressData: getSecondaryProgressData(state),
treeFolders: getTreeFolders(state),
viewAs: getViewAs(state),
isLoading: getIsLoading(state),
homepage: getSettingsHomepage(state),
dragging: getDragging(state),
isLoaded: getIsLoaded(state),
firstLoad: getFirstLoad(state),
sharingPanelVisible: getSharePanelVisible(state),
firstLoad: getFirstLoad(state),
isHeaderVisible: getHeaderVisible(state),
};

View File

@ -10,7 +10,8 @@ const { tablet, desktop } = utils.device;
const { getSettings } = store.auth.selectors;
const StyledContainer = styled.div`
display: flex;
display: grid;
grid-template-columns: auto 1fr auto auto;
align-items: center;
.arrow-button {
@ -24,14 +25,6 @@ const StyledContainer = styled.div`
}
}
@media ${desktop} {
${(props) =>
props.isHeaderVisible &&
css`
width: calc(100% + 76px);
`}
}
.group-button-menu-container {
margin: 0 -16px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
@ -85,7 +78,7 @@ const SectionHeaderContent = (props) => {
};
return (
<StyledContainer isHeaderVisible={true}>
<StyledContainer>
<IconButton
iconName="ArrowPathIcon"
size="17"

View File

@ -140,6 +140,7 @@ class EmbeddingPanelComponent extends React.Component {
size="16"
iconName="ArrowPathIcon"
onClick={this.onArrowClick}
color="#A3A9AE"
/>
<Heading
className="header_aside-panel-header"
@ -150,61 +151,65 @@ class EmbeddingPanelComponent extends React.Component {
</Heading>
</StyledHeaderContent>
<StyledBody size={size}>
<Text className="embedding-panel_text">{t("Size")}:</Text>
<div className="embedding-panel_links-container">
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeMiddle}
>
600 x 800 px
</Link>
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeSmall}
>
400 x 600 px
</Link>
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeAuto}
>
{t("Auto")}
</Link>
</div>
<div className="embedding-panel_inputs-container">
<div>
<Text className="embedding-panel_text">{t("Width")}:</Text>
<TextInput
className="embedding-panel_input"
value={widthValue}
onChange={this.onChangeWidth}
/>
<div className="embedding-panel_body">
<Text className="embedding-panel_text">{t("Size")}:</Text>
<div className="embedding-panel_links-container">
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeMiddle}
>
600 x 800 px
</Link>
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeSmall}
>
400 x 600 px
</Link>
<Link
isHovered
type="action"
className="embedding-panel_link"
onClick={this.onSelectSizeAuto}
>
{t("Auto")}
</Link>
</div>
<div>
<Text className="embedding-panel_text">{t("Height")}:</Text>
<TextInput
className="embedding-panel_input"
value={heightValue}
onChange={this.onChangeHeight}
/>
<div className="embedding-panel_inputs-container">
<div>
<Text className="embedding-panel_text">{t("Width")}:</Text>
<TextInput
className="embedding-panel_input"
value={widthValue}
onChange={this.onChangeWidth}
/>
</div>
<div>
<Text className="embedding-panel_text">{t("Height")}:</Text>
<TextInput
className="embedding-panel_input"
value={heightValue}
onChange={this.onChangeHeight}
/>
</div>
</div>
<div className="embedding-panel_code-container">
<Text className="embedding-panel_text">
{t("EmbedCode")}:
</Text>
<IconButton
className="embedding-panel_copy-icon"
size="16"
iconName="CopyIcon"
color="#333"
onClick={this.onCopyLink}
/>
<Textarea color="#AEAEAE" isReadOnly value={link} />
</div>
</div>
<div>
<Text className="embedding-panel_text">{t("EmbedCode")}:</Text>
<IconButton
className="embedding-panel_copy-icon"
size="16"
iconName="CopyIcon"
color="#333"
onClick={this.onCopyLink}
/>
<Textarea isReadOnly value={link} />
</div>
</StyledBody>
</StyledContent>

View File

@ -236,13 +236,17 @@ class NewFilesPanelComponent extends React.Component {
<Backdrop onClick={onClose} visible={visible} zIndex={zIndex} />
<Aside className="header_aside-panel" visible={visible}>
<StyledContent>
<StyledHeaderContent className="files-operations-panel">
<Heading size="medium" truncate>
<StyledHeaderContent>
<Heading
className="files-operations-header"
size="medium"
truncate
>
{t("NewFiles")}
</Heading>
</StyledHeaderContent>
<StyledBody className="files-operations-body">
<RowContainer useReactWindow manualHeight="83vh">
<RowContainer useReactWindow manualHeight="87vh">
{files.map((file) => {
const element = this.getItemIcon(file);
return (

View File

@ -8,8 +8,8 @@ import { utils as commonUtils, toastr } from "asc-web-common";
import { StyledAsidePanel } from "../StyledPanels";
import TreeFolders from "../../Article/Body/TreeFolders";
import {
setProgressBarData,
itemOperationToFolder
setSecondaryProgressBarData,
itemOperationToFolder,
} from "../../../store/files/actions";
import {
getFilter,
@ -39,10 +39,10 @@ class OperationsPanelComponent extends React.Component {
t,
isCopy,
selection,
setProgressBarData,
setSecondaryProgressBarData,
currentFolderId,
onClose,
itemOperationToFolder
itemOperationToFolder,
} = this.props;
const destFolderId = Number(e);
@ -53,8 +53,7 @@ class OperationsPanelComponent extends React.Component {
if (currentFolderId === destFolderId) {
return onClose();
}
else {
} else {
for (let item of selection) {
if (item.fileExst) {
fileIds.push(item.id);
@ -65,12 +64,21 @@ class OperationsPanelComponent extends React.Component {
}
}
onClose();
setProgressBarData({
setSecondaryProgressBarData({
icon: isCopy ? "duplicate" : "move",
visible: true,
percent: 0,
label: isCopy ? t("CopyOperation") : t("MoveToOperation"),
alert: false,
});
itemOperationToFolder(destFolderId, folderIds, fileIds, conflictResolveType, deleteAfter, isCopy)
itemOperationToFolder(
destFolderId,
folderIds,
fileIds,
conflictResolveType,
deleteAfter,
isCopy
);
}
};
@ -83,7 +91,7 @@ class OperationsPanelComponent extends React.Component {
isRecycleBin,
visible,
onClose,
operationsFolders
operationsFolders,
} = this.props;
const zIndex = 310;
const expandedKeys = this.props.expandedKeys.map((item) => item.toString());
@ -134,11 +142,11 @@ const mapStateToProps = (state) => {
expandedKeys: getPathParts(state),
currentFolderId: getSelectedFolderId(state),
isRecycleBin: getIsRecycleBinFolder(state),
operationsFolders: getOperationsFolders(state)
operationsFolders: getOperationsFolders(state),
};
};
export default connect(mapStateToProps, {
setProgressBarData,
itemOperationToFolder
setSecondaryProgressBarData,
itemOperationToFolder,
})(withRouter(OperationsPanel));

View File

@ -6,10 +6,10 @@ import {
Text,
Icons,
DropDownItem,
LinkWithDropdown,
} from "asc-web-components";
import { toastr } from "asc-web-common";
import copy from "copy-to-clipboard";
import LinkRow from "./linkRow";
const SharingRow = (props) => {
const {
@ -25,12 +25,14 @@ const SharingRow = (props) => {
onCommentClick,
onFormFillingClick,
onDenyAccessClick,
onFilterEditingClick,
onRemoveUserClick,
onShowEmbeddingPanel,
onToggleLink,
externalLinkData,
} = props;
const linkVisible = selection && selection.length === 1 && item.shareLink;
const onCopyInternalLink = () => {
const internalLink = selection.webUrl
? selection.webUrl
@ -39,7 +41,7 @@ const SharingRow = (props) => {
toastr.success(t("LinkCopySuccess"));
};
const advancedOptionsRender = () => (
const advancedOptionsRender = (accessOptions) => (
<>
{accessOptions.includes("FullAccess") && (
<DropDownItem
@ -87,19 +89,31 @@ const SharingRow = (props) => {
onClick={() => onDenyAccessClick(item)}
/>
)}
{accessOptions.includes("FilterEditing") && (
<DropDownItem
label="Custom filter"
icon="CustomFilterIcon"
onClick={() => onFilterEditingClick(item)}
/>
)}
</>
);
const embeddedComponentRender = () => (
const embeddedComponentRender = (
accessOptions = this.props.accessOptions,
item,
isDisabled
) => (
<ComboBox
advancedOptions={advancedOptionsRender()}
advancedOptions={advancedOptionsRender(accessOptions)}
options={[]}
selectedOption={{ key: 0 }}
size="content"
className="panel_combo-box"
scaled={false}
directionX="left"
//isDisabled={isDisabled}
disableIconClick={false}
isDisabled={isDisabled}
>
{React.createElement(Icons[item.rights.icon], {
size: "medium",
@ -127,51 +141,6 @@ const SharingRow = (props) => {
const onShareFacebook = () => window.open(`https://www.facebook.com`);
/*window.open(`https://www.facebook.com/dialog/feed?app_id=645528132139019&display=popup&link=${item.shareLink}`);*/
const options = [
{
key: 1,
label: "Disabled",
disabled: false,
onClick: () => console.log("Disabled"),
},
{
key: 2,
label: "1 hour",
disabled: false,
onClick: () => console.log("1 hour"),
},
{
key: 3,
label: "1 day",
disabled: false,
onClick: () => console.log("1 day"),
},
{
key: 4,
label: "1 week",
disabled: false,
onClick: () => console.log("1 week"),
},
{
key: 5,
label: "1 month",
disabled: false,
onClick: () => console.log("1 month"),
},
{
key: 6,
label: "1 year",
disabled: false,
onClick: () => console.log("1 year"),
},
{
key: 7,
label: "Timeless",
disabled: false,
onClick: () => console.log("Timeless"),
},
];
const internalLinkData = [
{
key: "linkItem",
@ -180,7 +149,7 @@ const SharingRow = (props) => {
},
];
const externalLinkData = [
const externalLinkOptions = [
{
key: "linkItem_0",
label: t("CopyExternalLink"),
@ -221,54 +190,32 @@ const SharingRow = (props) => {
},
];
const linksFunction = (linkText, data) => (
<Row
key={`${linkText}-key_${index}`}
//element={embeddedComponentRender(accessOptions, item)}
element={
<Icons.AccessEditIcon
size="medium"
className="sharing_panel-owner-icon"
/>
}
contextButtonSpacerWidth="0px"
>
<>
<LinkWithDropdown
className="sharing_panel-link"
color="black"
dropdownType="alwaysDashed"
data={data}
fontSize="14px"
fontWeight={600}
>
{t(linkText)}
</LinkWithDropdown>
{/*
<ComboBox
className="sharing_panel-link-combo-box"
options={options}
isDisabled={false}
selectedOption={options[0]}
dropDownMaxHeight={200}
noBorder={false}
scaled={false}
scaledOptions
size="content"
onSelect={(option) => console.log("selected", option)}
/>
*/}
</>
</Row>
);
//console.log("SharingRow render");
return (
<>
{linkVisible && linksFunction("ExternalLink", externalLinkData)}
{linkVisible && linksFunction("InternalLink", internalLinkData)}
{linkVisible && (
<>
<LinkRow
linkText="ExternalLink"
options={externalLinkOptions}
externalLinkData={externalLinkData}
embeddedComponentRender={embeddedComponentRender}
onToggleLink={onToggleLink}
withToggle={true}
{...props}
/>
<LinkRow
linkText="InternalLink"
options={internalLinkData}
embeddedComponentRender={embeddedComponentRender}
{...props}
/>
</>
)}
{!item.shareLink && (
<Row
className="sharing-row"
key={`internal-link-key_${index}`}
element={
item.rights.isOwner || item.id === isMyId ? (
@ -293,10 +240,7 @@ const SharingRow = (props) => {
</Text>
)}
{item.rights.isOwner ? (
<Text
className="sharing_panel-remove-icon"
color="#A3A9AE"
>
<Text className="sharing_panel-remove-icon" color="#A3A9AE">
{t("Owner")}
</Text>
) : item.id === isMyId ? (

View File

@ -1,5 +1,4 @@
import React from "react";
import PropTypes from "prop-types";
import {
Backdrop,
Heading,
@ -17,13 +16,22 @@ import { connect } from "react-redux";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { utils as commonUtils, constants, toastr, store } from "asc-web-common";
import { getShareUsers, setShareFiles } from "../../../store/files/actions";
import { getAccessOption, getSelection } from "../../../store/files/selectors";
import {
getShareUsers,
setShareFiles,
setSharingPanelVisible,
} from "../../../store/files/actions";
import {
getAccessOption,
getExternalAccessOption,
getSelection,
getSharePanelVisible,
} from "../../../store/files/selectors";
import {
StyledAsidePanel,
StyledContent,
StyledFooter,
StyledSharingHeaderContent,
StyledHeaderContent,
StyledSharingBody,
} from "../StyledPanels";
import { AddUsersPanel, AddGroupsPanel, EmbeddingPanel } from "../index";
@ -33,7 +41,6 @@ const i18n = createI18N({
page: "SharingPanel",
localesPath: "panels/SharingPanel",
});
const { changeLanguage } = commonUtils;
const { ShareAccessRights } = constants;
const {
@ -41,6 +48,8 @@ const {
getSettingsCustomNamesGroupsCaption,
} = store.auth.selectors;
const SharingBodyStyle = { height: `calc(100vh - 156px)` };
class SharingPanelComponent extends React.Component {
constructor(props) {
super(props);
@ -79,7 +88,20 @@ class SharingPanelComponent extends React.Component {
this.setState({ showActionPanel: !this.state.showActionPanel });
};
//onKeyClick = () => console.log("onKeyClick");
onToggleLink = (item) => {
const { shareDataItems } = this.state;
const rights =
item.rights.accessNumber !== ShareAccessRights.DenyAccess
? this.getItemAccess(ShareAccessRights.DenyAccess)
: this.getItemAccess(ShareAccessRights.ReadOnly);
const newDataItems = JSON.parse(JSON.stringify(shareDataItems));
newDataItems[0].rights = { ...rights };
this.setState({
shareDataItems: newDataItems,
});
};
onSaveClick = () => {
const {
@ -88,20 +110,31 @@ class SharingPanelComponent extends React.Component {
message,
shareDataItems,
} = this.state;
const { selectedItems, onClose } = this.props;
const { selectedItems } = this.props;
const folderIds = [];
const fileIds = [];
const share = [];
let externalAccess = null;
for (let item of shareDataItems) {
const baseItem = baseShareData.find((x) => x.id === item.id);
if (
(baseItem && baseItem.rights.rights !== item.rights.rights) ||
(baseItem &&
baseItem.rights.rights !== item.rights.rights &&
!item.shareLink) ||
!baseItem
) {
share.push({ shareTo: item.id, access: item.rights.accessNumber });
}
if (
item.shareLink &&
item.rights.accessNumber !== baseItem.rights.accessNumber
) {
externalAccess = item.rights.accessNumber;
}
}
for (let item of baseShareData) {
@ -119,9 +152,16 @@ class SharingPanelComponent extends React.Component {
}
}
setShareFiles(folderIds, fileIds, share, isNotifyUsers, message)
setShareFiles(
folderIds,
fileIds,
share,
isNotifyUsers,
message,
externalAccess
)
.catch((err) => toastr.error(err))
.finally(() => onClose());
.finally(() => this.onClose());
};
onFullAccessClick = () => {
@ -190,6 +230,17 @@ class SharingPanelComponent extends React.Component {
});
};
onFilterEditingClick = () => {
this.setState({
accessRight: {
icon: "CustomFilterIcon",
rights: "CustomFilter",
accessNumber: ShareAccessRights.CustomFilter,
isOwner: false,
},
});
};
onNotifyUsersChange = () =>
this.setState({ isNotifyUsers: !this.state.isNotifyUsers });
@ -259,6 +310,18 @@ class SharingPanelComponent extends React.Component {
this.setState({ shareDataItems: newUsers });
}
};
onFilterEditingItemClick = (item) => {
const newUsers = this.state.shareDataItems;
const elementIndex = newUsers.findIndex((x) => x.id === item.id);
if (newUsers[elementIndex].rights.rights !== "CustomFilter") {
newUsers[elementIndex].rights = {
icon: "CustomFilterIcon",
rights: "CustomFilter",
accessNumber: ShareAccessRights.CustomFilter,
};
this.setState({ shareDataItems: newUsers });
}
};
onDenyAccessItemClick = (item) => {
const newUsers = this.state.shareDataItems;
const elementIndex = newUsers.findIndex((x) => x.id === item.id);
@ -282,17 +345,14 @@ class SharingPanelComponent extends React.Component {
}
};
getItemAccess = (item) => {
getItemAccess = (accessType, isOwner = false) => {
const fullAccessRights = {
icon: "AccessEditIcon",
rights: "FullAccess",
accessNumber: ShareAccessRights.FullAccess,
isOwner: item.isOwner,
isOwner: isOwner,
};
if (item.sharedTo.shareLink) {
return fullAccessRights;
}
switch (item.access) {
switch (accessType) {
case 1:
return fullAccessRights;
case 2:
@ -330,19 +390,31 @@ class SharingPanelComponent extends React.Component {
accessNumber: ShareAccessRights.FormFilling,
isOwner: false,
};
case 8:
return {
icon: "CustomFilterIcon",
rights: "CustomFilter",
accessNumber: ShareAccessRights.CustomFilter,
isOwner: false,
};
default:
return;
}
};
getShareDataItems = (items) => {
const {
getAccessOption,
getExternalAccessOption,
selectedItems,
} = this.props;
let arrayItems = [];
const newItems = [];
let stash = [];
for (let array of items) {
for (let item of array) {
const rights = this.getItemAccess(item);
const rights = this.getItemAccess(item.access, item.isOwner);
if (rights) {
item.sharedTo = { ...item.sharedTo, ...{ rights } };
@ -353,7 +425,6 @@ class SharingPanelComponent extends React.Component {
newItems.push(stash);
stash = [];
}
stash = null;
for (let item of arrayItems) {
let length = newItems.length;
@ -384,15 +455,25 @@ class SharingPanelComponent extends React.Component {
}
length--;
}
} else {
const externalLinkAccess = items[0][0].access;
item.access = externalLinkAccess;
item.rights = this.getItemAccess(externalLinkAccess);
}
}
arrayItems = this.removeDuplicateShareData(arrayItems);
const baseShareData = JSON.parse(JSON.stringify(arrayItems));
const accessOptions = getAccessOption(this.props.selectedItems);
const accessOptions = getAccessOption(selectedItems);
const externalAccessOptions = getExternalAccessOption(selectedItems);
return { baseShareData, shareDataItems: arrayItems, accessOptions };
return {
baseShareData,
shareDataItems: arrayItems,
accessOptions,
externalAccessOptions,
};
};
removeDuplicateShareData = (shareDataItems) => {
@ -461,7 +542,8 @@ class SharingPanelComponent extends React.Component {
setShareDataItems = (shareDataItems) => this.setState({ shareDataItems });
onClose = () => this.setState({ showPanel: false });
onClose = () =>
this.props.setSharingPanelVisible(!this.props.sharingPanelVisible);
componentDidMount() {
this.getShareData();
@ -481,7 +563,7 @@ class SharingPanelComponent extends React.Component {
} = this.state;
if (showAddUsersPanel || showEmbeddingPanel || showAddGroupsPanel) return;
if (event.key === "Esc" || event.key === "Escape") {
this.props.onClose();
this.onClose();
}
};
@ -490,7 +572,7 @@ class SharingPanelComponent extends React.Component {
this.state.showPanel !== prevState.showPanel &&
this.state.showPanel === false
) {
this.props.onClose();
this.onClose();
}
if (this.state.message === prevState.message) {
@ -513,6 +595,7 @@ class SharingPanelComponent extends React.Component {
shareLink,
showPanel,
accessOptions,
externalAccessOptions,
} = this.state;
const visible = showPanel;
@ -566,6 +649,13 @@ class SharingPanelComponent extends React.Component {
onClick={this.onDenyAccessClick}
/>
)}
{accessOptions.includes("FilterEditing") && (
<DropDownItem
label="Custom filter"
icon="CustomFilterIcon"
onClick={this.onFilterEditingClick}
/>
)}
</>
);
@ -578,6 +668,7 @@ class SharingPanelComponent extends React.Component {
className="panel_combo-box add-groups"
scaled={false}
directionX="right"
disableIconClick={false}
//isDisabled={isDisabled}
>
{React.createElement(Icons[accessRight.icon], {
@ -593,7 +684,7 @@ class SharingPanelComponent extends React.Component {
<Backdrop onClick={this.onClose} visible={visible} zIndex={zIndex} />
<Aside className="header_aside-panel" visible={visible}>
<StyledContent>
<StyledSharingHeaderContent>
<StyledHeaderContent>
<Heading className="sharing_panel-header" size="medium" truncate>
{t("SharingSettingsTitle")}
</Heading>
@ -631,12 +722,13 @@ class SharingPanelComponent extends React.Component {
onClick={this.onKeyClick}
/>*/}
</div>
</StyledSharingHeaderContent>
</StyledHeaderContent>
<StyledSharingBody
ref={this.scrollRef}
stype="mediumBlack"
style={{ height: `calc(100vh - 157px)` }}
style={SharingBodyStyle}
>
{" "}
{shareDataItems.map((item, index) => (
<SharingRow
key={index}
@ -646,14 +738,17 @@ class SharingPanelComponent extends React.Component {
index={index}
isMyId={isMyId}
accessOptions={accessOptions}
externalAccessOptions={externalAccessOptions}
onFullAccessClick={this.onFullAccessItemClick}
onReadOnlyClick={this.onReadOnlyItemClick}
onReviewClick={this.onReviewItemClick}
onCommentClick={this.onCommentItemClick}
onFormFillingClick={this.onFormFillingItemClick}
onFilterEditingClick={this.onFilterEditingItemClick}
onDenyAccessClick={this.onDenyAccessItemClick}
onRemoveUserClick={this.onRemoveUserItemClick}
onShowEmbeddingPanel={this.onShowEmbeddingPanel}
onToggleLink={this.onToggleLink}
/>
))}
{isNotifyUsers && (
@ -722,11 +817,6 @@ class SharingPanelComponent extends React.Component {
}
}
SharingPanelComponent.propTypes = {
onClose: PropTypes.func,
visible: PropTypes.bool,
};
const SharingPanelContainerTranslated = withTranslation()(
SharingPanelComponent
);
@ -737,10 +827,16 @@ const SharingPanel = (props) => (
const mapStateToProps = (state) => {
return {
getAccessOption: (selectedItems) => getAccessOption(state, selectedItems),
getExternalAccessOption: (selectedItems) =>
getExternalAccessOption(state, selectedItems),
isMyId: getCurrentUserId(state),
selectedItems: getSelection(state),
groupsCaption: getSettingsCustomNamesGroupsCaption(state),
sharingPanelVisible: getSharePanelVisible(state),
};
};
export default connect(mapStateToProps)(withRouter(SharingPanel));
export default connect(mapStateToProps, { setSharingPanelVisible })(
withRouter(SharingPanel)
);

View File

@ -0,0 +1,75 @@
import React from "react";
import { Row, LinkWithDropdown, ToggleButton, Icons } from "asc-web-components";
import { StyledLinkRow } from "../StyledPanels";
import { constants } from "asc-web-common";
const { ShareAccessRights } = constants;
class LinkRow extends React.Component {
onToggleButtonChange = () => {
const { onToggleLink, item } = this.props;
onToggleLink(item);
};
render() {
const {
linkText,
options,
index,
t,
embeddedComponentRender,
externalAccessOptions,
item,
withToggle,
} = this.props;
const isChecked = item.rights.accessNumber !== ShareAccessRights.DenyAccess;
const isDisabled = withToggle ? !isChecked : false;
return (
<StyledLinkRow withToggle={withToggle} isDisabled={isDisabled}>
<Row
className="link-row"
key={`${linkText}-key_${index}`}
element={
withToggle ? (
embeddedComponentRender(externalAccessOptions, item, isDisabled)
) : (
<Icons.AccessEditIcon
size="medium"
className="sharing_panel-owner-icon"
/>
)
}
contextButtonSpacerWidth="0px"
>
<>
<LinkWithDropdown
className="sharing_panel-link"
color="#333333"
dropdownType="alwaysDashed"
data={options}
fontSize="14px"
fontWeight={600}
isDisabled={isDisabled}
>
{t(linkText)}
</LinkWithDropdown>
{withToggle && (
<div>
<ToggleButton
isChecked={isChecked}
onChange={this.onToggleButtonChange}
/>
</div>
)}
</>
</Row>
</StyledLinkRow>
);
}
}
export default LinkRow;

View File

@ -25,6 +25,14 @@ const PanelStyles = css`
margin: 0;
}
}
.footer {
padding: 16px 0;
width: calc(100% - 32px);
margin: auto;
left: 0;
right: 0;
}
`;
const StyledAsidePanel = styled.div`
@ -32,6 +40,7 @@ const StyledAsidePanel = styled.div`
.sharing_panel-header {
font-weight: 700;
margin: 14px 0;
padding-right: 10px;
}
.modal-dialog-aside {
padding: 0;
@ -108,11 +117,6 @@ const StyledContent = styled.div`
position: relative;
width: 100%;
background-color: #fff;
padding: 0 16px;
.files-operations-panel {
border-bottom: 1px solid #dee2e6;
}
.header_aside-panel-header {
max-width: 500px;
@ -129,6 +133,34 @@ const StyledContent = styled.div`
const StyledHeaderContent = styled.div`
display: flex;
align-items: center;
padding: 0 16px;
display: flex;
align-items: center;
padding: 0 16px;
.sharing_panel-icons-container {
display: flex;
margin-left: auto;
.sharing_panel-drop-down-wrapper {
position: relative;
.sharing_panel-drop-down {
padding: 4px 0;
}
.sharing_panel-plus-icon {
//margin-right: 12px;
}
}
}
.files-operations-header,
.sharing_panel-header {
font-weight: 700;
margin: 14px 0;
}
`;
const StyledBody = styled.div`
@ -136,13 +168,19 @@ const StyledBody = styled.div`
padding: 0 16px;
}
.embedding-panel_body {
padding: 0 16px;
}
.selector-wrapper {
position: fixed;
height: 94%;
height: calc(100% - 57px);
width: 100%;
.column-options {
padding: 0 0 16px 0;
width: 470px;
padding: 0px 16px;
padding-bottom: 16px;
width: 100%;
.header-options {
.combo-button-label {
@ -164,20 +202,10 @@ const StyledBody = styled.div`
}
}
@media (max-width: 550px) {
width: 320px;
padding: 0 28px 16px 0;
}
.body-options {
width: 100%;
}
}
.footer {
@media (max-width: 550px) {
padding: 16px 28px 16px 0;
}
}
}
.embedding-panel_links-container {
@ -200,6 +228,10 @@ const StyledBody = styled.div`
}
}
.embedding-panel_code-container {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.embedding-panel_text {
padding: 8px 0 4px 0;
}
@ -212,36 +244,19 @@ const StyledBody = styled.div`
}
`;
const StyledSharingHeaderContent = styled.div`
display: flex;
align-items: center;
border-bottom: 1px solid #dee2e6;
.sharing_panel-icons-container {
display: flex;
margin-left: auto;
.sharing_panel-drop-down-wrapper {
position: relative;
.sharing_panel-drop-down {
padding: 4px 0;
}
.sharing_panel-plus-icon {
//margin-right: 12px;
}
}
}
`;
const StyledSharingBody = styled(Scrollbar)`
position: relative;
padding: 16px 0;
.row_content {
overflow: visible;
}
.sharing-row {
margin: 0 16px;
width: calc(100% - 16px);
box-sizing: border-box;
}
.nav-thumb-vertical {
opacity: 0;
transition: opacity 200ms ease;
@ -291,7 +306,7 @@ const StyledSharingBody = styled(Scrollbar)`
}
.sharing_panel-owner-icon {
padding-right: 12px;
padding-right: 19px;
}
.sharing_panel-remove-icon {
@ -326,6 +341,9 @@ const StyledSharingBody = styled(Scrollbar)`
position: fixed;
bottom: 70px;
width: 94%;
left: 0;
right: 0;
margin: auto;
}
`;
@ -335,8 +353,12 @@ const StyledFooter = styled.div`
bottom: 0;
padding: 16px 0;
width: calc(100% - 32px);
margin: auto;
left: 0;
right: 0;
background-color: #fff;
border-top: 1px solid #eceef1;
box-sizing: border-box;
.sharing_panel-checkbox {
span {
@ -350,11 +372,32 @@ const StyledFooter = styled.div`
.sharing_panel-button {
margin-left: auto;
padding: 8px 27px;
}
`;
const StyledLinkRow = styled.div`
width: calc(100% + 16px);
padding: 0 16px;
box-sizing: border-box;
background-color: #f8f9f9;
.sharing-access-combo-box-icon {
path {
fill: ${(props) => (props.isDisabled ? "#D0D5DA" : "#a3a9ae")};
}
}
@media (max-width: 550px) {
width: 90%;
.link-row {
${(props) => !props.withToggle && "border-bottom:none;"}
}
.row_content {
display: grid;
grid-template-columns: 1fr 28px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.combo-button {
background: transparent;
}
`;
@ -366,7 +409,7 @@ export {
StyledContent,
StyledHeaderContent,
StyledBody,
StyledSharingHeaderContent,
StyledSharingBody,
StyledFooter,
StyledLinkRow,
};

View File

@ -10,3 +10,4 @@ export const PAGE = "page";
export const PAGE_COUNT = "count";
export const FOLDER = "folder";
export const PREVIEW = "preview";
export const TIMEOUT = 5000;

View File

@ -9,10 +9,7 @@ import "./custom.scss";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
import { ErrorBoundary, utils } from "asc-web-common";
const { redirectToDefaultPage } = utils;
redirectToDefaultPage();
import { ErrorBoundary } from "asc-web-common";
ReactDOM.render(
<Provider store={store}>

File diff suppressed because it is too large Load Diff

View File

@ -16,8 +16,10 @@ import {
SET_DRAGGING,
SET_DRAG_ITEM,
SET_MEDIA_VIEWER_VISIBLE,
SET_PROGRESS_BAR_DATA,
SET_PRIMARY_PROGRESS_BAR_DATA,
SET_SECONDARY_PROGRESS_BAR_DATA,
SET_CONVERT_DIALOG_VISIBLE,
SET_SHARING_PANEL_VISIBLE,
SET_UPDATE_TREE,
SET_NEW_ROW_ITEMS,
SET_SELECTED_NODE,
@ -49,8 +51,22 @@ const initialState = {
dragging: false,
dragItem: null,
mediaViewerData: { visible: false, id: null },
progressData: { percent: 0, label: "", visible: false },
primaryProgressData: {
percent: 0,
label: "",
visible: false,
icon: "upload",
alert: false,
},
secondaryProgressData: {
percent: 0,
label: "",
visible: false,
icon: "trash",
alert: false,
},
convertDialogVisible: false,
sharingPanelVisible: false,
updateTree: false,
newRowItems: [],
selectedTreeNode: [],
@ -459,14 +475,22 @@ const filesReducer = (state = initialState, action) => {
return Object.assign({}, state, {
mediaViewerData: action.mediaViewerData,
});
case SET_PROGRESS_BAR_DATA:
case SET_PRIMARY_PROGRESS_BAR_DATA:
return Object.assign({}, state, {
progressData: action.progressData,
primaryProgressData: action.primaryProgressData,
});
case SET_SECONDARY_PROGRESS_BAR_DATA:
return Object.assign({}, state, {
secondaryProgressData: action.secondaryProgressData,
});
case SET_CONVERT_DIALOG_VISIBLE:
return Object.assign({}, state, {
convertDialogVisible: action.convertDialogVisible,
});
case SET_SHARING_PANEL_VISIBLE:
return Object.assign({}, state, {
sharingPanelVisible: action.sharingPanelVisible,
});
case SET_UPDATE_TREE:
return Object.assign({}, state, {
updateTree: action.updateTree,

View File

@ -22,6 +22,22 @@ export const getEditedFormats = (state) => {
return state.files.docservice.editedDocs;
};
export const getCommentedFormats = (state) => {
return state.files.docservice.commentedDocs;
};
export const getReviewedFormats = (state) => {
return state.files.docservice.reviewedDocs;
};
export const getWebFilterFormats = (state) => {
return state.files.docservice.customfilterDocs;
};
export const getFormFillingFormats = (state) => {
return state.files.docservice.formfillingDocs;
};
export const getConvertedFormats = (state) => {
return state.files.docservice.convertDocs;
};
@ -68,6 +84,29 @@ export const canWebEdit = (extension) => {
});
};
export const canWebComment = (extension) => {
return createSelector(getCommentedFormats, (formats) => {
return presentInArray(formats, extension);
});
};
export const canWebReview = (extension) => {
return createSelector(getReviewedFormats, (formats) => {
return presentInArray(formats, extension);
});
};
export const canWebFilterEditing = (extension) => {
return createSelector(getWebFilterFormats, (formats) => {
return presentInArray(formats, extension);
});
};
export const canFormFillingDocs = (extension) => {
return createSelector(getFormFillingFormats, (formats) => {
return presentInArray(formats, extension);
});
};
export const canConvert = (extension) => {
return createSelector(getConvertedFormats, (formats) => {
return presentInArray(formats, extension);
@ -373,29 +412,36 @@ export const isCanBeDeleted = createSelector(
);
//TODO: Get the whole list of extensions
export const getAccessOption = (selection) => {
const isFolder = selection.find((x) => x.fileExst === undefined);
const isMedia = selection.find(
(x) => isSound(x.fileExst) || isVideo(x.fileExst)
export const getAccessOption = (state, selection) => {
return getOptions(state, selection);
};
export const getExternalAccessOption = (state, selection) => {
return getOptions(state, selection, true);
};
const getOptions = (state, selection, externalAccess = false) => {
const webEdit = selection.find((x) => canWebEdit(x.fileExst)(state));
const webComment = selection.find((x) => canWebComment(x.fileExst)(state));
const webReview = selection.find((x) => canWebReview(x.fileExst)(state));
const formFillingDocs = selection.find((x) =>
canFormFillingDocs(x.fileExst)(state)
);
const isPresentationOrTable = selection.find(
(x) => isSpreadsheet(x.fileExst) || isPresentation(x.fileExst)
const webFilter = selection.find((x) =>
canWebFilterEditing(x.fileExst)(state)
);
if (isFolder || isMedia) {
return ["FullAccess", "ReadOnly", "DenyAccess"];
} else if (isPresentationOrTable) {
return ["FullAccess", "ReadOnly", "DenyAccess", "Comment"];
} else {
return [
"FullAccess",
"ReadOnly",
"DenyAccess",
"Comment",
"Review",
"FormFilling",
];
}
let AccessOptions = [];
if (webEdit || !externalAccess) AccessOptions.push("FullAccess");
AccessOptions.push("ReadOnly", "DenyAccess");
if (webComment) AccessOptions.push("Comment");
if (webReview) AccessOptions.push("Review");
if (formFillingDocs) AccessOptions.push("FormFilling");
if (webFilter) AccessOptions.push("FilterEditing");
return AccessOptions;
};
export const getFolderIcon = (providerKey, size = 32) => {
@ -919,8 +965,12 @@ export const getConvertDialogVisible = (state) => {
return state.files.convertDialogVisible;
};
export const getProgressData = (state) => {
return state.files.progressData;
export const getPrimaryProgressData = (state) => {
return state.files.primaryProgressData;
};
export const getSecondaryProgressData = (state) => {
return state.files.secondaryProgressData;
};
export const getUpdateTree = (state) => {
@ -984,7 +1034,9 @@ export const getHeaderIndeterminate = createSelector(
getSelectionLength,
getItemsList,
(headerVisible, selectionLength, items) => {
return headerVisible && selectionLength < items.length;
return headerVisible && selectionLength
? selectionLength < items.length
: false;
}
);
@ -1064,9 +1116,16 @@ export const getOnlyFoldersSelected = createSelector(
}
);
export const getAccessedSelected = createSelector(getSelection, (selection) => {
return selection.every((x) => x.access === 1 || x.access === 0);
});
export const getAccessedSelected = createSelector(
getSelection,
getSelectionLength,
(selection, selectionLength) => {
return (
selectionLength &&
selection.every((x) => x.access === 1 || x.access === 0)
);
}
);
export const getOperationsFolders = createSelector(
getTreeFolders,
@ -1119,3 +1178,7 @@ export const getIconOfDraggedFile = (state) => {
return;
});
};
export const getSharePanelVisible = (state) => {
return state.files.sharingPanelVisible;
};

View File

@ -52,42 +52,41 @@
source-map "^0.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.8.4":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd"
integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-module-transforms" "^7.12.1"
"@babel/helpers" "^7.12.5"
"@babel/parser" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/template" "^7.12.7"
"@babel/traverse" "^7.12.9"
"@babel/types" "^7.12.7"
"@babel/traverse" "^7.12.10"
"@babel/types" "^7.12.10"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/generator@^7.12.5", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de"
integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==
"@babel/generator@^7.12.10", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460"
integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==
dependencies:
"@babel/types" "^7.12.5"
"@babel/types" "^7.12.10"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d"
integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
version "7.10.4"
@ -97,14 +96,14 @@
"@babel/helper-explode-assignable-expression" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.4"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48"
integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==
"@babel/helper-builder-react-jsx-experimental@^7.12.10", "@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.10.tgz#a58cb96a793dc0fcd5c9ed3bb36d62fdc60534c2"
integrity sha512-3Kcr2LGpL7CTRDTTYm1bzeor9qZbxbvU2AxsLA6mUG9gYarSfIKMK0UlU+azLWI+s0+BH768bwyaziWB2NOJlQ==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-module-imports" "^7.12.1"
"@babel/types" "^7.12.1"
"@babel/helper-annotate-as-pure" "^7.12.10"
"@babel/helper-module-imports" "^7.12.5"
"@babel/types" "^7.12.10"
"@babel/helper-builder-react-jsx@^7.10.4":
version "7.10.4"
@ -169,11 +168,11 @@
"@babel/types" "^7.10.4"
"@babel/helper-get-function-arity@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf"
integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-hoist-variables@^7.10.4":
version "7.10.4"
@ -212,11 +211,11 @@
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c"
integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d"
integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==
dependencies:
"@babel/types" "^7.12.7"
"@babel/types" "^7.12.10"
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.10.4"
@ -301,10 +300,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056"
integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==
"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81"
integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==
"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.12.1"
@ -788,27 +787,27 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
"@babel/plugin-transform-react-jsx-self@^7.12.1", "@babel/plugin-transform-react-jsx-self@^7.9.0":
"@babel/plugin-transform-react-jsx-self@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28"
integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx-source@^7.12.1", "@babel/plugin-transform-react-jsx-source@^7.9.0":
"@babel/plugin-transform-react-jsx-source@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b"
integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx@^7.12.7", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f"
integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==
"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.10.tgz#a7af3097c73479123594c8c8fe39545abebd44e3"
integrity sha512-MM7/BC8QdHXM7Qc1wdnuk73R4gbuOpfrSUgfV/nODGc86sPY1tgmY2M9E9uAnf2e4DOIp8aKGWqgZfQxnTNGuw==
dependencies:
"@babel/helper-builder-react-jsx" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.10"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
@ -873,10 +872,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a"
integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==
"@babel/plugin-transform-typeof-symbol@^7.12.10", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b"
integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@ -971,9 +970,9 @@
semver "^5.5.0"
"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.8.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55"
integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab"
integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA==
dependencies:
"@babel/compat-data" "^7.12.7"
"@babel/helper-compilation-targets" "^7.12.5"
@ -1034,12 +1033,12 @@
"@babel/plugin-transform-spread" "^7.12.1"
"@babel/plugin-transform-sticky-regex" "^7.12.7"
"@babel/plugin-transform-template-literals" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.10"
"@babel/plugin-transform-unicode-escapes" "^7.12.1"
"@babel/plugin-transform-unicode-regex" "^7.12.1"
"@babel/preset-modules" "^0.1.3"
"@babel/types" "^7.12.7"
core-js-compat "^3.7.0"
"@babel/types" "^7.12.10"
core-js-compat "^3.8.0"
semver "^5.5.0"
"@babel/preset-modules@^0.1.3":
@ -1066,16 +1065,14 @@
"@babel/plugin-transform-react-jsx-source" "^7.9.0"
"@babel/preset-react@^7.0.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b"
integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9"
integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-display-name" "^7.12.1"
"@babel/plugin-transform-react-jsx" "^7.12.7"
"@babel/plugin-transform-react-jsx" "^7.12.10"
"@babel/plugin-transform-react-jsx-development" "^7.12.7"
"@babel/plugin-transform-react-jsx-self" "^7.12.1"
"@babel/plugin-transform-react-jsx-source" "^7.12.1"
"@babel/plugin-transform-react-pure-annotations" "^7.12.1"
"@babel/preset-typescript@7.9.0":
@ -1117,25 +1114,25 @@
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f"
integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a"
integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/types" "^7.12.10"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13"
integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260"
integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
@ -1547,9 +1544,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
version "7.0.16"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.16.tgz#0bbbf70c7bc4193210dd27e252c51260a37cd6a7"
integrity sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w==
version "7.11.0"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"
integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==
dependencies:
"@babel/types" "^7.3.0"
@ -1607,9 +1604,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
version "14.14.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785"
integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==
version "14.14.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.12.tgz#0b1d86f8c40141091285dea02e4940df73bba43f"
integrity sha512-ASH8OPHMNlkdjrEdmoILmzFfsJICvhBsFfAum4aKZ/9U4B6M6tTmTPh+f3ttWdD74CEGV5XvXWkbyfSdXaTd7g==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -2166,7 +2163,7 @@ asap@~2.0.6:
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
"asc-web-common@file:../../../packages/asc-web-common":
version "1.0.281"
version "1.0.289"
dependencies:
axios "^0.19.1"
history "4.10.1"
@ -2183,7 +2180,7 @@ asap@~2.0.6:
sjcl "^1.0.8"
"asc-web-components@file:../../../packages/asc-web-components":
version "1.0.488"
version "1.0.492"
dependencies:
email-addresses "^3.1.0"
html-to-react "^1.4.2"
@ -2737,16 +2734,16 @@ browserslist@4.10.0:
node-releases "^1.1.52"
pkg-up "^3.1.0"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.7, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.14.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.16.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b"
integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==
dependencies:
caniuse-lite "^1.0.30001157"
caniuse-lite "^1.0.30001165"
colorette "^1.2.1"
electron-to-chromium "^1.3.591"
electron-to-chromium "^1.3.621"
escalade "^3.1.1"
node-releases "^1.1.66"
node-releases "^1.1.67"
bser@2.1.1:
version "2.1.1"
@ -2897,12 +2894,12 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
dependencies:
pascal-case "^3.1.1"
tslib "^1.10.0"
pascal-case "^3.1.2"
tslib "^2.0.3"
camelcase-keys@^2.0.0:
version "2.1.0"
@ -2942,10 +2939,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
version "1.0.30001162"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001162.tgz#9f83aad1f42539ce9aab58bb177598f2f8e22ec6"
integrity sha512-E9FktFxaNnp4ky3ucIGzEXLM+Knzlpuq1oN1sFAU0KeayygabGTmOsndpo8QrL4D9pcThlf4D2pUKaDxPCUmVw==
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165:
version "1.0.30001165"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f"
integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==
capture-exit@^2.0.0:
version "2.0.0"
@ -3412,18 +3409,18 @@ copy-webpack-plugin@^5.1.1:
serialize-javascript "^4.0.0"
webpack-log "^2.0.0"
core-js-compat@^3.6.2, core-js-compat@^3.7.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.0.tgz#3248c6826f4006793bd637db608bca6e4cd688b1"
integrity sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==
core-js-compat@^3.6.2, core-js-compat@^3.8.0:
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e"
integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==
dependencies:
browserslist "^4.14.7"
browserslist "^4.15.0"
semver "7.0.0"
core-js-pure@^3.0.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.0.tgz#4cdd2eca37d49cda206b66e26204818dba77884a"
integrity sha512-fRjhg3NeouotRoIV0L1FdchA6CK7ZD+lyINyMoz19SyV+ROpC4noS1xItWHFtwZdlqfMfVPJEyEGdfri2bD1pA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119"
integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g==
core-js@^2.4.0, core-js@^2.6.4:
version "2.6.12"
@ -3431,9 +3428,9 @@ core-js@^2.4.0, core-js@^2.6.4:
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.5.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.0.tgz#0fc2d4941cadf80538b030648bb64d230b4da0ce"
integrity sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47"
integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@ -4107,12 +4104,12 @@ dom-serializer@0:
entities "^2.0.0"
dom-serializer@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58"
integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==
version "1.2.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1"
integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.0.0"
domhandler "^4.0.0"
entities "^2.0.0"
domain-browser@^1.1.1:
@ -4125,10 +4122,10 @@ domelementtype@1, domelementtype@^1.3.1:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
domelementtype@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971"
integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==
domelementtype@^2.0.1, domelementtype@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e"
integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==
domexception@^1.0.1:
version "1.0.1"
@ -4144,13 +4141,20 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
domhandler@^3.0.0, domhandler@^3.3.0:
domhandler@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e"
integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==
dependencies:
domelementtype "^2.1.0"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@ -4168,21 +4172,21 @@ domutils@^1.5.1, domutils@^1.7.0:
domelementtype "1"
domutils@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b"
integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==
version "2.4.4"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3"
integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
domhandler "^3.3.0"
domhandler "^4.0.0"
dot-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa"
integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==
dot-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
dot-prop@^5.2.0:
version "5.3.0"
@ -4234,10 +4238,10 @@ ejs@^2.6.1:
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.591:
version "1.3.610"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.610.tgz#1254eb394acd220a836ea1f203f8cded4e487052"
integrity sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.621:
version "1.3.621"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.621.tgz#0bbe2100ef0b28f88d0b1101fbdf433312f69be0"
integrity sha512-FeIuBzArONbAmKmZIsZIFGu/Gc9AVGlVeVbhCq+G2YIl6QkT0TDn2HKN/FMf1btXEB9kEmIuQf3/lBTVAbmFOg==
elliptic@^6.5.3:
version "6.5.3"
@ -4826,7 +4830,7 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -5908,9 +5912,9 @@ inherits@2.0.3:
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
inquirer@7.0.4:
version "7.0.4"
@ -6014,9 +6018,11 @@ is-accessor-descriptor@^1.0.0:
kind-of "^6.0.0"
is-arguments@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
dependencies:
call-bind "^1.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
@ -6189,9 +6195,9 @@ is-module@^1.0.0:
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
is-negative-zero@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-number@^3.0.0:
version "3.0.0"
@ -6799,9 +6805,9 @@ js-tokens@^3.0.2:
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1:
version "3.14.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -7232,12 +7238,12 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
lower-case@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
lower-case@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
dependencies:
tslib "^1.10.0"
tslib "^2.0.3"
lru-cache@^4.0.1:
version "4.1.5"
@ -7254,6 +7260,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
@ -7598,11 +7611,16 @@ ms@2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
ms@2.1.2, ms@^2.1.1:
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@ -7668,13 +7686,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
no-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
dependencies:
lower-case "^2.0.1"
tslib "^1.10.0"
lower-case "^2.0.2"
tslib "^2.0.3"
node-forge@^0.10.0:
version "0.10.0"
@ -7749,7 +7767,7 @@ node-notifier@^5.4.2:
shellwords "^0.1.1"
which "^1.3.0"
node-releases@^1.1.52, node-releases@^1.1.66:
node-releases@^1.1.52, node-releases@^1.1.67:
version "1.1.67"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
@ -7890,9 +7908,9 @@ object-hash@^2.0.1:
integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==
object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
version "1.9.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
object-is@^1.0.1:
version "1.1.4"
@ -8182,12 +8200,12 @@ parallel-transform@^1.1.0:
readable-stream "^2.1.5"
param-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238"
integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
dependencies:
dot-case "^3.0.3"
tslib "^1.10.0"
dot-case "^3.0.4"
tslib "^2.0.3"
parent-module@^1.0.0:
version "1.0.1"
@ -8247,13 +8265,13 @@ parseurl@~1.3.2, parseurl@~1.3.3:
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
pascal-case@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
pascal-case@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
pascalcase@^0.1.1:
version "0.1.1"
@ -9434,9 +9452,9 @@ react-app-polyfill@^1.0.6:
whatwg-fetch "^3.0.0"
react-app-rewired@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.6.tgz#33ee3076a7f34d6a7c94e649cac67e7c8c580de8"
integrity sha512-06flj0kK5tf/RN4naRv/sn6j3sQd7rsURoRLKLpffXDzJeNiAaTNic+0I8Basojy5WDwREkTqrMLewSAjcb13w==
version "2.1.7"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.7.tgz#b229d32b93b076059e62b06e8117109b92599e18"
integrity sha512-SIq7yRIohZzeO432WHlfvEEzOYs4JfOIoUIU663eIFt/ucUoqJxQwW1FClhhL21V6F8bqI+8URJoBlB0yUEKaA==
dependencies:
semver "^5.6.0"
@ -9668,9 +9686,9 @@ react-scripts@3.4.3:
fsevents "2.1.2"
react-svg@^11.0.9:
version "11.1.3"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.3.tgz#14c3f1552b0893319e7466e22797cf7f08a3bfb8"
integrity sha512-OSrg4mVXgGK+Qypraa0d68bI8e6ubcBGes9lqcaMdSgPjfrzFTe4yaG94UdROwk5JvFVLKTquc4lRuvqOY92KQ==
version "11.1.4"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.4.tgz#1a828bcf6193bae09609080fbcae29cb6bed62dc"
integrity sha512-Xx3dZNCbTc4wgogf5joE2PcJBcKplfVJGAvgYqIu+/XNSqB1KTutmebn77bO9XT6uHXSBSoy11jCDw/6fddAFQ==
dependencies:
"@babel/runtime" "^7.12.5"
"@tanem/svg-injector" "^8.1.0"
@ -10406,9 +10424,11 @@ semver@7.0.0:
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
semver@~5.3.0:
version "5.3.0"
@ -11414,7 +11434,7 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@ -11494,9 +11514,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.22:
version "0.7.22"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3"
integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==
version "0.7.23"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b"
integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
@ -12347,9 +12367,9 @@ xmlchars@^2.1.1:
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xregexp@^4.3.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.0.tgz#29660f5d6567cd2ef981dd4a50cb05d22c10719d"
integrity sha512-83y4aa8o8o4NZe+L+46wpa+F1cWR/wCGOWI3tzqUso0w3/KAvXy0+Di7Oe/cbNMixDR4Jmi7NEybWU6ps25Wkg==
version "4.4.1"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
dependencies:
"@babel/runtime-corejs3" "^7.12.1"
@ -12359,9 +12379,9 @@ xtend@^4.0.0, xtend@~4.0.1:
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
version "4.0.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
yallist@^2.1.2:
version "2.1.2"

View File

@ -1,10 +1,11 @@
using System.IO;

using Microsoft.AspNetCore.Http;
namespace ASC.Files.Core.Model
{
public class FileStreamModel
{
public Stream File { get; set; }
public IFormFile File { get; set; }
public bool Encrypted { get; set; }
public bool Forcesave { get; set; }
}

View File

@ -1,10 +1,11 @@
using System.Collections.Generic;
using System.Text.Json;
using ASC.Api.Documents;
namespace ASC.Files.Model
{
public class SecurityInfoModel
public class SecurityInfoModel : BaseBatchModel<JsonElement>
{
public IEnumerable<FileShareParams> Share { get; set; }
public bool Notify { get; set; }

View File

@ -56,7 +56,8 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
{
var operations = tasks.GetTasks();
var processlist = Process.GetProcesses();
//TODO: replace with distributed cache
foreach (var o in operations.Where(o => processlist.All(p => p.Id != o.InstanceId)))
{
o.SetProperty(FileOperation.PROGRESS, 100);

View File

@ -509,7 +509,7 @@ namespace ASC.Web.Files.Utils
result.Remove(meAce);
AceWrapper linkAce = null;
if (entries.Any())
if (entries.Count() > 1)
{
result.RemoveAll(ace => ace.SubjectId == FileConstant.ShareLinkId);
}

View File

@ -596,30 +596,17 @@ namespace ASC.Api.Documents
/// <param name="encrypted"></param>
/// <returns></returns>
/// <visible>false</visible>
[Update("{fileId}/update", DisableFormat = true)]
public FileWrapper<string> UpdateFileStreamFromBody(string fileId, [FromBody]FileStreamModel model)
{
return FilesControllerHelperString.UpdateFileStream(model.File, fileId, model.Encrypted, model.Forcesave);
}
[Update("{fileId}/update", DisableFormat = true)]
[Consumes("application/x-www-form-urlencoded")]
public FileWrapper<string> UpdateFileStreamFromForm(string fileId, [FromForm]FileStreamModel model)
{
return FilesControllerHelperString.UpdateFileStream(model.File, fileId, model.Encrypted, model.Forcesave);
return FilesControllerHelperString.UpdateFileStream(model.File.OpenReadStream(), fileId, model.Encrypted, model.Forcesave);
}
[Update("{fileId:int}/update")]
public FileWrapper<int> UpdateFileStreamFromBody(int fileId, [FromBody]FileStreamModel model)
{
return FilesControllerHelperInt.UpdateFileStream(model.File, fileId, model.Encrypted, model.Forcesave);
}
[Update("{fileId:int}/update")]
[Consumes("application/x-www-form-urlencoded")]
public FileWrapper<int> UpdateFileStreamFromForm(int fileId, [FromForm]FileStreamModel model)
{
return FilesControllerHelperInt.UpdateFileStream(model.File, fileId, model.Encrypted, model.Forcesave);
return FilesControllerHelperInt.UpdateFileStream(model.File.OpenReadStream(), fileId, model.Encrypted, model.Forcesave);
}
@ -1604,7 +1591,7 @@ namespace ASC.Api.Documents
return FilesControllerHelperInt.GetFolderSecurityInfo(folderId);
}
[Read("share")]
[Create("share")]
public IEnumerable<FileShareWrapper> GetSecurityInfoFromBody([FromBody] BaseBatchModel<JsonElement> model)
{
var result = new List<FileShareWrapper>();
@ -1613,7 +1600,7 @@ namespace ASC.Api.Documents
return result;
}
[Read("share")]
[Create("share")]
[Consumes("application/x-www-form-urlencoded")]
public IEnumerable<FileShareWrapper> GetSecurityInfoFromForm([FromForm] BaseBatchModel<JsonElement> model)
{
@ -1662,6 +1649,27 @@ namespace ASC.Api.Documents
return FilesControllerHelperInt.SetFileSecurityInfo(fileId, model.Share, model.Notify, model.SharingMessage);
}
[Update("share")]
public IEnumerable<FileShareWrapper> SetSecurityInfoFromBody([FromBody]SecurityInfoModel model)
{
return SetSecurityInfo(model);
}
[Update("share")]
[Consumes("application/x-www-form-urlencoded")]
public IEnumerable<FileShareWrapper> SetSecurityInfoFromForm([FromForm]SecurityInfoModel model)
{
return SetSecurityInfo(model);
}
public IEnumerable<FileShareWrapper> SetSecurityInfo(SecurityInfoModel model)
{
var result = new List<FileShareWrapper>();
result.AddRange(FilesControllerHelperInt.SetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.Share, model.Notify, model.SharingMessage));
result.AddRange(FilesControllerHelperString.SetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.Share, model.Notify, model.SharingMessage));
return result;
}
/// <summary>
/// Sets sharing settings for the folder with the ID specified in the request
/// </summary>
@ -1753,6 +1761,12 @@ namespace ASC.Api.Documents
return FilesControllerHelperInt.GenerateSharedLink(fileId, model.Share);
}
[Update("{fileId:int}/setacelink")]
public bool SetAceLink(int fileId, [FromBody] GenerateSharedLinkModel model)
{
return FilesControllerHelperInt.SetAceLink(fileId, model.Share);
}
/// <summary>
/// Get a list of available providers
/// </summary>
@ -2205,6 +2219,7 @@ namespace ASC.Api.Documents
}
/// <visible>false</visible>
[AllowAnonymous]
[Read("docservice")]
public object GetDocServiceUrl(bool version)
{

View File

@ -468,14 +468,12 @@ namespace ASC.Files.Helpers
public IEnumerable<FileShareWrapper> GetFileSecurityInfo(T fileId)
{
var fileShares = FileStorageService.GetSharedInfo(new List<T> { fileId }, new List<T> { });
return fileShares.Select(FileShareWrapperHelper.Get);
return GetSecurityInfo(new List<T> { fileId }, new List<T> { });
}
public IEnumerable<FileShareWrapper> GetFolderSecurityInfo(T folderId)
{
var fileShares = FileStorageService.GetSharedInfo(new List<T> { }, new List<T> { folderId });
return fileShares.Select(FileShareWrapperHelper.Get);
return GetSecurityInfo(new List<T> { }, new List<T> { folderId });
}
public IEnumerable<FileShareWrapper> GetSecurityInfo(IEnumerable<T> fileIds, IEnumerable<T> folderIds)
@ -486,35 +484,30 @@ namespace ASC.Files.Helpers
public IEnumerable<FileShareWrapper> SetFileSecurityInfo(T fileId, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
{
if (share != null && share.Any())
{
var list = new ItemList<AceWrapper>(share.Select(FileShareParamsHelper.ToAceObject));
var aceCollection = new AceCollection<T>
{
Files = new List<T> {fileId },
Aces = list,
Message = sharingMessage
};
FileStorageService.SetAceObject(aceCollection, notify);
}
return GetFileSecurityInfo(fileId);
return SetSecurityInfo(new List<T> { fileId }, new List<T>(), share, notify, sharingMessage);
}
public IEnumerable<FileShareWrapper> SetFolderSecurityInfo(T folderId, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
{
return SetSecurityInfo(new List<T>(), new List<T> { folderId}, share, notify, sharingMessage);
}
public IEnumerable<FileShareWrapper> SetSecurityInfo(IEnumerable<T> fileIds, IEnumerable<T> folderIds, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
{
if (share != null && share.Any())
{
var list = new ItemList<AceWrapper>(share.Select(FileShareParamsHelper.ToAceObject));
var aceCollection = new AceCollection<T>
{
Folders = new List<T> { folderId },
Files = fileIds,
Folders = folderIds,
Aces = list,
Message = sharingMessage
};
FileStorageService.SetAceObject(aceCollection, notify);
}
return GetFolderSecurityInfo(folderId);
return GetSecurityInfo(fileIds, folderIds);
}
public bool RemoveSecurityInfo(List<T> fileIds, List<T> folderIds)
@ -552,6 +545,11 @@ namespace ASC.Files.Helpers
return sharedInfo.Link;
}
public bool SetAceLink(T fileId, FileShare share)
{
return FileStorageService.SetAceLink(fileId, share);
}
///// <summary>
/////
///// </summary>

View File

@ -8,6 +8,7 @@
"asc-web-components": "file:../../../packages/asc-web-components",
"connected-react-router": "6.6.1",
"copy-to-clipboard": "^3.2.0",
"fast-deep-equal": "^3.1.3",
"history": "4.10.1",
"i18next": "19.0.3",
"i18next-browser-languagedetector": "4.0.1",

View File

@ -239,16 +239,5 @@
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
<script>
if (localStorage.getItem("asc_auth_key")){
let el = document.getElementById("burger-loader-svg");
let el1 = document.getElementById("logo-loader-svg");
let el2 = document.getElementById("avatar-loader-svg");
el.style.display = "block";
el1.style.display = "block";
el2.style.display = "block";
}
</script>
</body>
</html>

View File

@ -17,7 +17,6 @@ import {
Offline,
utils,
store as commonStore,
constants,
NavMenu,
Main,
toastr,
@ -36,8 +35,8 @@ const {
setCurrentProductHomePage,
getPortalPasswordSettings,
getPortalCultures,
getIsAuthenticated,
} = commonStore.auth.actions;
const { AUTH_KEY } = constants;
/*const Profile = lazy(() => import("./components/pages/Profile"));
const ProfileAction = lazy(() => import("./components/pages/ProfileAction"));
@ -47,8 +46,6 @@ const GroupAction = lazy(() => import("./components/pages/GroupAction"));*/
class App extends React.Component {
componentDidMount() {
utils.removeTempContent();
const {
setModuleInfo,
getUser,
@ -59,33 +56,37 @@ class App extends React.Component {
fetchGroups,
fetchPeople,
setIsLoaded,
getIsAuthenticated,
} = this.props;
setModuleInfo();
getIsAuthenticated().then((isAuthenticated) => {
if (!isAuthenticated) {
utils.updateTempContent();
return setIsLoaded();
} else {
utils.updateTempContent(isAuthenticated);
}
const token = localStorage.getItem(AUTH_KEY);
const requests = [
getUser(),
getPortalSettings(),
getModules(),
getPortalPasswordSettings(),
getPortalCultures(),
fetchGroups(),
fetchPeople(),
];
if (!token) {
return setIsLoaded();
}
const requests = [
getUser(),
getPortalSettings(),
getModules(),
getPortalPasswordSettings(),
getPortalCultures(),
fetchGroups(),
fetchPeople(),
];
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
setIsLoaded();
});
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
utils.updateTempContent();
setIsLoaded();
});
});
}
render() {
@ -164,6 +165,7 @@ const mapStateToProps = (state) => {
const mapDispatchToProps = (dispatch) => {
return {
getIsAuthenticated: () => getIsAuthenticated(dispatch),
setModuleInfo: () => {
dispatch(setCurrentProductHomePage(config.homepage));
dispatch(setCurrentProductId("f4d98afd-d336-4332-8778-3c6945c81ea0"));

View File

@ -10,7 +10,8 @@ import { setFilter } from "../../../../../store/people/actions";
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
display: grid;
grid-template-columns: auto 1fr auto auto;
align-items: center;
.arrow-button {

View File

@ -25,7 +25,7 @@ import {
} from "../../../../../store/people/actions";
import { getPeopleList } from "../../../../../store/people/selectors";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { store, api, constants, toastr, Loaders } from "asc-web-common";
import {
ChangeEmailDialog,
@ -363,7 +363,7 @@ class SectionBodyContent extends React.PureComponent {
if (currentProps.sectionWidth !== nextProps.sectionWidth) {
return true;
}
if (!isEqual(currentProps.data, nextProps.data)) {
if (!equal(currentProps.data, nextProps.data)) {
return true;
}
if (!isArrayEqual(currentProps.contextOptions, nextProps.contextOptions)) {
@ -396,7 +396,10 @@ class SectionBodyContent extends React.PureComponent {
<>
<Consumer>
{(context) => (
<RowContainer className="people-row" useReactWindow={false}>
<RowContainer
className="people-row-container"
useReactWindow={false}
>
{peopleList.map((man) => {
const {
checked,

View File

@ -89,11 +89,15 @@ const StyledContainer = styled.div`
.header-container {
position: relative;
display: flex;
display: grid;
grid-template-columns: auto auto 1fr;
align-items: center;
max-width: calc(100vw - 32px);
@media ${tablet} {
grid-template-columns: 1fr auto;
}
.action-button {
margin-left: 16px;

View File

@ -46,9 +46,16 @@ const { EmployeeStatus } = constants;
const StyledContainer = styled.div`
position: relative;
display: flex;
display: grid;
grid-template-columns: ${(props) =>
props.showContextButton ? "auto auto auto 1fr" : "auto 1fr"};
align-items: center;
@media (max-width: 1024px) {
grid-template-columns: ${(props) =>
props.showContextButton ? "auto 1fr auto" : "auto 1fr"};
}
.action-button {
margin-left: 16px;
@ -410,9 +417,12 @@ class SectionHeaderContent extends React.PureComponent {
} = this.props;
const { avatar, visibleAvatarEditor, dialogsVisible } = this.state;
const contextOptions = () => this.getUserContextOptions(profile, viewer);
const IsMe = isMe(viewer, profile.userName);
return (
<StyledContainer>
<StyledContainer
showContextButton={(isAdmin && !profile.isOwner) || IsMe}
>
<IconButton
iconName="ArrowPathIcon"
color="#A3A9AE"
@ -426,7 +436,7 @@ class SectionHeaderContent extends React.PureComponent {
{profile.displayName}
{profile.isLDAP && ` (${t("LDAPLbl")})`}
</Headline>
{((isAdmin && !profile.isOwner) || isMe(viewer, profile.userName)) && (
{((isAdmin && !profile.isOwner) || IsMe) && (
<ContextMenuButton
className="action-button"
directionX="right"

View File

@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { ComboBox, TextInput, IconButton } from "asc-web-components";
const Container = styled.div`
@ -15,7 +15,7 @@ const Container = styled.div`
class ContactField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import ContactField from "./ContactField";
import { ComboBox } from "asc-web-components";
@ -62,7 +62,7 @@ const renderItems = (
class ContactsField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,10 +1,10 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { FieldContainer, DatePicker } from "asc-web-components";
class DateField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,5 +1,5 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import {
FieldContainer,
SelectorAddButton,
@ -9,7 +9,7 @@ import { GroupSelector } from "asc-web-common";
class DepartmentField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,10 +1,10 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { FieldContainer, EmailInput } from "asc-web-components";
class EmailField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,5 +1,5 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import {
FieldContainer,
RadioButtonGroup,
@ -8,7 +8,7 @@ import {
class PasswordField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,14 +1,14 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { FieldContainer, RadioButtonGroup } from "asc-web-components";
class RadioField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {
console.log("RadioField render");
//console.log("RadioField render");
const {
isRequired,

View File

@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { FieldContainer, TextInput, Button } from "asc-web-components";
const InputContainer = styled.div`
@ -12,7 +12,7 @@ const InputContainer = styled.div`
class TextChangeField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -1,10 +1,10 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import { FieldContainer, TextInput } from "asc-web-components";
class TextField extends React.Component {
shouldComponentUpdate(nextProps) {
return !isEqual(this.props, nextProps);
return !equal(this.props, nextProps);
}
render() {

View File

@ -12,7 +12,8 @@ import {
} from "../../../../../store/people/actions";
import { resetProfile } from "../../../../../store/profile/actions";
const Wrapper = styled.div`
display: flex;
display: grid;
grid-template-columns: auto 1fr auto auto;
align-items: center;
.arrow-button {

View File

@ -7,7 +7,8 @@ import { useTranslation } from "react-i18next";
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
display: grid;
grid-template-columns: auto 1fr auto auto;
align-items: center;
.arrow-button {
@ -20,7 +21,6 @@ const Wrapper = styled.div`
const textStyle = {
marginLeft: "16px",
marginRight: "16px",
};
const SectionHeaderContent = (props) => {

View File

@ -7,10 +7,7 @@ import "./custom.scss";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
import { ErrorBoundary, utils } from "asc-web-common";
const { redirectToDefaultPage } = utils;
redirectToDefaultPage();
import { ErrorBoundary } from "asc-web-common";
ReactDOM.render(
<Provider store={store}>

View File

@ -52,42 +52,41 @@
source-map "^0.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.8.4":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd"
integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-module-transforms" "^7.12.1"
"@babel/helpers" "^7.12.5"
"@babel/parser" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/template" "^7.12.7"
"@babel/traverse" "^7.12.9"
"@babel/types" "^7.12.7"
"@babel/traverse" "^7.12.10"
"@babel/types" "^7.12.10"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/generator@^7.12.5", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de"
integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==
"@babel/generator@^7.12.10", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460"
integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==
dependencies:
"@babel/types" "^7.12.5"
"@babel/types" "^7.12.10"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d"
integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
version "7.10.4"
@ -97,14 +96,14 @@
"@babel/helper-explode-assignable-expression" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.4"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48"
integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==
"@babel/helper-builder-react-jsx-experimental@^7.12.10", "@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.10.tgz#a58cb96a793dc0fcd5c9ed3bb36d62fdc60534c2"
integrity sha512-3Kcr2LGpL7CTRDTTYm1bzeor9qZbxbvU2AxsLA6mUG9gYarSfIKMK0UlU+azLWI+s0+BH768bwyaziWB2NOJlQ==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-module-imports" "^7.12.1"
"@babel/types" "^7.12.1"
"@babel/helper-annotate-as-pure" "^7.12.10"
"@babel/helper-module-imports" "^7.12.5"
"@babel/types" "^7.12.10"
"@babel/helper-builder-react-jsx@^7.10.4":
version "7.10.4"
@ -169,11 +168,11 @@
"@babel/types" "^7.10.4"
"@babel/helper-get-function-arity@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf"
integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-hoist-variables@^7.10.4":
version "7.10.4"
@ -212,11 +211,11 @@
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c"
integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d"
integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==
dependencies:
"@babel/types" "^7.12.7"
"@babel/types" "^7.12.10"
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.10.4"
@ -301,10 +300,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056"
integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==
"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81"
integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==
"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.12.1"
@ -788,27 +787,27 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
"@babel/plugin-transform-react-jsx-self@^7.12.1", "@babel/plugin-transform-react-jsx-self@^7.9.0":
"@babel/plugin-transform-react-jsx-self@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28"
integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx-source@^7.12.1", "@babel/plugin-transform-react-jsx-source@^7.9.0":
"@babel/plugin-transform-react-jsx-source@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b"
integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx@^7.12.7", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f"
integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==
"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.10.tgz#a7af3097c73479123594c8c8fe39545abebd44e3"
integrity sha512-MM7/BC8QdHXM7Qc1wdnuk73R4gbuOpfrSUgfV/nODGc86sPY1tgmY2M9E9uAnf2e4DOIp8aKGWqgZfQxnTNGuw==
dependencies:
"@babel/helper-builder-react-jsx" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.10"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
@ -873,10 +872,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a"
integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==
"@babel/plugin-transform-typeof-symbol@^7.12.10", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b"
integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@ -971,9 +970,9 @@
semver "^5.5.0"
"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.8.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55"
integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab"
integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA==
dependencies:
"@babel/compat-data" "^7.12.7"
"@babel/helper-compilation-targets" "^7.12.5"
@ -1034,12 +1033,12 @@
"@babel/plugin-transform-spread" "^7.12.1"
"@babel/plugin-transform-sticky-regex" "^7.12.7"
"@babel/plugin-transform-template-literals" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.10"
"@babel/plugin-transform-unicode-escapes" "^7.12.1"
"@babel/plugin-transform-unicode-regex" "^7.12.1"
"@babel/preset-modules" "^0.1.3"
"@babel/types" "^7.12.7"
core-js-compat "^3.7.0"
"@babel/types" "^7.12.10"
core-js-compat "^3.8.0"
semver "^5.5.0"
"@babel/preset-modules@^0.1.3":
@ -1066,16 +1065,14 @@
"@babel/plugin-transform-react-jsx-source" "^7.9.0"
"@babel/preset-react@^7.0.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b"
integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9"
integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-display-name" "^7.12.1"
"@babel/plugin-transform-react-jsx" "^7.12.7"
"@babel/plugin-transform-react-jsx" "^7.12.10"
"@babel/plugin-transform-react-jsx-development" "^7.12.7"
"@babel/plugin-transform-react-jsx-self" "^7.12.1"
"@babel/plugin-transform-react-jsx-source" "^7.12.1"
"@babel/plugin-transform-react-pure-annotations" "^7.12.1"
"@babel/preset-typescript@7.9.0":
@ -1117,25 +1114,25 @@
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f"
integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a"
integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/types" "^7.12.10"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13"
integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260"
integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
@ -1547,9 +1544,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
version "7.0.16"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.16.tgz#0bbbf70c7bc4193210dd27e252c51260a37cd6a7"
integrity sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w==
version "7.11.0"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"
integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==
dependencies:
"@babel/types" "^7.3.0"
@ -1607,9 +1604,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
version "14.14.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785"
integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==
version "14.14.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.12.tgz#0b1d86f8c40141091285dea02e4940df73bba43f"
integrity sha512-ASH8OPHMNlkdjrEdmoILmzFfsJICvhBsFfAum4aKZ/9U4B6M6tTmTPh+f3ttWdD74CEGV5XvXWkbyfSdXaTd7g==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -2159,7 +2156,7 @@ asap@~2.0.6:
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
"asc-web-common@file:../../../packages/asc-web-common":
version "1.0.281"
version "1.0.289"
dependencies:
axios "^0.19.1"
history "4.10.1"
@ -2176,7 +2173,7 @@ asap@~2.0.6:
sjcl "^1.0.8"
"asc-web-components@file:../../../packages/asc-web-components":
version "1.0.488"
version "1.0.492"
dependencies:
email-addresses "^3.1.0"
html-to-react "^1.4.2"
@ -2730,16 +2727,16 @@ browserslist@4.10.0:
node-releases "^1.1.52"
pkg-up "^3.1.0"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.7, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.14.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.16.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b"
integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==
dependencies:
caniuse-lite "^1.0.30001157"
caniuse-lite "^1.0.30001165"
colorette "^1.2.1"
electron-to-chromium "^1.3.591"
electron-to-chromium "^1.3.621"
escalade "^3.1.1"
node-releases "^1.1.66"
node-releases "^1.1.67"
bser@2.1.1:
version "2.1.1"
@ -2890,12 +2887,12 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
dependencies:
pascal-case "^3.1.1"
tslib "^1.10.0"
pascal-case "^3.1.2"
tslib "^2.0.3"
camelcase-keys@^2.0.0:
version "2.1.0"
@ -2935,10 +2932,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
version "1.0.30001162"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001162.tgz#9f83aad1f42539ce9aab58bb177598f2f8e22ec6"
integrity sha512-E9FktFxaNnp4ky3ucIGzEXLM+Knzlpuq1oN1sFAU0KeayygabGTmOsndpo8QrL4D9pcThlf4D2pUKaDxPCUmVw==
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165:
version "1.0.30001165"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f"
integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==
capture-exit@^2.0.0:
version "2.0.0"
@ -3405,18 +3402,18 @@ copy-webpack-plugin@^5.1.1:
serialize-javascript "^4.0.0"
webpack-log "^2.0.0"
core-js-compat@^3.6.2, core-js-compat@^3.7.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.0.tgz#3248c6826f4006793bd637db608bca6e4cd688b1"
integrity sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==
core-js-compat@^3.6.2, core-js-compat@^3.8.0:
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e"
integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==
dependencies:
browserslist "^4.14.7"
browserslist "^4.15.0"
semver "7.0.0"
core-js-pure@^3.0.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.0.tgz#4cdd2eca37d49cda206b66e26204818dba77884a"
integrity sha512-fRjhg3NeouotRoIV0L1FdchA6CK7ZD+lyINyMoz19SyV+ROpC4noS1xItWHFtwZdlqfMfVPJEyEGdfri2bD1pA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119"
integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g==
core-js@^2.4.0, core-js@^2.6.4:
version "2.6.12"
@ -3424,9 +3421,9 @@ core-js@^2.4.0, core-js@^2.6.4:
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.5.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.0.tgz#0fc2d4941cadf80538b030648bb64d230b4da0ce"
integrity sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47"
integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@ -4100,12 +4097,12 @@ dom-serializer@0:
entities "^2.0.0"
dom-serializer@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58"
integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==
version "1.2.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1"
integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.0.0"
domhandler "^4.0.0"
entities "^2.0.0"
domain-browser@^1.1.1:
@ -4118,10 +4115,10 @@ domelementtype@1, domelementtype@^1.3.1:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
domelementtype@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971"
integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==
domelementtype@^2.0.1, domelementtype@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e"
integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==
domexception@^1.0.1:
version "1.0.1"
@ -4137,13 +4134,20 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
domhandler@^3.0.0, domhandler@^3.3.0:
domhandler@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e"
integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==
dependencies:
domelementtype "^2.1.0"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@ -4161,21 +4165,21 @@ domutils@^1.5.1, domutils@^1.7.0:
domelementtype "1"
domutils@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b"
integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==
version "2.4.4"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3"
integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
domhandler "^3.3.0"
domhandler "^4.0.0"
dot-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa"
integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==
dot-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
dot-prop@^5.2.0:
version "5.3.0"
@ -4227,10 +4231,10 @@ ejs@^2.6.1:
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.591:
version "1.3.610"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.610.tgz#1254eb394acd220a836ea1f203f8cded4e487052"
integrity sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.621:
version "1.3.621"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.621.tgz#0bbe2100ef0b28f88d0b1101fbdf433312f69be0"
integrity sha512-FeIuBzArONbAmKmZIsZIFGu/Gc9AVGlVeVbhCq+G2YIl6QkT0TDn2HKN/FMf1btXEB9kEmIuQf3/lBTVAbmFOg==
elliptic@^6.5.3:
version "6.5.3"
@ -4819,7 +4823,7 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -5901,9 +5905,9 @@ inherits@2.0.3:
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
inquirer@7.0.4:
version "7.0.4"
@ -6007,9 +6011,11 @@ is-accessor-descriptor@^1.0.0:
kind-of "^6.0.0"
is-arguments@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
dependencies:
call-bind "^1.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
@ -6182,9 +6188,9 @@ is-module@^1.0.0:
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
is-negative-zero@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-number@^3.0.0:
version "3.0.0"
@ -6792,9 +6798,9 @@ js-tokens@^3.0.2:
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1:
version "3.14.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -7225,12 +7231,12 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
lower-case@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
lower-case@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
dependencies:
tslib "^1.10.0"
tslib "^2.0.3"
lru-cache@^4.0.1:
version "4.1.5"
@ -7247,6 +7253,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
@ -7591,11 +7604,16 @@ ms@2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
ms@2.1.2, ms@^2.1.1:
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@ -7661,13 +7679,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
no-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
dependencies:
lower-case "^2.0.1"
tslib "^1.10.0"
lower-case "^2.0.2"
tslib "^2.0.3"
node-forge@^0.10.0:
version "0.10.0"
@ -7742,7 +7760,7 @@ node-notifier@^5.4.2:
shellwords "^0.1.1"
which "^1.3.0"
node-releases@^1.1.52, node-releases@^1.1.66:
node-releases@^1.1.52, node-releases@^1.1.67:
version "1.1.67"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
@ -7883,9 +7901,9 @@ object-hash@^2.0.1:
integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==
object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
version "1.9.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
object-is@^1.0.1:
version "1.1.4"
@ -8175,12 +8193,12 @@ parallel-transform@^1.1.0:
readable-stream "^2.1.5"
param-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238"
integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
dependencies:
dot-case "^3.0.3"
tslib "^1.10.0"
dot-case "^3.0.4"
tslib "^2.0.3"
parent-module@^1.0.0:
version "1.0.1"
@ -8240,13 +8258,13 @@ parseurl@~1.3.2, parseurl@~1.3.3:
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
pascal-case@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
pascal-case@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
pascalcase@^0.1.1:
version "0.1.1"
@ -9427,9 +9445,9 @@ react-app-polyfill@^1.0.6:
whatwg-fetch "^3.0.0"
react-app-rewired@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.6.tgz#33ee3076a7f34d6a7c94e649cac67e7c8c580de8"
integrity sha512-06flj0kK5tf/RN4naRv/sn6j3sQd7rsURoRLKLpffXDzJeNiAaTNic+0I8Basojy5WDwREkTqrMLewSAjcb13w==
version "2.1.7"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.7.tgz#b229d32b93b076059e62b06e8117109b92599e18"
integrity sha512-SIq7yRIohZzeO432WHlfvEEzOYs4JfOIoUIU663eIFt/ucUoqJxQwW1FClhhL21V6F8bqI+8URJoBlB0yUEKaA==
dependencies:
semver "^5.6.0"
@ -9661,9 +9679,9 @@ react-scripts@3.4.3:
fsevents "2.1.2"
react-svg@^11.0.9:
version "11.1.3"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.3.tgz#14c3f1552b0893319e7466e22797cf7f08a3bfb8"
integrity sha512-OSrg4mVXgGK+Qypraa0d68bI8e6ubcBGes9lqcaMdSgPjfrzFTe4yaG94UdROwk5JvFVLKTquc4lRuvqOY92KQ==
version "11.1.4"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.4.tgz#1a828bcf6193bae09609080fbcae29cb6bed62dc"
integrity sha512-Xx3dZNCbTc4wgogf5joE2PcJBcKplfVJGAvgYqIu+/XNSqB1KTutmebn77bO9XT6uHXSBSoy11jCDw/6fddAFQ==
dependencies:
"@babel/runtime" "^7.12.5"
"@tanem/svg-injector" "^8.1.0"
@ -10399,9 +10417,11 @@ semver@7.0.0:
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
semver@~5.3.0:
version "5.3.0"
@ -11407,7 +11427,7 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@ -11487,9 +11507,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.22:
version "0.7.22"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3"
integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==
version "0.7.23"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b"
integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
@ -12340,9 +12360,9 @@ xmlchars@^2.1.1:
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xregexp@^4.3.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.0.tgz#29660f5d6567cd2ef981dd4a50cb05d22c10719d"
integrity sha512-83y4aa8o8o4NZe+L+46wpa+F1cWR/wCGOWI3tzqUso0w3/KAvXy0+Di7Oe/cbNMixDR4Jmi7NEybWU6ps25Wkg==
version "4.4.1"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
dependencies:
"@babel/runtime-corejs3" "^7.12.1"
@ -12352,9 +12372,9 @@ xtend@^4.0.0, xtend@~4.0.1:
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
version "4.0.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
yallist@^2.1.2:
version "2.1.2"

View File

@ -52,7 +52,7 @@ namespace ASC.Employee.Core.Controllers
var result = UserManager.GetDepartments().Select(r => r);
if (!string.IsNullOrEmpty(ApiContext.FilterValue))
{
result = result.Where(r => r.Name.Contains(ApiContext.FilterValue));
result = result.Where(r => r.Name.Contains(ApiContext.FilterValue, StringComparison.InvariantCultureIgnoreCase));
}
return result.Select(x => new GroupWrapperSummary(x, UserManager));
}

View File

@ -7,6 +7,7 @@
"asc-web-components": "file:../../packages/asc-web-components",
"axios": "^0.19.1",
"connected-react-router": "6.6.1",
"fast-deep-equal": "^3.1.3",
"history": "4.10.1",
"i18next": "19.0.3",
"i18next-browser-languagedetector": "4.0.1",

View File

@ -212,16 +212,5 @@
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
<script>
if (localStorage.getItem("asc_auth_key")){
let el = document.getElementById("burger-loader-svg");
let el1 = document.getElementById("logo-loader-svg");
let el2 = document.getElementById("avatar-loader-svg");
el.style.display = "block";
el1.style.display = "block";
el2.style.display = "block";
}
</script>
</body>
</html>

View File

@ -3,7 +3,6 @@ import { Router, Route, Switch } from "react-router-dom";
import { connect } from "react-redux";
import {
store as CommonStore,
constants,
history,
PrivateRoute,
PublicRoute,
@ -29,35 +28,43 @@ const {
getUser,
getPortalSettings,
getModules,
getIsAuthenticated,
} = CommonStore.auth.actions;
class App extends React.Component {
componentDidMount() {
utils.removeTempContent();
const {
getPortalSettings,
getUser,
getModules,
setIsLoaded,
getIsAuthenticated,
} = this.props;
const { getPortalSettings, getUser, getModules, setIsLoaded } = this.props;
getIsAuthenticated()
.then((isAuthenticated) => {
if (isAuthenticated) utils.updateTempContent(isAuthenticated);
const requests = [];
if (!isAuthenticated) {
requests.push(getPortalSettings());
} else if (
!window.location.pathname.includes("confirm/EmailActivation")
) {
requests.push(getUser());
requests.push(getPortalSettings());
requests.push(getModules());
}
const { AUTH_KEY } = constants;
const token = localStorage.getItem(AUTH_KEY);
const requests = [];
if (!token) {
requests.push(getPortalSettings());
} else if (!window.location.pathname.includes("confirm/EmailActivation")) {
requests.push(getUser());
requests.push(getPortalSettings());
requests.push(getModules());
}
Promise.all(requests)
.catch((e) => {
toastr.error(e);
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
utils.updateTempContent();
setIsLoaded();
});
})
.finally(() => {
setIsLoaded();
});
.catch((err) => toastr.error(err));
}
render() {
@ -116,6 +123,7 @@ const mapStateToProps = (state) => {
const mapDispatchToProps = (dispatch) => {
return {
getIsAuthenticated: () => getIsAuthenticated(dispatch),
getPortalSettings: () => getPortalSettings(dispatch),
getUser: () => getUser(dispatch),
getModules: () => getModules(dispatch),

View File

@ -2,9 +2,12 @@ import React, { Suspense, lazy, useEffect } from "react";
import { Route, Switch } from "react-router-dom";
import ConfirmRoute from "../../../helpers/confirmRoute";
import { I18nextProvider } from "react-i18next";
import { Error404, utils } from "asc-web-common";
import { Error404, utils, store, PageLayout, Loaders } from "asc-web-common";
import { createI18N } from "../../../helpers/i18n";
import { connect } from "react-redux";
const { getIsLoaded } = store.auth.selectors;
const i18n = createI18N({
page: "Confirm",
localesPath: "pages/Confirm",
@ -23,13 +26,19 @@ const ChangePhoneForm = lazy(() => import("./sub-components/changePhone"));
const ProfileRemoveForm = lazy(() => import("./sub-components/profileRemove"));
const ChangeOwnerForm = lazy(() => import("./sub-components/changeOwner"));
const Confirm = ({ match }) => {
const Confirm = ({ match, isLoaded }) => {
useEffect(() => {
changeLanguage(i18n);
}, []);
//console.log("Confirm render");
return (
!isLoaded ? <PageLayout>
<PageLayout.SectionBody>
<Loaders.Rectangle height="90vh"/>
</PageLayout.SectionBody>
</PageLayout> :
<I18nextProvider i18n={i18n}>
<Suspense fallback={null}>
<Switch>
@ -80,4 +89,10 @@ const Confirm = ({ match }) => {
);
};
export default Confirm;
function mapStateToProps(state) {
return {
isLoaded: getIsLoaded(state)
};
}
export default connect(mapStateToProps)(Confirm);

View File

@ -5,13 +5,14 @@ import { Loader } from "asc-web-components";
import { PageLayout } from "asc-web-common";
import { connect } from "react-redux";
import PropTypes from "prop-types";
import { store } from "asc-web-common";
import { store, utils as commonUtils } from "asc-web-common";
import { changeEmail } from "../../../../store/confirm/actions";
const { logout } = store.auth.actions;
const { tryRedirectTo } = commonUtils;
class ActivateEmail extends React.PureComponent {
componentDidMount() {
const { history, logout, changeEmail, linkData } = this.props;
const { logout, changeEmail, linkData } = this.props;
const [email, uid, key] = [
linkData.email,
linkData.uid,
@ -20,11 +21,11 @@ class ActivateEmail extends React.PureComponent {
logout();
changeEmail(uid, email, key)
.then((res) => {
history.push(`/login/confirmed-email=${email}`);
tryRedirectTo(`/login/confirmed-email=${email}`);
})
.catch((e) => {
// console.log('activate email error', e);
history.push(`/login/error=${e}`);
tryRedirectTo(`/login/error=${e}`);
});
}

View File

@ -19,7 +19,7 @@ import {
activateConfirmUser,
} from "../../../../store/confirm/actions";
const { EmployeeActivationStatus } = constants;
const { createPasswordHash } = commonUtils;
const { createPasswordHash, tryRedirectTo } = commonUtils;
const inputWidth = "400px";
const ConfirmContainer = styled.div`
@ -82,7 +82,7 @@ class Confirm extends React.PureComponent {
onSubmit = (e) => {
this.setState({ isLoading: true }, function () {
const { activateConfirmUser, history, hashSettings } = this.props;
const { activateConfirmUser, hashSettings, defaultPage } = this.props;
this.setState({ errorText: "" });
@ -131,7 +131,7 @@ class Confirm extends React.PureComponent {
this.state.userId,
EmployeeActivationStatus.Activated
)
.then(() => history.push("/"))
.then(() => tryRedirectTo(defaultPage))
.catch((error) => {
console.error("activate error", error);
this.setState({
@ -344,6 +344,7 @@ function mapStateToProps(state) {
settings: state.auth.settings.passwordSettings,
greetingTitle: state.auth.settings.greetingSettings,
hashSettings: state.auth.settings.hashSettings,
defaultPage: state.auth.settings.defaultPage,
};
}

View File

@ -2,10 +2,11 @@ import React from "react";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { Loader } from "asc-web-components";
import { PageLayout } from "asc-web-common";
import { PageLayout, utils as commonUtils } from "asc-web-common";
import { connect } from "react-redux";
import PropTypes from "prop-types";
import { changeEmail } from "../../../../store/confirm/actions";
const { tryRedirectTo } = commonUtils;
class ChangeEmail extends React.PureComponent {
componentDidMount() {
@ -15,29 +16,33 @@ class ChangeEmail extends React.PureComponent {
changeEmail(userId, email, key)
.then((res) => {
console.log("change client email success", res);
window.location.href = `${window.location.origin}/products/people/view/@self?email_change=success`;
tryRedirectTo(
`${window.location.origin}/products/people/view/@self?email_change=success`
);
})
.catch((e) => {
console.log("change client email error", e);
window.location.href = `${window.location.origin}/error=${e}`;
tryRedirectTo(`${window.location.origin}/error=${e}`);
});
}
}
componentDidUpdate() {
const { changeEmail, userId, isLoaded, linkData } = this.props;
const { changeEmail, userId, isLoaded, linkData, defaultPage } = this.props;
if (isLoaded) {
const [email, key] = [linkData.email, linkData.confirmHeader];
changeEmail(userId, email, key)
.then((res) => {
console.log("change client email success", res);
window.location.href = `${window.location.origin}/products/people/view/@self?email_change=success`;
tryRedirectTo(
`${window.location.origin}/products/people/view/@self?email_change=success`
);
})
.catch((e) => {
console.log("change client email error", e);
});
} else {
window.location.href = "/";
tryRedirectTo(defaultPage);
}
}
@ -63,6 +68,7 @@ function mapStateToProps(state) {
return {
isLoaded: state.auth.isLoaded,
userId: state.auth.user.id,
defaultPage: state.auth.settings.defaultPage,
};
}

View File

@ -4,7 +4,8 @@ import { withTranslation } from "react-i18next";
import { connect } from "react-redux";
import styled from "styled-components";
import { Button, Text, toastr } from "asc-web-components";
import { PageLayout } from "asc-web-common";
import { PageLayout, utils as commonUtils } from "asc-web-common";
const { tryRedirectTo } = commonUtils;
const BodyStyle = styled.div`
margin-top: 70px;
@ -58,11 +59,11 @@ class Form extends React.PureComponent {
};
onRedirect = () => {
this.props.history.push("/");
tryRedirectTo(this.props.defaultPage);
};
onCancelClick = () => {
this.props.history.push("/");
tryRedirectTo(this.props.defaultPage);
};
render() {
@ -126,7 +127,10 @@ const ChangePasswordForm = (props) => (
);
function mapStateToProps(state) {
return { greetingTitle: state.auth.settings.greetingSettings };
return {
greetingTitle: state.auth.settings.greetingSettings,
defaultPage: state.auth.settings.defaultPage,
};
}
export default connect(

View File

@ -19,7 +19,7 @@ import {
changePassword,
} from "../../../../store/confirm/actions";
const { createPasswordHash } = commonUtils;
const { createPasswordHash, tryRedirectTo } = commonUtils;
const { logout } = store.auth.actions;
const BodyStyle = styled.form`
@ -80,7 +80,7 @@ class Form extends React.PureComponent {
onSubmit = (e) => {
this.setState({ isLoading: true }, function () {
const { userId, password, key } = this.state;
const { history, changePassword, hashSettings } = this.props;
const { changePassword, hashSettings, defaultPage } = this.props;
let hasError = false;
if (!this.state.passwordValid) {
@ -99,8 +99,8 @@ class Form extends React.PureComponent {
changePassword(userId, hash, key)
.then(() => this.props.logout())
.then(() => {
history.push("/");
toastr.success(this.props.t("ChangePasswordSuccess"));
tryRedirectTo(defaultPage);
})
.catch((error) => {
toastr.error(this.props.t(`${error}`));
@ -110,10 +110,10 @@ class Form extends React.PureComponent {
};
componentDidMount() {
const { getConfirmationInfo, history } = this.props;
const { getConfirmationInfo, defaultPage } = this.props;
getConfirmationInfo(this.state.key).catch((error) => {
toastr.error(this.props.t(`${error}`));
history.push("/");
tryRedirectTo(defaultPage);
});
window.addEventListener("keydown", this.onKeyPress);
@ -221,6 +221,7 @@ function mapStateToProps(state) {
isAuthenticated: state.auth.isAuthenticated,
greetingTitle: state.auth.settings.greetingSettings,
hashSettings: state.auth.settings.hashSettings,
defaultPage: state.auth.settings.defaultPage,
};
}

View File

@ -50,7 +50,7 @@ const PhoneForm = (props) => {
const buttonTranslation = `Enter number`;
const onSubmit = () => {
console.log("onSubmit CHANGE");
console.log("onSubmit CHANGE"); //TODO: Why do nothing?
};
const onKeyPress = (target) => {

View File

@ -19,7 +19,7 @@ import {
createConfirmUser,
} from "../../../../store/confirm/actions";
const { logout, login } = store.auth.actions;
const { createPasswordHash } = commonUtils;
const { createPasswordHash, tryRedirectTo } = commonUtils;
const inputWidth = "400px";
const ConfirmContainer = styled.div`
@ -89,7 +89,7 @@ class Confirm extends React.PureComponent {
onSubmit = () => {
this.setState({ isLoading: true }, () => {
const { history, createConfirmUser, linkData, hashSettings } = this.props;
const { defaultPage, createConfirmUser, linkData, hashSettings } = this.props;
const isVisitor = parseInt(linkData.emplType) === 2;
this.setState({ errorText: "" });
@ -142,7 +142,7 @@ class Confirm extends React.PureComponent {
createConfirmUser(registerData, loginData, this.state.key)
.then(() => {
toastr.success("User has been created successfully");
return history.push("/");
tryRedirectTo(defaultPage);
})
.catch((error) => {
console.error("confirm error", error);
@ -368,6 +368,7 @@ function mapStateToProps(state) {
settings: state.auth.settings.passwordSettings,
greetingTitle: state.auth.settings.greetingSettings,
hashSettings: state.auth.settings.hashSettings,
defaultPage: state.auth.settings.defaultPage
};
}
@ -375,5 +376,5 @@ export default connect(mapStateToProps, {
getConfirmationInfo,
createConfirmUser,
login,
logout,
logout
})(withRouter(withTranslation()(CreateUserForm)));

View File

@ -78,7 +78,7 @@ Tiles.propTypes = {
isPrimary: PropTypes.bool.isRequired,
};
const Body = ({ modules, match, isLoaded, organizationName }) => {
const Body = ({ modules, match, isLoaded }) => {
const { t } = useTranslation("translation", { i18n });
const { error } = match.params;
@ -106,13 +106,18 @@ const Body = ({ modules, match, isLoaded, organizationName }) => {
);
};
const Home = (props) => (
<PageLayout>
<PageLayout.SectionBody>
<Body {...props} />
</PageLayout.SectionBody>
</PageLayout>
);
const Home = (props) => {
const { defaultPage } = props;
return utils.tryRedirectTo(defaultPage) ? (
<></>
) : (
<PageLayout>
<PageLayout.SectionBody>
<Body {...props} />
</PageLayout.SectionBody>
</PageLayout>
);
};
Home.propTypes = {
modules: PropTypes.array.isRequired,
@ -121,11 +126,11 @@ Home.propTypes = {
function mapStateToProps(state) {
const { modules, isLoaded, settings } = state.auth;
const { organizationName } = settings;
const { defaultPage } = settings;
return {
modules,
isLoaded,
organizationName,
defaultPage,
};
}

View File

@ -1,7 +1,6 @@
import differenceWith from "lodash/differenceWith";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/es6/react";
import isEmpty from "lodash/isEmpty";
export const isArrayEqual = (arr1, arr2) => {
return isEmpty(differenceWith(arr1, arr2, isEqual));
return isEmpty(equal(arr1, arr2));
};

View File

@ -4,9 +4,9 @@ import { ValidationResult } from "./../helpers/constants";
import { Loader } from "asc-web-components";
import { connect } from "react-redux";
import { withRouter } from "react-router";
import { api, constants, utils, PageLayout } from "asc-web-common";
import { api, utils, PageLayout, store } from "asc-web-common";
const { isAuthenticated } = store.auth.selectors;
const { checkConfirmLink } = api.user;
const { AUTH_KEY } = constants;
const { getObjectByLocation } = utils;
class ConfirmRoute extends React.Component {
@ -19,14 +19,14 @@ class ConfirmRoute extends React.Component {
}
componentDidMount() {
const { forUnauthorized, history } = this.props;
const { forUnauthorized, history, isAuthenticated } = this.props;
if (forUnauthorized && localStorage.getItem(AUTH_KEY))
if (forUnauthorized && isAuthenticated)
return history.push(
`/error=Access error. You should be unauthorized for performing this action`
);
const { location, isAuthenticated } = this.props;
const { location } = this.props;
const { search } = location;
const queryParams = getObjectByLocation(location);
@ -100,7 +100,7 @@ class ConfirmRoute extends React.Component {
function mapStateToProps(state) {
return {
isAuthenticated: state.auth.isAuthenticated,
isAuthenticated: isAuthenticated(state)
};
}

View File

@ -5,10 +5,7 @@ import store from "./store/store";
import "./custom.scss";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
import { ErrorBoundary, utils } from "asc-web-common";
const { redirectToDefaultPage } = utils;
redirectToDefaultPage();
import { ErrorBoundary } from "asc-web-common";
ReactDOM.render(
<Provider store={store}>

View File

@ -30,9 +30,27 @@ export function createConfirmUser(registerData, loginData, key) {
return (dispatch) => {
return api.people
.createUser(data, key)
.then((user) => dispatch(setCurrentUser(user)))
.then(() => api.user.login(loginData.userName, loginData.passwordHash))
.then(() => loadInitInfo(dispatch));
.then((user) => {
dispatch(setCurrentUser(user));
})
.then(() => {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
login(
loginData.userName,
loginData.passwordHash
)(dispatch)
.then(() => {
resolve(loadInitInfo(dispatch));
})
.catch((e) => {
reject(e);
});
}, 1000);
});
return promise;
});
};
}
@ -56,7 +74,22 @@ export function activateConfirmUser(
return api.people.updateActivationStatus(activationStatus, userId, key);
})
.then((data) => {
return dispatch(login(loginData.userName, loginData.passwordHash));
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
login(
data.userName,
data.passwordHash
)(dispatch)
.then(() => {
resolve(loadInitInfo(dispatch));
})
.catch((e) => {
reject(e);
});
}, 1000);
});
return promise;
})
.then((data) => {
return api.people.updateUser(changedData);

View File

@ -52,42 +52,41 @@
source-map "^0.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.8.4":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd"
integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-module-transforms" "^7.12.1"
"@babel/helpers" "^7.12.5"
"@babel/parser" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/template" "^7.12.7"
"@babel/traverse" "^7.12.9"
"@babel/types" "^7.12.7"
"@babel/traverse" "^7.12.10"
"@babel/types" "^7.12.10"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/generator@^7.12.5", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de"
integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==
"@babel/generator@^7.12.10", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460"
integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==
dependencies:
"@babel/types" "^7.12.5"
"@babel/types" "^7.12.10"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d"
integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
version "7.10.4"
@ -97,14 +96,14 @@
"@babel/helper-explode-assignable-expression" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.4"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48"
integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==
"@babel/helper-builder-react-jsx-experimental@^7.12.10", "@babel/helper-builder-react-jsx-experimental@^7.12.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.10.tgz#a58cb96a793dc0fcd5c9ed3bb36d62fdc60534c2"
integrity sha512-3Kcr2LGpL7CTRDTTYm1bzeor9qZbxbvU2AxsLA6mUG9gYarSfIKMK0UlU+azLWI+s0+BH768bwyaziWB2NOJlQ==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-module-imports" "^7.12.1"
"@babel/types" "^7.12.1"
"@babel/helper-annotate-as-pure" "^7.12.10"
"@babel/helper-module-imports" "^7.12.5"
"@babel/types" "^7.12.10"
"@babel/helper-builder-react-jsx@^7.10.4":
version "7.10.4"
@ -169,11 +168,11 @@
"@babel/types" "^7.10.4"
"@babel/helper-get-function-arity@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf"
integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==
dependencies:
"@babel/types" "^7.10.4"
"@babel/types" "^7.12.10"
"@babel/helper-hoist-variables@^7.10.4":
version "7.10.4"
@ -212,11 +211,11 @@
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c"
integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d"
integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==
dependencies:
"@babel/types" "^7.12.7"
"@babel/types" "^7.12.10"
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.10.4"
@ -301,10 +300,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056"
integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==
"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81"
integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==
"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.12.1"
@ -788,27 +787,27 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
"@babel/plugin-transform-react-jsx-self@^7.12.1", "@babel/plugin-transform-react-jsx-self@^7.9.0":
"@babel/plugin-transform-react-jsx-self@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28"
integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx-source@^7.12.1", "@babel/plugin-transform-react-jsx-source@^7.9.0":
"@babel/plugin-transform-react-jsx-source@^7.9.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b"
integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-jsx@^7.12.7", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f"
integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==
"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.9.1":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.10.tgz#a7af3097c73479123594c8c8fe39545abebd44e3"
integrity sha512-MM7/BC8QdHXM7Qc1wdnuk73R4gbuOpfrSUgfV/nODGc86sPY1tgmY2M9E9uAnf2e4DOIp8aKGWqgZfQxnTNGuw==
dependencies:
"@babel/helper-builder-react-jsx" "^7.10.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.4"
"@babel/helper-builder-react-jsx-experimental" "^7.12.10"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.12.1"
@ -873,10 +872,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a"
integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==
"@babel/plugin-transform-typeof-symbol@^7.12.10", "@babel/plugin-transform-typeof-symbol@^7.8.4":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b"
integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@ -971,9 +970,9 @@
semver "^5.5.0"
"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.8.4":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55"
integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab"
integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA==
dependencies:
"@babel/compat-data" "^7.12.7"
"@babel/helper-compilation-targets" "^7.12.5"
@ -1034,12 +1033,12 @@
"@babel/plugin-transform-spread" "^7.12.1"
"@babel/plugin-transform-sticky-regex" "^7.12.7"
"@babel/plugin-transform-template-literals" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.1"
"@babel/plugin-transform-typeof-symbol" "^7.12.10"
"@babel/plugin-transform-unicode-escapes" "^7.12.1"
"@babel/plugin-transform-unicode-regex" "^7.12.1"
"@babel/preset-modules" "^0.1.3"
"@babel/types" "^7.12.7"
core-js-compat "^3.7.0"
"@babel/types" "^7.12.10"
core-js-compat "^3.8.0"
semver "^5.5.0"
"@babel/preset-modules@^0.1.3":
@ -1066,16 +1065,14 @@
"@babel/plugin-transform-react-jsx-source" "^7.9.0"
"@babel/preset-react@^7.0.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b"
integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9"
integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-react-display-name" "^7.12.1"
"@babel/plugin-transform-react-jsx" "^7.12.7"
"@babel/plugin-transform-react-jsx" "^7.12.10"
"@babel/plugin-transform-react-jsx-development" "^7.12.7"
"@babel/plugin-transform-react-jsx-self" "^7.12.1"
"@babel/plugin-transform-react-jsx-source" "^7.12.1"
"@babel/plugin-transform-react-pure-annotations" "^7.12.1"
"@babel/preset-typescript@7.9.0":
@ -1117,25 +1114,25 @@
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f"
integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a"
integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.5"
"@babel/generator" "^7.12.10"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/parser" "^7.12.10"
"@babel/types" "^7.12.10"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13"
integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260"
integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
@ -1547,9 +1544,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
version "7.0.16"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.16.tgz#0bbbf70c7bc4193210dd27e252c51260a37cd6a7"
integrity sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w==
version "7.11.0"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"
integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==
dependencies:
"@babel/types" "^7.3.0"
@ -1607,9 +1604,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
version "14.14.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785"
integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==
version "14.14.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.12.tgz#0b1d86f8c40141091285dea02e4940df73bba43f"
integrity sha512-ASH8OPHMNlkdjrEdmoILmzFfsJICvhBsFfAum4aKZ/9U4B6M6tTmTPh+f3ttWdD74CEGV5XvXWkbyfSdXaTd7g==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -2159,7 +2156,7 @@ asap@~2.0.6:
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
"asc-web-common@file:../../packages/asc-web-common":
version "1.0.281"
version "1.0.289"
dependencies:
axios "^0.19.1"
history "4.10.1"
@ -2176,7 +2173,7 @@ asap@~2.0.6:
sjcl "^1.0.8"
"asc-web-components@file:../../packages/asc-web-components":
version "1.0.488"
version "1.0.492"
dependencies:
email-addresses "^3.1.0"
html-to-react "^1.4.2"
@ -2730,16 +2727,16 @@ browserslist@4.10.0:
node-releases "^1.1.52"
pkg-up "^3.1.0"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.7, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.14.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1:
version "4.16.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b"
integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==
dependencies:
caniuse-lite "^1.0.30001157"
caniuse-lite "^1.0.30001165"
colorette "^1.2.1"
electron-to-chromium "^1.3.591"
electron-to-chromium "^1.3.621"
escalade "^3.1.1"
node-releases "^1.1.66"
node-releases "^1.1.67"
bser@2.1.1:
version "2.1.1"
@ -2890,12 +2887,12 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
dependencies:
pascal-case "^3.1.1"
tslib "^1.10.0"
pascal-case "^3.1.2"
tslib "^2.0.3"
camelcase-keys@^2.0.0:
version "2.1.0"
@ -2935,10 +2932,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
version "1.0.30001162"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001162.tgz#9f83aad1f42539ce9aab58bb177598f2f8e22ec6"
integrity sha512-E9FktFxaNnp4ky3ucIGzEXLM+Knzlpuq1oN1sFAU0KeayygabGTmOsndpo8QrL4D9pcThlf4D2pUKaDxPCUmVw==
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165:
version "1.0.30001165"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f"
integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==
capture-exit@^2.0.0:
version "2.0.0"
@ -3398,18 +3395,18 @@ copy-webpack-plugin@^5.1.1:
serialize-javascript "^4.0.0"
webpack-log "^2.0.0"
core-js-compat@^3.6.2, core-js-compat@^3.7.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.0.tgz#3248c6826f4006793bd637db608bca6e4cd688b1"
integrity sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==
core-js-compat@^3.6.2, core-js-compat@^3.8.0:
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e"
integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==
dependencies:
browserslist "^4.14.7"
browserslist "^4.15.0"
semver "7.0.0"
core-js-pure@^3.0.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.0.tgz#4cdd2eca37d49cda206b66e26204818dba77884a"
integrity sha512-fRjhg3NeouotRoIV0L1FdchA6CK7ZD+lyINyMoz19SyV+ROpC4noS1xItWHFtwZdlqfMfVPJEyEGdfri2bD1pA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119"
integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g==
core-js@^2.4.0, core-js@^2.6.4:
version "2.6.12"
@ -3417,9 +3414,9 @@ core-js@^2.4.0, core-js@^2.6.4:
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.5.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.0.tgz#0fc2d4941cadf80538b030648bb64d230b4da0ce"
integrity sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==
version "3.8.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47"
integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@ -4093,12 +4090,12 @@ dom-serializer@0:
entities "^2.0.0"
dom-serializer@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58"
integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==
version "1.2.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1"
integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.0.0"
domhandler "^4.0.0"
entities "^2.0.0"
domain-browser@^1.1.1:
@ -4111,10 +4108,10 @@ domelementtype@1, domelementtype@^1.3.1:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
domelementtype@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971"
integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==
domelementtype@^2.0.1, domelementtype@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e"
integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==
domexception@^1.0.1:
version "1.0.1"
@ -4130,13 +4127,20 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
domhandler@^3.0.0, domhandler@^3.3.0:
domhandler@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e"
integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==
dependencies:
domelementtype "^2.1.0"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@ -4154,21 +4158,21 @@ domutils@^1.5.1, domutils@^1.7.0:
domelementtype "1"
domutils@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b"
integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==
version "2.4.4"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3"
integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
domhandler "^3.3.0"
domhandler "^4.0.0"
dot-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa"
integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==
dot-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
dot-prop@^5.2.0:
version "5.3.0"
@ -4220,10 +4224,10 @@ ejs@^2.6.1:
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.591:
version "1.3.610"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.610.tgz#1254eb394acd220a836ea1f203f8cded4e487052"
integrity sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g==
electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.621:
version "1.3.621"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.621.tgz#0bbe2100ef0b28f88d0b1101fbdf433312f69be0"
integrity sha512-FeIuBzArONbAmKmZIsZIFGu/Gc9AVGlVeVbhCq+G2YIl6QkT0TDn2HKN/FMf1btXEB9kEmIuQf3/lBTVAbmFOg==
elliptic@^6.5.3:
version "6.5.3"
@ -4812,7 +4816,7 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -5894,9 +5898,9 @@ inherits@2.0.3:
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
inquirer@7.0.4:
version "7.0.4"
@ -6000,9 +6004,11 @@ is-accessor-descriptor@^1.0.0:
kind-of "^6.0.0"
is-arguments@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
dependencies:
call-bind "^1.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
@ -6175,9 +6181,9 @@ is-module@^1.0.0:
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
is-negative-zero@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-number@^3.0.0:
version "3.0.0"
@ -6785,9 +6791,9 @@ js-tokens@^3.0.2:
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1:
version "3.14.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -7218,12 +7224,12 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
lower-case@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
lower-case@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
dependencies:
tslib "^1.10.0"
tslib "^2.0.3"
lru-cache@^4.0.1:
version "4.1.5"
@ -7240,6 +7246,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
@ -7584,11 +7597,16 @@ ms@2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
ms@2.1.2, ms@^2.1.1:
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@ -7654,13 +7672,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
no-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
dependencies:
lower-case "^2.0.1"
tslib "^1.10.0"
lower-case "^2.0.2"
tslib "^2.0.3"
node-forge@^0.10.0:
version "0.10.0"
@ -7735,7 +7753,7 @@ node-notifier@^5.4.2:
shellwords "^0.1.1"
which "^1.3.0"
node-releases@^1.1.52, node-releases@^1.1.66:
node-releases@^1.1.52, node-releases@^1.1.67:
version "1.1.67"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
@ -7876,9 +7894,9 @@ object-hash@^2.0.1:
integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==
object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
version "1.9.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
object-is@^1.0.1:
version "1.1.4"
@ -8168,12 +8186,12 @@ parallel-transform@^1.1.0:
readable-stream "^2.1.5"
param-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238"
integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
dependencies:
dot-case "^3.0.3"
tslib "^1.10.0"
dot-case "^3.0.4"
tslib "^2.0.3"
parent-module@^1.0.0:
version "1.0.1"
@ -8233,13 +8251,13 @@ parseurl@~1.3.2, parseurl@~1.3.3:
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
pascal-case@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
pascal-case@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
dependencies:
no-case "^3.0.3"
tslib "^1.10.0"
no-case "^3.0.4"
tslib "^2.0.3"
pascalcase@^0.1.1:
version "0.1.1"
@ -9420,9 +9438,9 @@ react-app-polyfill@^1.0.6:
whatwg-fetch "^3.0.0"
react-app-rewired@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.6.tgz#33ee3076a7f34d6a7c94e649cac67e7c8c580de8"
integrity sha512-06flj0kK5tf/RN4naRv/sn6j3sQd7rsURoRLKLpffXDzJeNiAaTNic+0I8Basojy5WDwREkTqrMLewSAjcb13w==
version "2.1.7"
resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-2.1.7.tgz#b229d32b93b076059e62b06e8117109b92599e18"
integrity sha512-SIq7yRIohZzeO432WHlfvEEzOYs4JfOIoUIU663eIFt/ucUoqJxQwW1FClhhL21V6F8bqI+8URJoBlB0yUEKaA==
dependencies:
semver "^5.6.0"
@ -9659,9 +9677,9 @@ react-string-format@^0.1.0:
integrity sha512-xkIhnh2t1YmS4r8Zz92qs0Ia8EMbBoRlMEvvMtC0sQBSxxBmBujfssSA4PYYi0w2WvJYSEktgilB+320/mlsOQ==
react-svg@^11.0.9:
version "11.1.3"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.3.tgz#14c3f1552b0893319e7466e22797cf7f08a3bfb8"
integrity sha512-OSrg4mVXgGK+Qypraa0d68bI8e6ubcBGes9lqcaMdSgPjfrzFTe4yaG94UdROwk5JvFVLKTquc4lRuvqOY92KQ==
version "11.1.4"
resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-11.1.4.tgz#1a828bcf6193bae09609080fbcae29cb6bed62dc"
integrity sha512-Xx3dZNCbTc4wgogf5joE2PcJBcKplfVJGAvgYqIu+/XNSqB1KTutmebn77bO9XT6uHXSBSoy11jCDw/6fddAFQ==
dependencies:
"@babel/runtime" "^7.12.5"
"@tanem/svg-injector" "^8.1.0"
@ -10397,9 +10415,11 @@ semver@7.0.0:
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
semver@~5.3.0:
version "5.3.0"
@ -11400,7 +11420,7 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@ -11480,9 +11500,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.22:
version "0.7.22"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3"
integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==
version "0.7.23"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b"
integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
@ -12333,9 +12353,9 @@ xmlchars@^2.1.1:
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xregexp@^4.3.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.0.tgz#29660f5d6567cd2ef981dd4a50cb05d22c10719d"
integrity sha512-83y4aa8o8o4NZe+L+46wpa+F1cWR/wCGOWI3tzqUso0w3/KAvXy0+Di7Oe/cbNMixDR4Jmi7NEybWU6ps25Wkg==
version "4.4.1"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
dependencies:
"@babel/runtime-corejs3" "^7.12.1"
@ -12345,9 +12365,9 @@ xtend@^4.0.0, xtend@~4.0.1:
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
version "4.0.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
yallist@^2.1.2:
version "2.1.2"

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-common",
"version": "1.0.282",
"version": "1.0.289",
"description": "Ascensio System SIA common components and solutions library",
"license": "AGPL-3.0",
"files": [
@ -26,6 +26,7 @@
},
"dependencies": {
"axios": "^0.19.1",
"fast-deep-equal": "^3.1.3",
"history": "4.10.1",
"lodash": "4.17.19",
"lodash-es": "4.17.15",

View File

@ -1,5 +1,4 @@
import axios from "axios";
import { AUTH_KEY } from "../constants";
//import history from "../history";
const PREFIX = "api";
@ -16,16 +15,16 @@ const client = axios.create({
timeout: 30000, // default is `0` (no timeout)
});
setAuthorizationToken(localStorage.getItem(AUTH_KEY));
client.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (!error.response) return Promise.reject(error);
switch (true) {
case error.response.status === 401:
setAuthorizationToken();
setWithCredentialsStatus(false);
window.location.href = "/login";
break;
case error.response.status === 402:
@ -41,13 +40,8 @@ client.interceptors.response.use(
}
);
export function setAuthorizationToken(token) {
client.defaults.withCredentials = true;
if (token) {
localStorage.setItem(AUTH_KEY, true);
} else {
localStorage.clear();
}
export function setWithCredentialsStatus(state) {
client.defaults.withCredentials = state;
}
export function setClientBasePath(path) {

View File

@ -4,10 +4,12 @@ import FilesFilter from "./filter";
import { FolderType } from "../../constants";
import find from "lodash/find";
export function openEdit(fileId) {
export function openEdit(fileId, doc) {
const params = doc ? `?doc=${doc}` : "";
const options = {
method: "get",
url: `/files/file/${fileId}/openedit`,
url: `/files/file/${fileId}/openedit${params}`,
};
return request(options);
@ -394,6 +396,15 @@ export function getShareFiles(fileId) {
});
}
export function setExternalAccess(fileId, accessType) {
const data = { share: accessType };
return request({
method: "put",
url: `/files/${fileId}/setacelink`,
data,
});
}
export function setShareFolder(folderId, share, notify, sharingMessage) {
const data = { share, notify, sharingMessage };
return request({
@ -495,7 +506,7 @@ export function convertFile(fileId) {
});
}
export function getConvertFile(fileId) {
export function getFileConversationProgress(fileId) {
return request({
method: "get",
url: `/files/file/${fileId}/checkconversion`,

View File

@ -1,12 +1,14 @@
import { request } from "../client";
import * as fakeGroup from "./fake";
export function getGroupList(fake = false) {
export function getGroupList(fake = false, searchValue) {
const params = searchValue ? `?filtervalue=${searchValue}` : "";
return fake
? fakeGroup.getGroupList()
: request({
method: "get",
url: "/group",
url: `/group${params}`,
});
}

View File

@ -1,4 +1,4 @@
import { request, setAuthorizationToken } from "../client";
import { request, setWithCredentialsStatus } from "../client";
export function login(userName, passwordHash) {
const data = {
@ -10,9 +10,6 @@ export function login(userName, passwordHash) {
method: "post",
url: "/authentication.json",
data,
}).then((tokenData) => {
setAuthorizationToken(true);
return Promise.resolve(tokenData);
});
}
@ -20,9 +17,6 @@ export function logout() {
return request({
method: "post",
url: "/authentication/logout",
}).then(() => {
setAuthorizationToken();
return Promise.resolve();
});
}
@ -33,3 +27,14 @@ export function checkConfirmLink(data) {
data,
});
}
export function checkIsAuthenticated() {
return request({
method: "get",
url: "/authentication",
withCredentials: true,
}).then((state) => {
setWithCredentialsStatus(state);
return state;
});
}

View File

@ -13,8 +13,8 @@ import withReadme from "storybook-readme/with-readme";
import Readme from "./README.md";
import AdvancedSelector2 from ".";
import Section from "../../../.storybook/decorators/section";
import { Button, Avatar, Text } from "asc-web-components";
import isEqual from "lodash/isEqual";
import { Button } from "asc-web-components";
import equal from "fast-deep-equal/react";
import UserTooltip from "../PeopleSelector/sub-components/UserTooltip";
function getRandomInt(min, max) {
@ -137,7 +137,7 @@ class ADSelectorExample extends React.Component {
componentDidUpdate(prevProps) {
const { total, options, isOpen } = this.props;
if (!isEqual(prevProps.options, options)) {
if (!equal(prevProps.options, options)) {
this.setState({
options: options,
});

View File

@ -10,7 +10,6 @@ const StyledFooter = styled.div`
props.withEmbeddedComponent &&
css`
display: flex;
padding: 16px 0;
`}
${(props) =>

View File

@ -125,6 +125,7 @@ const StyledSelector = styled(Container)`
/* background-color: red; */
padding: 16px 16px 0 16px;
grid-row-gap: 2px;
overflow: hidden;
grid-template-columns: 1fr;
grid-template-rows: ${(props) =>
@ -137,7 +138,7 @@ const StyledSelector = styled(Container)`
? "100px"
: "30px"
: props.groups && props.groups.length > 0
? "70px"
? "75px"
: "30px"
: "30px"} 1fr;
grid-template-areas: "header-options" "body-options";
@ -207,7 +208,7 @@ const StyledSelector = styled(Container)`
.body-options {
grid-area: body-options;
margin-left: -8px;
margin-top: 5px;
margin-top: 2px;
@media ${tablet} {
width: 290px;

View File

@ -1,7 +1,7 @@
import React from "react";
import PropTypes from "prop-types";
import { SearchInput } from "asc-web-components";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import FilterBlock from "./sub-components/FilterBlock";
import SortComboBox from "./sub-components/SortComboBox";
import ViewSelector from "./sub-components/ViewSelector";
@ -143,9 +143,9 @@ class FilterInput extends React.Component {
}
if (
(!isEqual(selectedFilterData.filterValues, filterValues) ||
inputValue !== searchText) &&
sectionWidth !== prevProps.sectionWidth
!equal(selectedFilterData.filterValues, filterValues) ||
inputValue !== searchText // &&
//sectionWidth !== prevProps.sectionWidth
) {
const sortData = getSortData();
const filterValues = this.getDefaultFilterData();
@ -164,7 +164,7 @@ class FilterInput extends React.Component {
}
if (
!isEqual(
!equal(
prevProps.selectedFilterData.filterValues,
selectedFilterData.filterValues
) &&
@ -189,7 +189,7 @@ class FilterInput extends React.Component {
} = this.props;
if (
!isEqual(selectedFilterData, nextProps.selectedFilterData) ||
!equal(selectedFilterData, nextProps.selectedFilterData) ||
this.props.viewAs !== nextProps.viewAs ||
this.props.widthProp !== nextProps.widthProp ||
sectionWidth !== nextProps.sectionWidth
@ -206,7 +206,7 @@ class FilterInput extends React.Component {
)
return true;
return !isEqual(this.state, nextState);
return !equal(this.state, nextState);
}
onChangeSortDirection = (key) => {

View File

@ -3,7 +3,7 @@ import FilterButton from "./FilterButton";
import HideFilter from "./HideFilter";
import { ComboBox } from "asc-web-components";
import CloseButton from "./CloseButton";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import PropTypes from "prop-types";
import {
StyledFilterItem,
@ -291,8 +291,8 @@ class FilterBlock extends React.Component {
const { needUpdateFilter } = this.props;
if (
(needUpdate || needUpdateFilter) &&
(!isEqual(prevState.openFilterItems, this.state.openFilterItems) ||
!isEqual(prevState.hiddenFilterItems, this.state.hiddenFilterItems))
(!equal(prevState.openFilterItems, this.state.openFilterItems) ||
!equal(prevState.hiddenFilterItems, this.state.hiddenFilterItems))
) {
this.props.onFilterRender();
this.setNeedUpdate(false);
@ -302,10 +302,10 @@ class FilterBlock extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
const { hiddenFilterItems, openFilterItems } = nextProps;
if (!isEqual(this.props, nextProps)) {
if (!equal(this.props, nextProps)) {
if (
!isEqual(this.props.hiddenFilterItems, hiddenFilterItems) ||
!isEqual(this.props.openFilterItems, openFilterItems)
!equal(this.props.hiddenFilterItems, hiddenFilterItems) ||
!equal(this.props.openFilterItems, openFilterItems)
) {
this.setState({
hiddenFilterItems,
@ -316,7 +316,7 @@ class FilterBlock extends React.Component {
return true;
}
return !isEqual(this.state, nextState);
return !equal(this.state, nextState);
}
onDeleteFilterItem = (key) => {

View File

@ -1,5 +1,5 @@
import React from "react";
import isEqual from "lodash/isEqual";
import equal from "fast-deep-equal/react";
import {
ComboBox,
IconButton,
@ -65,7 +65,7 @@ class SortComboBox extends React.Component {
});
return true;
}
return !isEqual(this.props, nextProps) || !isEqual(this.state, nextState);
return !equal(this.props, nextProps) || !equal(this.state, nextState);
}
onToggleAction = () => {

View File

@ -0,0 +1,64 @@
import React from "react";
import PropTypes from "prop-types";
import {
StyledFloatingButton,
StyledAlertIcon,
StyledCircleWrap,
StyledCircle,
} from "./StyledFloatingButton";
import { Icons } from "asc-web-components";
const FloatingButton = ({ id, className, style, ...rest }) => {
const { icon, alert, percent } = rest;
return (
<StyledCircleWrap id={id} className={className} style={style} icon={icon}>
<StyledCircle percent={percent}>
<div className="circle__mask circle__full">
<div className="circle__fill"></div>
</div>
<div className="circle__mask">
<div className="circle__fill"></div>
</div>
<StyledFloatingButton>
{icon == "upload" ? (
<Icons.ButtonUploadIcon />
) : icon == "file" ? (
<Icons.ButtonFileIcon />
) : icon == "trash" ? (
<Icons.ButtonTrashIcon />
) : icon == "move" ? (
<Icons.ButtonMoveIcon />
) : (
<Icons.ButtonDuplicateIcon />
)}
<StyledAlertIcon>
{alert ? <Icons.ButtonAlertIcon size="medium" /> : <></>}
</StyledAlertIcon>
</StyledFloatingButton>
</StyledCircle>
</StyledCircleWrap>
);
};
FloatingButton.propTypes = {
id: PropTypes.string,
className: PropTypes.string,
style: PropTypes.object,
icon: PropTypes.oneOf(["upload", "file", "trash", "move", "duplicate"]),
alert: PropTypes.bool,
percent: PropTypes.number,
};
FloatingButton.defaultProps = {
id: undefined,
className: undefined,
style: undefined,
icon: "upload",
alert: false,
percent: 0,
};
export default FloatingButton;

View File

@ -0,0 +1,30 @@
import React from "react";
import { storiesOf } from "@storybook/react";
import {
withKnobs,
select,
boolean,
number,
} from "@storybook/addon-knobs/react";
import Section from "../../../.storybook/decorators/section";
import withReadme from "storybook-readme/with-readme";
import Readme from "./README.md";
import FloatingButton from "./index";
storiesOf("Components|Floating Button", module)
.addDecorator(withKnobs)
.addDecorator(withReadme(Readme))
.add("floating button", () => {
const iconVariables = ["upload", "file", "trash", "move", "duplicate"];
return (
<Section>
<h1>Floating button</h1>
<FloatingButton
icon={select("icon", iconVariables, "upload")}
alert={boolean("alert", false)}
percent={number("percent", 50)}
/>
</Section>
);
});

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