Merge branch 'release/rc-v1.2.0' of github.com:ONLYOFFICE/DocSpace into release/rc-v1.2.0

# Conflicts:
#	packages/client/src/helpers/confirmRoute.js
This commit is contained in:
Akmal Isomadinov 2022-12-22 15:47:55 +05:00
commit 532f94ba0c
140 changed files with 736 additions and 594 deletions

View File

@ -88,7 +88,7 @@ echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] http://download.onlyoff
mkdir -p -m 700 $HOME/.gnupg
gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/onlyoffice.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5
chmod 644 /usr/share/keyrings/onlyoffice.gpg
echo "deb http://static.teamlab.info.s3.amazonaws.com/repo/4testing/debian stable main" | sudo tee /etc/apt/sources.list.d/onlyoffice4testing.list
echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] http://static.teamlab.info.s3.amazonaws.com/repo/4testing/debian stable main" | sudo tee /etc/apt/sources.list.d/onlyoffice4testing.list
declare -x LANG="en_US.UTF-8"
declare -x LANGUAGE="en_US:en"

View File

@ -70,7 +70,7 @@ DATABASE_MIGRATION="true"
ELK_VERSION=""
ELK_HOST=""
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/4testing-documentserver-ee:latest
DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/4testing-documentserver-ee:latest"
DOCUMENT_SERVER_JWT_SECRET=""
DOCUMENT_SERVER_JWT_HEADER=""
DOCUMENT_SERVER_HOST=""
@ -124,7 +124,7 @@ while [ "$1" != "" ]; do
fi
;;
-ids | --installdocumentserver )
-idocs | --installdocumentserver )
if [ "$2" != "" ]; then
INSTALL_DOCUMENT_SERVER=$2
shift
@ -138,14 +138,14 @@ while [ "$1" != "" ]; do
fi
;;
-ira | --installrabbitmq )
-irb | --installrabbitmq )
if [ "$2" != "" ]; then
INSTALL_RABBITMQ=$2
shift
fi
;;
-ire | --installredis )
-ird | --installredis )
if [ "$2" != "" ]; then
INSTALL_REDIS=$2
shift
@ -294,11 +294,11 @@ while [ "$1" != "" ]; do
echo " -p, --password dockerhub password"
echo " -ids, --installdocspace install or update $PRODUCT (true|false)"
echo " -tag, --dockertag select the version to install $PRODUCT (latest|develop|version number)"
echo " -ids, --installdocumentserver install or update document server (true|false)"
echo " -idocs, --installdocumentserver install or update document server (true|false)"
echo " -di, --documentserverimage document server image name"
echo " -imysql, --installmysql install or update mysql (true|false)"
echo " -ira, --installrabbitmq install or update rabbitmq (true|false)"
echo " -ire, --installredis install or update redis (true|false)"
echo " -irb, --installrabbitmq install or update rabbitmq (true|false)"
echo " -ird, --installredis install or update redis (true|false)"
echo " -mysqlrp, --mysqlrootpassword mysql server root password"
echo " -mysqld, --mysqldatabase $PRODUCT database name"
echo " -mysqlu, --mysqluser $PRODUCT database user"
@ -309,25 +309,26 @@ while [ "$1" != "" ]; do
echo " -env, --environment $PRODUCT environment"
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
echo " -ip, --internalport internal $PRODUCT port (default value 5050)"
echo " -ep, --externalport external $PRODUCT port (default value 8092)"
echo " -ep, --externalport external $PRODUCT port (default value 80)"
echo " -mk, --machinekey setting for core.machinekey"
echo " -ls, --local_scripts run the installation from local scripts"
echo " -dbm, --databasemigration database migration (true|false)"
echo " -?, -h, --help this help"
echo
echo " Install all the components without document server:"
echo " bash $HELP_TARGET -ids false"
echo " bash $HELP_TARGET -idocs false"
echo
echo " Install Document Server only. Skip the installation of MYSQL and $PRODUCT:"
echo " bash $HELP_TARGET -ias false -ids true -imysql false -ims false"
echo " bash $HELP_TARGET -ids false -idocs true -imysql false -irb false -ird false"
echo
echo " Update all installed components. Stop the containers that need to be updated, remove them and run the latest versions of the corresponding components. The portal data should be picked up automatically:"
echo " bash $HELP_TARGET -u true"
echo
echo " Update Document Server only to version 4.4.2.20 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -dv 4.4.2.20 -ias false"
echo " Update Document Server only to version 7.2.1.34 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -di onlyoffice/documentserver-ee:7.2.1.34 -ids false"
echo
echo " Update $PRODUCT only to version 0.1.10 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -av 9.1.0.393 -ids false"
echo " Update $PRODUCT only to version 1.2.0 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -tag rc-v1.2.0 -idocs false"
echo
exit 0
;;

View File

@ -64,6 +64,10 @@ public static class ISetupBuilderExtension
if (!string.IsNullOrEmpty(awsAccessKeyId))
{
awsTarget.Credentials = new Amazon.Runtime.BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
}
else
{
conf.RemoveTarget(targetName);
}
}

View File

@ -31,7 +31,7 @@ public class TenantStatusFilter : IResourceFilter
{
private readonly TenantManager _tenantManager;
private readonly ILogger<TenantStatusFilter> _logger;
private readonly string[] _passthroughtRequestEndings = new[] { "preparation-portal", "getrestoreprogress", "settings", "settings.json" }; //TODO add or update when "preparation-portal" will be done
private readonly string[] _passthroughtRequestEndings = new[] { "preparation-portal", "getrestoreprogress", "settings", "settings.json", "colortheme.json", "logos.json", "build.json", "@self.json" }; //TODO add or update when "preparation-portal" will be done
public TenantStatusFilter(ILogger<TenantStatusFilter> logger, TenantManager tenantManager)

View File

@ -38,19 +38,19 @@ public class RedisCacheNotify<T> : ICacheNotify<T> where T : IMessage<T>, new()
public void Publish(T obj, CacheNotifyAction action)
{
Task.Run(() => _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }))
Task.Run(async () => await _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }))
.GetAwaiter()
.GetResult();
}
public async Task PublishAsync(T obj, CacheNotifyAction action)
{
await Task.Run(() => _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }));
await Task.Run(async () => await _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }));
}
public void Subscribe(Action<T> onchange, CacheNotifyAction action)
{
Task.Run(() => _redis.SubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
Task.Run(async () => await _redis.SubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
{
onchange(i.Object);
@ -61,7 +61,7 @@ public class RedisCacheNotify<T> : ICacheNotify<T> where T : IMessage<T>, new()
public void Unsubscribe(CacheNotifyAction action)
{
Task.Run(() => _redis.UnsubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
Task.Run(async () => await _redis.UnsubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
{
return Task.FromResult(true);
})).GetAwaiter()

View File

@ -254,7 +254,7 @@ public class TariffService : ITariffService
}
}
if (tariffId.HasValue)
if (tariffId.HasValue && tariffId.Value != 0)
{
_notify.Publish(new TariffCacheItem { TenantId = tenantId, TariffId = tariffId.Value }, CacheNotifyAction.Insert);
}
@ -734,12 +734,12 @@ public class TariffService : ITariffService
efTariff.CustomerId = "";
}
efTariff = dbContext.AddOrUpdate(r => r.Tariffs, efTariff);
efTariff = dbContext.AddOrUpdate(dbContext.Tariffs, efTariff);
dbContext.SaveChanges();
foreach (var q in tariffInfo.Quotas)
{
dbContext.AddOrUpdate(r => r.TariffRows, new DbTariffRow
dbContext.AddOrUpdate(dbContext.TariffRows, new DbTariffRow
{
TariffId = efTariff.Id,
Quota = q.Id,

View File

@ -161,7 +161,7 @@ class DbAzService : IAzService
private void InsertRecord(AzRecord r)
{
using var userDbContext = _dbContextFactory.CreateDbContext();
userDbContext.AddOrUpdate(r => r.Acl, _mapper.Map<AzRecord, Acl>(r));
userDbContext.AddOrUpdate(userDbContext.Acl, _mapper.Map<AzRecord, Acl>(r));
userDbContext.SaveChanges();
}
}

View File

@ -59,7 +59,7 @@ class DbQuotaService : IQuotaService
ArgumentNullException.ThrowIfNull(quota);
using var coreDbContext = _dbContextFactory.CreateDbContext();
coreDbContext.AddOrUpdate(r => r.Quotas, _mapper.Map<TenantQuota, DbQuota>(quota));
coreDbContext.AddOrUpdate(coreDbContext.Quotas, _mapper.Map<TenantQuota, DbQuota>(quota));
coreDbContext.SaveChanges();
return quota;
@ -123,7 +123,7 @@ class DbQuotaService : IQuotaService
dbTenantQuotaRow.Counter = counter + row.Counter;
}
coreDbContext.AddOrUpdate(r => r.QuotaRows, dbTenantQuotaRow);
coreDbContext.AddOrUpdate(coreDbContext.QuotaRows, dbTenantQuotaRow);
coreDbContext.SaveChanges();
}
}

View File

@ -170,7 +170,7 @@ public class DbSettingsManager
Data = data
};
webstudioDbContext.AddOrUpdate(r => r.WebstudioSettings, s);
webstudioDbContext.AddOrUpdate(webstudioDbContext.WebstudioSettings, s);
webstudioDbContext.SaveChanges();
}

View File

@ -158,7 +158,7 @@ public class DbSubscriptionService : ISubscriptionService
};
using var userDbContext = _dbContextFactory.CreateDbContext();
userDbContext.AddOrUpdate(r => r.Subscriptions, subs);
userDbContext.AddOrUpdate(userDbContext.Subscriptions, subs);
userDbContext.SaveChanges();
}
@ -283,7 +283,7 @@ public class DbSubscriptionService : ISubscriptionService
Tenant = m.Tenant,
Sender = string.Join("|", m.Methods)
};
userDbContext.AddOrUpdate(r => r.SubscriptionMethods, sm);
userDbContext.AddOrUpdate(userDbContext.SubscriptionMethods, sm);
}
userDbContext.SaveChanges();

View File

@ -350,7 +350,7 @@ public class DbTenantService : ITenantService
LastModified = DateTime.UtcNow
};
tenantDbContext.AddOrUpdate(r => r.CoreSettings, settings);
tenantDbContext.AddOrUpdate(tenantDbContext.CoreSettings, settings);
}
tenantDbContext.SaveChanges();

View File

@ -223,8 +223,11 @@ public class EFUserService : IUserService
{
if (sortBy == "type")
{
var q1 = from user in q join userGroup in userDbContext.UserGroups.Where(g => !g.Removed && (g.UserGroupId == Users.Constants.GroupAdmin.ID || g.UserGroupId == Users.Constants.GroupUser.ID))
on user.Id equals userGroup.Userid into joinedGroup from @group in joinedGroup.DefaultIfEmpty() select new { user, @group };
var q1 = from user in q
join userGroup in userDbContext.UserGroups.Where(g => !g.Removed && (g.UserGroupId == Users.Constants.GroupAdmin.ID || g.UserGroupId == Users.Constants.GroupUser.ID))
on user.Id equals userGroup.Userid into joinedGroup
from @group in joinedGroup.DefaultIfEmpty()
select new { user, @group };
q = sortOrderAsc ? q1.OrderBy(r => r.group != null && r.group.UserGroupId == Users.Constants.GroupAdmin.ID ? 1 : r.group == null ? 2 : 3).Select(r => r.user)
: q1.OrderByDescending(u => u.group != null && u.group.UserGroupId == Users.Constants.GroupAdmin.ID ? 1 : u.group == null ? 2 : 3).Select(r => r.user);
@ -412,7 +415,7 @@ public class EFUserService : IUserService
var dbGroup = _mapper.Map<Group, DbGroup>(group);
using var userDbContext = _dbContextFactory.CreateDbContext();
userDbContext.AddOrUpdate(r => r.Groups, dbGroup);
userDbContext.AddOrUpdate(userDbContext.Groups, dbGroup);
userDbContext.SaveChanges();
return group;
@ -465,7 +468,7 @@ public class EFUserService : IUserService
throw new ArgumentOutOfRangeException("Duplicate email.");
}
userDbContext.AddOrUpdate(r => r.Users, _mapper.Map<UserInfo, User>(user));
userDbContext.AddOrUpdate(userDbContext.Users, _mapper.Map<UserInfo, User>(user));
userDbContext.SaveChanges();
tx.Commit();
});
@ -491,7 +494,7 @@ public class EFUserService : IUserService
if (user != null)
{
user.LastModified = userGroupRef.LastModified;
userDbContext.AddOrUpdate(r => r.UserGroups, _mapper.Map<UserGroupRef, UserGroup>(userGroupRef));
userDbContext.AddOrUpdate(userDbContext.UserGroups, _mapper.Map<UserGroupRef, UserGroup>(userGroupRef));
}
userDbContext.SaveChanges();
@ -516,7 +519,7 @@ public class EFUserService : IUserService
};
using var userDbContext = _dbContextFactory.CreateDbContext();
userDbContext.AddOrUpdate(r => r.UserSecurity, us);
userDbContext.AddOrUpdate(userDbContext.UserSecurity, us);
userDbContext.SaveChanges();
}
@ -547,7 +550,7 @@ public class EFUserService : IUserService
userPhoto.Photo = photo;
}
userDbContext.AddOrUpdate(r => r.Photos, userPhoto);
userDbContext.AddOrUpdate(userDbContext.Photos, userPhoto);
}
else if (userPhoto != null)
{

View File

@ -97,10 +97,10 @@ public static class BaseDbContextExtension
services.AddDbContext<T>(OptionsAction);
}
public static T AddOrUpdate<T, TContext>(this TContext b, Expression<Func<TContext, DbSet<T>>> expressionDbSet, T entity) where T : BaseEntity where TContext : DbContext
public static T AddOrUpdate<T, TContext>(this TContext b, DbSet<T> dbSet, T entity) where T : BaseEntity where TContext : DbContext
{
var dbSet = expressionDbSet.Compile().Invoke(b);
var existingBlog = dbSet.Find(entity.GetKeys());
var keys = entity.GetKeys();
var existingBlog = dbSet.Find(keys);
if (existingBlog == null)
{
return dbSet.Add(entity).Entity;

View File

@ -47,7 +47,7 @@ public class TelegramDao
};
using var dbContext = _dbContextFactory.CreateDbContext();
dbContext.AddOrUpdate(r => r.Users, user);
dbContext.AddOrUpdate(dbContext.Users, user);
dbContext.SaveChanges();
}

View File

@ -39,7 +39,7 @@ public class DbRadicale
public void SaveCardDavUser(int tenant, Guid id)
{
using var userDbContext = _dbContextFactory.CreateDbContext();
userDbContext.AddOrUpdate(r => r.UsersDav, new UserDav() { TenantId = tenant, UserId = id });
userDbContext.AddOrUpdate(userDbContext.UsersDav, new UserDav() { TenantId = tenant, UserId = id });
userDbContext.SaveChanges();
}

View File

@ -60,7 +60,7 @@ public static class Crypto
{
using var ms = new MemoryStream();
using var ss = new CryptoStream(ms, hasher.CreateEncryptor(), CryptoStreamMode.Write);
using var plainTextStream = new MemoryStream(Convert.FromBase64String(data));
using var plainTextStream = new MemoryStream(Encoding.Unicode.GetBytes(data));
plainTextStream.CopyTo(ss);
ss.FlushFinalBlock();
hasher.Clear();

View File

@ -39,7 +39,7 @@ public class BackupRepository : IBackupRepository
public void SaveBackupRecord(BackupRecord backup)
{
using var backupContext = _dbContextFactory.CreateDbContext();
backupContext.AddOrUpdate(r => r.Backups, backup);
backupContext.AddOrUpdate(backupContext.Backups, backup);
backupContext.SaveChanges();
}
@ -88,7 +88,7 @@ public class BackupRepository : IBackupRepository
public void SaveBackupSchedule(BackupSchedule schedule)
{
using var backupContext = _dbContextFactory.CreateDbContext();
backupContext.AddOrUpdate(r => r.Schedules, schedule);
backupContext.AddOrUpdate(backupContext.Schedules, schedule);
backupContext.SaveChanges();
}

View File

@ -79,6 +79,6 @@ public class DataStoreBackupStorage : IBackupStorage
protected virtual IDataStore GetDataStore()
{
return _storageFactory.GetStorage(_tenant, "backup", null);
return _storageFactory.GetStorage(_tenant, "backup");
}
}

View File

@ -120,7 +120,7 @@ public class AccountLinker
};
using var accountLinkContext = _accountLinkContextManager.CreateDbContext();
accountLinkContext.AddOrUpdate(r => r.AccountLinks, accountLink);
accountLinkContext.AddOrUpdate(accountLinkContext.AccountLinks, accountLink);
accountLinkContext.SaveChanges();
_accountLinkerStorage.RemoveFromCache(obj);

View File

@ -71,7 +71,7 @@ public class FeedAggregateDataProvider
};
using var feedDbContext = _dbContextFactory.CreateDbContext();
feedDbContext.AddOrUpdate(r => r.FeedLast, feedLast);
feedDbContext.AddOrUpdate(feedDbContext.FeedLast, feedLast);
feedDbContext.SaveChanges();
var aggregatedDate = DateTime.UtcNow;
@ -124,7 +124,7 @@ public class FeedAggregateDataProvider
}
}
feedDbContext.AddOrUpdate(r => r.FeedAggregates, feedAggregate);
feedDbContext.AddOrUpdate(feedDbContext.FeedAggregates, feedAggregate);
foreach (var u in f.Users)
{
@ -134,7 +134,7 @@ public class FeedAggregateDataProvider
UserId = u
};
feedDbContext.AddOrUpdate(r => r.FeedUsers, feedUser);
feedDbContext.AddOrUpdate(feedDbContext.FeedUsers, feedUser);
}
}

View File

@ -91,7 +91,7 @@ public class FeedReadedDataProvider
};
using var feedDbContext = _dbContextFactory.CreateDbContext();
feedDbContext.AddOrUpdate(r => r.FeedReaded, feedReaded);
feedDbContext.AddOrUpdate(feedDbContext.FeedReaded, feedReaded);
feedDbContext.SaveChanges();
}

View File

@ -24,6 +24,8 @@
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
using ASC.Core.Tenants;
namespace ASC.AuditTrail.Models.Mappings;
[Scope]
@ -33,15 +35,18 @@ internal class EventTypeConverter : ITypeConverter<LoginEventQuery, LoginEventDt
private readonly UserFormatter _userFormatter;
private readonly AuditActionMapper _auditActionMapper;
private readonly MessageTarget _messageTarget;
private readonly TenantUtil _tenantUtil;
public EventTypeConverter(
UserFormatter userFormatter,
AuditActionMapper actionMapper,
MessageTarget messageTarget)
MessageTarget messageTarget,
TenantUtil tenantUtil)
{
_userFormatter = userFormatter;
_auditActionMapper = actionMapper;
_messageTarget = messageTarget;
_messageTarget = messageTarget;
_tenantUtil = tenantUtil;
}
public LoginEventDto Convert(LoginEventQuery source, LoginEventDto destination, ResolutionContext context)
@ -83,6 +88,9 @@ internal class EventTypeConverter : ITypeConverter<LoginEventQuery, LoginEventDt
}
result.ActionText = _auditActionMapper.GetActionText(_auditActionMapper.GetMessageMaps(result.Action), result);
result.Date = _tenantUtil.DateTimeFromUtc(result.Date);
result.IP = result.IP.Split(':').Length > 1 ? result.IP.Split(':')[0] : result.IP;
return result;
}
@ -138,6 +146,10 @@ internal class EventTypeConverter : ITypeConverter<LoginEventQuery, LoginEventDt
result.Product = _auditActionMapper.GetProductText(map);
result.Module = _auditActionMapper.GetModuleText(map);
}
result.Date = _tenantUtil.DateTimeFromUtc(result.Date);
result.IP = result.IP.Split(':').Length > 1 ? result.IP.Split(':')[0] : result.IP;
return result;
}

View File

@ -123,7 +123,7 @@ public class BaseIndexer<T> where T : class, ISearchItem
yield return getData(ids[i], ids[i + 1], lastIndexed);
}
webstudioDbContext.AddOrUpdate(r => r.WebstudioIndex, new DbWebstudioIndex()
webstudioDbContext.AddOrUpdate(webstudioDbContext.WebstudioIndex, new DbWebstudioIndex()
{
IndexName = Wrapper.IndexName,
LastModified = now

View File

@ -70,6 +70,21 @@
-->
<script>
console.log("It's WEB CLIENT INIT");
fetch("/static/scripts/config.json")
.then((response) => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
})
.then((config) => {
window.DocSpaceConfig = {
...config,
};
})
.catch((e) => {
console.error(e);
});
</script>
</body>
</html>

View File

@ -41,6 +41,7 @@
"Other": "Other",
"OwnerChange": "Change owner",
"Presentations": "Presentations",
"FormTemplates": "Form templates",
"Remove": "Remove",
"RoleCommentator": "Commentator",
"RoleCommentatorDescription": "Operations with existing files: viewing, commenting.",

View File

@ -40,6 +40,7 @@
"Other": "Другой",
"OwnerChange": "Сменить владельца",
"Presentations": "Презентации",
"FormTemplates": "Шаблоны форм",
"Spreadsheets": "Таблицы",
"SubNewForm": "Пустая",
"SubNewFormFile": " Из текстового файла",

View File

@ -1,10 +1,6 @@
import React from "react";
import { inject, observer } from "mobx-react";
import {
ShareAccessRights,
AppServerConfig,
FileStatus,
} from "@docspace/common/constants";
import { ShareAccessRights, FileStatus } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import Badges from "../components/Badges";

View File

@ -2,7 +2,6 @@ import React from "react";
import { inject, observer } from "mobx-react";
//import toastr from "@docspace/components/toast/toastr";
import {
// AppServerConfig,
// FileAction,
FileStatus,
ShareAccessRights,

View File

@ -1,4 +1,4 @@
import React, { useCallback } from "react";
import React from "react";
import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
@ -6,10 +6,6 @@ import Link from "@docspace/components/link";
import LinkWithDropdown from "@docspace/components/link-with-dropdown";
import Avatar from "@docspace/components/avatar";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
export default function withContent(WrappedContent) {
const WithContent = (props) => {
const {
@ -95,7 +91,7 @@ export default function withContent(WrappedContent) {
/*const redirectToProfile = () => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/accounts/view/${userName}`
)
@ -110,7 +106,7 @@ export default function withContent(WrappedContent) {
clearTimeout(timer);
if (
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/accounts/view/${userName}`
) !== window.location.pathname

View File

@ -26,8 +26,7 @@ export default function withQuickButtons(WrappedComponent) {
? toastr.success(t("Translations:FileUnlocked"))
: toastr.success(t("Translations:FileLocked"))
)
.catch((err) => toastr.error(err))
.finally(() => this.setState({ isLoading: false }));
.catch((err) => toastr.error(err), this.setState({ isLoading: false }))
}
return;
};
@ -57,7 +56,7 @@ export default function withQuickButtons(WrappedComponent) {
isAdmin,
sectionWidth,
viewAs,
isPersonalRoom,
folderCategory,
} = this.props;
const quickButtonsComponent = (
@ -72,7 +71,7 @@ export default function withQuickButtons(WrappedComponent) {
isCanWebEdit={isCanWebEdit}
onClickLock={this.onClickLock}
onClickFavorite={this.onClickFavorite}
isPersonalRoom={isPersonalRoom}
folderCategory={folderCategory}
/>
);
@ -98,9 +97,16 @@ export default function withQuickButtons(WrappedComponent) {
setFavoriteAction,
onSelectItem,
} = filesActionsStore;
const { isPersonalRoom } = treeFoldersStore;
const {
isPersonalFolderRoot,
isArchiveFolderRoot,
isTrashFolder,
} = treeFoldersStore;
const { setSharingPanelVisible } = dialogsStore;
const folderCategory =
isTrashFolder || isArchiveFolderRoot || isPersonalFolderRoot;
return {
theme: auth.settingsStore.theme,
isAdmin: auth.isAdmin,
@ -108,8 +114,7 @@ export default function withQuickButtons(WrappedComponent) {
setFavoriteAction,
onSelectItem,
setSharingPanelVisible,
isPersonalRoom,
folderCategory,
};
}
)(observer(WithQuickButtons));

View File

@ -20,8 +20,6 @@ import config from "PACKAGE_FILE";
import { I18nextProvider, useTranslation } from "react-i18next";
import i18n from "./i18n";
import AppLoader from "@docspace/common/components/AppLoader";
import System from "./components/System";
import { AppServerConfig } from "@docspace/common/constants";
import Snackbar from "@docspace/components/snackbar";
import moment from "moment";
import ReactSmartBanner from "./components/SmartBanner";
@ -32,29 +30,6 @@ import DialogsWrapper from "./components/dialogs/DialogsWrapper";
import MainBar from "./components/MainBar";
import { Portal } from "@docspace/components";
// const { proxyURL } = AppServerConfig;
// const homepage = config.homepage;
// const PROXY_HOMEPAGE_URL = combineUrl(proxyURL, homepage);
// const HOME_URLS = [
// combineUrl(PROXY_HOMEPAGE_URL),
// combineUrl(PROXY_HOMEPAGE_URL, "/"),
// combineUrl(PROXY_HOMEPAGE_URL, "/error=:error"),
// ];
// const WIZARD_URL = combineUrl(PROXY_HOMEPAGE_URL, "/wizard");
// const ABOUT_URL = combineUrl(PROXY_HOMEPAGE_URL, "/about");
// const CONFIRM_URL = combineUrl(PROXY_HOMEPAGE_URL, "/confirm");
// const PAYMENTS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/payments");
// const SETTINGS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/portal-settings");
// const ERROR_401_URL = combineUrl(PROXY_HOMEPAGE_URL, "/error401");
// const PROFILE_MY_URL = combineUrl(PROXY_HOMEPAGE_URL, "/my");
// const ENTER_CODE_URL = combineUrl(PROXY_HOMEPAGE_URL, "/code");
// const PREPARATION_PORTAL = combineUrl(
// PROXY_HOMEPAGE_URL,
// "/preparation-portal"
// );
const Payments = React.lazy(() => import("./pages/Payments"));
const Error404 = React.lazy(() => import("client/Error404"));
const Error401 = React.lazy(() => import("client/Error401"));
@ -202,7 +177,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
useEffect(() => {
socketHelper.emit({
command: "subscribe",
data: { roomParts: "backup-restore" }
data: { roomParts: "backup-restore" },
});
socketHelper.on("restore-backup", () => {
setPreparationPortalDialogVisible(true);

View File

@ -4,7 +4,6 @@ import CatalogItem from "@docspace/components/catalog-item";
import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import withLoader from "../../../HOCs/withLoader";
import config from "PACKAGE_FILE";
@ -25,7 +24,11 @@ const PureAccountsItem = ({
setSelectedNode(["accounts", "filter"]);
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, "/accounts")
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/accounts"
)
);
toggleArticleOpen();
}, [setSelectedFolder, setSelectedNode, history]);

View File

@ -5,7 +5,6 @@ import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import { AppServerConfig } from "@docspace/common/constants";
import withLoader from "../../../HOCs/withLoader";
import { isMobile } from "@docspace/components/utils/device";
import { isMobileOnly } from "react-device-detect";
@ -40,7 +39,11 @@ const PureSettingsItem = ({
setExpandSettingsTree(["common"]);
if (isMobile() || isMobileOnly) toggleArticleOpen();
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, "/settings/common")
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/settings/common"
)
);
}, [
setSelectedFolder,

View File

@ -7,9 +7,7 @@ import { isMobileOnly } from "react-device-detect";
import { inject, observer } from "mobx-react";
import { withRouter } from "react-router";
import { combineUrl, getOAuthToken } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import withLoader from "../../../HOCs/withLoader";
import { useCallback } from "react";
import IconButton from "@docspace/components/icon-button";
import { connectedCloudsTitleTranslation } from "@docspace/client/src/helpers/filesUtils";
@ -123,7 +121,11 @@ const PureThirdPartyListContainer = ({
toggleArticleOpen();
}
return history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, thirdPartyUrl)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
thirdPartyUrl
)
);
}
}, [setSelectedNode, setSelectedFolder]);

View File

@ -4,7 +4,7 @@ import { inject, observer } from "mobx-react";
import { withRouter } from "react-router";
import { setDocumentTitle } from "@docspace/client/src/helpers/filesUtils";
import config from "PACKAGE_FILE";
import { AppServerConfig, RoomSearchArea } from "@docspace/common/constants";
import { RoomSearchArea } from "@docspace/common/constants";
import Items from "./Items";
import { isMobile, tablet } from "@docspace/components/utils/device";
import FilesFilter from "@docspace/common/api/files/filter";
@ -99,7 +99,7 @@ const ArticleBodyContent = (props) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
homepage,
`${url}?${filterParamsStr}`
)
@ -130,7 +130,11 @@ const ArticleBodyContent = (props) => {
const pathname = `${url}?${filterParamsStr}`;
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, pathname)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
pathname
)
);
}
})

View File

@ -6,7 +6,6 @@ import MainButton from "@docspace/components/main-button";
import { withTranslation } from "react-i18next";
import { isMobile } from "react-device-detect";
import Loaders from "@docspace/common/components/Loaders";
import { AppServerConfig, FileAction } from "@docspace/common/constants";
import { encryptionUploadDialog } from "../../../helpers/desktop";
import { withRouter } from "react-router";
@ -171,7 +170,7 @@ const ArticleMainButtonContent = (props) => {
const onShowGallery = () => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/form-gallery/${currentFolderId}/`
)

View File

@ -8,7 +8,6 @@ import Link from "@docspace/components/link";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import { combineUrl } from "@docspace/common/utils";
import { getCategoryUrl } from "SRC_DIR/helpers/utils";
import { AppServerConfig } from "@docspace/common/constants";
import history from "@docspace/common/history";
import config from "PACKAGE_FILE";
@ -47,7 +46,11 @@ const RoomNoAccessContainer = (props) => {
const pathname = `${url}?${filterParamsStr}`;
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, pathname)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
pathname
)
);
})
.finally(() => {

View File

@ -11,7 +11,6 @@ import Loaders from "@docspace/common/components/Loaders";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import { combineUrl } from "@docspace/common/utils";
import { getCategoryUrl } from "SRC_DIR/helpers/utils";
import { AppServerConfig } from "@docspace/common/constants";
import history from "@docspace/common/history";
import config from "PACKAGE_FILE";
import PlusIcon from "@docspace/client/public/images/plus.react.svg";
@ -113,7 +112,11 @@ const RootFolderContainer = (props) => {
const pathname = `${url}?${filterParamsStr}`;
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, pathname)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
pathname
)
);
})
.finally(() => {

View File

@ -4,7 +4,6 @@ import { useTranslation } from "react-i18next";
import toastr from "@docspace/components/toast/toastr";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
@ -104,7 +103,11 @@ const CreateEvent = ({
let tab =
!isDesktop && extension && open
? window.open(
combineUrl(AppServerConfig.proxyURL, config.homepage, `/doceditor`),
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/doceditor`
),
"_blank"
)
: null;

View File

@ -6,6 +6,9 @@ import { Encoder } from "@docspace/common/utils/encoder";
import api from "@docspace/common/api";
const EditRoomEvent = ({
addActiveItems,
setActiveFolders,
visible,
onClose,
item,
@ -95,6 +98,8 @@ const EditRoomEvent = ({
logo: { big: item.logo.small },
});
addActiveItems(null, [room.id]);
await uploadRoomLogo(uploadLogoData).then((response) => {
const url = URL.createObjectURL(roomParams.icon.uploadedFile);
const img = new Image();
@ -113,6 +118,8 @@ const EditRoomEvent = ({
reloadSelection();
URL.revokeObjectURL(img.src);
setActiveFolders([]);
};
img.src = url;
});
@ -197,6 +204,8 @@ export default inject(
setFolder,
addLogoToRoom,
removeLogoFromRoom,
addActiveItems,
setActiveFolders,
} = filesStore;
const { createTag, fetchTags } = tagsStore;
@ -207,6 +216,9 @@ export default inject(
const { withPaging } = auth.settingsStore;
const { reloadSelection } = auth.infoPanelStore;
return {
addActiveItems,
setActiveFolders,
editRoom,
addTagsToRoom,
removeTagsFromRoom,

View File

@ -14,6 +14,14 @@ const StyledIcon = styled.img`
border-radius: 6px;
outline: 1px solid ${(props) => props.theme.itemIcon.borderColor};
`}
${(props) =>
props.isHidden &&
css`
display: none;
border-radius: none;
outline: none;
`}
`;
StyledIcon.defaultProps = { theme: Base };
@ -27,10 +35,32 @@ const EncryptedFileIcon = styled.div`
margin-left: 12px;
`;
const ItemIcon = ({ icon, fileExst, isPrivacy, isRoom }) => {
const ItemIcon = ({ icon, fileExst, isPrivacy, isRoom, defaultRoomIcon }) => {
const [showDefaultIcon, setShowDefaultIcon] = React.useState(isRoom);
const onLoadRoomIcon = () => {
if (!isRoom || defaultRoomIcon === icon) return;
setShowDefaultIcon(false);
};
return (
<>
<StyledIcon className={`react-svg-icon`} isRoom={isRoom} src={icon} />
{isRoom && (
<StyledIcon
className={`react-svg-icon`}
isHidden={!showDefaultIcon}
isRoom={isRoom}
src={defaultRoomIcon}
/>
)}
<StyledIcon
className={`react-svg-icon`}
isHidden={showDefaultIcon}
isRoom={isRoom}
src={icon}
onLoad={onLoadRoomIcon}
/>
{isPrivacy && fileExst && <EncryptedFileIcon isEdit={false} />}
</>
);

View File

@ -5,7 +5,6 @@ import Box from "@docspace/components/box";
import { useTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import { Base } from "@docspace/components/themes";
import { hugeMobile } from "@docspace/components/utils/device";
@ -74,7 +73,7 @@ const HeaderUnAuth = ({
<img
className="header-logo-icon"
src={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/static/images/logo.docspace.react.svg"
)}
/>

View File

@ -1,36 +1,16 @@
import React, { useState, useEffect } from "react";
import { inject, observer } from "mobx-react";
import PropTypes from "prop-types";
import styled, { css } from "styled-components";
import styled from "styled-components";
import { Link as LinkWithoutRedirect } from "react-router-dom";
import { isMobileOnly, isMobile } from "react-device-detect";
import NavItem from "./nav-item";
import Headline from "@docspace/common/components/Headline";
import Nav from "./nav";
import NavLogoItem from "./nav-logo-item";
import Link from "@docspace/components/link";
import history from "@docspace/common/history";
import { useTranslation } from "react-i18next";
import HeaderNavigationIcon from "./header-navigation-icon";
import Box from "@docspace/components/box";
import Text from "@docspace/components/text";
import {
desktop,
isDesktop,
tablet,
mobile,
} from "@docspace/components/utils/device";
import i18n from "../i18n";
import { isDesktop, tablet, mobile } from "@docspace/components/utils/device";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import NoUserSelect from "@docspace/components/utils/commonStyles";
import { getLink, checkIfModuleOld, onItemClick } from "SRC_DIR/helpers/utils";
import StyledExternalLinkIcon from "@docspace/client/src/components/StyledExternalLinkIcon";
import HeaderCatalogBurger from "./header-catalog-burger";
import { Base, Dark } from "@docspace/components/themes";
import { ReactSVG } from "react-svg";
const { proxyURL } = AppServerConfig;
import { Base } from "@docspace/components/themes";
const Header = styled.header`
display: flex;
@ -243,7 +223,7 @@ const HeaderComponent = ({
alt="logo"
className="header-logo-icon"
src={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/static/images/personal.logo.react.svg"
)}
/>
@ -297,7 +277,7 @@ const HeaderComponent = ({
<Box className="version-box">
<Link
as="a"
href={`https://github.com/ONLYOFFICE/AppServer/releases`}
href={`https://github.com/ONLYOFFICE/Docspace/releases`}
target="_blank"
{...versionBadgeProps}
>
@ -309,7 +289,7 @@ const HeaderComponent = ({
</Text>
<StyledLink>
<LinkWithoutRedirect
to={combineUrl(proxyURL, "/about")}
to={combineUrl(window.DocSpaceConfig?.proxy?.url, "/about")}
className="nav-menu-header_link"
>
{t("Common:About")}

View File

@ -9,7 +9,6 @@ import { isMobile } from "@docspace/components/utils/device";
import { isMobileOnly } from "react-device-detect";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import CatalogItem from "@docspace/components/catalog-item";
import withLoader from "../../../HOCs/withLoader";
@ -67,7 +66,7 @@ const ArticleBodyContent = ({
const urlFilter = newFilter.toUrlParams();
const url = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/accounts/filter?${urlFilter}`
);

View File

@ -9,7 +9,6 @@ import Loaders from "@docspace/common/components/Loaders";
import { inject, observer } from "mobx-react";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import { isMobile } from "react-device-detect";
import {
isMobile as isMobileUtils,
@ -30,7 +29,11 @@ class ArticleMainButtonContent extends React.Component {
onImportClick = () => {
const { history, homepage } = this.props;
history.push(
combineUrl(AppServerConfig.proxyURL, homepage, "${homepage}/import")
combineUrl(
window.DocSpaceConfig?.proxy?.url,
homepage,
"${homepage}/import"
)
);
if (isMobile || isMobileUtils()) this.props.toggleShowText();
};
@ -38,7 +41,7 @@ class ArticleMainButtonContent extends React.Component {
goToEmployeeCreate = () => {
const { history, homepage } = this.props;
history.push(
combineUrl(AppServerConfig.proxyURL, homepage, "/create/user")
combineUrl(window.DocSpaceConfig?.proxy?.url, homepage, "/create/user")
);
if (isMobile || isMobileUtils()) this.props.toggleShowText();
};
@ -46,7 +49,7 @@ class ArticleMainButtonContent extends React.Component {
// goToGuestCreate = () => {
// const { history, homepage } = this.props;
// history.push(
// combineUrl(AppServerConfig.proxyURL, homepage, "/create/guest")
// combineUrl(window.DocSpaceConfig?.proxy?.url, homepage, "/create/guest")
// );
// if (isMobile || isMobileUtils()) this.props.toggleShowText();
// };
@ -54,7 +57,7 @@ class ArticleMainButtonContent extends React.Component {
// goToGroupCreate = () => {
// const { history, homepage } = this.props;
// history.push(
// combineUrl(AppServerConfig.proxyURL, homepage, "/group/create")
// combineUrl(window.DocSpaceConfig?.proxy?.url, homepage, "/group/create")
// );
// if (isMobile || isMobileUtils()) this.props.toggleShowText();
// };
@ -91,7 +94,7 @@ class ArticleMainButtonContent extends React.Component {
{
key: "create-user",
icon: combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
homepage,
"/images/add.employee.react.svg"
),
@ -101,7 +104,7 @@ class ArticleMainButtonContent extends React.Component {
// {
// key: "create-guest",
// icon: combineUrl(
// AppServerConfig.proxyURL,
// window.DocSpaceConfig?.proxy?.url,
// homepage,
// "/images/add.guest.react.svg"
// ),
@ -111,7 +114,7 @@ class ArticleMainButtonContent extends React.Component {
// {
// key: "create-group",
// icon: combineUrl(
// AppServerConfig.proxyURL,
// window.DocSpaceConfig?.proxy?.url,
// homepage,
// "/images/add.department.react.svg"
// ),
@ -124,7 +127,7 @@ class ArticleMainButtonContent extends React.Component {
{
key: "invite-link",
icon: combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/static/images/invitation.link.react.svg"
),
label: t("PeopleTranslations:InviteLinkTitle"),
@ -132,7 +135,7 @@ class ArticleMainButtonContent extends React.Component {
},
/* {
icon: combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/static/images/plane.react.svg"
),
label: t("SendInvitesAgain"),
@ -141,7 +144,7 @@ class ArticleMainButtonContent extends React.Component {
separator,
{
icon: combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/static/images/import.react.svg"
),
label: t("ImportPeople"),

View File

@ -16,13 +16,14 @@ const QuickButtons = (props) => {
item,
theme,
sectionWidth,
isTrashFolder,
onClickLock,
isDisabled,
onClickFavorite,
viewAs,
isCanWebEdit,
isPersonalRoom,
folderCategory,
} = props;
const { id, locked, fileStatus, title, fileExst } = item;
@ -58,7 +59,7 @@ const QuickButtons = (props) => {
const setFavorite = () => onClickFavorite(isFavorite);
const isAvailableLockFile =
!isPersonalRoom && fileExst && displayBadges && isCanWebEdit;
!folderCategory && fileExst && displayBadges && isCanWebEdit;
return (
<div className="badges additional-badges">

View File

@ -132,36 +132,40 @@ const ArchiveDialog = withTranslation(["Files", "ArchiveDialog", "Common"])(
ArchiveDialogComponent
);
export default inject(({ filesStore, filesActionsStore, dialogsStore }) => {
const { roomsForRestore, selection, bufferSelection } = filesStore;
const { setArchiveAction } = filesActionsStore;
export default inject(
({ filesStore, filesActionsStore, dialogsStore, selectedFolderStore }) => {
const { roomsForRestore, selection, bufferSelection } = filesStore;
const { setArchiveAction } = filesActionsStore;
const {
archiveDialogVisible: visible,
restoreAllArchive: restoreAll,
archiveAction: action,
const {
archiveDialogVisible: visible,
restoreAllArchive: restoreAll,
archiveAction: action,
setArchiveDialogVisible,
setRestoreAllArchive,
setArchiveAction: setArchiveActionType,
} = dialogsStore;
setArchiveDialogVisible,
setRestoreAllArchive,
setArchiveAction: setArchiveActionType,
} = dialogsStore;
const items = restoreAll
? roomsForRestore
: selection.length > 0
? selection
: [bufferSelection];
const items = restoreAll
? roomsForRestore
: selection.length > 0
? selection
: bufferSelection
? [bufferSelection]
: [{ id: selectedFolderStore.id }];
return {
visible,
restoreAll,
action,
return {
visible,
restoreAll,
action,
setArchiveDialogVisible,
setRestoreAllArchive,
setArchiveActionType,
setArchiveDialogVisible,
setRestoreAllArchive,
setArchiveActionType,
setArchiveAction,
items,
};
})(withRouter(observer(ArchiveDialog)));
setArchiveAction,
items,
};
}
)(withRouter(observer(ArchiveDialog)));

View File

@ -6,7 +6,6 @@ import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import SimulatePassword from "../../SimulatePassword";
import StyledComponent from "./StyledConvertPasswordDialog";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import { openDocEditor } from "@docspace/client/src/helpers/filesUtils";
import combineUrl from "@docspace/common/utils/combineUrl";
@ -58,7 +57,11 @@ const ConvertPasswordDialogComponent = (props) => {
tab =
!isDesktop && formCreationInfo.fileInfo.fileExst && formCreationInfo.open
? window.open(
combineUrl(AppServerConfig.proxyURL, config.homepage, "/doceditor"),
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/doceditor"
),
"_blank"
)
: null;

View File

@ -13,8 +13,6 @@ import ModalDialogContainer from "../ModalDialogContainer";
import { inject, observer } from "mobx-react";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
// import Link from "@docspace/components/link";
const { deleteUser } = api.people; //TODO: Move to action
const { Filter } = api;
@ -34,7 +32,7 @@ class DeleteProfileEverDialogComponent extends React.Component {
const params = filter.toUrlParams();
const url = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
homepage,
`/accounts/filter?${params}`
);
@ -56,7 +54,7 @@ class DeleteProfileEverDialogComponent extends React.Component {
const { homepage, user } = this.props;
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
homepage,
`/reassign/${user.userName}`
)

View File

@ -1,6 +1,5 @@
import React, { useState } from "react";
import Text from "@docspace/components/text";
import { inject, observer } from "mobx-react";
import LinkWithDropdown from "@docspace/components/link-with-dropdown";
import Checkbox from "@docspace/components/checkbox";
import ArrowIcon from "@docspace/client/public/images/arrow.react.svg";
@ -86,6 +85,8 @@ const DownloadContent = (props) => {
return formats;
case "presentations":
return formats;
case "masterForms":
return formats;
default:
return [];
}
@ -170,11 +171,4 @@ const DownloadContent = (props) => {
);
};
export default inject(({ auth }) => {
const { settingsStore } = auth;
const { theme } = settingsStore;
return {
theme,
};
})(observer(DownloadContent));
export default DownloadContent;

View File

@ -5,6 +5,7 @@ const StyledDownloadDialog = styled(ModalDialog)`
.download-dialog-description {
margin-bottom: 16px;
line-height: 20px;
min-height: 40px;
}
.download-dialog-convert-message {

View File

@ -16,6 +16,7 @@ class DownloadDialogComponent extends React.Component {
documents,
spreadsheets,
presentations,
masterForms,
other,
} = this.props.sortedFiles;
@ -38,11 +39,18 @@ class DownloadDialogComponent extends React.Component {
format: null,
files: presentations,
},
masterForms: {
isChecked: true,
isIndeterminate: false,
format: null,
files: masterForms,
},
other: {
isChecked: true,
isIndeterminate: false,
files: other,
},
modalDialogToggle: "modalDialogToggle",
};
}
@ -53,6 +61,7 @@ class DownloadDialogComponent extends React.Component {
...this.state.documents.files,
...this.state.spreadsheets.files,
...this.state.presentations.files,
...this.state.masterForms.files,
...this.state.other.files,
];
@ -195,6 +204,9 @@ class DownloadDialogComponent extends React.Component {
case "presentations":
this.updateDocsState("presentations", itemId);
break;
case "masterForms":
this.updateDocsState("masterForms", itemId);
break;
case "other":
this.updateDocsState("other", itemId);
break;
@ -205,7 +217,7 @@ class DownloadDialogComponent extends React.Component {
};
render() {
const { t, tReady, visible, extsConvertible } = this.props;
const { t, tReady, visible, extsConvertible, theme } = this.props;
const {
files: documents,
@ -228,6 +240,13 @@ class DownloadDialogComponent extends React.Component {
format: presentationsTitleFormat,
} = this.state.presentations;
const {
files: masterForms,
isChecked: checkedMasterFormsTitle,
isIndeterminate: indeterminateMasterFormsTitle,
format: masterFormsTitleFormat,
} = this.state.masterForms;
const {
files: other,
isChecked: checkedOtherTitle,
@ -238,12 +257,14 @@ class DownloadDialogComponent extends React.Component {
documents.filter((f) => f.checked).length +
spreadsheets.filter((f) => f.checked).length +
presentations.filter((f) => f.checked).length +
masterForms.filter((f) => f.checked).length +
other.filter((f) => f.checked).length;
const isSingleFile = isCheckedLength <= 1;
const downloadContentProps = {
t,
theme,
extsConvertible,
onSelectFormat: this.onSelectFormat,
onRowSelect: this.onRowSelect,
@ -254,10 +275,12 @@ class DownloadDialogComponent extends React.Component {
this.state.documents.files.length +
this.state.spreadsheets.files.length +
this.state.presentations.files.length +
this.state.masterForms.files.length +
this.state.other.files.length +
(this.state.documents.files.length > 1 && 1) +
(this.state.spreadsheets.files.length > 1 && 1) +
(this.state.presentations.files.length > 1 && 1) +
(this.state.masterForms.files.length > 1 && 1) +
(this.state.other.files.length > 1 && 1);
return (
@ -273,7 +296,7 @@ class DownloadDialogComponent extends React.Component {
>
<ModalDialog.Header>{t("Translations:DownloadAs")}</ModalDialog.Header>
<ModalDialog.Body>
<ModalDialog.Body className={this.state.modalDialogToggle}>
<div className="download-dialog-description">
<Text noSelect>{t("ChooseFormatText")}.</Text>
{!isSingleFile && (
@ -318,6 +341,18 @@ class DownloadDialogComponent extends React.Component {
/>
)}
{masterForms.length > 0 && (
<DownloadContent
{...downloadContentProps}
isChecked={checkedMasterFormsTitle}
isIndeterminate={indeterminateMasterFormsTitle}
items={masterForms}
titleFormat={masterFormsTitleFormat || t("OriginalFormat")}
type="masterForms"
title={t("Translations:FormTemplates")}
/>
)}
{other.length > 0 && (
<DownloadContent
{...downloadContentProps}
@ -364,9 +399,10 @@ const DownloadDialog = withTranslation([
])(DownloadDialogComponent);
export default inject(
({ filesStore, dialogsStore, filesActionsStore, settingsStore }) => {
({ auth, filesStore, dialogsStore, filesActionsStore, settingsStore }) => {
const { sortedFiles } = filesStore;
const { extsConvertible } = settingsStore;
const { theme } = auth.settingsStore;
const {
downloadDialogVisible: visible,
@ -382,6 +418,8 @@ export default inject(
setDownloadDialogVisible,
downloadFiles,
theme,
};
}
)(withRouter(observer(DownloadDialog)));

View File

@ -4,12 +4,14 @@ import { withTranslation, Trans } from "react-i18next";
import { withRouter } from "react-router";
import moment from "moment";
import { combineUrl } from "@docspace/common/utils";
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
import ModalDialog from "@docspace/components/modal-dialog";
import Button from "@docspace/components/button";
import Text from "@docspace/components/text";
const PROXY_BASE_URL = combineUrl(AppServerConfig.proxyURL, "/portal-settings");
const PROXY_BASE_URL = combineUrl(
window.DocSpaceConfig?.proxy?.url,
"/portal-settings"
);
const InviteUsersWarningDialog = (props) => {
const {

View File

@ -7,7 +7,6 @@ import Text from "@docspace/components/text";
import Heading from "@docspace/components/heading";
import Aside from "@docspace/components/aside";
import Row from "@docspace/components/row";
import Box from "@docspace/components/box";
import Button from "@docspace/components/button";
import { withTranslation } from "react-i18next";
import toastr from "@docspace/components/toast/toastr";
@ -22,7 +21,6 @@ import {
} from "../StyledPanels";
import { inject, observer } from "mobx-react";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import Loaders from "@docspace/common/components/Loaders";
import withLoader from "../../../HOCs/withLoader";
@ -152,7 +150,7 @@ class NewFilesPanel extends React.Component {
.finally(
window.open(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/doceditor?fileId=${id}`
),

View File

@ -39,6 +39,7 @@ const SelectFolderDialogAsideView = ({
selectionFiles,
folderSelectionDisabled,
}) => {
const isLoaded = folderId && resultingFolderTree;
return (
<StyledModalDialog
theme={theme}
@ -68,13 +69,21 @@ const SelectFolderDialogAsideView = ({
<div className="selection-panel_aside-body">
<div className="selection-panel_aside-header">
<div>{header}</div>
<Text fontWeight="700" fontSize="18px">
{t("Common:Rooms")}
</Text>
{isLoaded ? (
<Text fontWeight="700" fontSize="18px">
{t("Common:Rooms")}
</Text>
) : (
<Loaders.Rectangle
className="selection-panel_header-loader"
width="83px"
height="24px"
/>
)}
</div>
<div className="selection-panel_aside-tree">
{folderId && resultingFolderTree ? (
{isLoaded ? (
<FolderTreeBody
selectionFiles={selectionFiles}
parentId={parentId}

View File

@ -4,7 +4,6 @@ import toastr from "@docspace/components/toast/toastr";
import FilesListBody from "./FilesListBody";
import axios from "axios";
import { combineUrl, getFolderOptions } from "@docspace/common/utils";
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
class FilesListWrapper extends React.Component {
constructor(props) {
@ -72,9 +71,16 @@ class FilesListWrapper extends React.Component {
const options = getFolderOptions(folderId, this.newFilter);
const response = await axios
.get(combineUrl(AppServerConfig.apiPrefix, options.url), {
cancelToken: this.source.token,
})
.get(
combineUrl(
window.DocSpaceConfig?.proxy?.url,
window.DocSpaceConfig?.api?.prefix,
options.url
),
{
cancelToken: this.source.token,
}
)
.catch((thrown) => {
if (axios.isCancel(thrown)) {
console.log("Request canceled", thrown.message);

View File

@ -53,6 +53,7 @@ const SelectionPanelBody = ({
folderSelectionDisabled,
isCurrentFolder,
}) => {
const isLoaded = folderId && resultingFolderTree;
return (
<StyledModalDialog
theme={theme}
@ -71,15 +72,25 @@ const SelectionPanelBody = ({
<StyledBody header={!!header} footer={!!footer}>
<div className="selection-panel_body">
<div className="selection-panel_tree-body">
<Text
fontWeight="700"
fontSize="18px"
className="selection-panel_folder-title"
>
{t("Common:Rooms")}
</Text>
{isLoaded ? (
<Text
fontWeight="700"
fontSize="18px"
className="selection-panel_folder-title"
>
{t("Common:Rooms")}
</Text>
) : (
<div className="selection-panel_folder-title">
<Loaders.Rectangle
className="selection-panel_header-loader"
width="83px"
height="24px"
/>
</div>
)}
{folderId && resultingFolderTree ? (
{isLoaded ? (
<FolderTreeBody
selectionFiles={selectionFiles}
theme={theme}

View File

@ -79,6 +79,11 @@ const StyledBody = styled.div`
.selection-panel_folder-title {
padding: 12px 20px 14px 0px;
}
.selection-panel_header-loader {
padding-bottom: 3px;
}
.selection-panel_tree-folder {
height: ${(props) => (props.footer ? "343px" : "387px")};
max-height: 384px;
@ -212,6 +217,10 @@ const StyledAsideBody = styled.div`
div:first-child {
${(props) => props.header && " margin-bottom: 12px;"}
}
.selection-panel_header-loader {
padding-bottom: 4px;
}
}
.selection-panel_aside-folder-title {
margin-top: 12px;

View File

@ -7,7 +7,6 @@ import Section from "@docspace/common/components/Section";
import { checkConfirmLink } from "@docspace/common/api/user"; //TODO: Move AuthStore
import { combineUrl, getObjectByLocation } from "@docspace/common/utils";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
class ConfirmRoute extends React.Component {
constructor(props) {
@ -56,7 +55,7 @@ class ConfirmRoute extends React.Component {
case ValidationResult.Invalid:
console.error("invlid link");
window.location.href = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
path,
"/error"
);
@ -64,7 +63,7 @@ class ConfirmRoute extends React.Component {
case ValidationResult.Expired:
console.error("expired link");
window.location.href = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
path,
"/error"
);
@ -72,7 +71,7 @@ class ConfirmRoute extends React.Component {
default:
console.error("unknown link");
window.location.href = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
path,
"/error"
);
@ -82,7 +81,7 @@ class ConfirmRoute extends React.Component {
.catch((error) => {
console.error(error);
window.location.href = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
path,
"/error"
);

View File

@ -1,9 +1,5 @@
import authStore from "@docspace/common/store/AuthStore";
import {
AppServerConfig,
FileType,
RoomsType,
} from "@docspace/common/constants";
import { FileType, RoomsType } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import { combineUrl, toUrlParams } from "@docspace/common/utils";
import { addFileToRecentlyViewed } from "@docspace/common/api/files";
@ -111,7 +107,7 @@ export const openDocEditor = async (
if (!url && id) {
url = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/doceditor?fileId=${encodeURIComponent(id)}`
);
@ -129,7 +125,7 @@ export const openDocEditor = async (
export const getDataSaveAs = async (params) => {
try {
const data = await request({
baseURL: combineUrl(AppServerConfig.proxyURL, config.homepage),
baseURL: combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage),
method: "get",
url: `/products/files/httphandlers/filehandler.ashx?${params}`,
responseType: "text",
@ -155,7 +151,7 @@ export const SaveAs = (title, url, folderId, openNewTab) => {
} else {
window.open(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`products/files/httphandlers/filehandler.ashx?${params}` //TODO: will change 'products/files' path
),

View File

@ -79,7 +79,7 @@ const AboutContent = (props) => {
} = props;
const { t } = useTranslation("About");
const license = "AGPL-3.0";
const linkAppServer = "https://github.com/ONLYOFFICE/DocSpace";
const linkRepo = "https://github.com/ONLYOFFICE/DocSpace";
const linkDocs = "https://github.com/ONLYOFFICE/DocumentServer";
const companyName = previewData
@ -134,14 +134,14 @@ const AboutContent = (props) => {
className="row-el"
fontSize="13px"
fontWeight="600"
href={linkAppServer}
href={linkRepo}
target="_blank"
>
&nbsp;ONLYOFFICE DocSpace&nbsp;
</ColorTheme>
<Text className="row-el select-el" fontSize="13px" fontWeight="600">
v.{buildVersionInfo.appServer}
v.{buildVersionInfo.docspace}
</Text>
</div>

View File

@ -6,7 +6,6 @@ import Section from "@docspace/common/components/Section";
import { combineUrl } from "@docspace/common/utils";
import tryRedirectTo from "@docspace/common/utils/tryRedirectTo";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
class ActivateEmail extends React.PureComponent {
componentDidMount() {
@ -21,7 +20,7 @@ class ActivateEmail extends React.PureComponent {
.then((res) => {
tryRedirectTo(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/login?confirmedEmail=${email}`
)
);
@ -41,7 +40,7 @@ class ActivateEmail extends React.PureComponent {
tryRedirectTo(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/login/error?message=${errorMessage}`
)
);

View File

@ -6,7 +6,6 @@ import Loader from "@docspace/components/loader";
import Section from "@docspace/common/components/Section";
import { combineUrl } from "@docspace/common/utils";
import tryRedirectTo from "@docspace/common/utils/tryRedirectTo";
import { AppServerConfig } from "@docspace/common/constants";
class ChangeEmail extends React.PureComponent {
componentDidMount() {
@ -18,7 +17,7 @@ class ChangeEmail extends React.PureComponent {
console.log("change client email success", res);
tryRedirectTo(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/accounts/view/@self?email_change=success`
)
);
@ -37,7 +36,10 @@ class ChangeEmail extends React.PureComponent {
console.log("change client email error", e);
tryRedirectTo(
combineUrl(AppServerConfig.proxyURL, `/error=${errorMessage}`)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
`/error=${errorMessage}`
)
);
});
}
@ -52,7 +54,7 @@ class ChangeEmail extends React.PureComponent {
console.log("change client email success", res);
tryRedirectTo(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/accounts/view/@self?email_change=success`
)
);

View File

@ -3,7 +3,6 @@ import { observer, inject } from "mobx-react";
import Loader from "@docspace/components/loader";
import axios from "axios";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
let loadTimeout = null;
export default function withLoader(WrappedComponent) {
@ -48,7 +47,7 @@ export default function withLoader(WrappedComponent) {
console.error(errorMessage);
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/login/error?message=${errorMessage}`
)
);
@ -72,7 +71,7 @@ export default function withLoader(WrappedComponent) {
console.error(errorMessage);
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
`/login/error?message=${errorMessage}`
)
);

View File

@ -21,7 +21,6 @@ import Settings from "./Settings";
import PrivateRoomsPage from "./PrivateRoomsPage";
import ErrorBoundary from "@docspace/common/components/ErrorBoundary";
import Panels from "../components/FilesPanels";
//import { AppServerConfig } from "@docspace/common/constants";
import Article from "@docspace/common/components/Article";
import {
ArticleBodyContent,
@ -32,10 +31,9 @@ import {
import GlobalEvents from "../components/GlobalEvents";
import Accounts from "./Accounts";
// const { proxyURL } = AppServerConfig;
// const homepage = config.homepage;
// const PROXY_HOMEPAGE_URL = combineUrl(proxyURL, homepage);
// const PROXY_HOMEPAGE_URL = combineUrl(window.DocSpaceConfig?.proxy?.url, homepage);
// const HOME_URL = combineUrl(PROXY_HOMEPAGE_URL, "/");
// const SETTINGS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/settings/:setting");
@ -222,19 +220,16 @@ class FilesContent extends React.Component {
}
render() {
const { showArticle, isFrame, withMainButton } = this.props;
const { showMenu, isFrame, withMainButton, history } = this.props;
return (
<>
<GlobalEvents />
<Panels />
{isFrame ? (
showArticle && <FilesArticle history={this.props.history} />
showMenu && <FilesArticle history={history} />
) : (
<FilesArticle
history={this.props.history}
withMainButton={withMainButton}
/>
<FilesArticle history={history} withMainButton={withMainButton} />
)}
<FilesSection />
</>
@ -259,7 +254,7 @@ const Files = inject(({ auth, filesStore }) => {
return {
isDesktop: isDesktopClient,
isFrame,
showArticle: frameConfig?.showArticle,
showMenu: frameConfig?.showMenu,
user: auth.userStore.user,
isAuthenticated: auth.isAuthenticated,
encryptionKeys: encryptionKeys,

View File

@ -3,7 +3,6 @@ import { inject, observer } from "mobx-react";
import IconButton from "@docspace/components/icon-button";
import { withTranslation } from "react-i18next";
import { withRouter } from "react-router-dom";
import { AppServerConfig } from "@docspace/common/constants";
import {
StyledHeadline,
StyledContainer,
@ -39,7 +38,7 @@ const SectionHeaderContent = (props) => {
const pathname = `${url}?${filterParamsStr}`;
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, pathname)
combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage, pathname)
);
};

View File

@ -3,11 +3,9 @@ import { inject, observer } from "mobx-react";
import ContextMenuButton from "@docspace/components/context-menu-button";
import PropTypes from "prop-types";
import ContextMenu from "@docspace/components/context-menu";
import { isDesktop } from "react-device-detect";
import Link from "@docspace/components/link";
import { withTranslation } from "react-i18next";
import { ReactSVG } from "react-svg";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import FilesFilter from "@docspace/common/api/files/filter";
@ -97,7 +95,7 @@ class Tile extends React.PureComponent {
setIsInfoPanelVisible(false);
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, pathname)
combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage, pathname)
);
};

View File

@ -12,16 +12,14 @@ import Loaders from "@docspace/common/components/Loaders";
import PeopleSelector from "../../../../components/PeopleSelector";
import { GUID_EMPTY } from "../../../../helpers/constants";
import PropTypes from "prop-types";
import React, { useEffect, useState } from "react";
import React, { useState } from "react";
import styled from "styled-components";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import CatalogGuestIcon from "PUBLIC_DIR/images/catalog.guest.react.svg";
import { ID_NO_GROUP_MANAGER } from "../../../../helpers/constants";
import { inject, observer } from "mobx-react";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import { useTranslation } from "react-i18next";
import withLoader from "../../../../HOCs/withLoader";
@ -189,7 +187,7 @@ const SectionBodyContent = ({
return selectGroup(group.id);
} else {
return history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, "/")
combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage, "/")
);
}
})

View File

@ -114,20 +114,17 @@ const InfoPanelBodyContent = ({
const currentFolderRoomId =
selectedFolder?.pathParts &&
selectedFolder?.pathParts?.length === 2 &&
selectedFolder?.pathParts?.length > 1 &&
selectedFolder.pathParts[1];
const storeRoomId = selectionParentRoom?.id;
if (!currentFolderRoomId || currentFolderRoomId === storeRoomId) return;
const newSelectionParentRoom = await getRoomInfo(currentFolderRoomId);
if (storeRoomId === newSelectionParentRoom.id) return;
if (
newSelectionParentRoom.parentId === newSelectionParentRoom.rootFolderId
) {
setSelectionParentRoom(null);
} else setSelectionParentRoom(normalizeSelection(newSelectionParentRoom));
setSelectionParentRoom(normalizeSelection(newSelectionParentRoom));
}, [selectedFolder]);
//////////////////////////////////////////////////////////
@ -189,6 +186,8 @@ export default inject(({ auth, selectedFolderStore, oformsStore }) => {
calculateSelection,
normalizeSelection,
isItemChanged,
selectionParentRoom,
setSelectionParentRoom,
roomsView,
fileView,

View File

@ -180,12 +180,12 @@ const StyledSimpleFilesRow = styled(Row)`
}
.expandButton {
margin-left: ${(props) => (!props.isPersonalRoom ? "6px" : "0")};
margin-left: ${(props) => (!props.folderCategory ? "6px" : "0")};
padding-top: 0px;
}
.expandButton > div:first-child {
${(props) =>
props.isPersonalRoom &&
props.folderCategory &&
css`
padding-left: 0 !important;
`}
@ -220,7 +220,8 @@ const SimpleFilesRow = (props) => {
showHotkeyBorder,
id,
isRooms,
isPersonalRoom,
folderCategory,
} = props;
const [isDragOver, setIsDragOver] = React.useState(false);
@ -234,6 +235,7 @@ const SimpleFilesRow = (props) => {
icon={item.icon}
fileExst={item.fileExst}
isRoom={item.isRoom}
defaultRoomIcon={item.defaultRoomIcon}
/>
);
@ -315,7 +317,7 @@ const SimpleFilesRow = (props) => {
isDragOver={isDragOver}
isSmallContainer={isSmallContainer}
isRooms={isRooms}
isPersonalRoom={isPersonalRoom}
folderCategory={folderCategory}
>
<FilesRowContent
item={item}

View File

@ -86,14 +86,14 @@ class FilesTableHeader extends React.Component {
resizable: true,
sortBy: "Author",
isDisabled: isPersonalRoom,
// isDisabled: isPersonalRoom,
onClick: this.onFilter,
onChange: this.onColumnChange,
};
if (isPersonalRoom) {
authorOption.defaultSize = 0;
}
// if (isPersonalRoom) {
// authorOption.defaultSize = 0;
// }
const columns = [
{

View File

@ -327,6 +327,7 @@ const FilesTableRow = (props) => {
icon={item.icon}
fileExst={item.fileExst}
isRoom={item.isRoom}
defaultRoomIcon={item.defaultRoomIcon}
/>
);

View File

@ -9,6 +9,7 @@ const StyledText = styled(Text)`
const StyledAuthorCell = styled.div`
display: flex;
width: 100%;
overflow: hidden;
.author-avatar-cell {
width: 16px;

View File

@ -71,6 +71,7 @@ const FileTile = (props) => {
icon={item.icon}
fileExst={item.fileExst}
isRoom={item.isRoom}
defaultRoomIcon={item.defaultRoomIcon}
/>
);

View File

@ -561,7 +561,7 @@ const SectionFilterContent = ({
}
}
return filterValues;
// return filterValues;
const currentFilterValues = [];
setSelectedFilterValues((value) => {
@ -949,38 +949,36 @@ const SectionFilterContent = ({
filterOptions.push(...contentOptions);
}
if (!isPersonalRoom) {
const authorOption = [
{
key: FilterGroups.filterAuthor,
group: FilterGroups.filterAuthor,
label: t("ByAuthor"),
isHeader: true,
withMultiItems: true,
},
{
id: "filter_author-me",
key: FilterKeys.me,
group: FilterGroups.filterAuthor,
label: t("Common:MeLabel"),
},
{
id: "filter_author-other",
key: FilterKeys.other,
group: FilterGroups.filterAuthor,
label: t("Common:OtherLabel"),
},
{
id: "filter_author-user",
key: FilterKeys.user,
group: FilterGroups.filterAuthor,
label: t("Translations:AddAuthor"),
isSelector: true,
},
];
const authorOption = [
{
key: FilterGroups.filterAuthor,
group: FilterGroups.filterAuthor,
label: t("ByAuthor"),
isHeader: true,
withMultiItems: true,
},
{
id: "filter_author-me",
key: FilterKeys.me,
group: FilterGroups.filterAuthor,
label: t("Common:MeLabel"),
},
{
id: "filter_author-other",
key: FilterKeys.other,
group: FilterGroups.filterAuthor,
label: t("Common:OtherLabel"),
},
{
id: "filter_author-user",
key: FilterKeys.user,
group: FilterGroups.filterAuthor,
label: t("Translations:ChooseFromList"),
isSelector: true,
},
];
filterOptions.push(...authorOption);
}
filterOptions.push(...authorOption);
filterOptions.push(...typeOptions);
}

View File

@ -4,11 +4,7 @@ import styled, { css } from "styled-components";
import { withRouter } from "react-router";
import toastr from "@docspace/components/toast/toastr";
import Loaders from "@docspace/common/components/Loaders";
import {
AppServerConfig,
FolderType,
RoomSearchArea,
} from "@docspace/common/constants";
import { FolderType, RoomSearchArea } from "@docspace/common/constants";
import { withTranslation } from "react-i18next";
import { isMobile, isTablet, isMobileOnly } from "react-device-detect";
import DropDownItem from "@docspace/components/drop-down-item";
@ -76,6 +72,14 @@ class SectionHeaderContent extends React.Component {
this.state = { navigationItems: [] };
}
componentDidMount() {
window.addEventListener("popstate", this.onBackToParentFolder);
}
componentWillUnmount() {
window.removeEventListener("popstate", this.onBackToParentFolder);
}
onCreate = (format) => {
const event = new Event(Events.CREATE);
@ -110,7 +114,7 @@ class SectionHeaderContent extends React.Component {
const { history, currentFolderId } = this.props;
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/form-gallery/${currentFolderId}/`
)
@ -480,7 +484,7 @@ class SectionHeaderContent extends React.Component {
key: "archive-room",
label: t("Archived"),
icon: "/static/images/room.archive.svg",
onClick: (e) => onClickArchive(e, selectedFolder, t),
onClick: (e) => onClickArchive(e),
disabled: !isRoom,
"data-action": "archive",
action: "archive",

View File

@ -18,7 +18,6 @@ import {
checkPropertyByLink,
} from "../../../utils";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import { isMobile, isTablet, isMobileOnly } from "react-device-detect";
const HeaderContainer = styled.div`
@ -196,7 +195,9 @@ class SectionHeaderContent extends React.Component {
let newArrayOfParams = this.getArrayOfParams();
newArrayOfParams.splice(-1, 1);
const newPath = "/portal-settings/" + newArrayOfParams.join("/");
this.props.history.push(combineUrl(AppServerConfig.proxyURL, newPath));
this.props.history.push(
combineUrl(window.DocSpaceConfig?.proxy?.url, newPath)
);
};
getArrayOfParams = () => {

View File

@ -6,7 +6,6 @@ import TextInput from "@docspace/components/text-input";
import Button from "@docspace/components/button";
import { inject, observer } from "mobx-react";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import history from "@docspace/common/history";
import { isMobileOnly } from "react-device-detect";
@ -78,7 +77,7 @@ const DNSSettings = (props) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/portal-settings/common/customization"
)

View File

@ -11,7 +11,6 @@ import { inject, observer } from "mobx-react";
import { LANGUAGE, COOKIE_EXPIRATION_YEAR } from "@docspace/common/constants";
import { LanguageTimeSettingsTooltip } from "../sub-components/common-tooltips";
import { combineUrl, setCookie } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import history from "@docspace/common/history";
import { isMobileOnly } from "react-device-detect";
@ -386,7 +385,7 @@ class LanguageAndTimeZone extends React.Component {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/portal-settings/common/customization"
)

View File

@ -7,7 +7,6 @@ import TextInput from "@docspace/components/text-input";
import SaveCancelButtons from "@docspace/components/save-cancel-buttons";
import { inject, observer } from "mobx-react";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import history from "@docspace/common/history";
import { isMobileOnly } from "react-device-detect";
@ -224,7 +223,7 @@ const PortalRenaming = (props) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/portal-settings/common/customization"
)

View File

@ -10,7 +10,6 @@ import { setDocumentTitle } from "SRC_DIR/helpers/utils";
import { inject, observer } from "mobx-react";
import { CustomTitlesTooltip } from "../sub-components/common-tooltips";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import history from "@docspace/common/history";
import { isMobileOnly } from "react-device-detect";
@ -249,7 +248,7 @@ class WelcomePageSettings extends React.Component {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/portal-settings/common/customization"
)

View File

@ -6,7 +6,6 @@ import Box from "@docspace/components/box";
import Link from "@docspace/components/link";
import { combineUrl } from "@docspace/common/utils";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
import withCultureNames from "@docspace/common/hoc/withCultureNames";
import history from "@docspace/common/history";
import { Base } from "@docspace/components/themes";
@ -91,7 +90,7 @@ const CustomizationNavbar = ({
onClick={onClickLink}
truncate={true}
href={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/portal-settings/common/customization/language-and-time-zone"
)}
>
@ -121,7 +120,7 @@ const CustomizationNavbar = ({
className="inherit-title-link header"
onClick={onClickLink}
href={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/portal-settings/common/customization/welcome-page-settings"
)}
>
@ -142,7 +141,7 @@ const CustomizationNavbar = ({
className="inherit-title-link header"
onClick={onClickLink}
href={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/portal-settings/common/customization/dns-settings"
)}
>
@ -180,7 +179,7 @@ const CustomizationNavbar = ({
className="inherit-title-link header"
onClick={onClickLink}
href={combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
"/portal-settings/common/customization/portal-renaming"
)}
>

View File

@ -2,7 +2,6 @@ import React, { useEffect, useState } from "react";
import Submenu from "@docspace/components/submenu";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import { inject, observer } from "mobx-react";
@ -63,7 +62,7 @@ const SubmenuCommon = (props) => {
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/portal-settings/common/${e.id}`
)

View File

@ -3,7 +3,6 @@ import { withTranslation, Trans } from "react-i18next";
import Submenu from "@docspace/components/submenu";
import Link from "@docspace/components/link";
import HelpButton from "@docspace/components/help-button";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import { inject, observer } from "mobx-react";
import AutoBackup from "./auto-backup";
@ -68,7 +67,7 @@ const Backup = ({
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/portal-settings/backup/${e.id}`
)

View File

@ -8,7 +8,7 @@ import RadioButton from "@docspace/components/radio-button";
import toastr from "@docspace/components/toast/toastr";
import { startRestore } from "@docspace/common/api/portal";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig, BackupStorageType } from "@docspace/common/constants";
import { BackupStorageType } from "@docspace/common/constants";
import { request } from "@docspace/common/api/client";
import { StyledRestoreBackup } from "./../StyledBackup";
import BackupListModalDialog from "./sub-components/backup-list";
@ -227,7 +227,10 @@ class RestoreBackup extends React.Component {
try {
if (isCheckedLocalFile) {
checkedFile = await request({
baseURL: combineUrl(AppServerConfig.proxyURL, config.homepage),
baseURL: combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage
),
method: "post",
url: `/backupFileUpload.ashx`,
responseType: "text",
@ -259,7 +262,7 @@ class RestoreBackup extends React.Component {
.then(() =>
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/preparation-portal"
)

View File

@ -15,7 +15,6 @@ import {
import toastr from "@docspace/components/toast/toastr";
import Loaders from "@docspace/common/components/Loaders";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import Checkbox from "@docspace/components/checkbox";
import HelpButton from "@docspace/components/help-button";
import config from "PACKAGE_FILE";
@ -114,7 +113,7 @@ class BackupListModalDialog extends React.Component {
.then(() =>
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/preparation-portal"
)

View File

@ -3,7 +3,6 @@ import Submenu from "@docspace/components/submenu";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "../../../../../../package.json";
@ -33,7 +32,7 @@ const DataManagementWrapper = (props) => {
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/settings/datamanagement/${e.id}`
)

View File

@ -6,8 +6,6 @@ import { inject, observer } from "mobx-react";
import PortalDeactivationSection from "./portalDeactivation";
import PortalDeletionSection from "./portalDeletion";
import DeleteDataLoader from "./DeleteDataLoader";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "../../../../../package.json";
@ -40,7 +38,7 @@ const DeleteData = (props) => {
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/portal-settings/delete-data/${e.id}`
)

View File

@ -3,7 +3,6 @@ import Submenu from "@docspace/components/submenu";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import { isMobile } from "react-device-detect";
@ -67,7 +66,7 @@ const IntegrationWrapper = (props) => {
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/portal-settings/integration/${e.id}`
)

View File

@ -4,9 +4,7 @@ import Text from "@docspace/components/text";
import { inject, observer } from "mobx-react";
import SelectUsersCountContainer from "./sub-components/SelectUsersCountContainer";
import TotalTariffContainer from "./sub-components/TotalTariffContainer";
import { smallTablet } from "@docspace/components/utils/device";
import toastr from "@docspace/components/toast/toastr";
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
import axios from "axios";
import { combineUrl } from "@docspace/common/utils";
import ButtonContainer from "./sub-components/ButtonContainer";
@ -103,7 +101,7 @@ const PriceCalculation = ({
await axios
.put(
combineUrl(AppServerConfig.apiPrefix, "/portal/payment/url"),
combineUrl(window.DocSpaceConfig?.proxy?.url, "/portal/payment/url"),
{ quantity: { admin: value } },
{
cancelToken: source.token,

View File

@ -78,18 +78,17 @@ const StyledBody = styled.div`
cursor: ${(props) => (props.isDisabled ? "default" : "pointer")};
}
.circle {
position: relative;
background: ${(props) =>
props.theme.client.settings.payment.rectangleColor};
display: flex;
border: 1px solid
${(props) => props.theme.client.settings.payment.rectangleColor};
border-radius: 50%;
width: 38px;
height: 38px;
justify-content: center;
-ms-align-items: center;
align-items: center;
svg {
position: absolute;
path {
fill: ${(props) =>
props.isDisabled
@ -98,6 +97,19 @@ const StyledBody = styled.div`
}
}
}
.minus-icon {
svg {
top: 44%;
left: 28%;
}
}
.plus-icon {
svg {
top: 30%;
left: 27%;
}
}
}
.payment-users_count {
margin-left: 20px;
@ -223,7 +235,11 @@ const SelectUsersCountContainer = ({
</Text>
<SelectTotalSizeContainer isNeedPlusSign={isNeedPlusSign} />
<div className="payment-users">
<div className="circle" {...onClickProp} data-operation={"minus"}>
<div
className="circle minus-icon"
{...onClickProp}
data-operation={"minus"}
>
<MinusIcon {...onClickProp} className="payment-score" />
</div>
@ -234,7 +250,11 @@ const SelectUsersCountContainer = ({
value={value}
{...onchangeNumberProp}
/>
<div className="circle" {...onClickProp} data-operation={"plus"}>
<div
className="circle plus-icon"
{...onClickProp}
data-operation={"plus"}
>
<PlusIcon {...onClickProp} className="payment-score" />
</div>
</div>

View File

@ -3,7 +3,6 @@ import Submenu from "@docspace/components/submenu";
import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
@ -55,7 +54,7 @@ const SecurityWrapper = (props) => {
const onSelect = (e) => {
history.push(
combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/portal-settings/security/${e.id}`
)

View File

@ -7,7 +7,6 @@ import {
StyledArrowRightIcon,
} from "../StyledSecurity";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
const MobileCategoryWrapper = (props) => {
const { title, url, subtitle, onClickLink } = props;
@ -19,7 +18,7 @@ const MobileCategoryWrapper = (props) => {
className="inherit-title-link header"
onClick={onClickLink}
truncate={true}
href={combineUrl(AppServerConfig.proxyURL, url)}
href={combineUrl(window.DocSpaceConfig?.proxy?.url, url)}
>
{title}
</Link>

View File

@ -3,7 +3,6 @@ import { Route, Switch, Redirect } from "react-router-dom";
import { withRouter } from "react-router";
import Layout from "./Layout";
import { combineUrl } from "@docspace/common/utils";
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
import Panels from "../../components/FilesPanels";
const SecuritySettings = lazy(() => import("./categories/security/index.js"));
@ -67,7 +66,10 @@ const WhiteLabel = lazy(() =>
);
const Branding = lazy(() => import("./categories/common/branding"));
const PROXY_BASE_URL = combineUrl(AppServerConfig.proxyURL, "/portal-settings");
const PROXY_BASE_URL = combineUrl(
window.DocSpaceConfig?.proxy?.url,
"/portal-settings"
);
const COMMON_URLS = [
PROXY_BASE_URL,
@ -167,7 +169,10 @@ const DELETE_DATA_URLS = [
combineUrl(PROXY_BASE_URL, "/delete-data/deactivation"),
];
const ERROR_404_URL = combineUrl(AppServerConfig.proxyURL, "/error/404");
const ERROR_404_URL = combineUrl(
window.DocSpaceConfig?.proxy?.url,
"/error/404"
);
const Settings = () => {
return (

View File

@ -7,7 +7,6 @@ import IconButton from "@docspace/components/icon-button";
import ContextMenuButton from "@docspace/components/context-menu-button";
import Headline from "@docspace/common/components/Headline";
import Loaders from "@docspace/common/components/Loaders";
import { AppServerConfig } from "@docspace/common/constants";
import { DeleteSelfProfileDialog } from "SRC_DIR/components/dialogs";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
@ -71,7 +70,7 @@ const Header = (props) => {
const onClickBack = () => {
const url = filter.toUrlParams();
const backUrl = combineUrl(
AppServerConfig.proxyURL,
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/accounts/filter?/${url}`
);

View File

@ -6,7 +6,6 @@ import { useTranslation } from "react-i18next";
import styled from "styled-components";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
const Wrapper = styled.div`
display: grid;
@ -30,7 +29,9 @@ const SectionHeaderContent = (props) => {
const { t } = useTranslation("People");
const onClickBack = useCallback(() => {
history.push(combineUrl(AppServerConfig.proxyURL, config.homepage));
history.push(
combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage)
);
}, [history]);
return (

View File

@ -11,7 +11,6 @@ import { withTranslation } from "react-i18next";
import EmptyFolderContainer from "../../../../components/EmptyContainer/EmptyContainer";
import { inject, observer } from "mobx-react";
import combineUrl from "@docspace/common/utils/combineUrl";
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
import config from "PACKAGE_FILE";
import { withRouter } from "react-router";
import { connectedCloudsTypeTitleTranslation } from "@docspace/client/src/helpers/filesUtils";
@ -155,7 +154,11 @@ class ConnectClouds extends React.Component {
const urlFilter = newFilter.toUrlParams();
setFirstLoad(true);
history.push(
combineUrl(AppServerConfig.proxyURL, homepage, `/filter?${urlFilter}`) //TODO: Change url by category
combineUrl(
window.DocSpaceConfig?.proxy?.url,
homepage,
`/filter?${urlFilter}`
) //TODO: Change url by category
);
});
};

View File

@ -6,7 +6,6 @@ import Error520 from "client/Error520";
//import ConnectClouds from "./ConnectedClouds";
import { inject, observer } from "mobx-react";
import { combineUrl } from "@docspace/common/utils";
import { AppServerConfig } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import Submenu from "@docspace/components/submenu";
import CommonSettings from "./CommonSettings";
@ -65,7 +64,11 @@ const SectionBodyContent = ({ isVisitor, isErrorSettings, history }) => {
if (id === setting) return;
history.push(
combineUrl(AppServerConfig.proxyURL, config.homepage, `/settings/${id}`)
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/settings/${id}`
)
);
},
[setting, history]

View File

@ -96,11 +96,12 @@ const VersionRow = (props) => {
label: t("EditComment"),
onClick: onEditComment,
},
canChangeVersionFileHistory && {
key: "restore",
label: t("Common:Restore"),
onClick: onRestoreClick,
},
index !== 0 &&
canChangeVersionFileHistory && {
key: "restore",
label: t("Common:Restore"),
onClick: onRestoreClick,
},
{
key: "download",
label: `${t("Common:Download")} (${info.contentLength})`,

View File

@ -24,7 +24,6 @@ import ModalContainer from "./sub-components/modal-dialog-container";
import { setDocumentTitle } from "SRC_DIR/helpers/utils";
import { inject, observer } from "mobx-react";
import { AppServerConfig } from "@docspace/common/constants";
import withCultureNames from "@docspace/common/hoc/withCultureNames";
const emailSettings = new EmailSettings();
@ -103,7 +102,7 @@ class Body extends Component {
window.addEventListener("keyup", this.onKeyPressHandler);
if (!wizardToken) {
history.push(combineUrl(AppServerConfig.proxyURL, "/"));
history.push(combineUrl(window.DocSpaceConfig?.proxy?.url, "/"));
} else {
await axios
.all([
@ -254,7 +253,7 @@ class Body extends Component {
getPortalSettings();
})
.then(() =>
history.push(combineUrl(AppServerConfig.proxyURL, "/login"))
history.push(combineUrl(window.DocSpaceConfig?.proxy?.url, "/login"))
)
.catch((error) => {
let errorMessage = "";

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