Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
{"version":3,"file":"4e85aa7a-4053.0b5d13113386c00984c4.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/event-notifications/event-notification-details/EventNotificationActionLinks.jsx","webpack://graylog-web-interface/./src/components/event-notifications/event-notification-form/EventNotificationForm.jsx","webpack://graylog-web-interface/./src/components/event-notifications/event-notification-form/EventNotificationFormContainer.jsx","webpack://graylog-web-interface/./src/pages/EditEventNotificationPage.jsx"],"sourcesContent":["/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { LinkContainer } from 'components/common/router';\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { IfPermitted } from 'components/common';\nimport Routes from 'routing/Routes';\n\nconst EventNotificationActionLinks = ({ notificationId }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nEventNotificationActionLinks.propTypes = {\n notificationId: PropTypes.string.isRequired,\n};\n\nexport default EventNotificationActionLinks;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { FormSubmit, Select, Spinner } from 'components/common';\nimport { Alert, Button, Col, ControlLabel, FormControl, FormGroup, HelpBlock, Row, Input } from 'components/bootstrap';\nimport { getValueFromInput } from 'util/FormsUtils';\n\nconst getNotificationPlugin = (type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('eventNotificationTypes').find((n) => n.type === type) || {};\n};\n\nconst formattedEventNotificationTypes = () => {\n return PluginStore.exports('eventNotificationTypes')\n .map((type) => ({ label: type.displayName, value: type.type }));\n};\n\nclass EventNotificationForm extends React.Component {\n static propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n notification: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n testResult: PropTypes.shape({\n isLoading: PropTypes.bool,\n error: PropTypes.bool,\n message: PropTypes.string,\n }).isRequired,\n formId: PropTypes.string,\n embedded: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onTest: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n action: 'edit',\n formId: undefined,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n isSubmitEnabled: true,\n };\n }\n\n setIsSubmitEnabled = (enabled) => {\n this.setState({ isSubmitEnabled: enabled });\n };\n\n handleSubmit = (event) => {\n const { notification, onSubmit } = this.props;\n\n event.preventDefault();\n\n onSubmit(notification);\n };\n\n handleChange = (event) => {\n const { name } = event.target;\n const { onChange } = this.props;\n\n onChange(name, getValueFromInput(event.target));\n };\n\n handleConfigChange = (nextConfig) => {\n const { onChange } = this.props;\n\n onChange('config', nextConfig);\n };\n\n handleTypeChange = (nextType) => {\n const notificationPlugin = getNotificationPlugin(nextType);\n const defaultConfig = notificationPlugin.defaultConfig || {};\n\n this.handleConfigChange({ ...defaultConfig, type: nextType });\n };\n\n handleTestTrigger = () => {\n const { notification, onTest } = this.props;\n\n onTest(notification);\n };\n\n render() {\n const { action, embedded, formId, notification, onCancel, validation, testResult } = this.props;\n const { isSubmitEnabled } = this.state;\n\n const notificationPlugin = getNotificationPlugin(notification.config.type);\n const notificationFormComponent = notificationPlugin.formComponent\n ? React.createElement(notificationPlugin.formComponent, {\n config: notification.config,\n onChange: this.handleConfigChange,\n validation: validation,\n setIsSubmitEnabled: this.setIsSubmitEnabled,\n })\n : null;\n\n const testButtonText = testResult.isLoading ? : 'Execute Test Notification';\n\n return (\n \n
\n \n \n \n );\n }\n}\n\nexport default EventNotificationForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { ConfirmLeaveDialog } from 'components/common';\nimport history from 'util/History';\nimport Routes from 'routing/Routes';\nimport { EventNotificationsActions } from 'stores/event-notifications/EventNotificationsStore';\n\nimport EventNotificationForm from './EventNotificationForm';\n\n// Import built-in Event Notification Types\n\nimport {} from '../event-notification-types';\n\nconst initialValidation = {\n errors: {},\n};\n\nconst initialTestResult = {\n isLoading: false,\n};\n\nclass EventNotificationFormContainer extends React.Component {\n static propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n notification: PropTypes.object,\n /** Controls whether the form should be embedded into another one, and submitted/cancel externally */\n embedded: PropTypes.bool,\n /** Controls the ID of the form, so it can be controlled externally */\n formId: PropTypes.string,\n onSubmit: PropTypes.func,\n };\n\n static defaultProps = {\n action: 'edit',\n notification: {\n title: '',\n description: '',\n config: {},\n },\n embedded: false,\n formId: undefined,\n onSubmit: () => {},\n };\n\n static scrollToFirstError() {\n if (document.getElementsByClassName('has-error')[0] !== undefined) {\n document.getElementsByClassName('has-error')[0].scrollIntoView(true);\n }\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n notification: props.notification,\n validation: initialValidation,\n testResult: initialTestResult,\n isDirty: false,\n };\n }\n\n componentWillUnmount() {\n // Test request may take a while to return a result, cancel the promise before leaving the page.\n if (this.testPromise) {\n this.testPromise.cancel();\n }\n }\n\n handleChange = (key, value) => {\n const { notification } = this.state;\n const nextNotification = lodash.cloneDeep(notification);\n\n nextNotification[key] = value;\n this.setState({ notification: nextNotification, isDirty: true, testResult: initialTestResult });\n };\n\n // eslint-disable-next-line class-methods-use-this\n handleCancel = () => {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n };\n\n handleSubmit = () => {\n const { action, embedded, onSubmit } = this.props;\n const { notification } = this.state;\n\n let promise;\n\n if (action === 'create') {\n promise = EventNotificationsActions.create(notification);\n\n promise.then(\n () => {\n this.setState({ isDirty: false }, () => {\n if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n }\n });\n },\n (errorResponse) => {\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n this.setState({ validation: body });\n EventNotificationFormContainer.scrollToFirstError();\n }\n },\n );\n } else {\n promise = EventNotificationsActions.update(notification.id, notification);\n\n promise.then(\n () => {\n this.setState({ isDirty: false }, () => {\n if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n }\n });\n },\n (errorResponse) => {\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n this.setState({ validation: body });\n EventNotificationFormContainer.scrollToFirstError();\n }\n },\n );\n }\n\n onSubmit(promise);\n };\n\n handleTest = () => {\n const { notification } = this.state;\n\n this.setState({ testResult: { isLoading: true }, validation: initialValidation });\n const testResult = lodash.clone(initialTestResult);\n\n this.testPromise = EventNotificationsActions.test(notification);\n\n this.testPromise\n .then(\n (response) => {\n testResult.error = false;\n testResult.message = 'Notification was executed successfully.';\n\n return response;\n },\n (errorResponse) => {\n testResult.error = true;\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n testResult.message = 'Validation failed, please correct any errors in the form before continuing.';\n this.setState({ validation: body });\n } else {\n testResult.message = errorResponse.responseMessage || 'Unknown error, please check your Graylog server logs.';\n }\n },\n )\n .finally(() => {\n this.setState({ testResult: testResult });\n this.testPromise = undefined;\n });\n };\n\n render() {\n const { action, embedded, formId } = this.props;\n const { notification, validation, testResult, isDirty } = this.state;\n\n return (\n <>\n {!embedded && isDirty && (\n \n )}\n \n >\n );\n }\n}\n\nexport default EventNotificationFormContainer;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { DocumentTitle, PageHeader, Spinner } from 'components/common';\nimport Routes from 'routing/Routes';\nimport DocsHelper from 'util/DocsHelper';\nimport connect from 'stores/connect';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport history from 'util/History';\nimport EventNotificationFormContainer from 'components/event-notifications/event-notification-form/EventNotificationFormContainer';\nimport EventNotificationActionLinks from 'components/event-notifications/event-notification-details/EventNotificationActionLinks';\nimport withParams from 'routing/withParams';\nimport { CurrentUserStore } from 'stores/users/CurrentUserStore';\nimport { EventNotificationsActions } from 'stores/event-notifications/EventNotificationsStore';\nimport EventsPageNavigation from 'components/events/EventsPageNavigation';\n\nclass EditEventDefinitionPage extends React.Component {\n static propTypes = {\n params: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n notification: undefined,\n };\n }\n\n componentDidMount() {\n const { params, currentUser } = this.props;\n\n if (isPermitted(currentUser.permissions, `eventnotifications:edit:${params.notificationId}`)) {\n EventNotificationsActions.get(params.notificationId)\n .then(\n (notification) => this.setState({ notification: notification }),\n (error) => {\n if (error.status === 404) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n }\n },\n );\n }\n }\n\n render() {\n const { notification } = this.state;\n const { params, currentUser } = this.props;\n\n if (!isPermitted(currentUser.permissions, `eventnotifications:edit:${params.notificationId}`)) {\n history.push(Routes.NOTFOUND);\n }\n\n if (!notification) {\n return (\n \n \n \n \n \n \n \n );\n }\n\n return (\n \n \n }\n documentationLink={{\n title: 'Alerts documentation',\n path: DocsHelper.PAGES.ALERTS,\n }}>\n \n Notifications alert you of any configured Event when they occur. Graylog can send Notifications directly\n to you or to other systems you use for that purpose.\n \n \n\n \n