diff --git a/packages/client/src/pages/Home/Hooks/useFiles.js b/packages/client/src/pages/Home/Hooks/useFiles.js index d8dff898a2..7001aee8e0 100644 --- a/packages/client/src/pages/Home/Hooks/useFiles.js +++ b/packages/client/src/pages/Home/Hooks/useFiles.js @@ -314,6 +314,7 @@ const useFiles = ({ fromTemplate: true, title: gallerySelected.attributes.name_form, openEditor: !isFormRoom, + edit: true, }; event.payload = payload; diff --git a/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js b/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js index 4d0ebdf60c..6b63b948b7 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js +++ b/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js @@ -70,7 +70,7 @@ const tagList = (tags, selectTag) => ( key={i} className="property-tag" label={tag} - onClick={() => selectTag(tag)} + onClick={() => selectTag({ label: tag })} /> ))} diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/index.js index ccd107b2b7..c63bcf72e5 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/index.js +++ b/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/index.js @@ -67,7 +67,7 @@ const AccountsTable = (props) => { }, { key: UserTypes.RoomAdmin, - label: t(`Common:${UserTypes.RoomAdmin}`), + label: t("Common:RoomAdmin"), onClick: setTypeRoomAdmin, }, { diff --git a/packages/client/src/pages/PortalSettings/categories/security/access-portal/bruteForceProtection.js b/packages/client/src/pages/PortalSettings/categories/security/access-portal/bruteForceProtection.js index dcf00b7cfa..f51113e1f2 100644 --- a/packages/client/src/pages/PortalSettings/categories/security/access-portal/bruteForceProtection.js +++ b/packages/client/src/pages/PortalSettings/categories/security/access-portal/bruteForceProtection.js @@ -265,6 +265,7 @@ const BruteForceProtection = (props) => { { { ["customization"] = JSON.parse(customization || "{}"); const theme = sdkCustomization?.uiTheme || user?.theme; - if (newConfig.editorConfig) + if (newConfig.editorConfig) { newConfig.editorConfig.customization = { ...newConfig.editorConfig.customization, ...sdkCustomization, goback: { ...goBack }, - close: { visible: SHOW_CLOSE, text: t("Common:CloseButton") }, uiTheme: getEditorTheme(theme as ThemeKeys), }; + if (SHOW_CLOSE) { + newConfig.editorConfig.customization.close = { + visible: SHOW_CLOSE, + text: t("Common:CloseButton"), + }; + } + } + //if (newConfig.document && newConfig.document.info) // newConfig.document.info.favorite = false; diff --git a/packages/shared/components/share/sub-components/LinkRow.tsx b/packages/shared/components/share/sub-components/LinkRow.tsx index 6b36ac4b63..662800eb0e 100644 --- a/packages/shared/components/share/sub-components/LinkRow.tsx +++ b/packages/shared/components/share/sub-components/LinkRow.tsx @@ -153,6 +153,7 @@ const LinkRow = ({ modernView type="onlyIcon" isDisabled={isExpiredLink || isLoaded} + manualWidth="fit-content" /> diff --git a/packages/shared/components/tabs/Tabs.styled.ts b/packages/shared/components/tabs/Tabs.styled.ts index d9526bd0f2..627140cfd7 100644 --- a/packages/shared/components/tabs/Tabs.styled.ts +++ b/packages/shared/components/tabs/Tabs.styled.ts @@ -57,11 +57,18 @@ export const StyledTabs = styled.div<{ width: 60px; pointer-events: none; - background: linear-gradient( + background: ${(props) => + props.theme.interfaceDirection === "ltr" + ? `linear-gradient( 90deg, rgba(255, 255, 255, 0) 20.48%, - ${(props) => props.theme.tabs.gradientColor} 100% - ); + ${props.theme.tabs.gradientColor} 100% + )` + : `linear-gradient( + 270deg, + rgba(255, 255, 255, 0) 20.48%, + ${props.theme.tabs.gradientColor} 100%)`}; + transform: matrix(-1, 0, 0, 1, 0, 0); z-index: 1; @@ -71,14 +78,29 @@ export const StyledTabs = styled.div<{ position: absolute; height: 32px; width: 60px; - right: 0; + pointer-events: none; - background: linear-gradient( + ${(props) => + props.theme.interfaceDirection === "ltr" + ? css` + right: 0; + ` + : css` + left: 0; + `} + + background: ${(props) => + props.theme.interfaceDirection === "ltr" + ? `linear-gradient( 90deg, rgba(255, 255, 255, 0) 20.48%, - ${(props) => props.theme.tabs.gradientColor} 100% - ); + ${props.theme.tabs.gradientColor} 100% + )` + : `linear-gradient( + 270deg, + rgba(255, 255, 255, 0) 20.48%, + ${props.theme.tabs.gradientColor} 100%)`}; z-index: 1; } diff --git a/packages/shared/components/tabs/Tabs.tsx b/packages/shared/components/tabs/Tabs.tsx index e4fe6603a8..8cf4d30c4b 100644 --- a/packages/shared/components/tabs/Tabs.tsx +++ b/packages/shared/components/tabs/Tabs.tsx @@ -24,7 +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 -import React, { useState, useRef, useEffect } from "react"; +import React, { useState, useRef, useEffect, useCallback } from "react"; +import { useTheme } from "styled-components"; import { Scrollbar as ScrollbarType } from "../scrollbar/custom-scrollbar"; @@ -51,6 +52,8 @@ const Tabs = (props: TabsProps) => { ...rest } = props; + const theme = useTheme(); + let selectedItemIndex = items.findIndex((item) => item.id === selectedItemId); if (selectedItemIndex === INDEX_NOT_FOUND) { selectedItemIndex = 0; @@ -66,33 +69,60 @@ const Tabs = (props: TabsProps) => { const isViewFirstTab = useViewTab(scrollRef, tabsRef, 0); const isViewLastTab = useViewTab(scrollRef, tabsRef, items.length - 1); + const scrollToTab = useCallback( + (index: number): void => { + if (!scrollRef.current || !tabsRef.current) return; + + const containerElement = scrollRef.current.scrollerElement; + const tabElement = tabsRef.current.children[index] as HTMLDivElement; + + if (!containerElement || !tabElement) return; + + const containerWidth = containerElement.offsetWidth; + const tabWidth = tabElement?.offsetWidth; + const tabOffsetLeft = tabElement?.offsetLeft; + + if (theme.interfaceDirection === "ltr") { + if (tabOffsetLeft - OFFSET_LEFT < containerElement.scrollLeft) { + scrollRef.current.scrollTo(tabOffsetLeft - OFFSET_LEFT); + } else if ( + tabOffsetLeft + tabWidth > + containerElement.scrollLeft + containerWidth + ) { + scrollRef.current.scrollTo( + tabOffsetLeft - containerWidth + tabWidth + OFFSET_RIGHT, + ); + } + + return; + } + + const rect = tabElement?.getBoundingClientRect(); + + if (rect.left - OFFSET_LEFT < 0) { + scrollRef.current.scrollTo( + -( + Math.abs(rect.left) + + OFFSET_LEFT + + Math.abs(containerElement.scrollLeft) + ), + ); + } else if (rect.right > containerWidth && !!containerElement.scrollLeft) { + scrollRef.current.scrollTo( + rect.right - + containerWidth + + containerElement.scrollLeft + + OFFSET_RIGHT, + ); + } + }, + [theme.interfaceDirection], + ); + useEffect(() => { setCurrentItem(items[selectedItemIndex]); - }, [selectedItemIndex, items]); - - const scrollToTab = (index: number): void => { - if (!scrollRef.current || !tabsRef.current) return; - - const containerElement = scrollRef.current.scrollerElement; - const tabElement = tabsRef.current.children[index] as HTMLDivElement; - - if (!containerElement || !tabElement) return; - - const containerWidth = containerElement.offsetWidth; - const tabWidth = tabElement?.offsetWidth; - const tabOffsetLeft = tabElement.offsetLeft; - - if (tabOffsetLeft - OFFSET_LEFT < containerElement.scrollLeft) { - scrollRef.current.scrollTo(tabOffsetLeft - OFFSET_LEFT); - } else if ( - tabOffsetLeft + tabWidth > - containerElement.scrollLeft + containerWidth - ) { - scrollRef.current.scrollTo( - tabOffsetLeft - containerWidth + tabWidth + OFFSET_RIGHT, - ); - } - }; + scrollToTab(selectedItemIndex); + }, [selectedItemIndex, items, scrollToTab]); const setSelectedItem = (selectedTabItem: TTabItem, index: number): void => { setCurrentItem(selectedTabItem); @@ -116,7 +146,8 @@ const Tabs = (props: TabsProps) => { $type={type} onClick={() => { item.onClick?.(); - setSelectedItem(item, index); + + return setSelectedItem(item, index); }} > {item.name} diff --git a/packages/shared/utils/next-ssr-helper.ts b/packages/shared/utils/next-ssr-helper.ts index 9862acc4a1..7d900a4be3 100644 --- a/packages/shared/utils/next-ssr-helper.ts +++ b/packages/shared/utils/next-ssr-helper.ts @@ -73,21 +73,21 @@ export const createRequest = ( if (authToken) hdrs.set("Authorization", authToken); - const allCookie = cookieStore.getAll(); - - const sharedLink = allCookie + cookieStore + .getAll() .map((c) => { - if (c.name.includes("sharedlink")) { + if (c.name.includes("sharelink")) { return c; } return false; }) - .filter((v) => !!v); + .filter((v) => !!v) + .forEach((value) => { + hdrs.set(value.name, value.value); - if (sharedLink[0]) { - hdrs.set(sharedLink[0].name, sharedLink[0].value); - } + return value; + }); const urls = paths.map((path) => `${apiURL}${path}`);