1- import React from 'react' ;
1+ import React , { useState } from 'react' ;
22import PropTypes from 'prop-types' ;
33import validatorTypes from '@data-driven-forms/react-form-renderer/validator-types' ;
44import componentTypes from '@data-driven-forms/react-form-renderer/component-types' ;
@@ -14,6 +14,7 @@ import { Button, Text } from '@patternfly/react-core';
1414import useInventoryGroups from '../../hooks/useInventoryGroups' ;
1515import { useFeatureFlags } from '../../utils' ;
1616import { FEATURE_INVENTORY_WORKSPACES_RENAME } from '../../constants/features' ;
17+ import CreateGroupModal from '../Groups/CreateGroupModal' ;
1718
1819const CreateGroupButton = ( { closeModal, workspaceRename } ) => (
1920 < >
@@ -61,13 +62,13 @@ const createSchema = (deviceIds, workspaceRename) => ({
6162const AddDeviceModal = ( {
6263 isModalOpen,
6364 setIsModalOpen,
64- setIsCreateGroupModalOpen,
6565 reloadData,
6666 deviceIds,
6767} ) => {
6868 const dispatch = useDispatch ( ) ;
6969
7070 const [ inventoryGroupsEnabled ] = useInventoryGroups ( false ) ;
71+ const [ isCreateGroupModalOpen , setIsCreateGroupModalOpen ] = useState ( false ) ;
7172 const useWorkspacesRename = useFeatureFlags (
7273 FEATURE_INVENTORY_WORKSPACES_RENAME
7374 ) ;
@@ -98,33 +99,46 @@ const AddDeviceModal = ({
9899 apiWithToast ( dispatch , addDevicesToGroupFunc , statusMessages ) ;
99100 } ;
100101 return (
101- < Modal
102- isOpen = { isModalOpen }
103- closeModal = { ( ) => setIsModalOpen ( false ) }
104- title = { `Add to ${
105- inventoryGroupsEnabled && useWorkspacesRename ? 'workspace' : 'group'
106- } `}
107- submitLabel = "Add"
108- additionalMappers = { {
109- 'search-input' : {
110- component : SearchInputApi ,
111- } ,
112- 'create-group-btn' : {
113- component : CreateGroupButton ,
114- closeModal : ( ) => {
115- setIsCreateGroupModalOpen ( true ) ;
116- setIsModalOpen ( false ) ;
102+ < >
103+ < Modal
104+ isOpen = { isModalOpen && ! isCreateGroupModalOpen }
105+ closeModal = { ( ) => setIsModalOpen ( false ) }
106+ title = { `Add to ${
107+ inventoryGroupsEnabled && useWorkspacesRename ? 'workspace' : 'group'
108+ } `}
109+ submitLabel = "Add"
110+ additionalMappers = { {
111+ 'search-input' : {
112+ component : SearchInputApi ,
113+ } ,
114+ 'create-group-btn' : {
115+ component : CreateGroupButton ,
116+ closeModal : ( ) => {
117+ setIsCreateGroupModalOpen ( true ) ;
118+ } ,
119+ workspaceRename : inventoryGroupsEnabled && useWorkspacesRename ,
117120 } ,
118- workspaceRename : inventoryGroupsEnabled && useWorkspacesRename ,
119- } ,
120- } }
121- schema = { createSchema (
122- deviceIds ,
123- inventoryGroupsEnabled && useWorkspacesRename
121+ } }
122+ schema = { createSchema (
123+ deviceIds ,
124+ inventoryGroupsEnabled && useWorkspacesRename
125+ ) }
126+ onSubmit = { handleAddDevices }
127+ reloadData = { reloadData }
128+ />
129+ { isCreateGroupModalOpen && (
130+ < CreateGroupModal
131+ isModalOpen = { isCreateGroupModalOpen }
132+ setIsModalOpen = { setIsCreateGroupModalOpen }
133+ reloadData = { reloadData }
134+ deviceIds = { deviceIds }
135+ // hasHostModal makes sure the host modal is opened
136+ // after this modal is closed
137+ hasHostModal
138+ setIsHostModalOpen = { setIsModalOpen }
139+ />
124140 ) }
125- onSubmit = { handleAddDevices }
126- reloadData = { reloadData }
127- />
141+ </ >
128142 ) ;
129143} ;
130144
@@ -133,7 +147,6 @@ export default AddDeviceModal;
133147AddDeviceModal . propTypes = {
134148 isModalOpen : PropTypes . bool ,
135149 setIsModalOpen : PropTypes . func ,
136- setIsCreateGroupModalOpen : PropTypes . func ,
137150 reloadData : PropTypes . func ,
138151 deviceIds : PropTypes . array ,
139152} ;
0 commit comments