@patternfly/react-core#FormSelect JavaScript Examples
The following examples show how to use
@patternfly/react-core#FormSelect.
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: ActivationKeysFormSelect.js From sed-frontend with Apache License 2.0 | 6 votes |
ActivationKeysFormSelect = (props) => {
const {
label,
popover,
data,
onSelect,
helperText,
name,
value,
placeholderValue,
disableDefaultValues,
} = props;
const [selected, setSelected] = useState('');
const options = data.map((role) => {
return <FormSelectOption key={role} value={role} label={role} />;
});
const valueChange = (value) => {
setSelected(value);
onSelect(value);
};
return (
<FormGroup label={label} labelIcon={popover} helperText={helperText}>
<FormSelect
onChange={valueChange}
value={selected || value}
name={name}
aria-label={placeholderValue}
>
<FormSelectOption
label={placeholderValue}
isPlaceholder={true}
isDisabled={disableDefaultValues}
/>
{options}
</FormSelect>
</FormGroup>
);
}
Example #2
Source File: requestCertificate.jsx From cockpit-certificates with GNU Lesser General Public License v2.1 | 6 votes |
CAsRow = ({ ca, setCa, cas }) => {
return (
<FormGroup fieldId="ca" label={_("CA")}>
<FormSelect id="ca"
value={ca}
onChange={value => setCa(value)}>
{cas.map(ca => {
const nick = ca.nickname.v == "SelfSign" ? _("Self-signed") : ca.nickname.v;
return (
<FormSelectOption value={ca.nickname.v} key={ca.nickname.v}
label={nick} />
);
})}
</FormSelect>
</FormGroup>
);
}
Example #3
Source File: BootProtoSelector.js From cockpit-wicked with GNU General Public License v2.0 | 6 votes |
BootProtoSelector = ({ value, onChange }) => {
return (
<FormSelect value={value} onChange={onChange} id="bootProto">
{bootProtocolOptions.map((option, index) => (
<FormSelectOption key={option.value} value={option.value} label={option.label} />
))}
</FormSelect>
);
}
Example #4
Source File: report-builder.js From ibutsu-server with MIT License | 5 votes |
render() {
document.title = 'Report Builder | Ibutsu';
const { columns, rows, actions } = this.state;
const reportTypes = this.state.reportTypes.map((reportType) => <FormSelectOption key={reportType.type} value={reportType.type} label={reportType.name} />);
const pagination = {
page: this.state.page,
pageSize: this.state.pageSize,
totalItems: this.state.totalItems
};
return (
<React.Fragment>
<PageSection variant={PageSectionVariants.light}>
<TextContent>
<Text component="h1">Report Builder</Text>
</TextContent>
</PageSection>
<PageSection>
<Card>
<CardBody>
<Form isHorizontal>
<FormGroup isRequired label="Report Type" helperText="The type of report" fieldId="report-type">
<FormSelect id="report-type" value={this.state.reportType} onChange={this.onReportTypeChange}>
{reportTypes}
</FormSelect>
</FormGroup>
<FormGroup label="Filter" fieldId="report-filter">
<TextInput type="text" id="report-filter" value={this.state.reportFilter} onChange={this.onReportFilterChange} />
<ExpandableSection toggleText="Filter Help" onToggle={this.onHelpToggle} isExpanded={this.state.isHelpExpanded}>
<TextContent>
<p>The filter parameter takes a comma-separated list of filters to apply. <Linkify componentDecorator={linkifyDecorator}>https://docs.ibutsu-project.org/en/latest/user-guide/filter-help.html</Linkify></p>
</TextContent>
</ExpandableSection>
</FormGroup>
<FormGroup label="Source" helperText="The source of report" fieldId="report-source">
<TextInput type="text" id="report-source" value={this.state.reportSource} onChange={this.onReportSourceChange} />
</FormGroup>
<ActionGroup>
<Button variant="primary" onClick={this.onRunReportClick}>Run Report</Button>
</ActionGroup>
</Form>
</CardBody>
<CardFooter>
<Text className="disclaimer" component="h4">
* Note: reports can only show a maximum of 100,000 results.
</Text>
</CardFooter>
</Card>
</PageSection>
<PageSection>
<Card>
<CardBody>
<FilterTable
columns={columns}
rows={rows}
actions={actions}
pagination={pagination}
isEmpty={this.state.isEmpty}
isError={this.state.isError}
onSetPage={this.setPage}
onSetPageSize={this.setPageSize}
/>
</CardBody>
</Card>
</PageSection>
</React.Fragment>
);
}
Example #5
Source File: StartMode.js From cockpit-wicked with GNU General Public License v2.0 | 5 votes |
StartMode = ({ connection }) => {
const [isOpen, setIsOpen] = useState(false);
const [startMode, setStartMode] = useState(connection.startMode);
const dispatch = useNetworkDispatch();
const closeForm = () => setIsOpen(false);
const openForm = () => setIsOpen(true);
const handleSubmit = () => {
// TODO: notify that something went wrong.
if (connection.exists) {
updateConnection(dispatch, connection, { startMode });
} else {
addConnection(dispatch, { ...connection, startMode });
}
closeForm();
};
const renderLink = () => {
const label = connection.exists ? startModeEnum.label(connection.startMode) : _("Not configured");
return <a href="#" onClick={openForm}>{label}</a>;
};
const renderModalForm = () => {
if (!isOpen) return;
return (
<ModalForm
caption={connection.name}
title={_("Start Mode")}
variant={ModalVariant.small}
isOpen={isOpen}
onSubmit={handleSubmit}
onCancel={closeForm}
>
<FormSelect value={startMode} onChange={setStartMode} id="startMode">
{startModeOptions.map((option, index) => (
<FormSelectOption key={index} value={option.value} label={option.label} />
))}
</FormSelect>
</ModalForm>
);
};
return (
<>
{ renderLink() }
{ renderModalForm() }
</>
);
}
Example #6
Source File: BondForm.js From cockpit-wicked with GNU General Public License v2.0 | 4 votes |
BondForm = ({ isOpen, onClose, connection }) => {
const { bond } = connection || {};
const isEditing = !!connection;
const [name, setName] = useState(connection?.name || "");
const [mode, setMode] = useState(bond?.mode || bondingModes.ACTIVE_BACKUP);
const [options, setOptions] = useState(bond?.options || "miimon=100");
const [selectedInterfaces, setSelectedInterfaces] = useState(bond?.interfaces || []);
const [candidateInterfaces, setCandidateInterfaces] = useState([]);
const { interfaces } = useNetworkState();
const dispatch = useNetworkDispatch();
useEffect(() => {
if (isEditing) {
setCandidateInterfaces(Object.values(interfaces).filter(i => i.name !== connection.name));
} else {
setCandidateInterfaces(Object.values(interfaces));
}
}, [connection, isEditing, interfaces]);
const addOrUpdateConnection = () => {
const bondingAttrs = {
name,
bond: {
mode,
interfaces: selectedInterfaces,
options
}
};
if (isEditing) {
updateConnection(dispatch, connection, bondingAttrs);
} else {
addConnection(dispatch, { ...bondingAttrs, type: interfaceType.BONDING });
}
onClose();
};
const handleSelectedInterfaces = (name) => (value) => {
if (value) {
setSelectedInterfaces([...selectedInterfaces, name]);
} else {
setSelectedInterfaces(selectedInterfaces.filter(i => i !== name));
}
};
const isIncomplete = () => {
return (name === "" || selectedInterfaces.length === 0);
};
return (
<ModalForm
caption={connection?.name}
title={isEditing ? _("Edit Bond") : _("Add Bond")}
isOpen={isOpen}
onCancel={onClose}
onSubmit={addOrUpdateConnection}
onSubmitDisable={isIncomplete()}
onSubmitLabel={isEditing ? _("Change") : _("Add")}
>
<FormGroup
label={_("Name")}
isRequired
fieldId="interface-name"
helperText={_("Please, provide the interface name (e.g., bond0)")}
>
<TextInput
isRequired
isDisabled={isEditing}
id="interface-name"
value={name}
onChange={setName}
/>
</FormGroup>
<FormGroup
label={_("Interfaces")}
isRequired
>
{candidateInterfaces.map(({ name }) => (
<Checkbox
label={name}
key={name}
isChecked={selectedInterfaces.includes(name)}
onChange={handleSelectedInterfaces(name)}
/>
))}
</FormGroup>
<FormGroup
label={_("Mode")}
isRequired
fieldId="bonding-mode"
>
<FormSelect value={mode} onChange={setMode} id="bonding-mode">
{modeOptions.map((option, index) => (
<FormSelectOption key={index} {...option} />
))}
</FormSelect>
</FormGroup>
<FormGroup
label={_("Options")}
fieldId="bond-options"
helperText={_("Use this field to provide more options using the key=value format")}
>
<TextInput
isRequired
id="bond-options"
value={options}
onChange={setOptions}
/>
</FormGroup>
</ModalForm>
);
}
Example #7
Source File: RouteForm.js From cockpit-wicked with GNU General Public License v2.0 | 4 votes |
RouteForm = ({ isOpen, onClose, route }) => {
const isEditing = !!route;
const [isDefault, setIsDefault] = useState(route?.isDefault || false);
const [gateway, setGateway] = useState(route?.gateway || "");
const [destination, setDestination] = useState(route?.destination || "");
const [device, setDevice] = useState(route?.device || "");
const [options, setOptions] = useState(route?.options || "");
const [errors, setErrors] = useState([]);
const { interfaces, routes } = useNetworkState();
const [candidateInterfaces, setCandidateInterfaces] = useState([]);
const dispatch = useNetworkDispatch();
useEffect(() => {
setCandidateInterfaces([{ name: "" }, ...Object.values(interfaces)]);
}, [interfaces]);
/**
* Performs the form validations
*
* To be considered a valid form both, destination and gateway must be valid IPs values. There
* is only an exception for destination, which can be "default" too.
*
* @return {boolean} true when route is valid; false otherwise
*/
const validate = () => {
const errors = [];
if (!isDefault && !isValidIP(destination)) {
errors.push({
key: 'invalid-destination',
message: _("Destination is not valid.")
});
}
if (!isValidIP(gateway)) {
errors.push({
key: 'invalid-gateway',
message: _("Gateway is not valid.")
});
}
setErrors(errors);
return errors.length === 0;
};
const addOrUpdateRoute = () => {
if (!validate()) return;
if (isEditing) {
updateRoute(dispatch, routes, route.id, buildRouteData());
} else {
addRoute(dispatch, routes, buildRouteData());
}
onClose();
};
const buildRouteData = () => {
return {
isDefault,
destination: isDefault ? "default" : destination,
gateway,
device,
options
};
};
const isIncomplete = () => {
if (!isDefault && destination.length == 0) return true;
if (gateway.length == 0) return true;
return false;
};
/**
* Renders error messages in an Patternfly/Alert component, if any
*/
const renderErrors = () => {
if (errors.length === 0) return null;
return (
<Alert
isInline
variant="danger"
aria-live="polite"
title={_("Route is not valid, please check it.")}
>
{errors.map(({ key, message }) => <p key={key}>{message}</p>)}
</Alert>
);
};
/**
* Renders the destination input only when needed (i.e., route is not marked as a default)
*/
const renderDestination = () => {
if (isDefault) return null;
return (
<FormGroup
isRequired
label={_("Destination")}
fieldId="destination"
helperText={_("Destination")}
>
<TextInput
isRequired
id="destination"
value={destination}
onChange={setDestination}
/>
</FormGroup>
);
};
return (
<ModalForm
title={isEditing ? _("Edit Route") : _("Add Route")}
isOpen={isOpen}
onCancel={onClose}
onSubmit={addOrUpdateRoute}
onSubmitLabel={isEditing ? _("Change") : _("Add")}
onSubmitDisable={isIncomplete()}
>
{renderErrors()}
<FormGroup
label={_("Default route")}
fieldId="isDefault"
>
<Checkbox
id="isDefault"
isChecked={isDefault}
onChange={setIsDefault}
/>
</FormGroup>
{renderDestination()}
<FormGroup
isRequired
label={_("Gateway")}
fieldId="gateway"
>
<TextInput
isRequired
id="gateway"
value={gateway}
onChange={setGateway}
/>
</FormGroup>
<FormGroup
label={_("Device")}
fieldId="device"
>
<FormSelect value={device} onChange={setDevice} id="device">
{candidateInterfaces.map(({ name }, index) => (
<FormSelectOption key={index} value={name} label={name} />
))}
</FormSelect>
</FormGroup>
<FormGroup
label={_("Options")}
fieldId="options"
>
<TextInput
id="options"
value={options}
onChange={setOptions}
/>
</FormGroup>
</ModalForm>
);
}
Example #8
Source File: VlanForm.js From cockpit-wicked with GNU General Public License v2.0 | 4 votes |
VlanForm = ({ isOpen, onClose, connection }) => {
const { vlan } = connection || {};
const isEditing = !!connection;
const [name, setName] = useState(connection?.name);
const [vlanId, setVlanId] = useState(vlan?.vlanId || 0);
const [parentDevice, setParentDevice] = useState(vlan?.parentDevice);
const [candidateInterfaces, setCandidateInterfaces] = useState([]);
const { interfaces } = useNetworkState();
const dispatch = useNetworkDispatch();
const [suggestName, setSuggestName] = useState(!isEditing);
useEffect(() => {
setCandidateInterfaces(Object.values(interfaces).filter(i => i.type !== interfaceType.VLAN));
if (!parentDevice) setParentDevice(Object.values(interfaces)[0]?.name);
}, [interfaces, parentDevice]);
useEffect(() => {
if (!suggestName) return;
setName(`${parentDevice}.${vlanId}`);
}, [suggestName, parentDevice, vlanId]);
const addOrUpdateConnection = () => {
if (isEditing) {
updateConnection(dispatch, connection, { vlan: { name, vlanId, parentDevice } });
} else {
addConnection(dispatch, { name, type: interfaceType.VLAN, vlan: { vlanId, parentDevice } });
}
onClose();
};
const isIncomplete = () => {
if (name === "") return true;
if (vlanId === "") return true;
if (parentDevice === "") return true;
return false;
};
const updateName = (value) => {
setName(value);
setSuggestName(false);
};
if (!parentDevice) return null;
return (
<ModalForm
caption={connection?.name}
title={isEditing ? _("Edit VLAN") : _("Add VLAN")}
isOpen={isOpen}
onCancel={onClose}
onSubmit={addOrUpdateConnection}
onSubmitLabel={isEditing ? _("Change") : _("Add")}
onSubmitDisable={isIncomplete()}
>
<FormGroup
label={_("Parent")}
isRequired
fieldId="parentDevice"
>
<FormSelect value={parentDevice} onChange={setParentDevice} id="parentDevice">
{candidateInterfaces.map(({ name }) => (
<FormSelectOption key={name} value={name} label={name} />
))}
</FormSelect>
</FormGroup>
<FormGroup
label={_("VLAN ID")}
isRequired
fieldId="vlan_id"
helperText={_("Please, provide the VLAN ID (e.g., 10)")}
>
<TextInput
isRequired
id="vlan_id"
value={vlanId}
onChange={setVlanId}
type="number"
/>
</FormGroup>
<FormGroup
label={_("Name")}
isRequired
fieldId="interface-name"
helperText={_("Please, provide the interface name (e.g., vlan10)")}
>
<TextInput
isRequired
id="interface-name"
value={name}
onChange={updateName}
/>
</FormGroup>
</ModalForm>
);
}
Example #9
Source File: WirelessForm.js From cockpit-wicked with GNU General Public License v2.0 | 4 votes |
WirelessForm = ({ isOpen, onClose, iface, connection }) => {
const { wireless } = connection || {};
const isEditing = !!connection;
const [essid, setEssid] = useState(wireless?.essid);
const [mode, setMode] = useState(wireless?.mode || wirelessModes.MANAGED);
const [authMode, setAuthMode] = useState(wireless?.authMode || wirelessAuthModes.WEP_OPEN);
const [password, setPassword] = useState(wireless?.password || "");
const dispatch = useNetworkDispatch();
const addOrUpdateConnection = () => {
if (isEditing) {
updateConnection(
dispatch, connection,
{ wireless: { essid, mode, authMode, password } }
);
} else {
addConnection(
dispatch, { name: iface.name, type: interfaceType.WIRELESS, wireless: { essid, mode, authMode, password } }
);
}
onClose();
};
return (
<Modal
variant={ModalVariant.small}
title={isEditing ? _("Edit WiFi settings") : _("Add WiFi settings")}
isOpen={isOpen}
onClose={onClose}
actions={[
<Button key="confirm" variant="primary" onClick={addOrUpdateConnection}>
{isEditing ? _("Change") : _("Add")}
</Button>,
<Button key="cancel" variant="link" onClick={onClose}>
{_("Cancel")}
</Button>
]}
>
<Form>
<FormGroup
label={_("Mode")}
isRequired
fieldId="wireless-mode"
>
<FormSelect value={mode} onChange={setMode} id="wireless-mode">
{modeOptions.map((option, index) => (
<FormSelectOption key={index} {...option} />
))}
</FormSelect>
</FormGroup>
<FormGroup
label={_("ESSID")}
isRequired
fieldId="essid"
>
<WirelessEssidSelect essid={essid} setEssid={setEssid} iface={iface} />
</FormGroup>
<FormGroup
label={_("Auth Mode")}
isRequired
fieldId="wireless-auth-mode"
>
<FormSelect value={authMode} onChange={setAuthMode} id="wireless-auth-mode">
{authModeOptions.map((option, index) => (
<FormSelectOption key={index} {...option} />
))}
</FormSelect>
</FormGroup>
{ (authMode === "psk") &&
<FormGroup
label={_("Password")}
isRequired
fieldId="password"
>
<TextInput
isRequired
id="password"
value={password}
onChange={setPassword}
type='password'
/>
</FormGroup>}
</Form>
</Modal>
);
}