in src/components/ConfigEditor.tsx [25:155]
export function ConfigEditor(props: Props) {
const { options, onOptionsChange } = props;
const onURLChange = (event: ChangeEvent<HTMLInputElement>) => {
const jsonData = {
...options.jsonData,
URL: event.target.value,
};
onOptionsChange({ ...options, jsonData });
};
const onTypeChange = (v: any) => {
const secureJsonData = (options.secureJsonData || {}) as MySecureJsonData;
const jsonData = {
...options.jsonData,
type: v.value,
username: '',
basicAuth: '',
};
if (v.value === AuthenticationType[0].value) {
secureJsonData.password = secureJsonData.password;
jsonData.username = options.jsonData.username;
jsonData.basicAuth = options.jsonData.basicAuth;
}
const p = {
...options,
jsonData,
secureJsonData,
};
onOptionsChange(p);
};
const onUserChange = (event: ChangeEvent<HTMLInputElement>) => {
const d = options.jsonData.basicAuth && options.jsonData.basicAuth.split('Basic ')[1] || '';
const password = d && atob(d).split(':')[1] || '';
const basicAuth = `Basic ${btoa(encodeURI(`${event.target.value}:${password}`))}`;
const jsonData = {
...options.jsonData,
username: event.target.value,
basicAuth,
};
onOptionsChange({
...options,
jsonData,
});
};
const onPasswordChange = (event: ChangeEvent<HTMLInputElement>) => {
const basicAuth = `Basic ${btoa(encodeURI(`${options.jsonData.username}:${event.target.value}`))}`;
const jsonData = {
...options.jsonData,
basicAuth,
};
onOptionsChange({
...options,
jsonData,
secureJsonData: {
password: event.target.value,
}
});
};
const onResetPassword = () => {
onOptionsChange({
...options,
jsonData: {
...options.jsonData,
basicAuth: '',
},
secureJsonFields: {
...options.secureJsonFields,
password: false,
},
secureJsonData: {
...options.secureJsonData,
password: '',
},
});
};
const secureJsonData = (options.secureJsonData || {}) as MySecureJsonData;
const { secureJsonFields, jsonData } = options;
return (
<div className="gf-form-group">
<InlineField label="URL" labelWidth={18}>
<Input
onChange={onURLChange}
value={jsonData.URL || ''}
placeholder="http://skywalking.example.com/graphql"
width={40}
/>
</InlineField>
<InlineField label="Authentication Type" labelWidth={18} >
<Select
options={AuthenticationType}
value={jsonData.type || AuthenticationType[1].value}
onChange={onTypeChange}
width={40}
placeholder="Choose an authentication type"
menuPlacement="bottom"
/>
</InlineField>
{jsonData.type === AuthenticationType[0].value &&
<div>
<InlineField label="User Name" labelWidth={18}>
<Input
onChange={onUserChange}
value={jsonData.username || ''}
placeholder="Please input username"
width={40}
/>
</InlineField>
<InlineField label="Password" labelWidth={18}>
<SecretInput
isConfigured={(secureJsonFields && secureJsonFields.password) as boolean}
type="password"
value={secureJsonData.password || ''}
placeholder="secure password field (backend only)"
width={40}
onReset={onResetPassword}
onChange={onPasswordChange}
/>
</InlineField>
</div>}
</div>
);
}