1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import isEqual from 'lodash/isEqual';
- import Form from 'sentry/components/deprecatedforms/form';
- import FormState from 'sentry/components/forms/state';
- import LoadingIndicator from 'sentry/components/loadingIndicator';
- import DefaultSettings from 'sentry/plugins/components/settings';
- type Props = DefaultSettings['props'];
- type State = DefaultSettings['state'] & {
- // NB: "On-premises" here refers to on-premises SessionStack, not Sentry.
- // That said, we only support connecting to an on-premises SessionStack from
- // a self-hosted Sentry: https://docs.sessionstack.com/docs/sentry.
- showOnPremisesConfiguration?: boolean;
- };
- class Settings extends DefaultSettings<Props, State> {
- REQUIRED_FIELDS = ['account_email', 'api_token', 'website_id'];
- ON_PREMISES_FIELDS = ['api_url', 'player_url'];
- renderFields(fields: State['fieldList']) {
- return fields?.map(f =>
- this.renderField({
- config: f,
- formData: this.state.formData,
- formErrors: this.state.errors,
- onChange: this.changeField.bind(this, f.name),
- })
- );
- }
- filterFields(fields: State['fieldList'], fieldNames: string[]) {
- return fields?.filter(field => fieldNames.includes(field.name)) ?? [];
- }
- toggleOnPremisesConfiguration = () => {
- this.setState({
- showOnPremisesConfiguration: !this.state.showOnPremisesConfiguration,
- });
- };
- render() {
- if (this.state.state === FormState.LOADING) {
- return <LoadingIndicator />;
- }
- if (this.state.state === FormState.ERROR && !this.state.fieldList) {
- return (
- <div className="alert alert-error m-b-1">
- An unknown error occurred. Need help with this?{' '}
- <a href="https://sentry.io/support/">Contact support</a>
- </div>
- );
- }
- const isSaving = this.state.state === FormState.SAVING;
- const hasChanges = !isEqual(this.state.initialData, this.state.formData);
- const requiredFields = this.filterFields(this.state.fieldList, this.REQUIRED_FIELDS);
- const onPremisesFields = this.filterFields(
- this.state.fieldList,
- this.ON_PREMISES_FIELDS
- );
- return (
- <Form onSubmit={this.onSubmit} submitDisabled={isSaving || !hasChanges}>
- {this.state.errors.__all__ && (
- <div className="alert alert-block alert-error">
- <ul>
- <li>{this.state.errors.__all__}</li>
- </ul>
- </div>
- )}
- {this.renderFields(requiredFields)}
- {onPremisesFields.length > 0 ? (
- <div className="control-group">
- <button
- className="btn btn-default"
- type="button"
- onClick={this.toggleOnPremisesConfiguration}
- >
- Configure on-premises
- </button>
- </div>
- ) : null}
- {this.state.showOnPremisesConfiguration
- ? this.renderFields(onPremisesFields)
- : null}
- </Form>
- );
- }
- }
- export default Settings;
|