diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/Wrapper.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/Wrapper.js new file mode 100644 index 0000000000..58e1dd827d --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/Wrapper.js @@ -0,0 +1,11 @@ +import styled from 'styled-components'; + +const Wrapper = styled.div` + display: flex; + height: 36px; + border-radius: 2px; + margin-bottom: 18px; + background-color: ${({ theme, isGrey }) => (isGrey ? '#fafafb' : theme.main.colors.white)}; +`; + +export default Wrapper; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/index.js new file mode 100644 index 0000000000..d890cbf2a9 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ActionRow/index.js @@ -0,0 +1,83 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Text, Padded, Flex } from '@buffetjs/core'; +import { useIntl } from 'react-intl'; +// import { usePermissionsDataManager } from '../contexts/PermissionsDataManagerContext'; + +import ConditionsSelect from '../ConditionsSelect'; +import Wrapper from './Wrapper'; + +const ActionRow = ({ + arrayOfOptionsGroupedByCategory, + isGrey, + label, + name, + onCategoryChange, + onChange, + value, +}) => { + const { formatMessage } = useIntl(); + + return ( + + + + + {formatMessage({ + id: 'Settings.permissions.conditions.can', + })} + + + + {label} + + + + {formatMessage({ + id: 'Settings.permissions.conditions.when', + })} + + + + + + ); +}; + +ActionRow.propTypes = { + arrayOfOptionsGroupedByCategory: PropTypes.array.isRequired, + isGrey: PropTypes.bool.isRequired, + label: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + value: PropTypes.object.isRequired, + onCategoryChange: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, +}; +export default ActionRow; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/ClearIndicator.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/ClearIndicator.js new file mode 100644 index 0000000000..b24f77bdd6 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/ClearIndicator.js @@ -0,0 +1,15 @@ +import React from 'react'; +import { Remove } from '@buffetjs/icons'; +import { components } from 'react-select'; + +const ClearIndicator = props => { + const Component = components.ClearIndicator; + + return ( + + + + ); +}; + +export default ClearIndicator; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/CustomDropdownIndicator.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/CustomDropdownIndicator.js new file mode 100644 index 0000000000..628b29aa46 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/CustomDropdownIndicator.js @@ -0,0 +1,39 @@ +import React from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { Flex } from '@buffetjs/core'; +import styled from 'styled-components'; +import PropTypes from 'prop-types'; + +const Wrapper = styled(Flex)` + height: 100%; + width: 32px; + background: #fafafb; + > svg { + align-self: center; + font-size: 11px; + color: #b3b5b9; + } +`; + +const DropdownIndicator = ({ selectProps: { menuIsOpen } }) => { + const icon = menuIsOpen ? 'caret-up' : 'caret-down'; + + return ( + + + + ); +}; + +DropdownIndicator.propTypes = { + selectProps: PropTypes.shape({ + menuIsOpen: PropTypes.bool.isRequired, + }).isRequired, +}; + +Wrapper.defaultProps = { + flexDirection: 'column', + justifyContent: 'center', +}; + +export default DropdownIndicator; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/IndicatorSeparator.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/IndicatorSeparator.js new file mode 100644 index 0000000000..458dd41265 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/IndicatorSeparator.js @@ -0,0 +1,3 @@ +const IndicatorSeparator = () => null; + +export default IndicatorSeparator; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/SubUl.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/SubUl.js new file mode 100644 index 0000000000..283d99db4b --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/SubUl.js @@ -0,0 +1,48 @@ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +import React from 'react'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import { Collapse } from 'reactstrap'; + +const ToggleUl = styled(Collapse)` + font-size: 13px; + padding: 12px 15px 0 15px; + list-style: none; + background-color: #fff; + > li { + padding-top: 5px; + label { + cursor: pointer; + } + + .check-wrapper { + z-index: 9; + > input { + z-index: 1; + } + } + } + > li:not(:last-child) { + padding-bottom: 12px; + } +`; + +const SubUl = ({ children, isOpen }) => { + return ( + + {children} + + ); +}; + +SubUl.defaultProps = { + children: null, + isOpen: false, +}; + +SubUl.propTypes = { + children: PropTypes.node, + isOpen: PropTypes.bool, +}; + +export default SubUl; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/Ul.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/Ul.js new file mode 100644 index 0000000000..f94b2bce92 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/Ul.js @@ -0,0 +1,80 @@ +/* eslint-disable indent */ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +import styled from 'styled-components'; + +const Ul = styled.ul` + max-height: 150px; + font-size: 13px; + padding: 0 15px; + margin-bottom: 0px; + list-style: none; + background-color: #fff; + > li { + label { + flex-shrink: 1; + width: fit-content !important; + cursor: pointer; + margin-bottom: 0px; + } + + .check-wrapper { + z-index: 9; + > input { + z-index: 1; + } + } + .chevron { + margin: auto; + + font-size: 11px; + color: #919bae; + } + } + .li-multi-menu { + margin-bottom: -3px; + } + .li { + line-height: 27px; + position: relative; + > p { + margin: 0; + } + + &:hover { + > p::after { + content: attr(datadescr); + position: absolute; + left: 0; + color: #007eff; + font-weight: 700; + z-index: 100; + } + &::after { + content: ''; + position: absolute; + z-index: 1; + top: 0; + left: -30px; + right: -30px; + bottom: 0; + background-color: #e6f0fb; + } + } + } + ${({ disabled, theme }) => + disabled && + ` + label { + cursor: not-allowed !important; + } + input[type='checkbox'] { + cursor: not-allowed; + &:after { + cursor: not-allowed; + color: ${theme.main.colors.grey}; + } + } + `} +`; + +export default Ul; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/UpperFirst.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/UpperFirst.js new file mode 100644 index 0000000000..33905c788c --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/UpperFirst.js @@ -0,0 +1,6 @@ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +import { upperFirst } from 'lodash'; + +const UpperFirst = ({ content }) => upperFirst(content); + +export default UpperFirst; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/index.js new file mode 100644 index 0000000000..3551e9a000 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/index.js @@ -0,0 +1,139 @@ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +import React, { useState, useMemo } from 'react'; +import PropTypes from 'prop-types'; +import { components } from 'react-select'; +import { get } from 'lodash'; +import { Checkbox, Flex } from '@buffetjs/core'; +import { Label } from '@buffetjs/styles'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import SubUl from './SubUl'; +import Ul from './Ul'; +import UpperFirst from './UpperFirst'; +import { getCheckboxState } from '../../../utils'; +import createCollapsesObject from './utils/createCollapsesObject'; + +/* eslint-disable jsx-a11y/no-static-element-interactions */ + +const MenuList = ({ selectProps, ...rest }) => { + const Component = components.MenuList; + const { arrayOfOptionsGroupedByCategory } = selectProps; + + const initCollapses = useMemo(() => createCollapsesObject(arrayOfOptionsGroupedByCategory), [ + arrayOfOptionsGroupedByCategory, + ]); + const [collapses, setCollapses] = useState(initCollapses); + + const toggleCollapse = collapseName => { + setCollapses(prevState => ({ ...prevState, [collapseName]: !collapses[collapseName] })); + }; + + return ( + + + {arrayOfOptionsGroupedByCategory.map((category, index) => { + const [categoryName, conditions] = category; + const checkboxName = `${selectProps.name}..${categoryName}`; + + const { + hasAllActionsSelected: hasAllConditionsSelected, + hasSomeActionsSelected: hasSomeConditionsSelected, + } = getCheckboxState(selectProps.value); + + return ( + + + + + selectProps.onCategoryChange({ + keys: [selectProps.name, categoryName], + value: !hasAllConditionsSelected, + })} + > + + {}} + someChecked={hasSomeConditionsSelected} + value={hasAllConditionsSelected} + /> + + + + toggleCollapse(categoryName)} + > + + + + + + {conditions.map(condition => { + const checkboxValue = get(selectProps.value, [categoryName, condition.id], false); + + return ( + + + { + selectProps.onChange({ + keys: [selectProps.name, categoryName, condition.id], + value: !checkboxValue, + }); + }} + > + + {}} + value={checkboxValue} + /> + {condition.displayName} + + + + + ); + })} + + {index + 1 < arrayOfOptionsGroupedByCategory.length.length && ( + + )} + + ); + })} + + + ); +}; + +MenuList.propTypes = { + selectProps: PropTypes.shape({ + arrayOfOptionsGroupedByCategory: PropTypes.array.isRequired, + name: PropTypes.string.isRequired, + onCategoryChange: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, + value: PropTypes.object.isRequired, + }).isRequired, +}; +export default MenuList; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/utils/createCollapsesObject.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/utils/createCollapsesObject.js new file mode 100644 index 0000000000..d4415243a4 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/MenuList/utils/createCollapsesObject.js @@ -0,0 +1,8 @@ +const createCollapsesObject = arrayOfCategories => + arrayOfCategories.reduce((acc, current, index) => { + acc[current[0]] = index === 0; + + return acc; + }, {}); + +export default createCollapsesObject; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/SingleValue.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/SingleValue.js new file mode 100644 index 0000000000..9706264aaa --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/SingleValue.js @@ -0,0 +1,46 @@ +/* eslint-disable indent */ +import React from 'react'; +import PropTypes from 'prop-types'; +import { components } from 'react-select'; +import { Text } from '@buffetjs/core'; +import { useIntl } from 'react-intl'; +import { createArrayOfValues } from '../../utils'; + +const Value = ({ children, selectProps, ...props }) => { + const { formatMessage } = useIntl(); + const SingleValue = components.SingleValue; + const valuesArray = createArrayOfValues(selectProps.value).filter(val => val); + + return ( + + + {valuesArray.length === 0 + ? 'Anytime' + : formatMessage( + { + id: `Settings.permissions.conditions.selected.${ + selectProps.value.length > 1 ? 'plural' : 'singular' + }`, + }, + { number: valuesArray.length } + )} + + + ); +}; + +Value.defaultProps = { + children: null, + selectProps: { + value: [], + }, +}; + +Value.propTypes = { + children: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]), + selectProps: PropTypes.shape({ + value: PropTypes.object, + }), +}; + +export default Value; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/StyledOption.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/StyledOption.js new file mode 100644 index 0000000000..ab93a6ffbd --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/StyledOption.js @@ -0,0 +1,11 @@ +import styled from 'styled-components'; +import { Option } from '@buffetjs/core'; + +const StyledOption = styled(Option)` + > span { + display: block !important; + color: #007eff !important; + } +`; + +export default StyledOption; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/index.js new file mode 100644 index 0000000000..fa31243220 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/ConditionsSelect/index.js @@ -0,0 +1,69 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import Select from 'react-select'; +import { useIntl } from 'react-intl'; +import MenuList from './MenuList'; +import ClearIndicator from './ClearIndicator'; +import DropdownIndicator from './CustomDropdownIndicator'; +import IndicatorSeparator from './IndicatorSeparator'; +import SingleValue from './SingleValue'; +import selectStyle from '../utils/selectStyle'; + +const Wrapper = styled.div` + padding-left: 30px; + width: 60%; + cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'default')}; +`; + +const ConditionsSelect = ({ + arrayOfOptionsGroupedByCategory, + name, + onCategoryChange, + onChange, + value, +}) => { + const { formatMessage } = useIntl(); + + return ( + + + + ); +}; + +ConditionsSelect.propTypes = { + arrayOfOptionsGroupedByCategory: PropTypes.array.isRequired, + name: PropTypes.string.isRequired, + onCategoryChange: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, + value: PropTypes.object.isRequired, +}; + +export default ConditionsSelect; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/index.js index 2435d09c68..39c464c52c 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/index.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/index.js @@ -1,12 +1,59 @@ -import React from 'react'; +import React, { useMemo, useState } from 'react'; import PropTypes from 'prop-types'; +import { cloneDeep, get, groupBy, set } from 'lodash'; import { Modal, ModalHeader, ModalFooter } from 'strapi-helper-plugin'; import { Button, Text, Padded } from '@buffetjs/core'; import { useIntl } from 'react-intl'; +import createDefaultConditionsForm from './utils/createDefaultConditionsForm'; +import ActionRow from './ActionRow'; import Separator from './Separator'; +import { usePermissionsDataManager } from '../contexts/PermissionsDataManagerContext'; +import updateValues from '../Permissions/utils/updateValues'; -const ConditionsModal = ({ headerBreadCrumbs, isOpen, onClosed, onToggle }) => { +const ConditionsModal = ({ actions, headerBreadCrumbs, isOpen, onClosed, onToggle }) => { const { formatMessage } = useIntl(); + const { availableConditions, modifiedData } = usePermissionsDataManager(); + + const arrayOfOptionsGroupedByCategory = useMemo(() => { + return Object.entries(groupBy(availableConditions, 'category')); + }, [availableConditions]); + + const actionsToDisplay = actions.filter( + ({ isDisplayed, hasSomeActionsSelected, hasAllActionsSelected }) => + isDisplayed && (hasSomeActionsSelected || hasAllActionsSelected) + ); + + const initState = useMemo(() => { + return createDefaultConditionsForm( + actionsToDisplay, + modifiedData, + arrayOfOptionsGroupedByCategory + ); + }, [actionsToDisplay, modifiedData, arrayOfOptionsGroupedByCategory]); + + const [state, setState] = useState(initState); + + const handleCategoryChange = ({ keys, value }) => { + setState(prevState => { + const updatedState = cloneDeep(prevState); + const objToUpdate = get(prevState, keys, {}); + const updatedValues = updateValues(objToUpdate, value); + + set(updatedState, keys, updatedValues); + + return updatedState; + }); + }; + + const handleChange = ({ keys, value }) => { + setState(prevState => { + const updatedState = cloneDeep(prevState); + + set(updatedState, keys, value); + + return updatedState; + }); + }; return ( @@ -18,20 +65,27 @@ const ConditionsModal = ({ headerBreadCrumbs, isOpen, onClosed, onToggle }) => { })} - {/* {actions.length === 0 && ( + {actionsToDisplay.length === 0 && ( {formatMessage({ id: 'Settings.permissions.conditions.no-actions' })} )} - {actions.map((action, index) => ( - handleSelectChange(action.id, val)} - /> - ))} */} + {actionsToDisplay.map(({ actionId, label, pathToConditionsObject }, index) => { + const name = pathToConditionsObject.join('..'); + + return ( + + ); + })} @@ -51,6 +105,16 @@ const ConditionsModal = ({ headerBreadCrumbs, isOpen, onClosed, onToggle }) => { }; ConditionsModal.propTypes = { + actions: PropTypes.arrayOf( + PropTypes.shape({ + actionId: PropTypes.string.isRequired, + checkboxName: PropTypes.string, + hasSomeActionsSelected: PropTypes.bool.isRequired, + hasAllActionsSelected: PropTypes.bool, + isDisplayed: PropTypes.bool.isRequired, + label: PropTypes.string, + }) + ).isRequired, headerBreadCrumbs: PropTypes.arrayOf(PropTypes.string).isRequired, isOpen: PropTypes.bool.isRequired, onClosed: PropTypes.func.isRequired, diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/createDefaultConditionsForm.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/createDefaultConditionsForm.js new file mode 100644 index 0000000000..d68d63cda3 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/createDefaultConditionsForm.js @@ -0,0 +1,46 @@ +import { get } from 'lodash'; + +const createConditionsForm = (conditions, valueObject) => { + return conditions.reduce((acc, current) => { + acc[current.id] = get(valueObject, current.id, true); + + return acc; + }, {}); +}; + +const createCategoryForm = (arrayOfOptions, valueObject) => { + return arrayOfOptions.reduce((acc, current) => { + const [categoryName, relatedConditions] = current; + + const conditionsForm = createConditionsForm(relatedConditions, valueObject); + + acc[categoryName] = conditionsForm; + + return acc; + }, {}); +}; + +const createDefaultConditionsForm = ( + actionsToDisplay, + modifiedData, + arrayOfOptionsGroupedByCategory +) => { + return actionsToDisplay.reduce((acc, current) => { + const valueFromModifiedData = get( + modifiedData, + [...current.pathToConditionsObject, 'conditions'], + {} + ); + + const categoryDefaultForm = createCategoryForm( + arrayOfOptionsGroupedByCategory, + valueFromModifiedData + ); + + acc[current.pathToConditionsObject.join('..')] = categoryDefaultForm; + + return acc; + }, {}); +}; + +export default createDefaultConditionsForm; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/selectStyle.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/selectStyle.js new file mode 100644 index 0000000000..af31eb6321 --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ConditionsModal/utils/selectStyle.js @@ -0,0 +1,95 @@ +/* eslint-disable indent */ +/* eslint-disable no-nested-ternary */ + +const selectStyle = { + container: base => ({ + ...base, + width: '70%', + alignItems: 'center', + height: '36px', + }), + menu: base => ({ + ...base, + margin: '0', + paddingTop: 0, + borderRadius: '2px !important', + borderTopLeftRadius: '0 !important', + borderTopRightRadius: '0 !important', + border: '1px solid #78caff !important', + boxShadow: 0, + borderTop: '0 !important', + fontSize: '13px', + }), + menuList: base => ({ + ...base, + paddingBottom: 9, + paddingTop: 10, + }), + multiValue: base => ({ + ...base, + backgroundColor: 'none', + color: '#333740', + }), + multiValueLabel: base => ({ + ...base, + fontSize: '13px', + }), + multiValueRemove: base => ({ + ...base, + display: 'none', + }), + + control: (base, state) => { + const borderRadiusStyle = state.selectProps.menuIsOpen + ? { + borderBottomLeftRadius: '0 !important', + borderBottomRightRadius: '0 !important', + } + : {}; + + const { + selectProps: { error, value }, + } = state; + + let border; + let borderBottom; + + if (state.isFocused) { + border = '1px solid #78caff !important'; + } else if (error && !value.length) { + border = '1px solid #f64d0a !important'; + } else { + border = '1px solid #e3e9f3 !important'; + } + + if (state.menuIsOpen === true) { + borderBottom = '1px solid #e3e9f3 !important'; + } + + return { + ...base, + fontSize: 13, + minHeight: 34, + top: '1px', + border, + outline: 0, + boxShadow: 0, + borderRadius: '2px !important', + ...borderRadiusStyle, + borderBottom, + }; + }, + valueContainer: base => ({ + ...base, + padding: '2px 4px 4px 10px', + lineHeight: '18px', + minWidth: 200, + }), + placeholder: base => ({ + ...base, + paddingTop: 1, + color: 'black', + }), +}; + +export default selectStyle; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js index db35658bc9..b73e133a9d 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js @@ -108,6 +108,7 @@ const Collapse = ({ availableActions, isActive, isGrey, label, onClickToggle, pa {modalState.isMounted && ( { - return availableActions.map(({ actionId, isDisplayed, applyToProperties }) => { + return availableActions.map(({ actionId, isDisplayed, applyToProperties, label }) => { if (!isDisplayed) { return { actionId, hasSomeActionsSelected: false, isDisplayed }; } @@ -29,6 +29,8 @@ const generateCheckboxesActions = (availableActions, modifiedData, pathToData) = hasSomeActionsSelected: value, isDisplayed, isParentCheckbox: false, + label, + pathToConditionsObject: baseCheckboxNameArray, }; } @@ -44,6 +46,8 @@ const generateCheckboxesActions = (availableActions, modifiedData, pathToData) = hasSomeActionsSelected, isDisplayed, isParentCheckbox: true, + label, + pathToConditionsObject: baseCheckboxNameArray, }; }); }; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/index.js index 4746f3ddb3..f8d01b15bd 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/index.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/index.js @@ -68,6 +68,7 @@ const Permissions = forwardRef(({ layout }, ref) => { return ( useContext(PermissionsDataManagerContext PermissionsDataManagerProvider.propTypes = { children: PropTypes.node.isRequired, value: PropTypes.exact({ + availableConditions: PropTypes.array.isRequired, modifiedData: PropTypes.object.isRequired, onChangeCollectionTypeLeftActionRowCheckbox: PropTypes.func.isRequired, onChangeSimpleCheckbox: PropTypes.func.isRequired, diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/temp/fakeData.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/temp/fakeData.js index bdd5902292..5b3e8645be 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/temp/fakeData.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/temp/fakeData.js @@ -424,6 +424,7 @@ const data = { label: 'Publish', actionId: 'content-manager.explorer.publish', subjects: ['restaurant'], + applyToProperties: ['locales'], }, ], },