Web: Files: PublicRoom: added primary link
This commit is contained in:
parent
3cdbdd6521
commit
340ea3a9e7
@ -1,5 +1,6 @@
|
||||
import FileActionsLockedReactSvgUrl from "PUBLIC_DIR/images/file.actions.locked.react.svg?url";
|
||||
import FileActionsDownloadReactSvgUrl from "PUBLIC_DIR/images/download.react.svg?url";
|
||||
import LinkReactSvgUrl from "PUBLIC_DIR/images/link.react.svg?url";
|
||||
import LockedReactSvgUrl from "PUBLIC_DIR/images/locked.react.svg?url";
|
||||
import FileActionsFavoriteReactSvgUrl from "PUBLIC_DIR/images/file.actions.favorite.react.svg?url";
|
||||
import FavoriteReactSvgUrl from "PUBLIC_DIR/images/favorite.react.svg?url";
|
||||
@ -8,9 +9,10 @@ import styled from "styled-components";
|
||||
import IconButton from "@docspace/components/icon-button";
|
||||
import commonIconsStyles from "@docspace/components/utils/common-icons-style";
|
||||
import { isMobile, isTablet } from "react-device-detect";
|
||||
import { FileStatus } from "@docspace/common/constants";
|
||||
import { FileStatus, RoomsType } from "@docspace/common/constants";
|
||||
|
||||
import { ColorTheme, ThemeType } from "@docspace/components/ColorTheme";
|
||||
import copy from "copy-to-clipboard";
|
||||
|
||||
const QuickButtons = (props) => {
|
||||
const {
|
||||
@ -62,6 +64,14 @@ const QuickButtons = (props) => {
|
||||
const isAvailableDownloadFile =
|
||||
isPublicRoom && item.security.Download && viewAs === "tile";
|
||||
|
||||
const isPublicRoomType = item.roomType === RoomsType.PublicRoom;
|
||||
|
||||
const onCopyLink = () => {
|
||||
console.log("onCopyLink", item); // TODO:
|
||||
return;
|
||||
copy();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="badges additional-badges">
|
||||
{isAvailableLockFile && (
|
||||
@ -92,6 +102,19 @@ const QuickButtons = (props) => {
|
||||
title={t("Common:Download")}
|
||||
/>
|
||||
)}
|
||||
{isPublicRoomType && (
|
||||
<ColorTheme
|
||||
themeId={ThemeType.IconButton}
|
||||
iconName={LinkReactSvgUrl}
|
||||
className="badge copy-link icons-group"
|
||||
size={sizeQuickButton}
|
||||
onClick={onCopyLink}
|
||||
color={colorLock}
|
||||
isDisabled={isDisabled}
|
||||
hoverColor={theme.filesQuickButtons.sharedColor}
|
||||
title={t("Files:CopySharedLink")}
|
||||
/>
|
||||
)}
|
||||
{/* {fileExst && !isTrashFolder && displayBadges && (
|
||||
<ColorTheme
|
||||
themeId={ThemeType.IconButton}
|
||||
|
@ -65,6 +65,7 @@ const StyledEditLinkPanel = styled.div`
|
||||
display: flex;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 8px;
|
||||
gap: 8px;
|
||||
|
||||
.edit-link-toggle {
|
||||
${(props) =>
|
||||
|
@ -22,6 +22,7 @@ import ToggleBlock from "./ToggleBlock";
|
||||
import PasswordAccessBlock from "./PasswordAccessBlock";
|
||||
import LimitTimeBlock from "./LimitTimeBlock";
|
||||
import { isMobileOnly } from "react-device-detect";
|
||||
import { RoomsType } from "@docspace/common/constants";
|
||||
|
||||
const EditLinkPanel = (props) => {
|
||||
const {
|
||||
@ -41,12 +42,12 @@ const EditLinkPanel = (props) => {
|
||||
link,
|
||||
date,
|
||||
language,
|
||||
isPublic,
|
||||
} = props;
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const linkTitle = link?.sharedTo?.title ?? "";
|
||||
const [linkNameValue, setLinkNameValue] = useState(linkTitle);
|
||||
const [linkNameValue, setLinkNameValue] = useState("");
|
||||
const [passwordValue, setPasswordValue] = useState(password);
|
||||
const [expirationDate, setExpirationDate] = useState(date);
|
||||
const isExpiredDate = expirationDate
|
||||
@ -151,7 +152,7 @@ const EditLinkPanel = (props) => {
|
||||
window.addEventListener("keydown", onKeyPress);
|
||||
|
||||
return () => window.removeEventListener("keydown", onKeyPress);
|
||||
}, [unsavedChangesDialogVisible]);
|
||||
}, [onKeyPress]);
|
||||
|
||||
const linkNameIsValid = !!linkNameValue.trim();
|
||||
|
||||
@ -161,6 +162,8 @@ const EditLinkPanel = (props) => {
|
||||
? `${t("Files:LinkValidUntil")}:`
|
||||
: t("Files:ChooseExpirationDate");
|
||||
|
||||
const isPrimary = link?.sharedTo?.primary;
|
||||
|
||||
const editLinkPanelComponent = (
|
||||
<StyledEditLinkPanel isExpired={isExpired}>
|
||||
<Backdrop
|
||||
@ -177,7 +180,13 @@ const EditLinkPanel = (props) => {
|
||||
>
|
||||
<div className="edit-link_header">
|
||||
<Heading className="edit-link_heading">
|
||||
{isEdit ? t("Files:EditLink") : t("Files:CreateNewLink")}
|
||||
{isEdit
|
||||
? isPrimary
|
||||
? t("Files:EditPrimaryLink")
|
||||
: isPublic
|
||||
? t("Files:EditAdditionalLink")
|
||||
: t("Files:EditLink")
|
||||
: t("Files:CreateNewLink")}
|
||||
</Heading>
|
||||
</div>
|
||||
<StyledScrollbar stype="mediumBlack">
|
||||
@ -211,16 +220,18 @@ const EditLinkPanel = (props) => {
|
||||
isChecked={denyDownload}
|
||||
onChange={onDenyDownloadChange}
|
||||
/>
|
||||
<LimitTimeBlock
|
||||
isExpired={isExpired}
|
||||
isLoading={isLoading}
|
||||
headerText={t("Files:LimitByTimePeriod")}
|
||||
bodyText={expiredLinkText}
|
||||
expirationDate={expirationDate}
|
||||
setExpirationDate={setExpirationDate}
|
||||
setIsExpired={setIsExpired}
|
||||
language={language}
|
||||
/>
|
||||
{!isPrimary && (
|
||||
<LimitTimeBlock
|
||||
isExpired={isExpired}
|
||||
isLoading={isLoading}
|
||||
headerText={t("Files:LimitByTimePeriod")}
|
||||
bodyText={expiredLinkText}
|
||||
expirationDate={expirationDate}
|
||||
setExpirationDate={setExpirationDate}
|
||||
setIsExpired={setIsExpired}
|
||||
language={language}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</StyledScrollbar>
|
||||
|
||||
@ -276,6 +287,7 @@ export default inject(({ auth, dialogsStore, publicRoomStore }) => {
|
||||
const link = externalLinks.find((l) => l?.sharedTo?.id === linkId);
|
||||
|
||||
const shareLink = link?.sharedTo?.shareLink;
|
||||
const isPublic = selectionParentRoom?.roomType === RoomsType.PublicRoom;
|
||||
|
||||
return {
|
||||
visible: editLinkPanelIsVisible,
|
||||
@ -295,6 +307,7 @@ export default inject(({ auth, dialogsStore, publicRoomStore }) => {
|
||||
setUnsavedChangesDialog,
|
||||
link,
|
||||
language: auth.language,
|
||||
isPublic,
|
||||
};
|
||||
})(
|
||||
withTranslation(["SharingPanel", "Common", "Files"])(observer(EditLinkPanel))
|
||||
|
@ -64,7 +64,7 @@ export const CategoryType = Object.freeze({
|
||||
* @readonly
|
||||
*/
|
||||
export const TableVersions = Object.freeze({
|
||||
Rooms: "1",
|
||||
Rooms: "2",
|
||||
Files: "2",
|
||||
Accounts: "3",
|
||||
Trash: "4",
|
||||
|
@ -40,6 +40,7 @@ const Members = ({
|
||||
externalLinks,
|
||||
members,
|
||||
setMembersList,
|
||||
roomType,
|
||||
}) => {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const membersHelper = new MembersHelper({ t });
|
||||
@ -217,7 +218,7 @@ const Members = ({
|
||||
|
||||
return (
|
||||
<>
|
||||
{isPublicRoomType && <PublicRoomBlock t={t} />}
|
||||
{isPublicRoomType && <PublicRoomBlock t={t} roomType={roomType} />}
|
||||
<MembersList
|
||||
loadNextPage={loadNextPage}
|
||||
t={t}
|
||||
@ -299,6 +300,7 @@ export default inject(
|
||||
externalLinks: roomLinks,
|
||||
members: membersList,
|
||||
setMembersList,
|
||||
roomType,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
@ -10,6 +10,7 @@ import ContextMenuButton from "@docspace/components/context-menu-button";
|
||||
import { toastr } from "@docspace/components";
|
||||
import CopyReactSvgUrl from "PUBLIC_DIR/images/copy.react.svg?url";
|
||||
import EyeReactSvgUrl from "PUBLIC_DIR/images/eye.react.svg?url";
|
||||
import UniverseReactSvgUrl from "PUBLIC_DIR/images/universe.react.svg?url";
|
||||
import SettingsReactSvgUrl from "PUBLIC_DIR/images/catalog.settings.react.svg?url";
|
||||
import ShareReactSvgUrl from "PUBLIC_DIR/images/share.react.svg?url";
|
||||
import CodeReactSvgUrl from "PUBLIC_DIR/images/code.react.svg?url";
|
||||
@ -35,13 +36,21 @@ const LinkRow = (props) => {
|
||||
setDeleteLinkDialogVisible,
|
||||
setEmbeddingPanelIsVisible,
|
||||
isArchiveFolder,
|
||||
theme,
|
||||
...rest
|
||||
} = props;
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const { title, shareLink, password, disabled, expirationDate, isExpired } =
|
||||
link.sharedTo;
|
||||
const {
|
||||
title,
|
||||
shareLink,
|
||||
password,
|
||||
disabled,
|
||||
expirationDate,
|
||||
isExpired,
|
||||
primary,
|
||||
} = link.sharedTo;
|
||||
|
||||
const isLocked = !!password;
|
||||
const expiryDate = !!expirationDate;
|
||||
@ -132,19 +141,19 @@ const LinkRow = (props) => {
|
||||
onClick: onCopyExternalLink,
|
||||
},
|
||||
|
||||
disabled
|
||||
? {
|
||||
key: "enable-link-key",
|
||||
label: t("Files:EnableLink"),
|
||||
icon: LoadedReactSvgUrl,
|
||||
onClick: onDisableLink,
|
||||
}
|
||||
: {
|
||||
key: "disable-link-key",
|
||||
label: t("Files:DisableLink"),
|
||||
icon: OutlineReactSvgUrl,
|
||||
onClick: onDisableLink,
|
||||
},
|
||||
// disabled
|
||||
// ? {
|
||||
// key: "enable-link-key",
|
||||
// label: t("Files:EnableLink"),
|
||||
// icon: LoadedReactSvgUrl,
|
||||
// onClick: onDisableLink,
|
||||
// }
|
||||
// : {
|
||||
// key: "disable-link-key",
|
||||
// label: t("Files:DisableLink"),
|
||||
// icon: OutlineReactSvgUrl,
|
||||
// onClick: onDisableLink,
|
||||
// },
|
||||
|
||||
{
|
||||
key: "delete-link-separator",
|
||||
@ -159,11 +168,13 @@ const LinkRow = (props) => {
|
||||
];
|
||||
};
|
||||
|
||||
const textColor = disabled ? theme.text.disableColor : theme.text.color;
|
||||
|
||||
return (
|
||||
<StyledLinkRow {...rest} isExpired={isExpired}>
|
||||
<StyledLinkRow {...rest} isExpired={isExpired} isPrimary={primary}>
|
||||
<Avatar
|
||||
size="min"
|
||||
source={EyeReactSvgUrl}
|
||||
source={primary ? UniverseReactSvgUrl : EyeReactSvgUrl}
|
||||
roleIcon={expiryDate ? <ClockReactSvg /> : null}
|
||||
withTooltip={expiryDate}
|
||||
tooltipContent={tooltipContent}
|
||||
@ -180,16 +191,14 @@ const LinkRow = (props) => {
|
||||
fontWeight={600}
|
||||
onClick={onEditLink}
|
||||
isDisabled={disabled}
|
||||
color={disabled ? "#A3A9AE" : ""}
|
||||
color={textColor}
|
||||
className="external-row-link"
|
||||
>
|
||||
{title}
|
||||
</Link>
|
||||
)}
|
||||
|
||||
{disabled && (
|
||||
<Text color={disabled ? "#A3A9AE" : ""}>{t("Settings:Disabled")}</Text>
|
||||
)}
|
||||
{disabled && <Text color={textColor}>{t("Settings:Disabled")}</Text>}
|
||||
|
||||
<div className="external-row-icons">
|
||||
{!disabled && !isArchiveFolder && (
|
||||
@ -216,7 +225,7 @@ const LinkRow = (props) => {
|
||||
{!isArchiveFolder && (
|
||||
<ContextMenuButton
|
||||
getData={getData}
|
||||
isDisabled={false}
|
||||
isDisabled={isLoading}
|
||||
title={t("Files:ShowLinkActions")}
|
||||
/>
|
||||
)}
|
||||
@ -228,6 +237,8 @@ const LinkRow = (props) => {
|
||||
export default inject(
|
||||
({ auth, dialogsStore, publicRoomStore, treeFoldersStore }) => {
|
||||
const { selectionParentRoom } = auth.infoPanelStore;
|
||||
const { theme } = auth.settingsStore;
|
||||
|
||||
const {
|
||||
setEditLinkPanelIsVisible,
|
||||
setDeleteLinkDialogVisible,
|
||||
@ -246,6 +257,7 @@ export default inject(
|
||||
setDeleteLinkDialogVisible,
|
||||
setEmbeddingPanelIsVisible,
|
||||
isArchiveFolder,
|
||||
theme,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
@ -1,13 +1,21 @@
|
||||
import React, { useState } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import Text from "@docspace/components/text";
|
||||
import Link from "@docspace/components/link";
|
||||
import IconButton from "@docspace/components/icon-button";
|
||||
import Tooltip from "@docspace/components/tooltip";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import LinksToViewingIconUrl from "PUBLIC_DIR/images/links-to-viewing.react.svg?url";
|
||||
import PlusReactSvgUrl from "PUBLIC_DIR/images/actions.button.plus.react.svg?url";
|
||||
import PublicRoomBar from "./PublicRoomBar";
|
||||
import { LinksBlock } from "./StyledPublicRoom";
|
||||
import {
|
||||
LinksBlock,
|
||||
StyledLinkRow,
|
||||
StyledPublicRoomBlock,
|
||||
} from "./StyledPublicRoom";
|
||||
import LinkRow from "./LinkRow";
|
||||
import { RoomsType } from "@docspace/common/constants";
|
||||
import Avatar from "@docspace/components/avatar";
|
||||
|
||||
const LINKS_LIMIT_COUNT = 10;
|
||||
|
||||
@ -18,6 +26,8 @@ const PublicRoomBlock = (props) => {
|
||||
isArchiveFolder,
|
||||
setLinkParams,
|
||||
setEditLinkPanelIsVisible,
|
||||
roomType,
|
||||
primaryLink,
|
||||
} = props;
|
||||
|
||||
const onAddNewLink = () => {
|
||||
@ -25,77 +35,105 @@ const PublicRoomBlock = (props) => {
|
||||
setEditLinkPanelIsVisible(true);
|
||||
};
|
||||
|
||||
const isPublicRoom = roomType === RoomsType.PublicRoom;
|
||||
|
||||
return (
|
||||
<>
|
||||
{externalLinks.length > 0 && !isArchiveFolder && (
|
||||
<StyledPublicRoomBlock>
|
||||
{((externalLinks.length > 0 && !isArchiveFolder) || isPublicRoom) && (
|
||||
<PublicRoomBar
|
||||
headerText={t("Files:RoomAvailableViaExternalLink")}
|
||||
bodyText={t("CreateEditRoomDialog:PublicRoomBarDescription")}
|
||||
/>
|
||||
)}
|
||||
<LinksBlock>
|
||||
<>
|
||||
{isArchiveFolder ? (
|
||||
<Text fontSize="14px" fontWeight={600} color="#a3a9ae">
|
||||
{t("Files:Links")}: {externalLinks.length}
|
||||
</Text>
|
||||
<LinksBlock>
|
||||
<Text fontSize="14px" fontWeight={600}>
|
||||
{t("Files:Links")}: {externalLinks.length}
|
||||
</Text>
|
||||
</LinksBlock>
|
||||
) : (
|
||||
<>
|
||||
<Text fontSize="14px" fontWeight={600} color="#a3a9ae">
|
||||
{externalLinks.length
|
||||
? t("LinksToViewingIcon")
|
||||
: t("Files:NoExternalLinks")}
|
||||
</Text>
|
||||
|
||||
<div
|
||||
data-tooltip-id="emailTooltip"
|
||||
data-tooltip-content={t(
|
||||
"Files:MaximumNumberOfExternalLinksCreated"
|
||||
)}
|
||||
>
|
||||
<IconButton
|
||||
className="link-to-viewing-icon"
|
||||
iconName={LinksToViewingIconUrl}
|
||||
onClick={onAddNewLink}
|
||||
size={16}
|
||||
isDisabled={externalLinks.length >= LINKS_LIMIT_COUNT}
|
||||
title={t("Files:AddNewExternalLink")}
|
||||
/>
|
||||
|
||||
{externalLinks.length >= LINKS_LIMIT_COUNT && (
|
||||
<Tooltip
|
||||
float
|
||||
id="emailTooltip"
|
||||
getContent={({ content }) => (
|
||||
<Text fontSize="12px">{content}</Text>
|
||||
)}
|
||||
place="bottom"
|
||||
/>
|
||||
)}
|
||||
<div className="primary-link-block">
|
||||
<LinksBlock>
|
||||
<Text fontSize="14px" fontWeight={600}>
|
||||
{t("Files:PrimaryLink")}
|
||||
</Text>
|
||||
</LinksBlock>
|
||||
{primaryLink && <LinkRow link={primaryLink} />} {/* TODO: */}
|
||||
</div>
|
||||
|
||||
<LinksBlock>
|
||||
<Text fontSize="14px" fontWeight={600}>
|
||||
{externalLinks.length
|
||||
? t("LinksToViewingIcon")
|
||||
: t("Files:AdditionalLinks")}
|
||||
</Text>
|
||||
|
||||
<div
|
||||
data-tooltip-id="emailTooltip"
|
||||
data-tooltip-content={t(
|
||||
"Files:MaximumNumberOfExternalLinksCreated"
|
||||
)}
|
||||
>
|
||||
<IconButton
|
||||
className="link-to-viewing-icon"
|
||||
iconName={LinksToViewingIconUrl}
|
||||
onClick={onAddNewLink}
|
||||
size={16}
|
||||
isDisabled={externalLinks.length >= LINKS_LIMIT_COUNT}
|
||||
title={t("Files:AddNewExternalLink")}
|
||||
/>
|
||||
|
||||
{externalLinks.length >= LINKS_LIMIT_COUNT && (
|
||||
<Tooltip
|
||||
float
|
||||
id="emailTooltip"
|
||||
getContent={({ content }) => (
|
||||
<Text fontSize="12px">{content}</Text>
|
||||
)}
|
||||
place="bottom"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</LinksBlock>
|
||||
</>
|
||||
)}
|
||||
</LinksBlock>
|
||||
</>
|
||||
|
||||
{externalLinks.length ? (
|
||||
externalLinks.map((link) => (
|
||||
<LinkRow link={link} key={link?.sharedTo?.id} />
|
||||
))
|
||||
) : (
|
||||
<></>
|
||||
<StyledLinkRow onClick={onAddNewLink}>
|
||||
<Avatar size="min" source={PlusReactSvgUrl} />
|
||||
|
||||
<Link
|
||||
isHovered
|
||||
type="action"
|
||||
fontSize="14px"
|
||||
fontWeight={600}
|
||||
className="external-row-link"
|
||||
>
|
||||
{t("Files:CreateNewLink")}
|
||||
</Link>
|
||||
</StyledLinkRow>
|
||||
)}
|
||||
</>
|
||||
</StyledPublicRoomBlock>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ publicRoomStore, treeFoldersStore, dialogsStore }) => {
|
||||
const { roomLinks } = publicRoomStore;
|
||||
const { primaryLink, additionalLinks } = publicRoomStore;
|
||||
const { isArchiveFolder } = treeFoldersStore;
|
||||
const { setLinkParams, setEditLinkPanelIsVisible } = dialogsStore;
|
||||
|
||||
return {
|
||||
externalLinks: roomLinks,
|
||||
externalLinks: additionalLinks,
|
||||
isArchiveFolder,
|
||||
setLinkParams,
|
||||
setEditLinkPanelIsVisible,
|
||||
primaryLink,
|
||||
};
|
||||
})(observer(PublicRoomBlock));
|
||||
|
@ -2,6 +2,12 @@ import styled, { css } from "styled-components";
|
||||
import CrossReactSvg from "PUBLIC_DIR/images/cross.react.svg";
|
||||
import commonIconsStyles from "@docspace/components/utils/common-icons-style";
|
||||
|
||||
const StyledPublicRoomBlock = styled.div`
|
||||
.primary-link-block {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
`;
|
||||
|
||||
const StyledPublicRoomBar = styled.div`
|
||||
display: flex;
|
||||
background-color: ${(props) => props.theme.infoBlock.background};
|
||||
@ -66,6 +72,10 @@ const LinksBlock = styled.div`
|
||||
justify-content: space-between;
|
||||
padding: 8px 0px 12px 0px;
|
||||
|
||||
p {
|
||||
color: ${({ theme }) => theme.text.disableColor};
|
||||
}
|
||||
|
||||
.link-to-viewing-icon {
|
||||
svg {
|
||||
weight: 16px;
|
||||
@ -78,13 +88,14 @@ const StyledLinkRow = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
gap: 12px;
|
||||
padding: 8px 0px;
|
||||
|
||||
.external-row-link {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.external-row-icons {
|
||||
@ -93,6 +104,18 @@ const StyledLinkRow = styled.div`
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.avatar-wrapper {
|
||||
${({ isPrimary, theme }) =>
|
||||
isPrimary &&
|
||||
css`
|
||||
svg {
|
||||
path {
|
||||
fill: ${theme.infoPanel.links.primaryColor} !important;
|
||||
}
|
||||
}
|
||||
`}
|
||||
}
|
||||
|
||||
.avatar_role-wrapper {
|
||||
${({ isExpired, theme }) =>
|
||||
css`
|
||||
@ -107,4 +130,10 @@ const StyledLinkRow = styled.div`
|
||||
}
|
||||
`;
|
||||
|
||||
export { StyledPublicRoomBar, StyledCrossIcon, LinksBlock, StyledLinkRow };
|
||||
export {
|
||||
StyledPublicRoomBlock,
|
||||
StyledPublicRoomBar,
|
||||
StyledCrossIcon,
|
||||
LinksBlock,
|
||||
StyledLinkRow,
|
||||
};
|
||||
|
@ -186,6 +186,18 @@ const StyledSimpleFilesRow = styled(Row)`
|
||||
}
|
||||
}
|
||||
|
||||
.copy-link {
|
||||
svg path {
|
||||
fill: unset;
|
||||
}
|
||||
|
||||
:hover {
|
||||
svg path {
|
||||
fill: ${({ theme }) => theme.filesQuickButtons.sharedColor};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.favorite {
|
||||
cursor: pointer;
|
||||
margin-top: 1px;
|
||||
|
@ -458,6 +458,18 @@ const StyledQuickButtonsContainer = styled.div`
|
||||
}
|
||||
}
|
||||
|
||||
.copy-link {
|
||||
svg path {
|
||||
fill: unset;
|
||||
}
|
||||
|
||||
:hover {
|
||||
svg path {
|
||||
fill: ${({ theme }) => theme.filesQuickButtons.sharedColor};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.favorite {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
@ -76,6 +76,13 @@ class FilesTableHeader extends React.Component {
|
||||
onChange: this.onColumnChange,
|
||||
onClick: this.onRoomsFilter,
|
||||
},
|
||||
{
|
||||
key: "QuickButtons",
|
||||
title: "",
|
||||
enable: this.props.roomColumnQuickButtonsIsEnabled,
|
||||
defaultSize: 75,
|
||||
resizable: false,
|
||||
},
|
||||
];
|
||||
defaultColumns.push(...columns);
|
||||
} else if (isTrashFolder) {
|
||||
@ -488,6 +495,7 @@ export default inject(
|
||||
roomColumnTypeIsEnabled,
|
||||
roomColumnTagsIsEnabled,
|
||||
roomColumnOwnerIsEnabled,
|
||||
roomColumnQuickButtonsIsEnabled,
|
||||
roomColumnActivityIsEnabled,
|
||||
|
||||
getColumns,
|
||||
@ -536,6 +544,7 @@ export default inject(
|
||||
roomColumnTypeIsEnabled,
|
||||
roomColumnTagsIsEnabled,
|
||||
roomColumnOwnerIsEnabled,
|
||||
roomColumnQuickButtonsIsEnabled,
|
||||
roomColumnActivityIsEnabled,
|
||||
|
||||
getColumns,
|
||||
|
@ -8,11 +8,13 @@ import AuthorCell from "./AuthorCell";
|
||||
import DateCell from "./DateCell";
|
||||
import { classNames } from "@docspace/components/utils/classNames";
|
||||
import { StyledBadgesContainer } from "../StyledTable";
|
||||
import { StyledQuickButtonsContainer } from "../StyledTable";
|
||||
|
||||
const RoomsRowDataComponent = (props) => {
|
||||
const {
|
||||
roomColumnTypeIsEnabled,
|
||||
roomColumnOwnerIsEnabled,
|
||||
roomColumnQuickButtonsIsEnabled,
|
||||
roomColumnTagsIsEnabled,
|
||||
roomColumnActivityIsEnabled,
|
||||
|
||||
@ -26,6 +28,7 @@ const RoomsRowDataComponent = (props) => {
|
||||
inProgress,
|
||||
showHotkeyBorder,
|
||||
badgesComponent,
|
||||
quickButtonsComponent,
|
||||
} = props;
|
||||
|
||||
return (
|
||||
@ -122,6 +125,23 @@ const RoomsRowDataComponent = (props) => {
|
||||
) : (
|
||||
<div />
|
||||
)}
|
||||
|
||||
{roomColumnQuickButtonsIsEnabled ? (
|
||||
<TableCell
|
||||
style={
|
||||
!roomColumnQuickButtonsIsEnabled
|
||||
? { background: "none" }
|
||||
: dragStyles.style
|
||||
}
|
||||
{...selectionProp}
|
||||
>
|
||||
<StyledQuickButtonsContainer>
|
||||
{quickButtonsComponent}
|
||||
</StyledQuickButtonsContainer>
|
||||
</TableCell>
|
||||
) : (
|
||||
<div />
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
@ -130,6 +150,7 @@ export default inject(({ tableStore }) => {
|
||||
const {
|
||||
roomColumnTypeIsEnabled,
|
||||
roomColumnOwnerIsEnabled,
|
||||
roomColumnQuickButtonsIsEnabled,
|
||||
roomColumnTagsIsEnabled,
|
||||
roomColumnActivityIsEnabled,
|
||||
} = tableStore;
|
||||
@ -137,6 +158,7 @@ export default inject(({ tableStore }) => {
|
||||
return {
|
||||
roomColumnTypeIsEnabled,
|
||||
roomColumnOwnerIsEnabled,
|
||||
roomColumnQuickButtonsIsEnabled,
|
||||
roomColumnTagsIsEnabled,
|
||||
roomColumnActivityIsEnabled,
|
||||
};
|
||||
|
@ -235,7 +235,7 @@ const SectionHeaderContent = (props) => {
|
||||
setRoomSharingPanelVisible,
|
||||
downloadAction,
|
||||
isPublicRoomType,
|
||||
externalLinks,
|
||||
primaryLink,
|
||||
moveToPublicRoom,
|
||||
} = props;
|
||||
|
||||
@ -612,43 +612,18 @@ const SectionHeaderContent = (props) => {
|
||||
|
||||
const isDisabled = isRecycleBinFolder || isRoom;
|
||||
|
||||
const links = externalLinks.filter((l) => !l.sharedTo.disabled);
|
||||
const isMultiExternalLink = links.length > 1;
|
||||
|
||||
const roomLinks = links.map((link) => {
|
||||
return {
|
||||
// id: "option_move-to",
|
||||
key: `external-link_${link.sharedTo.id}`,
|
||||
label: link.sharedTo.title,
|
||||
icon: InvitationLinkReactSvgUrl,
|
||||
onClick: () => {
|
||||
copy(link.sharedTo.shareLink);
|
||||
toastr.success(t("Files:LinkSuccessfullyCopied"));
|
||||
},
|
||||
disabled: link.sharedTo.disabled,
|
||||
};
|
||||
});
|
||||
|
||||
const publicAction = links.length
|
||||
? isMultiExternalLink
|
||||
? {
|
||||
id: "header_option_copy-external-link",
|
||||
key: "copy-external-link",
|
||||
label: t("SharingPanel:CopyExternalLink"),
|
||||
icon: CopyToReactSvgUrl,
|
||||
disabled: !isPublicRoomType,
|
||||
items: roomLinks,
|
||||
}
|
||||
: {
|
||||
id: "header_option_copy-external-link",
|
||||
key: "copy-external-link",
|
||||
label: t("SharingPanel:CopyExternalLink"),
|
||||
icon: CopyToReactSvgUrl,
|
||||
onClick: () => {
|
||||
roomLinks[0]?.onClick();
|
||||
},
|
||||
disabled: !isPublicRoomType || roomLinks[0]?.disabled,
|
||||
}
|
||||
const publicAction = primaryLink
|
||||
? {
|
||||
id: "header_option_copy-external-link",
|
||||
key: "copy-external-link",
|
||||
label: t("SharingPanel:CopyExternalLink"),
|
||||
icon: CopyToReactSvgUrl,
|
||||
onClick: () => {
|
||||
copy(primaryLink.sharedTo.shareLink);
|
||||
toastr.success(t("Files:LinkSuccessfullyCopied"));
|
||||
},
|
||||
disabled: !isPublicRoomType || primaryLink.sharedTo.disabled,
|
||||
}
|
||||
: {};
|
||||
|
||||
if (isArchiveFolder) {
|
||||
@ -1305,7 +1280,9 @@ export default inject(
|
||||
onClickBack,
|
||||
isPublicRoomType,
|
||||
isPublicRoom: publicRoomStore.isPublicRoom,
|
||||
externalLinks: publicRoomStore.roomLinks,
|
||||
|
||||
primaryLink: publicRoomStore.primaryLink,
|
||||
|
||||
moveToPublicRoom,
|
||||
|
||||
getAccountsHeaderMenu,
|
||||
|
@ -1136,15 +1136,16 @@ class ContextOptionsStore {
|
||||
label: t("LinkForRoomMembers"),
|
||||
icon: InvitationLinkReactSvgUrl,
|
||||
onClick: () => this.onCopyLink(item, t),
|
||||
disabled: this.publicRoomStore.isPublicRoom,
|
||||
disabled: item.roomType === RoomsType.PublicRoom,
|
||||
},
|
||||
{
|
||||
id: "option_copy-external-link",
|
||||
key: "external-link",
|
||||
label: t("SharingPanel:CopyExternalLink"),
|
||||
label: t("Files:CopySharedLink"),
|
||||
icon: CopyToReactSvgUrl,
|
||||
disabled: this.treeFoldersStore.isArchiveFolder,
|
||||
onLoad: () => this.onLoadLinks(t, item),
|
||||
onClick: () => this.onCopyLink(item, t), // TODO:
|
||||
// onLoad: () => this.onLoadLinks(t, item),
|
||||
},
|
||||
{
|
||||
id: "option_room-info",
|
||||
|
@ -496,7 +496,11 @@ class HotkeyStore {
|
||||
|
||||
openItem = () => {
|
||||
const { selection } = this.filesStore;
|
||||
|
||||
const someDialogIsOpen = checkDialogsOpen();
|
||||
|
||||
selection.length === 1 &&
|
||||
!someDialogIsOpen &&
|
||||
this.filesActionsStore.openFileAction(selection[0]);
|
||||
};
|
||||
|
||||
|
@ -126,6 +126,15 @@ class PublicRoomStore {
|
||||
l.sharedTo.linkType === LinkType.External
|
||||
);
|
||||
}
|
||||
|
||||
get primaryLink() {
|
||||
return this.roomLinks.find((l) => l.sharedTo.primary);
|
||||
}
|
||||
|
||||
get additionalLinks() {
|
||||
const additionalLinks = this.roomLinks.filter((l) => !l.sharedTo.primary);
|
||||
return additionalLinks;
|
||||
}
|
||||
}
|
||||
|
||||
export default PublicRoomStore;
|
||||
|
@ -21,6 +21,7 @@ class TableStore {
|
||||
roomColumnTypeIsEnabled = false;
|
||||
roomColumnTagsIsEnabled = true;
|
||||
roomColumnOwnerIsEnabled = false;
|
||||
roomColumnQuickButtonsIsEnabled = true;
|
||||
roomColumnActivityIsEnabled = true;
|
||||
|
||||
nameColumnIsEnabled = true; // always true
|
||||
|
@ -101,7 +101,11 @@ const Avatar = (props) => {
|
||||
|
||||
return (
|
||||
<StyledAvatar {...props}>
|
||||
<AvatarWrapper source={source} userName={userName}>
|
||||
<AvatarWrapper
|
||||
source={source}
|
||||
userName={userName}
|
||||
className="avatar-wrapper"
|
||||
>
|
||||
{avatarContent}
|
||||
</AvatarWrapper>
|
||||
{editing && size === "max" ? (
|
||||
|
@ -2019,6 +2019,7 @@ const Base = {
|
||||
links: {
|
||||
iconColor: "#3B72A7",
|
||||
iconErrorColor: "rgba(242, 28, 14, 0.5)", //"#F21C0E",
|
||||
primaryColor: "#555F65",
|
||||
},
|
||||
|
||||
members: {
|
||||
|
@ -2015,6 +2015,7 @@ const Dark = {
|
||||
links: {
|
||||
iconColor: "#858585",
|
||||
iconErrorColor: "rgba(242, 28, 14, 0.5)", //"#F21C0E",
|
||||
primaryColor: "#ADADAD",
|
||||
},
|
||||
|
||||
members: {
|
||||
|
Loading…
Reference in New Issue
Block a user