web-interface.assets.bb8c8232-1143.d97cae61cfd6dd8c0ce8.js.map Maven / Gradle / Ivy
{"version":3,"file":"bb8c8232-1143.d97cae61cfd6dd8c0ce8.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","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/components/events/EventsPageNavigation.tsx","webpack://graylog-web-interface/./src/pages/CreateEventNotificationPage.tsx","webpack://graylog-web-interface/./node_modules/lodash/clone.js"],"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 styled, { css } from 'styled-components';\n\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\nimport NavItemStateIndicator, {\n hoverIndicatorStyles,\n activeIndicatorStyles,\n} from 'components/common/NavItemStateIndicator';\n\nconst Container = styled(ButtonToolbar)`\n margin-bottom: 10px;\n`;\n\nconst StyledButton = styled(Button)(({ theme }) => css`\n font-family: ${theme.fonts.family.navigation};\n font-size: ${theme.fonts.size.navigation};\n color: ${theme.colors.variant.darker.default};\n \n &:hover,\n &:focus {\n background: inherit;\n text-decoration: none;\n }\n\n &:hover {\n color: inherit;\n ${hoverIndicatorStyles(theme)}\n }\n\n &.active {\n color: ${theme.colors.global.textDefault};\n\n ${activeIndicatorStyles(theme)}\n\n &:hover,\n &:focus {\n ${activeIndicatorStyles(theme)}\n }\n`);\n\nStyledButton.displayName = 'Button';\n\ntype Props = {\n /**\n * List of nav items. Define permissions, if the item should only be displayed for users with specific permissions.\n * By default, an item is active if the current URL starts with the item URL.\n * If you only want to display an item as active only when its path matches exactly, set `exactPathMatch` to true.\n */\n items: Array<{\n title: string,\n path: string,\n permissions?: string | Array\n exactPathMatch?: boolean,\n }>\n}\n\n/**\n * Simple tab navigation to allow navigating to subareas of a page.\n */\nconst PageNavigation = ({ items }: Props) => (\n \n {items.map(({ path, title, permissions, exactPathMatch }) => {\n if (!path) {\n return null;\n }\n\n return (\n \n \n \n \n {title}\n \n \n \n \n );\n })}\n \n);\n\nexport default PageNavigation;\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 get from 'lodash/get';\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';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\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 = () => PluginStore.exports('eventNotificationTypes')\n .map((type) => ({ label: type.displayName, value: type.type }));\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 sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.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, sendTelemetry, action, location } = this.props;\n\n sendTelemetry(\n action === 'create'\n ? TELEMETRY_EVENT_TYPE.NOTIFICATIONS.CREATE_CLICKED\n : TELEMETRY_EVENT_TYPE.NOTIFICATIONS.EDIT_CLICKED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-notification',\n app_action_value: `${action}-button`,\n });\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 { sendTelemetry, location } = this.props;\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.NOTIFICATION_TYPE_SELECTED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'notification-type-select',\n notification_type: nextType,\n });\n\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, sendTelemetry, location } = this.props;\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.NOTIFICATIONS.EXECUTE_TEST_CLICKED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-notification',\n app_action_value: 'execute-test-button',\n });\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 withLocation(withTelemetry(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 clone from 'lodash/clone';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { ConfirmLeaveDialog } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { EventNotificationsActions } from 'stores/event-notifications/EventNotificationsStore';\nimport withHistory from 'routing/withHistory';\n\nimport EventNotificationForm from './EventNotificationForm';\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 history: PropTypes.object.isRequired,\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 = cloneDeep(notification);\n\n nextNotification[key] = value;\n this.setState({ notification: nextNotification, isDirty: true, testResult: initialTestResult });\n };\n\n handleCancel = () => {\n const { history } = this.props;\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n };\n\n handleSubmit = () => {\n const { action, embedded, onSubmit, history } = this.props;\n const { notification } = this.state;\n\n this.setState({ isDirty: false });\n\n let promise;\n\n if (action === 'create') {\n promise = EventNotificationsActions.create(notification);\n\n promise.then(\n () => {\n if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\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 if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\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 = 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 withHistory(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 * as React from 'react';\n\nimport PageNavigation from 'components/common/PageNavigation';\nimport Routes from 'routing/Routes';\nimport { Row } from 'components/bootstrap';\n\nconst NAV_ITEMS = [\n { title: 'Alerts & Events', path: Routes.ALERTS.LIST, exactPathMatch: true },\n { title: 'Event Definitions', path: Routes.ALERTS.DEFINITIONS.LIST },\n { title: 'Notifications', path: Routes.ALERTS.NOTIFICATIONS.LIST },\n];\n\nconst EventsPageNavigation = () => (\n \n \n
\n);\n\nexport default EventsPageNavigation;\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';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { DocumentTitle, PageHeader } from 'components/common';\nimport Routes from 'routing/Routes';\nimport DocsHelper from 'util/DocsHelper';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport EventNotificationFormContainer from 'components/event-notifications/event-notification-form/EventNotificationFormContainer';\nimport EventsPageNavigation from 'components/events/EventsPageNavigation';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport useHistory from 'routing/useHistory';\n\nconst CreateEventDefinitionPage = () => {\n const currentUser = useCurrentUser();\n const history = useHistory();\n\n if (!isPermitted(currentUser.permissions, 'eventnotifications:create')) {\n history.push(Routes.NOTFOUND);\n }\n\n return (\n \n \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 \n \n \n
\n \n );\n};\n\nexport default CreateEventDefinitionPage;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n"],"names":["Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","getNotificationPlugin","type","n","formattedEventNotificationTypes","EventNotificationForm","props","enabled","event","notification","onSubmit","sendTelemetry","action","location","name","onChange","nextConfig","nextType","defaultConfig","onTest","embedded","formId","onCancel","validation","testResult","isSubmitEnabled","notificationPlugin","notificationFormComponent","testButtonText","withLocation","withTelemetry","initialValidation","initialTestResult","key","value","nextNotification","history","Routes","promise","errorResponse","body","response","isDirty","EventNotificationFormContainer","withHistory","NAV_ITEMS","currentUser","baseClone","CLONE_SYMBOLS_FLAG","clone","module"],"sourceRoot":""}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy