mirror of https://github.com/portainer/portainer
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import { Formik } from 'formik';
|
|
import { PropsWithChildren } from 'react';
|
|
|
|
import { OsSelector } from './OsSelector';
|
|
import { CommandTab } from './scripts';
|
|
import { ScriptTabs } from './ScriptTabs';
|
|
import { EdgeScriptSettingsFieldset } from './EdgeScriptSettingsFieldset';
|
|
import { validationSchema } from './EdgeScriptForm.validation';
|
|
import { ScriptFormValues, OS, Platform, EdgeInfo } from './types';
|
|
|
|
const edgePropertiesFormInitialValues: ScriptFormValues = {
|
|
allowSelfSignedCertificates: true,
|
|
envVars: '',
|
|
os: 'linux' as OS,
|
|
platform: 'k8s' as Platform,
|
|
nomadToken: '',
|
|
authEnabled: true,
|
|
tlsEnabled: false,
|
|
};
|
|
|
|
interface Props {
|
|
edgeInfo: EdgeInfo;
|
|
commands: CommandTab[] | Partial<Record<OS, CommandTab[]>>;
|
|
isNomadTokenVisible?: boolean;
|
|
asyncMode?: boolean;
|
|
}
|
|
|
|
export function EdgeScriptForm({
|
|
edgeInfo,
|
|
commands,
|
|
isNomadTokenVisible,
|
|
asyncMode,
|
|
children,
|
|
}: PropsWithChildren<Props>) {
|
|
const showOsSelector = !(commands instanceof Array);
|
|
|
|
return (
|
|
<div className="form-horizontal">
|
|
<Formik
|
|
initialValues={edgePropertiesFormInitialValues}
|
|
validationSchema={() => validationSchema(isNomadTokenVisible)}
|
|
onSubmit={() => {}}
|
|
>
|
|
{({ values, setFieldValue }) => (
|
|
<>
|
|
{children}
|
|
|
|
<EdgeScriptSettingsFieldset
|
|
isNomadTokenVisible={
|
|
isNomadTokenVisible && values.platform === 'nomad'
|
|
}
|
|
hideIdGetter={edgeInfo.id !== undefined}
|
|
/>
|
|
<div className="mt-8">
|
|
{showOsSelector && (
|
|
<OsSelector
|
|
value={values.os}
|
|
onChange={(value) => setFieldValue('os', value)}
|
|
/>
|
|
)}
|
|
<ScriptTabs
|
|
edgeId={edgeInfo.id}
|
|
edgeKey={edgeInfo.key}
|
|
values={values}
|
|
commands={showOsSelector ? commands[values.os] || [] : commands}
|
|
platform={values.platform}
|
|
onPlatformChange={(platform) =>
|
|
setFieldValue('platform', platform)
|
|
}
|
|
asyncMode={asyncMode}
|
|
/>
|
|
</div>
|
|
</>
|
|
)}
|
|
</Formik>
|
|
</div>
|
|
);
|
|
}
|