Merge branch 'develop' into feature/management

This commit is contained in:
Viktor Fomin 2023-08-02 11:26:54 +03:00
commit 89b8673f99
29 changed files with 268 additions and 75 deletions

View File

@ -1568,9 +1568,9 @@
<ROW Key="xml" Component="tools" FileName="*.xml" Directory="tools_Dir" Options="17"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.XmlAttributeComponent">
<ROW XmlAttribute="minlevel" XmlElement="logger" Name="minlevel" Flags="14" Order="0" Value="Trace"/>
<ROW XmlAttribute="minlevel_1" XmlElement="logger_1" Name="minlevel" Flags="14" Order="0" Value="Trace"/>
<ROW XmlAttribute="minlevel_2" XmlElement="logger_2" Name="minlevel" Flags="14" Order="0" Value="Trace"/>
<ROW XmlAttribute="minlevel" XmlElement="logger" Name="minlevel" Flags="14" Order="0" Value="Warn"/>
<ROW XmlAttribute="minlevel_1" XmlElement="logger_1" Name="minlevel" Flags="14" Order="0" Value="Warn"/>
<ROW XmlAttribute="minlevel_2" XmlElement="logger_2" Name="minlevel" Flags="14" Order="0" Value="Warn"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
<ROW XmlElement="logger" ParentElement="rules" Name="logger" Condition="ENVIRONMENT = &quot;PRODUCT.ENVIRONMENT.SUB&quot;" Order="0" Flags="22" UpdateIndexInParent="0"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -42,7 +42,6 @@ del /f /q build\install\win\Files\config\*.test.json
del /f /q build\install\win\Files\config\*.dev.json
::default logging to warning
%sed% -i "s/minlevel=\"Debug\""/minlevel=\"Warn\""/g" build\install\win\Files\config\nlog.config
%sed% "s_\(\"Default\":\).*,_\1 \"Warning\",_g" -i build\install\win\Files\config\appsettings.json
%sed% "s_\(\"logLevel\":\).*_\1 \"warning\"_g" -i build\install\win\Files\config\appsettings.services.json
%sed% "/\"debug-info\": {/,/}/ s/\(\"enabled\": \)\".*\"/\1\"false\"/" -i build\install\win\Files\config\appsettings.json

View File

@ -12202,6 +12202,122 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>ErrorEmptyList</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>ErrorInternalServer</name>
<description/>

View File

@ -1,6 +1,6 @@
{
"name": "docspace",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"workspaces": {
"packages": [

View File

@ -1,6 +1,6 @@
{
"name": "@docspace/client",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"homepage": "",
"scripts": {

View File

@ -350,6 +350,8 @@ const FilesSelector = ({
setIsRequestRunning(false);
clearActiveOperations(fileIds, folderIds);
});
} else {
toastr.error(t("Common:ErrorEmptyList"));
}
} else {
setIsRequestRunning(true);
@ -553,9 +555,11 @@ export default inject(
isMove || isCopy || isRestoreAll
? isRestoreAll
? filesList
: selection.length
: selection.length > 0 && selection[0] != null
? selection
: [bufferSelection]
: bufferSelection != null
? [bufferSelection]
: []
: [];
const selectionsWithoutEditing = isRestoreAll

View File

@ -143,7 +143,12 @@ const AboutContent = (props) => {
&nbsp;ONLYOFFICE DocSpace&nbsp;
</ColorTheme>
<Text className="row-el select-el" fontSize="13px" fontWeight="600">
<Text
className="row-el select-el"
fontSize="13px"
fontWeight="600"
title={`${BUILD_AT}`}
>
v.
<span className="version-document-management">
{buildVersionInfo.docspace}

View File

@ -234,7 +234,14 @@ const useFiles = ({
if (filter) {
if (isRooms) {
return fetchRooms(null, filter);
return fetchRooms(
null,
filter,
undefined,
undefined,
undefined,
true
);
} else {
const folderId = filter.folder;
return fetchFiles(folderId, filter);

View File

@ -54,7 +54,7 @@ const Dialogs = ({
<ChangePasswordDialog
visible={changePasswordVisible}
onClose={() => setChangePasswordVisible(false)}
email={profile.email}
email={data.email}
/>
)}
{changeOwner && (

View File

@ -249,6 +249,7 @@ const SectionFilterContent = ({
showFilterLoader,
isPublicRoom,
publicRoomKey,
setRoomsFilter,
}) => {
const location = useLocation();
const navigate = useNavigate();
@ -350,7 +351,6 @@ const SectionFilterContent = ({
newFilter.searchArea === RoomSearchArea.Active
? "rooms/shared"
: "rooms/archived";
navigate(`${path}/filter?${newFilter.toUrlParams()}`);
} else {
const filterType = getFilterType(data) || null;
@ -504,7 +504,7 @@ const SectionFilterContent = ({
newFilter.searchArea === RoomSearchArea.Active
? "rooms/shared"
: "rooms/archived";
setRoomsFilter(newFilter);
navigate(`${path}/filter?${newFilter.toUrlParams()}`);
} else {
const path = location.pathname.split("/filter")[0];
@ -2060,6 +2060,7 @@ export default inject(
setClearSearch,
isLoadedEmptyPage,
filesSettingsStore,
setRoomsFilter,
} = filesStore;
const { providers } = thirdPartyStore;
@ -2140,6 +2141,7 @@ export default inject(
accountsFilter,
isPublicRoom,
publicRoomKey,
setRoomsFilter,
};
}
)(

View File

@ -25,22 +25,24 @@ const WhiteLabel = ({
defaultWhiteLabelLogoUrls,
getWhiteLabelLogoText,
getWhiteLabelLogoUrlsAction,
setLogoText,
}) => {
const { t } = useTranslation("Settings");
const [isLoadedData, setIsLoadedData] = useState(false);
const [logoTextWhiteLabel, setLogoTextWhiteLabel] = useState("");
const [defaultLogoTextWhiteLabel, setDefaultLogoTextWhiteLabel] = useState(
""
);
const [defaultLogoTextWhiteLabel, setDefaultLogoTextWhiteLabel] =
useState("");
const [logoUrlsWhiteLabel, setLogoUrlsWhiteLabel] = useState(null);
const [isSaving, setIsSaving] = useState(false);
useEffect(() => {
const companyNameFromSessionStorage = getFromSessionStorage("companyName");
useEffect(() => {
if (!companyNameFromSessionStorage) {
if (!logoText) return;
setLogoTextWhiteLabel(logoText);
saveToSessionStorage("companyName", logoText);
} else {
@ -134,7 +136,9 @@ const WhiteLabel = ({
setIsSaving(true);
await setWhiteLabelSettings(data);
await getWhiteLabelLogoUrls();
await getWhiteLabelLogoUrlsAction(); //TODO: delete duplicate request
await getWhiteLabelLogoUrlsAction();
setLogoText(data.logoText);
//TODO: delete duplicate request
toastr.success(t("Settings:SuccessfullySaveSettingsMessage"));
} catch (error) {
toastr.error(error);
@ -169,6 +173,7 @@ export default inject(({ setup, auth, common }) => {
const { setWhiteLabelSettings } = setup;
const {
setLogoText,
whiteLabelLogoText,
getWhiteLabelLogoText,
whiteLabelLogoUrls,
@ -182,6 +187,7 @@ export default inject(({ setup, auth, common }) => {
} = auth.settingsStore;
return {
setLogoText,
theme: auth.settingsStore.theme,
logoText: whiteLabelLogoText,
logoUrls: whiteLabelLogoUrls,

View File

@ -115,9 +115,9 @@ export const resetSessionStorage = () => {
if (storagePeriodSettings !== defaultStoragePeriodSettings) {
saveToSessionStorage("storagePeriod", defaultStoragePeriodSettings);
}
if (companyNameFromeSessionStorage !== "ONLYOFFICE") {
saveToSessionStorage("companyName", "ONLYOFFICE");
}
sessionStorage.removeItem("companyName");
if (
companySettingsFromSessionStorage !==
defaultCompanySettingsFromSessionStorage

View File

@ -81,7 +81,7 @@ class AccountsContextOptionsStore {
key: option,
icon: ChangeSecurityReactSvgUrl,
label: t("PeopleTranslations:PasswordChangeButton"),
onClick: this.toggleChangePasswordDialog,
onClick: () => this.toggleChangePasswordDialog(item),
};
case "change-owner":
return {
@ -313,8 +313,14 @@ class AccountsContextOptionsStore {
setChangeEmailVisible(true);
};
toggleChangePasswordDialog = () => {
toggleChangePasswordDialog = (item) => {
const { setDialogData } = this.peopleStore.dialogStore;
const { setChangePasswordVisible } = this.peopleStore.targetUserStore;
const { email } = item;
setDialogData({
email,
});
setChangePasswordVisible(true);
};

View File

@ -92,12 +92,12 @@ class DialogsStore {
this.restoreAllArchive = restoreAllArchive;
};
setArchiveDialogVisible = (archiveDialogVisible) => {
this.archiveDialogVisible = archiveDialogVisible;
setArchiveDialogVisible = (visible) => {
this.archiveDialogVisible = visible;
};
setRestoreRoomDialogVisible = (restoreRoomDialogVisible) => {
this.restoreRoomDialogVisible = restoreRoomDialogVisible;
setRestoreRoomDialogVisible = (visible) => {
this.restoreRoomDialogVisible = visible;
};
setSharingPanelVisible = (sharingPanelVisible) => {
@ -116,18 +116,36 @@ class DialogsStore {
this.ownerPanelVisible = ownerPanelVisible;
};
setMoveToPanelVisible = (moveToPanelVisible) => {
!moveToPanelVisible && this.deselectActiveFiles();
this.moveToPanelVisible = moveToPanelVisible;
setMoveToPanelVisible = (visible) => {
!visible && this.deselectActiveFiles();
if (
visible &&
!this.filesStore.hasSelection &&
!this.filesStore.hasBufferSelection
)
return;
this.moveToPanelVisible = visible;
};
setRestoreAllPanelVisible = (restoreAllPanelVisible) => {
this.restoreAllPanelVisible = restoreAllPanelVisible;
setRestoreAllPanelVisible = (visible) => {
this.restoreAllPanelVisible = visible;
};
setCopyPanelVisible = (copyPanelVisible) => {
!copyPanelVisible && this.deselectActiveFiles();
this.copyPanelVisible = copyPanelVisible;
setCopyPanelVisible = (visible) => {
!visible && this.deselectActiveFiles();
if (
visible &&
!this.filesStore.hasSelection &&
!this.filesStore.hasBufferSelection
) {
console.log("No files selected");
return;
}
this.copyPanelVisible = visible;
};
setRoomCreation = (roomCreation) => {

View File

@ -147,7 +147,11 @@ class FilesActionStore {
if (isRoomsFolder || isArchiveFolder || isArchiveFolderRoot) {
fetchRooms(
updatedFolder,
newFilter ? newFilter : roomsFilter.clone()
newFilter ? newFilter : roomsFilter.clone(),
undefined,
undefined,
undefined,
true
).finally(() => {
this.dialogsStore.setIsFolderActions(false);
return setTimeout(

View File

@ -1009,6 +1009,7 @@ class FilesStore {
};
setSelection = (selection) => {
// console.log("setSelection", selection);
this.selection = selection;
};
@ -1090,6 +1091,7 @@ class FilesStore {
};
setBufferSelection = (bufferSelection) => {
// console.log("setBufferSelection", bufferSelection);
this.bufferSelection = bufferSelection;
};
@ -1345,7 +1347,26 @@ class FilesStore {
if (clearFilter) {
if (clearSelection) {
// Find not processed
const tempSelection = this.selection.filter(
(f) => !this.activeFiles.find((elem) => elem.id === f.id)
);
const tempBuffer =
this.bufferSelection &&
this.activeFiles.find(
(elem) => elem.id === this.bufferSelection.id
) == null
? this.bufferSelection
: null;
// console.log({ tempSelection, tempBuffer });
// Clear all selections
this.setSelected("close");
// Restore not processed
tempSelection.length && this.setSelection(tempSelection);
tempBuffer && this.setBufferSelection(tempBuffer);
}
}
@ -1482,7 +1503,8 @@ class FilesStore {
filter,
clearFilter = true,
withSubfolders = false,
clearSelection = true
clearSelection = true,
withFilterLocalStorage = false
) => {
const { setSelectedNode, roomsFolderId } = this.treeFoldersStore;
@ -1497,7 +1519,7 @@ class FilesStore {
`UserRoomsFilter=${this.authStore.userStore.user?.id}`
);
if (filterStorageItem && !filter) {
if ((filterStorageItem && !filter) || withFilterLocalStorage) {
const splitFilter = filterStorageItem.split(",");
filterData.sortBy = splitFilter[0];
@ -1526,7 +1548,14 @@ class FilesStore {
if (filterData.page > lastPage) {
filterData.page = lastPage;
return this.fetchRooms(folderId, filterData);
return this.fetchRooms(
folderId,
filterData,
undefined,
undefined,
undefined,
true
);
}
}
@ -3138,19 +3167,21 @@ class FilesStore {
}
get selectionTitle() {
if (this.selection.length === 0) {
if (this.bufferSelection) {
if (this.selection.length === 0 && this.bufferSelection) {
return this.bufferSelection.title;
}
return null;
}
return this.selection.find((el) => el.title).title;
return this.selection.find((el) => el.title)?.title || null;
}
get hasSelection() {
return !!this.selection.length;
}
get hasBufferSelection() {
return !!this.bufferSelection;
}
get isEmptyFilesList() {
const filesList = [...this.files, ...this.folders];
return filesList.length <= 0;

View File

@ -75,19 +75,23 @@ class VersionHistoryStore {
setVerHistoryFileVersions = (versions) => {
const file = this.filesStore.files.find((item) => item.id == this.fileId);
const currentVersionGroup = Math.max.apply(
null,
versions.map((ver) => ver.versionGroup)
);
const currentVersion = versions.reduce((prev, current) => {
return prev.versionGroup > current.versionGroup ? prev : current;
});
const currentComment =
versions[versions.length - currentVersionGroup].comment;
// const currentVersionGroup = Math.max.apply(
// null,
// versions.map((ver) => ver.versionGroup)
// );
// const currentComment =
// versions[versions.length - currentVersionGroup].comment;
const newFile = {
...file,
comment: currentComment,
comment: currentVersion.comment,
version: versions.length,
versionGroup: currentVersionGroup,
versionGroup: currentVersion.versionGroup,
};
this.filesStore.setFile(newFile);

View File

@ -1,6 +1,6 @@
{
"name": "@docspace/common",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"scripts": {
"build": "echo 'skip it'",

View File

@ -12,7 +12,7 @@ const LoginContainer = styled.div`
z-index: 0;
.remember-wrapper {
max-width: 142px;
max-width: 170px;
display: flex;
flex-direction: row;
align-items: center;

View File

@ -1,6 +1,6 @@
{
"name": "@docspace/components",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"scripts": {
"build": "echo 'skip it'",

View File

@ -1,6 +1,6 @@
{
"name": "@docspace/editor",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"homepage": "/doceditor",
"scripts": {

View File

@ -1,6 +1,6 @@
{
"name": "@docspace/login",
"version": "1.1.1",
"version": "1.1.2",
"private": true,
"homepage": "/login",
"scripts": {

View File

@ -442,21 +442,10 @@ internal class GoogleDriveStorage : IThirdPartyStorage<DriveFile, DriveFile, Dri
{
response = await httpClient.SendAsync(request);
}
catch (HttpRequestException exception) // todo create catch
{
/*if (exception. != null && exception.Response.Headers.AllKeys.Contains("Range")) if (exception.Status == WebExceptionStatus.ProtocolError || exception.Status == WebExceptionStatus.UnknownError) //Status is UnknownError (unix)
{
response = exception.Response;
}
else if (exception.Message.Equals("Invalid status code: 308", StringComparison.InvariantCulture)) //response is null (unix)
{
response = null;
}
else
catch (Exception exception) // todo create catch
{
_logger.ErrorWithException(exception);
throw;
}*/
throw exception;
}
if (response == null || response.StatusCode != HttpStatusCode.Created && response.StatusCode != HttpStatusCode.OK)

View File

@ -1807,8 +1807,8 @@ public class EntryManager
lastVersionFile = await UpdateToVersionFileAsync(fileVersion.Id, fileVersion.Version, null, checkRight, true);
}
await fileDao.CompleteVersionAsync(fileVersion.Id, fileVersion.Version);
lastVersionFile.VersionGroup++;
//await fileDao.CompleteVersionAsync(fileVersion.Id, fileVersion.Version);
//lastVersionFile.VersionGroup++;
}
}

View File

@ -106,6 +106,7 @@
"EncryptionKeysReload": "Encryption keys must be re-entered",
"EnterName": "Enter name",
"Error": "Error",
"ErrorEmptyList": "The list of entities has been changed. Please check the contents and try again.",
"ErrorInternalServer": "Internal server error. Try again later.",
"ErrorReport": "Error report",
"ErrorReportDescription": "Open the report below to see what data is included. Error reports do not contain any personal data of the users. To help our team better understand the problem, describe it in the free form using the comment field.",

View File

@ -104,6 +104,7 @@
"EncryptionKeysReload": "Ключи шифрования необходимо ввести повторно",
"EnterName": "Введите имя",
"Error": "Ошибка",
"ErrorEmptyList": "Список сущностей изменен. Пожалуйста, проверьте содержимое и повторите попытку.",
"ErrorInternalServer": "Внутренняя ошибка сервера. Повторите попытку позже.",
"ErrorReport": "Сообщение об ошибке",
"ErrorReportDescription": "Откройте отчет ниже, чтобы увидеть, какие данные в него включены. Отчеты об ошибках не содержат персональных данных пользователей. Чтобы помочь нашей команде понять проблему наилучшим образом, опишите ее в свободной форме в поле для комментариев.",