@patternfly/react-core#DropdownPosition JavaScript Examples
The following examples show how to use
@patternfly/react-core#DropdownPosition.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: WirelessEssidSelect.js From cockpit-wicked with GNU General Public License v2.0 | 5 votes |
WirelessEssidSelect = ({ essid, setEssid, iface }) => {
const [isOpen, setIsOpen] = useState(false);
const [essidList, setEssidList] = useState(undefined);
const refreshList = (name) => {
fetchEssidList(name)
.then(result => {
const list = [...new Set([...result])];
setEssidList(list.sort());
})
.catch(console.error);
};
const onToggle = isOpen => {
if (isOpen) {
setEssidList(undefined);
refreshList(iface.name);
}
setIsOpen(isOpen);
};
const onSelect = (selection) => {
setEssid(selection);
setIsOpen(false);
};
const renderOptions = () => {
if (!essidList) {
return [
<DropdownItem isDisabled key="scanning" icon={<Spinner size="md" />}>
{_("Scanning...")}
</DropdownItem>
];
}
if (essidList.length === 0) {
return [
<DropdownItem isDisabled key="no-networks-found" icon={<ExclamationIcon />}>
{_("No networks found")}
</DropdownItem>
];
}
return essidList.map(value => <DropdownItem key={value} onClick={() => onSelect(value)}>{value}</DropdownItem>);
};
return (
<InputGroup>
<TextInput id="essid" value={essid} onChange={setEssid} type="text" aria-label="Essid" />
<Dropdown
position={DropdownPosition.right}
isOpen={isOpen}
dropdownItems={renderOptions()}
toggle={
<DropdownToggle id="essid-scanned-list" toggleIndicator={null} onToggle={onToggle} aria-label="Essid scanned list">
<SearchIcon />
</DropdownToggle>
}
/>
</InputGroup>
);
}
Example #2
Source File: Launcher.js From operate-first.github.io-old with GNU General Public License v3.0 | 5 votes |
Launcher = () => {
const [isOpen, setIsOpen] = useState(false);
const {
site: {
siteMetadata: { clusters },
},
} = useStaticQuery(
graphql`
query {
site {
siteMetadata {
clusters {
name
clusters {
name
url
}
}
}
}
}
`
);
return (
<ApplicationLauncher
onSelect={() => setIsOpen(!isOpen)}
onToggle={(v) => setIsOpen(v)}
position={DropdownPosition.right}
isOpen={isOpen}
items={clusters.map((group) => (
<ApplicationLauncherGroup label={group.name} key={group.name}>
{group.clusters.map((cluster) => (
<ApplicationLauncherItem
key={cluster.name}
isExternal
href={cluster.url}
icon={<OpenshiftIcon color="red" />}
>
{cluster.name} - Red Hat OpenShift Console
</ApplicationLauncherItem>
))}
</ApplicationLauncherGroup>
))}
isGrouped
/>
);
}
Example #3
Source File: GroupsDetail.js From edge-frontend with Apache License 2.0 | 4 votes |
GroupsDetail = () => {
const dispatch = useDispatch();
const params = useParams();
const history = useHistory();
const { groupId } = params;
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
const [isAddModalOpen, setIsAddModalOpen] = useState(false);
const [removeModal, setRemoveModal] = useState({
isOpen: false,
name: '',
deviceId: null,
});
const [updateModal, setUpdateModal] = useState({
isOpen: false,
deviceData: null,
imageData: null,
});
const [response, fetchDevices] = useApi({
api: getGroupById,
id: groupId,
tableReload: true,
});
const { data, isLoading, hasError } = response;
const groupName = data?.DeviceGroup?.Name;
const [deviceIds, getDeviceIds] = useState([]);
const [hasModalSubmitted, setHasModalSubmitted] = useState(false);
const [modalState, setModalState] = useState({ id: null, name: '' });
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const [isRenameModalOpen, setIsRenameModalOpen] = useState(false);
const handleDeleteModal = (id, name) => {
setModalState({ id, name });
setIsDeleteModalOpen(true);
};
const handleRenameModal = (id, name) => {
setModalState({ id, name });
setIsRenameModalOpen(true);
};
const removeDeviceLabel = () =>
`Do you want to remove ${
deviceIds.length > 0
? `${deviceIds.length} system${deviceIds.length === 1 ? '' : 's'}`
: `${removeModal.name}`
} from ${groupName}?`;
useEffect(() => {
history.push({
pathname: history.location.pathname,
search: stateToUrlSearch('add_system_modal=true', isAddModalOpen),
});
}, [isAddModalOpen]);
const handleSingleDeviceRemoval = () => {
const statusMessages = {
onSuccess: {
title: 'Success',
description: `${removeModal.name} has been removed successfully`,
},
onError: { title: 'Error', description: 'Failed to remove device' },
};
apiWithToast(
dispatch,
() => removeDeviceFromGroupById(groupId, removeModal.deviceId),
statusMessages
);
setTimeout(() => setHasModalSubmitted(true), 800);
};
const handleBulkDeviceRemoval = () => {
const statusMessages = {
onSuccess: {
title: 'Success',
description: `${deviceIds.length} systems have been removed successfully`,
},
onError: { title: 'Error', description: 'failed to remove systems' },
};
apiWithToast(
dispatch,
() =>
removeDevicesFromGroup(
parseInt(groupId),
deviceIds.map((device) => ({ ID: device.deviceID }))
),
statusMessages
);
setTimeout(() => setHasModalSubmitted(true), 800);
};
return (
<>
<PageHeader className="pf-m-light">
{groupName ? (
<Breadcrumb>
<BreadcrumbItem>
<Link to={`${paths['fleet-management']}`}>Groups</Link>
</BreadcrumbItem>
<BreadcrumbItem>{groupName}</BreadcrumbItem>
</Breadcrumb>
) : (
<Breadcrumb isActive>
<Skeleton width="100px" />
</Breadcrumb>
)}
<Flex justifyContent={{ default: 'justifyContentSpaceBetween' }}>
<FlexItem>
{groupName ? (
<PageHeaderTitle title={groupName} />
) : (
<Skeleton width="150px" />
)}
</FlexItem>
<FlexItem>
<Dropdown
position={DropdownPosition.right}
toggle={
<DropdownToggle
id="image-set-details-dropdown"
toggleIndicator={CaretDownIcon}
onToggle={(newState) => setIsDropdownOpen(newState)}
isDisabled={false}
>
Actions
</DropdownToggle>
}
isOpen={isDropdownOpen}
dropdownItems={[
<DropdownItem
key="delete-device-group"
onClick={() => handleDeleteModal(groupId, groupName)}
>
Delete group
</DropdownItem>,
<DropdownItem
key="rename-device-group"
onClick={() => handleRenameModal(groupId, groupName)}
>
Rename group
</DropdownItem>,
<DropdownItem
key="update-all-devices"
isDisabled={canUpdateSelectedDevices({
deviceData: data?.DevicesView?.devices?.map((device) => ({
imageSetId: device?.ImageSetID,
})),
imageData: data?.DevicesView?.devices?.some(
(device) => device.ImageID
),
})}
onClick={() => {
setIsDropdownOpen(false);
setUpdateModal((prevState) => ({
...prevState,
isOpen: true,
deviceData: data?.DevicesView?.devices?.map((device) => ({
id: device?.DeviceUUID,
display_name:
device?.DeviceName === ''
? 'localhost'
: device?.DeviceName,
})),
imageSetId: data?.DevicesView?.devices.find(
(device) => device.ImageSetID
)?.ImageSetID,
}));
}}
>
Update
</DropdownItem>,
]}
/>
</FlexItem>
</Flex>
</PageHeader>
<Main className="edge-devices">
{!emptyStateNoFliters(
isLoading,
data?.DeviceGroup?.Devices.length,
history
) ? (
<DeviceTable
data={data?.DevicesView?.devices || []}
count={data?.DevicesView?.total}
isLoading={isLoading}
hasError={hasError}
hasCheckbox={true}
handleSingleDeviceRemoval={handleSingleDeviceRemoval}
kebabItems={[
{
isDisabled: !(deviceIds.length > 0),
title: 'Remove from group',
onClick: () =>
setRemoveModal({
name: '',
deviceId: null,
isOpen: true,
}),
},
{
isDisabled: canUpdateSelectedDevices({
deviceData: deviceIds,
imageData: deviceIds[0]?.updateImageData,
}),
title: 'Update selected',
onClick: () =>
setUpdateModal((prevState) => ({
...prevState,
isOpen: true,
deviceData: [...deviceIds],
imageSetId: deviceIds.find((device) => device?.imageSetId)
.imageSetId,
})),
},
]}
selectedItems={getDeviceIds}
setRemoveModal={setRemoveModal}
setIsAddModalOpen={setIsAddModalOpen}
setUpdateModal={setUpdateModal}
hasModalSubmitted={hasModalSubmitted}
setHasModalSubmitted={setHasModalSubmitted}
fetchDevices={fetchDevices}
isAddSystemsView={true}
/>
) : (
<Flex justifyContent={{ default: 'justifyContentCenter' }}>
<Empty
icon="plus"
title="Add systems to the group"
body="Create groups to help manage your systems more effectively."
primaryAction={{
text: 'Add systems',
click: () => setIsAddModalOpen(true),
}}
secondaryActions={[
{
type: 'link',
title: 'Learn more about system groups',
link: 'https://access.redhat.com/documentation/en-us/edge_management/2022/html-single/working_with_systems_in_the_edge_management_application/index',
},
]}
/>
</Flex>
)}
</Main>
{isAddModalOpen && (
<AddSystemsToGroupModal
groupId={groupId}
closeModal={() => setIsAddModalOpen(false)}
isOpen={isAddModalOpen}
reloadData={fetchDevices}
groupName={data?.DeviceGroup?.Name}
/>
)}
{removeModal.isOpen && (
<Modal
isOpen={removeModal.isOpen}
openModal={() => setRemoveModal(false)}
title={'Remove from group'}
submitLabel={'Remove'}
variant="danger"
schema={{
fields: [
{
component: componentTypes.PLAIN_TEXT,
name: 'warning-text',
label: removeDeviceLabel(),
},
],
}}
onSubmit={
removeModal.deviceId
? handleSingleDeviceRemoval
: handleBulkDeviceRemoval
}
reloadData={fetchDevices}
/>
)}
{updateModal.isOpen && (
<Suspense
fallback={
<Bullseye>
<Spinner />
</Bullseye>
}
>
<UpdateDeviceModal
navigateBack={() => {
history.push({ pathname: history.location.pathname });
setUpdateModal((prevState) => {
return {
...prevState,
isOpen: false,
};
});
}}
setUpdateModal={setUpdateModal}
updateModal={updateModal}
refreshTable={fetchDevices}
/>
</Suspense>
)}
{isDeleteModalOpen && (
<DeleteGroupModal
isModalOpen={isDeleteModalOpen}
setIsModalOpen={setIsDeleteModalOpen}
reloadData={() => history.push(paths['fleet-management'])}
modalState={modalState}
/>
)}
{isRenameModalOpen && (
<RenameGroupModal
isModalOpen={isRenameModalOpen}
setIsModalOpen={setIsRenameModalOpen}
reloadData={() => fetchDevices()}
modalState={modalState}
/>
)}
</>
);
}
Example #4
Source File: DetailsHeader.js From edge-frontend with Apache License 2.0 | 4 votes |
DetailsHead = ({ imageData, imageVersion, openUpdateWizard }) => {
const [isOpen, setIsOpen] = useState(false);
const [data, setData] = useState({});
useEffect(() => {
setData(imageData?.data?.Data);
}, [imageData]);
return (
<>
{!imageData.isLoading && imageData.hasError ? (
<Breadcrumb>
<BreadcrumbItem>
<Link to={paths['manage-images']}>Back to Manage Images</Link>
</BreadcrumbItem>
</Breadcrumb>
) : (
<>
<Breadcrumb>
<BreadcrumbItem>
<Link to={paths['manage-images']}>Manage Images</Link>
</BreadcrumbItem>
{imageVersion ? (
<BreadcrumbItem>
<Link to={`${paths['manage-images']}/${data?.image_set?.ID}`}>
{data?.image_set?.Name}
</Link>
</BreadcrumbItem>
) : (
<BreadcrumbItem isActive>
{data?.image_set?.Name || <Skeleton width="100px" />}
</BreadcrumbItem>
)}
{imageVersion && (
<BreadcrumbItem isActive>
{imageVersion?.image?.Version}
</BreadcrumbItem>
)}
</Breadcrumb>
<TextContent>
<Split>
<SplitItem>
<TextList component="dl">
<TextListItem
component="h1"
className="grid-align-center pf-u-mb-0"
>
{data?.image_set?.Name || <Skeleton width="150px" />}
</TextListItem>
<TextListItem className="pf-u-pt-sm" component="dd">
{data?.Status || data?.images?.[0]?.image?.Status ? (
<Status
type={data?.images?.[0]?.image?.Status.toLowerCase()}
/>
) : (
<Skeleton width="100px" />
)}
</TextListItem>
{imageVersion?.image?.UpdatedAt ||
data?.images?.[0].image?.UpdatedAt ? (
<TextListItem component="p">
{`Last updated `}
<DateFormat
date={
imageVersion
? imageVersion?.image?.UpdatedAt
: data?.images?.[0].image?.UpdatedAt
}
/>
</TextListItem>
) : (
<Skeleton width="200px" />
)}
</TextList>
</SplitItem>
<SplitItem isFilled></SplitItem>
<SplitItem>
<Dropdown
position={DropdownPosition.right}
toggle={
<DropdownToggle
id="image-set-details-dropdown"
toggleIndicator={CaretDownIcon}
onToggle={(newState) => setIsOpen(newState)}
isDisabled={
(imageVersion
? imageVersion?.image?.Status
: data?.Images?.[0]?.Status) === 'BUILDING' || false
}
>
Actions
</DropdownToggle>
}
isOpen={isOpen}
dropdownItems={dropdownItems(
data,
imageVersion,
openUpdateWizard
)}
/>
</SplitItem>
</Split>
</TextContent>
</>
)}
</>
);
}