{"version":3,"file":"SubCategory.mjs","sources":["../../../../../admin/src/components/Permissions/PermissionRow/SubCategory.jsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\n\nimport { Box, Checkbox, Flex, Typography, Grid, VisuallyHidden } from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';\n\nimport CheckboxWrapper from './CheckboxWrapper';\n\nconst Border = styled.div`\n  flex: 1;\n  align-self: center;\n  border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst SubCategory = ({ subCategory }) => {\n  const { formatMessage } = useIntl();\n  const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } =\n    useUsersPermissions();\n\n  const currentScopedModifiedData = useMemo(() => {\n    return get(modifiedData, subCategory.name, {});\n  }, [modifiedData, subCategory]);\n\n  const hasAllActionsSelected = useMemo(() => {\n    return Object.values(currentScopedModifiedData).every((action) => action.enabled === true);\n  }, [currentScopedModifiedData]);\n\n  const hasSomeActionsSelected = useMemo(() => {\n    return (\n      Object.values(currentScopedModifiedData).some((action) => action.enabled === true) &&\n      !hasAllActionsSelected\n    );\n  }, [currentScopedModifiedData, hasAllActionsSelected]);\n\n  const handleChangeSelectAll = useCallback(\n    ({ target: { name } }) => {\n      onChangeSelectAll({ target: { name, value: !hasAllActionsSelected } });\n    },\n    [hasAllActionsSelected, onChangeSelectAll]\n  );\n\n  const isActionSelected = useCallback(\n    (actionName) => {\n      return selectedAction === actionName;\n    },\n    [selectedAction]\n  );\n\n  return (\n    <Box>\n      <Flex justifyContent=\"space-between\" alignItems=\"center\">\n        <Box paddingRight={4}>\n          <Typography variant=\"sigma\" textColor=\"neutral600\">\n            {subCategory.label}\n          </Typography>\n        </Box>\n        <Border />\n        <Box paddingLeft={4}>\n          <Checkbox\n            name={subCategory.name}\n            checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n            onCheckedChange={(value) =>\n              handleChangeSelectAll({ target: { name: subCategory.name, value } })\n            }\n          >\n            {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n          </Checkbox>\n        </Box>\n      </Flex>\n      <Flex paddingTop={6} paddingBottom={6}>\n        <Grid.Root gap={2} style={{ flex: 1 }}>\n          {subCategory.actions.map((action) => {\n            const name = `${action.name}.enabled`;\n\n            return (\n              <Grid.Item\n                col={4}\n                xs={12}\n                s={6}\n                key={action.name}\n                direction=\"column\"\n                alignItems=\"stretch\"\n              >\n                <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>\n                  <Checkbox\n                    checked={get(modifiedData, name, false)}\n                    name={name}\n                    onCheckedChange={(value) => onChange({ target: { name, value } })}\n                  >\n                    {action.label}\n                  </Checkbox>\n                  <button\n                    type=\"button\"\n                    onClick={() => onSelectedAction(action.name)}\n                    style={{ display: 'inline-flex', alignItems: 'center' }}\n                  >\n                    <VisuallyHidden tag=\"span\">\n                      {formatMessage(\n                        {\n                          id: 'app.utils.show-bound-route',\n                          defaultMessage: 'Show bound route for {route}',\n                        },\n                        {\n                          route: action.name,\n                        }\n                      )}\n                    </VisuallyHidden>\n                    <Cog id=\"cog\" cursor=\"pointer\" />\n                  </button>\n                </CheckboxWrapper>\n              </Grid.Item>\n            );\n          })}\n        </Grid.Root>\n      </Flex>\n    </Box>\n  );\n};\n\nSubCategory.propTypes = {\n  subCategory: PropTypes.object.isRequired,\n};\n\nexport default SubCategory;\n"],"names":["Border","styled","div","theme","colors","neutral150","SubCategory","subCategory","formatMessage","useIntl","onChange","onChangeSelectAll","onSelectedAction","selectedAction","modifiedData","useUsersPermissions","currentScopedModifiedData","useMemo","get","name","hasAllActionsSelected","Object","values","every","action","enabled","hasSomeActionsSelected","some","handleChangeSelectAll","useCallback","target","value","isActionSelected","actionName","_jsxs","Box","Flex","justifyContent","alignItems","_jsx","paddingRight","Typography","variant","textColor","label","paddingLeft","Checkbox","checked","onCheckedChange","id","defaultMessage","paddingTop","paddingBottom","Grid","Root","gap","style","flex","actions","map","Item","col","xs","s","direction","CheckboxWrapper","isActive","padding","hasRadius","button","type","onClick","display","VisuallyHidden","tag","route","Cog","cursor","propTypes","PropTypes","object","isRequired"],"mappings":"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"}