Changeset View
Changeset View
Standalone View
Standalone View
web/roles/role-actions-menu.react.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { useModalContext } from 'lib/components/modal-provider.react.js'; | import { useModalContext } from 'lib/components/modal-provider.react.js'; | ||||
import SWMansionIcon from 'lib/components/swmansion-icon.react.js'; | import SWMansionIcon from 'lib/components/swmansion-icon.react.js'; | ||||
import { useRoleUserSurfacedPermissions } from 'lib/shared/thread-utils.js'; | import { | ||||
roleIsDefaultRole, | |||||
useRoleUserSurfacedPermissions, | |||||
} from 'lib/shared/thread-utils.js'; | |||||
import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; | import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; | ||||
import { useRoleDeletableAndEditableStatus } from 'lib/utils/role-utils.js'; | import { useRoleDeletableAndEditableStatus } from 'lib/utils/role-utils.js'; | ||||
import CreateRolesModal from './create-roles-modal.react.js'; | import CreateRolesModal from './create-roles-modal.react.js'; | ||||
import DeleteRoleModal from './delete-role-modal.react.js'; | import DeleteRoleModal from './delete-role-modal.react.js'; | ||||
import css from './role-actions-menu.css'; | import css from './role-actions-menu.css'; | ||||
import MenuItem from '../components/menu-item.react.js'; | import MenuItem from '../components/menu-item.react.js'; | ||||
import Menu from '../components/menu.react.js'; | import Menu from '../components/menu.react.js'; | ||||
const menuIcon = <SWMansionIcon icon="menu-horizontal" size={20} />; | const menuIcon = <SWMansionIcon icon="menu-horizontal" size={20} />; | ||||
type RoleActionsMenuProps = { | type RoleActionsMenuProps = { | ||||
+threadInfo: ThreadInfo, | +threadInfo: ThreadInfo, | ||||
+roleName: string, | +roleName: string, | ||||
}; | }; | ||||
function RoleActionsMenu(props: RoleActionsMenuProps): React.Node { | function RoleActionsMenu(props: RoleActionsMenuProps): React.Node { | ||||
const { threadInfo, roleName } = props; | const { threadInfo, roleName } = props; | ||||
const { pushModal } = useModalContext(); | const { pushModal } = useModalContext(); | ||||
const defaultRoleID = Object.keys(threadInfo.roles).find( | const defaultRoleID = Object.keys(threadInfo.roles).find(roleID => | ||||
roleID => threadInfo.roles[roleID].isDefault, | roleIsDefaultRole(threadInfo.roles[roleID]), | ||||
); | ); | ||||
invariant(defaultRoleID, 'default role should exist'); | invariant(defaultRoleID, 'default role should exist'); | ||||
const existingRoleID = Object.keys(threadInfo.roles).find( | const existingRoleID = Object.keys(threadInfo.roles).find( | ||||
roleID => threadInfo.roles[roleID].name === roleName, | roleID => threadInfo.roles[roleID].name === roleName, | ||||
); | ); | ||||
invariant(existingRoleID, 'existing role should exist'); | invariant(existingRoleID, 'existing role should exist'); | ||||
▲ Show 20 Lines • Show All 79 Lines • Show Last 20 Lines |