upd access-right-select

This commit is contained in:
Yaroslavna Gaivoronyuk 2022-01-25 11:17:38 +03:00
parent 1057cfa6a0
commit 6a7515eec6
7 changed files with 157 additions and 118 deletions

View File

@ -36,7 +36,8 @@ import AccessRightSelect from "@appserver/components/access-right-secelt";
{
key: "key1",
title: "Room administrator",
description: "Администрирование комнат, архивирование комнат, приглашение и управление пользователями в комнатах.",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.`,
icon: CrownIcon,
}
```

View File

@ -12,15 +12,20 @@ export const data = [
{
key: "key1",
title: "Room administrator",
description:
"Администрирование комнат, архивирование комнат, приглашение и управление пользователями в комнатах.",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.`,
icon: CrownIcon,
},
{
key: "key2",
title: "Full access",
description:
"Редактирование, загрузка, создание, просмотр, скачивание, удаление файлов и папок",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.`,
icon: CheckRoundIcon,
},
@ -28,28 +33,39 @@ export const data = [
{
key: "key4",
title: "Editing",
description:
"Редактирование, просмотр, скачивание файлов и папок, заполнение форм",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
`,
icon: PencilIcon,
},
{
key: "key5",
title: "Review",
description:
"Рецензирование, просмотр, скачивание файлов и папок, заполнение форм",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.`,
icon: ReviewIcon,
},
{
key: "key6",
title: "Comment",
description:
"Комментирование файлов, просмотр, скачивание файлов и папок, заполнение форм",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.`,
icon: CommentIcon,
},
{
key: "key7",
title: "Read only",
description: "Просмотр, скачивание файлов и папок, заполнение форм",
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.`,
icon: EyeIcon,
},
{

View File

@ -1,39 +1,77 @@
import React, { useState } from "react";
import PropTypes from "prop-types";
import LinkWithDropdown from "../link-with-dropdown/index.js";
import AccessRightItem from "./sub-components/access-right-item.js";
import ComboBox from "../combobox/index.js";
import DropDownItem from "../drop-down-item/index.js";
import Badge from "../badge/index.js";
import {
StyledAccessRightWrapper,
StyledAccessRightIcon,
StyledAccessRightDescriptionItem,
StyledAccessRightItem,
StyledAccessRightItemIcon,
StyledAccessRightItemContent,
StyledAccessRightItemTitleAndBadge,
} from "./styled-accessright.js";
const AccessRightSelect = ({ accessRightsList, quotaList, ...props }) => {
const [currentItem, setCurrentItem] = useState(accessRightsList[6]);
const formatToAccessRightItem = (data) => {
return data.map((it) => {
const itQuota = quotaList.find((elem) => elem.accessRightKey == it.key);
return it.isSeparator
? { ...it }
: {
key: it.key,
children: (
<AccessRightItem
key={it.key}
title={it.title}
description={it.description}
icon={it.icon}
quota={itQuota}
/>
),
onClick: () => setCurrentItem(it),
};
});
return (
<>
{data.map((it) => {
const itQuota = quotaList.find(
(elem) => elem.accessRightKey == it.key
);
return it.isSeparator ? (
<DropDownItem isSeparator />
) : (
<DropDownItem key={it.key} onClick={() => setCurrentItem(it)}>
<StyledAccessRightItem>
<StyledAccessRightItemIcon src={it.icon} />
<StyledAccessRightItemContent>
<StyledAccessRightItemTitleAndBadge>
{it.title}
{itQuota && (
<Badge
label={itQuota.quota}
backgroundColor={itQuota.color}
fontSize="8px"
/>
)}
</StyledAccessRightItemTitleAndBadge>
<StyledAccessRightDescriptionItem>
{it.description}
</StyledAccessRightDescriptionItem>
</StyledAccessRightItemContent>
</StyledAccessRightItem>
</DropDownItem>
);
})}
</>
);
};
return (
<div style={{ display: "flex" }}>
<img src={currentItem?.icon} style={{ marginRight: "4.18px" }} />
<LinkWithDropdown data={formatToAccessRightItem(accessRightsList)}>
{currentItem?.title}
</LinkWithDropdown>
</div>
<StyledAccessRightWrapper>
<StyledAccessRightIcon src={currentItem?.icon} />
<ComboBox
advancedOptions={formatToAccessRightItem(accessRightsList)}
directionX="left"
directionY="bottom"
opened
noBorder
options={[]}
scaled={false}
selectedOption={{
default: true,
key: 0,
label: currentItem?.title,
}}
size="content"
/>
</StyledAccessRightWrapper>
);
};

View File

@ -0,0 +1,59 @@
import styled from "styled-components";
import Base from "../themes/base";
const StyledAccessRightWrapper = styled.div`
display: flex;
`;
const StyledAccessRightIcon = styled.img`
margin-right: 4.18px;
`;
const StyledAccessRightItem = styled.div`
width: 424px;
display: flex;
align-items: flex-start;
justify-content: flex-start;
align-content: center;
padding: 7px 0px;
line-height: 16px;
font-style: normal;
`;
const StyledAccessRightDescriptionItem = styled.div`
margin: 1px 0px;
font-size: 13px;
font-style: normal;
font-weight: 400;
line-height: 16px;
color: #a3a9ae;
`;
const StyledAccessRightItemIcon = styled.img`
margin-right: 8px;
`;
const StyledAccessRightItemContent = styled.div`
width: 100%;
white-space: normal;
`;
const StyledAccessRightItemTitleAndBadge = styled.div`
display: flex;
align-items: center;
`;
StyledAccessRightItem.defaultProps = { theme: Base };
export {
StyledAccessRightItem,
StyledAccessRightDescriptionItem,
StyledAccessRightItemIcon,
StyledAccessRightItemContent,
StyledAccessRightItemTitleAndBadge,
StyledAccessRightWrapper,
StyledAccessRightIcon,
};

View File

@ -1,46 +0,0 @@
import React from "react";
import Badge from "../../badge";
import PropTypes from "prop-types";
import {
StyledAccessRightDescriptionItem,
StyledAccessRightItem,
} from "./styled-accessrightitem";
const AccessRightItem = ({ title, description, icon, quota, ...props }) => {
return (
<StyledAccessRightItem>
<img src={icon} style={{ marginRight: "8px" }} />
<div style={{ width: "100%", whiteSpace: "normal" }}>
<div style={{ display: "flex", alignItems: "center" }}>
{title}
{quota && (
<Badge
label={quota.quota}
backgroundColor={quota.color}
fontSize="8px"
/>
)}
</div>
<StyledAccessRightDescriptionItem>
{description}
</StyledAccessRightDescriptionItem>
</div>
</StyledAccessRightItem>
);
};
AccessRightItem.propTypes = {
title: PropTypes.string,
description: PropTypes.string,
icon: PropTypes.node,
quota: PropTypes.arrayOf(PropTypes.object),
/** Accepts id */
id: PropTypes.string,
/** Accepts class */
className: PropTypes.string,
/** Accepts CSS style */
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
};
export default AccessRightItem;

View File

@ -1,29 +0,0 @@
import styled from "styled-components";
import Base from "../../themes/base";
const StyledAccessRightItem = styled.div`
width: 424px;
display: flex;
align-items: flex-start;
justify-content: flex-start;
align-content: center;
padding: 7px 0px;
line-height: 16px;
font-style: normal;
`;
const StyledAccessRightDescriptionItem = styled.div`
margin: 1px 0px;
font-size: 13px;
font-style: normal;
font-weight: 400;
line-height: 16px;
color: #a3a9ae;
`;
StyledAccessRightItem.defaultProps = { theme: Base };
export { StyledAccessRightItem, StyledAccessRightDescriptionItem };

View File

@ -44,10 +44,11 @@ class LinkWithDropdown extends React.Component {
this.setIsOpen(this.props.isOpen);
}
}
// TODO: added new arg - _key
onClickDropDownItem = (e, _key) => {
onClickDropDownItem = (e) => {
const { key } = e.target.dataset;
const item = this.props.data.find((x) => x.key === key || x.key === _key);
console.log(e);
const item = this.props.data.find((x) => x.key === key);
this.setIsOpen(!this.state.isOpen);
item && item.onClick && item.onClick(e);
};
@ -117,8 +118,7 @@ class LinkWithDropdown extends React.Component {
className="drop-down-item"
key={item.key}
{...item}
// TODO: added item.key
onClick={(e) => this.onClickDropDownItem(e, item.key)}
onClick={(e) => this.onClickDropDownItem(e)}
data-key={item.key}
/>
))}